Moving the core language prefs (kAcceptLanguages and kPreferredLanguages) to components/language.

Bug: 902354, 872096
Change-Id: I96be17278c7cc0147871675e67552cab123a180d
Reviewed-on: https://chromium-review.googlesource.com/c/1452480
Reviewed-by: Avi Drissman <[email protected]>
Reviewed-by: Scott Violet <[email protected]>
Reviewed-by: anthonyvd <[email protected]>
Commit-Queue: Alexandre Frechette <[email protected]>
Cr-Commit-Position: refs/heads/master@{#631924}
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
index 38a7b842..3458583 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
@@ -23,9 +23,9 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/browser/translate/translate_service.h"
-#include "chrome/common/pref_names.h"
 #include "components/language/core/browser/language_model.h"
 #include "components/language/core/browser/language_model_manager.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/search_engines/template_url_service.h"
 #include "components/signin/core/browser/account_consistency_method.h"
@@ -413,7 +413,7 @@
 std::string ContextualSearchDelegate::GetAcceptLanguages() {
   Profile* profile = ProfileManager::GetActiveUserProfile();
   PrefService* pref_service = profile->GetPrefs();
-  return pref_service->GetString(prefs::kAcceptLanguages);
+  return pref_service->GetString(language::prefs::kAcceptLanguages);
 }
 
 // Decodes the given response from the search term resolution request and sets
diff --git a/chrome/browser/android/explore_sites/explore_sites_bridge.cc b/chrome/browser/android/explore_sites/explore_sites_bridge.cc
index 1af06a043..1881de3d 100644
--- a/chrome/browser/android/explore_sites/explore_sites_bridge.cc
+++ b/chrome/browser/android/explore_sites/explore_sites_bridge.cc
@@ -17,7 +17,7 @@
 #include "chrome/browser/android/explore_sites/explore_sites_types.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_android.h"
-#include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "jni/ExploreSitesBridge_jni.h"
 #include "jni/ExploreSitesCategory_jni.h"
@@ -158,7 +158,8 @@
   std::string accept_languages;
   PrefService* pref_service = profile->GetPrefs();
   if (pref_service != nullptr) {
-    accept_languages = pref_service->GetString(prefs::kAcceptLanguages);
+    accept_languages =
+        pref_service->GetString(language::prefs::kAcceptLanguages);
   }
 
   service->UpdateCatalogFromNetwork(
diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc
index c586901..165290f3 100644
--- a/chrome/browser/android/preferences/pref_service_bridge.cc
+++ b/chrome/browser/android/preferences/pref_service_bridge.cc
@@ -41,6 +41,7 @@
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/content_settings/core/common/content_settings_pattern.h"
 #include "components/content_settings/core/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
 #include "components/prefs/pref_service.h"
@@ -1018,7 +1019,8 @@
 
   PrefServiceBridge::PrependToAcceptLanguagesIfNecessary(locale_string,
                                                          &accept_languages);
-  GetPrefService()->SetString(prefs::kAcceptLanguages, accept_languages);
+  GetPrefService()->SetString(language::prefs::kAcceptLanguages,
+                              accept_languages);
 }
 
 // Sends all information about the different versions to Java.
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn
index 54c90d00..73463b3 100644
--- a/chrome/browser/android/vr/BUILD.gn
+++ b/chrome/browser/android/vr/BUILD.gn
@@ -95,6 +95,7 @@
     "//chrome/browser/vr:vr_common",
     "//chrome/common:common",
     "//chrome/common:constants",
+    "//components/language/core/browser",
     "//components/omnibox/browser",
     "//components/rappor",
     "//components/search_engines:search_engines",
diff --git a/chrome/browser/android/vr/vr_shell.cc b/chrome/browser/android/vr/vr_shell.cc
index 0e10c74..da74cfc1 100644
--- a/chrome/browser/android/vr/vr_shell.cc
+++ b/chrome/browser/android/vr/vr_shell.cc
@@ -48,8 +48,8 @@
 #include "chrome/browser/vr/vr_tab_helper.h"
 #include "chrome/browser/vr/vr_web_contents_observer.h"
 #include "chrome/common/chrome_features.h"
-#include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
@@ -961,7 +961,7 @@
         this, ui_,
         content::BrowserContext::GetDefaultStoragePartition(profile)
             ->GetURLLoaderFactoryForBrowserProcessIOThread(),
-        profile->GetPrefs()->GetString(prefs::kAcceptLanguages),
+        profile->GetPrefs()->GetString(language::prefs::kAcceptLanguages),
         profile_locale));
   }
   if (active) {
diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
index c58a964..aa7ac52 100644
--- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
+++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
@@ -33,6 +33,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "components/history/core/browser/history_service.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/omnibox/browser/autocomplete_classifier.h"
 #include "components/omnibox/browser/autocomplete_match.h"
 #include "components/omnibox/browser/omnibox_field_trial.h"
@@ -200,7 +201,7 @@
 }
 
 std::string ChromeAutocompleteProviderClient::GetAcceptLanguages() const {
-  return profile_->GetPrefs()->GetString(prefs::kAcceptLanguages);
+  return profile_->GetPrefs()->GetString(language::prefs::kAcceptLanguages);
 }
 
 std::string
diff --git a/chrome/browser/autofill/risk_util.cc b/chrome/browser/autofill/risk_util.cc
index 523b0b1..5b72a01 100644
--- a/chrome/browser/autofill/risk_util.cc
+++ b/chrome/browser/autofill/risk_util.cc
@@ -19,6 +19,7 @@
 #include "chrome/common/pref_names.h"
 #include "components/autofill/content/browser/risk/fingerprint.h"
 #include "components/autofill/content/browser/risk/proto/fingerprint.pb.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/metrics/metrics_service.h"
 #include "components/prefs/pref_service.h"
 #include "components/version_info/version_info.h"
@@ -83,7 +84,7 @@
           ->GetPrefs();
   std::string charset = user_prefs->GetString(::prefs::kDefaultCharset);
   std::string accept_languages =
-      user_prefs->GetString(::prefs::kAcceptLanguages);
+      user_prefs->GetString(::language::prefs::kAcceptLanguages);
   base::Time install_time = base::Time::FromTimeT(
       g_browser_process->metrics_service()->GetInstallDate());
 
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index cb11972..9c38f76 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -1642,7 +1642,7 @@
       base::debug::BeingDebugged());
 
   language_usage_metrics::LanguageUsageMetrics::RecordAcceptLanguages(
-      profile_->GetPrefs()->GetString(prefs::kAcceptLanguages));
+      profile_->GetPrefs()->GetString(language::prefs::kAcceptLanguages));
   language_usage_metrics::LanguageUsageMetrics::RecordApplicationLanguage(
       browser_process_->GetApplicationLocale());
 
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 5df10b80..392a1b16 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -208,6 +208,7 @@
 #include "components/feature_engagement/public/feature_constants.h"
 #include "components/feature_engagement/public/feature_list.h"
 #include "components/google/core/common/google_util.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/metrics/call_stack_profile_collector.h"
 #include "components/metrics/client_info.h"
 #include "components/mirroring/mojom/constants.mojom.h"
