Project

General

Profile

Bug(バグ) #4668

SNS内名称設定で設定されている項目が翻訳されない場合がある

Added by Rimpei Ogawa about 2 months ago. Updated 6 days ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2024-05-02
Due date:
% Done:

100%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

Description

Overview (現象)

SNS内名称設定で設定されている項目が翻訳されない場合がある。

確認済みなのは以下
  1. opCommunityTopicPlugin をインストールしている場合、OpenPNE 3.10.0 以降のバージョンでは管理画面のトピックコメントリスト、イベントコメントリストで「%nickname%」が翻訳されずに表示される。

Causes (原因)

pc_backend(管理画面)や api(API)では pc_frontend 用のSNS内名称設定を表示する仕様となっており、
SNS内名称設定の項目を取得する SnsTermTable に言語とアプリケーションを指定する configure() メソッドを呼ぶ際には、
現在のアプリケーションが pc_backend や api の場合 "pc_frontend" を引数として渡す実装が opApplicationConfiguration と opI18N に存在する。
ただ、この実装以外の箇所からも SnsTermTable::configure() メソッドが呼ばれる箇所があり、その際に "pc_backend" や "api" が渡されることによりSNS内名称設定が存在しないような判定をされてしまう場合がある。

また、複数回 SnsTermTable::configure() メソッドが呼ばれ言語やアプリケーションが切り替えられた際に、
SnsTermTable 内部で持っているレコードのキャッシュを初期化する処理がないため、一度でも翻訳が実行されキャッシュが保持された後では切り替えが正常に動作しない。

実際には SnsTermTable::configure() が複数回呼ばれても最後に意図した "pc_frontend" を渡した後のみ翻訳が実行されるケースが多く翻訳されない例は少ないが、
opCommunityTopicPlugin の例では、通常翻訳を実行するテンプレートファイル以外の PluginCommunityTopicSearchForm クラスで I18N の機能を利用しているため実行タイミングの違いで問題が発生している。

OpenPNE 3.10 以降でのみ発生するのは以下のチケット、
#4366 SNS内名称設定で設定されている項目が翻訳されない
こちらの修正差分により opI18N::initialize() で、 $this->terms['member'] という箇所を削除したためにこのタイミングで翻訳実行されなくなったことが原因であるが、
SnsTermTable 側の実装で configure() を引数を変えて複数回呼ばれることが考慮されていないこと、あるいは複数回呼び出しを行っていること自体が根本の原因である。

Way to fix (修正内容)

  1. SnsTermTable::configure() で pc_backend, api が指定される可能性をなくす
    • application が pc_backend, api だった場合に pc_frontend に変換する処理を SnsTermTable::configure() 内に追加
    • 同様の処理が書かれていた opApplicationConfiguration と opI18N からは削除
  2. SnsTermTable::configure() で言語アプリケーション切替時は取得済みの terms を空にする

Subtasks

Backport(バックポート) #4671: SNS内名称設定で設定されている項目が翻訳されない場合があるFixed(完了)Rimpei Ogawa

Backport(バックポート) #4672: SNS内名称設定で設定されている項目が翻訳されない場合があるFixed(完了)Rimpei Ogawa

Associated revisions

Revision 9c55215c (diff)
Added by Rimpei Ogawa about 2 months ago

(refs #4668) SnsTermTable::configure() で pc_backend, api が指定される可能性をなくし、言語アプリケーション切替時は取得済みの terms を空にする

Revision 490a96ae
Added by kaoru n 6 days ago

Merge pull request #709 from balibali/t-4668

(refs #4668) SNS内名称設定で設定されている項目が翻訳されない場合がある

History

#1 Updated by Rimpei Ogawa about 2 months ago

  • Description updated (diff)
  • Status changed from New(新規) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

https://github.com/openpne/OpenPNE3/pull/709
プルリクエスト作成しました。

#2 Updated by kaoru n 29 days ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

レビューOKです。

#3 Updated by isao sano 6 days ago

  • Status changed from Pending Testing(テスト待ち) to Pending Merge(マージ待ち)
  • % Done changed from 70 to 80

テスト完了しました。問題ありません。

#4 Updated by kaoru n 6 days ago

  • Status changed from Pending Merge(マージ待ち) to Fixed(完了)
  • % Done changed from 80 to 100

マージしました

Also available in: Atom PDF