Skip to content

Commit 5d89c7a

Browse files
Using raw object as data source
New code has been added so that raw javascript objects can now be used as a source for the translations. If localize receives an object as a first parameter, items with 'data-localize' tags will be updated with the text contained in the matching object properties. Said object will be converted to a valid json object beforehand, so no problems shall arise if the given object include functions as a value for any of its keys. In the case localize method receives any parameter that is not an object, the default behaviour where the translations are retrieved from an external file will be applied. This should solve the following issue: #62
1 parent 0700d5e commit 5d89c7a

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

dist/jquery.localize.js

+19-5
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ http://keith-wood.name/localisation.html
1818
};
1919
$.defaultLanguage = normaliseLang(navigator.languages && navigator.languages.length > 0 ? navigator.languages[0] : navigator.language || navigator.userLanguage);
2020
$.localize = function(pkg, options) {
21-
var defaultCallback, deferred, fileExtension, intermediateLangData, jsonCall, lang, loadLanguage, localizeElement, localizeForSpecialKeys, localizeImageElement, localizeInputElement, localizeOptgroupElement, notifyDelegateLanguageLoaded, regexify, setAttrFromValueForKey, setTextFromValueForKey, valueForKey, wrappedSet;
21+
var defaultCallback, deferred, fileExtension, intermediateLangData, jsonCall, loadLanguage, localizeElement, localizeForSpecialKeys, localizeImageElement, localizeInputElement, localizeOptgroupElement, notifyDelegateLanguageLoaded, regexify, setAttrFromValueForKey, setTextFromValueForKey, translateFromFile, translateFromObject, valueForKey, wrappedSet;
2222
if (options == null) {
2323
options = {};
2424
}
@@ -180,11 +180,25 @@ http://keith-wood.name/localisation.html
180180
return string_or_regex_or_array;
181181
}
182182
};
183-
lang = normaliseLang(options.language ? options.language : $.defaultLanguage);
184-
if (options.skipLanguage && lang.match(regexify(options.skipLanguage))) {
185-
deferred.resolve();
183+
translateFromFile = function() {
184+
var lang;
185+
lang = normaliseLang(options.language ? options.language : $.defaultLanguage);
186+
if (options.skipLanguage && lang.match(regexify(options.skipLanguage))) {
187+
return deferred.resolve();
188+
} else {
189+
return loadLanguage(pkg, lang, 1);
190+
}
191+
};
192+
translateFromObject = function(object) {
193+
var data;
194+
data = JSON.parse(JSON.stringify(object));
195+
defaultCallback(data);
196+
return deferred.resolve();
197+
};
198+
if (typeof pkg === "object") {
199+
translateFromObject(pkg);
186200
} else {
187-
loadLanguage(pkg, lang, 1);
201+
translateFromFile();
188202
}
189203
wrappedSet.localizePromise = deferred;
190204
return wrappedSet;

dist/jquery.localize.min.js

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/jquery.localize.coffee

+19-3
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,27 @@ do ($ = jQuery) ->
136136
else
137137
string_or_regex_or_array
138138

139-
lang = normaliseLang(if options.language then options.language else $.defaultLanguage)
140-
if (options.skipLanguage && lang.match(regexify(options.skipLanguage)))
139+
# Retrieve translations from an external file based on required language
140+
translateFromFile = () ->
141+
lang = normaliseLang(if options.language then options.language else $.defaultLanguage)
142+
if (options.skipLanguage && lang.match(regexify(options.skipLanguage)))
143+
deferred.resolve()
144+
else
145+
loadLanguage(pkg, lang, 1)
146+
147+
# Retrieve translations from an object
148+
translateFromObject = (object) ->
149+
# We stringify and parse the received object to ensure the object is a valid json
150+
# Any functions defined within the object will be removed during this process
151+
data = JSON.parse(JSON.stringify(object))
152+
defaultCallback(data)
141153
deferred.resolve()
154+
155+
# If 'pkg' is an object, use it as the source for translations
156+
if typeof(pkg) == "object"
157+
translateFromObject(pkg)
142158
else
143-
loadLanguage(pkg, lang, 1)
159+
translateFromFile()
144160

145161
wrappedSet.localizePromise = deferred
146162

0 commit comments

Comments
 (0)