From c97b659a34f20006e05ae76c93e5858153cccda9 Mon Sep 17 00:00:00 2001 From: Tobias Jordans Date: Sat, 22 Dec 2018 19:10:50 +0100 Subject: [PATCH] Allow locale and language being set via URL param With the hash-url `locale=en-US` or `locale=de-DE` one can force a locale and language regardless of the given language from the osm-website-settings. --- modules/util/detect.js | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/modules/util/detect.js b/modules/util/detect.js index 19af93b5d..9265e2d83 100644 --- a/modules/util/detect.js +++ b/modules/util/detect.js @@ -59,24 +59,31 @@ export function utilDetect(force) { // Added due to incomplete svg style support. See #715 detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 ); - detected.locale = (navigator.language || navigator.userLanguage || 'en-US'); - detected.language = detected.locale.split('-')[0]; + // Set locale based on url param (format 'en-US') or browser lang (default) + var q = utilStringQs(window.location.hash.substring(1)); + if (q.hasOwnProperty('locale')) { + detected.locale = q.locale; + detected.language = q.locale.split('-')[0]; + } else { + detected.locale = (navigator.language || navigator.userLanguage || 'en-US'); + detected.language = detected.locale.split('-')[0]; - // Search `navigator.languages` for a better locale.. Prefer the first language, - // unless the second language is a culture-specific version of the first one, see #3842 - if (navigator.languages && navigator.languages.length > 0) { - var code0 = navigator.languages[0], - parts0 = code0.split('-'); + // Search `navigator.languages` for a better locale. Prefer the first language, + // unless the second language is a culture-specific version of the first one, see #3842 + if (navigator.languages && navigator.languages.length > 0) { + var code0 = navigator.languages[0], + parts0 = code0.split('-'); - detected.locale = code0; - detected.language = parts0[0]; + detected.locale = code0; + detected.language = parts0[0]; - if (navigator.languages.length > 1 && parts0.length === 1) { - var code1 = navigator.languages[1], - parts1 = code1.split('-'); + if (navigator.languages.length > 1 && parts0.length === 1) { + var code1 = navigator.languages[1], + parts1 = code1.split('-'); - if (parts1[0] === parts0[0]) { - detected.locale = code1; + if (parts1[0] === parts0[0]) { + detected.locale = code1; + } } } }