Как работать со строками и текстовыми ресурсами в Android Studio

В Android строки хранятся в ресурсах (strings.xml) — используйте их вместо хардкода, чтобы упростить локализацию, тестирование и поддержку. В этом материале — конкретные приёмы создания, форматирования и тестирования локалей.

Что такое strings.xml и зачем его использовать

strings.xml (res/values/strings.xml) — единое место хранения всех текстов приложения. Преимущества:

  • централизованное управление текстами;
  • простая локализация: создаёте папки values-;
  • предотвращение хардкода в макетах и коде.

Пример строки:

<string name="welcome_message">Добро пожаловать, %s!</string>

В коде используйте getString или ссылки на ресурс: textView.setText(R.string.app_name) или в Kotlin: text = getString(R.string.welcome_message, userName).

Экранные тексты группируйте по префиксам: dialog_, settings_, error_ — это упростит поиск переводов.

Как хранить и форматировать строки правильно

  1. Используйте плейсхолдеры, а не конкатенацию:
val text = getString(R.string.welcome_message, userName)
  1. Экранируйте апострофы двойным апострофом: Don''t -> "Don't".
  2. Поддерживаемые HTML-теги: , , . Для отображения в TextView применяйте Html.fromHtml() или HtmlCompat.
  3. Для чисел и валют форматируйте через getString или NumberFormat, не через локаль-несовместимые шаблоны:
val price = getString(R.string.price, priceValue) // "Цена: %,.2f ₽"
  1. В Compose используйте stringResource(R.string.key).

Сравнение форматов строк

Сравнение форматов строк

ФорматКогда использоватьПример
Простая строкаСтатичный текст<string name="label">Имя</string>
ФорматированнаяДинамические данные"Привет, %s!"
PluralsСчётчики<plurals name="items">%d товар</plurals>

Локализация и множественные формы (plurals)

Создайте папки res/values-ru/, res/values-en/ и т.д. Android сам подберёт нужную папку по языку устройства; если перевод отсутствует — вернётся дефолтный values.

Пример plurals (русский):

<plurals name="items_count">
    <item quantity="one">%d товар</item>
    <item quantity="few">%d товара</item>
    <item quantity="many">%d товаров</item>
    <item quantity="other">%d товаров</item>
</plurals>

В коде:

val text = resources.getQuantityString(R.plurals.items_count, count, count)

Не храните порядок слов и пробелы в ресурсах извне: избегайте сборки фраз через конкатенацию в коде — это ломает грамматику в переводах.

Интеграция в проект и инструменты проверки

  • В Android Studio: Analyze > Inspect Code — найдёт hardcoded strings.
  • Экспорт переводов: Tools > Export Translations.
  • Тестирование локали: в эмуляторе измените язык (Settings > System > Languages) или используйте adb для переключения.
  • RTL: используйте start/end вместо left/right и тестируйте layoutDirection для арабского и иврита.

Частые ошибки

  • Хардкод в макетах (android:text="...") — Lint считает это проблемой.
  • Конкатенация имён и фраз — ломает порядок слов в других языках.
  • Отсутствие plurals для счётчиков — некорректные формы в русском и других языках.
  • Неэкранированные апострофы — ошибка парсинга resources.

FAQ

  • Как добавить новый язык?
    Создайте res/values-<код>/strings.xml, заполните переводы; Android выберет автоматически.
  • Что если строка не переведена?
    Используется дефолтный strings.xml в res/values/.
  • Как протестировать plural-формы?
    Вызывайте resources.getQuantityString с разными значениями count или используйте переводчиков/псевдолокали для проверки.

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