Uses the first of the accept-languages as the system language for blink (#2311)
and fix the selection in the UI for the browser language Co-authored-by: Carmelo Messina <uazo@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
From: uazo <uazo@users.noreply.github.com>
|
||||
Date: Fri, 2 Sep 2022 07:44:58 +0000
|
||||
Subject: Override Navigator Language
|
||||
|
||||
Uses the first of the accept-languages as the system language for blink
|
||||
and fix the selection in the UI for the browser language
|
||||
---
|
||||
.../browser/language/AppLocaleUtils.java | 20 +++++++++++++++++++
|
||||
.../AppLanguagePreferenceDelegate.java | 8 ++++++++
|
||||
.../renderer_host/render_process_host_impl.cc | 6 +++++-
|
||||
3 files changed, 33 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
|
||||
--- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
|
||||
+++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java
|
||||
@@ -35,6 +35,10 @@ import java.util.Locale;
|
||||
public class AppLocaleUtils {
|
||||
private AppLocaleUtils(){};
|
||||
|
||||
+ public interface InstallListener {
|
||||
+ void onComplete(boolean success);
|
||||
+ }
|
||||
+
|
||||
// Value of AppLocale preference when the system language is used.
|
||||
public static final String APP_LOCALE_USE_SYSTEM_LANGUAGE = null;
|
||||
|
||||
@@ -99,6 +103,22 @@ public class AppLocaleUtils {
|
||||
return locale.toLanguageTag();
|
||||
}
|
||||
|
||||
+ public static void setAppLanguagePref(
|
||||
+ String languageName, InstallListener listener) {
|
||||
+ InstallListener wrappedListener = (success) -> {
|
||||
+ if (success) {
|
||||
+ if (shouldUseSystemManagedLocale()) {
|
||||
+ setSystemManagedAppLanguage(languageName);
|
||||
+ } else {
|
||||
+ SharedPreferencesManager.getInstance().writeString(
|
||||
+ ChromePreferenceKeys.APPLICATION_OVERRIDE_LANGUAGE, languageName);
|
||||
+ }
|
||||
+ }
|
||||
+ listener.onComplete(success);
|
||||
+ };
|
||||
+ wrappedListener.onComplete(true);
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Gets the first original system locale from {@link LocaleManager}. This is the language that
|
||||
* Chrome would use if there was no override set. If there are no possible UI languages en-US is
|
||||
diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/AppLanguagePreferenceDelegate.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/AppLanguagePreferenceDelegate.java
|
||||
--- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/AppLanguagePreferenceDelegate.java
|
||||
+++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/AppLanguagePreferenceDelegate.java
|
||||
@@ -87,6 +87,14 @@ public class AppLanguagePreferenceDelegate {
|
||||
|
||||
// Disable preference so a second downloaded cannot be started while one is in progress.
|
||||
mPreference.setEnabled(false);
|
||||
+
|
||||
+ AppLocaleUtils.setAppLanguagePref(code, (success) -> {
|
||||
+ if (success) {
|
||||
+ languageSplitDownloadComplete();
|
||||
+ } else {
|
||||
+ languageSplitDownloadFailed();
|
||||
+ }
|
||||
+ });
|
||||
}
|
||||
|
||||
/**
|
||||
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
|
||||
--- a/content/browser/renderer_host/render_process_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/render_process_host_impl.cc
|
||||
@@ -68,6 +68,7 @@
|
||||
#include "cc/base/switches.h"
|
||||
#include "components/discardable_memory/public/mojom/discardable_shared_memory_manager.mojom.h"
|
||||
#include "components/discardable_memory/service/discardable_shared_memory_manager.h"
|
||||
+#include "components/language/core/browser/language_prefs.h"
|
||||
#include "components/metrics/single_sample_metrics.h"
|
||||
#include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h"
|
||||
#include "components/services/storage/public/cpp/buckets/bucket_id.h"
|
||||
@@ -3152,8 +3153,11 @@ void RenderProcessHostImpl::AppendRendererCommandLine(
|
||||
PropagateBrowserCommandLineToRenderer(browser_command_line, command_line);
|
||||
|
||||
// Pass on the browser locale.
|
||||
- const std::string locale =
|
||||
+ std::string locale =
|
||||
GetContentClient()->browser()->GetApplicationLocale();
|
||||
+ const std::string accept_langs = GetContentClient()->browser()->GetAcceptLangs(browser_context_);
|
||||
+ if (!accept_langs.empty())
|
||||
+ locale = language::GetFirstLanguage(accept_langs);
|
||||
command_line->AppendSwitchASCII(switches::kLang, locale);
|
||||
|
||||
// A non-empty RendererCmdPrefix implies that Zygote is disabled.
|
||||
--
|
||||
2.25.1
|
||||
Reference in New Issue
Block a user