まず第一に、コメントに感謝します。 多言語の
「モジュール」を作成するために、HabraのユーザーからSkypeからメッセージを定期的に受信するため、このトピックはより多くの関連があると思います。

この投稿は、CodeIgniter 3の多言語の開発にまったく異なるアプローチを使用しているため、現時点では完全に書き直されています。また、投稿は、例と簡単な説明で可能な限り短くしています。
問題解決
一般に、このフレームワークの詳細な研究と時間をかけて、
多言語主義はルーターで行われるべきだという結論に達し
ました 。
多言語主義の原理
多言語主義のロジックは非常に単純です。 更新されたMY_Router.phpの1つの関数で、サイトの言語をすべてのルールの先頭に追加します。 関数が機能した後、CodeIgniter 3は新しいルートリストで機能します。 このようになります:)
だった$route['default_controller'] = "pages/index"; $route['pages/(.+)'] = 'pages/index/$1'; $route['news/(.+)'] = 'news/view/$1';
なります $route['default_controller'] = "pages/index"; $route['(by|ru|kz|en)/pages/(.+)'] = 'pages/index/$2'; $route['(by|ru|kz|en)/news/(.+)'] = 'news/view/$2';
しかし、最初に、サイトの利用可能な言語を保存する設定でファイルを作成し、デフォルトの言語
config / localize_config.phpを設定します
<?php defined('BASEPATH') OR exit('No direct script access allowed'); $config['ROUTE_LOCALIZE'] = array( 'default_key' => 1,
標準システム/コア/Router.phpを拡張することを約束します。
CI_Routerの拡張(MX_Router)
application / core ディレクトリにMY_Router.phpファイルを作成します
HMVCを使用している場合、まずRouter.phpをダウンロードする必要があります
MY_Router.phpの上部に次のコードブロックを追加します
<?php (defined('BASEPATH')) OR exit('No direct script access allowed');
2)その後、CI_Routerクラスの拡張を作成するか、HMVC MX_Routerを使用する場合
class MY_Router extends CI_Router { public $user_lang = ''; public function __construct($routing = NULL) { parent::__construct(); } ... }
3)そして今、最も興味深い。 標準関数CI_Router->
_set_routingを拡張する必要があります。 この機能はCI開発者によってバージョンごとに変更される可能性があります。フレームワークの更新後にMY_Routingファイルが最新になるように、これらの行を把握することをお勧めします。 さらに、1行だけ追加する必要があります。
それでは、始めましょう。関数(メソッド)
_set_routingを
system / core / Router.phpからコピーし、作成したクラスMY_Routingに貼り付けます。
関数がroutes.phpをロードした後の行を見つけます
..... if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/routes.php')) { include(APPPATH.'config/'.ENVIRONMENT.'/routes.php'); }
コードのこのセクションに、受信したルーターを変更するための行を含めます。
4)そして、ここに関数自体があります。これは、異なる言語を理解するためにルールをやり直します。
private function __localize_init( &$route = array() ) {
以上です!
これで、サイトはリンク
vashsite.com/by、vashsite.com/enまたは
vashsite.comを理解します(デフォルトの言語を使用)。
コントローラーまたはモデルで以下に説明する変数を使用して、選択した言語(by、ru、..... kz)を取得する機会が常にあります。
$this->router->user_lang;
それから、user_langをどのように使用するかはあなたの想像次第です:)必要なものはすべて揃っています。
bitbucket.orgの準備
完了バージョン