Як я робив мультимовність на Codeigniter
Рішення проблеми
Загалом, з часом і детальнішим вивченням даного фреймворку, дійшов висновку — мультимовність потрібно робити в роутері.
Принцип роботи мультимовності
Логіка мультимовності, дуже проста. Одна функція в оновлений MY_Router.php, яка додасть на початок усіх правил - мови сайту. Після роботи функції CodeIgniter 3 буде працювати з новим списком route. Вийде приблизно так :)
Але для початку, створимо файл з налаштуваннями, де будемо зберігати доступні мови сайту та встановимо мову за замовчуваннямconfig/localize_config.php
Беремося розширювати стандартний system/core/Router.php.
Розширюємо CI_Router (MX_Router)
Створюємо в каталозіapplication/coreфайлMY_Router.phpЯкщо ви використовуєте HMVC, вам потрібно спочатку завантажити його Router.php На початок MY_Router.php додайте наступний блок коду
2) Після цього створюємо вже розширення класу CI_Router або якщо з HMVC MX_Router
3) А тепер найцікавіше. Нам необхідно розширити стандартну функцію CI_Router ->_set_routing. Можливо, від версії до версії ця функція буде змінюватися розробниками CI, раджу просто розібратися в цих рядках, щоб після будь-якого оновлення фреймворку ваш файл MY_Routing був в актуальному стані. Тим більше вам потрібно додати лише 1 рядок.
Отже почнемо, копіюючи зsystem/core/Router.phpфункцію (метод)_set_routingі вставляємо в наш створений клас MY_Routing. знаходимо рядки, після якої функція підвантажила routes.php
та включаємо в цю ділянку коду наш рядок для зміни отриманих роутерів.
4) А ось і сама функція, яка переробить наші правила під розуміння різних мов.
Тепер ваш сайтбуде розуміти посилання vashsite.com/ru, vashsite.com/ru або vashsite.com (з використанням мови за замовчуванням).
Ви завжди маєте можливість отримати вибрану мову (by, ru. kz), використовуючи нижче описану змінну у своїх контролерах або моделях.
Далі вже справа за вашою фантазією як працювати з user_lang:) все, що потрібно, у вас вже є.
Готовий варіант на bitbucket.org
Хардкорна конфа за С++. Ми запрошуємо лише профі.