概要
__d() 関数(CakePHP の翻訳関数)の使い方が誤っている箇所がコード全体に多数存在する。
問題1:動的部分を翻訳キーに文字列結合している(バグ)
__d('baser_core', 'データベース処理中にエラーが発生しました。' . $e->getMessage());
問題点
__d() の第2引数が翻訳キーとなる。. で動的な文字列を結合すると、翻訳キーが実行時のエラー内容によって変化するため、.po ファイルへの翻訳登録が不可能になる。
修正方針
固定部分だけを翻訳キーとし、動的部分は後続で結合するか、__d() のプレースホルダー機能({0}, {1} など)を使う。
// 案A: 固定部分のみ翻訳し後続で結合
__d('baser_core', 'データベース処理中にエラーが発生しました。') . $e->getMessage();
// 案B: プレースホルダー機能を使う(動的部分も翻訳テンプレートに含めたい場合)
__d('baser_core', 'データベース処理中にエラーが発生しました。詳細:{0}', $e->getMessage());
問題2:sprintf(__d()) を使っている(改善)
sprintf(__d('baser_core', 'プラグイン「%s」をインストールしました。'), $name);
問題点
動作はするが、__d() 自体にプレースホルダー機能({0}, {1} など)が備わっているため、sprintf() を二重に使う必要がない。また %s ではなく ICU 形式のプレースホルダーを使うべき。
修正方針
sprintf() を除去し、__d() のプレースホルダー機能を使う。プレースホルダーの形式も %s → {0} へ変更する。
__d('baser_core', 'プラグイン「{0}」をインストールしました。', $name);
影響範囲
問題1・問題2 ともにコード全体(baser-core、bc-blog、bc-mail、bc-custom-content、bc-widget-area、bc-theme-file、bc-uploader、bc-editor-template、bc-favorite、bc-search-index、bc-content-link 等)に広がっており、多言語対応サイト作成時に問題になるので早めに改善する必要がある。
baserCMS version : 5.2.3
概要
__d() 関数(CakePHP の翻訳関数)の使い方が誤っている箇所がコード全体に多数存在する。
問題1:動的部分を翻訳キーに文字列結合している(バグ)
問題点
__d() の第2引数が翻訳キーとなる。. で動的な文字列を結合すると、翻訳キーが実行時のエラー内容によって変化するため、.po ファイルへの翻訳登録が不可能になる。
修正方針
固定部分だけを翻訳キーとし、動的部分は後続で結合するか、__d() のプレースホルダー機能({0}, {1} など)を使う。
問題2:sprintf(__d()) を使っている(改善)
問題点
動作はするが、__d() 自体にプレースホルダー機能({0}, {1} など)が備わっているため、sprintf() を二重に使う必要がない。また %s ではなく ICU 形式のプレースホルダーを使うべき。
修正方針
sprintf() を除去し、__d() のプレースホルダー機能を使う。プレースホルダーの形式も %s → {0} へ変更する。
影響範囲
問題1・問題2 ともにコード全体(baser-core、bc-blog、bc-mail、bc-custom-content、bc-widget-area、bc-theme-file、bc-uploader、bc-editor-template、bc-favorite、bc-search-index、bc-content-link 等)に広がっており、多言語対応サイト作成時に問題になるので早めに改善する必要がある。
baserCMS version : 5.2.3