Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: chrome/browser/resources/options/language_options.js

Issue 16141002: Add "Don't translate" preference to chrome://settings/languages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Replaced 'dontTranslate' with 'dontTranslateInThisLanguage' along with the other resource names Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 2209d39a42939ab84695dd1dee4d4065644dc992..b1c1acf84aa4593dc974d48205b6f4f1080a3a59 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,16 @@ cr.define('options', function() {
this.initializeInputMethodList_();
this.initializeLanguageCodeToInputMethodIdsMap_();
}
- Preferences.getInstance().addEventListener(this.spellCheckDictionaryPref_,
+
+ var checkbox =
+ $('language-options-dont-translate').querySelector('input');
+ 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 +220,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 +262,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 +392,8 @@ cr.define('options', function() {
}
}
+ this.updateDontTranslateCheckbox_(languageCode);
+
if (cr.isWindows || cr.isChromeOS)
this.updateUiLanguageButton_(languageCode);
@@ -606,6 +627,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 = dontTranslate.querySelector('input');
+
+ // 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 +743,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 +827,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 +835,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 +869,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 +938,7 @@ cr.define('options', function() {
* @private
*/
saveEnabledExtensionPref_: function() {
- Preferences.setStringPref(this.enabledExtensionImePref_,
+ Preferences.setStringPref(ENABLED_EXTENSION_IME_PREF,
this.enabledExtensionImes_.join(','), true);
},
@@ -900,7 +983,7 @@ cr.define('options', function() {
* @private
*/
savePreloadEnginesPref_: function() {
- Preferences.setStringPref(this.preloadEnginesPref_,
+ Preferences.setStringPref(PRELOAD_ENGINES_PREF,
this.preloadEngines_.join(','), true);
},
@@ -1059,7 +1142,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;
+ },
};
/**

Powered by Google App Engine
This is Rietveld 408576698