操作
Bug(バグ) #2800
完了翻訳ファイルの読み込みが誤った順序でおこなわれてしまい、たとえば、携帯版で「Login」が「ログイン」ではなく「ログイン」と翻訳されてしまう
開始日:
2011-10-14
期日:
進捗率:
100%
予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)
説明
概要¶
i18n 翻訳用のメッセージファイルは複数ファイルで同じ語に対する翻訳を記述した場合、「モジュール → アプリケーション → 全体」の優先順に読み込まれる仕様であるが、読み込むべき翻訳ファイルリストの順序に誤りがあり、誤った翻訳ファイルが選択されてしまう問題がある。
これにより、たとえば、 mobile_frontend 用の i18n ファイルに半角カタカナのエントリーを追加しているにもかかわらず、全角カタカナが表示されてしまうような現象が発生する(例:「Login」が「ログイン」ではなく「ログイン」と表示される)。
この問題は #2490 (翻訳ファイルの優先順位がキャッシュ時に逆になっている) 対応中に発覚したものである。 (https://redmine.openpne.jp/issues/2490#note-4)
#2490 はキャッシュ前とキャッシュ後の翻訳の優先順位がそれぞれ異なるという問題で、キャッシュ後の翻訳結果(実装上の誤りが存在していた)がキャッシュ前のものと一致するように修正がおこなわれた。しかし、このチケットで扱う予定の問題により、そもそもキャッシュ前の翻訳結果が適切ではなかったことが明らかになり、 #2490 にて対処がおこなわれた。このとき採用された修正方針を以下に引用する。
opApplicationConfiguration::getI18NDirs() により生成される配列要素の順序は以下のようになります(太字は sfApplicationConfiguration::getI18NDirs() の生成した配列要素)。 0. [sf_root_dir]/i18n 1. plugins/op*Plugin/apps/[app_name]/i18n 2. plugins/op*Plugin/apps/[app_name]/modules/[module_name]/i18n 3. apps/[app_name]/modules/[module_name]/i18n 4. apps/[app_name]/i18n 5. plugins/*/modules/[module_name]/i18n 6. plugins/*/i18n しかし、これは期待通りの結果ではありません。上述の結果を、期待通りの順番に並び替えたものが以下です。 (略) ということで、これでよさそうに思いますが、「0. [sf_root_dir]/i18n 」の順番が妥当かどうかは若干怪しいところです(このディレクトリの立ち位置はいまひとつ明確でない気がしています)。 なので、 [sf_root_dir]/i18n に関してだけはとりあえずこの修正前の挙動を維持する形で、以下のような順序にすることもアリだと思います。ちなみに、この順序ならば sfApplicationConfiguration::getI18NDirs() の結果が利用できます。 2. plugins/op*Plugin/apps/[app_name]/modules/[module_name]/i18n 1. plugins/op*Plugin/apps/[app_name]/i18n 3. apps/[app_name]/modules/[module_name]/i18n 4. apps/[app_name]/i18n 5. plugins/*/modules/[module_name]/i18n 6. plugins/*/i18n 0. [sf_root_dir]/i18n
3.4 には #2490 で扱われているキャッシュの問題は存在しないが、翻訳ファイルリストの順序が誤っている問題は存在するため、 https://redmine.openpne.jp/issues/2490#note-4 以降のやりとりを参考にした上で、修正を取り込む必要がある。
詳細¶
確認バージョン¶
OpenPNE 3.4.21-dev (stable-3.4.x)
操作