PHPixieアマルガマ-PHPixieの国際化

私は仕事でPHPixieをかなり長い間使用しており、非常に満足しています。私が見逃したのは多言語のサポートだけでした。 私はカザフスタンで働いているので、ほとんどの顧客は、特に政府機関のために、ウェブサイトでいくつかのローカライズを望んでいます。 PHPixieは私の最初のフレームワークであり、他のものに切り替えたくありませんでした(古いKohanでほとんど変更したことは認めますが)し、多言語を実現するために「“い松葉杖」を書きました。 この記事では、共有することにした新しい非常に便利でエレガントな「松葉杖」、つまり「PHPixie Amalgama」モジュールに焦点を当てます。

モジュールについて


武器庫では、モジュールは、ラインフィードを操作するための基本的な機能と、ルートで言語パラメーターを処方したくない人のための小さな拡張機能を備えています。 このモジュールは、インストールが簡単で、設定が簡単で、多くのタスクに便利です。

インストールとセットアップ


次のように、「composer.json」ファイルの「require」セクションにパッケージを登録します。

"phpixie/amalgama": "2.*@dev" 

サイトのディレクトリで次のコマンドを実行します。

 php composer.phar update -o --prefer-dist 

amalgama.php構成を/ asset / config /に追加し、設定を書き込みます。

 return array( //    'list' => array('en', 'ru', 'kk'), //    'default' => 'en', // ,     'autorouting' => true, //    ,      'autoroutingExcept' => '^admin_' ); 

Pixie.phpを拡張します。

 namespace App; class Pixie extends \PHPixie\Amalgama\Pixie { ... protected function after_bootstrap() { parent::after_bootstrap(); } } 

そこで、次のようにモジュールを定義します。

 protected $modules = array( ... 'amalgama' => '\PHPixie\Amalgama' ); 

基本コントローラーを拡張します。

 <?php namespace App; class Page extends \PHPixie\Amalgama\Controller { public function before() { parent::before(); ... } ... } 

自動ルーティングがfalseの場合、ルートを決定します。

 'default' => array( array('(/<lang>)(/<controller>(/<action>(/<id>)))', array('lang' => '(en|ru|kk)') array( 'controller' => 'hello', 'action' => 'index', 'lang' => 'en' ), ), 

翻訳ファイルを/ asset / config / amalgamaディレクトリに追加します。

 //ru.php <?php return array( 'Hello World!' => ' !', 'Hello <?>!' => ' <?>!' ); //kk.php return array( 'Hello World!' => 'Cә ә!', 'Hello <?>!' => 'Cә <?>!' ); 

ご覧のとおり、翻訳はパラメータをサポートしていますが、デフォルト言語の場合、翻訳を登録する必要はありません。
また、モジュール自体がRouteクラスを拡張して、ルートおよびView \ Helperからアドレスを正しく生成するようになっていることも言う必要があります。これは、ビューでの変換に便利です。

使用する


ヘルパーのおかげで、ラインフィードビューで次の短縮表記を使用できます。

 <?php echo $__('Hello World!'); //  " !"    ?> <?php echo $__('Hello <?>!', array('')); //  " !"    ?> 

言語切り替えの表示も非常に簡単です。

 <?php foreach($this->helper->getLangList() as $lang) : ?> <?php if ($lang == $this->helper->getCurrentLang()) : ?> <span><?php echo $lang; ?></span> <?php else: ?> <a href="<?php echo $this->helper->langSwitchLink($lang); ?>"><?php echo $lang; ?></a> <?php endif; ?> <?php endforeach; ?> 

Paginateモジュールは正常に機能しますが、現在の言語を渡すことを忘れないでください。

 $page = $this->request->param('page'); $comments = $this->pixie->orm->get('comment'); $pager = $this->pixie->paginate->orm($comments, $page, 10); $pager->set_url_route('comments', array('lang' => $this->lang)); 

さて、検証なしの方法:

 $validator->field('username') ->rule('filled') ->error($this->__('Field <?> must not be empty', array($this->__('username')))); 

おわりに


ご覧のとおり、PHPixieは非常に簡単に拡張できます。 ほとんどの小さなプロジェクトでは、必要なものはすべて揃っています。何かが足りない場合は、自分で追加することは難しくありません。 将来的には、複数のサポートが計画されており、基本的な機能はすでにありますが、頭に浮かびドキュメントを書く時間はありません。 このような機能を使用すれば、あまりストレスをかけずにロシア語から翻訳できます。 バグ、ドキュメントのエラー、またはアイデアを見つけた場合は、レビューとプルリクエストを歓迎します。

ここのモジュールリポジトリ: Github

Source: https://habr.com/ru/post/J244113/


All Articles