import * as i0 from "@angular/core"; /** 從外掛載入翻譯的參數選項 */ export interface LoadTranslationFromPluginOptions { /** 翻譯檔路徑陣列 */ i18nPaths: Array; /** Plugin 命名空間,作為翻譯 key 的前綴 */ pluginNamespace: string; /** 儲存的目標語系 */ targetLang?: string; /** 是否記錄至 loadedPaths,預設為 `true` */ recordPath?: boolean; } export declare class I18nLoader { private http; private translate; private transStore; private configService; /** 已載入的 i18n 資訊 */ private loadedPaths; /** * 載入指定前綴的 i18n 翻譯檔 * * @param i18nPrefix 需載入的 i18n 前綴(字串或陣列),例如:'global' 或 ['global', 'common'] * @param lang 語系,預設使用當前語系 * @returns Promise 無需載入或語系/前綴設定有誤時回傳 `false`;其餘情況皆回傳 `true`,不阻擋頁面進入 */ loadTranslationFromApi(i18nPrefix: string | string[], lang?: string): Promise; /** * 從外掛載入翻譯檔 * * @param options 載入選項 * @param options.i18nPaths 翻譯檔路徑陣列 * @param options.keyPrefix 整合包代號,會轉為小寫作為前綴 * @param options.targetLang 儲存的目標語系 * @param options.recordPath 是否記錄至 loadedPaths,預設為 `true` * @returns Promise 語系設定有誤時回傳 `false`;其餘情況皆回傳 `true`,不阻擋頁面進入 */ loadTranslationFromPlugin(options: LoadTranslationFromPluginOptions): Promise; /** * 從指定路徑載入翻譯檔案 * * 此方法負責: * 1. 發送 HTTP 請求取得翻譯資料 * 2. 將翻譯資料扁平化並加上前綴(如果有 pluginNamespace) * 3. 合併至現有翻譯並更新 TranslateService * * Promise 回傳三種狀態: * - `resolve(true)`:全部 URL 載入成功 * - `resolve(false)`:至少一個 URL 載入失敗,成功的翻譯仍會套用,錯誤已記錄至 console * - `reject()`:配置錯誤(urls 為空陣列),代表呼叫端傳入資料有誤 * * @param options 載入選項 * @param options.urls 要載入的 URL 陣列(不可為空,否則 reject) * @param options.pluginNamespace Plugin 命名空間(選填),會作為翻譯 key 的前綴 * @param options.targetLang 儲存的目標語系(選填) * @returns Promise 全部成功 resolve `true`;部分失敗 resolve `false`;urls 為空 reject */ private loadTranslationsByUrls; /** * 重新載入所有已載入的翻譯,從語系A切換至語系B。 * * Promise 回傳三種狀態: * - `resolve(true)`:切換成功,或無需切換(目前無已載入路徑、目標語系與目前相同) * - `reject()`:配置錯誤(未提供目標語系、語系不支援) * - HTTP 失敗:完全忽略,成功的翻譯仍套用,不影響切換結果 * * @param toLang 目標語系(例如:'en-US') * @param isSwitchLang 是否切換至目標語系,預設為 `true` * @returns Promise 切換成功或無需切換 resolve `true`;配置錯誤 reject */ reloadTranslations(toLang: string, isSwitchLang?: boolean): Promise; /** * 直接插入翻譯物件至 TranslateService,不透過 HTTP 載入。 * * @param translations 要插入的翻譯物件(key-value 形式) * @param pluginNamespace Plugin 命名空間(選填),會作為翻譯 key 的前綴 * @param targetLang 目標語系(選填),預設使用當前語系 */ insertTranslation(translations: Record, pluginNamespace?: string, targetLang?: string): void; /** * 記錄已載入的路徑資訊 * * @param urls 載入的 URL 陣列 * @param pluginNamespace Plugin 命名空間(選填) * @param i18nPrefixes i18n 前綴陣列(選填) /** * * * @private * @param {string[]} urls * @param {string} [pluginNamespace] * @param {string[]} [i18nPrefixes] * @memberof I18nLoader */ private recordLoadedPaths; /** * 轉換 HTTP GET 請求 * * 載入失敗時回傳空物件並記錄錯誤,不拋出例外。 * * @param urls 翻譯檔案的 URL 陣列 * @returns Observable 陣列,每個 Observable 回傳翻譯資料;失敗時回傳 `null` */ private generateTranslationRequest; /** * 將多個語系物件攤平並加上 prefix * * @param langs 語系物件陣列 * @param pluginNamespace Plugin 命名空間(選填) * @returns 攤平後的語系物件陣列 * @example * // 無 pluginNamespace * flattenLangs([{ 'button.ok': '確定'}, { 'button.cancel': '取消'}]) * // 結果: [{ 'button.ok': '確定'}, { 'button.cancel': '取消'}] * * // 有 pluginNamespace * flattenLangs([{ 'button.ok': '確定'}, { 'button.cancel': '取消'}], 'common') * // 結果: [{ 'common.button.ok': '確定'}, { 'common.button.cancel': '取消'}] */ private flattenLangs; /** * 根據前綴清單和語系產生 i18n URL 陣列 * * @param prefixes i18n 前綴陣列,例如:['global', 'common'] * @param lang 語系,例如:'zh-TW' * @returns i18n URL 陣列 */ private generateI18nUrls; /** * 取得指定名稱的 Cookie 值 * * @param cookieName Cookie 名稱 * @returns Cookie 值,若不存在則回傳 `undefined` */ private getCookie; /** * 檢查 i18n 前綴清單是否有效 * * @param prefixes i18n 前綴陣列 * @returns 清單非空回傳 `true`,否則回傳 `false` */ private isPrefixValid; /** * 檢查 URL 陣列是否有效 * * @param urls URL 陣列 * @returns 陣列非空回傳 `true`,否則回傳 `false` */ private isUrlValid; /** * 檢查目標語系是否有效 * * @param lang 目標語系 * @returns 語系有效回傳 `true`,無效回傳 `false` */ private isLangValid; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; }