1

Тема: Мова і локалізація CMS

Розробники безкоштовних CMS часто-густо порушують вимоги правил задавання мови і локалізації, через що їх продукт стає практично непрацездатним на зарубіжних хостингах. Доводилося навіть спостерігати проблеми з Opencart в різних браузерах із-за неправильно заданих мовних параметрів. Тому спочатку розробникам CMS слід уважно ознайомитися з наступними засадничими документами:
- Language tags in HTML and XML
http://www.w3.org/International/articles/language-tags/
- Getting Started with the W3C I18n site
http://www.w3.org/International/getting-started/
- BCP 47 links
http://www.w3.org/International/core/la … 66bis.html
- Tags for Identifying Languages
https://tools.ietf.org/html/bcp47
- IANA Language Subtag Registry
http://www.iana.org/assignments/languag … g-registry
- Countries or areas / geographical regions
https://unstats.un.org/unsd/methodology/m49/
https://www.cia.gov/library/publication … dix-d.html
- Techniques index
http://www.w3.org/International/technique-index

Мова і локалізація CMS зазвичай задаються в головному файлі мовної трансляції функцією setlocale()
http://php.net/manual/en/function.setlocale.php
https://www.w3schools.com/php/func_string_setlocale.asp
Увага! Завжди перевіряйте приклади від розробників PHP на відповідність міжнародним стандартам і прикладному програмному забезпеченню клієнта!
Наприклад, в MS Windows немає локали 'uk_UA', але є локали 'ukr' і 'ukrainian'. Також немає сенсу у функції setlocale() задавати кодування UTF-8, яке має автоматично бути присутнім в коді кожної сторінки сайту

<!doctype html>
<html>
<head>
<meta charset="utf-8">
...

Наведу декілька прикладів конкретно для української мови:
- українська мова для регіону Україна

setlocale(LC_ALL, 'uk', 'uk-UA', 'ukr', 'ukr-UA');

- українська мова для регіону Канада

setlocale(LC_ALL, 'uk', 'uk-CA', 'ukr', 'ukr-CA');

- українська мова для регіону Європа

setlocale(LC_ALL, 'uk', 'uk-150', 'ukr', 'ukr-150');

- українська мова для усіх регіонів

setlocale(LC_ALL, 'uk', 'ukr');

або

setlocale(LC_ALL, 'uk', 'uk-001', 'ukr', 'ukr-001');
Подякували: Betterthanyou, leofun01, 0xDADA11C73