-
Notifications
You must be signed in to change notification settings - Fork 3
/
localization.coffee
120 lines (103 loc) · 4.4 KB
/
localization.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# phonegap-l10n
#
# Tiny l10n localization library for Phonegap/Cordova applications. Can be used for
# localizing your application in a declarative way, or programmatically.
#
# Written in Coffeescript, but also available in Javascript.
#
# Author: Philippe Lang [philippe.lang@attiksystem.ch]
# Version 1.0, 8th may 2013
# Dependencies: jquery
#-----------------------------------------------------------------------------------
# How to use it:
#
# Somewhere in your onDeviceReady() callback, initialize the library:
#
# Localization.initialize
# (
# // Dictionnary
# {
# fr: {
# oui: "Oui",
# non: "Non"
# },
# en: {
# oui: "Yes",
# non: "No"
# }
# },
# // Fallback language
# "fr"
# );
#
# In your HTML code, localize your strings declaratively, by assigning
# a class "l10n-<dictionnary key>" to your elements:
#
# <span class="l10n-oui"></span>
#
# You can also access the dictionnary programmatically:
#
# alert(Localization.for("oui"))
#
# Language is determined by phonegap, by reading the language configured on the
# phone. In case the language is not available in the dictionnary, or if there is
# any problem determining the language, the fallback language is used.
#
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class Localization
#-------------------------------------------------------------------------------
# Initialize
#-------------------------------------------------------------------------------
@initialize: (dictionnary, fallback_language) ->
# Dictionnary is defined in the HTML file as an multilevel associative array.
Localization.dictionnary = dictionnary
# Fallback language is stored for further use.
Localization.fallback_language = fallback_language
# Calling Phonegap Localization API.
navigator.globalization.getPreferredLanguage(
Localization.get_preferred_language_callback,
Localization.get_preferred_language_error_callback
)
#-------------------------------------------------------------------------------
# get_preferred_language_callback
#-------------------------------------------------------------------------------
@get_preferred_language_callback: (language) ->
# Phonegap was able to read the language configured on the phone, so we
# store it for further use.
Localization.language = language.value
console.log("Phone language is " + Localization.language)
# If language is supported, that's fine, ...
if Localization.language of Localization.dictionnary
console.log("It is supported.")
#... otherwise we use the fallback language.
else
Localization.language = Localization.fallback_language
console.log("It is unsupported, so we chose " + Localization.language + " instead.")
# We apply the translations to the current HTML file.
Localization.apply_to_current_html()
#-------------------------------------------------------------------------------
# get_preferred_language_error_callback
#-------------------------------------------------------------------------------
@get_preferred_language_error_callback: () ->
# Phonegap was not able to read the language configured on the phone, so we
# use the fallback language.
Localization.language = Localization.fallback_language
console.log("There was a error determining the language, so we chose " + Localization.language + ".")
# We apply the translations to the current HTML file.
Localization.apply_to_current_html()
#-------------------------------------------------------------------------------
# apply_to_current_html
#-------------------------------------------------------------------------------
@apply_to_current_html: () ->
# Changing the content of all html elements with class "l10n-<key>" for
# current language. Useful for doing localization in a declarative way.
console.log("Localizing HTML file.")
$(".l10n-" + key).html(value) for key, value of Localization.dictionnary[Localization.language]
#-------------------------------------------------------------------------------
# for
#-------------------------------------------------------------------------------
@for: (key) ->
# Returns localized value for key passed as a parameter. Useful for doing
# localization programmatically.
return Localization.dictionnary[Localization.language][key]