同じ system_config セクション内のモジュール間の変換の競合
-
13-12-2019 - |
質問
管理者の下に独自のセクション(「会社」など)を作成しました system_config
<config>
<sections>
<company translate="label">
<label>Company</label>
<tab>service</tab>
<frontend_type>text</frontend_type>
<sort_order>400</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</company >
</sections>
</config>
「会社」セクションに独自のグループを追加する 2 つのモジュールを作成しました。これらのグループは意図したとおりに表示されます。どちらのモジュールも adminhtml の翻訳を処理できるように適切に構成されています。
モジュール 1 :
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module1.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
およびモジュール 2:
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
それで、ここに私の問題があります:モジュール 1 の前にモジュール 2 を作成しました。モジュール 2 が Company セクションに単独で存在する限り、私の文字列は正しく翻訳されました。モジュール 1 を作成し、そのグループを会社セクションに追加するとすぐに、モジュール 1 のラベルとコメントのみが翻訳されました。
どうやら、 Company_Module1.csv
使用されている。任意の文字列 Company_Module2.csv
無視されます。私のものをコピーしたら Company_Module2.csv
の内容 Company_Module1.csv
ファイルを編集すると、モジュール 2 が正しく翻訳されるようになりました。モジュール 2 を明示的に変換するように設定したため、これは非常に奇妙です。 Company_Module2.csv
からではありません Company_Module1.csv
.
誰かこの動作を説明できますか?最終的には、これは自分が間違っていたことを理解し、修正するのに役立ちます。ありがとう !
解決
この動作を理解するには、Magento が設定ファイルをどのように読み取るかを知る必要があります。
まず、すべての XML ファイルが 1 つの大きな構造にマージされます。結果は次のようになります。
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module1.csv</default>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
その後、ほとんどの値は XPath 経由でアクセスされるか、連想配列構造に変換されます。この構造は次のようになります
'files' => array(
'default' => 'Company_Module1.csv',
'default' => 'Company_Module2.csv',
)
ただし、配列には同じキーを 2 回持つことはできないため、値は 1 つだけになります。
解決
常に使用する 個性的 構成ファイル内の識別子を自分で選択できる場所に配置します。
そのはず:
<config>
<adminhtml>
<translate>
<modules>
<company_module1>
<files>
<default>Company_Module1.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
そして
<config>
<adminhtml>
<translate>
<modules>
<company_module2>
<files>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
また、system.xml では、どのモジュールを使用するかを指定していないため、競合する翻訳がある場合に予期しない動作が発生する可能性があります。より良い:
<company translate="label" module="Company_Module1">
しかし、これはあなたの問題とは関係ありません