Перевод файлов ресурсов .NET .resx
Файл .resx смешивает текст с иконками и другими типизированными ресурсами в одном XML. KAERIS переводит только строки, оставляет остальное без изменений и проверяет элементы формата {0}.
Эту страницу перевёл KAERIS и проверил каждую строку обратным переводом. Носитель языка ещё не проверял. Оригинал на английском
Как устроен файл .resx
XML <root> с записями <data name="…"><value>…</value></data>. Запись с атрибутом 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в реальном примере ниже — ссылка на файл. Она копируется в выходной файл без изменений и не отправляется на перевод.Элементы формата
{0}вstring.Formatдолжны сохраниться; в примере ниже оба вернулись, а отсутствие элемента было бы отмечено.Ключи — не текст
Имена типа
SaveButton.Text— свойства элементов управления WinForms. Это ключи: сохраняются без изменений, не переводятся.Комментарии остаются в исходнике
<comment>не переносятся в переведённый файл. Сохраняйте заметки для переводчиков в исходном ресурсе.
Реальный запуск: переведено на немецкий и проверено
Реальный запуск, 27 октября 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также считывает его: она обрабатывает все 13 форматов начиная с kaeris 0.2.35, с теми же правилами и без отправки данных куда-либо.
Выполните в три шага
Установите 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 выполняет тот же перевод в pull request. Документация CLI · GitHub Action
Продолжайте
Справочник по CLI · Справочник по проверке · Перевести в браузере · Бесплатная проверка · Конвертировать форматы · Псевдолокализация
Другие форматы: JSON · YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · CSV · Markdown · Fluent · Android XML