Как стать автором
Обновить

Комментарии 4

Когда-то решали подобную проблему, но пришли к автоматическую генерации xml файлов с ресурсами. Так все получается нативно на R классах с возможностью иметь локализированые версии строк. Правда у нас не было требования менять строки без релиза. Если бы было, то смотрел бы в сторону подмены контекста и ресурсов, вроде когда-то читал статью, в которой так делали.

Ещё добавлю на подумать: некоторые строки могут различаться на разных платформах, поэтому бывает полезно иметь отдельный пулл строк для каждой из них. Это могут быть строки с подстановками (%@/%s), HTML форматированием, ну и просто платформозависимые фичи, например на iOS не нужно объяснить пользователю зачем нам location permission при работе с Bluetooth.

Хмм. Есть какая-то причина не использовать gettext?
То есть тексты в исходниках помечаем маркером (вызовом функции)

val textView = findViewById(R.id.text1)
textView.text = _tr(«Real text which you need to translate on multiple languages»)

Далее натравливаем на исходник xgettext, получаем файл индекса в формате .po и далее уже из этого файла делаем входные данные для вашего класса.
_tr — ваша функция, которая ищет текст в индексе, и если находит — возвращает перевод, а если не находит — то ключ.

С точки зрения лицензионной чистоты, если вы используете только xgettext для получения файлов индекса, и не используете библиотеки gettext — ваш продукт не обязан быть GPL. Всё равно как пользоваться gcc для сборки проприентарного продукта.

Аналогичный подход использует, например, библиотека Qt (Qt Linguist).

Разумеется, использовать можно как для переводов на другие языки, так и для любых других целей.
Кажется gettext решает другую проблему: проблему единого перевода на разные платформы.
И не решает наше требование «Обновление текстов в рантайме при старте приложения (для обновления важных мест без выпуска фиксов/релизов);»
Я говорил про xgettext. Задачей которого является парсинг исходников и создание индекса, содержащего все помеченные в исходник тексты.
Перевод как таковой не обязательно должен быть переводом — вполне можно использовать для замены/исправления текстов, т.е. перевод на тот же язык.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории