TL; DR
번역 작동 방식에 대한 자세한 내용에 관심이없는
경우 아래에서 번역이 작동하지 않는지 확인해야 할 사항 섹션, 특히
모듈 범위 번역 충돌에 대한 하위 섹션 솔루션으로 컨텐츠를 건너 뜁니다 .
마 젠토 번역 개요
마 젠토는 번역 소스의 우선 순위를 정합니다 (최고에서 최하로).
- DB (
core_translate
테이블)
- 테마
translate.csv
파일
app/locale/*/*.csv
파일
번역 배열은 어떻게 만들어 집니까?
모듈 번역
먼저 app/locale/*/*.csv
활성 모듈 etc/config.xml
파일 에서 참조 된 모든 파일 이 구문 분석됩니다. 다음 과정의 연습은 다음과 같습니다
젠토는 다음 발견 가정 config.xml
섹션 :
<!-- excerpt from Mage/Catalog/etc/config.xml -->
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<default>Mage_Catalog.csv</default>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
그리고이 파일에서 현재 상점보기에 대해 구성된 로케일에 대해 다음 변환이 지정됩니다.
"AAA","BBB"
이러한 상황에서 Magento는 변환 배열에 다음 레코드를 만듭니다.
array(
"AAA" => "BBB",
"Mage_Catalog::AAA" => "BBB"
)
두 번째 값은 모듈 범위 변환 입니다. 접두사가 붙은 모듈 이름은 변환 파일 선언이 포함 된 구성 XML 노드에서 가져옵니다.
같은 번역이 두 번째 모듈 파일에 의해 다시 지정된 경우 ( 예 : Some_Module.csv
translation is "AAA","CCC"
) 는 설정을 덮어 쓰지 않습니다"AAA"
. 대신 두 번째 모듈 이름을 가진 새 레코드 만 추가합니다 "Some_Module::AAA" => "CCC"
.
개발자 모드가 활성화 된 경우 다른 모듈 변환에서 동일한 키를 가진 두 번째 레코드를 찾으면 레코드의 설정 이 해제 됩니다 "AAA"
. 따라서 개발 중에 모듈 변환 충돌을보다 쉽게 발견 할 수 있습니다.
테마 번역
둘째, translate.csv
현재 로캘에 대한 테마 폴 백의 첫 번째 파일에서 로드 된 번역은 단순히 번역 배열의 기존 레코드를 대체합니다.
따라서 이전 예제를 계속하면 translate.csv
레코드 "AAA","DDD"
가 다음 변환 데이터로 이어집니다.
array(
"AAA" => "DDD", // This is overwritten by the translate.csv file
"Mage_Catalog::AAA" => "BBB",
"Some_Module::AAA" => "CCC"
)
물론 translate.csv
새로운 변환 키가 있는 레코드 는 단순히 배열에 추가됩니다.
데이터베이스 번역
로부터 번역 core_translate
표는 기본적으로 그냥 테마 번역 등 번역 배열로 병합됩니다.
데이터베이스 레코드가 모듈 또는 테마 변환의 기존 키를 겹쳐 쓰고 새 키가 추가됩니다.
번역 조회
때 __()
메소드가 호출되어, 젠토 먼저 현재 매칭 모듈 어레이의 변환을 찾는다.
현재 모듈은 __()
클래스가 호출 되는 클래스 이름에 의해 결정됩니다 . 예를 들어, 블록에서 담당 메소드는 다음과 같습니다.
// Excerpt from Mage/Core/Block/Abstract.php
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;
}
헬퍼 및 컨트롤러의 메소드가 그에 따라 작동합니다.
조회 시나리오 예
예를 들어 $this->__('AAA')
템플릿 파일에서 say 라고합니다. 연결된 블록이 유형 인 Mage_Core_Block_Template
경우 Magento는 먼저 Mage_Core::AAA
레코드를 확인합니다 . 찾지 못하면 키의 번역으로 돌아갑니다 AAA
.
예제 시나리오 DDD
에서는 translate.csv
파일 에서 번역이 수행됩니다 .
다른 시나리오에서는 관련 블록이 될 수 있습니다 Mage_Catalog_Block_Product_View
. 이 경우 Magento는 먼저 번역 레코드를 확인하고 번역 Mage_Catalog::AAA
을 찾습니다 AAA
.
사실상, 모듈 범위 변환은 일반 번역 보다 우선 순위가 높습니다 . 어떤 변환이 사용되는지는 클래스가 __()
메소드 를 호출 한 모듈에 따라 다릅니다 .
번역이 작동하지 않는 경우 확인해야 할 사항
translate.csv
파일 의 번역을 사용하지 않는 경우 다음 점검 목록을 따르십시오.
- 번역 캐시가 해제 / 새로 고침됩니까? (해결 방법 : 캐시 지우기)
- 는 IS
translate.csv
파일은 현재 상점에 대한 주제 대체 정말? (솔루션 : 테마 구성 수정)
core_translate
표에 번역에 대한 충돌 레코드가 있습니까? (해결 방법 :에서 충돌하는 레코드 제거 core_translate
)
- 이전의 모든 사항이 원인이 아닌 경우 다른 모듈과 충돌하는 번역이 있어야합니다. (솔루션 : 아래 참조)
모듈 범위 변환 충돌에 대한 솔루션
당신이 마지막 경우에 해당하는 찾아내는 경우에, 단순히로 번역에게 두 번째 시간을 추가 translate.csv
로 번역을하는 모듈의 모듈 범위.
예를 들어, 항상 테마 번역 AAA
을 DDD
통해 번역 하려는 경우 다음에서 수행 할 수 있습니다 translate.csv
.
"AAA","DDD"
"Mage_Catalog::AAA","DDD"
"Some_Module::AAA","DDD"
실제로는 충돌이있는 경우, 즉 번역이 작동하지 않는 경우에만 모듈 범위를 번역에 추가합니다.
추가 사항
인라인 번역
Magento의 인라인 변환 기능은 core_translate
모듈 범위 접두사를 사용하여 테이블에 사용자 지정 변환을 추가합니다 .
하위 호환성
테마 변환의 우선 순위는 데이터베이스가 Magento 버전 1.3 정도까지 변환 된 것보다 높았습니다.
XML 번역
마 젠토는 때때로 평가 translate=""
에 인수 config.xml
, system.xml
자식 노드의 값을 변환하고 레이아웃 XML을.
이러한 경우 module=""
에는 번역 범위에 대한 모듈을 지정하기 위해 인수를 사용하여 도우미 클래스를 지정할 수 있습니다 . XML에 인수가 지정
되지 않은 경우 module
, core/data
헬퍼는 하위 노드 값을 변환하는 데 사용됩니다.
추가 정보
나는이 글에서 Magento 번역 과정에 대한 세부 사항을 고집했지만 너무 많은 정보를 원하지 않기 때문에 고백했습니다.
- 번역 배열이 구축되는 동안 일부 기술적 세부 사항
- 모듈에 추가 번역 파일을 사용할 수있는 가능성
core_translate
레코드에 대한 상점보기 범위
- 다른 번역 방법을 사용하는 장단점
추가 정보가 필요한 경우 별도의 질문을하십시오.