핵심 모듈과 때로는 템플릿에서 헬퍼 클래스가 번역에 사용되는 것을 볼 수 있습니다.
Mage::helper('someModule')->__('translate me');
왜 이것이 다음보다 선호됩니까?
$this->__('translate me');
핵심 모듈과 때로는 템플릿에서 헬퍼 클래스가 번역에 사용되는 것을 볼 수 있습니다.
Mage::helper('someModule')->__('translate me');
왜 이것이 다음보다 선호됩니까?
$this->__('translate me');
답변:
그냥 이론화하지만 전화 할 때
$this->__('Foo')
템플릿에서 Magento가 Foo를 번역하는 데 사용할 모듈의 CSV 번역 파일은 무엇입니까?
Magento가 어떤 모듈의 번역 헬퍼가 궁극적으로 문자열 / 키를 번역하기 위해 호출 할 것인지는 명확하지 않습니다. Magento를 사용하면 서로 다른 문자열에 대해 서로 다른 모듈에서 동일한 키를 사용할 수 있으므로 사용중인 모듈의 변환 데이터를 아는 것이 중요합니다. 실제로, 여러 모듈 $this->__()
에서 템플릿을 사용하는 경우 레이아웃 시스템이 템플릿을 사용한 블록 컨텍스트에 따라 다른 값을 반환하므로 "유해한 것으로 간주"될 수 있습니다.
내 생각에는 편의 도우미가 미리 추가되었지만 개발자가 템플릿을 빠르게 작성하여 인스턴스화 도움말을 시작하면 어떤 모듈의 변환 파일이 문자열을 변환하고 해당 패턴이 프레임 워크의 테스트로 확산되는지 알 수 있습니다. 이 코드 줄 자체는 모호합니다.
$this->__('Foo');
그러나이 코드 줄에서 Mage_Catalog
현지화 정보를 사용할 수 있습니다 .
Mage::helper('catalog')->__('Foo')
명시 적 모듈을 사용하려고하기 때문입니다.
$this->__()
블록 컨텍스트에서 사용 하는 경우 블록의 모듈이 변환에 사용됩니다. 따라서 특별한 모듈을 사용하려면Mage::helper('mymodule')->__()
Mage_Checkout::My Cart
구문 으로 인해 서로 다른 두 위치를 가질 수 있습니다 . 그리고 어떤 모듈이 번역에 사용되는지가 중요합니다
기본적으로 나는 다른 사람들이 말한 것과 같은 것을 말할 것입니다.
사용 Mage::helper(...)
하는 경우 특정 도우미가 번역에 사용되는지 확인하십시오.
예를 들어 Mage_Adminhtml_Block_Catalog_Product_Grid
블록을 보자 .
열 헤더의 경우 다음과 같습니다 'header'=> Mage::helper('catalog')->__('Name'),
.. 카탈로그 헬퍼 대신에 $this->__
텍스트를 Mage_Adminhtml
모듈을 사용하여 번역 한 것 입니다.
그러나 이것은 명명 된 헬퍼를 사용하는 논리가 의미가있는 경우입니다.
$this->__('..')
도우미 접근법 대신 사용 하면 문제가 발생할 수 있는 경우를 보여주고 싶었습니다 . 나는 경험에서 말합니다.
블록을 보자 Mage_Catalog_Block_Breadcrumbs
. 다음과 같은 줄이 Mage::helper('catalog')->__('Home')
있습니다.
당신은 당신이 대신 catalog
사용할 수 있도록 모듈 에 있다고 생각할 것입니다 $this
. 그러나 블록이라는 블록으로 블록을 무시하면 Namespace_Module_Block_Breadcrumbs
어떻게 될까요?
경우 $this
다음 사용 된 변환에 사용되는 모듈은 것이다 Namespace_Module
당신은 아마 싶지 않아요.
이를 피하기위한 두 가지 옵션이 있습니다. 이미 대부분의 코어 블록에서 발생하는 명명 된 도우미를 사용합니다.
또는 개발자로서 이것을 블록 클래스에 추가 할 수 있습니다.
public function getModuleName() {
return 'Mage_Catalog';
}
그런 다음 $this->__
블록에서 사용하는 모든 텍스트 (블록을 포함하는 템플릿도 포함)가 카탈로그 모듈을 사용하여 번역 될 것입니다.