プロジェクト

全般

プロフィール

Backport(バックポート) #2925

Text-translation method, opI18N::__(), always parse text in disregard of parsed text cache (翻訳に用いられる opI18N::__() がパース済みテキストのキャッシュを無視して常にテキストのパースをおこなっている)

Yuya Watanabe約12年前に追加.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
開始日:
2010-12-13
期日:
進捗率:

0%


説明

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 に置き換える。


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #1842: Text-translation method, opI18N::__(), always parse text in disregard of parsed text cache (翻訳に用いられる opI18N::__() がパース済みテキストのキャッシュを無視して常にテキストのパースをおこなっている) Fixed(完了) 2010-12-13

他の形式にエクスポート: Atom PDF