@@ -2284,7 +2285,7 @@
 std::string ChromeContentBrowserClient::GetAcceptLangs(
     content::BrowserContext* context) {
   Profile* profile = Profile::FromBrowserContext(context);
-  return profile->GetPrefs()->GetString(prefs::kAcceptLanguages);
+  return profile->GetPrefs()->GetString(language::prefs::kAcceptLanguages);
 }
 
 const gfx::ImageSkia* ChromeContentBrowserClient::GetDefaultFavicon() {
diff --git a/chrome/browser/chromeos/accessibility/dictation_chromeos.cc b/chrome/browser/chromeos/accessibility/dictation_chromeos.cc
index 287734b..6f2f313 100644
--- a/chrome/browser/chromeos/accessibility/dictation_chromeos.cc
+++ b/chrome/browser/chromeos/accessibility/dictation_chromeos.cc
@@ -81,7 +81,7 @@
       weak_ptr_factory_.GetWeakPtr(),
       content::BrowserContext::GetDefaultStoragePartition(profile_)
           ->GetURLLoaderFactoryForBrowserProcessIOThread(),
-      profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
+      profile_->GetPrefs()->GetString(language::prefs::kAcceptLanguages),
       GetUserLanguage(profile_));
   speech_recognizer_->Start(nullptr /* preamble */);
   return true;
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
index a6c3e0b..26f24aa 100644
--- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
+++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
@@ -251,7 +251,7 @@
   } else if (pref_name == ash::prefs::kAccessibilityVirtualKeyboardEnabled) {
     SyncAccessibilityVirtualKeyboardEnabled();
   } else if (pref_name == ::language::prefs::kApplicationLocale ||
-             pref_name == ::prefs::kLanguagePreferredLanguages) {
+             pref_name == ::language::prefs::kPreferredLanguages) {
     SyncLocale();
   } else if (pref_name == ::prefs::kUse24HourClock) {
     SyncUse24HourClock();
@@ -377,7 +377,7 @@
   // implementation.
   SyncLocale();
   AddPrefToObserve(::language::prefs::kApplicationLocale);
-  AddPrefToObserve(::prefs::kLanguagePreferredLanguages);
+  AddPrefToObserve(::language::prefs::kPreferredLanguages);
 }
 
 void ArcSettingsServiceImpl::SyncAccessibilityLargeMouseCursorEnabled() const {
diff --git a/chrome/browser/chromeos/base/locale_util.cc b/chrome/browser/chromeos/base/locale_util.cc
index bc628722..9428e654 100644
--- a/chrome/browser/chromeos/base/locale_util.cc
+++ b/chrome/browser/chromeos/base/locale_util.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/chromeos/login/session/user_session_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/language/core/common/locale_util.h"
 #include "components/prefs/pref_service.h"
 #include "components/translate/core/browser/translate_prefs.h"
@@ -106,11 +107,11 @@
     data->callback.Run(data->result);
 }
 
