diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/book.js | 12 | ||||
-rw-r--r-- | lib/configuration.js | 3 | ||||
-rw-r--r-- | lib/generators/website.js | 11 | ||||
-rw-r--r-- | lib/utils/i18n.js | 67 |
4 files changed, 50 insertions, 43 deletions
diff --git a/lib/book.js b/lib/book.js index 42e2c23..e357ad8 100644 --- a/lib/book.js +++ b/lib/book.js @@ -2,9 +2,9 @@ var Q = require("q"); var _ = require("lodash"); var path = require("path"); var util = require("util"); -var lunr = require('lunr'); +var lunr = require("lunr"); var parsers = require("gitbook-parsers"); -var color = require('bash-color'); +var color = require("bash-color"); var fs = require("./utils/fs"); var parseNavigation = require("./utils/navigation"); @@ -12,6 +12,7 @@ var parseProgress = require("./utils/progress"); var pageUtil = require("./utils/page"); var batch = require("./utils/batch"); var links = require("./utils/links"); +var i18n = require("./utils/i18n"); var logger = require("./utils/logger"); var Configuration = require("./configuration"); @@ -425,7 +426,7 @@ Book.prototype.parseSummary = function() { .then(function(content) { return summary.parser.summary(content, { entryPoint: that.readmeFile, - entryPointTitle: "", + entryPointTitle: that.i18n('SUMMARY_INTRODUCTION'), files: that.files }); }); @@ -727,6 +728,11 @@ Book.prototype.setOutput = function(p) { }); }; +// Translate a strign according to the book language +Book.prototype.i18n = function(phrase) { + var args = Array.prototype.slice.call(arguments); + return i18n.__.apply({}, [this.config.normalizeLanguage()].concat(args)); +}; // Init and return a book Book.init = function(root) { diff --git a/lib/configuration.js b/lib/configuration.js index 70b2eb5..3f8c822 100644 --- a/lib/configuration.js +++ b/lib/configuration.js @@ -60,7 +60,6 @@ function normalizePluginsNames(plugins) { return _.pluck(normalizePluginsList(plugins), "name"); }; - var Configuration = function(book, options) { var that = this; @@ -125,7 +124,7 @@ Configuration.prototype.load = function() { // Default value for text direction (from language) if (!that.options.direction) { - var lang = i18n.getByLanguage(that.options.language); + var lang = i18n.getCatalog(that.options.language); if (lang) that.options.direction = lang.direction; } diff --git a/lib/generators/website.js b/lib/generators/website.js index 9405a1c..fbf0a8d 100644 --- a/lib/generators/website.js +++ b/lib/generators/website.js @@ -6,7 +6,6 @@ var _ = require("lodash"); var nunjucks = require("nunjucks"); var AutoEscapeExtension = require("nunjucks-autoescape"); var FilterExtension = require("nunjucks-filter"); -var I18nExtension = require("nunjucks-i18n"); var fs = require("../utils/fs"); var BaseGenerator = require("../generator"); @@ -79,8 +78,8 @@ Generator.prototype.prepareTemplateEngine = function() { .then(function() { var language = that.book.config.normalizeLanguage(); - if (!i18n.getByLanguage(language) && language != "en") { - that.book.log.warn.ln("Language '"+language+"' is not available as a layout locales (en, "+i18n.getLanguages().join(", ")+")"); + if (!i18n.hasLocale(language)) { + that.book.log.warn.ln("Language '"+language+"' is not available as a layout locales (en, "+i18n.getLocales().join(", ")+")"); } var folders = _.chain(that.templates) @@ -101,15 +100,11 @@ Generator.prototype.prepareTemplateEngine = function() { that.env.addFilter('lvl', function(lvl) { return lvl.split(".").length; }); + that.env.addGlobal('__', that.book.i18n.bind(that.book)); // Add extension that.env.addExtension('AutoEscapeExtension', new AutoEscapeExtension(that.env)); that.env.addExtension('FilterExtension', new FilterExtension(that.env)); - that.env.addExtension('I18nExtension', new I18nExtension({ - env: that.env, - translations: i18n.getLocales(), - locale: "language" - })); }); }; 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 }; |