Android string.xml - кілька речей, які варто пам'ятати

Android string.xml - кілька речей, які варто пам'ятати

Доброго часу доби! Представляю вашій увазі вільний переклад статті від 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

  1. Додайте префікс як назву екрана до кожного рядка для простішого розуміння якого екрану стосується цей ресурс.
  2. Чистий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

logo