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

CLI переводит строковые ресурсы Android. Android-проект хранит строки языка по умолчанию в `res/values/strings.xml`, а каждый перевод — в соседнем каталоге с указанием локали, например `res/values-es/strings.xml`. В переводах сохраняются имена ресурсов, placeholders `<xliff:g>` и inline-разметка, которую отображает приложение.

## Обзор [#overview]

| Тема                                            | Описание                                                            |
| ----------------------------------------------- | ------------------------------------------------------------------- |
| [Конфигурация](#config)                         | Направление базового файла ресурсов в каталоги с указанием локали.  |
| [Квалификаторы каталогов ресурсов](#qualifiers) | Как коды локалей записываются в именах каталогов `values-*`.        |
| [Формы множественного числа](#plurals)          | Перестроение `<plurals>` под категории CLDR каждого целевого языка. |
| [Непереведённые ресурсы](#untranslated)         | Ресурсы, которые CLI оставляет без изменений.                       |

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

Добавьте запись `androidStrings` в раздел `files`. Базовый файл ресурсов в Android — `res/values/strings.xml`; в его пути нет квалификатора локали, поэтому placeholder `[locale]` разместить негде. Укажите в `include` базовый файл и используйте `transform`, чтобы направить переведённый вывод в каталоги с указанием локали:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["es", "fr", "pl"],
  "files": {
    "androidStrings": {
      "include": ["res/values/strings.xml"],
      "transform": {
        "match": "res/values/(.*)",
        "replace": "res/values-{locale}/$1"
      }
    }
  }
}
```

С такой конфигурацией CLI читает `res/values/strings.xml` и записывает `res/values-es/strings.xml`, `res/values-fr/strings.xml` и `res/values-pl/strings.xml`. Полный список ключей файлов см. в [справочнике по конфигурации](/docs/cli/reference/config#files).

Именно такую структуру следует использовать для стандартного Android-проекта, и она отличается от остальных форматов файлов: шаблон вида `res/values-[locale]/strings.xml` разрешает placeholder в ваш `defaultLocale` и ищет `res/values-en/strings.xml`, которого в стандартном проекте нет. Под него не попадает ни один файл, и запуск завершается, ничего не переведя.

Если исходные строки в вашем проекте всё же хранятся в каталоге с квалификатором, например `res/values-en/`, используйте вместо этого форму с placeholder и уберите `transform`:

```json title="gt.config.json"
{
  "files": {
    "androidStrings": {
      "include": ["res/values-[locale]/strings.xml"]
    }
  }
}
```

Для ключа `androidStrings` требуется `gt` версии 2.19.0 или новее.

## Квалификаторы каталогов ресурсов [#qualifiers]

Android извлекает локаль из имени каталога `values-*` и прерывает сборку с ошибкой, если имя разобрать не удаётся, поэтому локаль в пути не всегда записывается так же, как вы указываете её в [`locales`](/docs/cli/reference/config#locales). Для `androidStrings` CLI преобразует локаль в квалификатор ресурсов Android — как в placeholder `[locale]`, так и в placeholder преобразования `{locale}`:

| Настроенная локаль | Каталог ресурсов       |
| ------------------ | ---------------------- |
| `es`               | `res/values-es`        |
| `fr-CA`            | `res/values-fr-rCA`    |
| `zh-Hans`          | `res/values-b+zh+Hans` |
| `es-419`           | `res/values-b+es+419`  |

Subtag региона записывается в legacy-форме `-r`, а subtag системы письма или числовой регион — в форме `b+` из BCP 47. Это преобразование применяется только к `androidStrings`; все остальные форматы файлов используют локаль ровно в том виде, в каком она настроена.

## Формы множественного числа [#plurals]

Строки с количествами в Android — это элементы `<plurals>`, содержащие по одному `<item quantity="...">` на каждую категорию CLDR. Переведённый файл содержит те категории, которые реально используются в целевом языке, а этот набор редко совпадает с исходным. В английском выбор идёт между `one` и `other`, тогда как в польском для целочисленного count используются три формы, в арабском — шесть, а в китайском — одна.

```xml title="res/values/strings.xml"
<plurals name="photo_count">
  <item quantity="one">%d photo</item>
  <item quantity="other">%d photos</item>
</plurals>
```

CLI пересобирает каждый `<plurals>` по правилам CLDR целевого языка, добавляя нужные этому языку категории и убирая те, которые он никогда не выбирает. Android определяет количество исключительно через CLDR, поэтому категория, не используемая целевым языком, недостижима и удаляется — в том числе `zero`, присутствующий в исходнике. Не рассчитывайте, что у переведённого элемента будут те же значения `quantity`, что и в исходном; вместо этого сравнивайте отображаемый результат на характерных значениях счётчика.

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

CLI переводит значения `<string>` и каждый элемент `<string-array>`, если ресурс содержит переводимый текст.

CLI оставляет такие ресурсы в переведённом файле, не отправляя их на перевод:

* Ресурсы с пометкой `translatable="false"` — это стандартный способ исключить API-ключи, названия брендов и отладочные значения. Атрибут сопоставляется так же, как его читает AAPT, поэтому `False` и `FALSE` тоже учитываются.
* Значения без кавычек, текст которых после обрезки пробелов начинается с `@` или `?`, — это означает, что они ссылаются на другой ресурс, а не содержат текст. Значения в кавычках и экранированные значения `\@` остаются переводимыми.
* Ресурс `<plurals>` или `<string-array>` целиком, если хотя бы один его элемент является ссылкой на ресурс. CLI оставляет весь ресурс без изменений, чтобы не создать нерабочую ссылку.
* Типы ресурсов, не содержащие текста для пользователя, например `<bool>`, `<integer>` и `<color>`.

Комментарий над ресурсом передаётся в систему перевода как контекст, поэтому используйте его, чтобы уточнить смысл короткой или многозначной строки.

## Sitemap

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