4 * Ajatus - Distributed CRM
5 * @requires jQuery v1.2.1
7 * Copyright (c) 2007 Jerry Jalava <jerry.jalava@gmail.com>
8 * Copyright (c) 2007 Nemein Oy <http://nemein.com>
9 * Website: http://ajatus.info
10 * Licensed under the GPL license
11 * http://www.gnu.org/licenses/gpl.html
16 $.ajatus = $.ajatus || {};
33 $.extend($.ajatus.i10n, {
34 init: function(lang, after_init) {
35 $.ajatus.i10n.lang = lang || 'en_GB';
36 $.ajatus.i10n._after_init = after_init;
37 $.ajatus.i10n._load_lang($.ajatus.i10n.lang);
39 get_available_langs: function(force_refresh) {
40 if (typeof force_refresh == 'undefined') {
41 var force_refresh = false;
45 if ($.ajatus.i10n.available == null) {
46 $.ajatus.i10n.available = [];
53 // TODO: Somehow get all available translations from js/languages -folder
54 $.ajatus.i10n.available = [
65 return $.ajatus.i10n.available;
67 get: function() { //string, keys, pluralize_key
68 if ( arguments.length < 1
69 || typeof arguments[0] == 'undefined')
74 var string = new String();
75 var trans_key = arguments[0].toString().toLowerCase();
76 trans_key = $.trim(trans_key);
77 //$.ajatus.debug("get "+trans_key, "ajatus.i10n");
79 var replace_args = [];
80 if ( arguments.length > 1
81 && typeof(arguments[1]) == 'object')
83 replace_args = arguments[1];
86 var auto_plural = false;
87 if (arguments.length < 3) {
91 if (typeof($.ajatus.i10n.dict[trans_key]) != 'undefined') {
92 string = String($.ajatus.i10n.dict[trans_key]);
94 string = arguments[0].toString();
97 if (replace_args.length > 0) {
98 string = $.ajatus.i10n.format_result(string, replace_args, auto_plural);
101 if ( arguments.length > 2
102 && typeof(arguments[2]) == 'string')
104 string = $.ajatus.i10n.plural(string, arguments[2]);
107 var curr_s = "%_CURR_S";
108 var curr_n = "%_CURR_N";
109 var s_re = new RegExp(curr_s, "i");
110 var n_re = new RegExp(curr_n, "i");
111 if (string.match(s_re)) {
112 var re = new RegExp(curr_s, "gi");
113 string = string.replace(re, $.ajatus.i10n.get_currency().symbol);
115 if (string.match(n_re)) {
116 var re = new RegExp(curr_n, "gi");
117 string = string.replace(re, $.ajatus.i10n.get_currency().symbol);
119 // $.ajatus.debug("return "+string, "ajatus.i10n");
120 if ($.browser.safari) {
121 return $.ajatus.utils.utf8.decode(string);
126 get_currency: function() {
127 if (arguments.length > 0) {
128 switch (arguments[0]) {
130 return $.ajatus.i10n.currency.name;
133 return $.ajatus.i10n.currency.name;
136 return $.ajatus.i10n.currency;
140 return $.ajatus.i10n.currency;
142 format_result: function(string, args, auto_plural) {
143 if (typeof auto_plural == 'undefined') {
144 var auto_plural = true;
146 $.each(args, function(i,value){
147 var key = $.ajatus.i10n._resolve_replace_type(value);
151 if (typeof value != 'number') {
154 var re = new RegExp(/\b[%]?d.(\w+)\b/);
155 var m = re.exec(string);
157 var sing = m[(m.length-1)];
158 var plural = $.ajatus.i10n.inflector.pluralize(sing);
159 string = string.toString().replace(sing, plural);
162 string = string.toString().replace(key, value);
166 plural: function(string, key) {
167 if (typeof key == 'undefined') {
171 var plural_key = $.ajatus.i10n.inflector.pluralize(key);
173 var result = string.toString().replace(key, plural_key);
177 _resolve_replace_type: function(value) {
178 if (typeof value == 'string') {
181 if (typeof value == 'number') {
187 _load_lang: function(lang) {
188 if ( typeof lang == 'undefined'
197 $.ajatus.events.lock_pool.increase();
199 var lang_url = $.ajatus.preferences.client.application_url + 'js/languages/'+lang+'.js';
200 $.ajatus.utils.load_script(lang_url, "$.ajatus.i10n._lang_loaded", [lang]);
202 _lang_loaded: function(lang) {
206 $.ajatus.i10n.initialized = true;
207 $.ajatus.events.lock_pool.decrease();
209 $.ajatus.i10n._after_init.apply($.ajatus.i10n._after_init, []);
213 $.ajatus.i10n.inflections = {};
214 $.ajatus.i10n.inflector = {
217 $.extend($.ajatus.i10n.inflector, {
218 ordinalize: function(number) {
219 $.ajatus.i10n.inflector._get_inflector();
220 if ($.ajatus.i10n.inflector.inflection == false) {
224 if (typeof ($.ajatus.i10n.inflector.inflection['ordinalize']) == 'function') {
225 return $.ajatus.i10n.inflector.inflection.ordinalize(number);
229 pluralize: function(word) {
230 $.ajatus.i10n.inflector._get_inflector();
231 if ($.ajatus.i10n.inflector.inflection == false) {
236 $.each($.ajatus.i10n.inflector.inflection.uncountable, function(i,uncountable){
237 if (word.toLowerCase() == uncountable) {
238 result = uncountable;
244 $.each($.ajatus.i10n.inflector.inflection.irregular, function(i,irr){
245 var singular = irr[0];
247 if ((word.toLowerCase() == singular) || (word == plural)) {
254 $.each($.ajatus.i10n.inflector.inflection.plural, function(i,plur){
256 var replace_string = plur[1];
257 if (regex.test(word)) {
258 result = word.replace(regex, replace_string);
267 singularize: function(word) {
268 $.ajatus.i10n.inflector._get_inflector();
269 if ($.ajatus.i10n.inflector.inflection == false) {
275 $.each($.ajatus.i10n.inflector.inflection.uncountable, function(i,uncountable){
276 if (word.toLowerCase() == uncountable) {
277 result = uncountable;
283 $.each($.ajatus.i10n.inflector.inflection.irregular, function(i,irr){
284 var singular = irr[0];
286 if ((word.toLowerCase() == singular) || (word == plural)) {
293 $.each($.ajatus.i10n.inflector.inflection.singular, function(i,sing){
295 var replace_string = sing[1];
296 if (regex.test(word)) {
297 result = word.replace(regex, replace_string);
306 _get_inflector: function(lng) {
307 var lang = lng || $.ajatus.i10n.lang;
309 if ($.ajatus.i10n.inflector.inflection == null) {
310 if (typeof($.ajatus.i10n.inflections[lang]) == 'undefined') {
311 $.ajatus.i10n.inflector.inflection = false;
313 $.ajatus.i10n.inflector.inflection = $.ajatus.i10n.inflections[lang];