diff --git a/packages/docusaurus-plugin-content-docs/src/index.ts b/packages/docusaurus-plugin-content-docs/src/index.ts index 846a72e827..894da94cfe 100644 --- a/packages/docusaurus-plugin-content-docs/src/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/index.ts @@ -104,8 +104,8 @@ export default function pluginContentDocs( }); }, - async getTranslationFiles() { - return getLoadedContentTranslationFiles(await this.loadContent!()); + async getTranslationFiles({content}) { + return getLoadedContentTranslationFiles(content); }, getClientModules() { diff --git a/packages/docusaurus-types/src/index.d.ts b/packages/docusaurus-types/src/index.d.ts index 988626f552..340ac10f19 100644 --- a/packages/docusaurus-types/src/index.d.ts +++ b/packages/docusaurus-types/src/index.d.ts @@ -216,14 +216,14 @@ export type AllContent = Record< // TODO improve type (not exposed by postcss-loader) export type PostCssOptions = Record & {plugins: unknown[]}; -export interface Plugin { +export interface Plugin { name: string; - loadContent?(): Promise; + loadContent?(): Promise; contentLoaded?({ content, actions, }: { - content: T; // the content loaded by this plugin instance + content: Content; // the content loaded by this plugin instance allContent: AllContent; // content loaded by ALL the plugins actions: PluginContentLoadedActions; }): void; @@ -249,7 +249,11 @@ export interface Plugin { // TODO before/afterDevServer implementation // translations - getTranslationFiles?(): Promise; + getTranslationFiles?({ + content, + }: { + content: Content; + }): Promise; getDefaultCodeTranslationMessages?(): Promise< Record< string, // id @@ -260,9 +264,9 @@ export interface Plugin { content, translationFiles, }: { - content: T; // the content loaded by this plugin instance + content: Content; // the content loaded by this plugin instance translationFiles: TranslationFiles; - }): T; + }): Content; translateThemeConfig?({ themeConfig, translationFiles, diff --git a/packages/docusaurus/src/commands/writeTranslations.ts b/packages/docusaurus/src/commands/writeTranslations.ts index e900a52658..34a2f00ed9 100644 --- a/packages/docusaurus/src/commands/writeTranslations.ts +++ b/packages/docusaurus/src/commands/writeTranslations.ts @@ -30,7 +30,10 @@ async function writePluginTranslationFiles({ options: WriteTranslationsOptions; }) { if (plugin.getTranslationFiles) { - const translationFiles = await plugin.getTranslationFiles(); + const content = await plugin.loadContent?.(); + const translationFiles = await plugin.getTranslationFiles({ + content, + }); await Promise.all( translationFiles.map(async (translationFile) => { diff --git a/packages/docusaurus/src/server/plugins/index.ts b/packages/docusaurus/src/server/plugins/index.ts index 3da9916c5f..cd996ca462 100644 --- a/packages/docusaurus/src/server/plugins/index.ts +++ b/packages/docusaurus/src/server/plugins/index.ts @@ -52,14 +52,6 @@ export function sortConfig(routeConfigs: RouteConfig[]): void { }); } -export type AllPluginsTranslationFiles = Record< - string, // plugin name - Record< - string, // plugin id - TranslationFiles - > ->; - export async function loadPlugins({ pluginConfigs, context, @@ -96,7 +88,9 @@ export async function loadPlugins({ const contentLoadedTranslatedPlugins: ContentLoadedTranslatedPlugin[] = await Promise.all( contentLoadedPlugins.map(async (contentLoadedPlugin) => { const translationFiles = - (await contentLoadedPlugin.plugin?.getTranslationFiles?.()) ?? []; + (await contentLoadedPlugin.plugin?.getTranslationFiles?.({ + content: contentLoadedPlugin.content, + })) ?? []; const localizedTranslationFiles = await Promise.all( translationFiles.map((translationFile) => localizePluginTranslationFile({ diff --git a/website/docs/lifecycle-apis.md b/website/docs/lifecycle-apis.md index 22a7585c8e..eed9c9650e 100644 --- a/website/docs/lifecycle-apis.md +++ b/website/docs/lifecycle-apis.md @@ -601,7 +601,7 @@ For example, the in docusaurus-plugin-content-docs: ## i18n lifecycles {#i18n-lifecycles} -### `getTranslationFiles()` {#get-translation-files} +### `getTranslationFiles({content})` {#get-translation-files} Plugins declare the JSON translation files they want to use. @@ -619,7 +619,7 @@ module.exports = function (context, options) { return { name: 'my-plugin', // highlight-start - async getTranslationFiles() { + async getTranslationFiles({content}) { return [ { path: 'sidebar-labels', @@ -628,6 +628,7 @@ module.exports = function (context, options) { message: 'Some Sidebar Label', description: 'A label used in my plugin in the sidebar', }, + someLabelFromContent: content.myLabel, }, }, ];