I18n plugin for VuePress v2
- Fill non-existent pages in translation directories
- Translation outdated alert (based on git or file info)
- HMR support
- Development guide
npm install -D vuepress-plugin-i18nOr using pnpm:
pnpm add -D vuepress-plugin-i18nimport { defineUserConfig } from "vuepress"; import i18nPlugin from "vuepress-plugin-i18n"; export default defineUserConfig({ // ... plugins: [ i18nPlugin({ // plugin options }), ], });interface I18nPluginOptions { /** * Path prefix for source language version * @default "/" */ baseLocalePath?: string; /** * Page filter * @param page VuePress page object * @returns Whether the page should be included */ filter?: (page: Page) => boolean; /** * Custom locales for i18n plugin */ locales?: Record<string, Partial<I18nPluginLocaleData>>; /** * Add tag `untranslated` or `outdated` to page * need to load before [vuepress-plugin-blog2]{@link https://www.npmjs.com/package/vuepress-plugin-blog2} * @default false */ tag?: boolean; /** * Tip container options * @see I18nPluginTipOptions * @default true */ tip?: I18nPluginTipOptions | boolean; /** * Link to translation guide(in default locale) */ translationGuide?: string; /** * Calculate updatedTime when not exist * - `git`: read updated time from git * - `file`: read updated time from file info * - a function: * @param page VuePress page object * @param app VuePress app * @returns a mode name or a timestamp * @note git mode may significantly slow down dev server startup * @default (_page, app) => app.env.isBuild || app.env.isDebug ? "git" : undefined */ updatedTime?: | "git" | "file" | ((page: Page, app: App) => number | undefined | "git" | "file"); } interface I18nPluginTipOptions { /** * Enable tip containers * @default true */ enable?: boolean; /** * Classes of the container div (type of container will always be add) * @default ["custom-container", "hint-container"] */ containerClass?: string[]; /** * Classes of the container title * @default ["custom-container-title", "hint-container-title"] */ titleClass?: string[]; /** * Name for tip component, which will be inserted at the top of the page * NOTE: You need to import your custom component globally by yourself * @default "I18nTip" */ tipComponent: string; }interface I18nPluginLocaleData { /** * @description RFC5646 Language code * @example "en-US", "zh-CN" */ lang: string; untranslated: { /** * @description Title of untranslated page tip */ title: string; /** * Content of the container * @param linkRenderer link rendering helper * @param translationGuide links to translation guides (ignore the relevant section when empty) * @returns localised text */ content: (linkRenderer: LinkRenderer, translationGuide?: string) => string; }; outdated: { /** * @description Title of obsolete page tip */ title: string; /** * Content of the container * @param linkRenderer link rendering helper * @param sourceUpdateTime unix timestamp for source page * @param translationUpdateTime unix timestamp for translation page * @param sourceLink url of the source page * @returns localised text */ content: ( linkRenderer: LinkRenderer, sourceUpdateTime: number, translationUpdateTime: number, sourceLink: string, ) => string; }; } /** * Link rendering helper * @param text link text * @param href target URL * @returns html string */ type LinkRenderer = (text: string, href: string) => string;You can use the useI18nData function to import the i18n information for the current page:
import { useI18nData } from "vuepress-plugin-i18n"; const i18nData = useI18nData(); // will return a computed ref of I18nData console.log(i18nData.value);Type definition of computed property returned:
interface I18nData { isOutdated: boolean; isUntranslated: boolean; locale: I18nPluginLocaleData; options: { baseLocalePath: string; containerClass: string[]; titleClass: string[]; }; pathLocale: string; sourceLink: string | undefined; sourceUpdatedTime: number | undefined; translationGuide: string | undefined; updatedTime: number | undefined; }A common use of this function is to write custom tip component, For an example, please refer to the source code of default component
MIT