-// Get parsed list of preferred languages from the 'kLanguagePreferredLanguages'
+// Get parsed list of preferred languages from the 'kPreferredLanguages'
 // setting.
 std::vector<std::string> GetPreferredLanguagesList(const PrefService* prefs) {
   std::string preferred_languages_string =
-      prefs->GetString(prefs::kLanguagePreferredLanguages);
+      prefs->GetString(language::prefs::kPreferredLanguages);
   return base::SplitString(preferred_languages_string, ",",
                            base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
 }
@@ -192,7 +193,7 @@
 
   // Do not set setting if it did not change to not cause the update callback
   if (preferred_languages != updated_preferred_languages) {
-    prefs->SetString(prefs::kLanguagePreferredLanguages,
+    prefs->SetString(language::prefs::kPreferredLanguages,
                      base::JoinString(updated_preferred_languages, ","));
   }
 }
@@ -201,7 +202,7 @@
   // Check the user's preferred languages if one of them is an allowed UI
   // locale.
   std::string preferred_languages_string =
-      prefs->GetString(prefs::kLanguagePreferredLanguages);
+      prefs->GetString(language::prefs::kPreferredLanguages);
   std::vector<std::string> preferred_languages =
       GetPreferredLanguagesList(prefs);
   for (const std::string& language : preferred_languages) {
@@ -225,13 +226,13 @@
 bool AddLocaleToPreferredLanguages(const std::string& locale,
                                    PrefService* prefs) {
   std::string preferred_languages_string =
-      prefs->GetString(prefs::kLanguagePreferredLanguages);
+      prefs->GetString(language::prefs::kPreferredLanguages);
   std::vector<std::string> preferred_languages =
       base::SplitString(preferred_languages_string, ",", base::TRIM_WHITESPACE,
                         base::SPLIT_WANT_NONEMPTY);
   if (!base::ContainsValue(preferred_languages, locale)) {
     preferred_languages.push_back(locale);
-    prefs->SetString(prefs::kLanguagePreferredLanguages,
+    prefs->SetString(language::prefs::kPreferredLanguages,
                      base::JoinString(preferred_languages, ","));
     return true;
   }
diff --git a/chrome/browser/chromeos/input_method/input_method_syncer.cc b/chrome/browser/chromeos/input_method/input_method_syncer.cc
index 4eeb9b5..a27e9870 100644
--- a/chrome/browser/chromeos/input_method/input_method_syncer.cc
+++ b/chrome/browser/chromeos/input_method/input_method_syncer.cc
@@ -16,6 +16,7 @@
 #include "base/task_runner.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/sync_preferences/pref_service_syncable.h"
 #include "content/public/browser/browser_thread.h"
@@ -128,10 +129,6 @@
 void InputMethodSyncer::RegisterProfilePrefs(
     user_prefs::PrefRegistrySyncable* registry) {
   registry->RegisterStringPref(
-      prefs::kLanguagePreferredLanguagesSyncable,
-      "",
-      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-  registry->RegisterStringPref(
       prefs::kLanguagePreloadEnginesSyncable,
       "",
       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
@@ -145,8 +142,8 @@
   // PrefService::IsSyncing() changes.
   prefs_->AddObserver(this);
 
-  preferred_languages_syncable_.Init(prefs::kLanguagePreferredLanguagesSyncable,
-                                     prefs_);
+  preferred_languages_syncable_.Init(
+      language::prefs::kPreferredLanguagesSyncable, prefs_);
   preload_engines_syncable_.Init(prefs::kLanguagePreloadEnginesSyncable,
                                  prefs_);
   enabled_imes_syncable_.Init(prefs::kLanguageEnabledImesSyncable, prefs_);
@@ -154,8 +151,8 @@
   BooleanPrefMember::NamedChangeCallback callback =
       base::Bind(&InputMethodSyncer::OnPreferenceChanged,
                  base::Unretained(this));
-  preferred_languages_.Init(prefs::kLanguagePreferredLanguages,
-                            prefs_, callback);
+  preferred_languages_.Init(language::prefs::kPreferredLanguages, prefs_,
+                            callback);
   preload_engines_.Init(prefs::kLanguagePreloadEngines,
                         prefs_, callback);
   enabled_imes_.Init(prefs::kLanguageEnabledImes, prefs_, callback);
@@ -230,10 +227,9 @@
       prefs::kLanguageEnabledImes));
 
   // Remove unsupported locales before updating the local languages preference.
-  std::string languages(
-      AddSupportedInputMethodValues(preferred_languages_.GetValue(),
-                                    preferred_languages_syncable,
-                                    prefs::kLanguagePreferredLanguages));
+  std::string languages(AddSupportedInputMethodValues(
+      preferred_languages_.GetValue(), preferred_languages_syncable,
+      language::prefs::kPreferredLanguages));
   base::PostTaskWithTraitsAndReplyWithResult(
       FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::Bind(&CheckAndResolveLocales, languages),
@@ -272,9 +268,9 @@
       ime_state_->GetInputMethodExtensions(supported_descriptors.get());
     }
     CheckAndResolveInputMethodIDs(*supported_descriptors, &new_token_values);
-  } else if (pref_name != prefs::kLanguagePreferredLanguages) {
+  } else if (pref_name != language::prefs::kPreferredLanguages) {
     NOTREACHED() << "Attempting to merge an invalid preference.";
-    // kLanguagePreferredLanguages is checked in CheckAndResolveLocales().
+    // kPreferredLanguages is checked in CheckAndResolveLocales().
   }
 
   // Do the actual merging.
@@ -296,7 +292,7 @@
 }
 
 void InputMethodSyncer::OnPreferenceChanged(const std::string& pref_name) {
-  DCHECK(pref_name == prefs::kLanguagePreferredLanguages ||
+  DCHECK(pref_name == language::prefs::kPreferredLanguages ||
          pref_name == prefs::kLanguagePreloadEngines ||
          pref_name == prefs::kLanguageEnabledImes);
 
diff --git a/chrome/browser/chromeos/input_method/input_method_syncer.h b/chrome/browser/chromeos/input_method/input_method_syncer.h
index f570d1c..14887335 100644
--- a/chrome/browser/chromeos/input_method/input_method_syncer.h
+++ b/chrome/browser/chromeos/input_method/input_method_syncer.h
@@ -58,7 +58,7 @@
       const std::string& synced_pref,
       const char* pref_name);
 
-  // Sets prefs::kLanguagePreferredLanguages and sets |merging_| to false.
+  // Sets language::prefs::kPreferredLanguages and sets |merging_| to false.
   void FinishMerge(const std::string& languages);
 
   // Callback method for preference changes. Updates the syncable prefs using
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc
index 20fd400a..d5d41b37 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -252,7 +252,7 @@
   language_preload_engines.SetValue(base::JoinString(input_method_ids, ","));
   BootTimesRecorder::Get()->AddLoginTimeMarker("IMEStarted", false);
 
-  // Second, we'll set kLanguagePreferredLanguages.
+  // Second, we'll set kPreferredLanguages.
   std::vector<std::string> language_codes;
 
   // The current locale should be on the top.
@@ -276,7 +276,7 @@
     }
   }
   // Save the preferred languages in the user's preferences.
-  prefs->SetString(prefs::kLanguagePreferredLanguages,
+  prefs->SetString(language::prefs::kPreferredLanguages,
                    base::JoinString(language_codes, ","));
 
   // Indicate that we need to merge the syncable input methods when we sync,
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc
index 807b834..2818c8b 100644
--- a/chrome/browser/chromeos/preferences.cc
+++ b/chrome/browser/chromeos/preferences.cc
@@ -43,6 +43,7 @@
 #include "chromeos/timezone/timezone_resolver.h"
 #include "components/drive/drive_pref_names.h"
 #include "components/feedback/tracing_manager.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/policy/proto/chrome_device_policy.pb.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_member.h"
@@ -71,8 +72,6 @@
 
 namespace {
 
-static const char kFallbackInputMethodLocale[] = "en-US";
-
 // The keyboard preferences that determine how we remap modifier keys. These
 // preferences will be saved in global user preferences dictionary so that they
 // can be used on signin screen.
@@ -351,8 +350,6 @@
   registry->RegisterStringPref(prefs::kLanguagePreviousInputMethod, "");
   registry->RegisterListPref(prefs::kLanguageAllowedInputMethods);
   registry->RegisterListPref(prefs::kAllowedLanguages);
-  registry->RegisterStringPref(prefs::kLanguagePreferredLanguages,
-                               kFallbackInputMethodLocale);
   registry->RegisterStringPref(prefs::kLanguagePreloadEngines,
                                hardware_keyboard_id);
   registry->RegisterStringPref(prefs::kLanguageEnabledImes, "");
@@ -568,7 +565,7 @@
   allowed_input_methods_.Init(prefs::kLanguageAllowedInputMethods, prefs,
                               callback);
   allowed_languages_.Init(prefs::kAllowedLanguages, prefs, callback);
-  preferred_languages_.Init(prefs::kLanguagePreferredLanguages, prefs,
+  preferred_languages_.Init(language::prefs::kPreferredLanguages, prefs,
                             callback);
   ime_menu_activated_.Init(prefs::kLanguageImeMenuActivated, prefs, callback);
   // Notifies the system tray to remove the IME items.
@@ -844,7 +841,7 @@
     locale_util::RemoveDisallowedLanguagesFromPreferred(prefs_);
 
   if (reason != REASON_PREF_CHANGED ||
-      pref_name == prefs::kLanguagePreferredLanguages) {
+      pref_name == language::prefs::kPreferredLanguages) {
     // In case setting has been changed with sync it can contain disallowed
     // values.
     locale_util::RemoveDisallowedLanguagesFromPreferred(prefs_);
diff --git a/chrome/browser/chromeos/preferences_unittest.cc b/chrome/browser/chromeos/preferences_unittest.cc
index f69bbc4..ca7c1bac 100644
--- a/chrome/browser/chromeos/preferences_unittest.cc
+++ b/chrome/browser/chromeos/preferences_unittest.cc
@@ -20,6 +20,7 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_member.h"
 #include "components/sync/model/fake_sync_change_processor.h"
 #include "components/sync/model/sync_change.h"
@@ -224,11 +225,10 @@
     PreferencesTest::SetUp();
 
     // Initialize pref members.
-    preferred_languages_.Init(prefs::kLanguagePreferredLanguages,
+    preferred_languages_.Init(language::prefs::kPreferredLanguages,
                               pref_service_);
     preferred_languages_syncable_.Init(
-        prefs::kLanguagePreferredLanguagesSyncable,
-        pref_service_);
+        language::prefs::kPreferredLanguagesSyncable, pref_service_);
     preload_engines_.Init(prefs::kLanguagePreloadEngines, pref_service_);
     preload_engines_syncable_.Init(prefs::kLanguagePreloadEnginesSyncable,
                                    pref_service_);
@@ -364,7 +364,7 @@
   // Create some values to come from the server.
   syncer::SyncDataList sync_data_list;
   sync_data_list.push_back(CreatePrefSyncData(
-      prefs::kLanguagePreferredLanguagesSyncable, base::Value("ru,fi")));
+      language::prefs::kPreferredLanguagesSyncable, base::Value("ru,fi")));
   sync_data_list.push_back(CreatePrefSyncData(
       prefs::kLanguagePreloadEnginesSyncable, base::Value("xkb:se::swe")));
   sync_data_list.push_back(CreatePrefSyncData(
@@ -404,7 +404,7 @@
   syncer::SyncChangeList change_list;
   change_list.push_back(syncer::SyncChange(
       FROM_HERE, syncer::SyncChange::ACTION_UPDATE,
-      CreatePrefSyncData(prefs::kLanguagePreferredLanguagesSyncable,
+      CreatePrefSyncData(language::prefs::kPreferredLanguagesSyncable,
                          base::Value("de"))));
   change_list.push_back(syncer::SyncChange(
       FROM_HERE, syncer::SyncChange::ACTION_UPDATE,
@@ -449,7 +449,7 @@
   // Create some values to come from the server.
   syncer::SyncDataList sync_data_list;
   sync_data_list.push_back(CreatePrefSyncData(
-      prefs::kLanguagePreferredLanguages, base::Value("ru,fi")));
+      language::prefs::kPreferredLanguages, base::Value("ru,fi")));
   sync_data_list.push_back(
       CreatePrefSyncData(prefs::kLanguagePreloadEngines,
                          base::Value(ToInputMethodIds("xkb:ru::rus"))));
@@ -489,7 +489,7 @@
   // Sync. Since this is an existing profile, the local values shouldn't change.
   syncer::SyncDataList sync_data_list;
   sync_data_list.push_back(CreatePrefSyncData(
-      prefs::kLanguagePreferredLanguagesSyncable, base::Value("ru,fi")));
+      language::prefs::kPreferredLanguagesSyncable, base::Value("ru,fi")));
   sync_data_list.push_back(
       CreatePrefSyncData(prefs::kLanguagePreloadEnginesSyncable,
                          base::Value(ToInputMethodIds("xkb:ru::rus"))));
@@ -543,7 +543,7 @@
   // Create some tricky values to come from the server.
   syncer::SyncDataList sync_data_list;
   sync_data_list.push_back(
-      CreatePrefSyncData(prefs::kLanguagePreferredLanguagesSyncable,
+      CreatePrefSyncData(language::prefs::kPreferredLanguagesSyncable,
                          base::Value("ar,fi,es,de,ar")));
   sync_data_list.push_back(CreatePrefSyncData(
       prefs::kLanguagePreloadEnginesSyncable,
@@ -595,7 +595,7 @@
       ToInputMethodIds("xkb:jp::jpn"));
   syncer::SyncDataList sync_data_list;
   sync_data_list.push_back(
-      CreatePrefSyncData(prefs::kLanguagePreferredLanguagesSyncable,
+      CreatePrefSyncData(language::prefs::kPreferredLanguagesSyncable,
                          base::Value("klingon,en-US")));
   sync_data_list.push_back(CreatePrefSyncData(
       prefs::kLanguagePreloadEnginesSyncable, base::Value(preload_engines)));
@@ -635,7 +635,7 @@
       "xkb:ru::rus,xkb:xy::xyz," + ToInputMethodIds("xkb:jp::jpn"));
   syncer::SyncDataList sync_data_list;
   sync_data_list.push_back(CreatePrefSyncData(
-      prefs::kLanguagePreferredLanguagesSyncable, base::Value("en-US")));
+      language::prefs::kPreferredLanguagesSyncable, base::Value("en-US")));
   sync_data_list.push_back(CreatePrefSyncData(
       prefs::kLanguagePreloadEnginesSyncable, base::Value(preload_engines)));
   sync_data_list.push_back(CreatePrefSyncData(
diff --git a/chrome/browser/extensions/api/i18n/i18n_api.cc b/chrome/browser/extensions/api/i18n/i18n_api.cc
index b58649f2..fd5a25f 100644
--- a/chrome/browser/extensions/api/i18n/i18n_api.cc
+++ b/chrome/browser/extensions/api/i18n/i18n_api.cc
@@ -14,7 +14,7 @@
 #include "base/strings/string_split.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/i18n.h"
-#include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 
 namespace GetAcceptLanguages = extensions::api::i18n::GetAcceptLanguages;
@@ -29,19 +29,20 @@
 }
 
 ExtensionFunction::ResponseAction I18nGetAcceptLanguagesFunction::Run() {
-  std::string accept_languages = Profile::FromBrowserContext(browser_context())
-                                     ->GetPrefs()
-                                     ->GetString(prefs::kAcceptLanguages);
+  std::string accept_languages =
+      Profile::FromBrowserContext(browser_context())
+          ->GetPrefs()
+          ->GetString(language::prefs::kAcceptLanguages);
   // Currently, there are 2 ways to set browser's accept-languages: through UI
   // or directly modify the preference file. The accept-languages set through
-  // UI is guranteed to be valid, and the accept-languages string returned from
-  // profile()->GetPrefs()->GetString(prefs::kAcceptLanguages) is guranteed to
-  // be valid and well-formed, which means each accept-langauge is a valid
-  // code, and accept-languages are seperatd by "," without surrrounding
-  // spaces. But we do not do any validation (either the format or the validity
-  // of the language code) on accept-languages set through editing preference
-  // file directly. So, here, we're adding extra checks to be resistant to
-  // crashes caused by data corruption.
+  // UI is guaranteed to be valid, and the accept-languages string returned from
+  // profile()->GetPrefs()->GetString(language::prefs::kAcceptLanguages) is
+  // guaranteed to be valid and well-formed, which means each accept-language is
+  // a valid code, and accept-languages are separated by "," without
+  // surrrounding spaces. But we do not do any validation (either the format or
+  // the validity of the language code) on accept-languages set through editing
+  // preference file directly. So, here, we're adding extra checks to be
+  // resistant to crashes caused by data corruption.
   if (accept_languages.empty())
     return RespondNow(Error(kEmptyAcceptLanguagesError));
 
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
index 804e993..b19f25d 100644
--- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
+++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
@@ -33,6 +33,7 @@
 #include "chrome/common/extensions/api/language_settings_private.h"
 #include "chrome/common/pref_names.h"
 #include "components/language/core/browser/language_model_manager.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/language/core/common/locale_util.h"
 #include "components/spellcheck/common/spellcheck_common.h"
 #include "components/translate/core/browser/translate_download_manager.h"
@@ -108,7 +109,7 @@
     const std::unordered_set<std::string>& component_ime_set,
     PrefService* prefs) {
   std::vector<std::string> enabled_languages =
-      base::SplitString(prefs->GetString(prefs::kLanguagePreferredLanguages),
+      base::SplitString(prefs->GetString(language::prefs::kPreferredLanguages),
                         ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
 
   // Duplicate set for membership testing.
@@ -141,7 +142,7 @@
     PrefService* prefs) {
   std::vector<std::string> ime_list;
   std::string preferred_languages =
-      prefs->GetString(prefs::kLanguagePreferredLanguages);
+      prefs->GetString(language::prefs::kPreferredLanguages);
   std::vector<std::string> enabled_languages =
       base::SplitString(preferred_languages, ",", base::TRIM_WHITESPACE,
                         base::SPLIT_WANT_NONEMPTY);
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc
index 901ddc1..6ba4543 100644
--- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc
@@ -18,6 +18,7 @@
 #include "chrome/test/base/test_browser_window.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/crx_file/id_util.h"
+#include "components/language/core/browser/pref_names.h"
 #include "extensions/browser/event_router_factory.h"
 #include "extensions/browser/extension_prefs.h"
 
@@ -234,7 +235,8 @@
   TestInputMethodManager::Initialize(new TestInputMethodManager);
 
   // Initialize relevant prefs.
-  profile()->GetPrefs()->SetString(prefs::kLanguagePreferredLanguages, "en-US");
+  profile()->GetPrefs()->SetString(language::prefs::kPreferredLanguages,
+                                   "en-US");
   StringPrefMember enabled_imes;
   enabled_imes.Init(prefs::kLanguageEnabledImes, profile()->GetPrefs());
   StringPrefMember preload_engines;
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
index ad9590a9..e282d19 100644
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -398,7 +398,7 @@
   // Misc.
   (*s_whitelist)[::prefs::kUse24HourClock] =
       settings_api::PrefType::PREF_TYPE_BOOLEAN;
-  (*s_whitelist)[::prefs::kLanguagePreferredLanguages] =
+  (*s_whitelist)[::language::prefs::kPreferredLanguages] =
       settings_api::PrefType::PREF_TYPE_STRING;
   (*s_whitelist)[ash::prefs::kTapDraggingEnabled] =
       settings_api::PrefType::PREF_TYPE_BOOLEAN;
@@ -520,7 +520,7 @@
       settings_api::PrefType::PREF_TYPE_BOOLEAN;
 
 #else
-  (*s_whitelist)[::prefs::kAcceptLanguages] =
+  (*s_whitelist)[::language::prefs::kAcceptLanguages] =
       settings_api::PrefType::PREF_TYPE_STRING;
 
   // System settings.
diff --git a/chrome/browser/interstitials/security_interstitial_page_test_utils.cc b/chrome/browser/interstitials/security_interstitial_page_test_utils.cc
index 0afee82..dc6035e 100644
--- a/chrome/browser/interstitials/security_interstitial_page_test_utils.cc
+++ b/chrome/browser/interstitials/security_interstitial_page_test_utils.cc
@@ -10,7 +10,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/security_interstitials/content/security_interstitial_page.h"
 #include "components/security_interstitials/core/controller_client.h"
@@ -42,7 +42,7 @@
 
 void SecurityInterstitialIDNTest::SetUpOnMainThread() {
   // Clear AcceptLanguages to force punycode decoding.
-  browser()->profile()->GetPrefs()->SetString(prefs::kAcceptLanguages,
+  browser()->profile()->GetPrefs()->SetString(language::prefs::kAcceptLanguages,
                                               std::string());
 }
 
diff --git a/chrome/browser/language/language_model_manager_factory.cc b/chrome/browser/language/language_model_manager_factory.cc
index 258754c..8bd6e828 100644
--- a/chrome/browser/language/language_model_manager_factory.cc
+++ b/chrome/browser/language/language_model_manager_factory.cc
@@ -10,7 +10,6 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/common/pref_names.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/language/content/browser/geo_language_model.h"
@@ -37,7 +36,8 @@
         language::LanguageModelManager::ModelType::HEURISTIC,
         std::make_unique<language::HeuristicLanguageModel>(
             profile->GetPrefs(), g_browser_process->GetApplicationLocale(),
-            prefs::kAcceptLanguages, language::prefs::kUserLanguageProfile));
+            language::prefs::kAcceptLanguages,
+            language::prefs::kUserLanguageProfile));
   }
 
   if (override_model_mode == language::OverrideLanguageModel::GEO) {
@@ -51,7 +51,7 @@
         language::LanguageModelManager::ModelType::BASELINE,
         std::make_unique<language::BaselineLanguageModel>(
             profile->GetPrefs(), g_browser_process->GetApplicationLocale(),
-            prefs::kAcceptLanguages));
+            language::prefs::kAcceptLanguages));
   }
 
   // Set the primary Language Model to use based on the state of experiments.
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc
index 9467f98..cf0a9c3c 100644
--- a/chrome/browser/net/errorpage_browsertest.cc
+++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -40,6 +40,7 @@
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/error_page/common/error_page_switches.h"
 #include "components/google/core/common/google_util.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/mock_configuration_policy_provider.h"
 #include "components/policy/core/common/policy_map.h"
@@ -1537,8 +1538,8 @@
   // InProcessBrowserTest:
   void SetUpOnMainThread() override {
     // Clear AcceptLanguages to force punycode decoding.
-    browser()->profile()->GetPrefs()->SetString(prefs::kAcceptLanguages,
-                                                std::string());
+    browser()->profile()->GetPrefs()->SetString(
+        language::prefs::kAcceptLanguages, std::string());
   }
 };
 
diff --git a/chrome/browser/net/network_context_configuration_browsertest.cc b/chrome/browser/net/network_context_configuration_browsertest.cc
index a372021..f3f07517 100644
--- a/chrome/browser/net/network_context_configuration_browsertest.cc
+++ b/chrome/browser/net/network_context_configuration_browsertest.cc
@@ -36,6 +36,7 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
 #include "components/content_settings/core/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/network_session_configurator/common/network_switches.h"
 #include "components/prefs/pref_service.h"
 #include "components/proxy_config/proxy_config_dictionary.h"
@@ -1230,7 +1231,8 @@
 
   // Now change the profile a different language, and see if the headers
   // get updated.
-  browser()->profile()->GetPrefs()->SetString(prefs::kAcceptLanguages, "uk");
+  browser()->profile()->GetPrefs()->SetString(language::prefs::kAcceptLanguages,
+                                              "uk");
   FlushNetworkInterface();
   std::string accept_language2, user_agent2;
   ASSERT_TRUE(FetchHeaderEcho("accept-language", &accept_language2));
@@ -1239,7 +1241,7 @@
   EXPECT_EQ(::GetUserAgent(), user_agent2);
 
   // Try a more complicated one, with multiple languages.
-  browser()->profile()->GetPrefs()->SetString(prefs::kAcceptLanguages,
+  browser()->profile()->GetPrefs()->SetString(language::prefs::kAcceptLanguages,
                                               "uk, en_US");
   FlushNetworkInterface();
   std::string accept_language3, user_agent3;
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc
index b27e48f..1320186 100644
--- a/chrome/browser/net/profile_network_context_service.cc
+++ b/chrome/browser/net/profile_network_context_service.cc
@@ -29,6 +29,7 @@
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/pref_names.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
@@ -101,7 +102,7 @@
       base::Bind(&ProfileNetworkContextService::DisableQuicIfNotAllowed,
                  base::Unretained(this)));
   pref_accept_language_.Init(
-      prefs::kAcceptLanguages, profile_prefs,
+      language::prefs::kAcceptLanguages, profile_prefs,
       base::BindRepeating(&ProfileNetworkContextService::UpdateAcceptLanguage,
                           base::Unretained(this)));
   enable_referrers_.Init(
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index 9686b45..7f675c0f 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -1274,7 +1274,7 @@
 
   // Set locale and preferred languages to "en-US".
   prefs->SetString(language::prefs::kApplicationLocale, "en-US");
-  prefs->SetString(prefs::kLanguagePreferredLanguages, "en-US");
+  prefs->SetString(language::prefs::kPreferredLanguages, "en-US");
 
   // Set policy to only allow "fr" as locale.
   std::unique_ptr<base::DictionaryValue> policy =
@@ -1314,7 +1314,7 @@
 
   // Verifiy that the enforced locale is added into the list of
   // preferred languages.
-  EXPECT_EQ("fr", prefs->GetString(prefs::kLanguagePreferredLanguages));
+  EXPECT_EQ("fr", prefs->GetString(language::prefs::kPreferredLanguages));
 }
 
 IN_PROC_BROWSER_TEST_F(LoginPolicyTestBase, AllowedInputMethods) {
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index c6f5e5a..bdc0a64c8 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -91,6 +91,7 @@
 #include "components/invalidation/impl/invalidator_registrar_with_memory.h"
 #include "components/invalidation/impl/per_user_topic_registration_manager.h"
 #include "components/language/content/browser/geo_language_provider.h"
+#include "components/language/core/browser/language_prefs.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/network_time/network_time_tracker.h"
 #include "components/ntp_snippets/content_suggestions_service.h"
@@ -593,6 +594,7 @@
   image_fetcher::ImageCache::RegisterProfilePrefs(registry);
   ImportantSitesUtil::RegisterProfilePrefs(registry);
   IncognitoModePrefs::RegisterProfilePrefs(registry);
+  language::RegisterProfilePrefs(registry);
   MediaCaptureDevicesDispatcher::RegisterProfilePrefs(registry);
   MediaDeviceIDSalt::RegisterProfilePrefs(registry);
   MediaEngagementService::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/renderer_context_menu/spelling_options_submenu_observer_browsertest.cc b/chrome/browser/renderer_context_menu/spelling_options_submenu_observer_browsertest.cc
index 5bd6a68..5ebfbbb 100644
--- a/chrome/browser/renderer_context_menu/spelling_options_submenu_observer_browsertest.cc
+++ b/chrome/browser/renderer_context_menu/spelling_options_submenu_observer_browsertest.cc
@@ -9,8 +9,8 @@
 #include "base/values.h"
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/renderer_context_menu/mock_render_view_context_menu.h"
-#include "chrome/common/pref_names.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/spellcheck/browser/pref_names.h"
 #include "content/public/common/context_menu_params.h"
@@ -45,7 +45,8 @@
                 const std::vector<std::string>& dictionaries) {
     menu()->GetPrefs()->SetBoolean(spellcheck::prefs::kSpellCheckEnable,
                                    enable_spellcheck);
-    menu()->GetPrefs()->SetString(prefs::kAcceptLanguages, accept_languages);
+    menu()->GetPrefs()->SetString(language::prefs::kAcceptLanguages,
+                                  accept_languages);
     base::ListValue dictionaries_value;
     dictionaries_value.AppendStrings(dictionaries);
     menu()->GetPrefs()->Set(spellcheck::prefs::kSpellCheckDictionaries,
diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/renderer_preferences_util.cc
index a87e9b67..f3fc761c 100644
--- a/chrome/browser/renderer_preferences_util.cc
+++ b/chrome/browser/renderer_preferences_util.cc
@@ -12,6 +12,7 @@
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/common/renderer_preferences_util.h"
 #include "content/public/common/webrtc_ip_handling_policy.h"
@@ -79,7 +80,8 @@
 void UpdateFromSystemSettings(blink::mojom::RendererPreferences* prefs,
                               Profile* profile) {
   const PrefService* pref_service = profile->GetPrefs();
-  prefs->accept_languages = pref_service->GetString(prefs::kAcceptLanguages);
+  prefs->accept_languages =
+      pref_service->GetString(language::prefs::kAcceptLanguages);
   prefs->enable_referrers = pref_service->GetBoolean(prefs::kEnableReferrers);
   prefs->enable_do_not_track =
       pref_service->GetBoolean(prefs::kEnableDoNotTrack);
diff --git a/chrome/browser/spellchecker/spellcheck_service.cc b/chrome/browser/spellchecker/spellcheck_service.cc
index 4c8664cf..d92b0191 100644
--- a/chrome/browser/spellchecker/spellcheck_service.cc
+++ b/chrome/browser/spellchecker/spellcheck_service.cc
@@ -21,6 +21,7 @@
 #include "chrome/browser/spellchecker/spellcheck_hunspell_dictionary.h"
 #include "chrome/common/constants.mojom.h"
 #include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_member.h"
 #include "components/prefs/pref_service.h"
 #include "components/spellcheck/browser/pref_names.h"
@@ -101,7 +102,7 @@
       base::BindRepeating(&SpellcheckService::OnUseSpellingServiceChanged,
                           base::Unretained(this)));
   pref_change_registrar_.Add(
-      prefs::kAcceptLanguages,
+      language::prefs::kAcceptLanguages,
       base::BindRepeating(&SpellcheckService::OnAcceptLanguagesChanged,
                           base::Unretained(this)));
   pref_change_registrar_.Add(
@@ -144,8 +145,8 @@
 
   dictionaries->clear();
   std::vector<std::string> accept_languages =
-      base::SplitString(prefs->GetString(prefs::kAcceptLanguages), ",",
-                        base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+      base::SplitString(prefs->GetString(language::prefs::kAcceptLanguages),
+                        ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   for (const auto& accept_language : accept_languages) {
     Dictionary dictionary;
     dictionary.language =
@@ -369,8 +370,8 @@
 void SpellcheckService::OnAcceptLanguagesChanged() {
   PrefService* prefs = user_prefs::UserPrefs::Get(context_);
   std::vector<std::string> accept_languages =
-      base::SplitString(prefs->GetString(prefs::kAcceptLanguages), ",",
-                        base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+      base::SplitString(prefs->GetString(language::prefs::kAcceptLanguages),
+                        ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   std::transform(accept_languages.begin(), accept_languages.end(),
                  accept_languages.begin(),
                  &spellcheck::GetCorrespondingSpellCheckLanguage);
diff --git a/chrome/browser/spellchecker/spellcheck_service_browsertest.cc b/chrome/browser/spellchecker/spellcheck_service_browsertest.cc
index 638fe31..c73a908 100644
--- a/chrome/browser/spellchecker/spellcheck_service_browsertest.cc
+++ b/chrome/browser/spellchecker/spellcheck_service_browsertest.cc
@@ -26,8 +26,8 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/constants.mojom.h"
-#include "chrome/common/pref_names.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/spellcheck/browser/pref_names.h"
 #include "components/spellcheck/common/spellcheck.mojom.h"
@@ -140,7 +140,7 @@
   }
 
   void SetAcceptLanguages(const std::string& accept_languages) {
-    prefs_->SetString(prefs::kAcceptLanguages, accept_languages);
+    prefs_->SetString(language::prefs::kAcceptLanguages, accept_languages);
   }
 
   bool GetEnableSpellcheckState(bool initial_state = false) {
diff --git a/chrome/browser/spellchecker/spellcheck_service_unittest.cc b/chrome/browser/spellchecker/spellcheck_service_unittest.cc
index bccc1d5f..2e7e090 100644
--- a/chrome/browser/spellchecker/spellcheck_service_unittest.cc
+++ b/chrome/browser/spellchecker/spellcheck_service_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/supports_user_data.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/spellcheck/browser/pref_names.h"
@@ -70,7 +71,7 @@
 }
 
 std::ostream& operator<<(std::ostream& out, const TestCase& test_case) {
-  out << "prefs::kAcceptLanguages=[" << test_case.accept_languages
+  out << "language::prefs::kAcceptLanguages=[" << test_case.accept_languages
       << "], prefs::kSpellCheckDictionaries=["
       << base::JoinString(test_case.spellcheck_dictionaries, ",")
       << "], expected=[";
@@ -91,7 +92,7 @@
   void SetUp() override {
     prefs()->registry()->RegisterListPref(
         spellcheck::prefs::kSpellCheckDictionaries);
-    prefs()->registry()->RegisterStringPref(prefs::kAcceptLanguages,
+    prefs()->registry()->RegisterStringPref(language::prefs::kAcceptLanguages,
                                             std::string());
   }
 
@@ -124,7 +125,8 @@
         TestCase("hu-HU,hr-HR", "hr", "hu,hr", "hr")));
 
 TEST_P(SpellcheckServiceUnitTest, GetDictionaries) {
-  prefs()->SetString(prefs::kAcceptLanguages, GetParam().accept_languages);
+  prefs()->SetString(language::prefs::kAcceptLanguages,
+                     GetParam().accept_languages);
   base::ListValue spellcheck_dictionaries;
   spellcheck_dictionaries.AppendStrings(GetParam().spellcheck_dictionaries);
   prefs()->Set(spellcheck::prefs::kSpellCheckDictionaries,
diff --git a/chrome/browser/translate/chrome_translate_client.cc b/chrome/browser/translate/chrome_translate_client.cc
index 9ebb8f5..3ede756 100644
--- a/chrome/browser/translate/chrome_translate_client.cc
+++ b/chrome/browser/translate/chrome_translate_client.cc
@@ -33,6 +33,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/theme_resources.h"
 #include "components/language/core/browser/language_model_manager.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/sync/driver/sync_driver_switches.h"
 #include "components/sync/protocol/user_event_specifics.pb.h"
@@ -146,12 +147,12 @@
 std::unique_ptr<translate::TranslatePrefs>
 ChromeTranslateClient::CreateTranslatePrefs(PrefService* prefs) {
 #if defined(OS_CHROMEOS)
-  const char* preferred_languages_prefs = prefs::kLanguagePreferredLanguages;
+  const char* preferred_languages_prefs = language::prefs::kPreferredLanguages;
 #else
   const char* preferred_languages_prefs = NULL;
 #endif
   std::unique_ptr<translate::TranslatePrefs> translate_prefs(
-      new translate::TranslatePrefs(prefs, prefs::kAcceptLanguages,
+      new translate::TranslatePrefs(prefs, language::prefs::kAcceptLanguages,
                                     preferred_languages_prefs));
 
   // We need to obtain the country here, since it comes from VariationsService.
diff --git a/chrome/browser/translate/translate_accept_languages_factory.cc b/chrome/browser/translate/translate_accept_languages_factory.cc
index 9e42bbf..cc469e0 100644
--- a/chrome/browser/translate/translate_accept_languages_factory.cc
+++ b/chrome/browser/translate/translate_accept_languages_factory.cc
@@ -7,8 +7,8 @@
 #include "base/macros.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/common/pref_names.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/translate/core/browser/translate_accept_languages.h"
 
@@ -36,8 +36,8 @@
 KeyedService* TranslateAcceptLanguagesFactory::BuildServiceInstanceFor(
     content::BrowserContext* browser_context) const {
   Profile* profile = Profile::FromBrowserContext(browser_context);
-  return new translate::TranslateAcceptLanguages(profile->GetPrefs(),
-                                                 prefs::kAcceptLanguages);
+  return new translate::TranslateAcceptLanguages(
+      profile->GetPrefs(), language::prefs::kAcceptLanguages);
 }
 
 content::BrowserContext*
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
index 17e696cd..10f5875 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
@@ -613,7 +613,7 @@
   // conflict with another item in the list, then these will be dedupped (the
   // first one is taken) in ARC.
   *out_preferred_languages =
-      profile->GetPrefs()->GetString(::prefs::kLanguagePreferredLanguages);
+      profile->GetPrefs()->GetString(::language::prefs::kPreferredLanguages);
 }
 
 Intent::Intent() = default;
diff --git a/chrome/browser/ui/prefs/pref_watcher.cc b/chrome/browser/ui/prefs/pref_watcher.cc
index ee4d7ff..0438fc9 100644
--- a/chrome/browser/ui/prefs/pref_watcher.cc
+++ b/chrome/browser/ui/prefs/pref_watcher.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/ui/prefs/prefs_tab_helper.h"
 #include "chrome/common/pref_names.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "components/language/core/browser/pref_names.h"
 #include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
 
 namespace {
@@ -56,7 +57,8 @@
 
   base::RepeatingClosure renderer_callback = base::BindRepeating(
       &PrefWatcher::UpdateRendererPreferences, base::Unretained(this));
-  pref_change_registrar_.Add(prefs::kAcceptLanguages, renderer_callback);
+  pref_change_registrar_.Add(language::prefs::kAcceptLanguages,
+                             renderer_callback);
   pref_change_registrar_.Add(prefs::kEnableDoNotTrack, renderer_callback);
   pref_change_registrar_.Add(prefs::kEnableReferrers, renderer_callback);
   pref_change_registrar_.Add(prefs::kEnableEncryptedMedia, renderer_callback);
diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/prefs/prefs_tab_helper.cc
index 671977db..4f92d7b9 100644
--- a/chrome/browser/ui/prefs/prefs_tab_helper.cc
+++ b/chrome/browser/ui/prefs/prefs_tab_helper.cc
@@ -29,6 +29,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/pref_names_util.h"
 #include "chrome/grit/platform_locale_settings.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/overlay_user_pref_store.h"
 #include "components/prefs/pref_service.h"
@@ -359,10 +360,6 @@
                                 pref_defaults.password_echo_enabled);
 #endif
   registry->RegisterStringPref(
-      prefs::kAcceptLanguages,
-      l10n_util::GetStringUTF8(IDS_ACCEPT_LANGUAGES),
-      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-  registry->RegisterStringPref(
       prefs::kDefaultCharset,
       l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING),
       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
diff --git a/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc b/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc
index 8b401a5..dbe9ff2 100644
--- a/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc
+++ b/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc
@@ -11,7 +11,7 @@
 #include "chrome/browser/android/explore_sites/explore_sites_feature.h"
 #include "chrome/browser/android/explore_sites/url_util.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 
 namespace explore_sites {
@@ -68,7 +68,7 @@
     ForceNetworkRequestCallback callback) {
   explore_sites_service_->UpdateCatalogFromNetwork(
       true /* is_immediate_fetch */,
-      profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
+      profile_->GetPrefs()->GetString(language::prefs::kAcceptLanguages),
       std::move(callback));
 }
 
diff --git a/chrome/browser/ui/webui/translate_internals/translate_internals_handler.cc b/chrome/browser/ui/webui/translate_internals/translate_internals_handler.cc
index dcd092b..a6b21762 100644
--- a/chrome/browser/ui/webui/translate_internals/translate_internals_handler.cc
+++ b/chrome/browser/ui/webui/translate_internals/translate_internals_handler.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/translate/chrome_translate_client.h"
 #include "chrome/browser/translate/translate_service.h"
 #include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "components/translate/core/browser/translate_error_details.h"
@@ -225,7 +226,7 @@
       translate::TranslatePrefs::kPrefTranslateAcceptedCount,
       translate::TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage,
       translate::TranslatePrefs::kPrefTranslateTooOftenDeniedForLanguage,
-      prefs::kAcceptLanguages,
+      language::prefs::kAcceptLanguages,
   };
   for (const char* key : keys) {
     const PrefService::Preference* pref = prefs->FindPreference(key);
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 52287d5..7b061bb 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -397,6 +397,7 @@
 repack("components_tests_pak") {
   sources = [
     "$root_gen_dir/components/components_resources.pak",
+    "$root_gen_dir/components/strings/components_locale_settings_en-US.pak",
     "$root_gen_dir/components/strings/components_strings_en-US.pak",
   ]
 
diff --git a/components/language/DEPS b/components/language/DEPS
index 6317642..fcb6de9 100644
--- a/components/language/DEPS
+++ b/components/language/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "+components/pref_registry",
   "+components/prefs",
+  "+components/strings/grit/components_locale_settings.h",
   "+third_party/s2cellid",
 
   "-components/language/content",
diff --git a/components/language/core/browser/BUILD.gn b/components/language/core/browser/BUILD.gn
index 02acc883..bd59d2b 100644
--- a/components/language/core/browser/BUILD.gn
+++ b/components/language/core/browser/BUILD.gn
@@ -12,6 +12,8 @@
     "language_model.h",
     "language_model_manager.cc",
     "language_model_manager.h",
+    "language_prefs.cc",
+    "language_prefs.h",
     "locale_util.cc",
     "locale_util.h",
     "pref_names.cc",
@@ -25,6 +27,7 @@
     "//components/keyed_service/core",
     "//components/pref_registry",
     "//components/prefs",
+    "//components/strings",
     "//ui/base",
   ]
 }
diff --git a/components/language/core/browser/language_prefs.cc b/components/language/core/browser/language_prefs.cc
new file mode 100644
index 0000000..bc2dc11
--- /dev/null
+++ b/components/language/core/browser/language_prefs.cc
@@ -0,0 +1,29 @@
+// Copyright 2019 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 "components/language/core/browser/language_prefs.h"
+
+#include "components/language/core/browser/pref_names.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "components/strings/grit/components_locale_settings.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace language {
+
+const char kFallbackInputMethodLocale[] = "en-US";
+
+void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+  registry->RegisterStringPref(language::prefs::kAcceptLanguages,
+                               l10n_util::GetStringUTF8(IDS_ACCEPT_LANGUAGES),
+                               user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+#if defined(OS_CHROMEOS)
+  registry->RegisterStringPref(language::prefs::kPreferredLanguages,
+                               kFallbackInputMethodLocale);
+
+  registry->RegisterStringPref(language::prefs::kPreferredLanguagesSyncable, "",
+                               user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+#endif
+}
+
+}  // namespace language
diff --git a/components/language/core/browser/language_prefs.h b/components/language/core/browser/language_prefs.h
new file mode 100644
index 0000000..296ed932
--- /dev/null
+++ b/components/language/core/browser/language_prefs.h
@@ -0,0 +1,20 @@
+// Copyright 2019 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.
+
+#ifndef COMPONENTS_LANGUAGE_CORE_BROWSER_LANGUAGE_PREFS_H_
+#define COMPONENTS_LANGUAGE_CORE_BROWSER_LANGUAGE_PREFS_H_
+
+namespace user_prefs {
+class PrefRegistrySyncable;
+}
+
+namespace language {
+
+extern const char kFallbackInputMethodLocale[];
+
+void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
+
+}  // namespace language
+
+#endif  // COMPONENTS_LANGUAGE_CORE_BROWSER_LANGUAGE_PREFS_H_
diff --git a/components/language/core/browser/pref_names.cc b/components/language/core/browser/pref_names.cc
index 875577a..f2c821ec 100644
--- a/components/language/core/browser/pref_names.cc
+++ b/components/language/core/browser/pref_names.cc
@@ -7,6 +7,16 @@
 namespace language {
 namespace prefs {
 
+// The value to use for Accept-Languages HTTP header when making an HTTP
+// request.
+const char kAcceptLanguages[] = "intl.accept_languages";
+
+// A string pref (comma-separated list) set to the preferred language IDs
+// (ex. "en-US,fr,ko").
+const char kPreferredLanguages[] = "settings.language.preferred_languages";
+const char kPreferredLanguagesSyncable[] =
+    "settings.language.preferred_languages_syncable";
+
 // The JSON representation of the user's language profile. Used as an input to
 // the user language model (i.e. for determining which languages a user
 // understands).
diff --git a/components/language/core/browser/pref_names.h b/components/language/core/browser/pref_names.h
index 56923e2..a15a8b9 100644
--- a/components/language/core/browser/pref_names.h
+++ b/components/language/core/browser/pref_names.h
@@ -8,7 +8,11 @@
 namespace language {
 namespace prefs {
 
-// TODO(martis): Add accept language preference here.
+extern const char kAcceptLanguages[];
+
+extern const char kPreferredLanguages[];
+extern const char kPreferredLanguagesSyncable[];
+
 extern const char kUserLanguageProfile[];
 
 // The application locale.