Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

Zend Translateでiniファイルを使うと使用できない文字がある、らしい

Zend Frameworkネタです。

Zend Translateに翻訳情報を登録するとき登録形式を指定できますが、
iniファイルだと一部使用不可能な文字があるようです。


http://framework.zend.com/manual/ja/zend.translate.sourcecreation.html

公式のマニュアル「INI ソースファイルの作成」の項目によると、次のように書かれています。

INI にはいくつかの制約があります。 
INI ファイルの値に非英数字が含まれる場合は、値をダブルクォート (") で囲まなければなりません。
また、 INI ファイルのキーとしては使えない予約語があります。 
予約語には NULL, yes, no, TRUE そして FALSE があります。
値に NULL, no および FALSE を指定するとそれは "" と同じ扱いとなり、yes と TRUE を指定するとそれは '1' と同じ扱いとなります。
{}|&~![()" といった文字はキーの中では使えず、 また値の中で使用すると特別な意味を持つことになります。
予期せぬ挙動を起こすようなら、このアダプタを使わないようにしましょう。 

では本当に使えないのか、試してみる事にしました。


公式マニュアルによれば、使用不可能な文字は「{}|&~![()"」になります。
キーの方は検証対象外で、値の方のみに焦点を絞る事にします。

まずは、何も囲わずに記号を入れてみます。

Test Message = テストメッセージ{

{}は成功、[は駄目……という風に読み込みエラーが発生するものと発生しないものが混在しました。
ちなみに、非英数字が含まれていても特定文字以外はダブルクオートで囲まなくて問題ないようです。

次に、これをダブルクオートで囲ってみます。

Test Message = "テストメッセージ{"

このようにすると、ダブルクオート以外の特殊文字が含まれていても
読み込みエラーは発生しませんでした。
ダブルクオートはエラーとなってしまいました。


Test Message = "テストメッセージ\""

このようにバックスラッシュを入れても駄目で、読み込みエラーが発生しました。


では、今度はシングルクオートで囲ってみます。

Test Message = 'テストメッセージ"'

これであればシングルクオートも含めた特殊文字があっても正常に読み込みができました。

Test Message = 'テストメッセージ\''

ただし今度はメッセージ中にシングルクオートがあると
読み込みエラーが発生するようになりました。
シングルクオートもダブルクオート同様、
バックスラッシュによるエスケープはできませんでした。


以上より、「シングルクオートとダブルクオートの混在するメッセージは使用できない」
が結論かと思います。
調べてみたらマニュアルに書いてある以上に大体のケースに対応できる事が分かった感じです。


とは言え、必ずしもiniファイルにこだわる必要はなくて別の形式も検討した方がよさそうです。
さらに言えば本来は言語の形式も指定可能なようにしておくのがいいんでしょうね。

ちょっとこれもいずれ対応したいところです。

TrackBack URL :

Leave a comment  

name

email

website

Submit comment