| Index: chrome/browser/resources/settings/languages_page/languages.js
|
| diff --git a/chrome/browser/resources/settings/languages_page/languages.js b/chrome/browser/resources/settings/languages_page/languages.js
|
| index 790a45fba91d763cbad5c548833d0bc05dae1fdb..0073a2e235fd230f21305b5a6b13ed8a6d5c6b0a 100644
|
| --- a/chrome/browser/resources/settings/languages_page/languages.js
|
| +++ b/chrome/browser/resources/settings/languages_page/languages.js
|
| @@ -121,9 +121,15 @@ Polymer({
|
| type: Object,
|
| value: function() { return new Map(); },
|
| },
|
| +
|
| + /** @private Prospective UI language when the page was loaded. */
|
| + originalProspectiveUILanguage_: String,
|
| },
|
|
|
| observers: [
|
| + // All observers wait for the model to be populated by including the
|
| + // |languages| property.
|
| + 'prospectiveUILanguageChanged_(prefs.intl.app_locale.value, languages)',
|
| 'preferredLanguagesPrefChanged_(' +
|
| 'prefs.' + preferredLanguagesPrefName + '.value, languages)',
|
| 'spellCheckDictionariesPrefChanged_(' +
|
| @@ -178,6 +184,16 @@ Polymer({
|
| }.bind(this));
|
| }
|
|
|
| + if (cr.isWindows || cr.isChromeOS) {
|
| + // Fetch the starting UI language, which affects which actions should be
|
| + // enabled.
|
| + promises.push(cr.sendWithPromise('getProspectiveUILanguage').then(
|
| + function(prospectiveUILanguage) {
|
| + this.originalProspectiveUILanguage_ =
|
| + prospectiveUILanguage || window.navigator.language;
|
| + }.bind(this)));
|
| + }
|
| +
|
| Promise.all(promises).then(function(results) {
|
| this.createModel_(results[1], results[2], results[3], results[4]);
|
| this.resolver_.resolve();
|
| @@ -190,12 +206,22 @@ Polymer({
|
| },
|
|
|
| /**
|
| + * Updates the prospective UI language based on the new pref value.
|
| + * @param {string} prospectiveUILanguage
|
| + * @private
|
| + */
|
| + prospectiveUILanguageChanged_: function(prospectiveUILanguage) {
|
| + this.set('languages.prospectiveUILanguage',
|
| + prospectiveUILanguage || this.originalProspectiveUILanguage_);
|
| + },
|
| +
|
| + /**
|
| * Updates the list of enabled languages from the preferred languages pref.
|
| * @private
|
| */
|
| preferredLanguagesPrefChanged_: function() {
|
| - var enabledLanguageStates =
|
| - this.getEnabledLanguageStates_(this.languages.translateTarget);
|
| + var enabledLanguageStates = this.getEnabledLanguageStates_(
|
| + this.languages.translateTarget, this.languages.prospectiveUILanguage);
|
|
|
| // Recreate the enabled language set before updating languages.enabled.
|
| this.enabledLanguageSet_.clear();
|
| @@ -226,8 +252,10 @@ Polymer({
|
| /** @type {!Array<string>} */(translateBlockedPref.value));
|
|
|
| for (var i = 0; i < this.languages.enabled.length; i++) {
|
| - if (this.languages.enabled[i].language.code == navigator.language)
|
| + if (this.languages.enabled[i].language.code ==
|
| + this.languages.prospectiveUILanguage) {
|
| continue;
|
| + }
|
| var translateCode = this.convertLanguageCodeForTranslate(
|
| this.languages.enabled[i].language.code);
|
| this.set(
|
| @@ -277,8 +305,16 @@ Polymer({
|
| }
|
| }
|
|
|
| + var prospectiveUILanguage;
|
| + if (cr.isChromeOS || cr.isWindows) {
|
| + prospectiveUILanguage =
|
| + /** @type {string} */(this.getPref('intl.app_locale').value) ||
|
| + this.originalProspectiveUILanguage_;
|
| + }
|
| +
|
| // Create a list of enabled languages from the supported languages.
|
| - var enabledLanguageStates = this.getEnabledLanguageStates_(translateTarget);
|
| + var enabledLanguageStates =
|
| + this.getEnabledLanguageStates_(translateTarget, prospectiveUILanguage);
|
| // Populate the hash set of enabled languages.
|
| for (var languageState of enabledLanguageStates)
|
| this.enabledLanguageSet_.add(languageState.language.code);
|
| @@ -288,6 +324,10 @@ Polymer({
|
| enabled: enabledLanguageStates,
|
| translateTarget: translateTarget,
|
| });
|
| +
|
| + if (cr.isChromeOS || cr.isWindows)
|
| + model.prospectiveUILanguage = prospectiveUILanguage;
|
| +
|
| if (cr.isChromeOS) {
|
| model.inputMethods = /** @type {!InputMethodsModel} */({
|
| supported: supportedInputMethods,
|
| @@ -305,10 +345,12 @@ Polymer({
|
| * languages list.
|
| * @param {string} translateTarget Language code of the default translate
|
| * target language.
|
| + * @param {(string|undefined)} prospectiveUILanguage Prospective UI display
|
| + * language. Only defined on Windows and Chrome OS.
|
| * @return {!Array<!LanguageState>}
|
| * @private
|
| */
|
| - getEnabledLanguageStates_: function(translateTarget) {
|
| + getEnabledLanguageStates_: function(translateTarget, prospectiveUILanguage) {
|
| assert(CrSettingsPrefs.isInitialized);
|
|
|
| var pref = this.getPref(preferredLanguagesPrefName);
|
| @@ -334,10 +376,11 @@ Polymer({
|
| // Translate is considered disabled if this language maps to any translate
|
| // language that is blocked.
|
| var translateCode = this.convertLanguageCodeForTranslate(code);
|
| - languageState.translateEnabled = !!language.supportsTranslate &&
|
| - code != navigator.language &&
|
| + languageState.translateEnabled =
|
| + !!language.supportsTranslate &&
|
| !translateBlockedSet.has(translateCode) &&
|
| - translateCode != translateTarget;
|
| + translateCode != translateTarget &&
|
| + (!prospectiveUILanguage || code != prospectiveUILanguage);
|
| enabledLanguageStates.push(languageState);
|
| }
|
| return enabledLanguageStates;
|
| @@ -426,26 +469,18 @@ Polymer({
|
| * the actual UI language until a restart.
|
| * @param {string} languageCode
|
| */
|
| - setUILanguage: function(languageCode) {
|
| + setProspectiveUILanguage: function(languageCode) {
|
| assert(cr.isChromeOS || cr.isWindows);
|
| - chrome.send('setUILanguage', [languageCode]);
|
| - },
|
| -
|
| - /** Resets the prospective UI language back to the actual UI language. */
|
| - resetUILanguage: function() {
|
| - assert(cr.isChromeOS || cr.isWindows);
|
| - chrome.send('setUILanguage', [navigator.language]);
|
| + chrome.send('setProspectiveUILanguage', [languageCode]);
|
| },
|
|
|
| /**
|
| - * Returns the "prospective" UI language, i.e. the one to be used on next
|
| - * restart. If the pref is not set, the current UI language is also the
|
| - * "prospective" language.
|
| - * @return {string} Language code of the prospective UI language.
|
| + * True if the prospective UI language was changed from its starting value.
|
| + * @return {boolean}
|
| */
|
| - getProspectiveUILanguage: function() {
|
| - return /** @type {string} */(this.getPref('intl.app_locale').value) ||
|
| - navigator.language;
|
| + requiresRestart: function() {
|
| + return this.originalProspectiveUILanguage_ !=
|
| + this.languages.prospectiveUILanguage;
|
| },
|
|
|
| /**
|
| @@ -506,7 +541,7 @@ Polymer({
|
| */
|
| canDisableLanguage: function(languageCode) {
|
| // Cannot disable the prospective UI language.
|
| - if (languageCode == this.getProspectiveUILanguage())
|
| + if (languageCode == this.languages.prospectiveUILanguage)
|
| return false;
|
|
|
| // Cannot disable the only enabled language.
|
|
|