今回は前回に引き続き、定義テキストファイルについて解説します。翻訳ロジックは翻訳者に任せましょう。複数形に適切に対応したローカル化スキームを作ること、もしくは見つけることは非常に難しい作業だからです。また、多くの場合、プログラマは翻訳ロジックを作るために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] = 'これは性別が指定され、複数形が用いられた、. '翻訳可能なテキストです。';
|