blob: c4cd972cf869638fa908a08e4e18ff23cd2c83ef [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/settings/chromeos/languages_section.h"
#include "ash/constants/ash_features.h"
#include "ash/constants/ash_pref_names.h"
#include "base/feature_list.h"
#include "base/no_destructor.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/settings/chromeos/os_settings_features_util.h"
#include "chrome/browser/ui/webui/settings/chromeos/search/search_tag_registry.h"
#include "chrome/browser/ui/webui/settings/languages_handler.h"
#include "chrome/browser/ui/webui/webui_util.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "components/prefs/pref_service.h"
#include "components/spellcheck/browser/pref_names.h"
#include "content/public/browser/web_ui_data_source.h"
#include "net/base/url_util.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/webui/web_ui_util.h"
#include "url/gurl.h"
namespace chromeos {
namespace settings {
namespace {
const std::vector<SearchConcept>& GetLanguagesPageSearchConceptsV2() {
static const base::NoDestructor<std::vector<SearchConcept>> tags({
{IDS_OS_SETTINGS_TAG_LANGUAGES,
mojom::kLanguagesSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSubpage,
{.subpage = mojom::Subpage::kLanguages}},
{IDS_OS_SETTINGS_TAG_LANGUAGES_CHANGE_DEVICE_LANGUAGE,
mojom::kLanguagesSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kChangeDeviceLanguage}},
{IDS_OS_SETTINGS_TAG_LANGUAGES_INPUT_ADD_LANGUAGE,
mojom::kLanguagesSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kAddLanguage}},
{IDS_OS_SETTINGS_TAG_LANGUAGES_OFFER_TRANSLATION,
mojom::kLanguagesSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kOfferTranslation}},
});
return *tags;
}
const std::vector<SearchConcept>& GetInputPageSearchConceptsV2() {
static const base::NoDestructor<std::vector<SearchConcept>> tags({
{IDS_OS_SETTINGS_TAG_INPUT,
mojom::kInputSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSubpage,
{.subpage = mojom::Subpage::kInput}},
{IDS_OS_SETTINGS_TAG_LANGUAGES_INPUT_INPUT_OPTIONS_SHELF,
mojom::kInputSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kShowInputOptionsInShelf},
{IDS_OS_SETTINGS_TAG_LANGUAGES_INPUT_INPUT_OPTIONS_SHELF_ALT1,
SearchConcept::kAltTagEnd}},
{IDS_OS_SETTINGS_TAG_LANGUAGES_ADD_INPUT_METHOD,
mojom::kInputSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kAddInputMethod}},
{IDS_OS_SETTINGS_TAG_LANGUAGES_SPELL_CHECK,
mojom::kInputSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kSpellCheck}},
});
return *tags;
}
const std::vector<SearchConcept>& GetEditDictionarySearchConceptsV2() {
static const base::NoDestructor<std::vector<SearchConcept>> tags({
{IDS_OS_SETTINGS_TAG_LANGUAGES_EDIT_DICTIONARY,
mojom::kEditDictionarySubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSubpage,
{.subpage = mojom::Subpage::kEditDictionary}},
});
return *tags;
}
bool IsLanguageSettingsV2Update2Enabled() {
return base::FeatureList::IsEnabled(
::chromeos::features::kLanguageSettingsUpdate2);
}
const std::vector<SearchConcept>& GetSmartInputsSearchConcepts() {
static const base::NoDestructor<std::vector<SearchConcept>> tags({
{IDS_OS_SETTINGS_TAG_LANGUAGES_SUGGESTIONS,
mojom::kSmartInputsSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSubpage,
{.subpage = mojom::Subpage::kSmartInputs}},
});
return *tags;
}
const std::vector<SearchConcept>& GetAssistivePersonalInfoSearchConcepts() {
static const base::NoDestructor<std::vector<SearchConcept>> tags({
{IDS_OS_SETTINGS_TAG_LANGUAGES_PERSONAL_INFORMATION_SUGGESTIONS,
mojom::kSmartInputsSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kShowPersonalInformationSuggestions}},
});
return *tags;
}
const std::vector<SearchConcept>& GetEmojiSuggestionSearchConcepts() {
static const base::NoDestructor<std::vector<SearchConcept>> tags({
{IDS_OS_SETTINGS_TAG_LANGUAGES_EMOJI_SUGGESTIONS,
mojom::kSmartInputsSubpagePath,
mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kShowEmojiSuggestions}},
});
return *tags;
}
bool IsAssistivePersonalInfoAllowed() {
return !features::IsGuestModeActive() &&
base::FeatureList::IsEnabled(
::chromeos::features::kAssistPersonalInfo);
}
// TODO(crbug/1113611): As Smart Inputs page is renamed to Suggestions.
// All related strings, function names and filenames should be renamed as well.
void AddSmartInputsStrings(content::WebUIDataSource* html_source,
bool is_emoji_suggestion_allowed) {
static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"smartInputsTitle", IDS_SETTINGS_SUGGESTIONS_TITLE},
{"personalInfoSuggestionTitle",
IDS_SETTINGS_SUGGESTIONS_PERSONAL_INFO_TITLE},
{"personalInfoSuggestionHelpTooltip",
IDS_SETTINGS_SUGGESTIONS_PERSONAL_INFO_HELP_TOOLTIP},
{"personalInfoSuggestionDescription",
IDS_SETTINGS_SUGGESTIONS_PERSONAL_INFO_DESCRIPTION},
{"managePersonalInfo", IDS_SETTINGS_SUGGESTIONS_MANAGE_PERSONAL_INFO},
{"emojiSuggestionTitle", IDS_SETTINGS_SUGGESTIONS_EMOJI_SUGGESTION_TITLE},
{"emojiSuggestionDescription",
IDS_SETTINGS_SUGGESTIONS_EMOJI_SUGGESTION_DESCRIPTION},
};
html_source->AddLocalizedStrings(kLocalizedStrings);
html_source->AddBoolean("allowAssistivePersonalInfo",
IsAssistivePersonalInfoAllowed());
html_source->AddBoolean("allowEmojiSuggestion", is_emoji_suggestion_allowed);
}
void AddInputMethodOptionsStrings(content::WebUIDataSource* html_source) {
static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"inputMethodOptionsBasicSectionTitle",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_BASIC},
{"inputMethodOptionsAdvancedSectionTitle",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_ADVANCED},
{"inputMethodOptionsPhysicalKeyboardSectionTitle",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_PHYSICAL_KEYBOARD},
{"inputMethodOptionsVirtualKeyboardSectionTitle",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_VIRTUAL_KEYBOARD},
{"inputMethodOptionsEnableDoubleSpacePeriod",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_ENABLE_DOUBLE_SPACE_PERIOD},
{"inputMethodOptionsEnableGestureTyping",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_ENABLE_GESTURE_TYPING},
{"inputMethodOptionsEnablePrediction",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_ENABLE_PREDICTION},
{"inputMethodOptionsEnableSoundOnKeypress",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_ENABLE_SOUND_ON_KEYPRESS},
{"inputMethodOptionsEnableCapitalization",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_ENABLE_CAPITALIZATION},
{"inputMethodOptionsAutoCorrection",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_AUTO_CORRECTION},
{"inputMethodOptionsXkbLayout",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_XKB_LAYOUT},
{"inputMethodOptionsEditUserDict",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_EDIT_USER_DICT},
{"inputMethodOptionsPinyinChinesePunctuation",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_PINYIN_CHINESE_PUNCTUATION},
{"inputMethodOptionsPinyinDefaultChinese",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_PINYIN_DEFAULT_CHINESE},
{"inputMethodOptionsPinyinEnableFuzzy",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_PINYIN_ENABLE_FUZZY},
{"inputMethodOptionsPinyinEnableLowerPaging",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_PINYIN_ENABLE_LOWER_PAGING},
{"inputMethodOptionsPinyinEnableUpperPaging",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_PINYIN_ENABLE_UPPER_PAGING},
{"inputMethodOptionsPinyinFullWidthCharacter",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_PINYIN_FULL_WIDTH_CHARACTER},
{"inputMethodOptionsAutoCorrectionOff",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_AUTO_CORRECTION_OFF},
{"inputMethodOptionsAutoCorrectionModest",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_AUTO_CORRECTION_MODEST},
{"inputMethodOptionsAutoCorrectionAggressive",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_AUTO_CORRECTION_AGGRESSIVE},
{"inputMethodOptionsUsKeyboard",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_KEYBOARD_US},
{"inputMethodOptionsDvorakKeyboard",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_KEYBOARD_DVORAK},
{"inputMethodOptionsColemakKeyboard",
IDS_SETTINGS_INPUT_METHOD_OPTIONS_KEYBOARD_COLEMAK},
};
html_source->AddLocalizedStrings(kLocalizedStrings);
}
void AddLanguagesPageStringsV2(content::WebUIDataSource* html_source) {
static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"deviceLanguageTitle", IDS_OS_SETTINGS_LANGUAGES_DEVICE_LANGUAGE_TITLE},
{"changeDeviceLanguageLabel",
IDS_OS_SETTINGS_LANGUAGES_CHANGE_DEVICE_LANGUAGE_BUTTON_LABEL},
{"changeDeviceLanguageButtonDescription",
IDS_OS_SETTINGS_LANGUAGES_CHANGE_DEVICE_LANGUAGE_BUTTON_DESCRIPTION},
{"languagesPreferenceTitle",
IDS_OS_SETTINGS_LANGUAGES_LANGUAGES_PREFERENCE_TITLE},
{"websiteLanguagesTitle",
IDS_OS_SETTINGS_LANGUAGES_WEBSITE_LANGUAGES_TITLE},
{"translateTargetLabel",
IDS_OS_SETTINGS_LANGUAGES_TRANSLATE_TARGET_LABEL},
{"offerToTranslateThisLanguage",
IDS_OS_SETTINGS_LANGUAGES_OFFER_TO_TRANSLATE_THIS_LANGUAGE},
{"offerTranslationLabel",
IDS_OS_SETTINGS_LANGUAGES_OFFER_TRANSLATION_LABEL},
{"offerTranslationSublabel",
IDS_OS_SETTINGS_LANGUAGES_OFFER_TRANSLATION_SUBLABEL},
{"offerGoogleTranslateLabel",
IDS_OS_SETTINGS_LANGUAGES_OFFER_GOOGLE_TRANSLATE_LABEL},
{"changeDeviceLanguageDialogTitle",
IDS_OS_SETTINGS_LANGUAGES_CHANGE_DEVICE_LANGUAGE_DIALOG_TITLE},
{"selectedDeviceLanguageInstruction",
IDS_OS_SETTINGS_LANGUAGES_SELECTED_DEVICE_LANGUAGE_INSTRUCTION},
{"notSelectedDeviceLanguageInstruction",
IDS_OS_SETTINGS_LANGUAGES_NOT_SELECTED_DEVICE_LANGUAGE_INSTRUCTION},
{"changeDeviceLanguageConfirmButtonLabel",
IDS_OS_SETTINGS_LANGUAGES_CHANGE_DEVICE_LANGUAGE_CONFIRM_BUTTON_LABEL},
{"googleAccountLanguageTitle",
IDS_OS_SETTINGS_LANGUAGES_GOOGLE_ACCOUNT_LANGUAGE_TITLE},
{"googleAccountLanguageDescription",
IDS_OS_SETTINGS_LANGUAGES_GOOGLE_ACCOUNT_LANGUAGE_DESCRIPTION},
{"manageGoogleAccountLanguageLabel",
IDS_OS_SETTINGS_LANGUAGES_MANAGE_GOOGLE_ACCOUNT_LANGUAGE_LABEL},
};
html_source->AddLocalizedStrings(kLocalizedStrings);
html_source->AddString(
"languagesPreferenceDescription",
l10n_util::GetStringFUTF16(
IDS_OS_SETTINGS_LANGUAGES_LANGUAGES_PREFERENCE_DESCRIPTION,
base::ASCIIToUTF16(chrome::kLanguageSettingsLearnMoreUrl)));
html_source->AddString(
"websiteLanguagesDescription",
l10n_util::GetStringFUTF16(
IDS_OS_SETTINGS_LANGUAGES_WEBSITE_LANGUAGES_DESCRIPTION,
base::ASCIIToUTF16(chrome::kLanguageSettingsLearnMoreUrl)));
html_source->AddString(
"changeDeviceLanguageDialogDescription",
l10n_util::GetStringFUTF16(
IDS_OS_SETTINGS_LANGUAGES_CHANGE_DEVICE_LANGUAGE_DIALOG_DESCRIPTION,
base::ASCIIToUTF16(chrome::kLanguageSettingsLearnMoreUrl)));
html_source->AddString(
"googleAccountLanguagesURL",
net::AppendQueryParameter(GURL(chrome::kGoogleAccountLanguagesURL),
"utm_source", "chrome-settings")
.spec());
}
void AddInputPageStringsV2(content::WebUIDataSource* html_source) {
static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"inputMethodListTitle",
IDS_OS_SETTINGS_LANGUAGES_INPUT_METHOD_LIST_TITLE},
{"openOptionsPage", IDS_OS_SETTINGS_LANGUAGES_OPEN_OPTIONS_PAGE_LABEL},
{"addInputMethodLabel", IDS_OS_SETTINGS_LANGUAGES_ADD_INPUT_METHOD_LABEL},
{"removeInputMethodTooltip",
IDS_OS_SETTINGS_LANGUAGES_REMOVE_INPUT_METHOD_TOOLTIP},
{"suggestedInputMethodsLabel",
IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_INPUT_METHODS_LABEL},
{"allInputMethodsLabel",
IDS_OS_SETTINGS_LANGUAGES_ALL_INPUT_METHODS_LABEL},
{"searchInputMethodsLabel",
IDS_OS_SETTINGS_LANGUAGES_SEARCH_INPUT_METHODS_LABEL},
{"inputMethodNotAllowed",
IDS_OS_SETTINGS_LANGUAGES_INPUT_METHOD_NOT_ALLOWED},
{"spellCheckTitle", IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE},
{"spellCheckEnhancedLabel",
IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL},
{"spellCheckLanguagesListTitle",
IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE},
{"spellCheckLanguagesListDescription",
IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_DESCRIPTION},
{"addSpellCheckLanguagesTitle",
IDS_OS_SETTINGS_LANGUAGES_ADD_SPELL_CHECK_LANGUAGES_TITLE},
{"searchSpellCheckLanguagesLabel",
IDS_OS_SETTINGS_LANGUAGES_SEARCH_SPELL_CHECK_LANGUAGES_LABEL},
{"suggestedSpellcheckLanguages",
IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_SPELL_CHECK_LANGUAGES_LABEL},
{"allSpellcheckLanguages",
IDS_OS_SETTINGS_LANGUAGES_ALL_SPELL_CHECK_LANGUAGES_LABEL},
{"spellCheckLanguageNotAllowed",
IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGE_NOT_ALLOWED},
{"removeSpellCheckLanguageTooltip",
IDS_OS_SETTINGS_LANGUAGES_REMOVE_SPELL_CHECK_LANGUAGE_TOOLTIP},
{"languagesDictionaryDownloadError",
IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED},
{"languagesDictionaryDownloadRetryLabel",
IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_LABEL},
{"languagesDictionaryDownloadRetryDescription",
IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_DESCRIPTION},
{"editDictionaryLabel", IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_LABEL},
{"editDictionaryDescription",
IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_DESCRIPTION},
{"addDictionaryWordButtonLabel",
IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_BUTTON_LABEL},
{"addDictionaryWordDuplicateError",
IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_DUPLICATE_ERROR},
{"addDictionaryWordLengthError",
IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_LENGTH_ERROR},
{"deleteDictionaryWordTooltip",
IDS_OS_SETTINGS_LANGUAGES_DELETE_DICTIONARY_WORD_TOOLTIP},
{"noDictionaryWordsLabel",
IDS_OS_SETTINGS_LANGUAGES_NO_DICTIONARY_WORDS_LABEL},
};
html_source->AddLocalizedStrings(kLocalizedStrings);
}
} // namespace
LanguagesSection::LanguagesSection(Profile* profile,
SearchTagRegistry* search_tag_registry,
PrefService* pref_service)
: OsSettingsSection(profile, search_tag_registry),
pref_service_(pref_service) {
SearchTagRegistry::ScopedTagUpdater updater = registry()->StartUpdate();
pref_change_registrar_.Init(pref_service_);
pref_change_registrar_.Add(
spellcheck::prefs::kSpellCheckEnable,
base::BindRepeating(&LanguagesSection::UpdateSpellCheckSearchTags,
base::Unretained(this)));
updater.AddSearchTags(GetLanguagesPageSearchConceptsV2());
updater.AddSearchTags(GetInputPageSearchConceptsV2());
UpdateSpellCheckSearchTags();
if (IsAssistivePersonalInfoAllowed() || IsEmojiSuggestionAllowed()) {
updater.AddSearchTags(GetSmartInputsSearchConcepts());
if (IsAssistivePersonalInfoAllowed())
updater.AddSearchTags(GetAssistivePersonalInfoSearchConcepts());
if (IsEmojiSuggestionAllowed())
updater.AddSearchTags(GetEmojiSuggestionSearchConcepts());
}
}
LanguagesSection::~LanguagesSection() = default;
void LanguagesSection::AddLoadTimeData(content::WebUIDataSource* html_source) {
static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"orderLanguagesInstructions",
IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_ORDERING_INSTRUCTIONS},
{"osLanguagesPageTitle", IDS_OS_SETTINGS_LANGUAGES_AND_INPUT_PAGE_TITLE},
{"languagesPageTitle", IDS_OS_SETTINGS_LANGUAGES_LANGUAGES_PAGE_TITLE},
{"inputPageTitle", IDS_OS_SETTINGS_LANGUAGES_INPUT_PAGE_TITLE},
{"osLanguagesListTitle", IDS_OS_SETTINGS_LANGUAGES_LIST_TITLE},
{"inputMethodsListTitle",
IDS_SETTINGS_LANGUAGES_INPUT_METHODS_LIST_TITLE},
{"inputMethodEnabled", IDS_SETTINGS_LANGUAGES_INPUT_METHOD_ENABLED},
{"inputMethodsExpandA11yLabel",
IDS_SETTINGS_LANGUAGES_INPUT_METHODS_EXPAND_ACCESSIBILITY_LABEL},
{"inputMethodsManagedbyPolicy",
IDS_SETTINGS_LANGUAGES_INPUT_METHODS_MANAGED_BY_POLICY},
{"manageInputMethods", IDS_SETTINGS_LANGUAGES_INPUT_METHODS_MANAGE},
// TODO(crbug.com/1097328): Remove this string, as it is unused.
{"manageInputMethodsPageTitle",
IDS_SETTINGS_LANGUAGES_MANAGE_INPUT_METHODS_TITLE},
{"showImeMenu", IDS_SETTINGS_LANGUAGES_SHOW_IME_MENU},
{"displayLanguageRestart",
IDS_SETTINGS_LANGUAGES_RESTART_TO_DISPLAY_LANGUAGE},
{"moveDown", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_DOWN},
{"displayInThisLanguage",
IDS_SETTINGS_LANGUAGES_DISPLAY_IN_THIS_LANGUAGE},
{"searchLanguages", IDS_SETTINGS_LANGUAGE_SEARCH},
{"addLanguagesDialogTitle",
IDS_SETTINGS_LANGUAGES_MANAGE_LANGUAGES_TITLE},
{"moveToTop", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_TO_TOP},
{"isDisplayedInThisLanguage",
IDS_SETTINGS_LANGUAGES_IS_DISPLAYED_IN_THIS_LANGUAGE},
{"removeLanguage", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_REMOVE},
{"addLanguages", IDS_SETTINGS_LANGUAGES_LANGUAGES_ADD},
{"moveUp", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_UP},
{"noSearchResults", IDS_SEARCH_NO_RESULTS},
};
html_source->AddLocalizedStrings(kLocalizedStrings);
AddSmartInputsStrings(html_source, IsEmojiSuggestionAllowed());
AddInputMethodOptionsStrings(html_source);
AddLanguagesPageStringsV2(html_source);
AddInputPageStringsV2(html_source);
html_source->AddString(
"languagesLearnMoreURL",
base::ASCIIToUTF16(chrome::kLanguageSettingsLearnMoreUrl));
html_source->AddBoolean("imeOptionsInSettings",
base::FeatureList::IsEnabled(
::chromeos::features::kImeOptionsInSettings));
html_source->AddBoolean("enableLanguageSettingsV2Update2",
IsLanguageSettingsV2Update2Enabled());
}
void LanguagesSection::AddHandlers(content::WebUI* web_ui) {
web_ui->AddMessageHandler(
std::make_unique<::settings::LanguagesHandler>(profile()));
}
int LanguagesSection::GetSectionNameMessageId() const {
return IDS_OS_SETTINGS_LANGUAGES_AND_INPUT_PAGE_TITLE;
}
mojom::Section LanguagesSection::GetSection() const {
return mojom::Section::kLanguagesAndInput;
}
mojom::SearchResultIcon LanguagesSection::GetSectionIcon() const {
return mojom::SearchResultIcon::kGlobe;
}
std::string LanguagesSection::GetSectionPath() const {
return mojom::kLanguagesAndInputSectionPath;
}
bool LanguagesSection::LogMetric(mojom::Setting setting,
base::Value& value) const {
// Unimplemented.
return false;
}
void LanguagesSection::RegisterHierarchy(HierarchyGenerator* generator) const {
// Languages.
generator->RegisterTopLevelSubpage(
IDS_OS_SETTINGS_LANGUAGES_LANGUAGES_PAGE_TITLE,
mojom::Subpage::kLanguages, mojom::SearchResultIcon::kGlobe,
mojom::SearchResultDefaultRank::kMedium, mojom::kLanguagesSubpagePath);
static constexpr mojom::Setting kLanguagesPageSettings[] = {
mojom::Setting::kChangeDeviceLanguage,
mojom::Setting::kOfferTranslation,
};
RegisterNestedSettingBulk(mojom::Subpage::kLanguages, kLanguagesPageSettings,
generator);
// Input.
generator->RegisterTopLevelSubpage(
IDS_OS_SETTINGS_LANGUAGES_INPUT_PAGE_TITLE, mojom::Subpage::kInput,
mojom::SearchResultIcon::kGlobe, mojom::SearchResultDefaultRank::kMedium,
mojom::kInputSubpagePath);
static constexpr mojom::Setting kInputPageSettings[] = {
mojom::Setting::kAddInputMethod,
mojom::Setting::kSpellCheck,
};
RegisterNestedSettingBulk(mojom::Subpage::kInput, kInputPageSettings,
generator);
// Edit dictionary.
generator->RegisterNestedSubpage(
IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_LABEL,
mojom::Subpage::kEditDictionary, mojom::Subpage::kInput,
mojom::SearchResultIcon::kGlobe, mojom::SearchResultDefaultRank::kMedium,
mojom::kEditDictionarySubpagePath);
generator->RegisterNestedSetting(mojom::Setting::kAddLanguage,
mojom::Subpage::kLanguages);
generator->RegisterNestedSetting(mojom::Setting::kShowInputOptionsInShelf,
mojom::Subpage::kInput);
// Input method options.
generator->RegisterNestedSubpage(
IDS_SETTINGS_LANGUAGES_INPUT_METHOD_OPTIONS_TITLE,
mojom::Subpage::kInputMethodOptions, mojom::Subpage::kInput,
mojom::SearchResultIcon::kGlobe, mojom::SearchResultDefaultRank::kMedium,
mojom::kInputMethodOptionsSubpagePath);
// Smart inputs.
generator->RegisterTopLevelSubpage(
IDS_SETTINGS_SUGGESTIONS_TITLE, mojom::Subpage::kSmartInputs,
mojom::SearchResultIcon::kGlobe, mojom::SearchResultDefaultRank::kMedium,
mojom::kSmartInputsSubpagePath);
static constexpr mojom::Setting kSmartInputsFeaturesSettings[] = {
mojom::Setting::kShowPersonalInformationSuggestions,
mojom::Setting::kShowEmojiSuggestions,
};
RegisterNestedSettingBulk(mojom::Subpage::kSmartInputs,
kSmartInputsFeaturesSettings, generator);
}
bool LanguagesSection::IsEmojiSuggestionAllowed() const {
return base::FeatureList::IsEnabled(
::chromeos::features::kEmojiSuggestAddition) &&
pref_service_->GetBoolean(
::chromeos::prefs::kEmojiSuggestionEnterpriseAllowed);
}
bool LanguagesSection::IsSpellCheckEnabled() const {
return pref_service_->GetBoolean(spellcheck::prefs::kSpellCheckEnable);
}
void LanguagesSection::UpdateSpellCheckSearchTags() {
SearchTagRegistry::ScopedTagUpdater updater = registry()->StartUpdate();
updater.RemoveSearchTags(GetEditDictionarySearchConceptsV2());
if (IsSpellCheckEnabled()) {
updater.AddSearchTags(GetEditDictionarySearchConceptsV2());
}
}
} // namespace settings
} // namespace chromeos