summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/book.js12
-rw-r--r--lib/configuration.js3
-rw-r--r--lib/generators/website.js11
-rw-r--r--lib/utils/i18n.js67
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
};