# 6.1.1：针对 Edgeless 插件的多语言自适应实现方式

Hikari PE V8.0 是一个多语言的项目。

为了能够让 Edgeless 插件同时适应多种语言的 PE（例如 Hikari PE V8.0 TC 繁体中文版），我们建议 Edgeless 插件的开发者针对这一点新增多语言自适应特性。新增此特性不会影响其它兼容 Edgeless 插件的仅有简体中文版的 PE（含 Edgeless 自身）。

{% hint style="info" %}
以下内容也适用于 PE 内其它涉及到多语言自适应配置的部分。\
同样的，如果您对加以修改定制不感兴趣，请勿继续阅读这一章节。
{% endhint %}

我们假设您的插件的内容放置在了 `X:\Program Files\Edgeless\your_plugin_dir` 中。如要实现多语言自适应，除了要在您的插件目录中新建 `Localization` 目录之外，您还需要在 Edgeless 插件的加载脚本（cmd 或 wcs）开头新增以下内容。

针对 CMD 格式的加载脚本开头（注释部分无需复制）：

```
:: 以下命令会将语言代码存入变量 %langcode% 中
for /f "tokens=2* delims= " %%A in ('Reg Query HKLM\System\CurrentControlSet\Control\Nls\Language /v InstallLanguage') do set langcode=%%B
:: 以下命令会读取相关本地化后的代码，以及 fallback
if exist "%ProgramFiles%\Edgeless\your_plugin_dir\Localization\AppName_%langcode%.cmd" (
call "%ProgramFiles%\Edgeless\your_plugin_dir\Localization\AppName_%langcode%.cmd"
) else (
call "%ProgramFiles%\Edgeless\your_plugin_dir\Localization\AppName_0409.cmd"
)
```

&#x20;针对 WCS 格式的加载脚本开头（注释部分无需复制）：

```
// 以下命令会将语言代码存入变量 %langcode% 中
REGI $HKLM\SYSTEM\ControlSet001\Control\Nls\Language\InstallLanguage,langcode
// 以下命令会读取相关本地化后的代码，以及 fallback
IFEX %ProgramFiles%\Edgeless\your_plugin_dir\Localization\AppName_%langcode%.ini,LOAD %ProgramFiles%\Edgeless\MacType\Localization\AppName_%langcode%.ini!LOAD %ProgramFiles%\Edgeless\your_plugin_dir\Localization\AppName_0409.ini
```

位于 `Localization` 目录中的 `AppName_[语言代码].cmd` 或 `AppName_[语言代码].ini` 中，建议填写在特定语言下会如何操作的内容，即将对应语言显示的内容存入变量。以简体中文为例，它的语言代码为 `0804`，因此您需要在 `Localization` 中新建 `AppName_0804.cmd`。

`AppName_0804.cmd` 内容示例（必须保存为对应语言的本地编码，例如 `AppName_0804.cmd` 必须保存为 GBK 编码，`AppName_0404.cmd` 必须保存为 Big5 编码，`AppName_0411.cmd` 必须保存为 Shift-JIS 编码）：

```
set programset001=示例程序组
set my_plugin_name=示例插件名
```

AppName\_0804.ini 内容示例（可保存为 UTF-8 编码）：

```
ENVI programset001=示例程序集
ENVI my_plugin_name=示例插件名
```

如果不希望照顾太多语言，我们建议 Edgeless 开发者开发插件时，至少指定一种 fallback 语言。Hikari Calyx Tech 建议使用美国英语，编码 `0409`，因此您必须要新建 `AppName_0409.cmd` 或 `AppName_0409.ini`。这两个文件可以以 DOS 437 标准编码形式保存。

如需调用以上变量，CMD 或 WCS 各有调用方式。以下调用示例包含创建对应本地化语言名称的快捷方式、将适用于对应语言的程序配置文件改名、以及导入适用于对应语言的注册表的操作。

针对 CMD 格式的加载脚本调用示例：

```
PECMD LINK %Programs%\%programset001%\%my_plugin_name%,%ProgramFiles%\Edgeless\my_plugin_dir\my_plugin.exe
PECMD LINK %Desktop%\%my_plugin_name%,%ProgramFiles%\Edgeless\my_plugin_dir\my_plugin.exe
if exist "%ProgramFiles%\Edgeless\my_plugin_dir\plugincfg_%langcode%.ini" (
MOVE "%ProgramFiles%\Edgeless\my_plugin_dir\plugincfg_%langcode%.ini" "%ProgramFiles%\Edgeless\my_plugin_dir\plugincfg.ini"
) else (
MOVE "%ProgramFiles%\Edgeless\my_plugin_dir\plugincfg_%langcode%.ini" "%ProgramFiles%\Edgeless\my_plugin_dir\plugincfg.ini"
)
if exist "%ProgramFiles%\Edgeless\my_plugin_dir\pluginreg_%langcode%.reg" (
REG IMPORT "%ProgramFiles%\Edgeless\my_plugin_dir\pluginreg_%langcode%.reg"
) else (
REG IMPORT "%ProgramFiles%\Edgeless\my_plugin_dir\pluginreg_0409.reg"
)
```

{% hint style="info" %}
注意，如果调用命令中涉及到管道符号“`|`”的使用，必须要在参数前后添加英文半角双引号，即`"`。

示例：\
`PECMD "TEAM TIPS %my_tips_title%,%my_tips_name%,15000,1,#1|WAIT 15000"`
{% endhint %}

针对 WCS 格式的加载脚本调用示例：

```
LINK %Programs%\%programset001%\%my_plugin_name%,%ProgramFiles%\Edgeless\my_plugin_dir\my_plugin.exe
LINK %Desktop%\%my_plugin_name%,%ProgramFiles%\Edgeless\my_plugin_dir\my_plugin.exe
IFEX %ProgramFiles%\Edgeless\my_plugin_dir\plugincfg_%langcode%.ini,FILE %ProgramFiles%\Edgeless\my_plugin_dir\plugincfg_%langcode%.ini->%ProgramFiles%\Edgeless\my_plugin_dir\plugincfg.ini!FILE %ProgramFiles%\Edgeless\my_plugin_dir\plugincfg_0409.ini->%ProgramFiles%\Edgeless\my_plugin_dir\plugincfg.ini
IFEX %ProgramFiles%\Edgeless\my_plugin_dir\pluginreg_%langcode%.reg,EXEC %SystemRoot%\System32\REG.exe IMPORT "%ProgramFiles%\Edgeless\my_plugin_dir\pluginreg_%langcode%.reg"!EXEC %SystemRoot%\System32\REG.exe IMPORT "%ProgramFiles%\Edgeless\my_plugin_dir\pluginreg_0409.reg"
```

通过读取语言代码，我们就可以实现同一个插件能够同时适应多种语言的 PE。当您具有一定基础时，您在利用语言代码特性制作自适应插件时可以做的更加灵活。

附：常见语言代码

| 语言                       | 系统代码  | 语言代码 |
| ------------------------ | ----- | ---- |
| 简体中文 Simplified Chinese  | zh-CN | 0804 |
| 繁体中文 Traditional Chinese | zh-TW | 0404 |
| 英文 English               | en-US | 0409 |
| 日文 Japanese              | ja-JP | 0411 |
| 韩文 Korean                | ko-KR | 0412 |

更多语言的对应关系，[可在这里找到列表](https://docs.microsoft.com/configmgr/core/servers/deploy/install/language-packs)。
