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

Side by Side Diff: chrome/browser/translate/translate_prefs.cc

Issue 23522021: Translate: Bug fix: Remove the language sub code when merging to the blocked language list (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits Created 7 years, 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/translate/translate_prefs_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/translate/translate_prefs.h" 5 #include "chrome/browser/translate/translate_prefs.h"
6 6
7 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "base/strings/string_split.h" 8 #include "base/strings/string_split.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
(...skipping 26 matching lines...) Expand all
37 37
38 const char* key = TranslatePrefs::kPrefTranslateLanguageBlacklist; 38 const char* key = TranslatePrefs::kPrefTranslateLanguageBlacklist;
39 const ListValue* list = prefs->GetList(key); 39 const ListValue* list = prefs->GetList(key);
40 for (ListValue::const_iterator it = list->begin(); it != list->end(); ++it) { 40 for (ListValue::const_iterator it = list->begin(); it != list->end(); ++it) {
41 std::string lang; 41 std::string lang;
42 (*it)->GetAsString(&lang); 42 (*it)->GetAsString(&lang);
43 languages->push_back(lang); 43 languages->push_back(lang);
44 } 44 }
45 } 45 }
46 46
47 // Converts the language code for Translate. This removes the sub code (like
48 // -US) except for Chinese, and converts the synonyms.
49 // The same logic exists at language_options.js, and please keep consistensy
50 // with the JavaScript file.
51 std::string ConvertLangCodeForTranslation(const std::string &lang) {
52 std::vector<std::string> tokens;
53 base::SplitString(lang, '-', &tokens);
54 if (tokens.size() < 1)
55 return lang;
56
57 std::string main_part = tokens[0];
58
59 // Translate doesn't support General Chinese and the sub code is necessary.
60 if (main_part == "zh")
61 return lang;
62
63 TranslateUtil::ToTranslateLanguageSynonym(&main_part);
64 return main_part;
65 }
66
47 } // namespace 67 } // namespace
48 68
49 namespace { 69 namespace {
50 70
51 void AppendLanguageToAcceptLanguages(PrefService* prefs, 71 void AppendLanguageToAcceptLanguages(PrefService* prefs,
52 const std::string& language) { 72 const std::string& language) {
53 if (!TranslateAcceptLanguages::CanBeAcceptLanguage(language)) 73 if (!TranslateAcceptLanguages::CanBeAcceptLanguage(language))
54 return; 74 return;
55 75
56 std::string accept_language = language; 76 std::string accept_language = language;
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 result.insert(*it); 403 result.insert(*it);
384 } 404 }
385 405
386 const std::string& app_locale = g_browser_process->GetApplicationLocale(); 406 const std::string& app_locale = g_browser_process->GetApplicationLocale();
387 std::string ui_lang = TranslateManager::GetLanguageCode(app_locale); 407 std::string ui_lang = TranslateManager::GetLanguageCode(app_locale);
388 bool is_ui_english = ui_lang == "en" || 408 bool is_ui_english = ui_lang == "en" ||
389 StartsWithASCII(ui_lang, "en-", false); 409 StartsWithASCII(ui_lang, "en-", false);
390 410
391 for (std::vector<std::string>::const_iterator it = accept_languages.begin(); 411 for (std::vector<std::string>::const_iterator it = accept_languages.begin();
392 it != accept_languages.end(); ++it) { 412 it != accept_languages.end(); ++it) {
393 std::string lang = *it; 413 std::string converted_lang = ConvertLangCodeForTranslation(*it);
394 TranslateUtil::ToTranslateLanguageSynonym(&lang);
395 414
396 // Regarding http://crbug.com/36182, even though English exists in Accept 415 // Regarding http://crbug.com/36182, even though English exists in Accept
397 // language list, English could be translated on non-English locale. 416 // language list, English could be translated on non-English locale.
398 if (lang == "en" && !is_ui_english) 417 if (converted_lang == "en" && !is_ui_english)
399 continue; 418 continue;
400 419
401 result.insert(lang); 420 result.insert(converted_lang);
402 } 421 }
403 422
404 blocked_languages->insert(blocked_languages->begin(), 423 blocked_languages->insert(blocked_languages->begin(),
405 result.begin(), result.end()); 424 result.begin(), result.end());
406 } 425 }
407 426
408 bool TranslatePrefs::IsValueInList(const ListValue* list, 427 bool TranslatePrefs::IsValueInList(const ListValue* list,
409 const std::string& in_value) const { 428 const std::string& in_value) const {
410 for (size_t i = 0; i < list->GetSize(); ++i) { 429 for (size_t i = 0; i < list->GetSize(); ++i) {
411 std::string value; 430 std::string value;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 477
459 bool TranslatePrefs::IsListEmpty(const char* pref_id) const { 478 bool TranslatePrefs::IsListEmpty(const char* pref_id) const {
460 const ListValue* blacklist = prefs_->GetList(pref_id); 479 const ListValue* blacklist = prefs_->GetList(pref_id);
461 return (blacklist == NULL || blacklist->empty()); 480 return (blacklist == NULL || blacklist->empty());
462 } 481 }
463 482
464 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { 483 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const {
465 const DictionaryValue* dict = prefs_->GetDictionary(pref_id); 484 const DictionaryValue* dict = prefs_->GetDictionary(pref_id);
466 return (dict == NULL || dict->empty()); 485 return (dict == NULL || dict->empty());
467 } 486 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/translate/translate_prefs_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698