Internationalization 
Internationalization plugin based on Vue I18n, which can easily integrate internationalization functionality into your WinJS applications. Compatible with Vue 3.
Setup 
- Install the plugin
 
$ npm add @winner-fed/plugin-locale -D$ yarn add @winner-fed/plugin-locale -D$ pnpm add @winner-fed/plugin-locale -D$ bun add @winner-fed/plugin-locale -D- Enable this feature in the 
.winrcconfiguration file 
import { defineConfig } from 'win';
export default defineConfig({
  plugins: ['@winner-fed/plugin-locale'],
  /**
   * @name Internationalization plugin
   * @description Locale plugin based on vue-i18n
   * @doc https://winjs-dev.github.io/winjs-docs/plugins/i18n.html
   */
  locale: {},
  // Or use the i18n field for configuration
});Getting Started 
The internationalization plugin uses a conventional directory structure. We conventionally introduce multi-language files in the src/locales[i18n] directory.
The naming of multi-language files must follow this specification: <lang><separator><COUNTRY>.(js|json|ts). Where <separator> is the separator, which defaults to - and can be configured through the baseSeparator option.
For example, if you need to introduce multi-language support for Simplified Chinese and English in your project, you can create two files zh-CN.ts and en-US.ts in the src/locales directory:
src
  + locales
    + zh-CN.ts
    + en-US.ts
  pagesConfigure the internationalization plugin in .winrc.ts:
export default {
  locale: {
    // Use src/locales/zh-CN.ts as the default multi-language file
    default: 'zh-CN',
    baseSeparator: '-',
  },
};For more information about configuration, see the Plugin Configuration section.
Now, add your first multi-language content:
// src/locales/zh-CN.ts
export default {
  welcome: '欢迎光临 WinJS 的世界!',
};// src/locales/en-US.ts
export default {
  welcome: "Welcome to WinJS's world!",
};// src/locales/zh-TW.ts
export default {
  welcome: "歡迎光臨 WinJS 的世界!",
};You can also use .json files to store multi-language content:
// 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 的世界!"
}Everything is ready. Now you can use multi-language content in WinJS.
<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>The rendered result is as follows:
<!-- zh-CN -->
<div>欢迎光临 WinJS 的世界!</div>
<!-- en-US -->
<div>Welcome to WinJS's world!</div>
<!-- zh-TW -->
<div>歡迎光臨 WinJS 的世界!</div>Switching Languages 
The provided setLocale() interface can help you quickly add language switching functionality to your project.
import { setLocale } from 'winjs';
setLocale('en-US');If you need to switch to the default language, simply call this method without passing any parameters:
// If your default language is zh-CN
// Then the following call has the same effect as setLocale('zh-CN')
setLocale();Common API Introduction 
addLocale Dynamically Add Multi-language Support 
Without creating and writing separate multi-language files, you can use the addLocale() interface to dynamically add language support at runtime. It accepts two parameters:
| Parameter | Type | Description | 
|---|---|---|
locale | String | The name of the multi-language, a name that conforms to the <lang>-<COUNTRY> specification | 
messages | Object | The content object of the multi-language | 
For example, if you want to dynamically introduce multi-language support for Japanese, you can write the code as follows:
import { addLocale } from 'winjs';
addLocale({ locale: 'ja-JP', messages: { lang: '言語', test: 'テスト' } });setLocale Set Language 
The setLocale() interface can be used to programmatically set the current language dynamically. It has one parameter:
| Parameter | Type | Description | 
|---|---|---|
lang | String | The language to switch to | 
import { setLocale } from 'winjs';
setLocale('en-US');useI18n 
Composition API, can only be used in the setup function. For more details, refer to Vue I18n. Example:
<template>
  <div>
    {{ t('lang') }}:
    {{ t('test') }}
  </div>
</template>
<script lang="ts" setup>
import { useI18n } from 'winjs';
const { t, locale } = useI18n();
</script>useI18n() returns a Composer, which provides conversion functions like t, n, d, etc., for use in templates.
Plugin Configuration 
You can configure the internationalization plugin in .winrc.ts. The default values are as follows:
export default {
  locale: {
    baseSeparator: '-',
    default: 'zh-CN'
  },
};Detailed configuration descriptions are as follows:
| Configuration Item | Type | Default Value | Description | 
|---|---|---|---|
baseSeparator | String | - | The separator between Language and Country. By default, it is -, and the returned language and directory files are zh-CN, en-US, sk, etc. If specified as _, then default defaults to zh_CN. | 
default | String | zh-CN | The project's default language. When a specific language cannot be detected, the default language set in default is used. | 
