aboutsummaryrefslogtreecommitdiff
path: root/js/lib/languages.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib/languages.js')
-rw-r--r--js/lib/languages.js179
1 files changed, 96 insertions, 83 deletions
diff --git a/js/lib/languages.js b/js/lib/languages.js
index 640764282..d218cbc4f 100644
--- a/js/lib/languages.js
+++ b/js/lib/languages.js
@@ -1,83 +1,96 @@
-/**
- * Provides language-related functionality
- */
-elgg.provide('elgg.config.translations');
-
-elgg.config.language = 'en';
-
-elgg.add_translation = function(lang, translations) {
- elgg.provide('elgg.config.translations.' + lang);
-
- $.extend(elgg.config.translations[lang], translations);
-};
-
-/**
- * Load the translations for the given language.
- *
- * If no language is specified, the default language is used.
- * @param {string} language
- * @return {XMLHttpRequest}
- */
-elgg.reload_all_translations = function(language) {
- var lang = language || elgg.get_language();
- elgg.getJSON('_css/js.php', {
- data: {
- 'js': 'languages/' + lang,
- 'viewtype': 'default',
- 'lastcache': elgg.config.lastcache
- },
- success: function(json) {
- elgg.add_translation(lang, json);
- }
- });
-};
-
-/**
- * Get the current language
- * @return {String}
- */
-elgg.get_language = function() {
- var user = elgg.get_loggedin_user();
-
- if (user && user.language) {
- return user.language;
- }
-
- return elgg.config.language;
-};
-
-/**
- * Translates a string
- *
- * @param {String} key The string to translate
- * @param {String} language The language to display it in
- * @return {String} The translation
- */
-elgg.echo = function(key, language) {
- var translations,
- dlang = elgg.get_language();
-
- language = language || dlang;
-
- translations = elgg.config.translations[language];
- if (translations && translations[key]) {
- return translations[key];
- }
-
- if (language === dlang) {
- return undefined;
- }
-
- translations = elgg.config.translations[dlang];
- if (translations && translations[key]) {
- return translations[key];
- }
-
- return undefined;
-};
-
-elgg.config.translations.init = function() {
- elgg.reload_all_translations();
-};
-
-elgg.register_event_handler('boot', 'system', elgg.config.translations.init); \ No newline at end of file
+/*globals vsprintf*/
+/**
+ * Provides language-related functionality
+ */
+elgg.provide('elgg.config.translations');
+
+// default language - required by unit tests
+elgg.config.language = 'en';
+
+/**
+ * Analagous to the php version. Merges translations for a
+ * given language into the current translations map.
+ */
+elgg.add_translation = function(lang, translations) {
+ elgg.provide('elgg.config.translations.' + lang);
+
+ elgg.extend(elgg.config.translations[lang], translations);
+};
+
+/**
+ * Load the translations for the given language.
+ *
+ * If no language is specified, the default language is used.
+ * @param {string} language
+ * @return {XMLHttpRequest}
+ */
+elgg.reload_all_translations = function(language) {
+ var lang = language || elgg.get_language();
+
+ var url, options;
+ url = 'ajax/view/js/languages';
+ options = {data: {language: lang}};
+ if (elgg.config.simplecache_enabled) {
+ options.data.lc = elgg.config.lastcache;
+ }
+
+ options['success'] = function(json) {
+ elgg.add_translation(lang, json);
+ elgg.config.languageReady = true;
+ elgg.initWhenReady();
+ };
+
+ elgg.getJSON(url, options);
+};
+
+/**
+ * Get the current language
+ * @return {String}
+ */
+elgg.get_language = function() {
+ var user = elgg.get_logged_in_user_entity();
+
+ if (user && user.language) {
+ return user.language;
+ }
+
+ return elgg.config.language;
+};
+
+/**
+ * Translates a string
+ *
+ * @param {String} key The string to translate
+ * @param {Array} argv vsprintf support
+ * @param {String} language The language to display it in
+ *
+ * @return {String} The translation
+ */
+elgg.echo = function(key, argv, language) {
+ //elgg.echo('str', 'en')
+ if (elgg.isString(argv)) {
+ language = argv;
+ argv = [];
+ }
+
+ //elgg.echo('str', [...], 'en')
+ var translations = elgg.config.translations,
+ dlang = elgg.get_language(),
+ map;
+
+ language = language || dlang;
+ argv = argv || [];
+
+ map = translations[language] || translations[dlang];
+ if (map && map[key]) {
+ return vsprintf(map[key], argv);
+ }
+
+ return key;
+};
+
+elgg.config.translations.init = function() {
+ elgg.reload_all_translations();
+};
+
+elgg.register_hook_handler('boot', 'system', elgg.config.translations.init); \ No newline at end of file