From 7365a4381028ad03cac142ba26b2273b59d22978 Mon Sep 17 00:00:00 2001 From: William Kwon Date: Wed, 16 Oct 2019 14:13:31 -0700 Subject: [PATCH] STRF-7438 fix stencil language translation in Safari --- CHANGELOG.md | 3 +++ lib/translator/index.js | 5 +++++ package.json | 2 +- spec/lib/translator.js | 10 ++++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23cf8041..293badef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 3.0.0-rc.26 (2019-10-16) +- Fix Stencil language translation in Safari[#186](https://github.com/bigcommerce/paper/pull/186) + ## 3.0.0-rc.25 (2019-10-15) - Bump paper-handlebars version to 4.2.3 [#183](https://github.com/bigcommerce/paper/pull/183) - Refactor logging. You can now pass an optional console-like logger object which will be used for internal logging as well as Handlebars logging. [#183](https://github.com/bigcommerce/paper/pull/183) diff --git a/lib/translator/index.js b/lib/translator/index.js index ef47590f..bd3623de 100644 --- a/lib/translator/index.js +++ b/lib/translator/index.js @@ -63,6 +63,11 @@ function Translator(acceptLanguage, allTranslations, logger = console) { * @returns {Translator} */ Translator.create = function (acceptLanguage, allTranslations, logger = console) { + // Safari only sends the most preferred language's code, this is to have fallbacks in case we don't have that language + // As an example we may not have fr-FR so add fr to the header + if (acceptLanguage.split(' ').length === 1 && acceptLanguage.split('-').length === 2) { + acceptLanguage = `${acceptLanguage.split('-')[0]}-${acceptLanguage.split('-')[1].toUpperCase()}, ${acceptLanguage.split('-')[0]};q=0.9`; + } return new Translator(acceptLanguage, allTranslations, logger); }; diff --git a/package.json b/package.json index 5f13113c..06e5c8ae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bigcommerce/stencil-paper", - "version": "3.0.0-rc.25", + "version": "3.0.0-rc.26", "description": "A Stencil plugin to load template files and render pages using backend renderer plugins.", "main": "index.js", "author": "Bigcommerce", diff --git a/spec/lib/translator.js b/spec/lib/translator.js index c4ec95c4..b89f8fce 100644 --- a/spec/lib/translator.js +++ b/spec/lib/translator.js @@ -62,6 +62,16 @@ describe('Translator', () => { done(); }); + it('should return translated strings in default language if it cannot find a translation file for a specified language', done => { + const translator = Translator.create('fr-FR', translations); + + expect(translator.translate('bye')).to.equal('au revoir'); + expect(translator.translate('hello', { name: 'Joe' })).to.equal('Bonjour Joe'); + expect(translator.translate('level1.level2')).to.equal('nous sommes dans le deuxième niveau'); + + done(); + }); + it('should return translated strings in English if cannot locate the preferred translation file', done => { const translator = Translator.create('es', translations);