TOP書籍連動> 変数インスタンスとスクリプトの追加
Webアプリケーションの国際化
PHPコードを利用してWebアプリケーションを国際化する

第3回:テキスト定義ファイルを用いたWebアプリケーションの国際化

著者:Carl McDade   2006/5/30
前のページ  1  2
変数インスタンスとスクリプトの追加

   アプリケーションが更新され、追加文字列が加えられた時、どのような新しい文字列が加えられているのかを知る方法はありませんし、加えられた文字列があらゆる言語で表現されているのかを知る方法もありません。新しく加えられた文字列が特定の言語にまだ翻訳されていないとしたら、どうなるのでしょうか。この場合、変数のインスタンスと場所をチェックするスクリプトを書き加えなければなりません。

   文字列が適切にフォーマットされていなければ、テキスト定義ファイルは正しく読み込むことができません。翻訳の際には、そのファイルを補助するリーダーや他のツールが存在しない場合、出力される書式が重要になります。ダブルクォート(")やシングルクォート(')を使うこともバグを発生させる原因となります。

   どちらかを使用する場合、PHP構文エラーを防ぐために、テキストをエスケープしなければなりません。このテクニックでは、その使用方法を理解することは非常に簡単なことですが、適切に実装するために多くのコードが必要となります。

   通常、ファイルには以下のようなテキストが含まれているでしょう。

Define('_ERROR_1', 'このテキスト内ではダブルクォートは使えません(" ") '
Define("_ERROR_1", "このテキスト内ではシングルクォートは使えません(' ') ”

   定義ファイルを書く際、使われる変数型を選ぶことが必要です。PHPのdefine()関数では、配列要素を使うことでパフォーマンスを上げ、作られた配列のインデクスを使い、アプリケーション全体で再利用できるテキストの量を増やすことができます。

$language['the_index'] = 'これは翻訳可能なテキストです。';


翻訳ロジック

   今回は前回に引き続き、定義テキストファイルについて解説します。翻訳ロジックは翻訳者に任せましょう。複数形に適切に対応したローカル化スキームを作ること、もしくは見つけることは非常に難しい作業だからです。また、多くの場合、プログラマは翻訳ロジックを作るためにPHPを使おうと考えます。複数形の問題に対応しようと、コーディングしても、例外などに悩まされ、解決策を作成することができず、悪夢を見ることになるでしょう。

   プログラマがより簡単に翻訳しようと、文法や複数形をプログラムで解決しようとすると、悪夢を見ることになります。次のコードを見てください。

<?php
$messages = array(
 'en_US' => array(
  'I am X years and Y months old.' =>
  'I am %d years and %d months old.'),
 'es_US' => array(
  'I am X years and Y months old.'=>
  'Tengo %2$d meses y %1$d a.os.')
);
?>

   プログラマが単語の複数形と文法を考慮してコーディングを行う前は、このコードはとても簡単な文字列配列をもっていました。しかし、プログラムが翻訳を意識してコーディングしてしまったために、翻訳者がPHPコードを解読する必要が生じてしまいました。プログラミングを知らない一般的な翻訳者であれば、テキストにエラーを起こすかもしれません。

   よって、プログラマはビジネス・ロジック、日付フォーマットの国際化へ最善を尽くすべきです。言語構造とプログラム・ロジックは分離してコーディングすべきです。テキスト定義ファイルは複雑な言語構造を扱うことには向いていません。このような状況では、複数形をグループ化するために多次元配列を用い、テキスト内の不一致を許容する方法を用いることが、まだ考慮の余地がある解決策といえます。

$language['the_index'][0] = 'これは翻訳可能なテキストです。';
$language['the_index'][1] = 'これは基本的な複数形が用いられた、'. '翻訳可能なテキストです。';
$language[‘the_index’][2] = 'これは性別が指定され、複数形が用いられた、. '翻訳可能なテキストです。';

前のページ  1  2


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

INDEX
第3回:テキスト定義ファイルを用いたWebアプリケーションの国際化
  国際化のテクニック
変数インスタンスとスクリプトの追加