PHPを多言語化する [転送]

WBOY
WBOYオリジナル
2016-06-23 14:30:071199ブラウズ

元のアドレス: http://www.laruence.com/2009/07/19/1003.html

多言語 Web アプリケーションの開発は、さまざまな文字セットのエンコード方法のため、非常に困難です。国、通貨記号、日付形式、数値形式、およびテキスト表現はすべて異なります

今日は、PHP での getText の使用法を説明するために簡単な例を使用します (getText は、プログラマーと翻訳者の開発を支援する一連のツールとライブラリ関数です)。多言語ソフトウェア) を使用して PHP の i18n を実装します。

ここで、ホームページへのリンクを表示したいとします。

//home.php: $str = 'home'; print <<< {$str}

多言語開発の旅を始めましょう:

pot ファイルを作成します。pot はPortable Object Templateの略で、Poはそれに相当します。 Machine Objectの略称であるmoに。前者は元の文字列ファイルを指し、一般に翻訳者が変更するために使用されます。一方、後者はマシン関連であり、通常はプログラムによって読み取られます。 Pot ファイルは手動で作成することも、xgettext を通じてコードから文字列を抽出することによって生成することもできます。これは xgettext を使用して生成されます:

xgettext -a home.php -o home.pot

このコマンドを実行すると、home.pot という名前のファイルが現在のディレクトリに生成されたことがわかります。ファイルを開くと、次のことがわかります。

# 説明的なタイトル # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # このファイルは PACKAGE パッケージと同じライセンスの下で配布されています。 # FIRST AUTHOR , # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSIONn" "Report-Msgid-Bugs-To: n" "POT-Creation-Date: 2009-07-23 20:56+0800n" "PO-Revision- Date: YEAR- MO-DA HO:MI+ZONEn" "Last-Translator: FULL NAME n" "Language-Team: LANGUAGE n" "MIME-Version: 1.0 n" "Content -Type: text/plain; charset=CHARSETn" "Content-Transfer-Encoding: 8bitn" #: home.php:2 msgid "home" msgstr ""

potに従ってさまざまな言語でpoファイルを生成します。簡体字中国語の po ファイルを生成します:

export LANG=zh_CN.gb2312

msginit -l zh_CN.gb2312 -i home.pot

このコマンドを実行すると、zh_CN という名前のファイルが現在のディレクトリ .po に生成されたことがわかりました。ファイルを開くと、次の内容が表示されます:

# PACKAGE パッケージの中国語翻訳 # PACKAGE ソフトウェア パッケージの簡体字中国語翻訳 # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER # このファイルは、PACKAGE パッケージと同じライセンスの下で配布されます。 # 、2009。 # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSIONn" "Report-Msgid-Bugs-To: n" "POT-Creation-Date: 2009-07 -23 20:56+0800n" "PO-Revision-Date: 2009-07-23 21:00+0800n" "Last-Translator: FULL NAME n" "Language-Team: Chinese" "MIME -Version: 1.0n" "Content-Type: text/plain; charset=GB2312n" "Content-Transfer-Encoding: 8bitn" #: test.php:2 msgid "home" msgstr ""

翻訳 zh_CN.poは中国語です:

# PACKAGE パッケージの中国語翻訳 # PACKAGE パッケージの簡体字中国語翻訳 # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER # このファイルは PACKAGE パッケージと同じライセンスの下で配布されています。 localdomain>、2009。 # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSIONn" "Report-Msgid-Bugs-To: n" "POT-Creation-Date: 2009-07-23 20:56+0800n" " "PO-Revision-Date: 2009-07-23 21:00+0800n" "Last-Translator: n" "Language-Team: Chinese" "MIME-Version : 1.0n" " Content-Type: text/plain; charset=GB2312n" "Content-Transfer-Encoding: 8bitn" #: test.php:2 msgid "home" msgstr "Homepage"

po ファイルに基づいて mo ファイルを生成します。

msgfmt zh_CN.po -o zh_CN.mo

このコマンドを実行すると、zh_CN.mo という名前のファイルが現在のディレクトリに生成されたことがわかりました。これはバイナリなので、テキスト エディタでは開くことができません。

mo ファイルを特定のディレクトリにインストールします:

cp -f zh_CN.mo .local/LC_MESSAGES/home.mo

プログラムを変更します。

setlocale(LC_ALL, 'zh_CN'); // 変換テーブルの場所を指定します。bindtextdomain("home", "."); // 変換が検索するドメインを選択します。 zh_CN/LC_MESSAGES/home.mo になり $str = gettext('home'); //_('home') print <<&HTML {$ も使用できます。 str }

このスクリプトを実行して、正しい中国語が出力されるかどうかを確認してください。

他の言語を追加するのも簡単です。プログラムを変更する必要はありません。中国語などの mo ファイルを生成し、システム内の対応するディレクトリにインストールするだけです。異なる言語間の切り替えには、現在のロケールを変更するだけで済みます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。