翻译 .NET .resx 资源文件
一个 .resx 文件将文本与图标和其他类型化资源混合在一个 XML 文件中。KAERIS 只翻译字符串,其余部分逐字节保留,并检查 {0} 格式项。
KAERIS 翻译了此页面,并通过回译检查了每一行。尚未经过母语人士审阅。 英文原文
.resx 文件是如何构建的
一个带有 <data name="…"><value>…</value></data> 条目的 XML <root>。带有 type 或 mimetype 属性的条目(图标、图像)不是文本。像 SaveButton.Text 这样的名称是 WinForms 中的控件属性。
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype"><value>text/microsoft-resx</value></resheader>
<data name="WelcomeMessage" xml:space="preserve">
<value>Welcome back, {0}!</value>
<comment>{0} is the user's first name</comment>
</data>
<data name="ItemsInCart" xml:space="preserve">
<value>You have {0} items in your cart.</value>
</data>
<data name="SaveButton.Text" xml:space="preserve">
<value>Save and close</value>
</data>
<data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\app.ico;System.Drawing.Icon, System.Drawing</value>
</data>
</root>
.resx 翻译中需要注意的事项
类型化条目不是文本
实际运行中
AppIcon条目是一个文件引用。它会被原样复制到输出中,绝不会被发送进行翻译。格式项
string.Format中的{0}必须保留;在实际运行中两者都保留了,并且会报告缺失的项。键不是文本
像
SaveButton.Text这样的名称是 WinForms 中的控件属性。它们是键:按原样保留,绝不翻译。注释保留在源文件中
<comment>元素不会被带入翻译后的文件中。将注释保留在源资源中。
实际运行:翻译为德语并进行检查
实际运行,27 October 2026,未手动编辑任何内容:kaeris translate Strings.resx --langs de 使用 kaeris 0.2.35,2.6 秒,模型 openai/gpt-4.1-mini(服务的回退模型处理了此任务)。下方是它写入的德语文件以及 kaeris check 的报告。
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="WelcomeMessage" xml:space="preserve">
<value>Willkommen zurück, {0}!</value>
</data>
<data name="ItemsInCart" xml:space="preserve">
<value>Sie haben {0} Artikel in Ihrem Warenkorb.</value>
</data>
<data name="SaveButton.Text" xml:space="preserve">
<value>Speichern und schließen</value>
</data>
<data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\app.ico;System.Drawing.Icon, System.Drawing</value>
</data>
</root>
$ kaeris check --source Strings.resx --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
KAERIS 的处理方式
仅限字符串
类型化和二进制条目按原样保留,如上实际运行所示:
AppIcon条目未更改地返回。拒绝 DTD 和实体
带有 DOCTYPE 或实体声明的文件在解析前被拒绝,这是与 XLIFF 和 Android XML 共享的保护机制。
此格式免费检查
在 /check 上的免费检查可以读取此格式,无需密钥或账户即可运行。终端命令
kaeris check也可以读取它:自 kaeris 0.2.35 起,它支持所有 13 种格式,规则相同,且不会将任何内容发送到任何地方。
分三步运行
安装 CLI
运行
pip install kaeris。翻译资源文件
运行
kaeris translate Resources/Strings.resx --langs de,ja。检查结果
在免费检查页面上上传源文件和翻译后的 .resx 文件。
pip install kaeris kaeris translate Resources/Strings.resx --langs de,ja --verify
问题
图标和其他类型化资源会被处理吗?
不会。带有 type 或 mimetype 属性的条目按原样保留。
元素会被保留吗?
不会:翻译后的文件在没有它们的情况下写入。您的源文件保留了它们。
免费吗?
是的,无需账户:每个文件 10,000 个字符,每次运行最多 8 种语言。免费的 API 密钥可将文件限制提高到 50,000 个字符。一次性付费 79 美元,使用您自己的 OpenRouter 密钥;月度套餐起价为 19 美元。价格
我可以在终端或 CI 中运行它吗?
是的。pip install kaeris,然后 kaeris translate Resources/Strings.resx --langs de,ja。GitHub Action 在拉取请求中运行相同的翻译。 CLI 文档 · GitHub Action
继续
CLI 参考 · 检查参考 · 在浏览器中翻译 · 免费检查 · 格式转换 · 伪本地化
其他格式: JSON · YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · CSV · Markdown · Fluent · Android XML