Доброго часу доби! Представляю вашій увазі вільний переклад статті від GDE (Google developer expert) Dmytro Danylyk. Власне, ось оригінал. Стаття описує правильні підходи для роботи зі strings.xml і особливо корисно це буде розробникам, які розробляють мультимовні програми. Прошу під палицю.
Ця стаття про таку тривіальну річ android як string.xml.
Не використовуйте повторно
Не використовуйте повторно рядки для різних екранів
Давайте уявимо, що у вас є loading dialog на Sign In або Sign Up екрані. Оскільки обидва екрани мають loading dialog, ви вирішуєте використовувати ті ж рядки - R.string.loading.
res/values/strings.xml.
Пізніше, якщо ви вирішите використовувати різні, вам потрібно буде створити 2 різні рядки і модифікувати їх, безпосередньо, в .java класах. Якщо ви використовуєте різні рядки з початку - вам би довелося модифікувати лише strings.xml файл.
res/values/strings.xml
Ви ніколи не будете заздалегідь знати підтримку і переклад якої мови вам належить додати. Вся справа в контексті: в одній мові ви можете використовувати також слово в одному контексті, але в іншій - це слово за змістом не буде підходити.
res/values/strings.xml
res/values-UA/strings.xml
Зверніть увагу, що в даному випадку англійська версія strings.xml використовує теж саме слово - «Yes» для обох випадків R.string.download_file_yes і R.string.terms_of_use_yes strings.
Але український варіант strings.xml використовує 2 різних слова - «Гаразд» для R.string.download_file_yes і «Так» для R.string.terms_of_use_yes.
Розділяйте
Розділяйте рядки, які стосуються одного екрана за допомогою префіксів та коментарів
res/values/strings.xml
- Додайте префікс як назву екрана до кожного рядка для простішого розуміння якого екрану стосується цей ресурс.
- Чистийxml файл допоможе досить легко підтримувати і перекладати різні мови - екран за екраном.
Створення різних strings.xml для кожного екрана
Якщо ви хочете, ви можете створити string.xml файл для кожного екрану - settings-strings.xml, profile-strings.xml. Але зазвичай додаток має близько 10-20 екранів, відповідно, потрібно мати 10-20 string.xml файлів у кожній мовній теці. Я думаю, що це буде пов'язано з безладом.
Форматування
Використовуйте Resources # getString (int id, Object... 1916 atArgs) для форматування рядків
Ніколи не робіть конкатенації через + оператор, оскільки в інших мовах порядок слів може варіюватися.
res/values/strings.xml
java code
Правильний шлях - використовувати Resources # getString (int id, Object... formatArgs).
res/values/strings.xml
res/values-UA/strings.xml
java code
Численні числа
Використовуйте Resources # getQuantityString (int id, int quantity) для кількості рядків
Не вирішуйте проблеми з численним числом в java коді, оскільки різні мови мають різні правила для узгодження множинного числа
res/values/strings.xml
java code
Правильний шлях це використовувати Resources # getQuantityString (int id, int quantity)
res/values/strings.xml
java code
Підстветка слів
Використовуйте html text для підсвічування статичних слів
Якщо ви хочете змінити колір деяких слів у TextView - ForegroundColorSpan не завжди найкращий варіант, оскільки підсвічування виконується через індекс і це не безпечно в мультимовній програмі. Краще використовувати html font color tags всередині вашого strings.xml файла.
Уявімо, у вас є текст «Discover and play games», і ви хочете виділити «Discover» слово і «play» слово синім кольором.
res/values/strings.xml
java code















