From a832768668f070d39d97a348e02f5e1eaa97ffa9 Mon Sep 17 00:00:00 2001 From: antelle Date: Sun, 29 Jan 2017 10:04:18 +0100 Subject: [PATCH] use browser language as default locale --- app/scripts/locales/{de-DE.json => de.json} | 0 app/scripts/locales/{fr-FR.json => fr.json} | 0 app/scripts/locales/{it-IT.json => it.json} | 0 app/scripts/locales/{pt-PT.json => pt.json} | 0 app/scripts/util/settings-manager.js | 36 ++++++++++++------- .../views/settings/settings-general-view.js | 16 ++++----- release-notes.md | 1 + 7 files changed, 31 insertions(+), 22 deletions(-) rename app/scripts/locales/{de-DE.json => de.json} (100%) rename app/scripts/locales/{fr-FR.json => fr.json} (100%) rename app/scripts/locales/{it-IT.json => it.json} (100%) rename app/scripts/locales/{pt-PT.json => pt.json} (100%) diff --git a/app/scripts/locales/de-DE.json b/app/scripts/locales/de.json similarity index 100% rename from app/scripts/locales/de-DE.json rename to app/scripts/locales/de.json diff --git a/app/scripts/locales/fr-FR.json b/app/scripts/locales/fr.json similarity index 100% rename from app/scripts/locales/fr-FR.json rename to app/scripts/locales/fr.json diff --git a/app/scripts/locales/it-IT.json b/app/scripts/locales/it.json similarity index 100% rename from app/scripts/locales/it-IT.json rename to app/scripts/locales/it.json diff --git a/app/scripts/locales/pt-PT.json b/app/scripts/locales/pt.json similarity index 100% rename from app/scripts/locales/pt-PT.json rename to app/scripts/locales/pt.json diff --git a/app/scripts/util/settings-manager.js b/app/scripts/util/settings-manager.js index d7e018e2..d01c8819 100644 --- a/app/scripts/util/settings-manager.js +++ b/app/scripts/util/settings-manager.js @@ -5,7 +5,7 @@ const Locale = require('./locale'); const SettingsManager = { neutralLocale: null, - activeLocale: null, + activeLocale: 'en', setBySettings: function(settings) { if (settings.get('theme')) { @@ -14,8 +14,13 @@ const SettingsManager = { if (settings.get('fontSize')) { this.setFontSize(settings.get('fontSize')); } - if (settings.get('locale') && settings.get('locale') !== 'en') { + let locale = settings.get('locale'); + if (locale) { this.setLocale(settings.get('locale')); + } else { + try { + this.setLocale(this.getBrowserLocale()); + } catch (ex) {} } }, @@ -40,20 +45,25 @@ const SettingsManager = { document.documentElement.style.fontSize = fontSize ? (12 + fontSize * 2) + 'px' : ''; }, - setLocale(locale) { + setLocale(loc) { + if (!loc || loc === this.activeLocale) { + return; + } + let localeValues; + if (loc !== 'en') { + localeValues = require('../locales/' + loc + '.json'); + } if (!this.neutralLocale) { this.neutralLocale = _.clone(Locale); } - let activeLocale = locale && locale !== 'en' ? locale : null; - if (activeLocale !== this.activeLocale) { - _.extend(Locale, this.neutralLocale); - if (activeLocale) { - let localeValues = require('../locales/' + locale + '.json'); - _.extend(Locale, localeValues); - } - this.activeLocale = activeLocale; - Backbone.trigger('set-locale', activeLocale); - } + _.extend(Locale, this.neutralLocale, localeValues); + this.activeLocale = loc; + Backbone.trigger('set-locale', loc); + }, + + getBrowserLocale: function() { + let language = navigator.languages && navigator.languages[0] || navigator.language; + return language ? language.substr(0, 2).toLowerCase() : null; } }; diff --git a/app/scripts/views/settings/settings-general-view.js b/app/scripts/views/settings/settings-general-view.js index 83628372..fe3af52d 100644 --- a/app/scripts/views/settings/settings-general-view.js +++ b/app/scripts/views/settings/settings-general-view.js @@ -13,6 +13,7 @@ var Backbone = require('backbone'), Storage = require('../../storage'), FeatureDetector = require('../../util/feature-detector'), Locale = require('../../util/locale'), + SettingsManager = require('../../util/settings-manager'), Links = require('../../const/links'); var SettingsGeneralView = Backbone.View.extend({ @@ -58,11 +59,11 @@ var SettingsGeneralView = Backbone.View.extend({ allLocales: { en: 'English', - 'de-DE': 'Deutsch', - 'fr-FR': 'Français', - 'it-IT': 'Italiano', - 'pl': 'Polski', - 'pt-PT': 'Português' + de: 'Deutsch', + fr: 'Français', + it: 'Italiano', + pl: 'Polski', + pt: 'Português' }, initialize: function() { @@ -80,7 +81,7 @@ var SettingsGeneralView = Backbone.View.extend({ themes: this.allThemes, activeTheme: AppSettingsModel.instance.get('theme'), locales: this.allLocales, - activeLocale: AppSettingsModel.instance.get('locale') || 'en', + activeLocale: SettingsManager.activeLocale, fontSize: AppSettingsModel.instance.get('fontSize'), expandGroups: AppSettingsModel.instance.get('expandGroups'), canClearClipboard: !!Launcher, @@ -187,9 +188,6 @@ var SettingsGeneralView = Backbone.View.extend({ changeLocale: function(e) { var locale = e.target.value; - if (locale === 'en') { - locale = null; - } if (locale === '...') { e.target.value = AppSettingsModel.instance.get('locale') || 'en'; Alerts.info({ diff --git a/release-notes.md b/release-notes.md index 4db1dfe5..8678f5b6 100644 --- a/release-notes.md +++ b/release-notes.md @@ -3,6 +3,7 @@ Release notes ##### v1.4.0 (WIP) `+` password generator usability improvements `+` warning about several tabs +`+` use browser language as default locale ##### v1.3.3 (2016-09-20) `+` translations: fr, pl, pt