Fix plugin localization handling
Pass Localization and DOMLocalization to plugins and fix locale registration so that it occurs before startup() is called.
This commit is contained in:
parent
a49b58ba87
commit
c7304b9fb0
2 changed files with 43 additions and 26 deletions
|
@ -86,30 +86,6 @@ Zotero.Intl = new function () {
|
||||||
this.strings[regexpResult[1]] = regexpResult[2];
|
this.strings[regexpResult[1]] = regexpResult[2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Automatically register l10n sources for enabled plugins.
|
|
||||||
|
|
||||||
// A Fluent file located at
|
|
||||||
// [plugin root]/locale/en-US/make-it-red.ftl
|
|
||||||
// could be included in an XHTML file as
|
|
||||||
// <link rel="localization" href="make-it-red.ftl"/>
|
|
||||||
|
|
||||||
// If a plugin doesn't have a subdirectory for the active locale, en-US strings
|
|
||||||
// will be used as a fallback.
|
|
||||||
Zotero.Plugins.addObserver({
|
|
||||||
startup({ id: pluginID, rootURI }) {
|
|
||||||
let source = new L10nFileSource(
|
|
||||||
pluginID, 'app',
|
|
||||||
Services.locale.availableLocales,
|
|
||||||
rootURI + 'locale/{locale}/',
|
|
||||||
);
|
|
||||||
L10nRegistry.getInstance().registerSources([source]);
|
|
||||||
},
|
|
||||||
|
|
||||||
shutdown({ id: pluginID }) {
|
|
||||||
L10nRegistry.getInstance().removeSources([pluginID]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ Zotero.Plugins = new function () {
|
||||||
var { addons } = await AddonManager.getActiveAddons(["extension"]);
|
var { addons } = await AddonManager.getActiveAddons(["extension"]);
|
||||||
for (let addon of addons) {
|
for (let addon of addons) {
|
||||||
setDefaultPrefs(addon);
|
setDefaultPrefs(addon);
|
||||||
|
registerLocales(addon);
|
||||||
await _callMethod(addon, 'startup', REASONS.APP_STARTUP);
|
await _callMethod(addon, 'startup', REASONS.APP_STARTUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +92,17 @@ Zotero.Plugins = new function () {
|
||||||
for (let name in REASONS) {
|
for (let name in REASONS) {
|
||||||
scope[name] = REASONS[name];
|
scope[name] = REASONS[name];
|
||||||
}
|
}
|
||||||
Object.assign(scope, { Services, Worker, ChromeWorker, Zotero });
|
Object.assign(
|
||||||
|
scope,
|
||||||
|
{
|
||||||
|
Zotero,
|
||||||
|
DOMLocalization,
|
||||||
|
Localization,
|
||||||
|
ChromeWorker,
|
||||||
|
Services,
|
||||||
|
Worker,
|
||||||
|
}
|
||||||
|
);
|
||||||
// Add additional global functions
|
// Add additional global functions
|
||||||
scope.setTimeout = setTimeout;
|
scope.setTimeout = setTimeout;
|
||||||
scope.clearTimeout = clearTimeout;
|
scope.clearTimeout = clearTimeout;
|
||||||
|
@ -273,6 +284,31 @@ Zotero.Plugins = new function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Automatically register l10n sources for enabled plugins.
|
||||||
|
//
|
||||||
|
// A Fluent file located at
|
||||||
|
// [plugin root]/locale/en-US/make-it-red.ftl
|
||||||
|
// could be included in an XHTML file as
|
||||||
|
// <link rel="localization" href="make-it-red.ftl"/>
|
||||||
|
//
|
||||||
|
// If a plugin doesn't have a subdirectory for the active locale, en-US strings
|
||||||
|
// will be used as a fallback.
|
||||||
|
function registerLocales(addon) {
|
||||||
|
let source = new L10nFileSource(
|
||||||
|
addon.id,
|
||||||
|
'app',
|
||||||
|
Services.locale.availableLocales,
|
||||||
|
addon.getResourceURI().spec + 'locale/{locale}/',
|
||||||
|
);
|
||||||
|
L10nRegistry.getInstance().registerSources([source]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function unregisterLocales(addon) {
|
||||||
|
L10nRegistry.getInstance().removeSources([addon.id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add an observer to be notified of lifecycle events on all plugins.
|
* Add an observer to be notified of lifecycle events on all plugins.
|
||||||
*
|
*
|
||||||
|
@ -314,6 +350,7 @@ Zotero.Plugins = new function () {
|
||||||
}
|
}
|
||||||
Zotero.debug("Installed plugin " + addon.id);
|
Zotero.debug("Installed plugin " + addon.id);
|
||||||
setDefaultPrefs(addon);
|
setDefaultPrefs(addon);
|
||||||
|
registerLocales(addon);
|
||||||
await _callMethod(addon, 'install');
|
await _callMethod(addon, 'install');
|
||||||
await _callMethod(addon, 'startup', REASONS.ADDON_INSTALL);
|
await _callMethod(addon, 'startup', REASONS.ADDON_INSTALL);
|
||||||
},
|
},
|
||||||
|
@ -324,6 +361,7 @@ Zotero.Plugins = new function () {
|
||||||
}
|
}
|
||||||
Zotero.debug("Enabling plugin " + addon.id);
|
Zotero.debug("Enabling plugin " + addon.id);
|
||||||
setDefaultPrefs(addon);
|
setDefaultPrefs(addon);
|
||||||
|
registerLocales(addon);
|
||||||
await _callMethod(addon, 'startup', REASONS.ADDON_ENABLE);
|
await _callMethod(addon, 'startup', REASONS.ADDON_ENABLE);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -333,6 +371,7 @@ Zotero.Plugins = new function () {
|
||||||
}
|
}
|
||||||
Zotero.debug("Disabling plugin " + addon.id);
|
Zotero.debug("Disabling plugin " + addon.id);
|
||||||
await _callMethod(addon, 'shutdown', REASONS.ADDON_DISABLE);
|
await _callMethod(addon, 'shutdown', REASONS.ADDON_DISABLE);
|
||||||
|
unregisterLocales(addon);
|
||||||
clearDefaultPrefs(addon);
|
clearDefaultPrefs(addon);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -341,6 +380,7 @@ Zotero.Plugins = new function () {
|
||||||
this.uninstalling.add(addon.id);
|
this.uninstalling.add(addon.id);
|
||||||
await _callMethod(addon, 'shutdown', REASONS.ADDON_UNINSTALL);
|
await _callMethod(addon, 'shutdown', REASONS.ADDON_UNINSTALL);
|
||||||
await _callMethod(addon, 'uninstall');
|
await _callMethod(addon, 'uninstall');
|
||||||
|
unregisterLocales(addon);
|
||||||
clearDefaultPrefs(addon);
|
clearDefaultPrefs(addon);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -354,9 +394,10 @@ Zotero.Plugins = new function () {
|
||||||
}
|
}
|
||||||
Zotero.debug("Cancelled uninstallation of plugin " + addon.id);
|
Zotero.debug("Cancelled uninstallation of plugin " + addon.id);
|
||||||
this.uninstalling.delete(addon.id);
|
this.uninstalling.delete(addon.id);
|
||||||
setDefaultPrefs(addon);
|
|
||||||
await _callMethod(addon, 'install');
|
await _callMethod(addon, 'install');
|
||||||
if (addon.isActive) {
|
if (addon.isActive) {
|
||||||
|
setDefaultPrefs(addon);
|
||||||
|
registerLocales(addon);
|
||||||
await _callMethod(addon, 'startup', REASONS.ADDON_INSTALL);
|
await _callMethod(addon, 'startup', REASONS.ADDON_INSTALL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue