Як я робив мультимовність на 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

Хардкорна конфа за С++. Ми запрошуємо лише профі.