diff options
author | Samy Pessé <samypesse@gmail.com> | 2015-04-01 22:17:12 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2015-04-01 22:17:12 +0200 |
commit | 4b206855621b71263d5521851b5b7fbfa7d28ac7 (patch) | |
tree | a0a724426c31f163c5ab5e4f7977f84528f1c016 /lib/utils/i18n.js | |
parent | fff7c5cc3ac9191765e0957fecf994e813923225 (diff) | |
download | gitbook-4b206855621b71263d5521851b5b7fbfa7d28ac7.zip gitbook-4b206855621b71263d5521851b5b7fbfa7d28ac7.tar.gz gitbook-4b206855621b71263d5521851b5b7fbfa7d28ac7.tar.bz2 |
Use i18n node module for template translation
Diffstat (limited to 'lib/utils/i18n.js')
-rw-r--r-- | lib/utils/i18n.js | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/lib/utils/i18n.js b/lib/utils/i18n.js index 449fccb..d504e9a 100644 --- a/lib/utils/i18n.js +++ b/lib/utils/i18n.js @@ -2,32 +2,19 @@ var _ = require("lodash"); var path = require("path"); var fs = require("fs"); -var I18N_PATH = path.resolve(__dirname, "../../theme/i18n/") +var i18n = require("i18n"); -var getLocales = _.memoize(function() { - var locales = fs.readdirSync(I18N_PATH); - return _.chain(locales) - .map(function(local) { - local = path.basename(local, ".json"); - return [local, _.extend({ - direction: "ltr" - }, require(path.join(I18N_PATH, local)), { - id: local - })]; - }) - .object() - .value(); +var I18N_PATH = path.resolve(__dirname, "../../theme/i18n/") +var DEFAULT_LANGUAGE = "en"; +var LOCALES = _.map(fs.readdirSync(I18N_PATH), function(lang) { + return path.basename(lang, ".json"); }); -var getLanguages = function() { - return _.keys(getLocales()); -}; - -var getByLanguage = function(lang) { - lang = normalizeLanguage(lang); - var locales = getLocales(); - return locales[lang]; -}; +i18n.configure({ + locales: LOCALES, + directory: I18N_PATH, + defaultLocale: DEFAULT_LANGUAGE +}); var compareLocales = function(lang, locale) { var langMain = _.first(lang.split("-")); @@ -43,12 +30,9 @@ var compareLocales = function(lang, locale) { }; var normalizeLanguage = _.memoize(function(lang) { - var locales = getLocales(); - var language = _.chain(locales) + var language = _.chain(LOCALES) .values() .map(function(locale) { - locale = locale.id; - return { locale: locale, score: compareLocales(lang, locale) @@ -64,9 +48,32 @@ var normalizeLanguage = _.memoize(function(lang) { return language || lang; }); +var translate = function(locale, phrase) { + var args = Array.prototype.slice.call(arguments, 2); + + return i18n.__.apply({}, [{ + locale: locale, + phrase: phrase + }].concat(args)); +}; + +var getCatalog = function(locale) { + locale = normalizeLanguage(locale); + return i18n.getCatalog(locale); +}; + +var getLocales = function() { + return LOCALES; +}; + +var hasLocale = function(locale) { + return _.contains(LOCALES, locale); +} + module.exports = { + __: translate, + normalizeLanguage: normalizeLanguage, + getCatalog: getCatalog, getLocales: getLocales, - getLanguages: getLanguages, - getByLanguage: getByLanguage, - normalizeLanguage: normalizeLanguage + hasLocale: hasLocale }; |