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
|| {};
24 $.extend($.ajatus
.i10n
, {
25 init: function(lang
) {
26 $.ajatus
.i10n
.lang
= lang
|| 'en_GB';
27 $.ajatus
.i10n
._load_lang($.ajatus
.i10n
.lang
);
29 get_available_langs: function(force_refresh
) {
30 if (typeof force_refresh
== 'undefined') {
31 var force_refresh
= false;
35 if ($.ajatus
.i10n
.available
== null) {
36 $.ajatus
.i10n
.available
= [];
43 // TODO: Somehow get all available translations from js/languages -folder
44 $.ajatus
.i10n
.available
= [ 'en_GB', 'fi_FI' ];
47 return $.ajatus
.i10n
.available
;
49 get: function() { //string, keys, pluralize_key
50 if (arguments
.length
< 1) {
53 var string
= new String();
54 var trans_key
= arguments
[0].toString().toLowerCase();
55 // console.log("i10n get: "+trans_key);
57 var replace_args
= [];
58 if ( arguments
.length
> 1
59 && typeof(arguments
[1]) == 'object')
61 replace_args
= arguments
[1];
64 var auto_plural
= false;
65 if (arguments
.length
< 3) {
69 if (typeof($.ajatus
.i10n
.dict
[trans_key
]) != 'undefined') {
70 string
= String($.ajatus
.i10n
.dict
[trans_key
]);
72 string
= arguments
[0].toString();
75 if (replace_args
.length
> 0) {
76 string
= $.ajatus
.i10n
.format_result(string
, replace_args
, auto_plural
);
79 if ( arguments
.length
> 2
80 && typeof(arguments
[2]) == 'string')
82 string
= $.ajatus
.i10n
.plural(string
, arguments
[2]);
85 // console.log("return: "+string);
88 format_result: function(string
, args
, auto_plural
) {
89 if (typeof auto_plural
== 'undefined') {
90 var auto_plural
= true;
92 $.each(args
, function(i
,value
){
93 var key
= $.ajatus
.i10n
._resolve_replace_type(value
);
98 var re
= new RegExp(/\b[%]?d.(\w+)\b/);
99 var m
= re
.exec(string
);
101 var sing
= m
[(m
.length
-1)];
102 var plural
= $.ajatus
.i10n
.inflector
.pluralize(sing
);
103 string
= string
.toString().replace(sing
, plural
);
106 string
= string
.toString().replace(key
, value
);
110 plural: function(string
, key
) {
111 if (typeof key
== 'undefined') {
115 var plural_key
= $.ajatus
.i10n
.inflector
.pluralize(key
);
117 var result
= string
.toString().replace(key
, plural_key
);
121 _resolve_replace_type: function(value
) {
122 if (typeof value
== 'string') {
125 if (typeof value
== 'number') {
131 _load_lang: function(lang
) {
132 if ( typeof lang
== 'undefined'
141 $.ajatus
.events
.lock_pool
.increase();
142 $.getScript($.ajatus
.preferences
.client
.application_url
+ 'js/languages/'+lang
+'.js', function(){
146 $.ajatus
.i10n
.initialized
= true;
147 $.ajatus
.events
.lock_pool
.decrease();
152 $.ajatus
.i10n
.inflections
= {};
153 $.ajatus
.i10n
.inflector
= {
156 $.extend($.ajatus
.i10n
.inflector
, {
157 ordinalize: function(number
) {
158 $.ajatus
.i10n
.inflector
._get_inflector();
159 if ($.ajatus
.i10n
.inflector
.inflection
== false) {
163 if (typeof ($.ajatus
.i10n
.inflector
.inflection
['ordinalize']) == 'function') {
164 return $.ajatus
.i10n
.inflector
.inflection
.ordinalize(number
);
168 pluralize: function(word
) {
169 $.ajatus
.i10n
.inflector
._get_inflector();
170 if ($.ajatus
.i10n
.inflector
.inflection
== false) {
175 $.each($.ajatus
.i10n
.inflector
.inflection
.uncountable
, function(i
,uncountable
){
176 if (word
.toLowerCase() == uncountable
) {
177 result
= uncountable
;
183 $.each($.ajatus
.i10n
.inflector
.inflection
.irregular
, function(i
,irr
){
184 var singular
= irr
[0];
186 if ((word
.toLowerCase() == singular
) || (word
== plural
)) {
193 $.each($.ajatus
.i10n
.inflector
.inflection
.plural
, function(i
,plur
){
195 var replace_string
= plur
[1];
196 if (regex
.test(word
)) {
197 result
= word
.replace(regex
, replace_string
);
206 singularize: function(word
) {
207 $.ajatus
.i10n
.inflector
._get_inflector();
208 if ($.ajatus
.i10n
.inflector
.inflection
== false) {
214 $.each($.ajatus
.i10n
.inflector
.inflection
.uncountable
, function(i
,uncountable
){
215 if (word
.toLowerCase() == uncountable
) {
216 result
= uncountable
;
222 $.each($.ajatus
.i10n
.inflector
.inflection
.irregular
, function(i
,irr
){
223 var singular
= irr
[0];
225 if ((word
.toLowerCase() == singular
) || (word
== plural
)) {
232 $.each($.ajatus
.i10n
.inflector
.inflection
.singular
, function(i
,sing
){
234 var replace_string
= sing
[1];
235 if (regex
.test(word
)) {
236 result
= word
.replace(regex
, replace_string
);
245 _get_inflector: function(lng
) {
246 var lang
= lng
|| $.ajatus
.i10n
.lang
;
248 if ($.ajatus
.i10n
.inflector
.inflection
== null) {
249 if (typeof($.ajatus
.i10n
.inflections
[lang
]) == 'undefined') {
250 $.ajatus
.i10n
.inflector
.inflection
= false;
252 $.ajatus
.i10n
.inflector
.inflection
= $.ajatus
.i10n
.inflections
[lang
];