Bất kể bạn tiếp cận nó như thế nào, vấn đề của bạn đòi hỏi một giải pháp "sáng tạo", xứng đáng là lưu ý của nhà phát triển cho các nhà phát triển / bảo trì tiếp theo sử dụng. Đầu tiên, một số nền tảng, theo sau là một ghi chú, tiếp theo là một giải pháp dễ dàng và tôi nghĩ rằng ở cuối <--
tl; dr .
Như Zyava đã chỉ ra , dịch thuật là đối tượng của mô-đun thực hiện dịch thuật. Các mẫu kết xuất trong các phiên bản khối và các phiên bản khối có một thuộc module_name
tính được sử dụng khi gọi dịch; tham chiếu 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);
}
Tài module_name
sản là (thông thường) có nguồn gốc theo yêu cầu và dựa trên tên lớp (ref. ::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;
}
Vì vậy, nếu thuộc module_name
tính đã được đặt, bản dịch mô-đun đó sẽ được áp dụng. Đối với các khối còn lại từ bố cục lõi, thuộc tính này có thể được đặt thông qua bố cục XML; ví dụ:
<default>
<action block="root" method="setModuleName">
<name>Your_Module</name>
</action>
</default>
Võngà! Mô-đun CSV của bạn sở hữu bản dịch cho trường hợp đó. Đây có thể là một cách tiếp cận. Tất nhiên, vẫn còn tình trạng khó khăn trong việc dịch các mô-đun khác đang được áp dụng thông qua trình trợ giúp dành riêng cho mô-đun trong các trường hợp khối (tất nhiên bao gồm các tệp mẫu) và điều này luôn đúng với các bản dịch XML bố cục. Ngoài ra, cách tiếp cận này sẽ phá vỡ hành vi Vô hiệu hóa Mô-đun đầu ra, sử dụng module_name
param.
Giải pháp
Hóa ra, có thể chỉ định nhiều tệp dịch cho một mô-đun. Nó không được thực hiện trong lõi (mỗi mô-đun chỉ khai báo một tệp .csv ), nhưng chức năng có trong 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;
}
và
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;
}
Vì nội dung của các tệp được hợp nhất (tôi đã kiểm tra), nên chỉ có thể chỉ định các chuỗi mà bạn muốn ghi đè trong (các) CSV tùy chỉnh của mình. Ví dụ: nếu bạn muốn dịch chuỗi Thông tin bổ sung trên trang sản phẩm (được dịch bởi Mage_Catalog
mô-đun), thì sau đây sẽ hoạt động:
ứng dụng / ngôn ngữ / Custom.csv :
"Additional Information","More Info, Dude"
Trong mô-đun cấu hình của bạn - mà nên <depends />
trên Mage_Catalog
để đảm bảo nội dung của nó sáp nhập sau - sau đây sẽ gây ra Custom.csv cặp dịch để merge trên đầu trang của bản gốc:
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<additional>Custom.csv</additional>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
Điều thú vị về phương pháp này là bạn có thể thu thập các bản dịch cốt lõi ghi đè của mình trong một tệp.