Debug uses now pretty printing for better readability for objects
[ajatus.git] / js / ajatus.i10n.js
blobb135949ecf1d5518071646bc5627018fe5c9e376
1 /*
2 * This file is part of
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
15 (function($){
16 $.ajatus = $.ajatus || {};
18 $.ajatus.i10n = {
19 lang: 'en_GB',
20 dict: {},
21 currency: {
22 name: '',
23 symbol: ''
25 datetime: {
26 date: 'MDY/',
27 time: 'HMS:'
29 initialized: false,
30 available: null
32 $.extend($.ajatus.i10n, {
33 init: function(lang) {
34 $.ajatus.i10n.lang = lang || 'en_GB';
35 $.ajatus.i10n._load_lang($.ajatus.i10n.lang);
37 get_available_langs: function(force_refresh) {
38 if (typeof force_refresh == 'undefined') {
39 var force_refresh = false;
41 var refresh = false;
43 if ($.ajatus.i10n.available == null) {
44 $.ajatus.i10n.available = [];
45 refresh = true;
48 if ( refresh
49 || force_refresh)
51 // TODO: Somehow get all available translations from js/languages -folder
52 $.ajatus.i10n.available = [
53 'en_GB',
54 'fi_FI',
55 'hu_HU',
56 'nl_NL',
57 'pl_PL',
58 'sv_SE'
62 return $.ajatus.i10n.available;
64 get: function() { //string, keys, pluralize_key
65 if (arguments.length < 1) {
66 return;
69 var string = new String();
70 var trans_key = arguments[0].toString().toLowerCase();
71 trans_key = $.trim(trans_key);
72 //$.ajatus.debug("get "+trans_key, "ajatus.i10n");
74 var replace_args = [];
75 if ( arguments.length > 1
76 && typeof(arguments[1]) == 'object')
78 replace_args = arguments[1];
81 var auto_plural = false;
82 if (arguments.length < 3) {
83 auto_plural = true;
86 if (typeof($.ajatus.i10n.dict[trans_key]) != 'undefined') {
87 string = String($.ajatus.i10n.dict[trans_key]);
88 } else {
89 string = arguments[0].toString();
92 if (replace_args.length > 0) {
93 string = $.ajatus.i10n.format_result(string, replace_args, auto_plural);
96 if ( arguments.length > 2
97 && typeof(arguments[2]) == 'string')
99 string = $.ajatus.i10n.plural(string, arguments[2]);
102 var curr_s = "%_CURR_S";
103 var curr_n = "%_CURR_N";
104 var s_re = new RegExp(curr_s, "i");
105 var n_re = new RegExp(curr_n, "i");
106 if (string.match(s_re)) {
107 var re = new RegExp(curr_s, "gi");
108 string = string.replace(re, $.ajatus.i10n.get_currency().symbol);
110 if (string.match(n_re)) {
111 var re = new RegExp(curr_n, "gi");
112 string = string.replace(re, $.ajatus.i10n.get_currency().symbol);
115 // $.ajatus.debug("return "+string, "ajatus.i10n");
116 return string;
118 get_currency: function() {
119 if (arguments.length > 0) {
120 switch (arguments[0]) {
121 case 'name':
122 return $.ajatus.i10n.currency.name;
123 break;
124 case 'symbol':
125 return $.ajatus.i10n.currency.name;
126 break;
127 case 'both':
128 return $.ajatus.i10n.currency;
129 break;
132 return $.ajatus.i10n.currency;
134 format_result: function(string, args, auto_plural) {
135 if (typeof auto_plural == 'undefined') {
136 var auto_plural = true;
138 $.each(args, function(i,value){
139 var key = $.ajatus.i10n._resolve_replace_type(value);
140 if ( key == '%d'
141 && auto_plural
142 && (value > 1))
144 var re = new RegExp(/\b[%]?d.(\w+)\b/);
145 var m = re.exec(string);
146 if (m != null) {
147 var sing = m[(m.length-1)];
148 var plural = $.ajatus.i10n.inflector.pluralize(sing);
149 string = string.toString().replace(sing, plural);
152 string = string.toString().replace(key, value);
154 return string;
156 plural: function(string, key) {
157 if (typeof key == 'undefined') {
158 var key = string;
161 var plural_key = $.ajatus.i10n.inflector.pluralize(key);
163 var result = string.toString().replace(key, plural_key);
165 return result;
167 _resolve_replace_type: function(value) {
168 if (typeof value == 'string') {
169 return '%s';
171 if (typeof value == 'number') {
172 return '%d';
175 return '%s';
177 _load_lang: function(lang) {
178 if ( typeof lang == 'undefined'
179 || lang == '')
181 return;
184 $.ajaxSetup({
185 async: false
187 $.ajatus.events.lock_pool.increase();
189 var lang_url = $.ajatus.preferences.client.application_url + 'js/languages/'+lang+'.js';
190 $.ajatus.utils.load_script(lang_url, "$.ajatus.i10n._lang_loaded", [lang]);
192 _lang_loaded: function(lang) {
193 $.ajaxSetup({
194 async: true
196 $.ajatus.i10n.initialized = true;
197 $.ajatus.events.lock_pool.decrease();
201 $.ajatus.i10n.inflections = {};
202 $.ajatus.i10n.inflector = {
203 inflection: null
205 $.extend($.ajatus.i10n.inflector, {
206 ordinalize: function(number) {
207 $.ajatus.i10n.inflector._get_inflector();
208 if ($.ajatus.i10n.inflector.inflection == false) {
209 return number;
212 if (typeof ($.ajatus.i10n.inflector.inflection['ordinalize']) == 'function') {
213 return $.ajatus.i10n.inflector.inflection.ordinalize(number);
215 return number;
217 pluralize: function(word) {
218 $.ajatus.i10n.inflector._get_inflector();
219 if ($.ajatus.i10n.inflector.inflection == false) {
220 return word;
223 var result = '';
224 $.each($.ajatus.i10n.inflector.inflection.uncountable, function(i,uncountable){
225 if (word.toLowerCase() == uncountable) {
226 result = uncountable;
229 if (result != '') {
230 return result;
232 $.each($.ajatus.i10n.inflector.inflection.irregular, function(i,irr){
233 var singular = irr[0];
234 var plural = irr[1];
235 if ((word.toLowerCase() == singular) || (word == plural)) {
236 result = plural;
239 if (result != '') {
240 return result;
242 $.each($.ajatus.i10n.inflector.inflection.plural, function(i,plur){
243 var regex = plur[0];
244 var replace_string = plur[1];
245 if (regex.test(word)) {
246 result = word.replace(regex, replace_string);
249 if (result != '') {
250 return result;
253 return word;
255 singularize: function(word) {
256 $.ajatus.i10n.inflector._get_inflector();
257 if ($.ajatus.i10n.inflector.inflection == false) {
258 return word;
261 var result = '';
263 $.each($.ajatus.i10n.inflector.inflection.uncountable, function(i,uncountable){
264 if (word.toLowerCase() == uncountable) {
265 result = uncountable;
268 if (result != '') {
269 return result;
271 $.each($.ajatus.i10n.inflector.inflection.irregular, function(i,irr){
272 var singular = irr[0];
273 var plural = irr[1];
274 if ((word.toLowerCase() == singular) || (word == plural)) {
275 result = plural;
278 if (result != '') {
279 return result;
281 $.each($.ajatus.i10n.inflector.inflection.singular, function(i,sing){
282 var regex = sing[0];
283 var replace_string = sing[1];
284 if (regex.test(word)) {
285 result = word.replace(regex, replace_string);
288 if (result != '') {
289 return result;
292 return word;
294 _get_inflector: function(lng) {
295 var lang = lng || $.ajatus.i10n.lang;
297 if ($.ajatus.i10n.inflector.inflection == null) {
298 if (typeof($.ajatus.i10n.inflections[lang]) == 'undefined') {
299 $.ajatus.i10n.inflector.inflection = false;
300 } else {
301 $.ajatus.i10n.inflector.inflection = $.ajatus.i10n.inflections[lang];
307 })(jQuery);