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_[语言代码].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"
)
注意,如果调用命令中涉及到管道符号“|
”的使用,必须要在参数前后添加英文半角双引号,即"
。
示例:
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。当您具有一定基础时,您在利用语言代码特性制作自适应插件时可以做的更加灵活。
附:常见语言代码
更多语言的对应关系,可在这里找到列表。