Files
apps.apple.com/node_modules/@jet/engine/lib/dependencies/localized-strings-bundle.js
2025-11-04 05:03:50 +08:00

69 lines
3.1 KiB
JavaScript

"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;