TOP書籍連動> エンコーディングに関する問題
Webアプリケーションの国際化
PHPコードを利用してWebアプリケーションを国際化する

第6回:Webアプリケーションをローカル化するgettext関数 〜 その2

著者:Carl McDade   2006/6/20
前のページ  1  2
エンコーディングに関する問題

   エンコーディングのバグに関連する部分を探し出すまで、失敗した原因を特定することはできません。PHP コード、HTML、もしくはデータソース、どこに原因があったのでしょうか。すべてが上手く機能するのは、とても幸運で希なことです。

   筆者はアメリカ合衆国にあるいくつものWebホストを利用していますが、クライアントは大抵スェーデンや他のヨーロッパ諸国に居ます。WebホストがUTF-8の文字セットをインストールしていないことは日常茶飯事のことです。スェーデンのアルファベットは英語のアルファベットよりも3文字多いだけであるため、この問題は簡単に解決できました。

   データベースを翻訳文字列のリソースとして使うこのテクニックは、非常に上手く機能しました。データベースと一緒に、翻訳ツールを備えたコンピュータを使うことは、不可能ではありませんが、難易度の高い方法です。

   Webベースのインターフェースや、MySQLアドミニストレーター、Microsoftエンタープライズ・マネージャーのようなデータベース・フロントエンドのプログラム内では、カット・アンド・ペーストによる操作は実行し難くなります。

   テキストを入力する際にこれを行う場合、この方法は正確に作動し、正しい結果を出力しますが、実際のWebアプリケーションがテキストを検索するために使われる場合、エンコーディングは期待したものと違うかもしれないという点に注意しなければなりません。


MySQL 4.1

   MySQL 3.xもしくはMySQL 4.0.xはユニコードをサポートしていません。デフォルトの文字エンコーディングはlatin1と呼ばれ、シングル・バイトです。これはリリース当初、大きな問題とは思われませんでした。なぜならば、データベース自身はvarcharフィールド型を使っているため、実際のエンコーディングはわからなくとも、文字列が格納された時と同じ方法で文字列を出力しているからです。

   しかし、この性質を考慮していないスクリプトでデータベースに直接アクセスすると、不正確な文字が表示される可能性があります。検索やソートが正しく機能しない場合も出てくるでしょう。

   これらの不具合は次のことが原因で起こります。実際には2バイト、3バイト、もしくは4バイトで1文字を表現すべきなのに、MySQL3.x、もしくはMySQL4.0.xは1バイトごとに1文字と解釈するからです。スウェーデン文字aaoをvarcharとして保存して、その後保存したものと異なるバージョンのphpMyAdminを使って表示させた場合に、まったく違う文字として表示されたことがあります。

   データベースを使用することで、翻訳者はPHPのコードから完全に離れて作業することができます。データベースを利用したリソースの保存はたいていのコンテンツ翻訳に適していますが、ユーザ・インターフェースと組み合わされるとその効果が特に際立ちます。動的なメニュー・システムはこのテクニックが必要となるよい例です。

   Joomlaコンテンツ管理システムでは、データベース翻訳テーブルはローカル化を簡単に行えるテキスト定義ファイルと一緒に使用されます。データベース・テーブルはより動的な表示層を扱い、一方で、定義ファイルは、ほぼ内容が変更されることのない管理領域を扱うのが一般的です。

   データベースに保存されているリソースを検索することで、より適切な情報を得ることができます。というのも、より関連性のある情報を保存できるからです。日付、タイトル、カテゴリ、そして文字列をローカル化された言語で検索できます。他のフォーマットで翻訳を保存していると、これは非常に難しくなります。

前のページ  1  2

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.asial.co.jp/magazine/
Carl McDade
著者プロフィール
Carl McDade
スェーデンに住むフリーランスのWeb開発者、兼プログラマー。Microsoftデータベース管理者の資格を持っており、1997年からWeb開発を行っています。開発期間のほとんどをドキュメント作成、コード作成、PHPコンテンツ管理システムの勉強に費やしています。Webサイト(http://www.hivemindz.com)で彼とコンタクトをとることができます。


INDEX
第6回:Webアプリケーションをローカル化するgettext関数 〜 その2
  データベースの利用
エンコーディングに関する問題