From a254ff8bc35ecbe26547a27db8d7d1ff5b25d0c0 Mon Sep 17 00:00:00 2001 From: windingwind <33902321+windingwind@users.noreply.github.com> Date: Fri, 16 Jun 2023 15:14:08 +0800 Subject: [PATCH] update: use Localization --- src/addon.ts | 1 - src/utils/locale.ts | 39 ++++++++++++--------------------------- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/src/addon.ts b/src/addon.ts index 453cd90..87b6b89 100644 --- a/src/addon.ts +++ b/src/addon.ts @@ -11,7 +11,6 @@ class Addon { ztoolkit: ZoteroToolkit; locale?: { current: any; - default: any; }; prefs?: { window: Window; diff --git a/src/utils/locale.ts b/src/utils/locale.ts index 5226c4b..f20401c 100644 --- a/src/utils/locale.ts +++ b/src/utils/locale.ts @@ -4,18 +4,12 @@ import { config } from "../../package.json"; * Initialize locale data */ export function initLocale() { - const l10n = ztoolkit.getGlobal("L10nRegistry").getInstance(); - const bundleGenerator = l10n.generateBundlesSync( - [Zotero.locale, "en-US"], - [`${config.addonRef}-addon.ftl`] + const l10n = new (ztoolkit.getGlobal("Localization"))( + [`${config.addonRef}-addon.ftl`], + true ); - const currentBundle = bundleGenerator.next().value; - // No default when in en-US - const defaultBundle = - Zotero.locale !== "en-US" ? bundleGenerator.next().value : null; addon.data.locale = { - current: currentBundle, - default: defaultBundle, + current: l10n, }; } @@ -35,24 +29,15 @@ export function initLocale() { * ``` */ export function getString(localString: string, branch = ""): string { - return ( - getStringFromBundle(addon.data.locale?.current, localString, branch) || - getStringFromBundle(addon.data.locale?.default, localString, branch) || - localString - ); -} - -function getStringFromBundle(bundle: any, localString: string, branch = "") { - if (!bundle) { - return ""; + const pattern = addon.data.locale?.current.formatMessagesSync([ + { id: localString }, + ])[0]; + if (!pattern) { + return localString; } - const patterns = bundle.getMessage(localString); - if (!patterns) { - return ""; - } - if (branch) { - return bundle.formatPattern(patterns.attributes[branch]); + if (branch && pattern.attributes) { + return pattern.attributes[branch] || localString; } else { - return bundle.formatPattern(patterns.value); + return pattern.value || localString; } }