TL; DR
ถ้าคุณไม่ได้สนใจในรายละเอียดวิธีการทำงานของการแปลข้ามเนื้อหาขึ้นอยู่กับ
สิ่งที่ต้องตรวจสอบว่าการแปลของคุณไม่ได้ทำงานด้านล่างโดยเฉพาะหมวดโซลูชั่นสำหรับโมดูลความขัดแย้งแปลขอบเขต  
ภาพรวมการแปลวีโอไอพี
Magento จัดลำดับความสำคัญของแหล่งการแปล (จากสูงสุดไปต่ำสุด):
- DB ( core_translateตาราง)
- translate.csvไฟล์ธีม
- ส่วนapp/locale/*/*.csvไฟล์
อาร์เรย์การแปลถูกสร้างขึ้นอย่างไร
การแปลโมดูล
ก่อนอื่นไฟล์ทั้งหมดapp/locale/*/*.csvที่อ้างถึงจากetc/config.xmlไฟล์โมดูลที่ใช้งานจะถูกแยกวิเคราะห์ นี่คือคำแนะนำของกระบวนการ: 
สมมติว่า Magento ค้นหา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"
ภายใต้สถานการณ์เหล่านี้วีโอไอพีสร้างระเบียนต่อไปนี้ในอาร์เรย์การแปล:
array(
    "AAA" => "BBB",
    "Mage_Catalog::AAA" => "BBB"
)
ค่าที่สองคือโมดูลแปลขอบเขต ชื่อโมดูลที่นำหน้ามาจากโหนด XML config ที่มีการประกาศไฟล์แปล
ถ้าแปลเดียวกันจะระบุอีกครั้งโดยไฟล์โมดูลที่สองเช่นในSome_Module.csvการแปลเป็น"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;
}
วิธีการใน Helpers and Controllers ทำงานอย่างสอดคล้องกัน  
ตัวอย่างสถานการณ์การค้นหา
ยกตัวอย่างเช่นสมมติ$this->__('AAA')ว่าเรียกว่าในไฟล์แม่แบบ หากบล็อกที่เกี่ยวข้องมีประเภทMage_Core_Block_TemplateวีโอไอพีจะตรวจสอบMage_Core::AAAบันทึกก่อน AAAถ้ามันไม่ได้พบว่ามันก็จะถอยกลับไปแปลสำหรับคีย์ 
ในสถานการณ์ตัวอย่างสิ่งนี้จะส่งผลให้เกิดการแปลDDD(จากtranslate.csvไฟล์)
Mage_Catalog_Block_Product_Viewในสถานการณ์ที่แตกต่างกันบล็อกที่เกี่ยวข้องที่อาจจะ ในกรณีนี้วีโอไอพีครั้งแรกจะตรวจสอบบันทึกการแปลและจะพบการแปลMage_Catalog::AAAAAA
ดังนั้นการแปลขอบเขตโมดูลจะมีลำดับความสำคัญสูงกว่าดังนั้นการแปลทั่วไปใด ๆ การแปลใดที่ใช้จะขึ้นอยู่กับโมดูลที่คลาสนั้นเรียกจาก__()เมธอด
สิ่งที่ต้องตรวจสอบว่าการแปลของคุณไม่ทำงาน
หากtranslate.csvไม่ได้ใช้การแปลของคุณจากไฟล์ให้ทำตามรายการตรวจสอบนี้:
- แคชการแปลถูกปิด / รีเฟรชหรือไม่ (โซลูชัน: ล้างแคช)
- เป็น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=""อาร์กิวเมนต์เพื่อระบุโมดูลสำหรับขอบเขตการแปล 
หากไม่มีการmoduleระบุอาร์กิวเมนต์ใน XML ตัวcore/dataช่วยจะถูกใช้เพื่อแปลค่าโหนดลูก
ข้อมูลเพิ่มเติม
ฉันสารภาพว่าฉันคัดค้านรายละเอียดบางส่วนของกระบวนการแปล Magento ในโพสต์นี้ แต่เพียงเพราะฉันไม่ต้องการข้อมูลมากเกินไป
- รายละเอียดทางเทคนิคบางอย่างในขณะที่อาร์เรย์การแปลถูกสร้างขึ้น
- ความเป็นไปได้ที่จะใช้ไฟล์แปลเพิ่มเติมสำหรับโมดูล
- จัดเก็บขอบเขตการดูสำหรับcore_translateบันทึก
- ข้อดีและข้อเสียโดยใช้วิธีการแปลที่แตกต่างกัน
โปรดถามคำถามแยกต่างหากหากต้องการข้อมูลเพิ่มเติม