ไม่ว่าคุณจะเข้าหาที่ใดปัญหาของคุณต้องใช้วิธีการ "สร้างสรรค์" ที่มีค่าหมายเหตุผู้พัฒนาสำหรับผู้พัฒนา / ผู้ดูแลระบบคนต่อไปที่จะใช้ ขั้นแรกพื้นฐานบางอย่างตามมาด้วยการบันทึกตามมาด้วยการที่ง่ายและผมคิดว่าวิธีการแก้ปัญหาที่เหมาะสมในตอนท้าย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
ทรัพย์สิน (ปกติ) ที่มากับความต้องการและขึ้นอยู่กับชื่อชั้น (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;
}
ดังนั้นถ้าmodule_name
การตั้งค่าคุณสมบัติแล้วว่าแปลโมดูลใช้ สำหรับบล็อกที่มีอยู่จากโครงร่างหลักคุณสมบัตินี้สามารถตั้งค่าผ่านโครงร่าง XML ตัวอย่างเช่น:
<default>
<action block="root" method="setModuleName">
<name>Your_Module</name>
</action>
</default>
Voila! CSV โมดูลของคุณเป็นเจ้าของการแปลสำหรับอินสแตนซ์นั้น นี่อาจเป็นแนวทาง แน่นอนว่ายังมีสถานการณ์ที่เหนียวแน่นของการแปลโมดูลอื่น ๆ ที่ถูกนำไปใช้ผ่านตัวช่วยเฉพาะโมดูลในอินสแตนซ์บล็อก (รวมถึงไฟล์เทมเพลตแน่นอน) และเป็นจริงเสมอสำหรับการแปล XML โครงร่าง นอกจากนี้วิธีการนี้จะหยุดการทำงานของโมดูลปิดการใช้งานเอาต์พุตซึ่งใช้module_name
พารามิเตอร์
วิธีการแก้
เมื่อปรากฎว่าเป็นไปได้ที่จะระบุไฟล์แปลหลายไฟล์สำหรับโมดูล มันไม่ได้ทำในคอร์ (แต่ละโมดูลจะประกาศไฟล์. 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
โมดูล) สิ่งต่อไปนี้จะใช้ได้:
แอพ / สถานที่ / 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>
สิ่งที่ดีเกี่ยวกับวิธีนี้คือคุณสามารถรวบรวมการแปลที่สำคัญของคุณในไฟล์เดียว