From 3960dad05f3664d8218c525088ff354111918fa7 Mon Sep 17 00:00:00 2001 From: Marko Novak Date: Tue, 21 Jun 2016 09:09:47 +0200 Subject: [PATCH] Fix plurals bug when locale contains region code --- i18n.js | 6 +++++- test/i18n.makePlurals.js | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/i18n.js b/i18n.js index e16ef059..6ae33329 100644 --- a/i18n.js +++ b/i18n.js @@ -363,7 +363,11 @@ module.exports = (function() { if (PluralsForLocale[targetLocale]) { p = PluralsForLocale[targetLocale]; } else { - p = new MakePlural(targetLocale); + // split locales with a region code + var lc = targetLocale.toLowerCase().split(/[_-\s]+/) + .filter(function(el){ return true && el; }); + // take the first part of locale, fallback to full locale + p = new MakePlural(lc[0] || targetLocale); PluralsForLocale[targetLocale] = p; } diff --git a/test/i18n.makePlurals.js b/test/i18n.makePlurals.js index e4d1d37e..0d91e610 100644 --- a/test/i18n.makePlurals.js +++ b/test/i18n.makePlurals.js @@ -16,7 +16,7 @@ function putJson(l, d) { describe('i18n supports MakePlural', function() { var TestScope = {}; - var locales = ['en', 'de', 'fr', 'ru', 'ar']; + var locales = ['en', 'de', 'fr', 'ru', 'ar', 'de-DE', 'de-AT', 'de-CH']; var fixture = { de: { "%s cat": { @@ -24,6 +24,24 @@ describe('i18n supports MakePlural', function() { other: '%d Katzen' } }, + 'de-DE': { + "%s cat": { + one: '%d Katze', + other: '%d Katzen' + } + }, + 'de-AT': { + "%s cat": { + one: '%d Katze', + other: '%d Katzen' + } + }, + 'de-CH': { + "%s cat": { + one: '%d Katze', + other: '%d Katzen' + } + }, en: { "%s cat": { one: '%d cat', @@ -138,4 +156,18 @@ describe('i18n supports MakePlural', function() { done(); }); + it('__n() should return correctly in german for all regions', function(done) { + var regions = ['de-DE', 'de-AT', 'de-CH']; + for(var i = 0; i < regions.length; i++) { + TestScope.setLocale(regions[i]); + should.deepEqual(TestScope.__n('%s cat', 0), '0 Katzen'); + should.deepEqual(TestScope.__n('%s cat', 1), '1 Katze'); + should.deepEqual(TestScope.__n('%s cat', 2), '2 Katzen'); + should.deepEqual(TestScope.__n('%s cat', 5), '5 Katzen'); + should.deepEqual(TestScope.__n('%s cat', 6), '6 Katzen'); + should.deepEqual(TestScope.__n('%s cat', 21), '21 Katzen'); + } + done(); + }); + }); \ No newline at end of file