PHP 5.3.3(Linux)/ PHP 5.3.1(Windows)+ Smarty 3.0.7でテストおよびテスト済み。 この場合、既存のサイト用にロシア語版が英語で作成されました。
「どのように機能するか」というトピックに教育プログラムを費やすことはありません( phpclubで利用可能です)が、実装中に遭遇した可能性のある問題の簡単な説明と説明を提供します。
だから
- Smarty Gettextプラグインをダウンロードします(0.9.1ではなく、バージョン1.0b1が必要です!): ダウンロード 、 プラグインの詳細を読む(推奨)
- そこからblock.t.phpファイルを取得し、 smarty / pluginsディレクトリに配置します
- サイトのルートにロケールフォルダーを作成し(別の場所に配置することもできますが、パスをたどるだけです)、その中にruフォルダーを作成します
- ruフォルダーにLC_MESSAGESフォルダーを作成します-ここにはロシア語の言語ファイルが保存されます
- 次に、すべての* .tplファイルを調べて、次のようにタグ{t}で翻訳する必要があるすべての行を囲む必要があります。
{t}Members{/t}
{t 1=$user}Here is your payment for %1{/t}
Smarty Gettextプラグインのドキュメントでタグ形式{t}を読むことができます
- これで、Smarty Gettextプラグインのtsmarty2c.phpユーティリティを使用して、文字列データベースが作成されます。これは他の言語に翻訳する必要があります。 最初は、コマンドラインからユーティリティを実行し、フォルダー/ファイルの名前を渡すことになっていたが、。/ templatesフォルダーで* .tplファイルを探し、その行を解析し、ファイル./locale/langfrases.cに入れる修正バージョンを提供する-tsmarty2c.phps
- 言語ファイルを作成するには、クロスプラットフォームの言語ファイルエディターであるPoeditを使用することをお勧めします。
その中に新しいディレクトリを作成する必要があります(File-Createディレクトリ)。タブの「Paths」にロケールフォルダへのパスを示します。このフォルダには既にlangfrases.cファイルが含まれている必要があります(注意-Poeditはパスの最後に余分なスペースが絶対に嫌いです!)。 ディレクトリは、 messages.poという名前でLC_MESSAGESフォルダーに保存する必要があります 。 その後、エディターは文字列を含むファイルの指定されたパスをスキャンし、それらを翻訳することを提案します:
結果として、ディレクトリをLC_MESSAGESフォルダーに保存した後、ロシア語への行翻訳を含む2つのファイルmessages.moとmessages.poを取得する必要があります 。 - 改行付きの言語ファイルができたので、それをサイトに接続する必要があります。 英語とロシア語の2つの言語があるとします。 この場合、 en_USとru_RU.utf8の 2つのロケールが使用されます 。 PHPで使用するには、次のコードが必要です( ダウンロード )。
$ lang = 'ru_RU.utf8'; if(!defined( 'LC_MESSAGES'))define( 'LC_MESSAGES'、5); // Windowsでは、この定数は定義できません setlocale(LC_MESSAGES、$ lang); //ロケールを設定します if(!isset($ _COOKIE ['lang']))setcookie( 'lang'、$ lang、1640995200); // Cookieに言語を保存します bind_textdomain_codeset( "messages"、 'UTF8'); // messages.moファイルのエンコーディングを設定します if($ lang == 'ru_RU.utf8'){ //ロシア語のローカライズファイルを含める bindtextdomain( "messages"、 "./locale"); textdomain( "メッセージ"); } その他{ //英語を返します bindtextdomain( "メッセージ"、 ""); }
発生する可能性のある問題:
- Windowsのmessages.moファイルはキャッシュされ、Apacheを再起動した後にのみ変更が表示されます。
- setlocale関数にLC_MESSAGES以外の値を渡すと、ロシア語では小数部がカンマで区切られ、英語ではピリオドで区切られるため、問題が発生する可能性があります。 ロケールはPHPの数値の表現にも影響を与えるため、MySQLを照会すると小数部分は失われます。
- ロケールru_RU.utf8とru_RUは、サーバーによって異なる場合があります。 ru_RUを単に指定すると、文字の代わりに疑問符が表示される可能性があります。
tsmarty2cユーティリティは複数のフォームを処理し、ngettext呼び出しを使用できますが、Poeditは私からのフォームの受け入れを拒否しました。
このトピックがあなたの時間を節約し、より良い、高品質のサイトの作成を促すことを願っています=)