<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.lessokaji.com/index.php?action=history&amp;feed=atom&amp;title=%E8%87%AA%E5%8A%A8I18N%EF%BC%88%E5%A4%9A%E8%AF%AD%E8%A8%80%E5%8A%9F%E8%83%BD%EF%BC%89</id>
	<title>自动I18N（多语言功能） - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.lessokaji.com/index.php?action=history&amp;feed=atom&amp;title=%E8%87%AA%E5%8A%A8I18N%EF%BC%88%E5%A4%9A%E8%AF%AD%E8%A8%80%E5%8A%9F%E8%83%BD%EF%BC%89"/>
	<link rel="alternate" type="text/html" href="https://wiki.lessokaji.com/index.php?title=%E8%87%AA%E5%8A%A8I18N%EF%BC%88%E5%A4%9A%E8%AF%AD%E8%A8%80%E5%8A%9F%E8%83%BD%EF%BC%89&amp;action=history"/>
	<updated>2026-04-15T17:57:08Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.lessokaji.com/index.php?title=%E8%87%AA%E5%8A%A8I18N%EF%BC%88%E5%A4%9A%E8%AF%AD%E8%A8%80%E5%8A%9F%E8%83%BD%EF%BC%89&amp;diff=973&amp;oldid=prev</id>
		<title>Artheru：​创建页面，内容为“原理：编译时自动遍历字符串和Attribute并将引用部分作IL变更以获得正确字符串。  使用方法：使用LessokajiWeaver时会自动处理，无需声明。  编译后会生成一个$工程名$_i18n.json的文件，它列举了全部的字符串和可多语言的Attribute。增加更多语言就改这个json即可。&lt;syntaxhighlight lang=&quot;json&quot;&gt; [ {&quot;DocumentAttribute.Name@TestApp.Program&quot;:{&quot;default&quot;:&quot;capture1&quot;,&quot;zh&quot;:&quot;捕捉！&quot;}}, {&quot;Docu…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.lessokaji.com/index.php?title=%E8%87%AA%E5%8A%A8I18N%EF%BC%88%E5%A4%9A%E8%AF%AD%E8%A8%80%E5%8A%9F%E8%83%BD%EF%BC%89&amp;diff=973&amp;oldid=prev"/>
		<updated>2025-09-09T10:13:00Z</updated>

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