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

Side by Side Diff: chrome/browser/chromeos/options/language_config_view.cc

Issue 1512022: Add NormalizeLanguageCode() to normalize language codes. (Closed)
Patch Set: add a comment Created 10 years, 8 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/chromeos/options/language_config_view.h" 5 #include "chrome/browser/chromeos/options/language_config_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "app/l10n_util.h" 11 #include "app/l10n_util.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/chromeos/cros/cros_library.h" 14 #include "chrome/browser/chromeos/cros/cros_library.h"
15 #include "chrome/browser/chromeos/cros/language_library.h" 15 #include "chrome/browser/chromeos/cros/language_library.h"
16 #include "chrome/browser/chromeos/options/language_hangul_config_view.h" 16 #include "chrome/browser/chromeos/options/language_hangul_config_view.h"
17 #include "chrome/browser/chromeos/preferences.h" 17 #include "chrome/browser/chromeos/preferences.h"
18 #include "chrome/browser/language_combobox_model.h" 18 #include "chrome/browser/language_combobox_model.h"
19 #include "chrome/common/notification_type.h" 19 #include "chrome/common/notification_type.h"
20 #include "chrome/common/pref_names.h" 20 #include "chrome/common/pref_names.h"
21 #include "gfx/font.h" 21 #include "gfx/font.h"
22 #include "grit/generated_resources.h" 22 #include "grit/generated_resources.h"
23 #include "grit/locale_settings.h" 23 #include "grit/locale_settings.h"
24 #include "third_party/icu/public/common/unicode/uloc.h"
24 #include "views/controls/button/checkbox.h" 25 #include "views/controls/button/checkbox.h"
25 #include "views/controls/combobox/combobox.h" 26 #include "views/controls/combobox/combobox.h"
26 #include "views/controls/label.h" 27 #include "views/controls/label.h"
27 #include "views/fill_layout.h" 28 #include "views/fill_layout.h"
28 #include "views/grid_layout.h" 29 #include "views/grid_layout.h"
29 #include "views/standard_layout.h" 30 #include "views/standard_layout.h"
30 #include "views/window/window.h" 31 #include "views/window/window.h"
31 32
32 namespace chromeos { 33 namespace chromeos {
33 using views::ColumnSet; 34 using views::ColumnSet;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 language_combobox_ = new views::Combobox(language_combobox_model_.get()); 135 language_combobox_ = new views::Combobox(language_combobox_model_.get());
135 language_combobox_->SetSelectedItem(selected_index_); 136 language_combobox_->SetSelectedItem(selected_index_);
136 language_combobox_->set_listener(this); 137 language_combobox_->set_listener(this);
137 layout->StartRow(0, kColumnSetId); 138 layout->StartRow(0, kColumnSetId);
138 layout->AddView(language_combobox_); 139 layout->AddView(language_combobox_);
139 } 140 }
140 141
141 // Creates the language combobox model from the supported languages. 142 // Creates the language combobox model from the supported languages.
142 LanguageComboboxModel* CreateLanguageComboboxModel() { 143 LanguageComboboxModel* CreateLanguageComboboxModel() {
143 std::vector<std::string> language_codes; 144 std::vector<std::string> language_codes;
144 parent_view_->GetSupportedLangageCodes(&language_codes); 145 parent_view_->GetSupportedLanguageCodes(&language_codes);
145 // LanguageComboboxModel sorts languages by their display names. 146 // LanguageComboboxModel sorts languages by their display names.
146 return new LanguageComboboxModelWithOthers(NULL, language_codes); 147 return new LanguageComboboxModelWithOthers(NULL, language_codes);
147 } 148 }
148 149
149 LanguageConfigView* parent_view_; 150 LanguageConfigView* parent_view_;
150 151
151 // Combobox and its corresponding model. 152 // Combobox and its corresponding model.
152 scoped_ptr<LanguageComboboxModel> language_combobox_model_; 153 scoped_ptr<LanguageComboboxModel> language_combobox_model_;
153 views::Combobox* language_combobox_; 154 views::Combobox* language_combobox_;
154 views::View* contents_; 155 views::View* contents_;
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 // Add the title label. 301 // Add the title label.
301 layout->StartRow(0, kTitleColumnSetId); 302 layout->StartRow(0, kTitleColumnSetId);
302 layout->AddView(title_label); 303 layout->AddView(title_label);
303 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); 304 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
304 305
305 // Add input method names and configuration buttons. 306 // Add input method names and configuration buttons.
306 input_method_buttons_.clear(); 307 input_method_buttons_.clear();
307 input_method_checkboxes_.clear(); 308 input_method_checkboxes_.clear();
308 309
309 std::vector<std::string> language_ids; 310 std::vector<std::string> language_ids;
310 GetSupportedLangageIDs(&language_ids); 311 GetSupportedLanguageIDs(&language_ids);
311 for (size_t i = 0; i < language_ids.size(); ++i) { 312 for (size_t i = 0; i < language_ids.size(); ++i) {
312 const std::string& language_id = language_ids[i]; 313 const std::string& language_id = language_ids[i];
313 const std::string language_code = GetLanguageCodeFromID(language_id); 314 const std::string language_code = GetLanguageCodeFromID(language_id);
314 const std::string display_name = GetDisplayNameFromID(language_id); 315 const std::string display_name = GetDisplayNameFromID(language_id);
315 if (language_code == target_language_code) { 316 if (language_code == target_language_code) {
316 layout->StartRow(0, kDoubleColumnSetId); 317 layout->StartRow(0, kDoubleColumnSetId);
317 InputMethodCheckbox* checkbox 318 InputMethodCheckbox* checkbox
318 = new InputMethodCheckbox(language_id, display_name); 319 = new InputMethodCheckbox(language_id, display_name);
319 checkbox->set_listener(this); 320 checkbox->set_listener(this);
320 checkbox->SetChecked(LanguageIsActivated(language_id)); 321 checkbox->SetChecked(LanguageIsActivated(language_id));
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 input_method_config_view_map_["hangul"] = 435 input_method_config_view_map_["hangul"] =
435 CreateLanguageHangulConfigView; 436 CreateLanguageHangulConfigView;
436 } 437 }
437 438
438 void LanguageConfigView::InitLanguageIdMaps() { 439 void LanguageConfigView::InitLanguageIdMaps() {
439 // GetSupportedLanguages() never return NULL. 440 // GetSupportedLanguages() never return NULL.
440 scoped_ptr<InputLanguageList> supported_language_list( 441 scoped_ptr<InputLanguageList> supported_language_list(
441 CrosLibrary::Get()->GetLanguageLibrary()->GetSupportedLanguages()); 442 CrosLibrary::Get()->GetLanguageLibrary()->GetSupportedLanguages());
442 for (size_t i = 0; i < supported_language_list->size(); ++i) { 443 for (size_t i = 0; i < supported_language_list->size(); ++i) {
443 const InputLanguage& language = supported_language_list->at(i); 444 const InputLanguage& language = supported_language_list->at(i);
445 // Normalize the language code as some engines return three-letter
446 // codes like "jpn" wheres some other engines return two-letter codes
447 // like "ja".
448 std::string language_code = NormalizeLanguageCode(language.language_code);
444 id_to_language_code_map_.insert( 449 id_to_language_code_map_.insert(
445 std::make_pair(language.id, language.language_code)); 450 std::make_pair(language.id, language_code));
446 id_to_display_name_map_.insert( 451 id_to_display_name_map_.insert(
447 std::make_pair(language.id, language.display_name)); 452 std::make_pair(language.id, language.display_name));
448 } 453 }
449 } 454 }
450 455
451 views::View* LanguageConfigView::CreateContentsOnLeft() { 456 views::View* LanguageConfigView::CreateContentsOnLeft() {
452 views::View* contents = new views::View; 457 views::View* contents = new views::View;
453 GridLayout* layout = new GridLayout(contents); 458 GridLayout* layout = new GridLayout(contents);
454 contents->SetLayoutManager(layout); 459 contents->SetLayoutManager(layout);
455 460
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 } 509 }
505 510
506 void LanguageConfigView::OnAddLanguage(const std::string& language_code) { 511 void LanguageConfigView::OnAddLanguage(const std::string& language_code) {
507 if (std::find(preferred_language_codes_.begin(), 512 if (std::find(preferred_language_codes_.begin(),
508 preferred_language_codes_.end(), 513 preferred_language_codes_.end(),
509 language_code) == preferred_language_codes_.end()) { 514 language_code) == preferred_language_codes_.end()) {
510 // Activate the first input language associated with the language. We have 515 // Activate the first input language associated with the language. We have
511 // to call this before the OnItemsAdded() call below so the checkbox for 516 // to call this before the OnItemsAdded() call below so the checkbox for
512 // the first input language gets checked. 517 // the first input language gets checked.
513 std::vector<std::string> language_ids; 518 std::vector<std::string> language_ids;
514 GetSupportedLangageIDs(&language_ids); 519 GetSupportedLanguageIDs(&language_ids);
515 for (size_t i = 0; i < language_ids.size(); ++i) { 520 for (size_t i = 0; i < language_ids.size(); ++i) {
516 if (GetLanguageCodeFromID(language_ids[i]) == language_code) { 521 if (GetLanguageCodeFromID(language_ids[i]) == language_code) {
517 SetLanguageActivated(language_ids[i], true); 522 SetLanguageActivated(language_ids[i], true);
518 break; 523 break;
519 } 524 }
520 } 525 }
521 526
522 // Append the language to the list of language codes. 527 // Append the language to the list of language codes.
523 preferred_language_codes_.push_back(language_code); 528 preferred_language_codes_.push_back(language_code);
524 // Update the language table accordingly. 529 // Update the language table accordingly.
525 preferred_language_table_->OnItemsAdded(RowCount() - 1, 1); 530 preferred_language_table_->OnItemsAdded(RowCount() - 1, 1);
526 preferred_language_table_->SelectRow(RowCount() - 1); 531 preferred_language_table_->SelectRow(RowCount() - 1);
527 } 532 }
528 } 533 }
529 534
530 void LanguageConfigView::DeactivateInputLanguagesFor( 535 void LanguageConfigView::DeactivateInputLanguagesFor(
531 const std::string& language_code) { 536 const std::string& language_code) {
532 std::vector<std::string> language_ids; 537 std::vector<std::string> language_ids;
533 GetSupportedLangageIDs(&language_ids); 538 GetSupportedLanguageIDs(&language_ids);
534 for (size_t i = 0; i < language_ids.size(); ++i) { 539 for (size_t i = 0; i < language_ids.size(); ++i) {
535 if (GetLanguageCodeFromID(language_ids[i]) == language_code) { 540 if (GetLanguageCodeFromID(language_ids[i]) == language_code) {
536 SetLanguageActivated(language_ids[i], false); 541 SetLanguageActivated(language_ids[i], false);
537 // Do not break; here in order to disable all engines that belong to 542 // Do not break; here in order to disable all engines that belong to
538 // |language_code|. 543 // |language_code|.
539 } 544 }
540 } 545 }
541 546
542 // Switch back to the US English. 547 // Switch back to the US English.
543 // TODO(yusukes): what if "USA" is not active? 548 // TODO(yusukes): what if "USA" is not active?
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 language_ids.end()); 595 language_ids.end());
591 } 596 }
592 597
593 void LanguageConfigView::GetActiveLanguageIDs( 598 void LanguageConfigView::GetActiveLanguageIDs(
594 std::vector<std::string>* out_language_ids) { 599 std::vector<std::string>* out_language_ids) {
595 const std::wstring value = preload_engines_.GetValue(); 600 const std::wstring value = preload_engines_.GetValue();
596 out_language_ids->clear(); 601 out_language_ids->clear();
597 SplitString(WideToUTF8(value), ',', out_language_ids); 602 SplitString(WideToUTF8(value), ',', out_language_ids);
598 } 603 }
599 604
600 void LanguageConfigView::GetSupportedLangageIDs( 605 void LanguageConfigView::GetSupportedLanguageIDs(
601 std::vector<std::string>* out_language_ids) const { 606 std::vector<std::string>* out_language_ids) const {
602 out_language_ids->clear(); 607 out_language_ids->clear();
603 std::map<std::string, std::string>::const_iterator iter; 608 std::map<std::string, std::string>::const_iterator iter;
604 for (iter = id_to_language_code_map_.begin(); 609 for (iter = id_to_language_code_map_.begin();
605 iter != id_to_language_code_map_.end(); 610 iter != id_to_language_code_map_.end();
606 ++iter) { 611 ++iter) {
607 out_language_ids->push_back(iter->first); 612 out_language_ids->push_back(iter->first);
608 } 613 }
609 } 614 }
610 615
611 void LanguageConfigView::GetSupportedLangageCodes( 616 void LanguageConfigView::GetSupportedLanguageCodes(
612 std::vector<std::string>* out_language_codes) const { 617 std::vector<std::string>* out_language_codes) const {
613 std::set<std::string> language_code_set; 618 std::set<std::string> language_code_set;
614 std::map<std::string, std::string>::const_iterator iter; 619 std::map<std::string, std::string>::const_iterator iter;
615 for (iter = id_to_language_code_map_.begin(); 620 for (iter = id_to_language_code_map_.begin();
616 iter != id_to_language_code_map_.end(); 621 iter != id_to_language_code_map_.end();
617 ++iter) { 622 ++iter) {
618 language_code_set.insert(iter->second); 623 language_code_set.insert(iter->second);
619 } 624 }
620 out_language_codes->clear(); 625 out_language_codes->clear();
621 out_language_codes->assign( 626 out_language_codes->assign(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 const std::wstring& language_name) { 660 const std::wstring& language_name) {
656 // "t" is used as the language code for input methods that don't fall 661 // "t" is used as the language code for input methods that don't fall
657 // under any other languages. 662 // under any other languages.
658 if (language_name == L"t") { 663 if (language_name == L"t") {
659 return l10n_util::GetString( 664 return l10n_util::GetString(
660 IDS_OPTIONS_SETTINGS_LANGUAGES_OTHERS); 665 IDS_OPTIONS_SETTINGS_LANGUAGES_OTHERS);
661 } 666 }
662 return language_name; 667 return language_name;
663 } 668 }
664 669
670 std::string LanguageConfigView::NormalizeLanguageCode(
671 const std::string& language_code) {
672 // We only handle two-letter codes here.
673 // Some ibus engines return locale codes like "zh_CN" as language codes,
674 // and we don't want to rewrite this to "zho".
675 if (language_code.size() != 2) {
676 return language_code;
677 }
678 const char* three_letter_code = uloc_getISO3Language(
679 language_code.c_str());
680 if (three_letter_code && strlen(three_letter_code) > 0) {
681 return three_letter_code;
682 }
683 return language_code;
684 }
685
665 } // namespace chromeos 686 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/options/language_config_view.h ('k') | chrome/browser/chromeos/options/language_config_view_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698