summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/fluent-l10n
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /devtools/client/shared/fluent-l10n
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/shared/fluent-l10n')
-rw-r--r--devtools/client/shared/fluent-l10n/fluent-l10n.js54
-rw-r--r--devtools/client/shared/fluent-l10n/moz.build9
2 files changed, 63 insertions, 0 deletions
diff --git a/devtools/client/shared/fluent-l10n/fluent-l10n.js b/devtools/client/shared/fluent-l10n/fluent-l10n.js
new file mode 100644
index 0000000000..1737c85067
--- /dev/null
+++ b/devtools/client/shared/fluent-l10n/fluent-l10n.js
@@ -0,0 +1,54 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const Services = require("Services");
+
+const FluentReact = require("devtools/client/shared/vendor/fluent-react");
+const { L10nRegistry } = require("resource://gre/modules/L10nRegistry.jsm");
+
+/**
+ * Wrapper over FluentReact. It encapsulates instantiation of the localization
+ * bundles, and offers a simpler way of accessing `getString`.
+ */
+class FluentL10n {
+ /**
+ * Initializes the wrapper, generating the bundles for the given resource ids.
+ * @param {Array} resourceIds
+ */
+ async init(resourceIds) {
+ const locales = Services.locale.appLocalesAsBCP47;
+ const generator = L10nRegistry.generateBundles(locales, resourceIds);
+
+ this._bundles = [];
+ for await (const bundle of generator) {
+ this._bundles.push(bundle);
+ }
+ this._reactLocalization = new FluentReact.ReactLocalization(this._bundles);
+ }
+
+ /**
+ * Returns the fluent bundles generated.
+ */
+ getBundles() {
+ return this._bundles;
+ }
+
+ /**
+ * Returns the localized string for the provided id, formatted using args.
+ */
+ getString(id, args, fallback) {
+ // Forward arguments via .apply() so that the original method can:
+ // - perform asserts based on the number of arguments
+ // - add new arguments
+ return this._reactLocalization.getString.apply(
+ this._reactLocalization,
+ arguments
+ );
+ }
+}
+
+// Export the class
+exports.FluentL10n = FluentL10n;
diff --git a/devtools/client/shared/fluent-l10n/moz.build b/devtools/client/shared/fluent-l10n/moz.build
new file mode 100644
index 0000000000..654348ea26
--- /dev/null
+++ b/devtools/client/shared/fluent-l10n/moz.build
@@ -0,0 +1,9 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+DevToolsModules(
+ "fluent-l10n.js",
+)