UNPKG

translator

Version:

[ABANDONED] Translator for node and also for browser

337 lines (325 loc) 15.8 kB
// Generated by CoffeeScript 1.6.3 (function() { var Cache, FileStorage, Translator, cache, dir, expect, fs, path, translator; expect = require('chai').expect; path = require('path'); fs = require('fs'); Translator = require('../../../lib/Translator'); FileStorage = require('cache-storage/Storage/FileStorage'); Cache = require('cache-storage'); dir = path.normalize(__dirname + '/../../data'); cache = path.normalize(__dirname + '/../../cache'); translator = null; describe('Translator', function() { beforeEach(function() { translator = new Translator(dir); return translator.language = 'en'; }); afterEach(function() { return translator = null; }); describe('#constructor()', function() { it('should contain some plural forms', function() { return expect(translator.plurals).not.to.be.eql({}); }); it('should create translator with relative path', function() { translator = new Translator('../../data'); return expect(translator.loader.directory).to.be.equal(dir); }); return it('should create translator from path in config file', function() { translator = new Translator('../../data/config.json'); return expect(translator.loader.directory).to.be.equal(dir); }); }); describe('#normalizeTranslations()', function() { it('should return normalized object with dictionary', function() { return expect(translator.normalizeTranslations({ car: 'car', bus: ['bus'] })).to.be.eql({ car: ['car'], bus: ['bus'] }); }); it('should return normalized translations without comments', function() { return expect(translator.normalizeTranslations({ one: ['# hello #', 'car', '# house #', 'something'] })).to.be.eql({ one: ['car', 'something'] }); }); it('should return normalized translations for list with comments', function() { return expect(translator.normalizeTranslations({ one: [['first'], '# comment #', ['second', '# comment #'], ['third']] })).to.be.eql({ one: [['first'], ['second'], ['third']] }); }); return it('should return normalized translations for list with new syntax', function() { return expect(translator.normalizeTranslations({ '-- list': ['first', 'second', 'third'] })).to.be.eql({ list: [['first'], ['second'], ['third']] }); }); }); describe('#getMessageInfo()', function() { return it('should return information about dictionary from message to translate', function() { return expect(translator.getMessageInfo('web.pages.homepage.promo.title')).to.be.eql({ path: 'web/pages/homepage', category: 'promo', name: 'title' }); }); }); describe('#loadCategory()', function() { it('should load parsed dictionary', function() { return expect(translator.loadCategory('web/pages/homepage', 'simple')).to.be.eql({ title: ['Title of promo box'] }); }); it('should load dictionary for different language', function() { return expect(translator.loadCategory('web/pages/homepage', 'simple', 'cs')).to.be.eql({ title: ['Titulek promo boxu'] }); }); return it('should return empty object if dictionary does not exists', function() { return expect(translator.loadCategory('some/unknown', 'translation')).to.be.eql({}); }); }); describe('#findTranslation()', function() { it('should return english translations from dictionary', function() { return expect(translator.findTranslation('web.pages.homepage.promo.title')).to.be.eql(['Title of promo box']); }); it('should return translations from dictionary for different language', function() { return expect(translator.findTranslation('web.pages.homepage.simple.title', 'cs')).to.be.eql(['Titulek promo boxu']); }); it('should return null when translation does not exists', function() { return expect(translator.findTranslation('some.unknown.translation')).to.be["null"]; }); return it('should return null when translation does not exists for given language', function() { return expect(translator.findTranslation('some.unknown.translation', 'cs')).to.be["null"]; }); }); describe('#hasTranslation()', function() { it('should return true when translation exists', function() { return expect(translator.hasTranslation('web.pages.homepage.promo.title')).to.be["true"]; }); it('should return true when translation exists for different language', function() { return expect(translator.hasTranslation('web.pages.homepage.simple.title', 'cs')).to.be["true"]; }); it('should return false when translation does not exists', function() { return expect(translator.hasTranslation('some.unknown.translation')).to.be["false"]; }); return it('should return false when translation does not exists for different language', function() { return expect(translator.hasTranslation('some.unknown.translation', 'cs')).to.be["false"]; }); }); describe('#pluralize()', function() { it('should return right version of translation(s) by count', function() { var cars, fruits; cars = ['1 car', '%count% cars']; expect(translator.pluralize('car', cars, 1)).to.be.equal('1 car'); expect(translator.pluralize('car', cars, 4)).to.be.equal('%count% cars'); fruits = [['1 apple', '%count% apples'], ['1 orange', '%count% oranges']]; expect(translator.pluralize('list', fruits, 1)).to.be.eql(['1 apple', '1 orange']); return expect(translator.pluralize('list', fruits, 4)).to.be.eql(['%count% apples', '%count% oranges']); }); return it('should return right version of translation(s) by count for different language', function() { var cars, fruits; cars = ['1 auto', '%count% auta', '%count% aut']; expect(translator.pluralize('car', cars, 1, 'cs')).to.be.equal('1 auto'); expect(translator.pluralize('car', cars, 4, 'cs')).to.be.equal('%count% auta'); fruits = [['1 jablko', '%count% jablka', '%count% jablek'], ['1 pomeranč', '%count% pomeranče', '%count% pomerančů']]; expect(translator.pluralize('list', fruits, 1)).to.be.eql(['1 jablko', '1 pomeranč']); return expect(translator.pluralize('list', fruits, 4)).to.be.eql(['%count% jablka', '%count% pomeranče']); }); }); describe('#prepareTranslation()', function() { return it('should return expanded translation with arguments', function() { translator.addReplacement('item', 'car'); return expect(translator.prepareTranslation('%item% has got %count% %append%.', { count: 5, append: 'things' })).to.be.equal('car has got 5 things.'); }); }); describe('#applyReplacements()', function() { return it('should add replacements to text', function() { return expect(translator.applyReplacements('%one% %two% %three%', { one: 1, two: 2, three: 3 })).to.be.equal('1 2 3'); }); }); describe('#translate()', function() { it('should return translated text from dictionary', function() { return expect(translator.translate('web.pages.homepage.promo.title')).to.be.equal('Title of promo box'); }); it('should return original text if text is eclosed in \':\'', function() { return expect(translator.translate(':do.not.translate.me:')).to.be.equal('do.not.translate.me'); }); it('should return array of list', function() { return expect(translator.translate('web.pages.homepage.promo.list')).to.be.eql(['1st item', '2nd item', '3rd item', '4th item', '5th item']); }); it('should return translation for plural form', function() { return expect(translator.translate('web.pages.homepage.promo.cars', 3)).to.be.equal('3 cars'); }); it('should return translation of list for plural form', function() { return expect(translator.translate('web.pages.homepage.promo.fruits', 3)).to.be.eql(['3 bananas', '3 citrons', '3 oranges']); }); it('should return translation with replacement in message', function() { translator.addReplacement('one', 1); translator.addReplacement('dictionary', 'promo'); return expect(translator.translate('web.pages.homepage.%dictionary%.%name%', null, { two: 2, name: 'advanced' })).to.be.equal('1 2'); }); it('should translate with parameters in place of count argument', function() { return expect(translator.translate('web.pages.homepage.promo.advanced', { one: '1', two: 2 })).to.be.equal('1 2'); }); it('should translate one item from list in translate method', function() { expect(translator.translate('web.pages.homepage.promo.newList[0]')).to.be.equal('first'); expect(translator.translate('web.pages.homepage.promo.newList[1]')).to.be.equal('second'); return expect(translator.translate('web.pages.homepage.promo.newList[2]')).to.be.equal('third'); }); it('should translate text from root directory', function() { return expect(translator.translate('first.test')).to.be.equal('hello'); }); it('should throw an error when translating one item from non-list', function() { return expect(function() { return translator.translate('web.pages.homepage.promo.title[5]'); })["throw"](Error); }); it('should throw an error when translating one item which does not exists', function() { return expect(function() { return translator.translate('web.pages.homepage.promo.newList[5]'); })["throw"](Error); }); it('should return translated text from dictionary for different language', function() { return expect(translator.translate('cs|web.pages.homepage.simple.title')).to.be.equal('Titulek promo boxu'); }); it('should return original text if text is eclosed in \':\'', function() { return expect(translator.translate(':cs|do.not.translate.me:')).to.be.equal('do.not.translate.me'); }); it('should not apply filters to not translated messages', function() { translator.addFilter(function(message) { return message.split('').reverse().join(''); }); return expect(translator.translate('unknown.title')).to.be.equal('unknown.title'); }); it('should not apply filters to not translatable messages', function() { translator.addFilter(function(message) { return message.split('').reverse().join(''); }); return expect(translator.translate(':web.pages.homepage.simple.title:')).to.be.equal('web.pages.homepage.simple.title'); }); it('should apply filters to simple translations', function() { translator.addFilter(function(message) { return message.split('').reverse().join(''); }); return expect(translator.translate('web.pages.homepage.simple.title')).to.be.equal('xob omorp fo eltiT'); }); return it('should apply filters for lists of translations', function() { translator.addFilter(function(message) { return message.split('').reverse().join(''); }); return expect(translator.translate('web.pages.homepage.promo.fruits', 3)).to.be.eql(['sananab 3', 'snortic 3', 'segnaro 3']); }); }); describe('#translatePairs()', function() { it('should throw an error if message to translate are not arrays', function() { return expect(function() { return translator.translatePairs('web.pages.homepage.promo', 'title', 'list'); })["throw"](Error); }); it('should throw an error if keys and values have not got the same length', function() { return expect(function() { return translator.translatePairs('web.pages.homepage.promo', 'list', 'keys'); })["throw"](Error); }); return it('should return object with keys and values translations', function() { return expect(translator.translatePairs('web.pages.homepage.promo', 'keys', 'values')).to.be.eql({ '1st title': '1st text', '2nd title': '2nd text', '3rd title': '3rd text', '4th title': '4th text' }); }); }); describe('#translateMap()', function() { it('should throw an error if object is not array or object', function() { return expect(function() { return translator.translateMap(new Date); }).to["throw"](Error); }); it('should translate array', function() { return expect(translator.translateMap(['web.pages.homepage.promo.title', 'web.pages.homepage.promo.info'])).to.be.eql(['Title of promo box', 'Some info text']); }); it('should translate object', function() { var t; t = { title: 'web.pages.homepage.promo.title', info: 'web.pages.homepage.promo.info' }; return expect(translator.translateMap(t)).to.be.eql({ title: 'Title of promo box', info: 'Some info text' }); }); it('should translate array with plural forms translations', function() { return expect(translator.translateMap(['web.pages.homepage.promo.cars', 'web.pages.homepage.promo.mobile'], 6)).to.be.eql(['6 cars', '6 mobiles']); }); it('should translate array with arguments', function() { return expect(translator.translateMap(['web.pages.homepage.promo.advanced'], { one: 1, two: 2 })).to.be.eql(['1 2']); }); it('should translate array with base path', function() { return expect(translator.translateMap(['title', 'info'], 'web.pages.homepage.promo')).to.be.eql(['Title of promo box', 'Some info text']); }); return it('should translate array with list', function() { return expect(translator.translateMap(['web.pages.homepage.promo.fruits'], 4)).to.be.eql([['4 bananas', '4 citrons', '4 oranges']]); }); }); describe('#setCacheStorage()', function() { it('should throw an exception if storage is not the right type', function() { return expect(function() { return translator.setCacheStorage(new Array); })["throw"](Error); }); return it('should create cache instance', function() { translator.setCacheStorage(new FileStorage(cache)); return expect(translator.cache).to.be.an["instanceof"](Cache); }); }); return describe('#expand()', function() { it('should expand base translate method', function() { var main; main = translator.expand({}); return expect(main._('web.pages.homepage.promo.title')).to.be.equal('Title of promo box'); }); it('should expand translatePairs method', function() { var main; main = translator.expand({}); return expect(main._p('web.pages.homepage.promo', 'keys', 'values')).to.be.eql({ '1st title': '1st text', '2nd title': '2nd text', '3rd title': '3rd text', '4th title': '4th text' }); }); return it('should expand translateMap method', function() { var main; main = translator.expand({}); return expect(main._m(['web.pages.homepage.promo.title', 'web.pages.homepage.promo.info'])).to.be.eql(['Title of promo box', 'Some info text']); }); }); }); }).call(this);