どのようにアプローチしても、あなたの問題には「創造的な」解決策が必要であり、開発者/保守者が使用する開発者のメモに値するものです。最初に、いくつかの背景、次にメモ、最後に<--
tl; drで簡単で合理的な解決策があると思います。
Zyavaが指摘したように、翻訳は翻訳を行うモジュールの対象となります。テンプレートはブロックインスタンスでレンダリングされ、ブロックインスタンスには、module_name
変換を呼び出すときに使用されるプロパティがあります。ref Mage_Core_Block_Abstract::__()
:
public function __()
{
$args = func_get_args();
$expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->getModuleName());
array_unshift($args, $expr);
return Mage::app()->getTranslator()->translate($args);
}
module_name
(参考文献プロパティは、(通常は)オンデマンドで派生し、クラス名に基づいています::getModuleName()
):
public function getModuleName()
{
$module = $this->getData('module_name');
if (is_null($module)) {
$class = get_class($this);
$module = substr($class, 0, strpos($class, '_Block'));
$this->setData('module_name', $module);
}
return $module;
}
そのため、module_name
プロパティが既に設定されている場合、そのモジュール変換が適用されます。コアレイアウトの既存のブロックの場合、このプロパティはレイアウトXMLを介して設定できます。例えば:
<default>
<action block="root" method="setModuleName">
<name>Your_Module</name>
</action>
</default>
ほら!モジュールCSVは、そのインスタンスの翻訳を所有しています。これはアプローチかもしれません。もちろん、ブロックインスタンス(もちろんテンプレートファイルを含む)のモジュール固有のヘルパーを介して他のモジュールの翻訳が適用されるという厄介な状況があり、レイアウトXMLの翻訳には常に当てはまります。また、このアプローチは、module_name
パラメーターを使用するモジュール出力の無効化動作を中断します。
解決
結局のところ、モジュールに対して複数の翻訳ファイルを指定することが可能です。コアでは実行されません(各モジュールは1つの.csvファイルのみを宣言します)が、機能はMage_Core_Model_Translate
次のとおりです。
public function getModulesConfig()
{
if (!Mage::getConfig()->getNode($this->getConfig(self::CONFIG_KEY_AREA).'/translate/modules')) {
return array();
}
$config = Mage::getConfig()->getNode($this->getConfig(self::CONFIG_KEY_AREA).'/translate/modules')->children();
if (!$config) {
return array();
}
return $config;
}
そして
protected function _loadModuleTranslation($moduleName, $files, $forceReload=false)
{
foreach ($files as $file) {
$file = $this->_getModuleFilePath($moduleName, $file);
$this->_addData($this->_getFileData($file), $moduleName, $forceReload);
}
return $this;
}
ファイルのコンテンツがマージされているため(テスト済み)、カスタムCSVでオーバーライドする文字列のみを指定できます。たとえば、製品ページの追加情報文字列を翻訳する場合(Mage_Catalog
モジュールによって翻訳される)、次のように機能します。
app / locale / Custom.csv:
"Additional Information","More Info, Dude"
あなたのモジュール設定で- 内容が後でマージ<depends />
さMage_Catalog
れることを保証するためにオンにする必要があります-以下はCustom.csv翻訳ペアをオリジナルの上にマージさせます:
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<additional>Custom.csv</additional>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
このアプローチの良い点は、上書きする主要な翻訳を1つのファイルに収集できることです。