跳转到内容

国际化

NPM Version

国际化插件,基于 Vue I18n,它可以轻松地将国际化功能集成到你的 WinJS 应用程序之中。适用于 Vue3。

开启方式

  1. 安装插件
bash
$ npm add @winner-fed/plugin-locale -D
bash
$ yarn add @winner-fed/plugin-locale -D
bash
$ pnpm add @winner-fed/plugin-locale -D
bash
$ bun add @winner-fed/plugin-locale -D
  1. 在配置文件中 .winrc 中开启该功能
ts
import { defineConfig } from 'win';

export default defineConfig({
  plugins: ['@winner-fed/plugin-locale'],
  /**
   * @name 国际化插件
   * @description 基于 vue-i18n 的请求插件
   * @doc https://winjs-dev.github.io/winjs-docs/plugins/i18n.html
   */
  locale: {},
  // 或使用 i18n 字段配置
});

开始使用

国际化插件采用约定式目录结构,我们约定在 src/locales[i18n] 目录下引入多语言文件。

多语言文件的命名需遵循此规范:<lang><separator><COUNTRY>.(js|json|ts)。其中,<separator> 为分隔符,默认为 -,可以通过 baseSeparator 项配置。

例如,如果您需要在项目中引入简体中文和英文的多语言支持,可以在 src/locales 目录下创建 zh-CN.tsen-US.ts 两个文件:

diff
src
  + locales
    + zh-CN.ts
    + en-US.ts
  pages

.winrc.ts 中配置国际化插件:

ts
export default {
  locale: {
    // 默认使用 src/locales/zh-CN.ts 作为多语言文件
    default: 'zh-CN',
    baseSeparator: '-',
  },
};

关于配置的更多介绍可参见配置插件章节。

现在,添加您的第一条多语言内容:

ts
// src/locales/zh-CN.ts
export default {
  welcome: '欢迎光临 WinJS 的世界!',
};
ts
// src/locales/en-US.ts
export default {
  welcome: "Welcome to WinJS's world!",
};
ts
// src/locales/zh-TW.ts
export default {
  welcome: "歡迎光臨 WinJS 的世界!",
};

您也可以使用 .json 文件来存放多语言的内容:

json
// src/locales/zh-CN.json
{
  "welcome": "欢迎光临 WinJS 的世界!"
}

// src/locales/en-US.json
{
  "welcome": "Welcome to WinJS's world!"
}

// src/locales/zh-TW.json
{
  "welcome": "歡迎光臨 WinJS 的世界!"
}

一切就绪,现在您可以在 WinJS 中使用多语言内容。

vue
<template>
  <div>
    <h2>Hi! Welcome to Winjs ❤️ Vue!</h2>
    <p>
      <img src="@/assets/img/logo.png" width="200" height="200" alt="logo" />
    </p>
    <div>
      {{ t('welcome') }}
    </div>
    <div>
      <button @click="setLocale('en-US')"
      >en-US</button
      >
      <br>
      <button @click="setLocale('zh-CN')"
      >zh-CN</button
      >
      <br>
      <button @click="setLocale('zh-TW')"
      >zh-TW</button
      >
    </div>
    <p>To get started, edit <code>pages/index.vue</code> and save to reload.</p>
  </div>
</template>

<script setup lang="ts">
import { setLocale, useI18n } from 'winjs';
const { t, locale } = useI18n();
</script>

渲染的结果如下:

html
<!-- zh-CN -->
<div>欢迎光临 WinJS 的世界!</div>

<!-- en-US -->
<div>Welcome to WinJS's world!</div>

<!-- zh-TW -->
<div>歡迎光臨 WinJS 的世界!</div>

切换语言

通过提供的 setLocale() 接口可以帮助您快速地向项目中添加切换语言的功能。

ts
import { setLocale } from 'winjs';

setLocale('en-US');

如果需要切换为默认的语言,只需要调用此方法而不用传递任何参数:

ts
// 如果您的默认语言为 zh-CN
// 那么以下调用具有与 setLocale('zh-CN') 同样的效果
setLocale();

常用接口介绍

addLocale 动态添加多语言支持

无需创建并编写单独的多语言文件,使用 addLocale() 接口可以在运行时动态添加语言支持。它接受两个参数:

参数类型介绍
localeString多语言的名称, 符合 <lang>-<COUNTRY> 规范的名称
messagesObject多语言的内容对象

例如,您想要动态引入繁体中文的多语言支持,可以编写代码如下:

ts
import { addLocale } from 'winjs';

addLocale({ locale: 'ja-JP', messages: { lang: '言語', test: 'テスト' } });

setLocale 设置语言

通过 setLocale() 接口可以使用编程的方法动态设置当前的语言。它有两个参数:

参数类型介绍
langString切换到的语言
ts
import { setLocale } from 'winjs';

setLocale('en-US');

useI18n

Composition API, 只能在 setup 函数中使用,更多细节参考 Vue I18n。  举个 🌰:

vue
<template>
  <div>
    {{ t('lang') }}:
    {{ t('test') }}
  </div>
</template>

<script lang="ts" setup>
import { useI18n } from 'winjs';

const { t, locale } = useI18n();
</script>

useI18n()返回结果是 Composer,提供类似 tnd 等转换函数,在模板中使用。

配置插件

您可以在 .winrc.ts 中配置国际化插件。默认值如下:

ts
export default {
  locale: {
    baseSeparator: '-',
    default: 'zh-CN'
  },
};

配置的详细介绍如下:

配置项类型默认值介绍
baseSeparatorString-语言(Language)与国家(Country) 之间的分割符。默认情况下为 -,返回的语言及目录文件为 zh-CNen-USsk 等。若指定为 _,则 default 默认为 zh_CN
defaultStringzh-CN项目默认语言。当检测不到具体语言时,使用 default 设置的默认语言。

基于 MIT 许可发布