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