自动I18N(多语言功能)
跳到导航
跳到搜索
原理:编译时自动遍历字符串和Attribute并将引用部分作IL变更以获得正确字符串。
使用方法:使用LessokajiWeaver时会自动处理,无需声明。
编译后会生成一个$工程名$_i18n.json的文件,它列举了全部的字符串和可多语言的Attribute。增加更多语言就改这个json即可。
[
{"DocumentAttribute.Name@TestApp.Program":{"default":"capture1","zh":"捕捉!"}},
{"DocumentAttribute.Description@TestApp.Program":{"default":"start capture lidar data1"}},
{"TestApp.Program.Main(args)[0]":{"default":"zh"}},
{"TestApp.Program.Main(args)[1]":{"default":"Cool!","zh":"牛啊!"}},
{"TestApp.Program.Main(args)[2]":{"default":"x"}},
{"TestApp.Program.Main(args)[3]":{"default":","}},
]
再次编译就会将该json的多语言翻译写入到生成的二进制程序中。
另外:程序中的字符串可直接正常使用,会被自动替换。但对于Attribute的翻译,获取CustomAttribute后并不能直接翻译(它是c#的metadata的一部分,无法运行时更改),因此需要人工获取Attribute的翻译。LessokajiWeaver中提供了专门的DocumentAttribute用于获取翻译文档。以下为例子:
[Document(Description = "时间偏移毫秒")] public int time_bias_ms = 0;
//使用GetDocument()方法来获取Attribute的翻译内容。
var translated = typeof(X).GetField().GetDocument().Description;
//程序启动时,使用以下代码切换语言:
I18N.LoadI18N("en");