ข้อความเทมเพลต Magento2 แปล Javascript (KO)


24

ฉันพยายามที่จะเพิ่มการแปลสำหรับข้อความที่<!-- ko i18n: 'Store credit available' --><!-- /ko -->มีอยู่vendor/magento/module-customer-balance/view/frontend/web/template/payment/customer-balance.htmlแต่ถ้าฉันพยายามที่จะเปลี่ยนข้อความในของฉันi18n/en_US.csvก็ยังคงไม่ทำงาน

ฉันล้างแคชและใช้การปรับใช้เนื้อหาแบบคงที่

มีวิธีอื่นในการเพิ่มการแปลสำหรับเทมเพลต KO หรือไม่

คำตอบ:


39

ในที่สุดฉันก็สามารถเข้าใจปัญหาได้

ดูเหมือนว่าการแปลเทมเพลต JS นั้นjs-translation.jsonถูกสร้างขึ้นระหว่างsetup:static-content:deployการดำเนินการ ในการเติมข้อมูลในไฟล์นี้จะต้องสร้างแพ็คเกจภาษาใหม่สำหรับโครงการ

ดังนั้นแทนที่จะเพิ่ม CSV ในระดับธีมเช่นapp/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvเราต้องเพิ่มลงในแพ็คเกจภาษา

ในการสร้างชุดภาษาใหม่ก่อนจากproject document rootเราจะต้องสร้างไดเรกทอรีต่อไปนี้:

mkdir -p app/i18n/<project-name>/<xx_xx>

สำคัญ : ใช้ชื่อตัวพิมพ์เล็กเท่านั้นชื่อโฟลเดอร์ camcelcased เท่านั้นจะไม่ทำงาน

จากนั้นเปลี่ยนไดเรกทอรีเป็นโฟลเดอร์ที่สร้างขึ้นใหม่:

cd app/i18n/<project-name>/<xx_xx>

ตอนนี้คุณสามารถสร้างcomposer.jsonไฟล์ ( เป็นทางเลือก) ด้วยเนื้อหาต่อไปนี้:

{                                                     
    "name": "<project-name>/<xx_xx>",                             
    "description": "<sample description>", //Ex:English (United States) language
    "version": "<version-number>", //100.0.1                             
    "license": [                                      
        "OSL-3.0",                                    
        "AFL-3.0"                                     
    ],                                                
    "require": {                                      
        "magento/framework": "100.0.*"                
    },                                                
    "type": "magento2-language",                      
    "autoload": {                                     
        "files": [                                    
            "registration.php"                        
        ]                                             
    }                                                 
}                                                     

สร้างครั้งต่อไปเราต้องการlanguage.xmlไฟล์ที่มีเนื้อหาดังต่อไปนี้:

<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
    <code>xx_XX</code> <!-- example: <code>en_US</code> -->
    <vendor><project-name></vendor>
    <package><xx_xx></package> <!-- example: <package>en_us</package> -->
</language>

หลังจากกว่าregistration.phpประกอบด้วยเนื้อหาต่อไปนี้เป็นสิ่งจำเป็น:

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
    '<project-name>_<xx_xx>',
    __DIR__
);

ตอนนี้เราสามารถสร้าง CSV แปลของเรา หากคุณมีหนึ่งในโฟลเดอร์ชุดรูปแบบสิ่งที่app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvคุณสามารถย้ายไปapp/i18n/<project-name>/<xx_xx>/xx_XX.csv

ตอนนี้project document rootเราจำเป็นต้องรันคำสั่งเหล่านี้:

find pub/static -name js-translation.json -exec rm -rf {} \;

เราจำเป็นต้องลบสิ่งjs-translation.jsonที่สร้างขึ้นก่อนที่จะรันsetup:static-content:deploy

ตอนนี้เราเรียกใช้การปรับใช้เนื้อหาแบบคงที่:

php bin/magento setup:static-content:deploy <xx_XX>

เมื่อเสร็จแล้วเราจะล้างแคช:

php bin/magento cache:clean
php bin/magento cache:flush

เราสามารถตรวจสอบว่าไฟล์การแปลสำหรับเทมเพลต JS ถูกสร้างขึ้นโดยการค้นหาทั้งหมดjs-translation.jsonภายในโฟลเดอร์ pub / static

find pub/static -name js-translation.json

นี่จะให้รายการของไฟล์แปลทั้งหมดที่สร้างขึ้นสำหรับเทมเพลต JS

อ้างอิง:

  1. Magento DevDocs
  2. ปัญหา Github ที่เกี่ยวข้อง

ในjs-translation.jsonไฟล์โครงการของฉันถูกสร้างอย่างถูกต้องจากการปรับใช้เนื้อหาแบบสแตติกแม้ว่าจะแทรกไฟล์. csv ไว้app/design/frontend/vendor/theme-name/i18n/xx_XX.csvก็ตาม การดูแลเพียงอย่างเดียวคือการลบทั้งหมดjs-translation.jsonก่อนที่จะทำการปรับใช้เนื้อหาแบบสแตติก
LucScu

วีโอไอพีรุ่นไหนที่คุณใช้อยู่
Atish Goswami

Vender / Theme ดังนั้นจากสิ่งนี้ควรเป็น <project-name> ตามรหัสด้านบนของคุณหรือไม่?
Kaushal Suthar

1
นี่เป็นวิธีเดียวที่จะทำได้ ฉันหมายถึงแม้เอกสาร ( devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/ ...... ) ระบุว่าเราควรจะสามารถใส่ไฟล์แปลลงไปdesign/<vender>/<theme>/i18n/xx_XX.csvได้
Giel Berkers

1
Magento 2 มีข้อบกพร่องมากมายที่เกี่ยวข้องกับเรื่องนี้สำหรับเราวิธีที่ดีที่สุดคือการสร้างสคริปต์ที่สร้างjs-translation.jsonไฟล์ด้วยตนเองและสร้างการกำหนดค่าเว็บเซิร์ฟเวอร์ที่ส่งคำขอประเภทที่ถูกต้อง
cjohansson

1

ตามที่ฉันอธิบายไว้ในปัญหา Github ( https://github.com/magento/magento2/issues/7525#issuecomment-316690100 ) มีวิธีแก้ไขปัญหาอื่นที่ง่ายกว่า (ง่ายกว่า)

คุณเพียงแค่ต้องแน่ใจว่าได้ติดตั้งทุกภาษาแยกกัน

ดังนั้นแทนที่จะใช้:

php bin/magento setup:static-content:deploy en_US de_DE it_IT fr_FR es_ES

ใช้

php bin/magento setup:static-content:deploy en_US
php bin/magento setup:static-content:deploy de_DE
php bin/magento setup:static-content:deploy it_IT
php bin/magento setup:static-content:deploy fr_FR
php bin/magento setup:static-content:deploy es_ES

นี่อาจเกิดจากข้อเท็จจริงที่ว่ามีstatic-content:deployเพียงไฟล์ที่รวบรวมหนึ่งครั้งและคัดลอกไฟล์เหล่านั้นไปยังภาษาอื่นในภายหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.