218 lines
6 KiB
JavaScript
218 lines
6 KiB
JavaScript
// i18next, v1.7.5
|
|
// Copyright (c)2014 Jan Mühlemann (jamuhl).
|
|
// Distributed under MIT license
|
|
// http://i18next.com
|
|
//////////////////////
|
|
// HINT
|
|
//
|
|
// you need to replace '_fetchOne' with 'fetchOne' to use this on server
|
|
//
|
|
|
|
var i18n = require('../index')
|
|
, expect = require('expect.js')
|
|
, sinon = require('sinon');
|
|
|
|
describe('i18next.functions', function() {
|
|
|
|
var opts;
|
|
|
|
beforeEach(function(done) {
|
|
opts = {
|
|
lng: 'en-US',
|
|
fallbackLng: 'dev',
|
|
fallbackNS: [],
|
|
fallbackToDefaultNS: false,
|
|
fallbackOnNull: true,
|
|
fallbackOnEmpty: false,
|
|
load: 'all',
|
|
preload: [],
|
|
supportedLngs: [],
|
|
lowerCaseLng: false,
|
|
ns: 'translation',
|
|
resGetPath: 'test/locales/__lng__/__ns__.json',
|
|
resSetPath: 'test/locales/__lng__/new.__ns__.json',
|
|
saveMissing: false,
|
|
resStore: false,
|
|
returnObjectTrees: false,
|
|
interpolationPrefix: '__',
|
|
interpolationSuffix: '__',
|
|
postProcess: '',
|
|
parseMissingKey: '',
|
|
debug: false,
|
|
objectTreeKeyHandler: null,
|
|
lngWhitelist: null
|
|
};
|
|
|
|
i18n.init(opts, function(t) {
|
|
i18n.sync.resStore = {};
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('CI mode', function() {
|
|
|
|
beforeEach(function(done) {
|
|
i18n.init(i18n.functions.extend(opts, {
|
|
resStore: {
|
|
'en-US': { translation: { 'simpleTest': 'ok_from_en-US' } },
|
|
'de-DE': { translation: { 'simpleTest': 'ok_from_de-DE' } }
|
|
}
|
|
}), function(t) { done(); } );
|
|
});
|
|
|
|
it('it should provide resources for set language', function(done) {
|
|
expect(i18n.t('simpleTest')).to.be('ok_from_en-US');
|
|
|
|
i18n.setLng('CIMode', function(t) {
|
|
expect(t('simpleTest')).to.be('simpleTest');
|
|
done();
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('setting language', function() {
|
|
|
|
beforeEach(function(done) {
|
|
i18n.init(i18n.functions.extend(opts, {
|
|
resStore: {
|
|
'en-US': { translation: { 'simpleTest': 'ok_from_en-US' } },
|
|
'de-DE': { translation: { 'simpleTest': 'ok_from_de-DE' } }
|
|
}
|
|
}), function(t) { done(); } );
|
|
});
|
|
|
|
it('it should provide resources for set language', function(done) {
|
|
expect(i18n.t('simpleTest')).to.be('ok_from_en-US');
|
|
|
|
i18n.setLng('de-DE', function(t) {
|
|
expect(t('simpleTest')).to.be('ok_from_de-DE');
|
|
done();
|
|
});
|
|
|
|
});
|
|
|
|
it('should be possible to call setLng multiple times to get specialized callbacks', function(done) {
|
|
i18n.setLng('de-DE', { fixLng: true }, function(deDE) {
|
|
expect(deDE.lng).to.be('de-DE');
|
|
|
|
i18n.setLng('en-US', { fixLng: true }, function(enUS) {
|
|
expect(deDE.lng).to.be('de-DE');
|
|
expect(enUS.lng).to.be('en-US');
|
|
|
|
expect(deDE('simpleTest')).to.be('ok_from_de-DE');
|
|
expect(enUS('simpleTest')).to.be('ok_from_en-US');
|
|
|
|
done();
|
|
});
|
|
});
|
|
})
|
|
|
|
});
|
|
|
|
describe('preloading multiple languages', function() {
|
|
|
|
var spy;
|
|
|
|
beforeEach(function(done) {
|
|
spy = sinon.spy(i18n.sync, 'fetchOne');
|
|
i18n.init(opts, function(t) { done(); });
|
|
});
|
|
|
|
afterEach(function() {
|
|
spy.restore();
|
|
});
|
|
|
|
it('it should preload resources for languages', function(done) {
|
|
spy.reset();
|
|
if (i18n.sync.resStore) i18n.sync.resStore = {}; // to reset for test on server!
|
|
i18n.preload('de-DE', function(t) {
|
|
expect(spy.callCount).to.be(5); // en-US, en, de-DE, de, dev
|
|
done();
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('postprocessing tranlation', function() {
|
|
|
|
describe('having a postprocessor', function() {
|
|
|
|
before(function(){
|
|
i18n.addPostProcessor('myProcessor', function(val, key, opts) {
|
|
return 'ok_from_postprocessor';
|
|
});
|
|
i18n.addPostProcessor('myProcessor2', function(val, key, opts) {
|
|
return val + ' ok' ;
|
|
});
|
|
});
|
|
|
|
beforeEach(function(done) {
|
|
i18n.init(i18n.functions.extend(opts, {
|
|
resStore: {
|
|
'en-US': { translation: { 'simpleTest': 'ok_from_en-US' } },
|
|
'de-DE': { translation: { 'simpleTest': 'ok_from_de-DE' } }
|
|
}
|
|
}), function(t) { done(); } );
|
|
});
|
|
|
|
it('it should postprocess the translation by passing in postProcess name to t function', function() {
|
|
expect(i18n.t('simpleTest', {postProcess: 'myProcessor'})).to.be('ok_from_postprocessor');
|
|
});
|
|
|
|
it('it should postprocess on default value', function() {
|
|
expect(i18n.t('notFound1', {defaultValue: 'defaultValue', postProcess: 'myProcessor2'})).to.be('defaultValue ok');
|
|
});
|
|
|
|
it('it should postprocess on missing value', function() {
|
|
expect(i18n.t('notFound2', {postProcess: 'myProcessor2'})).to.be('notFound2 ok');
|
|
});
|
|
|
|
describe('or setting it as default on init', function() {
|
|
|
|
beforeEach(function(done) {
|
|
i18n.init(i18n.functions.extend(opts, {
|
|
resStore: {
|
|
'en-US': { translation: { 'simpleTest': 'ok_from_en-US' } },
|
|
'de-DE': { translation: { 'simpleTest': 'ok_from_de-DE' } }
|
|
},
|
|
postProcess: 'myProcessor'
|
|
}), function(t) { done(); } );
|
|
});
|
|
|
|
it('it should postprocess the translation by default', function() {
|
|
expect(i18n.t('simpleTest')).to.be('ok_from_postprocessor');
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
// functions/functions.postmissing.spec.js
|
|
|
|
describe('using objectTreeKeyHandler', function() {
|
|
|
|
beforeEach(function(done) {
|
|
i18n.init(i18n.functions.extend(opts, {
|
|
objectTreeKeyHandler: function(key, value, lng, ns, opts) {
|
|
return i18n.t(key + '.a');
|
|
},
|
|
resStore: {
|
|
'en-US': { translation: { 'simpleTest': { a: 'a value', b: 'b value' } } }
|
|
},
|
|
returnObjectTrees: false
|
|
}), function(t) { done(); } );
|
|
});
|
|
|
|
it('it should apply objectTreeKeyHandler', function() {
|
|
expect(i18n.t('simpleTest')).to.be('a value');
|
|
});
|
|
|
|
});
|
|
|
|
|
|
}); |