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.
image
res/values/strings.xml.
Пізніше, якщо ви вирішите використовувати різні, вам потрібно буде створити 2 різні рядки та модифікувати їх, безпосередньо, в .java класах. Якщо ви використовуєте різні рядки з початку — вам би довелося модифікувати лише strings.xml файл.
image
res/values/strings.xml
Ви ніколи не будете заздалегідь знати підтримку і переклад якої мови вам потрібно додати. Вся справа в контексті: в одній мові ви можете використовувати теж слово в одному контексті, але в іншому — це слово за змістом не буде підходити.
image
res/values/strings.xml
image
res/values-UA/strings.xml
Зверніть увагу, що в даному випадку англійська версія strings.xml використовує теж саме слово «Yes» для обох випадків R. string.download_file_yesR. string.terms_of_use_yes strings.
Але український варіант strings.xml використовує 2 різних слова — «Гаразд» для R. string.download_file_yes «Так» для R. string.terms_of_use_yes.
Розділяйте
Розділяйте рядки, які відносяться до одного екрану за допомогою префіксів і коментарів
image
res/values/strings.xml
  1. Додайте префікс у вигляді імені екрану до кожної рядку для більш негайного розуміння до якого екрану відноситься даний ресурс.
  2. Чистий string.xml файл допоможе досить легко підтримувати і переводити різні мови — екран за екраном.
Створення різних strings.xml для кожного екрану
Якщо ви хочете, ви можете створити string.xml файл для кожного екрану — settings-strings.xml, profile-strings.xml. Але зазвичай додаток має близько 10-20 екранів, відповідно, потрібно мати 10-20 string.xml файлів у кожної мовної папці. Я думаю, що це буде пов'язане з безладом.
Форматування
Використовуйте Resources#getString(int id Object… formatArgs) для форматування рядків
Ніколи не робіть конкатенацию через + оператор, оскільки в інших мовах порядок слів може змінюватись.
image
res/values/strings.xml
image
java code
Правильний шлях — використовувати Resources#getString(int id Object… formatArgs).
image
res/values/strings.xml
image
res/values-UA/strings.xml
image
java code
Множина
Використовуйте Resources#getQuantityString(int id int quantity) для кількісних рядків
Не вирішуйте проблеми з множиною в коді java, оскільки різні мови мають різні правила для узгодження множини
image
res/values/strings.xml
image
java code
Правильний шлях це використовувати Resources#getQuantityString(int id int quantity)
image
res/values/strings.xml
image
java code
Підсвічування слів
Використовуйте html text для підсвічування статичний слів
Якщо ви хочете змінити колір деяких слів у TextView — ForegroundColorSpan не завжди кращий варіант, тому як підсвічування виконується через індекс і це не безпечно в мультиязыковом додатку. Краще використовувати html font color tags всередині вашого strings.xml файлу.
Уявімо у вас є текст «Discover and play games.» і ви хочете виділити «Discover» слово і «play» слово синім кольором.
image
res/values/strings.xml
image
java code
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.