それでは、サイト上の多言語組織のオプションは何ですか? 最も単純で明白なオプションは、各言語の「ru」、「en」フォルダーなどを作成することです。 しかし、それはすべてのファイルをコピーすることを意味し、何かを変更した場合、30個すべてのフォルダを変更します...ああ、恐怖、マゾヒストのみがこのトピックを開発できるので、当然、翻訳付きの言語ファイルの変更のみを許可する別の方法を探し始めました。
当然、langパラメーターをルーティングに導入する必要がありました。これは各ルールの先頭にあります。
Route::set('auth', '<lang>/<action>(/<param>)', array('action' => 'login|logout|registration|forgot|start')) ->defaults(array( 'directory' => 'index', 'controller' => 'auth', )); Route::set('static', '<lang>/<action>(/<uri>)', array('action' => 'page|blog|news|forms|polls')) ->defaults(array( 'directory' => 'index', 'controller' => 'static', 'action' => 'page', )); Route::set('default', '(<lang>(/<controller>(/<action>(/<param>))))', array('param' => '.+')) ->defaults(array( 'directory' => 'index', 'controller' => 'static', 'action' => 'index', 'lang' => 'ru' ));
言語ドメインを指定せずにドメインを開くことができるようにlangをデフォルトに設定した最後のルートに注意してください。そうしないと、常に言語ドメイン/ ruを追加するか、毎回リダイレクトする必要があります。
beforeメソッドのメインコントローラーで(おそらくブートストラップでこれを行う方が良いでしょうか?)定数LANGを定義しました。
if ( !defined('LANG') ) { define('LANG', $this->lang()); } // ? $lang_uri = $this->request->param('lang'); // if ( $lang_uri != LANG ) { $this->request->redirect(LANG); } // i18n::lang(LANG . '-' . $this->request->controller());
langメソッドでは、ユーザーのCookieまたはIPによってユーザーの言語を決定します。 翻訳ファイルはapplication / i18n / LANG / controller_name.phpフォルダーにあります。 翻訳をコントローラーに分割します。アクションに従ってそれを行うか、すべてを1つのファイルに入れることができます。それがあなたの魂とプロジェクトのニーズのやり方です。
あとは、HTMLアンカーヘルパーメソッドをオーバーライドするだけです。 これを行うために、クラスフォルダー内のコンテンツを含むhtmlファイルを作成しました。
<?php defined('SYSPATH') or die('No direct script access.'); class HTML extends Kohana_HTML { public static function anchor($uri, $title = NULL, array $attributes = NULL, $protocol = NULL, $index = TRUE) { $uri = LANG . '/'. $uri; return parent::anchor($uri, $title, array $attributes, $protocol, $index); } }
私は常にこの方法でドメインと最初のスラッシュなしのアドレスをフィードします。常にこれを行わない場合は、受信した$ uriを正しい方法で処理する必要があります!
まあ、それだけです。 これで、どこでも、翻訳が必要なフレーズは__()関数で処理する必要があります。 ただし、基本言語を選択する必要があることに注意してください。必要な翻訳がない場合、フレーズはその言語で表示されます。 また、この言語の翻訳ファイルを作成する必要はありません。 そのような言語としてロシア語を選びましたが、英語に切り替えることを考えています。
一部の場所では、この実装は風水ではないかもしれませんが、機能し、非常に柔軟に機能します。 ご清聴ありがとうございました。