跳到主要内容
版本:Canary 🚧

I18n 生命周期

插件使用这些生命周期来加载 i18n 相关的数据。

getTranslationFiles({content})

插件声明他们想要使用的 JSON 翻译文件。

返回翻译文件{path: string, content: ChromeI18nJSON}:

  • path: 相对于插件本地化文件夹i18n/[locale]/[pluginName]。扩展.json应该被省略以保持通用。
  • content: 使用 Chrome i18n JSON 格式。

这些文件将由write-translations CLI写入到插件 i18n 子文件夹中,并将在调用translateContent()translateThemeConfig()之前在适当的语言环境中读取

例子:

module.exports = function (context, options) {
return {
name: "my-plugin",
async getTranslationFiles({ content }) {
return [
{
path: "sidebar-labels",
content: {
someSidebarLabel: {
message: "Some Sidebar Label",
description: "A label used in my plugin in the sidebar",
},
someLabelFromContent: content.myLabel,
},
},
];
},
};
};

translateContent({content,translationFiles})

使用本地化的翻译文件翻译插件内容。

返回本地化的插件内容。

contentLoaded()生命周期将使用translateContent()返回的本地化插件内容来调用。

例子:

module.exports = function (context, options) {
return {
name: "my-plugin",
translateContent({ content, translationFiles }) {
const myTranslationFile = translationFiles.find((f) => f.path === "myTranslationFile");
return {
...content,
someContentLabel: myTranslationFile.someContentLabel.message,
};
},
};
};

translateThemeConfig({themeConfig,translationFiles})

使用本地化的翻译文件翻译站点themeConfig标签。

返回本地化的themeConfig

例子:

module.exports = function (context, options) {
return {
name: "my-theme",
translateThemeConfig({ themeConfig, translationFiles }) {
const myTranslationFile = translationFiles.find((f) => f.path === "myTranslationFile");
return {
...themeConfig,
someThemeConfigLabel: myTranslationFile.someThemeConfigLabel.message,
};
},
};
};

async getDefaultCodeTranslationMessages()

使用<Translate> API 的主题可以提供默认的代码翻译消息。

它应该在Record<string, string>中返回消息,其中键是翻译 id,值是使用站点当前语言环境本地化的消息(不含描述)。

例子:

module.exports = function (context, options) {
return {
name: "my-theme",
async getDefaultCodeTranslationMessages() {
return readJsonFile(`${context.i18n.currentLocale}.json`);
},
};
};