Chromium Code Reviews| 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; |
| + }, |
| }; |
| /** |