cakephp2.doc_005
R e i - D r e a m
for Laravel
TOP > CakePHP2 > 環境関連(多言語化)
Guest
login

最終投稿日:2019年11月20日

環境関連(多言語化)
多言語化 サンプル
【サンプルソース】
    <?php echo __("Dashboards"); ?>

    <?php echo $this->Form->create("User",array(
        "url"=>array("controller"=>"environments","action"=>"cakephp_index/bilingual"))); ?>
            
        <?php echo $this->Form->input("hoge",array("type"=>"text","label"=>__("name1",true))); ?>

    <?php echo $this->Form->end(__d("bilingual","sousin")); ?>


【多言語ファイルの設置】

    [app][locale]に以下のディレクトリとファイルを設置する

        jpn/LC_MESSAGES/default.po      //日本語のファイルを作成するため「jpn」となる。
        eng/LC_MESSAGES/default.po      //英語のファイルを設置するなら「eng」となる。

        < 書式 >

            # /views/pages/menu_sonota/tagengo       //コメントアウトは『#』しか使えないので注意
            msgid  "Dashboards"                      //ビュー側に設定した置換対象文字
            msgstr "ダッシュボード"                   //置換する文字を設定する

            ※.poファイルはPHPの様な改行文字『;』はありません。


【ビューの設定】

    置換させたい文字列を設定するには、
        __("[msgid名]")                 //アンダーバーを2つ

    また、cakephpのヘルパーで使用する場合は、文字がエスケープされないように
        __("[msgid名]",true)

    [例]
        <input type="submit" name="comp" value="<?php echo __('complete_button') ?>">
            ※上の例はヘルパーを使用していないので『true』の指定は不要です。
        
        <?php echo $this->Form->end(__("back_button",true),array("name"=>"back")); ?>
            

【default.po以外を使用する】

    多言語化のファイル名は通常は『default.po』を使用します。
    ファイルを数種類使いたい場合は以下の様にビュー側で設定します。

        __d("sonota","[msgid名]")       //『__d(』となります。(sontoa.poファイルを参照)


【Controller 設定例】

    [ element ]
        各ビューに共通の[Japanese][English]リンクを表示できる様にエレメント化する。

        <?php echo $this->Html->link("[Japanese]",array(
                "controller"=>"environments","action"=>"bilingual_control/jpn")); ?>
        <?php echo $this->Html->link("[English]",array(
                "controller"=>"environments","action"=>"bilingual_control/eng")); ?>

    [ View ]
        上記エレメントを表示
        
        <?php echo $this->element("other/bilingual_control"); ?>


    [ Controller ]
        セッションに言語を設定し、リファラーへリダイレクトする。
        
        function bilingual_control($lacale = null){
            // 前のURLをフルパスで取得
            $url = $this->referer();
            $this->Session->write("language",$lacale);
            
            $this->redirect($url);
        }

    [ AppController ]
        上記でリダイレクトされるので、ここで言語を設定する。

        public function beforeFilter(){
            parent::beforeFilter();
            
            if(!$this->Session->check("language")){
                Configure::write('Config.language', "jpn");
            }else{
                Configure::write('Config.language', $this->Session->read("language"));
            }
        }
            
きっぷる
ログインしてコメントを残そう!!


きっぷる