]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/openils/I18N.js
LP#1350371 PO name on create w/ dupe detect
[working/Evergreen.git] / Open-ILS / web / js / dojo / openils / I18N.js
1 /* ---------------------------------------------------------------------------
2  * Copyright (C) 2008  Georgia Public Library Service
3  * Copyright (C) 2008  Equinox Software, Inc
4  * Mike Rylander <miker@esilibrary.com>
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  * ---------------------------------------------------------------------------
16  */
17
18 if(!dojo._hasResource["openils.I18N"]) {
19
20     dojo._hasResource["openils.I18N"] = true;
21     dojo.provide("openils.I18N");
22         dojo.require("dojo.cookie");
23         dojo.require("dojo.data.ItemFileWriteStore");
24     dojo.require("DojoSRF");
25     dojo.require("fieldmapper.Fieldmapper");
26
27     dojo.declare('openils.I18N', null, {});
28
29         var x = dojo.cookie('I18Nset');
30         if (x) {
31                 openils.I18N.BaseLocales = dojo.fromJson(x);
32         } else {
33                 openils.I18N.BaseLocales = fieldmapper.standardRequest( [ 'open-ils.fielder', 'open-ils.fielder.i18n_l.atomic'], [ { cache : 1, query : { code : { '!=' :  null }  } } ] );
34                 dojo.cookie(
35                         'I18Nset',
36                         dojo.toJson(openils.I18N.BaseLocales),
37                         { path : location.href.replace(/^https?:\/\/[^\/]+(\/.*\w{2}-\w{2}\/).*/, "$1") }
38                 );
39         }
40
41         openils.I18N.localeStore = new dojo.data.ItemFileWriteStore( { data : {identifier : 'locale', label : 'label', items : [] } } );
42         openils.I18N.BaseLocales = openils.I18N.BaseLocales.sort(
43         function(a, b) {
44             if(a.name > b.name) return 1;
45             if(a.name < b.name) return -1;
46             return 0;
47         }
48     );
49
50         for (var i = 0; i < openils.I18N.BaseLocales.length; i++) {
51                 openils.I18N.localeStore.newItem({ locale : openils.I18N.BaseLocales[i].code, label : openils.I18N.BaseLocales[i].name });
52         }
53
54         openils.I18N.getTranslations = function ( obj /* Fieldmapper object */,  field /* Field to translate */, locale /* optional locale */) {
55                 var classname = obj.classname;
56
57                 // XXX need to derive identity field from IDL...
58                 var ident_field = fieldmapper[classname].Identifier;
59                 var ident_value = obj[ident_field]();
60
61                 var fielder_args = { query : { fq_field : classname + '.' + field, identity_value : ident_value } };
62                 if (locale) fielder_args.translation = locale;
63
64                 var hash_list = fieldmapper.standardRequest( [ 'open-ils.fielder', 'open-ils.fielder.i18n.atomic'], [ fielder_args ] );
65                 var obj_list = dojo.map( hash_list, function (t) { return new fieldmapper.i18n().fromHash( t ) } );
66
67                 if (locale) return obj_list[0];
68                 return obj_list;
69         }
70
71     openils.I18N.translatePage = function () {
72
73         dojo.require('dojo.query');
74
75         var elements = dojo.query('*[i18n]');
76         if (!elements.length) return null;
77
78         dojo.forEach(elements, function(e){
79
80             var what = e.getAttribute('i18n');
81             var parts = what.match(/^(.+)\.([^.]+)$/);
82             var app = parts[0]; var bundle = parts[1];
83             if (!app || !bundle) return null;
84
85             if (!openils.I18N.translatePage.NLSCache[app][bundle]) {
86                 dojo.requireLocalization(app,bundle);
87                 openils.I18N.translatePage.NLSCache[app][bundle] = dojo.i18n.getLocalization(app,bundle);
88
89                 if (!openils.I18N.translatePage.NLSCache[app][bundle]) return null;
90             }
91
92             dojo.require('dojo.string');
93
94             var template = e.innerHTML;
95             var finalHTML = dojo.string.substitute( template, openils.I18N.translatePage.NLSCache[app][bundle] );
96
97             if (template == finalHTML) { // no subsititution occurred
98                 dojo.require("dojox.jsonPath");
99                 var transString = e.getAttribute('string') || template;
100                 finalHTML = dojox.jsonPath.query(
101                     openils.I18N.translatePage.NLSCache[app][bundle],
102                     '$.'+transString,
103                     {evalType:"RESULT"}
104                 );
105             }
106
107             if (finalHTML) e.innerHTML = finalHTML;
108
109         });
110     }
111     openils.I18N.translatePage.NLSCache = {}; // stash this on the function .. WHEEEE
112
113 }
114
115