From 87d3ef70eb660d4e363b0045b8b618e2726817fa Mon Sep 17 00:00:00 2001 From: uazo <29201891+uazo@users.noreply.github.com> Date: Tue, 27 Sep 2022 23:37:41 +0200 Subject: [PATCH] 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 --- .../patches/Override-Navigator-Language.patch | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 build/patches/Override-Navigator-Language.patch diff --git a/build/patches/Override-Navigator-Language.patch b/build/patches/Override-Navigator-Language.patch new file mode 100644 index 00000000..7d92b87b --- /dev/null +++ b/build/patches/Override-Navigator-Language.patch @@ -0,0 +1,93 @@ +From: uazo +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