多言語サポート


アプリケーションには国際化サポートが含まれているため、関連する言語パッケージ ファイルを定義できます。

言語パッケージを開いてロードします。

デフォルト システムデフォルトの言語パッケージがロードされますが、複数の言語の自動検出と自動切り替えが必要な場合は、グローバル ミドルウェア定義ファイルにミドルウェア定義を追加する必要があります:

'think\middleware\LoadLangPack',

デフォルトでは、システムは構成をロードします。デフォルトの言語パックを使用するため、現在のシステム言語は自動的に検出されません。多言語関連の設定は、lang.php 構成ファイルで設定されます。

デフォルトの言語は、default_lang 構成パラメータによって設定されます。システムのデフォルト設定は次のとおりです:

// 默认语言
'default_lang'    => 'zh-cn',

ミドルウェアを有効にすると、システムは自動的に検出し、複数の言語を自動的に切り替えます。構成ファイル内の自動検出 多言語変数名:

// 自动侦测的GET变量名
'detect_var' => 'lang',

自動検出をオンにすると、まず要求された URL または Cookie に言語変数が含まれているかどうかがチェックされ、次に現在の言語が自動的に識別されます (そして、対応する言語パック)は、HTTP_ACCEPT_LANGUAGE に基づいています。

言語を自動的に検出するときに許可する言語のリストを設定し、リストにない言語でもデフォルトの言語を使用する場合は、次のように設定できます:

// 设置允许的语言
'allow_lang_list'    =>    ['zh-cn', 'en-us']

Cookie を使用して言語を保存したい場合は、

// 使用Cookie保存
'use_cookie' => true,
// Cookie保存变量
'cookie_var' => 'think_lang',

を設定できます。設定後、自動的に検出された言語が Cookie を通じて記録され、次回からは Cookie を通じて直接言語が決定されます。

言語変数の定義

言語変数の定義は、複数の言語を使用する必要がある場所にのみ記述する必要があります:

Lang::get('add user error');
// 使用系统封装的助手函数
lang('add user error');

つまり、文字列情報は Lang::get メソッドで表現する必要があります。

言語定義は通常、英語で説明されます。

言語ファイル定義

自動的にロードされるアプリケーション言語ファイルは次の場所にあります:

// 单应用模式
app\lang\当前语言.php
// 多应用模式
app\应用\lang\当前语言.php

他の言語パッケージをロードする必要がある場合は、次のように設定できます。例:

'extend_list'    =>    [
    'zh-cn'    => [
        app()->getBasePath() . 'lang\zh-cn\app.php',
        app()->getBasePath() . 'lang\zh-cn\core.php',
    ],
]

現在、コア フレームワークには zh-cn 言語パッケージが組み込まれているだけですが、他の言語のプロンプトが必要な場合は、言語パッケージを拡張することで自分でロードできます。

ThinkPHP の言語ファイル定義は return array メソッドを採用しています:

return [
     'hello thinkphp'  => '欢迎使用ThinkPHP',
     'data type error' => '数据类型错误',
];

通常、コントローラーでは多言語が使用されますが、モデル クラスの自動検証機能はプロンプト情報を使用します。この部分も同様です多言語機能が利用可能です。

多言語関数が使用されている場合 (現在の言語パッケージで 'lang_var'=>'Title must!' を定義していると仮定)、次の文字列を使用して元のエラー メッセージを置き換えることができます。 。

{%lang_var}

コントローラーで値を割り当てずにテンプレートで言語変数を出力したい場合は、テンプレート エンジンの特別なタグを直接使用して、言語で定義された値を直接出力できます:

{$Think.lang.lang_var}

現在の言語パッケージ内で定義されている lang_var 言語定義を出力できます。

変数受信サポート

言語パッケージが定義されている場合、受信変数がサポートされます。方法は 2 つあります。

名前付きバインディング メソッドを使用します。例:

'file_format'    =>    '文件格式: {:format},文件大小:{:size}',

テンプレートで言語文字列を出力するときに変数値を渡すだけです:

{:lang('file_format',['format' => 'jpeg,png,gif,jpg','size' => '2MB'])}

2 番目の方法は、フォーマット文字列を使用することです。サードパーティの翻訳ツールを使用する必要がある場合は、 , 変数を定義するにはこの方法を使用することをお勧めします。

'file_format'    =>    '文件格式: %s,文件大小:%d',

テンプレートで複数言語を出力する方法は次のように変更されます:

{:lang('file_format',['jpeg,png,gif,jpg','2MB'])}

言語グループ化

最初に、lang.php 設定ファイルで言語グループ化を有効にする必要があります。

// 开启多语言分组
'allow_group'    =>    true

これで、複数の言語を定義するときにグループ化を使用できるようになります。

return [
    'user'    =>    [
         'welcome'  => '欢迎回来',
         'login' => '用户登录',
         'logout' => '用户登出',
    ]
];

を入力し、次のメソッドを使用して多言語変数

Lang::get('user.login');
lang('user.login');


を取得します。