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) {
72 var string = new String();
73 var trans_key = arguments[0].toString().toLowerCase();
74 trans_key = $.trim(trans_key);
75 //$.ajatus.debug("get "+trans_key, "ajatus.i10n");
77 var replace_args = [];
78 if ( arguments.length > 1
79 && typeof(arguments[1]) == 'object')
81 replace_args = arguments[1];
84 var auto_plural = false;
85 if (arguments.length < 3) {
89 if (typeof($.ajatus.i10n.dict[trans_key]) != 'undefined') {
90 string = String($.ajatus.i10n.dict[trans_key]);
92 string = arguments[0].toString();
95 if (replace_args.length > 0) {
96 string = $.ajatus.i10n.format_result(string, replace_args, auto_plural);
99 if ( arguments.length > 2
100 && typeof(arguments[2]) == 'string')
102 string = $.ajatus.i10n.plural(string, arguments[2]);
105 var curr_s = "%_CURR_S";
106 var curr_n = "%_CURR_N";
107 var s_re = new RegExp(curr_s, "i");
108 var n_re = new RegExp(curr_n, "i");
109 if (string.match(s_re)) {
110 var re = new RegExp(curr_s, "gi");
111 string = string.replace(re, $.ajatus.i10n.get_currency().symbol);
113 if (string.match(n_re)) {
114 var re = new RegExp(curr_n, "gi");
115 string = string.replace(re, $.ajatus.i10n.get_currency().symbol);
117 // $.ajatus.debug("return "+string, "ajatus.i10n");
118 if ($.browser.safari) {
119 return $.ajatus.utils.utf8.decode(string);
124 get_currency: function() {
125 if (arguments.length > 0) {
126 switch (arguments[0]) {
128 return $.ajatus.i10n.currency.name;
131 return $.ajatus.i10n.currency.name;
134 return $.ajatus.i10n.currency;
138 return $.ajatus.i10n.currency;
140 format_result: function(string, args, auto_plural) {
141 if (typeof auto_plural == 'undefined') {
142 var auto_plural = true;
144 $.each(args, function(i,value){
145 var key = $.ajatus.i10n._resolve_replace_type(value);
149 if (typeof value != 'number') {
152 var re = new RegExp(/\b[%]?d.(\w+)\b/);
153 var m = re.exec(string);
155 var sing = m[(m.length-1)];
156 var plural = $.ajatus.i10n.inflector.pluralize(sing);
157 string = string.toString().replace(sing, plural);
160 string = string.toString().replace(key, value);
164 plural: function(string, key) {
165 if (typeof key == 'undefined') {
169 var plural_key = $.ajatus.i10n.inflector.pluralize(key);
171 var result = string.toString().replace(key, plural_key);
175 _resolve_replace_type: function(value) {
176 if (typeof value == 'string') {
179 if (typeof value == 'number') {
185 _load_lang: function(lang) {
186 if ( typeof lang == 'undefined'
195 $.ajatus.events.lock_pool.increase();
197 var lang_url = $.ajatus.preferences.client.application_url + 'js/languages/'+lang+'.js';
198 $.ajatus.utils.load_script(lang_url, "$.ajatus.i10n._lang_loaded", [lang]);
200 _lang_loaded: function(lang) {
204 $.ajatus.i10n.initialized = true;
205 $.ajatus.events.lock_pool.decrease();
207 $.ajatus.i10n._after_init.apply($.ajatus.i10n._after_init, []);
211 $.ajatus.i10n.inflections = {};
212 $.ajatus.i10n.inflector = {
215 $.extend($.ajatus.i10n.inflector, {
216 ordinalize: function(number) {
217 $.ajatus.i10n.inflector._get_inflector();
218 if ($.ajatus.i10n.inflector.inflection == false) {
222 if (typeof ($.ajatus.i10n.inflector.inflection['ordinalize']) == 'function') {
223 return $.ajatus.i10n.inflector.inflection.ordinalize(number);
227 pluralize: function(word) {
228 $.ajatus.i10n.inflector._get_inflector();
229 if ($.ajatus.i10n.inflector.inflection == false) {
234 $.each($.ajatus.i10n.inflector.inflection.uncountable, function(i,uncountable){
235 if (word.toLowerCase() == uncountable) {
236 result = uncountable;
242 $.each($.ajatus.i10n.inflector.inflection.irregular, function(i,irr){
243 var singular = irr[0];
245 if ((word.toLowerCase() == singular) || (word == plural)) {
252 $.each($.ajatus.i10n.inflector.inflection.plural, function(i,plur){
254 var replace_string = plur[1];
255 if (regex.test(word)) {
256 result = word.replace(regex, replace_string);
265 singularize: function(word) {
266 $.ajatus.i10n.inflector._get_inflector();
267 if ($.ajatus.i10n.inflector.inflection == false) {
273 $.each($.ajatus.i10n.inflector.inflection.uncountable, function(i,uncountable){
274 if (word.toLowerCase() == uncountable) {
275 result = uncountable;
281 $.each($.ajatus.i10n.inflector.inflection.irregular, function(i,irr){
282 var singular = irr[0];
284 if ((word.toLowerCase() == singular) || (word == plural)) {
291 $.each($.ajatus.i10n.inflector.inflection.singular, function(i,sing){
293 var replace_string = sing[1];
294 if (regex.test(word)) {
295 result = word.replace(regex, replace_string);
304 _get_inflector: function(lng) {
305 var lang = lng || $.ajatus.i10n.lang;
307 if ($.ajatus.i10n.inflector.inflection == null) {
308 if (typeof($.ajatus.i10n.inflections[lang]) == 'undefined') {
309 $.ajatus.i10n.inflector.inflection = false;
311 $.ajatus.i10n.inflector.inflection = $.ajatus.i10n.inflections[lang];