[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-bugs] #26018 [Applications/Tor Browser]: intl.accept_languages changes when the user changes their OS language
#26018: intl.accept_languages changes when the user changes their OS language
------------------------------------------+------------------------
Reporter: igt0 | Owner: tbb-team
Type: defect | Status: new
Priority: Medium | Milestone:
Component: Applications/Tor Browser | Version:
Severity: Normal | Keywords: tbb-mobile
Actual Points: | Parent ID:
Points: | Reviewer:
Sponsor: |
------------------------------------------+------------------------
When the OS language changes, FF mobile updates the intl.locale.os and
intl.accept_languages.
{{{
case "Locale:OS": {
// We know the system locale. We use this for generating Accept-
Language headers.
let languageTag = data.languageTag;
console.log("Locale:OS: " + languageTag);
let currentOSLocale = this.getOSLocalePref();
if (currentOSLocale == languageTag) {
break;
}
console.log("New OS locale.");
// Ensure that this choice is immediately persisted, because
// Gecko won't be told again if it forgets.
Services.prefs.setCharPref("intl.locale.os", languageTag);
Services.prefs.savePrefFile(null);
let appLocale = this.getUALocalePref();
this.computeAcceptLanguages(languageTag, appLocale);
// Rebuild strings, in case we're mirroring OS locale.
Strings.flush();
break;
}
}}}
the method *computeAcceptLanguages* is the one responsible to keep the
intl.accept_languages up to date.
{{{
computeAcceptLanguages(osLocale, appLocale) {
let defaultBranch = Services.prefs.getDefaultBranch(null);
let defaultAccept =
defaultBranch.getComplexValue("intl.accept_languages",
Ci.nsIPrefLocalizedString).data;
console.log("Default intl.accept_languages = " + defaultAccept);
// A guard for potential breakage. Bug 438031.
// This should not be necessary, because we're reading from the
default branch,
// but better safe than sorry.
if (defaultAccept && defaultAccept.startsWith("chrome://")) {
defaultAccept = null;
} else {
// Ensure lowercase everywhere so we can compare.
defaultAccept = defaultAccept.toLowerCase();
}
if (appLocale) {
appLocale = appLocale.toLowerCase();
}
if (osLocale) {
osLocale = osLocale.toLowerCase();
}
// Eliminate values if they're present in the default.
let chosen;
if (defaultAccept) {
// intl.accept_languages is a comma-separated list, with no q-value
params. Those
// are added when the header is generated.
chosen = defaultAccept.split(",")
.map((x) => x.trim())
.filter((x) => (x != appLocale && x !=
osLocale));
} else {
chosen = [];
}
if (osLocale) {
chosen.unshift(osLocale);
}
if (appLocale && appLocale != osLocale) {
chosen.unshift(appLocale);
}
let result = chosen.join(",");
console.log("Setting intl.accept_languages to " + result);
this.setLocalizedPref("intl.accept_languages", result);
},
}}}
--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/26018>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
_______________________________________________
tor-bugs mailing list
tor-bugs@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-bugs