mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-16 15:45:13 +00:00
81 lines
1.8 KiB
JavaScript
81 lines
1.8 KiB
JavaScript
var _ = require('lodash');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
|
|
var i18n = require('i18n');
|
|
|
|
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');
|
|
});
|
|
|
|
i18n.configure({
|
|
locales: LOCALES,
|
|
directory: I18N_PATH,
|
|
defaultLocale: DEFAULT_LANGUAGE,
|
|
updateFiles: false
|
|
});
|
|
|
|
function compareLocales(lang, locale) {
|
|
var langMain = _.first(lang.split('-'));
|
|
var langSecond = _.last(lang.split('-'));
|
|
|
|
var localeMain = _.first(locale.split('-'));
|
|
var localeSecond = _.last(locale.split('-'));
|
|
|
|
if (locale == lang) return 100;
|
|
if (localeMain == langMain) return 50;
|
|
if (localeSecond == langSecond) return 20;
|
|
return 0;
|
|
}
|
|
|
|
var normalizeLanguage = _.memoize(function(lang) {
|
|
var language = _.chain(LOCALES)
|
|
.values()
|
|
.map(function(locale) {
|
|
return {
|
|
locale: locale,
|
|
score: compareLocales(lang, locale)
|
|
};
|
|
})
|
|
.filter(function(lang) {
|
|
return lang.score > 0;
|
|
})
|
|
.sortBy('score')
|
|
.pluck('locale')
|
|
.last()
|
|
.value();
|
|
return language || lang;
|
|
});
|
|
|
|
function translate(locale, phrase) {
|
|
var args = Array.prototype.slice.call(arguments, 2);
|
|
|
|
return i18n.__.apply({}, [{
|
|
locale: locale,
|
|
phrase: phrase
|
|
}].concat(args));
|
|
}
|
|
|
|
function getCatalog(locale) {
|
|
locale = normalizeLanguage(locale);
|
|
return i18n.getCatalog(locale);
|
|
}
|
|
|
|
function getLocales() {
|
|
return LOCALES;
|
|
}
|
|
|
|
function hasLocale(locale) {
|
|
return _.contains(LOCALES, locale);
|
|
}
|
|
|
|
module.exports = {
|
|
__: translate,
|
|
normalizeLanguage: normalizeLanguage,
|
|
getCatalog: getCatalog,
|
|
getLocales: getLocales,
|
|
hasLocale: hasLocale
|
|
};
|