summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/fluent-l10n
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:44:51 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:44:51 +0000
commit9e3c08db40b8916968b9f30096c7be3f00ce9647 (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /devtools/client/shared/fluent-l10n
parentInitial commit. (diff)
downloadthunderbird-upstream.tar.xz
thunderbird-upstream.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
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.js64
-rw-r--r--devtools/client/shared/fluent-l10n/moz.build9
2 files changed, 73 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..d3a5c33408
--- /dev/null
+++ b/devtools/client/shared/fluent-l10n/fluent-l10n.js
@@ -0,0 +1,64 @@
+/* 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 FluentReact = require("resource://devtools/client/shared/vendor/fluent-react.js");
+
+/**
+ * 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.
+ * It can optionally add the right attributes to the document element.
+ * @param {Array} resourceIds
+ * @param {Object} [options]
+ * @param {boolean} [options.setAttributesOnDocument]
+ */
+ async init(resourceIds, { setAttributesOnDocument } = {}) {
+ if (setAttributesOnDocument) {
+ const primaryLocale = Services.locale.appLocalesAsBCP47[0];
+ document.documentElement.setAttribute("lang", primaryLocale);
+ const direction = Services.locale.isAppLocaleRTL ? "rtl" : "ltr";
+ document.documentElement.setAttribute("dir", direction);
+ }
+
+ const locales = Services.locale.appLocalesAsBCP47;
+ const generator = L10nRegistry.getInstance().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",
+)