Code Monkey home page Code Monkey logo

jquery-i18n's Introduction

About

jQuery-i18n is a jQuery plugin for doing client-side translations in javascript. It is based heavily on javascript i18n that almost doesn't suck by Marko Samastur, and is licensed under the MIT license.

Installation

You'll need to download the jQuery library, and include it before jquery.i18n.js in your HTML source. See the examples folder for examples.

This library is also available as a bower component under the name jquery-i18n.

Usage

Before you can do any translation you have to initialise the plugin with a 'dictionary' (basically a property list mapping keys to their translations).

var myDictionary = {
  "some text":      "a translation",
  "some more text": "another translation"
}
$.i18n.load(myDictionary);

Once you've initialised it with a dictionary, you can translate strings using the $.i18n._() function, for example:

$('div#example').text($.i18n._('some text'));

or using $('selector')._t() function

$('div#example')._t('some text');

If you'd like to switch languages, you can unload the current dictionary and load a new one:

$.i18n.load('en');
$.i18n.unload();
$.i18n.load('ja');

Wildcards

It's straightforward to pass dynamic data into your translations. First, add %s in the translation for each variable you want to swap in :

var myDictionary = {
  "wildcard example": "We have been passed two values : %s and %s."
}
$.i18n.load(myDictionary);

Next, pass values in sequence after the dictionary key when you perform the translation :

$('div#example').text($.i18n._('wildcard example', 100, 200));

or

$('div#example')._t('wildcard example', 100, 200);

This will output We have been passed two values : 100 and 200.

Because some languages will need to order arguments differently to english, you can also specify the order in which the variables appear :

var myDictionary = {
  "wildcard example": "We have been passed two values : %2$s and %1$s."
}
$.i18n.load(myDictionary);

$('div#example').text($.i18n._('wildcard example', 100, 200));

This will output: We have been passed two values: 200 and 100.

If you need to explicitly output the string %s in your translation, use %%s :

var myDictionary = {
  "wildcard example": "I have %s literal %%s character."
}
$.i18n.load(myDictionary);

$('div#example').text($.i18n._('wildcard example', 1));

This will output: I have 1 literal %%s character.

Identifying missing translations

When loading the dictionary, you can pass a second missingPattern parameter, which will be used to format any missing translations.

$.i18n.load({ a_key: 'translated string' }, "{{ %s }}");
// The following line will output '{{ another_key }}'
$.i18n._('another_key')

This allows you scan for the given pattern to identify missing translations.

Building From Scratch

Use npm install to install the dependencies, and grunt to run the build.

Change history

  • Version 1.1.2 (2017-08-11) : Add an unload() method to clear the dictionary, support passing a missingPattern when loading the dictionary (thanks to briantani).
  • Version 1.1.1 (2014-01-05) : Use html() instead of text() when rendering translations.
  • Version 1.1.0 (2013-12-31) : Use grunt, update printf implementation, setDictionary is now load (thanks to ktmud).
  • Version 1.0.1 (2013-10-11) : Add bower support.
  • Version 1.0.0 (2012-10-14) : 1.0 release - addition of a test suite (huge thanks to alexaitken), plus a major cleanup.

Bug Reports

If you come across any problems, please create a ticket and we'll try to get it fixed as soon as possible.

Contributing

Once you've made your commits:

  1. Fork jquery-i18n
  2. Create a topic branch - git checkout -b my_branch
  3. Push to your branch - git push origin my_branch
  4. Create a Pull Request from your branch
  5. That's it!

Author

Dave Perrett :: [email protected] :: @daveperrett

Copyright

Copyright (c) 2010 Dave Perrett. See License for details.

jquery-i18n's People

Contributors

alexaitken avatar bvleur avatar eikes avatar ktmud avatar madpilot avatar poudelmadhav avatar recurser avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jquery-i18n's Issues

load dynamic dictionnary with json

Hello is it possible to use jquery with a dictionary i18n load with ajax json?
exemple: var json = $.getJSON('/json/test.json');
$.i18n.setDictionary(json);
Should he do anything in particular to use a dynamic dictionary?

Wildcards for dynamic data: Add feature to specify order

Hi,

E.g. japanese does have another word order than e.g. english. Due to this fact, the library should be able to specify the order of dynamic data instead of just replacing %s.

For example this should be possible:

'en': {
  'foobar': 'foo %1 bar %2'
},
'ja': {
  'foobar': '%2 foo %1 bar'
}

$.i18n._('foobar', [var1, var2]);

I don't think this is implemented right now, correct?

-Michael

Add union two and more dictionaries

To be able to add multiple dictionaries.
$.i18n.setDictionary(my_dictionary);

setDictionary: function(i18n_dict) {
if (this.dict == null) {
this.dict = i18n_dict;
} else {
$.extend(this.dict, i18n_dict);
}
},

Bower support

This really should have bower support so I can easily include it in my Yeoman/Bower/Grunt workflows.

Wildcard bug?

I'm not sure if i'm doing everything right but this is what's happening:

var my_dictionary = {
    "text_and_wildcard": "%s and %s"
}
var text1 = "text1";
var text2 = "text2";

$("#target").text($.i18n._("text_and_wildcard", [text1, text2]));

// Outputs: "s and text1text2"

if i change the dictionary for:

var my_dictionary = {
    "text_and_wildcard": " %s and %s " // Whitespace before the first %s
}

// Outputs: "text1 and text2" as expected

Looks like there's a parsing error at the beginning of the string

Version: 0.9.2 (201204070102)

Use of global vars.

This is using the global "args" variable in two places, once at line 74 and again at line 92. I assume these should be local scope only?

global modifier in regex pattern

Using numbered wildcards consecutively like so: '%1$s enabled %2$s %3$s' occasionally causes a match to miss, this results in the actual wildcard being displayed in the UI. After logging just about everything in the library, I decided to omit the 'global' modifier in the regex pattern on line 71 and viola, problem solved.

I can't find too much information on when it's ok to NOT use the global modifier, but this guy (http://stackoverflow.com/a/1222089) thinks it's ok.

This is my first time reporting an issue on github so I apologize in advance if it's not by the books.

HTML support

Currently there is no way to include newlines, bold, italics or other common HTML tags since all translations are treated as text and applied using the .text() method in JQuery. It would be nice to have an option on the $.i18n object that could tell the plugin to assume all translations contain HTML code and apply it using .innerHtml()

It would also make sense to have a variation on the _t() shortcut that can do this on a selective basis. Perhaps __t() with two underscores, or _th().

Change language in javascript runtime

Hello,

I'd like to know if it's posible to change the language at runtime, without refreshing the page.

I load the dictionary this way:
$.i18n.load('es');

And, if the user changes the language, I'd like to do something like:
$.i18n.unload('es');
$.i18n.load('en');

If this possible?

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.