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

注意:此部分仅针对进阶开发者,一般用户无需理会此部分。

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

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

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

我们假设您的插件的内容放置在了 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"
)

针对 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_[语言代码].cmdAppName_[语言代码].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.cmdAppName_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"
)

注意,如果调用命令中涉及到管道符号“|”的使用,必须要在参数前后添加英文半角双引号,即"

示例: PECMD "TEAM TIPS %my_tips_title%,%my_tips_name%,15000,1,#1|WAIT 15000"

针对 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

更多语言的对应关系,可在这里找到列表