Bug Tracker

Ticket #2095: gettext-new-plugin.patch

File gettext-new-plugin.patch, 8.4 KB (added by zimbatm, 12 years ago)
  • plugins/gettext/test/index.html

     
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
     3<head>
     4<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
     5<title>jquery.gettext.js Unit Test</title>
     6
     7<!-- load latest build of jquery.js -->
     8<script type="text/javascript" src="../../../jquery/dist/jquery.js"></script>
     9
     10<!-- load jquery.metadata.js plugin-->
     11<script type="text/javascript" src="../../metadata/jquery.metadata.js"></script>
     12
     13<!-- load testrunner from jquery project -->
     14<script type="text/javascript" src="../../../jquery/test/data/testrunner.js"></script>
     15
     16<!-- load jquery.gettext.js (this is what we're testing! -->
     17<script type="text/javascript" src="../jquery.gettext.js"></script>
     18
     19<link rel="Stylesheet" media="screen" href="../../../jquery/test/data/testsuite.css" />
     20
     21<script>
     22
     23test("string formatting", function() {
     24    var x = [
     25        ["hello world", "hello world"],
     26        ["%s %s", "%s %s"],
     27        ["%s %s", 1, "1 %s"],
     28        ["%s %s", 1, 2, 3, "1 2"],
     29        ["%{key}", "%{key}"],
     30        ["%{key}", {}, "%{key}"],
     31        ["%{universe} %{anwer}", {anser: 42}, "%{universe} 42"],
     32        ["%{universe} %{anwer}", {anser: 42, x:'y'}, "%{universe} 42"]
     33    ]
     34    for (var i=0;i<x.length; i++) {
     35        var wanted = x[i].pop();
     36        ok( _.apply(this, x[i]), "_( " + x[i] + " ) -> " + wanted );
     37    }
     38   
     39    expect(x.length);
     40});
     41
     42test("string translation", function() {
     43    $("#gettext").getText();
     44    ok( $.gettext.table.hello == "bonjour" );
     45   
     46    ok( _("hello") == "bonjour" );
     47    ok( _("welcome") == "bienvenue" );
     48   
     49    expect(3);
     50})
     51
     52</script>
     53</head>
     54<body id="body">
     55        <h1 id="banner">jquery.gettext.js - Test Suite</h1>
     56        <h2 id="userAgent"></h2>
     57
     58        <!-- Test HTML -->
     59        <div id="main" style="display: none;">
     60            <div id="targetDiv"></div>
     61        </div>
     62
     63        <ol id="tests"></ol>
     64
     65        <div id="gettext" class="{gettext:{
     66            hello: 'bonjour',
     67            welcome: 'bienvenue'
     68        }}" style="visibility: hidden">this div holds the translations</div>
     69</body>
     70</html>
  • plugins/gettext/tools/extract.sh

     
     1#!/bin/sh
     2#
     3# This is an example how you can extract the strings from javascript files.
     4
     5xgettext -L C -k_ *.js -o extract.pot
  • plugins/gettext/jquery.gettext.js

    Property changes on: plugins/gettext/tools/extract.sh
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1/*
     2 * jQuery GetText Plugin
     3 * version: 0.1
     4 * @requires jQuery v1.1 or later
     5 *
     6 * Dual licensed under the MIT and GPL licenses:
     7 *   http://www.opensource.org/licenses/mit-license.php
     8 *   http://www.gnu.org/licenses/gpl.html
     9 *
     10 * Revision: $Id$
     11 */
     12(function($){
     13/**
     14 * gettext() provides a mechanism for replacing strings by translations.
     15 *
     16 * gettext uses the jQuery.gettext.table to find the equivalents in another
     17 * language. It also supports two way of substituting variables in the string.
     18 *
     19 * The first argument is always the string to be translated. Then come
     20 * eventually the variables to substitute. There are two substitution formats.
     21 *
     22 * The first one, is a positionned format, where "%s" gets replaced. If an
     23 * argument is missing, the "%s" is simply left in place.
     24 *
     25 * @example _("%s %s", 1, 2);
     26 * @desc gives : "1 2"
     27 *
     28 * The second one, uses keywords. It is useful if the position can change in
     29 * other languages. The missing keywords are also left in place.
     30 *
     31 * @example _("%{key} %{word}", {word: 2, key: 1});
     32 * @desc gives: "1 2"
     33 *
     34 * Note that both formats cannot be used simultaneously.
     35 *
     36 * @example
     37 * (function($,_){
     38 *
     39 *   _("Translate %s", "me);
     40 *
     41 * })(jQuery, jQuery.gettext)
     42 * @desc Just a short example on how it could be used in another plugin.
     43 
     44 * @name gettext
     45 * @type Function
     46 * @param str String The string that you want to replace
     47 * @param args  Optional arguments to be placed in the string, can be of variable size
     48 * @cat Plugins/GetText
     49 * @return String
     50 */
     51$.gettext = $.gettext || function(str, args) {
     52    arguments[0] = $.gettext.translate.apply($.gettext, [arguments[0]]);
     53    return $.gettext.format.apply($.gettext, arguments);
     54}
     55
     56$.extend($.gettext, {
     57    /**
     58     * This is the table that contains the translations. The keys are the
     59     * original text and the values the translated-one. Note that only one
     60     * language can be loaded at a time.
     61     *
     62     * @name table
     63     * @type Object
     64     */
     65    table: {},
     66    /**
     67     * This is the methods that does the parameters substitution, a little
     68     * bit like printf() but without parameter formatting.
     69     *
     70     * @example format("simple %s", "substitution");
     71     * @desc Substitues %s with the remaining parameters.
     72     *
     73     * @example format("simple %{s}", {s:"substitution"});
     74     * @desc Substitues %{s} with the key in the given object.
     75     *
     76     * @name format
     77     * @type Object
     78     * @param str String The string you want to substitute in.
     79     * @param args Optional argument to be placed in the string
     80     * @cat Plugins/GetText
     81     * @return String
     82     */
     83    format: function(str, obj) {
     84        // %{xy} substitution
     85        if (arguments.length == 2 && typeof obj == "object") {
     86            str = str.replace(/%{([^}]+)}/g, function(match, key){
     87                var x = obj[key];
     88                if (x)
     89                    return x
     90                return match;
     91            });
     92        // %s substitution
     93        } else if (arguments.length > 1) {
     94            var index = 1;
     95            var args = arguments; // provide arguments for scope
     96            str = str.replace(/%s/g, function(match) {
     97                var x = args[index];
     98                index += 1;
     99                if (x)
     100                    return x;
     101                return match;
     102            })
     103        }
     104        return str;
     105    },
     106    /**
     107     * This is the method that looks up the table for a corresponding translation.
     108     *
     109     * @example translate("hello");
     110     * @desc Try to get translated string and retruns it. Otherwise, returns the
     111     * original string.
     112     *
     113     * @name translate
     114     * @type Object
     115     * @param str String used to lookup the table
     116     * @cat Plugins/GetText
     117     * @return String
     118     */
     119    translate: function(str) {
     120        return this.table[str] || str;
     121    }
     122});
     123
     124/**
     125 * Looks in each element for some "gettext" metadata and loads it in the
     126 * translation table.
     127 *
     128 * @example $('#gettext').loadTanslations();
     129 * @desc Loads the gettext metadatas of the #gettext element.
     130 *
     131 * @name getText
     132 * @type jQuery
     133 * @cat Plugins/GetText
     134 * @return jQuery
     135 */
     136$.fn.getText = function() {
     137    this.each(function(){
     138        var translations = $(this).metadata().gettext;
     139        if (translations)
     140            $.extend($.gettext.table, translations);
     141    });
     142    return this;
     143}
     144   
     145})(jQuery);
     146
     147/* GetText notation */
     148if (typeof _ == "undefined")
     149    _ = jQuery.gettext;
     150 No newline at end of file
  • plugins/gettext/META.json

     
     1{
     2        "name": "jQuery-GetText",
     3        "version": 0.1,
     4        "author": [
     5                "Jonas Pfenniger <zimbatm@oree.ch>"
     6        ],
     7        "abstract": "Translate javascript text easily.",
     8        "license": "mit, gpl",
     9        "distribution_type": "plugin",
     10        "requires": {
     11                "jQuery": ">= 1.0.3, < 1.2"
     12        },
     13        "build_requires": {
     14                "jQuery.TestRunner": 0
     15        },
     16        "provides": {
     17                "jQuery.GetText": {
     18                        "version": 0.1,
     19                        "file": "jquery.gettext.js"
     20                }
     21        },
     22        "keywords": [
     23                "translation",
     24                "i18n"
     25        ],
     26        "stability": "Development",
     27        "meta-spec": {
     28                "version": 1.3,
     29                "url": "http://module-build.sourceforge.net/META-spec-v1.3.html"
     30        }
     31}