Added check to frontpage view if the type should be shown in the list.
[ajatus.git] / js / ajatus.i10n.js
blob3f2d7bb007ea2b0e8ac76eb17db72a59cc702445
1 /*
2  * This file is part of
3  *
4  * Ajatus - Distributed CRM
5  * @requires jQuery v1.2.1
6  * 
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
12  * 
13  */
15 (function($){
16     $.ajatus = $.ajatus || {};
17     
18     $.ajatus.i10n = {
19         lang: 'en_GB',
20         dict: {},
21         currency: {
22             name: '',
23             symbol: ''
24         },
25         datetime: {
26             date: 'MDY/',
27             time: 'HMS:'
28         },
29         initialized: false,
30         available: null,
31         _after_init: null
32     };
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);
38         },
39         get_available_langs: function(force_refresh) {
40             if (typeof force_refresh == 'undefined') {
41                 var force_refresh = false;
42             }            
43             var refresh = false;
44             
45             if ($.ajatus.i10n.available == null) {
46                 $.ajatus.i10n.available = [];
47                 refresh = true;
48             }
49             
50             if (   refresh
51                 || force_refresh)
52             {
53                 // TODO: Somehow get all available translations from js/languages -folder
54                 $.ajatus.i10n.available = [
55                     'en_GB', 
56                     'fi_FI',
57                     'hu_HU',
58                     'nl_NL',
59                     'pl_PL',
60                     'pt_BR',
61                     'sv_SE'
62                 ];
63             }
65             return $.ajatus.i10n.available;
66         },
67         get: function() { //string, keys, pluralize_key            
68             if (   arguments.length < 1
69                 || typeof arguments[0] == 'undefined')
70             {
71                 return;
72             }
73             
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");
78             
79             var replace_args = [];
80             if (   arguments.length > 1
81                 && typeof(arguments[1]) == 'object')
82             {
83                 replace_args = arguments[1];
84             }            
86             var auto_plural = false;
87             if (arguments.length < 3) {
88                 auto_plural = true;
89             }
90             
91             if (typeof($.ajatus.i10n.dict[trans_key]) != 'undefined') {                
92                 string = String($.ajatus.i10n.dict[trans_key]);
93             } else {
94                 string = arguments[0].toString();
95             }
96             
97             if (replace_args.length > 0) {
98                 string = $.ajatus.i10n.format_result(string, replace_args, auto_plural);
99             }
100             
101             if (   arguments.length > 2
102                 && typeof(arguments[2]) == 'string')
103             {
104                 string = $.ajatus.i10n.plural(string, arguments[2]);
105             }
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);
114             }
115             if (string.match(n_re)) {
116                 var re = new RegExp(curr_n, "gi");
117                 string = string.replace(re, $.ajatus.i10n.get_currency().symbol);
118             }
119             // $.ajatus.debug("return "+string, "ajatus.i10n");
120             if ($.browser.safari) {
121                 return $.ajatus.utils.utf8.decode(string);
122             }
123             
124             return string;
125         },
126         get_currency: function() {
127             if (arguments.length > 0) {
128                 switch (arguments[0]) {
129                     case 'name':
130                         return $.ajatus.i10n.currency.name;
131                     break;
132                     case 'symbol':
133                         return $.ajatus.i10n.currency.name;
134                     break;
135                     case 'both':
136                         return $.ajatus.i10n.currency;
137                     break;
138                 }
139             }
140             return $.ajatus.i10n.currency;
141         },
142         format_result: function(string, args, auto_plural) {
143             if (typeof auto_plural == 'undefined') {
144                 var auto_plural = true;
145             }
146             $.each(args, function(i,value){
147                 var key = $.ajatus.i10n._resolve_replace_type(value);
148                 if (   key == '%d'
149                     && auto_plural)
150                 {
151                     if (typeof value != 'number') {
152                         value = 'null';
153                     }
154                     var re = new RegExp(/\b[%]?d.(\w+)\b/);
155                     var m = re.exec(string);
156                     if (m != null) {
157                         var sing = m[(m.length-1)];
158                         var plural = $.ajatus.i10n.inflector.pluralize(sing);
159                         string = string.toString().replace(sing, plural);
160                     }
161                 }
162                 string = string.toString().replace(key, value);
163             });
164             return string;
165         },
166         plural: function(string, key) {
167             if (typeof key == 'undefined') {
168                 var key = string;
169             }
170             
171             var plural_key = $.ajatus.i10n.inflector.pluralize(key);
172                         
173             var result = string.toString().replace(key, plural_key);
174             
175             return result;
176         },
177         _resolve_replace_type: function(value) {
178             if (typeof value == 'string') {
179                 return '%s';
180             }
181             if (typeof value == 'number') {
182                 return '%d';
183             }
184             
185             return '%s';
186         },
187         _load_lang: function(lang) {
188             if (   typeof lang == 'undefined'
189                 || lang == '')
190             {
191                 return;
192             }
194             $.ajaxSetup({
195                 async: false
196             });
197             $.ajatus.events.lock_pool.increase();
198             
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]);
201         },
202         _lang_loaded: function(lang) {
203             $.ajaxSetup({
204                 async: true
205             });
206             $.ajatus.i10n.initialized = true;
207             $.ajatus.events.lock_pool.decrease();
208             
209             $.ajatus.i10n._after_init.apply($.ajatus.i10n._after_init, []);
210         }
211     });
212     
213     $.ajatus.i10n.inflections = {};
214     $.ajatus.i10n.inflector = {
215         inflection: null
216     };
217     $.extend($.ajatus.i10n.inflector, {        
218         ordinalize: function(number) {
219             $.ajatus.i10n.inflector._get_inflector();
220             if ($.ajatus.i10n.inflector.inflection == false) {
221                 return number;
222             }
223                         
224             if (typeof ($.ajatus.i10n.inflector.inflection['ordinalize']) == 'function') {
225                 return $.ajatus.i10n.inflector.inflection.ordinalize(number);
226             }
227             return number;
228         },
229         pluralize: function(word) {
230             $.ajatus.i10n.inflector._get_inflector();
231             if ($.ajatus.i10n.inflector.inflection == false) {
232                 return word;
233             }
234                         
235             var result = '';
236             $.each($.ajatus.i10n.inflector.inflection.uncountable, function(i,uncountable){
237                 if (word.toLowerCase() == uncountable) {
238                     result = uncountable;
239                 }
240             });
241             if (result != '') {
242                 return result;
243             }
244             $.each($.ajatus.i10n.inflector.inflection.irregular, function(i,irr){
245                 var singular = irr[0];
246                 var plural = irr[1];
247                 if ((word.toLowerCase() == singular) || (word == plural)) {
248                     result = plural;
249                 }
250             });
251             if (result != '') {
252                 return result;
253             }
254             $.each($.ajatus.i10n.inflector.inflection.plural, function(i,plur){
255                 var regex = plur[0];
256                 var replace_string = plur[1];
257                 if (regex.test(word)) {
258                     result = word.replace(regex, replace_string);
259                 }
260             });
261             if (result != '') {
262                 return result;
263             }
264             
265             return word;
266         },
267         singularize: function(word) {
268             $.ajatus.i10n.inflector._get_inflector();
269             if ($.ajatus.i10n.inflector.inflection == false) {
270                 return word;
271             }
272             
273             var result = '';
274             
275             $.each($.ajatus.i10n.inflector.inflection.uncountable, function(i,uncountable){
276                 if (word.toLowerCase() == uncountable) {
277                     result = uncountable;
278                 }
279             });
280             if (result != '') {
281                 return result;
282             }
283             $.each($.ajatus.i10n.inflector.inflection.irregular, function(i,irr){
284                 var singular = irr[0];
285                 var plural = irr[1];
286                 if ((word.toLowerCase() == singular) || (word == plural)) {
287                     result = plural;
288                 }
289             });
290             if (result != '') {
291                 return result;
292             }
293             $.each($.ajatus.i10n.inflector.inflection.singular, function(i,sing){
294                 var regex = sing[0];
295                 var replace_string = sing[1];
296                 if (regex.test(word)) {
297                     result = word.replace(regex, replace_string);
298                 }
299             });
300             if (result != '') {
301                 return result;
302             }
303             
304             return word;
305         },
306         _get_inflector: function(lng) {
307             var lang = lng || $.ajatus.i10n.lang;
308             
309             if ($.ajatus.i10n.inflector.inflection == null) {
310                 if (typeof($.ajatus.i10n.inflections[lang]) == 'undefined') {
311                     $.ajatus.i10n.inflector.inflection = false;
312                 } else {
313                     $.ajatus.i10n.inflector.inflection = $.ajatus.i10n.inflections[lang];            
314                 }                
315             }
316         }
317     });
318     
319 })(jQuery);