Hi Firefox devs!

We just landed the final change that culminates the 3 month long major refactor 
of how Gecko handles language selection [0] (pending autoland->central).

We now have a single new API - mozilla::intl::LocaleService [1] (and 
mozILocaleService [2]) - which centralizes all operations related to things 
like asking for languages that the user requested, which language resources are 
available and which languages have been negotiated for the app to use.
Also, all events related to those operations are now distributed from the new 
API.

On top of that, we gained an additional helper API for retrieving 
Internationalization-related infromation from the operating system - 
mozilla::intl::OSPreferences [3] (and mozIOSPreferences [4]).


Changes
=======

We migrated all the code in mozilla-central to use the new code [5] for you, 
but if your work uses those areas, please make sure to take a look at those 
APIs and start using them in your code.
In particular, please use `LocaleService::getAppLocalesAs(BCP47|LangTags)` for 
all code that wants to follow the current UI language, and use LocaleService's 
`getRequestedLocales` and `setRequestedLocales` instead of manipulating 
`general.useragent.locale` pref directly [6].

JS Context and mozIntl APIs now use the current browser UI language selection 
instead of OS locales.

That change also marks the beginning of deprecation of the nsILocaleService, 
nsLocaleSerivice, nsLocale and related APIs [7].

Lastly, we've moved away from ChromeRegistry as the central place for 
negotiating language selection for the product (LocaleService takes over that 
role), which means that in almost all cases you should consult LocaleService, 
not ChromeRegistry.


What's Next
===========

This last step opens up the ability for us to introduce a new localization 
resources registry [8] which will slowly take over that role from 
ChromeRegistry.

There are still a couple minor features we'll be adding to LocaleService over 
the next month [9], but generally, the API is complete and ready to handle 
centralized language management in Gecko.

Beyond cleaning up 20+ year old code, unifying the behavior and enabling the 
new registry, those changes put us on a path to more flexible multi-lingual 
behavior aligned with the modern Web.

>From here, we plan to make Gecko be able to:
 - decouple release of the product from the releases of language resources
 - handle localization of HTML/WebComponents/WebExtensions/XUL/XBL/JS using a 
single localization API
 - better align between language resources and Intl APIs (date/number 
formatting etc.)
 - deliver language resource updates on the fly
 - gain control over at what point in the UI loading we inject strings
 - change languages on fly
 - first step on the path to the end of .DTD and .properties
 - handle error scenarios better (death to the Yellow Screen of Death!)

Team responsible for the refactor: :gandalf, :jfkthame, :pike, and :stas.

Greetings,
zb.

[0] https://bugzilla.mozilla.org/show_bug.cgi?id=1347306
[1] http://searchfox.org/mozilla-central/source/intl/locale/LocaleService.h
[2] 
http://searchfox.org/mozilla-central/source/intl/locale/mozILocaleService.idl
[3] http://searchfox.org/mozilla-central/source/intl/locale/OSPreferences.h
[4] 
http://searchfox.org/mozilla-central/source/intl/locale/mozIOSPreferences.idl
[5] https://bugzilla.mozilla.org/show_bug.cgi?id=1334772
[6] https://bugzilla.mozilla.org/show_bug.cgi?id=1334772
[7] https://bugzilla.mozilla.org/show_bug.cgi?id=1350102
[8] https://bugzilla.mozilla.org/show_bug.cgi?id=1333980
[9] https://bugzilla.mozilla.org/show_bug.cgi?id=1346877
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to