| Index: chrome/browser/resources/options/language_options.js
|
| diff --git a/chrome/browser/resources/options/language_options.js b/chrome/browser/resources/options/language_options.js
|
| index 2c22741c6541eeee67de2ccd8fc229ab99e36c33..eda03950b13584d48ef7f14a430a7912ee1f3f5b 100644
|
| --- a/chrome/browser/resources/options/language_options.js
|
| +++ b/chrome/browser/resources/options/language_options.js
|
| @@ -30,6 +30,44 @@ cr.define('options', function() {
|
| FAILED: 2
|
| };
|
|
|
| + /**
|
| + * The preference is a boolean that enables/disables spell checking.
|
| + * @type {string}
|
| + * @const
|
| + */
|
| + var ENABLE_SPELL_CHECK_PREF = 'browser.enable_spellchecking';
|
| +
|
| + /**
|
| + * The preference is a CSV string that describes preload engines
|
| + * (i.e. active input methods).
|
| + * @type {string}
|
| + * @const
|
| + */
|
| + var PRELOAD_ENGINES_PREF = 'settings.language.preload_engines';
|
| +
|
| + /**
|
| + * The preference that lists the extension IMEs that are enabled in the
|
| + * language menu.
|
| + * @type {string}
|
| + * @const
|
| + */
|
| + var ENABLED_EXTENSION_IME_PREF = 'settings.language.enabled_extension_imes';
|
| +
|
| + /**
|
| + * The preference that lists the languages which are not translated.
|
| + * @type {string}
|
| + * @const
|
| + */
|
| + var TRANSLATE_LANGUAGE_BLACKLIST_PREF = 'translate_language_blacklist';
|
| +
|
| + /**
|
| + * The preference key that is a string that describes the spell check
|
| + * dictionary language, like "en-US".
|
| + * @type {string}
|
| + * @const
|
| + */
|
| + var SPELL_CHECK_DICTIONARY_PREF = 'spellcheck.dictionary';
|
| +
|
| /////////////////////////////////////////////////////////////////////////////
|
| // LanguageOptions class:
|
|
|
| @@ -71,23 +109,6 @@ cr.define('options', function() {
|
| spellcheckDictionaryDownloadFailures_: 0,
|
|
|
| /**
|
| - * The preference is a boolean that enables/disables spell checking.
|
| - * @type {string}
|
| - * @private
|
| - * @const
|
| - */
|
| - enableSpellCheckPref_: 'browser.enable_spellchecking',
|
| -
|
| - /**
|
| - * The preference is a CSV string that describes preload engines
|
| - * (i.e. active input methods).
|
| - * @type {string}
|
| - * @private
|
| - * @const
|
| - */
|
| - preloadEnginesPref_: 'settings.language.preload_engines',
|
| -
|
| - /**
|
| * The list of preload engines, like ['mozc', 'pinyin'].
|
| * @type {Array}
|
| * @private
|
| @@ -95,15 +116,6 @@ cr.define('options', function() {
|
| preloadEngines_: [],
|
|
|
| /**
|
| - * The preference that lists the extension IMEs that are enabled in the
|
| - * language menu.
|
| - * @type {string}
|
| - * @private
|
| - * @const
|
| - */
|
| - enabledExtensionImePref_: 'settings.language.enabled_extension_imes',
|
| -
|
| - /**
|
| * The list of extension IMEs that are enabled out of the language menu.
|
| * @type {Array}
|
| * @private
|
| @@ -111,13 +123,11 @@ cr.define('options', function() {
|
| enabledExtensionImes_: [],
|
|
|
| /**
|
| - * The preference key that is a string that describes the spell check
|
| - * dictionary language, like "en-US".
|
| - * @type {string}
|
| + * The list of the languages which is not translated.
|
| + * @type {Array}
|
| * @private
|
| - * @const
|
| */
|
| - spellCheckDictionaryPref_: 'spellcheck.dictionary',
|
| + translateLanguageBlacklist_: [],
|
|
|
| /**
|
| * The preference is a string that describes the spell check dictionary
|
| @@ -163,7 +173,15 @@ cr.define('options', function() {
|
| this.initializeInputMethodList_();
|
| this.initializeLanguageCodeToInputMethodIdsMap_();
|
| }
|
| - Preferences.getInstance().addEventListener(this.spellCheckDictionaryPref_,
|
| +
|
| + var checkbox = $('dont-translate-in-this-language');
|
| + checkbox.addEventListener('click',
|
| + this.handleDontTranslateCheckboxClick_.bind(this));
|
| +
|
| + Preferences.getInstance().addEventListener(
|
| + TRANSLATE_LANGUAGE_BLACKLIST_PREF,
|
| + this.handleTranslateLanguageBlacklistPrefChange_.bind(this));
|
| + Preferences.getInstance().addEventListener(SPELL_CHECK_DICTIONARY_PREF,
|
| this.handleSpellCheckDictionaryPrefChange_.bind(this));
|
|
|
| // Set up add button.
|
| @@ -201,7 +219,7 @@ cr.define('options', function() {
|
| // Handle spell check enable/disable.
|
| if (!cr.isMac) {
|
| Preferences.getInstance().addEventListener(
|
| - this.enableSpellCheckPref_,
|
| + ENABLE_SPELL_CHECK_PREF,
|
| this.updateEnableSpellCheck_.bind(this));
|
| }
|
| }
|
| @@ -243,10 +261,10 @@ cr.define('options', function() {
|
|
|
| // Listen to pref change once the input method list is initialized.
|
| Preferences.getInstance().addEventListener(
|
| - this.preloadEnginesPref_,
|
| + PRELOAD_ENGINES_PREF,
|
| this.handlePreloadEnginesPrefChange_.bind(this));
|
| Preferences.getInstance().addEventListener(
|
| - this.enabledExtensionImePref_,
|
| + ENABLED_EXTENSION_IME_PREF,
|
| this.handleEnabledExtensionsPrefChange_.bind(this));
|
| },
|
|
|
| @@ -373,6 +391,8 @@ cr.define('options', function() {
|
| }
|
| }
|
|
|
| + this.updateDontTranslateCheckbox_(languageCode);
|
| +
|
| if (cr.isWindows || cr.isChromeOS)
|
| this.updateUiLanguageButton_(languageCode);
|
|
|
| @@ -606,6 +626,28 @@ cr.define('options', function() {
|
| },
|
|
|
| /**
|
| + * Updates the checkbox for stopping translation.
|
| + * @param {string} languageCode Language code (ex. "fr").
|
| + * @private
|
| + */
|
| + updateDontTranslateCheckbox_: function(languageCode) {
|
| + var dontTranslate = $('language-options-dont-translate');
|
| + var checkbox = $('dont-translate-in-this-language');
|
| +
|
| + // TODO(hajimehoshi): Create more general function to determine this.
|
| + if (this.isTranslatableLanguage_(languageCode)) {
|
| + dontTranslate.hidden = false;
|
| + } else {
|
| + dontTranslate.hidden = true;
|
| + return;
|
| + }
|
| +
|
| + var lang = this.convertLangCodeForTranslation_(languageCode);
|
| + var checked = (this.translateLanguageBlacklist_.indexOf(lang) != -1);
|
| + checkbox.checked = checked;
|
| + },
|
| +
|
| + /**
|
| * Updates the input method list.
|
| * @param {string} languageCode Language code (ex. "fr").
|
| * @private
|
| @@ -700,6 +742,33 @@ cr.define('options', function() {
|
| },
|
|
|
| /**
|
| + * Handles don't-translate checkbox's click event.
|
| + * @param {Event} e Click event.
|
| + * @private
|
| + */
|
| + handleDontTranslateCheckboxClick_: function(e) {
|
| + var checkbox = e.target;
|
| + var checked = checkbox.checked;
|
| +
|
| + var languageOptionsList = $('language-options-list');
|
| + var selectedLanguageCode = languageOptionsList.getSelectedLanguageCode();
|
| +
|
| + var langCode = this.convertLangCodeForTranslation_(selectedLanguageCode);
|
| + var blacklist = this.translateLanguageBlacklist_;
|
| + if (checked && blacklist.indexOf(langCode) == -1) {
|
| + blacklist.push(langCode);
|
| + } else if (!checked && blacklist.indexOf(langCode) != -1) {
|
| + blacklist = blacklist.filter(function(blacklistedLangCode) {
|
| + return blacklistedLangCode != langCode;
|
| + });
|
| + }
|
| + this.translateLanguageBlacklist_ = blacklist;
|
| +
|
| + Preferences.setListPref(TRANSLATE_LANGUAGE_BLACKLIST_PREF,
|
| + this.translateLanguageBlacklist_, true);
|
| + },
|
| +
|
| + /**
|
| * Handles input method checkbox's click event.
|
| * @param {Event} e Click event.
|
| * @private
|
| @@ -757,7 +826,7 @@ cr.define('options', function() {
|
| * @param {Event} e Change event.
|
| * @private
|
| */
|
| - updateEnableSpellCheck_: function() {
|
| + updateEnableSpellCheck_: function() {
|
| var value = !$('enable-spell-check').checked;
|
| $('language-options-spell-check-language-button').disabled = value;
|
| if (!cr.IsMac)
|
| @@ -765,6 +834,19 @@ cr.define('options', function() {
|
| },
|
|
|
| /**
|
| + * Handles translateLanguageBlacklistPref change.
|
| + * @param {Event} e Change event.
|
| + * @private
|
| + */
|
| + handleTranslateLanguageBlacklistPrefChange_: function(e) {
|
| + var languageOptionsList = $('language-options-list');
|
| + var selectedLanguageCode = languageOptionsList.getSelectedLanguageCode();
|
| + this.translateLanguageBlacklist_ = e.value.value;
|
| +
|
| + this.updateDontTranslateCheckbox_(selectedLanguageCode);
|
| + },
|
| +
|
| + /**
|
| * Handles spellCheckDictionaryPref change.
|
| * @param {Event} e Change event.
|
| * @private
|
| @@ -786,7 +868,7 @@ cr.define('options', function() {
|
| handleSpellCheckLanguageButtonClick_: function(e) {
|
| var languageCode = e.target.languageCode;
|
| // Save the preference.
|
| - Preferences.setStringPref(this.spellCheckDictionaryPref_,
|
| + Preferences.setStringPref(SPELL_CHECK_DICTIONARY_PREF,
|
| languageCode, true);
|
| chrome.send('spellCheckLanguageChange', [languageCode]);
|
| },
|
| @@ -855,7 +937,7 @@ cr.define('options', function() {
|
| * @private
|
| */
|
| saveEnabledExtensionPref_: function() {
|
| - Preferences.setStringPref(this.enabledExtensionImePref_,
|
| + Preferences.setStringPref(ENABLED_EXTENSION_IME_PREF,
|
| this.enabledExtensionImes_.join(','), true);
|
| },
|
|
|
| @@ -900,7 +982,7 @@ cr.define('options', function() {
|
| * @private
|
| */
|
| savePreloadEnginesPref_: function() {
|
| - Preferences.setStringPref(this.preloadEnginesPref_,
|
| + Preferences.setStringPref(PRELOAD_ENGINES_PREF,
|
| this.preloadEngines_.join(','), true);
|
| },
|
|
|
| @@ -1059,7 +1141,52 @@ cr.define('options', function() {
|
| $('language-options-list').getSelectedLanguageCode()) {
|
| this.updateSpellCheckLanguageButton_(languageCode);
|
| }
|
| - }
|
| + },
|
| +
|
| + /*
|
| + * Converts the language code for Translation. There are some differences
|
| + * between the language set for Translation and that for Accept-Language.
|
| + * @param {string} languageCode The language code like 'fr'.
|
| + * @return {string} The converted language code.
|
| + * @private
|
| + */
|
| + convertLangCodeForTranslation_: function(languageCode) {
|
| + var tokens = languageCode.split('-');
|
| + var main = tokens[0];
|
| + var dialect = tokens[1];
|
| +
|
| + // See also: chrome/renderer/translate/translate_helper.cc.
|
| + var synonyms = {
|
| + 'nb': 'no',
|
| + 'he': 'iw',
|
| + 'jv': 'jw',
|
| + 'fil': 'tl',
|
| + };
|
| +
|
| + if (main in synonyms) {
|
| + return synonyms[main];
|
| + } else if (main == 'zh') {
|
| + // In Translation, general Chinese is not used.
|
| + assert(dialect);
|
| + return languageCode;
|
| + }
|
| +
|
| + return main;
|
| + },
|
| +
|
| + /*
|
| + * Checks whether or not |languageCode| is supported for Translation.
|
| + * @param {string} languageCode The language code like 'fr'.
|
| + * @return {boolean} Retruns true if |languageCode| is supported for
|
| + * Translation.
|
| + * @private
|
| + */
|
| + isTranslatableLanguage_: function(languageCode) {
|
| + if (languageCode == 'zh')
|
| + return false;
|
| +
|
| + return true;
|
| + },
|
| };
|
|
|
| /**
|
|
|