Bug(バグ) #1842
完了Text-translation method, opI18N::__(), always parse text in disregard of parsed text cache (翻訳に用いられる opI18N::__() がパース済みテキストのキャッシュを無視して常にテキストのパースをおこなっている)
100%
説明
Overview (現象)¶
Text-translation method, opI18N::__(), always parse text in disregard of parsed text cache.
翻訳に用いられる opI18N::__() がパース済みテキストのキャッシュを無視して常にテキストのパースをおこなっている。
Causes (原因)¶
opI18N stores cached texts in opI18N::$parsed. A new entry of opI18N::$parsed is added by end of opI18N::__() to skip parsing from the next time. But checking available caches in opI18N::__() is wrong.
opI18N はキャッシュされたテキストを opI18N::$parsed に格納する。 opI18N::$parsed のエントリは次回以降のパースをスキップするために opI18N::__() の末尾で追加される。しかし、 opI18N::__() における有効なキャッシュの確認処理に誤りがある。
public function __($string, $args = array(), $catalogue = 'messages') { if (empty($parsed[$string])) { $this->parsed[$string] = array();
The above is the main point in this issue. Calling empty() looks like a checking available caches, but this empty() calls to check the undefined local variable $parsed, not $this->parsed. In this code, $parsed is always an empty value. So you get non-cached result from opI18N::__().
これがこのチケットのポイントとなる部分である。 empty() のコール部分は有効なキャッシュの確認をおこなっているように見えるが、 $this->parsed ではなく未定義のローカル変数である $parsed に対して empty() がコールされている。このコードでは $parsed は常に空の値となるため、 opI18N::__() の結果は常にキャッシュされていない値ということになる。
Way to fix (修正内容)¶
Replace $parsed to $this->parsed.
$parsed を $this->parsed に置き換える。
Masato Nagasawa さんが約14年前に更新
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Masato Nagasawa にセット
- 対象バージョン を OpenPNE 3.7.0 にセット
Masato Nagasawa さんが約14年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 63934fd6bc4b9831f1e57b7e4f6150e7ed66be74 で適用されました。
Naoya Tozuka さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 担当者 を削除 (
Masato Nagasawa) - 進捗率 を 50 から 70 に変更
修正点( 63934fd6 )確認しました。問題ありません。
Kousuke Ebihara さんが13年以上前に更新
- 題名 を opI18N::__() で結果をキャッシュする処理が機能していない から Text-translation method, opI18N::__(), always parse text in disregard of parsed text cache (翻訳に用いられる opI18N::__() がパース済みテキストのキャッシュを無視して常にテキストのパースをおこなっている) に変更