From 6c03a1dd3141661f41f07a1cd1d7717df01629bb Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Fri, 21 Nov 2025 12:14:04 +0800 Subject: [PATCH] perf: add supports for showing multilingual plugin README --- .../plugin-detail-dialog/PluginDetailDialog.tsx | 11 ++++++++--- web/src/app/infra/http/CloudServiceClient.ts | 2 ++ web/src/i18n/I18nProvider.tsx | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/web/src/app/home/plugins/components/plugin-market/plugin-detail-dialog/PluginDetailDialog.tsx b/web/src/app/home/plugins/components/plugin-market/plugin-detail-dialog/PluginDetailDialog.tsx index 5fda170a..454b27e8 100644 --- a/web/src/app/home/plugins/components/plugin-market/plugin-detail-dialog/PluginDetailDialog.tsx +++ b/web/src/app/home/plugins/components/plugin-market/plugin-detail-dialog/PluginDetailDialog.tsx @@ -11,7 +11,7 @@ import { useTranslation } from 'react-i18next'; import { toast } from 'sonner'; import { PluginV4 } from '@/app/infra/entities/plugin'; import { getCloudServiceClientSync } from '@/app/infra/http'; -import { extractI18nObject } from '@/i18n/I18nProvider'; +import { extractI18nObject, getAPILanguageCode } from '@/i18n/I18nProvider'; import PluginComponentList from '@/app/home/plugins/components/plugin-installed/PluginComponentList'; interface PluginDetailDialogProps { @@ -54,11 +54,16 @@ export default function PluginDetailDialog({ ); setPlugin(detailResponse.plugin); - // 获取README + // 获取README,根据当前语言设置传递language参数 setIsLoadingReadme(true); try { + const languageCode = getAPILanguageCode(); const readmeResponse = - await getCloudServiceClientSync().getPluginREADME(author, pluginName); + await getCloudServiceClientSync().getPluginREADME( + author, + pluginName, + languageCode, + ); setReadme(readmeResponse.readme); } catch (error) { console.warn('Failed to load README:', error); diff --git a/web/src/app/infra/http/CloudServiceClient.ts b/web/src/app/infra/http/CloudServiceClient.ts index a1eb38e3..1c0e9527 100644 --- a/web/src/app/infra/http/CloudServiceClient.ts +++ b/web/src/app/infra/http/CloudServiceClient.ts @@ -61,9 +61,11 @@ export class CloudServiceClient extends BaseHttpClient { public getPluginREADME( author: string, pluginName: string, + language?: string, ): Promise<{ readme: string }> { return this.get<{ readme: string }>( `/api/v1/marketplace/plugins/${author}/${pluginName}/resources/README`, + language ? { language } : undefined, ); } diff --git a/web/src/i18n/I18nProvider.tsx b/web/src/i18n/I18nProvider.tsx index 55fcd4c8..91c78b09 100644 --- a/web/src/i18n/I18nProvider.tsx +++ b/web/src/i18n/I18nProvider.tsx @@ -37,3 +37,20 @@ export const extractI18nObject = (i18nObject: I18nObject): string => { '' ); }; + +// 工具函数:将 i18n 语言代码转换为 API 语言代码 +// i18n 使用:zh-Hans, en-US, ja-JP +// API 使用:zh_Hans, en, ja_JP +export const getAPILanguageCode = (): string => { + const language = i18n.language; + // zh-Hans -> zh_Hans + if (language === 'zh-Hans') return 'zh_Hans'; + // zh-Hant -> zh_Hant + if (language === 'zh-Hant') return 'zh_Hant'; + // en-US -> en + if (language === 'en-US') return 'en'; + // ja-JP -> ja_JP + if (language === 'ja-JP') return 'ja_JP'; + // 默认返回 en + return 'en'; +};