Codeigniter-internationalization

提供:Dev Guides
移動先:案内検索

CodeIgniter-国際化

CodeIgniterの言語クラスは、国際化のために複数の言語をサポートする簡単な方法を提供します。 ある程度まで、異なる言語ファイルを使用して、多くの異なる言語でテキストを表示できます。

アプリケーション/言語ディレクトリに異なる言語ファイルを配置できます。 システム言語ファイルはsystem/languageディレクトリにありますが、アプリケーションに独自の言語を追加するには、application/languageディレクトリに言語ごとに個別のフォルダーを作成する必要があります。

ファイルの作成言語

言語ファイルを作成するには、 _ lang.php で終了する必要があります。 たとえば、フランス語の言語ファイルを作成する場合、 french_lang.php で保存する必要があります。 このファイル内では、以下に示すように、すべての言語テキストをキーと値の組み合わせで $ lang 配列に保存できます。

$lang[‘key’] = ‘val’;

言語ファイルを読み込んでいます

アプリケーションで言語を使用するには、まずその特定の言語のファイルをロードして、そのファイルに保存されているさまざまなテキストを取得する必要があります。 次のコードを使用して、言語ファイルをロードできます。

$this->lang->load('filename', 'language');
  • ファイル名-ロードするファイルの名前です。 ここではファイルの拡張子を使用せず、ファイル名のみを使用します。
  • 言語-それを含む言語セットです。

言語テキストの取得

言語ファイルから行を取得するには、次のコードを実行するだけです。

$this->lang->line('language_key');

ここで、 language_key は、ロードされた言語ファイルのキーの値を取得するために使用されるキーパラメーターです。

言語の自動ロード

グローバルに何らかの言語が必要な場合は、以下に示すように application/config/autoload.php ファイルに自動ロードできます。

| -----------------------------------------------------------------------
|  Auto-load Language files
| -----------------------------------------------------------------------
| Prototype:
|   $autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file. For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();

単純に、CodeIgniterによってオートロードされるさまざまな言語を渡します。

*Lang_controller.php* というコントローラーを作成し、 *application/controller/Lang_controller.php* に保存します
<?php
   class Lang_controller extends CI_Controller {

      public function index(){
        //Load form helper
         $this->load->helper('form');

        //Get the selected language
         $language = $this->input->post('language');

        //Choose language file according to selected lanaguage
         if($language == "french")
            $this->lang->load('french_lang','french');
         else if($language == "german")
            $this->lang->load('german_lang','german');
         else
         $this->lang->load('english_lang','english');

        //Fetch the message from language file.
         $data['msg'] = $this->lang->line('msg');

         $data['language'] = $language;
        //Load the view file
         $this->load->view('lang_view',$data);
      }
   }
?>
*lang_view.php* というビューファイルを作成し、 *application/views/lang_view.php* に保存します。
<!DOCTYPE html>
<html lang = "en">

   <head>
      <meta charset = "utf-8">
      <title>CodeIgniter Internationalization Example</title>
   </head>

   <body>
      <?php
         echo form_open('/lang');
      ?>

      <select name = "language" onchange = "javascript:this.form.submit();">
         <?php
            $lang = array('english'=>"English",'french'=>"French",'german'=>"German");

            foreach($lang as $key=>$val) {
               if($key == $language)
               echo "<option value = '".$key."' selected>".$val."</option>";
               else
               echo "<option value = '".$key."'>".$val."</option>";
            }

         ?>

      </select>

      <br>

      <?php
         form_close();
         echo $msg;
      ?>

   </body>

</html>

次の図に示すように、 application/language に英語、フランス語、ドイツ語という3つのフォルダーを作成します。

3つのフォルダー

以下のコードをコピーして、 application/language/english フォルダーの english_lang.php ファイルに保存します。

<?php
   $lang['msg'] = "CodeIgniter Internationalization example.";
?>

以下のコードをコピーして、 application/language/French フォルダーの french_lang.php ファイルに保存します。

<?php
   $lang['msg'] = "Exemple CodeIgniter internationalisation.";
?>

以下のコードをコピーして、 application/language/german フォルダーの german_lang.php ファイルに保存します。

<?php
   $lang['msg'] = "CodeIgniter Internationalisierung Beispiel.";
?>
*application/config/routes.php* の *routes.php* ファイルを変更して、上記のコントローラーのルートを追加し、ファイルの最後に次の行を追加します。
$route['lang'] = "Lang_controller";

ブラウザで次のURLを実行して、上記の例を実行します。

http://yoursite.com/index.php/lang

次のスクリーンショットに示すような出力が生成されます。 ドロップダウンリストで言語を変更すると、ドロップダウンの下に書かれた文の言語もそれに応じて変更されます。

国際化の例