Home | History | Annotate | Download | only in options
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/webui/options/language_options_handler_common.h"
      6 
      7 #include <map>
      8 #include <string>
      9 #include <utility>
     10 #include <vector>
     11 
     12 #include "base/basictypes.h"
     13 #include "base/command_line.h"
     14 #include "base/utf_string_conversions.h"
     15 #include "base/values.h"
     16 #include "chrome/browser/browser_process.h"
     17 #include "chrome/browser/metrics/user_metrics.h"
     18 #include "chrome/browser/prefs/pref_service.h"
     19 #include "chrome/browser/ui/browser_list.h"
     20 #include "chrome/common/chrome_switches.h"
     21 #include "chrome/common/pref_names.h"
     22 #include "chrome/common/spellcheck_common.h"
     23 #include "grit/chromium_strings.h"
     24 #include "grit/generated_resources.h"
     25 #include "ui/base/l10n/l10n_util.h"
     26 
     27 LanguageOptionsHandlerCommon::LanguageOptionsHandlerCommon() {
     28 }
     29 
     30 LanguageOptionsHandlerCommon::~LanguageOptionsHandlerCommon() {
     31 }
     32 
     33 void LanguageOptionsHandlerCommon::GetLocalizedValues(
     34     DictionaryValue* localized_strings) {
     35   DCHECK(localized_strings);
     36   string16 product_name = GetProductName();
     37   RegisterTitle(localized_strings, "languagePage",
     38                 IDS_OPTIONS_SETTINGS_LANGUAGES_DIALOG_TITLE);
     39   localized_strings->SetString("add_button",
     40       l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_BUTTON));
     41   localized_strings->SetString("languages",
     42       l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_LANGUAGES));
     43   localized_strings->SetString("please_add_another_language",
     44       l10n_util::GetStringUTF16(
     45           IDS_OPTIONS_SETTINGS_LANGUAGES_PLEASE_ADD_ANOTHER_LANGUAGE));
     46   localized_strings->SetString("remove_button",
     47       l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_REMOVE_BUTTON));
     48   localized_strings->SetString("add_language_instructions",
     49       l10n_util::GetStringUTF16(
     50           IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_LANGUAGE_INSTRUCTIONS));
     51   localized_strings->SetString("cannot_be_displayed_in_this_language",
     52       l10n_util::GetStringFUTF16(
     53           IDS_OPTIONS_SETTINGS_LANGUAGES_CANNOT_BE_DISPLAYED_IN_THIS_LANGUAGE,
     54           product_name));
     55   localized_strings->SetString("is_displayed_in_this_language",
     56       l10n_util::GetStringFUTF16(
     57           IDS_OPTIONS_SETTINGS_LANGUAGES_IS_DISPLAYED_IN_THIS_LANGUAGE,
     58           product_name));
     59   localized_strings->SetString("display_in_this_language",
     60       l10n_util::GetStringFUTF16(
     61           IDS_OPTIONS_SETTINGS_LANGUAGES_DISPLAY_IN_THIS_LANGUAGE,
     62           product_name));
     63   localized_strings->SetString("this_language_is_currently_in_use",
     64       l10n_util::GetStringFUTF16(
     65           IDS_OPTIONS_SETTINGS_LANGUAGES_THIS_LANGUAGE_IS_CURRENTLY_IN_USE,
     66           product_name));
     67   localized_strings->SetString("use_this_for_spell_checking",
     68       l10n_util::GetStringUTF16(
     69           IDS_OPTIONS_SETTINGS_USE_THIS_FOR_SPELL_CHECKING));
     70   localized_strings->SetString("cannot_be_used_for_spell_checking",
     71       l10n_util::GetStringUTF16(
     72           IDS_OPTIONS_SETTINGS_CANNOT_BE_USED_FOR_SPELL_CHECKING));
     73   localized_strings->SetString("is_used_for_spell_checking",
     74       l10n_util::GetStringUTF16(
     75           IDS_OPTIONS_SETTINGS_IS_USED_FOR_SPELL_CHECKING));
     76   localized_strings->SetString("restart_required",
     77           l10n_util::GetStringUTF16(IDS_OPTIONS_RELAUNCH_REQUIRED));
     78   localized_strings->SetString("enable_spell_check",
     79           l10n_util::GetStringUTF16(IDS_OPTIONS_ENABLE_SPELLCHECK));
     80   localized_strings->SetString("enable_auto_spell_correction",
     81           l10n_util::GetStringUTF16(IDS_OPTIONS_ENABLE_AUTO_SPELL_CORRECTION));
     82   localized_strings->SetString("add_language_title",
     83           l10n_util::GetStringUTF16(IDS_OPTIONS_LANGUAGES_ADD_TITLE));
     84   localized_strings->SetString("add_language_select_label",
     85           l10n_util::GetStringUTF16(IDS_OPTIONS_LANGUAGES_ADD_SELECT_LABEL));
     86   localized_strings->SetString("restart_button",
     87       l10n_util::GetStringUTF16(
     88           IDS_OPTIONS_SETTINGS_LANGUAGES_RELAUNCH_BUTTON));
     89 
     90   // The following are resources, rather than local strings.
     91   localized_strings->SetString("currentUiLanguageCode",
     92                                g_browser_process->GetApplicationLocale());
     93   localized_strings->Set("spellCheckLanguageCodeSet",
     94                          GetSpellCheckLanguageCodeSet());
     95   localized_strings->Set("uiLanguageCodeSet", GetUILanguageCodeSet());
     96 
     97   const CommandLine& command_line = *CommandLine::ForCurrentProcess();
     98   bool experimental_spell_check_features =
     99       command_line.HasSwitch(switches::kExperimentalSpellcheckerFeatures);
    100   localized_strings->SetBoolean("experimentalSpellCheckFeatures",
    101                                 experimental_spell_check_features);
    102 }
    103 
    104 void LanguageOptionsHandlerCommon::RegisterMessages() {
    105   DCHECK(web_ui_);
    106   web_ui_->RegisterMessageCallback("languageOptionsOpen",
    107       NewCallback(
    108           this,
    109           &LanguageOptionsHandlerCommon::LanguageOptionsOpenCallback));
    110   web_ui_->RegisterMessageCallback("spellCheckLanguageChange",
    111       NewCallback(
    112           this,
    113           &LanguageOptionsHandlerCommon::SpellCheckLanguageChangeCallback));
    114   web_ui_->RegisterMessageCallback("uiLanguageChange",
    115       NewCallback(
    116           this,
    117           &LanguageOptionsHandlerCommon::UiLanguageChangeCallback));
    118 }
    119 
    120 DictionaryValue* LanguageOptionsHandlerCommon::GetUILanguageCodeSet() {
    121   DictionaryValue* dictionary = new DictionaryValue();
    122   const std::vector<std::string>& available_locales =
    123       l10n_util::GetAvailableLocales();
    124   for (size_t i = 0; i < available_locales.size(); ++i) {
    125     dictionary->SetBoolean(available_locales[i], true);
    126   }
    127   return dictionary;
    128 }
    129 
    130 DictionaryValue* LanguageOptionsHandlerCommon::GetSpellCheckLanguageCodeSet() {
    131   DictionaryValue* dictionary = new DictionaryValue();
    132   std::vector<std::string> spell_check_languages;
    133   SpellCheckCommon::SpellCheckLanguages(&spell_check_languages);
    134   for (size_t i = 0; i < spell_check_languages.size(); ++i) {
    135     dictionary->SetBoolean(spell_check_languages[i], true);
    136   }
    137   return dictionary;
    138 }
    139 
    140 void LanguageOptionsHandlerCommon::LanguageOptionsOpenCallback(
    141     const ListValue* args) {
    142   UserMetrics::RecordAction(UserMetricsAction("LanguageOptions_Open"));
    143 }
    144 
    145 void LanguageOptionsHandlerCommon::UiLanguageChangeCallback(
    146     const ListValue* args) {
    147   const std::string language_code = UTF16ToASCII(ExtractStringValue(args));
    148   CHECK(!language_code.empty());
    149   const std::string action = StringPrintf(
    150       "LanguageOptions_UiLanguageChange_%s", language_code.c_str());
    151   UserMetrics::RecordComputedAction(action);
    152   SetApplicationLocale(language_code);
    153     web_ui_->CallJavascriptFunction("options.LanguageOptions.uiLanguageSaved");
    154 }
    155 
    156 void LanguageOptionsHandlerCommon::SpellCheckLanguageChangeCallback(
    157     const ListValue* args) {
    158   const std::string language_code = UTF16ToASCII(ExtractStringValue(args));
    159   CHECK(!language_code.empty());
    160   const std::string action = StringPrintf(
    161       "LanguageOptions_SpellCheckLanguageChange_%s", language_code.c_str());
    162   UserMetrics::RecordComputedAction(action);
    163 }
    164