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