update: use Localization

This commit is contained in:
windingwind 2023-06-16 15:14:08 +08:00
parent 4d0b0a457d
commit a254ff8bc3
2 changed files with 12 additions and 28 deletions

View File

@ -11,7 +11,6 @@ class Addon {
ztoolkit: ZoteroToolkit; ztoolkit: ZoteroToolkit;
locale?: { locale?: {
current: any; current: any;
default: any;
}; };
prefs?: { prefs?: {
window: Window; window: Window;

View File

@ -4,18 +4,12 @@ import { config } from "../../package.json";
* Initialize locale data * Initialize locale data
*/ */
export function initLocale() { export function initLocale() {
const l10n = ztoolkit.getGlobal("L10nRegistry").getInstance(); const l10n = new (ztoolkit.getGlobal("Localization"))(
const bundleGenerator = l10n.generateBundlesSync( [`${config.addonRef}-addon.ftl`],
[Zotero.locale, "en-US"], true
[`${config.addonRef}-addon.ftl`]
); );
const currentBundle = bundleGenerator.next().value;
// No default when in en-US
const defaultBundle =
Zotero.locale !== "en-US" ? bundleGenerator.next().value : null;
addon.data.locale = { addon.data.locale = {
current: currentBundle, current: l10n,
default: defaultBundle,
}; };
} }
@ -35,24 +29,15 @@ export function initLocale() {
* ``` * ```
*/ */
export function getString(localString: string, branch = ""): string { export function getString(localString: string, branch = ""): string {
return ( const pattern = addon.data.locale?.current.formatMessagesSync([
getStringFromBundle(addon.data.locale?.current, localString, branch) || { id: localString },
getStringFromBundle(addon.data.locale?.default, localString, branch) || ])[0];
localString if (!pattern) {
); return localString;
} }
if (branch && pattern.attributes) {
function getStringFromBundle(bundle: any, localString: string, branch = "") { return pattern.attributes[branch] || localString;
if (!bundle) {
return "";
}
const patterns = bundle.getMessage(localString);
if (!patterns) {
return "";
}
if (branch) {
return bundle.formatPattern(patterns.attributes[branch]);
} else { } else {
return bundle.formatPattern(patterns.value); return pattern.value || localString;
} }
} }