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

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: 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..f430d0b3183126b9c743b2b2053a24e324242142 100644
--- a/chrome/browser/resources/options/language_options.js
+++ b/chrome/browser/resources/options/language_options.js
@@ -111,6 +111,21 @@ cr.define('options', function() {
enabledExtensionImes_: [],
/**
+ * The preference that lists the languages which is not translated.
+ * @type {string}
+ * @private
+ * @const
+ */
+ translateLanguageBlacklistPref_: 'translate_language_blacklist',
Evan Stade 2013/05/28 17:08:11 as a const this should go up by DOWNLOAD_STATUS
hajimehoshi 2013/05/29 03:52:23 Done.
+
+ /**
+ * The list of the languages which is not translated.
Evan Stade 2013/05/28 17:08:11 nit: s/is/are
hajimehoshi 2013/05/29 03:52:23 Done.
+ * @type {Array}
+ * @private
+ */
+ translateLanguageBlacklist_: [],
+
+ /**
* The preference key that is a string that describes the spell check
* dictionary language, like "en-US".
* @type {string}
@@ -163,6 +178,14 @@ cr.define('options', function() {
this.initializeInputMethodList_();
this.initializeLanguageCodeToInputMethodIdsMap_();
}
+
+ var cb = $('language-options-dont-translate').querySelector('input');
Evan Stade 2013/05/28 17:08:11 don't abbreviate variable names.
hajimehoshi 2013/05/29 03:52:23 Done.
+ cb.addEventListener('click',
+ this.handleDontTranslateCheckboxClick_.bind(this));
+
+ Preferences.getInstance().addEventListener(
+ this.translateLanguageBlacklistPref_,
+ this.handleTranslateLanguageBlacklistPrefChange_.bind(this));
Preferences.getInstance().addEventListener(this.spellCheckDictionaryPref_,
this.handleSpellCheckDictionaryPrefChange_.bind(this));
@@ -373,6 +396,8 @@ cr.define('options', function() {
}
}
+ this.updateDontTranslateCheckbox_(languageCode);
+
if (cr.isWindows || cr.isChromeOS)
this.updateUiLanguageButton_(languageCode);
@@ -606,6 +631,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 +747,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(l) {
Evan Stade 2013/05/28 17:08:11 don't abbreviate variable names
hajimehoshi 2013/05/29 03:52:23 Done.
+ return l != langCode;
+ });
+ }
+ this.translateLanguageBlacklist_ = blacklist;
+
+ Preferences.setListPref(this.translateLanguageBlacklistPref_,
+ this.translateLanguageBlacklist_, true);
+ },
+
+ /**
* Handles input method checkbox's click event.
* @param {Event} e Click event.
* @private
@@ -757,7 +831,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 +839,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
@@ -1059,7 +1146,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