From 5ca46a3571915908c234c3abcb7b367a2f6f4dbc Mon Sep 17 00:00:00 2001
From: Lloyd Hilaiel <lloyd@hilaiel.com>
Date: Fri, 13 Jul 2012 13:37:02 -0600
Subject: [PATCH] improve configuration of l10n, now that locale/ directory is
 no longer relevant

---
 bin/browserid        |  2 +-
 bin/static           |  2 +-
 lib/configuration.js | 13 +++++++++++--
 lib/i18n.js          | 32 ++++++++++++--------------------
 lib/wsapi.js         |  2 +-
 5 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/bin/browserid b/bin/browserid
index 225526ab2..f3399bb57 100755
--- a/bin/browserid
+++ b/bin/browserid
@@ -61,7 +61,7 @@ app.use(i18n.abide({
   supported_languages: config.get('supported_languages'),
   default_lang: config.get('default_lang'),
   debug_lang: config.get('debug_lang'),
-  locale_directory: config.get('locale_directory'),
+  translation_directory: config.get('translation_directory'),
   disable_locale_check: config.get('disable_locale_check')
 }));
 
diff --git a/bin/static b/bin/static
index 47af95441..d9f389408 100755
--- a/bin/static
+++ b/bin/static
@@ -53,7 +53,7 @@ app.use(i18n.abide({
   supported_languages: config.get('supported_languages'),
   default_lang: config.get('default_lang'),
   debug_lang: config.get('debug_lang'),
-  locale_directory: config.get('locale_directory'),
+  translation_directory: config.get('translation_directory'),
   disable_locale_check: config.get('disable_locale_check')
 }));
 
diff --git a/lib/configuration.js b/lib/configuration.js
index ef4d97f42..79d7aa72f 100644
--- a/lib/configuration.js
+++ b/lib/configuration.js
@@ -185,14 +185,18 @@ var conf = module.exports = convict({
   debug_lang: 'string = "it-CH"',
   supported_languages: {
     doc: "List of languages this deployment should detect and display localized strings.",
-    format: 'array { string }* = [ "en-US" ]',
+    format: 'array { string }* = [ "en-US", "it-CH" ]',
     env: 'SUPPORTED_LANGUAGES'
   },
   disable_locale_check: {
     doc: "Skip checking for gettext .mo files for supported locales",
     format: 'boolean = false'
   },
-  locale_directory: 'string = "locale"',
+  translation_directory: {
+    doc: "The directory where per-locale .json files containing translations reside",
+    format: 'string = "resources/static/i18n/"',
+    env: "TRANSLATION_DIR"
+  },
   express_log_format: 'string [ "default_bid", "dev_bid", "default", "dev", "short", "tiny" ] = "default"',
   keysigner_url: {
     format: 'string?',
@@ -256,6 +260,11 @@ if (process.env['CONFIG_FILES']) {
   });
 }
 
+// allow supported langauges to be specified in the env as a CSV string
+if (process.env['SUPPORTED_LANGUAGES']) {
+  conf.set('supported_languages', process.env['SUPPORTED_LANGUAGES'].split(','));
+}
+
 // special handling of HTTP_PROXY env var
 if (process.env['HTTP_PROXY']) {
   var p = process.env['HTTP_PROXY'].split(':');
diff --git a/lib/i18n.js b/lib/i18n.js
index 145365aea..70aed66f4 100644
--- a/lib/i18n.js
+++ b/lib/i18n.js
@@ -27,7 +27,7 @@ if (typeof fs.existsSync === 'function') {
   var existsSync = path.existsSync;
 }
 
-const BIDI_RTL_LANGS = ['ar', 'db-LB', 'fa', 'he'];
+const BIDI_RTL_LANGS = ['ar', 'fa', 'he'];
 
 var translations = {};
 
@@ -38,33 +38,29 @@ var translations = {};
   app.use(i18n.abide({
     supported_languages: ['en-US', 'fr', 'pl'],
     default_lang: 'en-US',
-    locale_directory: 'locale'
   }));
  *
  * Other valid options: gettext_alias, ngettext_alias
  */
 exports.abide = function (options) {
-
-  if (! options.gettext_alias)        options.gettext_alias = 'gettext';
-  if (! options.ngettext_alias)       options.ngettext_alias = 'ngettext';
-  if (! options.supported_languages)  options.supported_languages = ['en-US'];
-  if (! options.default_lang)         options.default_lang = 'en-US';
-  if (! options.debug_lang)           options.debug_lang = 'it-CH';
-  if (! options.disable_locale_check) options.disable_locale_check = false;
-  if (! options.locale_directory)     options.locale_directory = 'locale';
-  if (! options.i18n_json_dir)        options.i18n_json_dir = 'resources/static/i18n/';
+  if (! options.gettext_alias)          options.gettext_alias = 'gettext';
+  if (! options.supported_languages)    options.supported_languages = ['en-US'];
+  if (! options.default_lang)           options.default_lang = 'en-US';
+  if (! options.debug_lang)             options.debug_lang = 'it-CH';
+  if (! options.disable_locale_check)   options.disable_locale_check = false;
+  if (! options.translation_directory)  options.i18n_json_dir = 'l10n/';
 
   var json_dir = path.resolve(
           path.join(__dirname, '..'),
-          path.join(options.i18n_json_dir));
+          path.join(options.translation_directory));
 
   var debug_locale = localeFrom(options.debug_lang);
 
   options.supported_languages.forEach(function (lang, i) {
-    var l = (lang === options.debug_lang ? 'db_LB' : localeFrom(lang));
+    // ignore .json files for default and debug languages
+    if (options.default_lang == lang || options.debug_lang == lang) return;
 
-    // ignore .json files for en-US
-    if (lang == 'en-US') return;
+    var l = localeFrom(lang);
 
     try {
       // populate the in-memory translation cache with client.json, which contains
@@ -101,14 +97,10 @@ exports.abide = function (options) {
         debug_lang = options.debug_lang.toLowerCase(),
         locale;
 
-    if (lang && lang.toLowerCase && lang.toLowerCase() == debug_lang) {
-        lang = 'db-LB'; // What? http://www.youtube.com/watch?v=rJLnGjhPT1Q
-    }
-
     resp.local('lang', lang);
 
     // BIDI support, which direction does text flow?
-    lang_dir = BIDI_RTL_LANGS.indexOf(lang) >= 0 ? 'rtl' : 'ltr';
+    lang_dir = ((BIDI_RTL_LANGS.indexOf(lang) >= 0) || debug_lang == lang) ? 'rtl' : 'ltr';
     resp.local('lang_dir', lang_dir);
     req.lang = lang;
 
diff --git a/lib/wsapi.js b/lib/wsapi.js
index cabedf038..7cee435e2 100644
--- a/lib/wsapi.js
+++ b/lib/wsapi.js
@@ -34,7 +34,7 @@ i18n = require('./i18n');
 var abide = i18n.abide({
   supported_languages: config.get('supported_languages'),
   default_lang: config.get('default_lang'),
-  locale_directory: config.get('locale_directory'),
+  translation_directory: config.get('translation_directory'),
   disable_locale_check: config.get('disable_locale_check')
 });
 
-- 
GitLab