fix: getString from ftl
remove: getStringAsync
This commit is contained in:
		
							parent
							
								
									25081bf450
								
							
						
					
					
						commit
						a4741696e6
					
				@ -10,7 +10,8 @@ class Addon {
 | 
			
		||||
    // ztoolkit: MyToolkit;
 | 
			
		||||
    ztoolkit: ZoteroToolkit;
 | 
			
		||||
    locale?: {
 | 
			
		||||
      stringBundle: any;
 | 
			
		||||
      current: any;
 | 
			
		||||
      default: any;
 | 
			
		||||
    };
 | 
			
		||||
    prefs?: {
 | 
			
		||||
      window: Window;
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ import {
 | 
			
		||||
  UIExampleFactory,
 | 
			
		||||
} from "./modules/examples";
 | 
			
		||||
import { config } from "../package.json";
 | 
			
		||||
import { getStringAsync, initLocale } from "./utils/locale";
 | 
			
		||||
import { getString, initLocale } from "./utils/locale";
 | 
			
		||||
import { registerPrefsScripts } from "./modules/preferenceScript";
 | 
			
		||||
 | 
			
		||||
async function onStartup() {
 | 
			
		||||
@ -26,7 +26,7 @@ async function onStartup() {
 | 
			
		||||
    closeTime: -1,
 | 
			
		||||
  })
 | 
			
		||||
    .createLine({
 | 
			
		||||
      text: await getStringAsync("startup-begin"),
 | 
			
		||||
      text: getString("startup-begin"),
 | 
			
		||||
      type: "default",
 | 
			
		||||
      progress: 0,
 | 
			
		||||
    })
 | 
			
		||||
@ -41,7 +41,7 @@ async function onStartup() {
 | 
			
		||||
  await Zotero.Promise.delay(1000);
 | 
			
		||||
  popupWin.changeLine({
 | 
			
		||||
    progress: 30,
 | 
			
		||||
    text: `[30%] ${await getStringAsync("startup-begin")}`,
 | 
			
		||||
    text: `[30%] ${getString("startup-begin")}`,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  UIExampleFactory.registerStyleSheet();
 | 
			
		||||
@ -74,7 +74,7 @@ async function onStartup() {
 | 
			
		||||
 | 
			
		||||
  popupWin.changeLine({
 | 
			
		||||
    progress: 100,
 | 
			
		||||
    text: `[100%] ${await getStringAsync("startup-finish")}`,
 | 
			
		||||
    text: `[100%] ${getString("startup-finish")}`,
 | 
			
		||||
  });
 | 
			
		||||
  popupWin.startCloseTimer(5000);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
import { config } from "../../package.json";
 | 
			
		||||
import { getStringAsync } from "../utils/locale";
 | 
			
		||||
import { getString } from "../utils/locale";
 | 
			
		||||
 | 
			
		||||
function example(
 | 
			
		||||
  target: any,
 | 
			
		||||
@ -71,11 +71,11 @@ export class BasicExampleFactory {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @example
 | 
			
		||||
  static async registerPrefs() {
 | 
			
		||||
  static registerPrefs() {
 | 
			
		||||
    const prefOptions = {
 | 
			
		||||
      pluginID: config.addonID,
 | 
			
		||||
      src: rootURI + "chrome/content/preferences.xhtml",
 | 
			
		||||
      label: await getStringAsync("prefs-title"),
 | 
			
		||||
      label: getString("prefs-title"),
 | 
			
		||||
      image: `chrome://${config.addonRef}/content/icons/favicon.png`,
 | 
			
		||||
      defaultXUL: true,
 | 
			
		||||
    };
 | 
			
		||||
@ -197,29 +197,29 @@ export class UIExampleFactory {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @example
 | 
			
		||||
  static async registerRightClickMenuItem() {
 | 
			
		||||
  static registerRightClickMenuItem() {
 | 
			
		||||
    const menuIcon = `chrome://${config.addonRef}/content/icons/favicon@0.5x.png`;
 | 
			
		||||
    // item menuitem with icon
 | 
			
		||||
    ztoolkit.Menu.register("item", {
 | 
			
		||||
      tag: "menuitem",
 | 
			
		||||
      id: "zotero-itemmenu-addontemplate-test",
 | 
			
		||||
      label: await getStringAsync("menuitem-label"),
 | 
			
		||||
      label: getString("menuitem-label"),
 | 
			
		||||
      commandListener: (ev) => addon.hooks.onDialogEvents("dialogExample"),
 | 
			
		||||
      icon: menuIcon,
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @example
 | 
			
		||||
  static async registerRightClickMenuPopup() {
 | 
			
		||||
  static registerRightClickMenuPopup() {
 | 
			
		||||
    ztoolkit.Menu.register(
 | 
			
		||||
      "item",
 | 
			
		||||
      {
 | 
			
		||||
        tag: "menu",
 | 
			
		||||
        label: await getStringAsync("menupopup-label"),
 | 
			
		||||
        label: getString("menupopup-label"),
 | 
			
		||||
        children: [
 | 
			
		||||
          {
 | 
			
		||||
            tag: "menuitem",
 | 
			
		||||
            label: await getStringAsync("menuitem-submenulabel"),
 | 
			
		||||
            label: getString("menuitem-submenulabel"),
 | 
			
		||||
            oncommand: "alert('Hello World! Sub Menuitem.')",
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
@ -232,14 +232,14 @@ export class UIExampleFactory {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @example
 | 
			
		||||
  static async registerWindowMenuWithSeparator() {
 | 
			
		||||
  static registerWindowMenuWithSeparator() {
 | 
			
		||||
    ztoolkit.Menu.register("menuFile", {
 | 
			
		||||
      tag: "menuseparator",
 | 
			
		||||
    });
 | 
			
		||||
    // menu->File menuitem
 | 
			
		||||
    ztoolkit.Menu.register("menuFile", {
 | 
			
		||||
      tag: "menuitem",
 | 
			
		||||
      label: await getStringAsync("menuitem-filemenulabel"),
 | 
			
		||||
      label: getString("menuitem-filemenulabel"),
 | 
			
		||||
      oncommand: "alert('Hello World! File Menuitem.')",
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
@ -345,9 +345,9 @@ export class UIExampleFactory {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @example
 | 
			
		||||
  static async registerLibraryTabPanel() {
 | 
			
		||||
  static registerLibraryTabPanel() {
 | 
			
		||||
    const tabId = ztoolkit.LibraryTabPanel.register(
 | 
			
		||||
      await getStringAsync("tabpanel-lib-tab-label"),
 | 
			
		||||
      getString("tabpanel-lib-tab-label"),
 | 
			
		||||
      (panel: XUL.Element, win: Window) => {
 | 
			
		||||
        const elem = ztoolkit.UI.createElement(win.document, "vbox", {
 | 
			
		||||
          children: [
 | 
			
		||||
@ -391,7 +391,7 @@ export class UIExampleFactory {
 | 
			
		||||
  @example
 | 
			
		||||
  static async registerReaderTabPanel() {
 | 
			
		||||
    const tabId = await ztoolkit.ReaderTabPanel.register(
 | 
			
		||||
      await getStringAsync("tabpanel-reader-tab-label"),
 | 
			
		||||
      getString("tabpanel-reader-tab-label"),
 | 
			
		||||
      (
 | 
			
		||||
        panel: XUL.TabPanel | undefined,
 | 
			
		||||
        deck: XUL.Deck,
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
import { config } from "../../package.json";
 | 
			
		||||
import { getStringAsync } from "../utils/locale";
 | 
			
		||||
import { getString } from "../utils/locale";
 | 
			
		||||
 | 
			
		||||
export async function registerPrefsScripts(_window: Window) {
 | 
			
		||||
  // This function is called when the prefs window is opened
 | 
			
		||||
@ -10,13 +10,13 @@ export async function registerPrefsScripts(_window: Window) {
 | 
			
		||||
      columns: [
 | 
			
		||||
        {
 | 
			
		||||
          dataKey: "title",
 | 
			
		||||
          label: await getStringAsync("prefs-table-title"),
 | 
			
		||||
          label: getString("prefs-table-title"),
 | 
			
		||||
          fixedWidth: true,
 | 
			
		||||
          width: 100,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          dataKey: "detail",
 | 
			
		||||
          label: await getStringAsync("prefs-table-detail"),
 | 
			
		||||
          label: getString("prefs-table-detail"),
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
      rows: [
 | 
			
		||||
 | 
			
		||||
@ -1,52 +1,56 @@
 | 
			
		||||
import { config } from "../../package.json";
 | 
			
		||||
import { waitUntil } from "./wait";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Initialize locale data
 | 
			
		||||
 */
 | 
			
		||||
export function initLocale() {
 | 
			
		||||
  ztoolkit.UI.appendElement(
 | 
			
		||||
    {
 | 
			
		||||
      tag: "link",
 | 
			
		||||
      namespace: "html",
 | 
			
		||||
      properties: {
 | 
			
		||||
        rel: "localization",
 | 
			
		||||
        href: `${config.addonRef}-addon.ftl`,
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
    document.querySelector("linkset")!
 | 
			
		||||
  const l10n = ztoolkit.getGlobal("L10nRegistry").getInstance();
 | 
			
		||||
  const bundleGenerator = l10n.generateBundlesSync(
 | 
			
		||||
    [Zotero.locale, "en-US"],
 | 
			
		||||
    [`${config.addonRef}-addon.ftl`]
 | 
			
		||||
  );
 | 
			
		||||
  const currentBundle = bundleGenerator.next().value;
 | 
			
		||||
  const defaultBundle = bundleGenerator.next().value;
 | 
			
		||||
  addon.data.locale = {
 | 
			
		||||
    current: currentBundle,
 | 
			
		||||
    default: defaultBundle,
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get locale string
 | 
			
		||||
 * @param localString
 | 
			
		||||
 * @deprecated
 | 
			
		||||
 * @param branch branch name
 | 
			
		||||
 * @example
 | 
			
		||||
 * ```ftl
 | 
			
		||||
 * # addon.ftl
 | 
			
		||||
 * addon-name = Addon Template
 | 
			
		||||
 *     .label = Addon Template Label
 | 
			
		||||
 * ```
 | 
			
		||||
 * ```js
 | 
			
		||||
 * getString("addon-name"); // Addon Template
 | 
			
		||||
 * getString("addon-name", "label"); // Addon Template Label
 | 
			
		||||
 * ```
 | 
			
		||||
 */
 | 
			
		||||
export function getString(localString: string): string {
 | 
			
		||||
  let result = "";
 | 
			
		||||
  let flag = false;
 | 
			
		||||
  getStringAsync(localString)
 | 
			
		||||
    .then((value) => {
 | 
			
		||||
      result = value;
 | 
			
		||||
      flag = true;
 | 
			
		||||
    })
 | 
			
		||||
    .catch((e) => {
 | 
			
		||||
      ztoolkit.log(e);
 | 
			
		||||
      flag = true;
 | 
			
		||||
    });
 | 
			
		||||
  const t = new Date().getTime();
 | 
			
		||||
  while (!flag && t < new Date().getTime() - 3000) {
 | 
			
		||||
    // wait until the string is loaded
 | 
			
		||||
  }
 | 
			
		||||
  return result;
 | 
			
		||||
export function getString(localString: string, branch = ""): string {
 | 
			
		||||
  return (
 | 
			
		||||
    getStringFromBundle(addon.data.locale?.current, localString, branch) ||
 | 
			
		||||
    getStringFromBundle(addon.data.locale?.default, localString, branch) ||
 | 
			
		||||
    localString
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get locale string async
 | 
			
		||||
 * @param localString
 | 
			
		||||
 */
 | 
			
		||||
export async function getStringAsync(localString: string): Promise<string> {
 | 
			
		||||
  // @ts-ignore
 | 
			
		||||
  return (await document.l10n.formatValue(localString)) || localString;
 | 
			
		||||
function getStringFromBundle(bundle: any, localString: string, branch = "") {
 | 
			
		||||
  if (!bundle) {
 | 
			
		||||
    return "";
 | 
			
		||||
  }
 | 
			
		||||
  const patterns = bundle.getMessage(localString);
 | 
			
		||||
  if (!patterns) {
 | 
			
		||||
    return "";
 | 
			
		||||
  }
 | 
			
		||||
  if (branch) {
 | 
			
		||||
    return bundle.formatPattern(patterns.attributes[branch]);
 | 
			
		||||
  } else {
 | 
			
		||||
    return bundle.formatPattern(patterns.value);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user