зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1552714 - Refactor constructors of mozILocalization and DOMLocalization to handle custom generateMessages. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D33198 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
23627f4456
Коммит
f01344c760
|
@ -19,6 +19,8 @@ dictionary L10nKey {
|
|||
object? args = null;
|
||||
};
|
||||
|
||||
callback GenerateMessages = Promise<any> (sequence<DOMString> aAppLocales, sequence<DOMString> aResourceIds);
|
||||
|
||||
/**
|
||||
* DOMLocalization is an extension of the Fluent Localization API.
|
||||
*
|
||||
|
@ -58,8 +60,11 @@ dictionary L10nKey {
|
|||
* - aResourceids - a list of localization resource URIs
|
||||
* which will provide messages for this
|
||||
* Localization instance.
|
||||
/
|
||||
[ChromeOnly, Constructor(optional sequence<DOMString> aResourceIds)]
|
||||
* - aGenerateMessages - a callback function which will be
|
||||
* used to generate an iterator
|
||||
* over FluentBundle instances.
|
||||
*/
|
||||
[ChromeOnly, Constructor(optional sequence<DOMString> aResourceIds, optional GenerateMessages aGenerateMessages)]
|
||||
interface DOMLocalization {
|
||||
/**
|
||||
* Localization API
|
||||
|
|
|
@ -50,34 +50,35 @@ NS_INTERFACE_MAP_END
|
|||
DOMLocalization::DOMLocalization(nsIGlobalObject* aGlobal) : mGlobal(aGlobal) {
|
||||
mMutations = new mozilla::dom::l10n::Mutations(this);
|
||||
}
|
||||
|
||||
void DOMLocalization::Init(nsTArray<nsString>& aResourceIds, ErrorResult& aRv) {
|
||||
nsCOMPtr<mozILocalizationJSM> jsm =
|
||||
do_ImportModule("resource://gre/modules/Localization.jsm");
|
||||
MOZ_RELEASE_ASSERT(jsm);
|
||||
|
||||
Unused << jsm->GetLocalization(getter_AddRefs(mLocalization));
|
||||
Unused << jsm->GetLocalization(aResourceIds, getter_AddRefs(mLocalization));
|
||||
MOZ_RELEASE_ASSERT(mLocalization);
|
||||
|
||||
// The `aEager = true` here allows us to eagerly trigger
|
||||
// resource fetching to increase the chance that the l10n
|
||||
// resources will be ready by the time the document
|
||||
// is ready for localization.
|
||||
uint32_t ret;
|
||||
if (NS_FAILED(mLocalization->AddResourceIds(aResourceIds, true, &ret))) {
|
||||
aRv.Throw(NS_ERROR_UNEXPECTED);
|
||||
return;
|
||||
}
|
||||
RegisterObservers();
|
||||
}
|
||||
|
||||
void DOMLocalization::Init(nsTArray<nsString>& aResourceIds, JS::Handle<JS::Value> aGenerateMessages, ErrorResult& aRv) {
|
||||
nsCOMPtr<mozILocalizationJSM> jsm =
|
||||
do_ImportModule("resource://gre/modules/Localization.jsm");
|
||||
MOZ_RELEASE_ASSERT(jsm);
|
||||
|
||||
Unused << jsm->GetLocalizationWithCustomGenerateMessages(
|
||||
aResourceIds, aGenerateMessages, getter_AddRefs(mLocalization));
|
||||
MOZ_RELEASE_ASSERT(mLocalization);
|
||||
|
||||
// Register observers for this instance of
|
||||
// DOMLocalization to allow it to retranslate
|
||||
// the document when locale changes or pseudolocalization
|
||||
// gets turned on.
|
||||
RegisterObservers();
|
||||
}
|
||||
|
||||
already_AddRefed<DOMLocalization> DOMLocalization::Constructor(
|
||||
const GlobalObject& aGlobal,
|
||||
const Optional<Sequence<nsString>>& aResourceIds, ErrorResult& aRv) {
|
||||
const Optional<Sequence<nsString>>& aResourceIds,
|
||||
const Optional<OwningNonNull<GenerateMessages>>& aGenerateMessages,
|
||||
ErrorResult& aRv) {
|
||||
nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(aGlobal.GetAsSupports());
|
||||
if (!global) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
|
@ -91,7 +92,15 @@ already_AddRefed<DOMLocalization> DOMLocalization::Constructor(
|
|||
resourceIds = aResourceIds.Value();
|
||||
}
|
||||
|
||||
loc->Init(resourceIds, aRv);
|
||||
if (aGenerateMessages.WasPassed()) {
|
||||
GenerateMessages& generateMessages = aGenerateMessages.Value();
|
||||
JS::Rooted<JS::Value> generateMessagesJS(
|
||||
aGlobal.Context(), JS::ObjectValue(*generateMessages.CallbackOrNull()));
|
||||
loc->Init(resourceIds, generateMessagesJS, aRv);
|
||||
} else {
|
||||
loc->Init(resourceIds, aRv);
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -29,10 +29,13 @@ class DOMLocalization : public nsIObserver,
|
|||
|
||||
explicit DOMLocalization(nsIGlobalObject* aGlobal);
|
||||
void Init(nsTArray<nsString>& aResourceIds, ErrorResult& aRv);
|
||||
void Init(nsTArray<nsString>& aResourceIds, JS::Handle<JS::Value> aGenerateMessages, ErrorResult& aRv);
|
||||
|
||||
static already_AddRefed<DOMLocalization> Constructor(
|
||||
const GlobalObject& aGlobal,
|
||||
const Optional<Sequence<nsString>>& aResourceIds, ErrorResult& aRv);
|
||||
const Optional<Sequence<nsString>>& aResourceIds,
|
||||
const Optional<OwningNonNull<GenerateMessages>>& aGenerateMessages,
|
||||
ErrorResult& aRv);
|
||||
|
||||
nsIGlobalObject* GetParentObject() const;
|
||||
|
||||
|
|
|
@ -220,8 +220,7 @@ class Localization {
|
|||
constructor(resourceIds = [], generateBundles = defaultGenerateBundles) {
|
||||
this.resourceIds = resourceIds;
|
||||
this.generateBundles = generateBundles;
|
||||
this.bundles = this.cached(
|
||||
this.generateBundles(this.resourceIds));
|
||||
this.onChange(true);
|
||||
}
|
||||
|
||||
cached(iterable) {
|
||||
|
@ -584,10 +583,16 @@ function keysFromBundle(method, bundle, keys, translations) {
|
|||
|
||||
/**
|
||||
* Helper function which allows us to construct a new
|
||||
* Localization from DocumentL10n.
|
||||
* Localization from DOMLocalization.
|
||||
*/
|
||||
var getLocalization = () => new Localization();
|
||||
var getLocalization = (resourceIds) => {
|
||||
return new Localization(resourceIds);
|
||||
};
|
||||
|
||||
var getLocalizationWithCustomGenerateMessages = (resourceIds, generateMessages) => {
|
||||
return new Localization(resourceIds, generateMessages);
|
||||
};
|
||||
|
||||
this.Localization = Localization;
|
||||
this.LocalizationSync = LocalizationSync;
|
||||
var EXPORTED_SYMBOLS = ["Localization", "LocalizationSync", "getLocalization"];
|
||||
var EXPORTED_SYMBOLS = ["Localization", "LocalizationSync", "getLocalization", "getLocalizationWithCustomGenerateMessages"];
|
||||
|
|
|
@ -20,5 +20,6 @@ interface mozILocalization : nsISupports
|
|||
[scriptable, uuid(96632d26-1422-12e9-b1ce-9bb586acd241)]
|
||||
interface mozILocalizationJSM : nsISupports
|
||||
{
|
||||
mozILocalization getLocalization();
|
||||
mozILocalization getLocalization(in Array<AString> resourceIds);
|
||||
mozILocalization getLocalizationWithCustomGenerateMessages(in Array<AString> resourceIds, in jsval generateMessages);
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче