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;
locale?: {
current: any;
default: any;
};
prefs?: {
window: Window;

View File

@ -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;
}
}