Storybook-i18n
Storybook 中最佳實踐 i18n 擴充功能的函式庫
- 易於使用的地區設定配置
- 簡單的下拉式選單
- 可分享的 URL 連結狀態
版本
- 2.x 適用於 Storybook
>=7.0.0
- 3.x 適用於 Storybook
>=8.0.0
- 3.1.x 適用於 Storybook
>=8.2.0
擴充功能作者
身為擴充功能作者,您可以透過將此函式庫新增為相依性,並將以下內容新增至您的 src/manager.ts
和 src/preview.ts
檔案來使用它
src/manager.ts
export * from 'storybook-i18n/manager';
src/preview.ts
import type { Renderer, ProjectAnnotations } from '@storybook/types';
import i18n from 'storybook-i18n/preview';
import { withYourI18nDecorator } from './withYourDecorator';
// @ts-ignore
const i18nDecorators = i18n?.decorators || [];
const preview: ProjectAnnotations<Renderer> = {
...i18n,
decorators: [...i18nDecorators, withYourI18nDecorator],
}
export default preview;
由於 Storybook 的問題(待解決),您需要在裝飾器程式碼行上方加上 @ts-ignore
。
目前選取的地區設定在 locale
全域變數中可用,因此您可以使用以下程式碼片段在裝飾器中存取它
import { MyProvider } from 'your-i18n-library';
import { useGlobals } from '@storybook/manager-api';
const myDecorator = (story, context) => {
const [{locale}] = useGlobals();
return <MyProvider locale={locale}>;
}
終端使用者
終端使用者在 .storybook/preview.ts
中配置 locales
和 locale
全域變數。
從 Storybook 8.2 開始,您應該使用 initialGlobals
而不是 globals
。
locales
是一個物件,其中索引鍵是地區設定/語言的「ID」,而值是您想要使用的該地區設定的純文字名稱。這將顯示在工具列中的下拉式選單中。
const preview: Preview = {
initialGlobals: {
locale: "en",
locales: {
en: "English",
fr: "Français",
ja: "日本語",
},
},
};
使用者也可以使用完整的地區設定字串。
const preview: Preview = {
initialGlobals: {
locale: "en_US",
locales: {
en_US: "English (US)",
en_GB: "English (GB)",
fr_FR: "Français",
ja_JP: "日本語",
},
},
};
locales
物件的值也可以是具有 title
、icon
和/或 right
索引鍵的物件。
如果您想在左側和/或右側包含表情符號旗幟或其他字串,這會很有用。
例如
const preview: Preview = {
initialGlobals: {
locale: 'en',
locales: {
en: {icon: '🇺🇸', title: 'English', right: 'US'},
fr: {icon: '🇫🇷', title: 'Français', right: 'FR'},
ja: {icon: '🇯🇵', title: '日本語', right: 'JP'},
},
},
};
或者像這樣
const preview: Preview = {
initialGlobals: {
locale: 'en_US',
locales: {
en_US: {title: 'English', right: 'US'},
en_GB: {title: 'English', right: 'GB'},
fr_FR: {title: 'Français', right: 'FR'},
ja_JP: {title: '日本語', right: 'JP'},
},
},
};
當地區設定變更時,會在 addons-channel 上發出事件
。
您可以在 preview.ts 中訂閱此事件
,自行設定與您的 i18n 設定相關的全域環境設定。
該事件會以選取的地區設定做為參數
發出。
您的實作可能如下所示
import { addons } from '@storybook/preview-api'
addons.getChannel().on('LOCALE_CHANGED', (newLocale) => {
changeMyI18nConfig(newLocale)
});
擴充功能應該指示它們使用您的 i18n 實作期望的格式。