summaryrefslogtreecommitdiff
path: root/node_modules/@jet/engine/lib/dependencies/localized-strings-bundle.js
diff options
context:
space:
mode:
authorrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
committerrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
commitbce557cc2dc767628bed6aac87301a1be7c5431b (patch)
treeb51a051228d01fe3306cd7626d4a96768aadb944 /node_modules/@jet/engine/lib/dependencies/localized-strings-bundle.js
init commit
Diffstat (limited to 'node_modules/@jet/engine/lib/dependencies/localized-strings-bundle.js')
-rw-r--r--node_modules/@jet/engine/lib/dependencies/localized-strings-bundle.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/node_modules/@jet/engine/lib/dependencies/localized-strings-bundle.js b/node_modules/@jet/engine/lib/dependencies/localized-strings-bundle.js
new file mode 100644
index 0000000..0c4bf44
--- /dev/null
+++ b/node_modules/@jet/engine/lib/dependencies/localized-strings-bundle.js
@@ -0,0 +1,68 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.LocalizedStringsBundle = void 0;
+const environment_1 = require("@jet/environment");
+const localized_strings_json_object_1 = require("./localized-strings-json-object");
+/**
+ * A localized string data source which loads strings from the application bundle.
+ *
+ * The bundle used by this data source can be a web app webpack bundle
+ * or a native app bundle bridged over to JS code.
+ */
+class LocalizedStringsBundle {
+ // MARK: - Initialization
+ /**
+ * Create localized strings bundle with all required attributes.
+ *
+ * @param bundle - The app bundle object.
+ */
+ constructor(bundle) {
+ this.bundle = bundle;
+ }
+ // MARK: - LocalizedStringsDataSource
+ async fetchStrings(language) {
+ var _a;
+ // Load the strings from bundle and cache them.
+ const localizations = this.bundle.localizationsProperty;
+ if (environment_1.isNothing(localizations)) {
+ throw new Error("Localized strings bundle index file is missing 'localizations' property");
+ }
+ let strings;
+ const format = (_a = localizations.format) !== null && _a !== void 0 ? _a : "json/inline" /* jsonInline */;
+ if (format === "json/inline" /* jsonInline */) {
+ const inlineLocalizations = localizations;
+ strings = inlineLocalizations[language];
+ }
+ else {
+ const externalLocalizations = localizations;
+ switch (externalLocalizations.format) {
+ case "json/multi-file" /* jsonMultiFile */:
+ {
+ // The path points to directory where JSON files are located.
+ // We don't even have to list a directory, just construct a final path.
+ // The path is also not an OS path but a bundle (e.g. JetPack) path.
+ // Bundle APIs always use "/" in the path, same as the paths used in the
+ // index.json (manifest) files.
+ const jsonPath = `${externalLocalizations.path}/${language}.json`;
+ strings = (await this.bundle.loadResource(jsonPath));
+ }
+ break;
+ case "json/single-file" /* jsonSingleFile */:
+ // The bundle contains single JSON file with all strings dictionary in it.
+ strings = (await this.bundle.loadResource(externalLocalizations.path))[language];
+ break;
+ case "loctable" /* loctable */:
+ throw new Error("Loctable format not supported in JS implementation");
+ case "js" /* js */:
+ throw new Error("Not yet implemented");
+ default:
+ throw new Error(`Unknown localization format: ${JSON.stringify(format)}`);
+ }
+ }
+ if (environment_1.isNothing(strings)) {
+ throw new Error(`Missing strings for ${language}`);
+ }
+ return new localized_strings_json_object_1.LocalizedStringsJSONObject(strings);
+ }
+}
+exports.LocalizedStringsBundle = LocalizedStringsBundle;