this repo has no description
at main 3.2 kB view raw
1"use strict"; 2Object.defineProperty(exports, "__esModule", { value: true }); 3exports.LocalizedStringsBundle = void 0; 4const environment_1 = require("@jet/environment"); 5const localized_strings_json_object_1 = require("./localized-strings-json-object"); 6/** 7 * A localized string data source which loads strings from the application bundle. 8 * 9 * The bundle used by this data source can be a web app webpack bundle 10 * or a native app bundle bridged over to JS code. 11 */ 12class LocalizedStringsBundle { 13 // MARK: - Initialization 14 /** 15 * Create localized strings bundle with all required attributes. 16 * 17 * @param bundle - The app bundle object. 18 */ 19 constructor(bundle) { 20 this.bundle = bundle; 21 } 22 // MARK: - LocalizedStringsDataSource 23 async fetchStrings(language) { 24 var _a; 25 // Load the strings from bundle and cache them. 26 const localizations = this.bundle.localizationsProperty; 27 if (environment_1.isNothing(localizations)) { 28 throw new Error("Localized strings bundle index file is missing 'localizations' property"); 29 } 30 let strings; 31 const format = (_a = localizations.format) !== null && _a !== void 0 ? _a : "json/inline" /* jsonInline */; 32 if (format === "json/inline" /* jsonInline */) { 33 const inlineLocalizations = localizations; 34 strings = inlineLocalizations[language]; 35 } 36 else { 37 const externalLocalizations = localizations; 38 switch (externalLocalizations.format) { 39 case "json/multi-file" /* jsonMultiFile */: 40 { 41 // The path points to directory where JSON files are located. 42 // We don't even have to list a directory, just construct a final path. 43 // The path is also not an OS path but a bundle (e.g. JetPack) path. 44 // Bundle APIs always use "/" in the path, same as the paths used in the 45 // index.json (manifest) files. 46 const jsonPath = `${externalLocalizations.path}/${language}.json`; 47 strings = (await this.bundle.loadResource(jsonPath)); 48 } 49 break; 50 case "json/single-file" /* jsonSingleFile */: 51 // The bundle contains single JSON file with all strings dictionary in it. 52 strings = (await this.bundle.loadResource(externalLocalizations.path))[language]; 53 break; 54 case "loctable" /* loctable */: 55 throw new Error("Loctable format not supported in JS implementation"); 56 case "js" /* js */: 57 throw new Error("Not yet implemented"); 58 default: 59 throw new Error(`Unknown localization format: ${JSON.stringify(format)}`); 60 } 61 } 62 if (environment_1.isNothing(strings)) { 63 throw new Error(`Missing strings for ${language}`); 64 } 65 return new localized_strings_json_object_1.LocalizedStringsJSONObject(strings); 66 } 67} 68exports.LocalizedStringsBundle = LocalizedStringsBundle;