어떻게 접근하든, 문제를 해결하려면 "창의적인"솔루션이 필요하며, 이후 개발자 / 관리자가 사용할 수있는 개발자 노트가 필요합니다. 먼저, 어떤 배경과 메모가 뒤 따르고 쉬우 며 끝에 <--
tl; dr 의 합리적인 해결책이라고 생각 합니다.
Zyava가 지적했듯이 번역은 번역을 수행하는 모듈의 영향을받습니다. 템플릿은 블록 인스턴스로 렌더링되며 블록 인스턴스에는 module_name
변환을 호출 할 때 사용되는 속성이 있습니다. 심판 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>
oil! 모듈 CSV는 해당 인스턴스에 대한 번역을 소유합니다. 이것은 접근 방법 이 될 수 있습니다. 물론, 블록 인스턴스 (물론 템플릿 파일 포함)에서 모듈 별 도우미를 통해 다른 모듈의 변환이 적용되는 문제가 여전히 남아 있으며 레이아웃 XML 변환의 경우 항상 그렇습니다. 또한이 접근 방식은 module_name
param 을 사용하는 Disable Modules Output 동작을 중단시킵니다 .
해결책
결과적 으로 모듈에 대해 여러 개의 번역 파일 을 지정할 수 있습니다. 코어에서 수행되지는 않지만 (각 모듈은 하나의 .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>
이 방법의 좋은 점은 재정의하는 핵심 번역을 하나의 파일로 수집 할 수 있다는 것입니다.