Compare commits
2 Commits
feature-pl
...
feature-pl
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
57e3e930a7 | ||
|
|
8112bf929c |
@@ -45,7 +45,6 @@ Patch locales functions to koa app.
|
||||
- {String} functionnName: locale function (with plurals management) name patch on koa context. Optional, default is `__n`.
|
||||
- {String} dirs: locales resources store directories. Optional, default is `['$PWD/locales']`.
|
||||
- {String} defaultLocale: default locale. Optional, default is `en-US`.
|
||||
- {Boolean} fallbackToDefaultLocale: fall back to default local if current translation is not found. Optional, default is `false`.
|
||||
- {String} queryField: locale field name on query. Optional, default is `locale`.
|
||||
- {String} cookieField: locale field name on cookie. Optional, default is `locale`.
|
||||
- {String} cookieDomain: domain on cookie. Optional, default is `''`.
|
||||
|
||||
40
index.js
40
index.js
@@ -14,7 +14,6 @@ const MakePlural = require('make-plural');
|
||||
|
||||
const DEFAULT_OPTIONS = {
|
||||
defaultLocale: 'en-US',
|
||||
fallbackToDefaultLocale: 'false',
|
||||
queryField: 'locale',
|
||||
cookieField: 'locale',
|
||||
localeAlias: {},
|
||||
@@ -23,13 +22,12 @@ const DEFAULT_OPTIONS = {
|
||||
dir: undefined,
|
||||
dirs: [path.join(process.cwd(), 'locales')],
|
||||
functionName: '__',
|
||||
functionnName: '__n'
|
||||
functionnName: '__n',
|
||||
};
|
||||
|
||||
module.exports = function (app, options) {
|
||||
options = assign({}, DEFAULT_OPTIONS, options);
|
||||
const defaultLocale = formatLocale(options.defaultLocale);
|
||||
const fallbackToDefaultLocale = options.fallbackToDefaultLocale;
|
||||
const queryField = options.queryField;
|
||||
const cookieField = options.cookieField;
|
||||
const cookieDomain = options.cookieDomain;
|
||||
@@ -94,9 +92,6 @@ module.exports = function (app, options) {
|
||||
const resource = resources[locale] || {};
|
||||
|
||||
let text = resource[key];
|
||||
if (text === undefined && fallbackToDefaultLocale === true) {
|
||||
text = resources[defaultLocale][key];
|
||||
}
|
||||
if (text === undefined) {
|
||||
text = key;
|
||||
}
|
||||
@@ -141,51 +136,48 @@ module.exports = function (app, options) {
|
||||
}
|
||||
|
||||
app[functionName] = gettext;
|
||||
|
||||
|
||||
|
||||
function gettextn(locale, key, count, value) {
|
||||
if (arguments.length === 0 || arguments.length === 1) {
|
||||
// __n()
|
||||
// __n('en')
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
if (arguments.length === 2) {
|
||||
// __n('en', key)
|
||||
return gettext(locale, key);
|
||||
}
|
||||
|
||||
|
||||
const resource = resources[locale] || {};
|
||||
|
||||
|
||||
// enforce number
|
||||
count = Number(count);
|
||||
|
||||
|
||||
//**************************************************************//
|
||||
// Directly adapted from __n function of i18n module :
|
||||
// https://github.com/mashpie/i18n-node/blob/master/i18n.js
|
||||
var p;
|
||||
let p;
|
||||
// create a new Plural for locale
|
||||
// and try to cache instance
|
||||
if (PluralsForLocale[locale]) {
|
||||
p = PluralsForLocale[locale];
|
||||
} else {
|
||||
// split locales with a region code
|
||||
var lc = locale.toLowerCase().split(/[_-\s]+/)
|
||||
const lc = locale.toLowerCase().split(/[_-\s]+/)
|
||||
.filter(function(el){ return true && el; });
|
||||
// take the first part of locale, fallback to full locale
|
||||
p = MakePlural[lc[0] || locale];
|
||||
PluralsForLocale[locale] = p;
|
||||
}
|
||||
// fallback to 'other' on case of missing translations
|
||||
let text = resource[key+"."+p(count)] || resource[key+".other"];
|
||||
let text = resource[key + '.' + p(count)] || resource[key + '.other'];
|
||||
//**************************************************************//
|
||||
|
||||
|
||||
if (text === undefined && isObject(key)) {
|
||||
text = key[p(count)] || key["other"];
|
||||
text = key[p(count)] || key['other'];
|
||||
}
|
||||
if (text === undefined && fallbackToDefaultLocale === true) {
|
||||
text = resources[defaultLocale][key+"."+p(count)] || resources[defaultLocale][key+".other"];
|
||||
}
|
||||
|
||||
if (text === undefined) {
|
||||
text = key;
|
||||
}
|
||||
@@ -227,9 +219,9 @@ module.exports = function (app, options) {
|
||||
args[i - 2] = arguments[i];
|
||||
}
|
||||
return util.format.apply(util, args);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
app[functionnName] = gettextn;
|
||||
|
||||
app.context[functionName] = function (key, value) {
|
||||
@@ -252,7 +244,7 @@ module.exports = function (app, options) {
|
||||
}
|
||||
return gettext.apply(this, args);
|
||||
};
|
||||
|
||||
|
||||
app.context[functionnName] = function (key, count, value) {
|
||||
if (arguments.length === 0) {
|
||||
// __n()
|
||||
@@ -264,7 +256,7 @@ module.exports = function (app, options) {
|
||||
// __n(key)
|
||||
return gettext(locale, key);
|
||||
}
|
||||
|
||||
|
||||
if (arguments.length === 2) {
|
||||
return gettextn(locale, key, count);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user