# gt: General Translation CLI tool: .resx
URL: https://generaltranslation.com/ru/docs/cli/reference/formats/resx-files.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Перевод файлов ресурсов .NET (.resx и .resw) с помощью General Translation CLI. Справочник API по формату файлов RESX.

CLI переводит строковые ресурсы в файлах .NET `.resx`, а также в файлах `.resw`, использующих ту же схему. В переводах сохраняются имена ресурсов, комментарии, плейсхолдеры .NET и все ресурсы, не содержащие текста. Поддержка доступна начиная с `gt` версии 2.23.1.

## Обзор [#overview]

| Тема                                    | Описание                                                                                 |
| --------------------------------------- | ---------------------------------------------------------------------------------------- |
| [Конфигурация](#config)                 | Сопоставление исходных файлов и именование переводов в соответствии с соглашениями .NET. |
| [Поведение перевода](#behavior)         | Какие ресурсы переводятся, а какие остаются без изменений.                               |
| [Плейсхолдеры](#placeholders)           | Сохранение составного форматирования .NET и именованных плейсхолдеров.                   |
| [Непереведённые ресурсы](#untranslated) | Ресурсы, которые CLI не обрабатывает.                                                    |
| [Кодировка](#encoding)                  | Декодирование и восстановление текстовых кодировок с маркером порядка байтов (BOM).      |
| [Проверка](#validation)                | Пропуск пустых файлов и отклонение документов с некорректным XML.                        |

## Конфигурация [#config]

Добавьте запись `resx` в раздел `files`. В проекте .NET ресурсы на языке по умолчанию хранятся в файле вида `Properties/Resources.resx`, а каждый перевод — в соседнем файле с кодом культуры в имени, например `Properties/Resources.es.resx`. В имени исходного файла нет локали, поэтому укажите его в `include`, а имя переведённого файла задайте с помощью `transform`. Добавьте `exclude` с плейсхолдером `[locales]`, чтобы переведённые соседние файлы не считывались как исходные:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["es", "fr"],
  "files": {
    "resx": {
      "include": ["Properties/*.resx"],
      "exclude": ["Properties/*.[locales].resx"],
      "transform": "*.[locale].resx"
    }
  }
}
```

С такой конфигурацией CLI читает `Properties/Resources.resx` и записывает `Properties/Resources.es.resx` и `Properties/Resources.fr.resx`.

В проектах UWP и WinUI файлы `.resw` хранятся в отдельном каталоге для каждого языка, например `Strings/en-US/Resources.resw`. Для такой структуры используйте плейсхолдер `[locale]` и уберите `transform`:

```json title="gt.config.json"
{
  "defaultLocale": "en-US",
  "locales": ["es-ES", "fr-FR"],
  "files": {
    "resx": {
      "include": ["Strings/[locale]/Resources.resw"]
    }
  }
}
```

Для RESX поддерживается только выходной формат `RESX`: такие файлы нельзя преобразовать в другой формат с помощью `transformationFormat`. Общие ключи для файлов описаны в [справочнике по конфигурации](/docs/cli/reference/config#files).

## Поведение перевода [#behavior]

CLI переводит каждую запись `<data>`, содержащую строку. Переведённый файл — это копия исходного файла, в которой заменены строковые значения, поэтому в нём сохраняются:

* Имена ресурсов и порядок записей
* Записи `<resheader>` и блок схемы
* Ресурсы без текста, например изображения, значки и размеры
* Комментарии и отступы

Элемент `<comment>` в записи передаётся системе перевода как контекст, поэтому с его помощью можно устранить неоднозначность короткой или многозначной строки. Инструкции по локализации Microsoft в комментарии, например `{Locked}` и `{Locked="Power Display"}`, передаются как инструкции, обязательные к выполнению.

Значение, содержащее XML, например комментарий или встроенные теги, переводится как XML и должно оставаться корректно сформированным. Если имя встречается несколько раз, CLI переводит первую запись (именно её читает .NET), а остальные оставляет без изменений.

Существующие переводы неизменённых записей могут использоваться повторно, если вы не запускаете принудительный повторный перевод.

## Плейсхолдеры [#placeholders]

В переводах все плейсхолдеры .NET сохраняются в точности в исходном виде, включая формат и выравнивание:

| Плейсхолдер                 | Пример                     |
| --------------------------- | -------------------------- |
| Составной формат            | `{0}`, `{0:N2}`, `{1,-10}` |
| Именованный плейсхолдер     | `{count}`, `{Name:0.00}`   |
| Литеральная фигурная скобка | `{{` и `}}`                |

Плейсхолдер может менять позицию в предложении в соответствии с порядком слов целевого языка, но должен встречаться столько же раз, сколько в исходном тексте. Если в переводе плейсхолдер изменён или пропущен либо нарушена XML-разметка в значении, содержащем XML, такой перевод не попадает в переведённый файл, и для этой записи .NET использует язык-источник. При следующем запуске перевод будет выполнен повторно.

Одиночный символ `&` перед буквой обозначает клавишу быстрого доступа, например `&File`. В переводе сохраняется один символ `&` перед подходящей буквой переведённого слова.

## Непереведённые ресурсы [#untranslated]

CLI оставляет следующие ресурсы в переведённом файле без изменений и не отправляет их на перевод:

* Записи с атрибутом `mimetype`, содержащие двоичные данные, например изображения
* Записи, у которых атрибут `type` отличается от `System.String`, например `System.Drawing.Size`
* Записи конструктора Windows Forms, имена которых начинаются с `>>`
* Записи с пустым значением

## Кодировка [#encoding]

CLI считывает файлы `.resx` без метки порядка байтов как UTF-8. Если файл начинается с метки порядка байтов (BOM), поддерживаются кодировки UTF-8, UTF-16 с прямым (little-endian) или обратным (big-endian) порядком байтов, а также UTF-32 с прямым или обратным порядком байтов. Visual Studio сохраняет файлы `.resx` в кодировке UTF-8 с BOM. Скачанные переводы сохраняются в той же кодировке и с той же меткой порядка байтов, что и исходный файл.

Файл в кодировке UTF-16 или UTF-32 без BOM обрабатывается как UTF-8. Перед переводом добавьте в него соответствующую метку порядка байтов или пересохраните его в UTF-8.

## Проверка [#validation]

CLI пропускает пустой файл `.resx` и указывает его в сводке по итогам выполнения команды. API отклоняет файл, если он не является корректно сформированным XML или если его корневой элемент отличен от `<root>`.

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
