Magento2 dịch văn bản mẫu Javascript (KO)


24

Tôi đang cố gắng thêm một bản dịch cho văn bản <!-- ko i18n: 'Store credit available' --><!-- /ko -->hiện tại vendor/magento/module-customer-balance/view/frontend/web/template/payment/customer-balance.html, nhưng nếu tôi cố gắng thay đổi văn bản trong tôi i18n/en_US.csv, nó vẫn không hoạt động.

Tôi đã xóa bộ đệm và sử dụng triển khai nội dung tĩnh.

Có cách nào khác để thêm bản dịch cho mẫu KO không?

Câu trả lời:


39

Vì vậy, cuối cùng tôi đã có thể tìm ra vấn đề.

Có vẻ như bản dịch mẫu JS được đọc từ js-translation.jsonđó được tạo trong khi setup:static-content:deploythực hiện. Để điền dữ liệu vào tệp này, một gói ngôn ngữ mới phải được tạo cho dự án.

Vì vậy, thay vì thêm CSV ở cấp chủ đề như app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvchúng ta cần thêm nó vào gói ngôn ngữ.

Để tạo Gói ngôn ngữ mới trước tiên, project document rootchúng tôi sẽ cần tạo các thư mục sau:

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

Quan trọng : SỬ DỤNG chữ thường Tên chỉ mục tên thư mục camcelcasing sẽ không hoạt động

Sau đó thay đổi thư mục thành các thư mục mới được tạo:

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

Bây giờ bạn có thể tạo một composer.jsontệp (tùy chọn) với nội dung sau:

{                                                     
    "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"                        
        ]                                             
    }                                                 
}                                                     

Tiếp theo tạo chúng ta cần một language.xmltệp có nội dung sau:

<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>

Sau khi registration.phpchứa nội dung sau là cần thiết:

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

Bây giờ chúng tôi có thể tạo một CSV dịch của chúng tôi. Nếu bạn đã có một trong thư mục chủ đề, một cái gì đó giống như app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvbạn có thể di chuyển nó đếnapp/i18n/<project-name>/<xx_xx>/xx_XX.csv

Bây giờ từ project document rootchúng ta cần chạy các lệnh sau:

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

Chúng ta cần xóa js-translation.jsoncái đã được tạo trước khi chạysetup:static-content:deploy

Bây giờ chúng tôi chạy triển khai nội dung tĩnh:

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

Khi đã xong, chúng tôi xóa bộ đệm:

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

Chúng tôi có thể xác minh nếu các tệp dịch cho mẫu JS đã được tạo bằng cách tìm tất cả js-translation.jsonbên trong thư mục pub / static.

find pub/static -name js-translation.json

Điều này sẽ cung cấp danh sách tất cả các tệp dịch được tạo cho các mẫu JS.

Tài liệu tham khảo:

  1. Magento DevDocs
  2. Vấn đề Github liên quan

Trong js-translation.jsoncác tệp dự án của tôi được tạo chính xác từ triển khai nội dung tĩnh ngay cả khi các tệp .csv được chèn vào app/design/frontend/vendor/theme-name/i18n/xx_XX.csv. Chăm sóc duy nhất là xóa tất cả js-translation.jsontrước khi chạy triển khai nội dung tĩnh.
LucScu

Bạn đang dùng phiên bản nào của magento?
Atish Goswami

Vender / Theme vì vậy từ đây nên là <tên dự án> theo mã trên của bạn ??
Kaushal Suthar

1
Đây thực sự là cách duy nhất để làm điều này? Ý tôi là, ngay cả tài liệu ( devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/ trộm ) nói rằng chúng tôi sẽ có thể đưa các tệp dịch vào design/<vender>/<theme>/i18n/xx_XX.csv.
Giel Berkers

1
Magento 2 có rất nhiều lỗi liên quan đến vấn đề này, đối với chúng tôi, cách tốt nhất là tự tạo một tập lệnh tạo js-translation.jsontệp và tạo cấu hình máy chủ web cung cấp nó theo đúng loại yêu cầu
cjohansson

1

Như tôi đã mô tả trong vấn đề Github ( https://github.com/magento/magento2/issues/7525#issuecomment-316690100 ) có một giải pháp khác (dễ dàng hơn) cho vấn đề đó.

Bạn chỉ cần đảm bảo triển khai mọi ngôn ngữ riêng biệt.

Vì vậy, thay vì sử dụng:

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

sử dụng

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

Điều này có thể được gây ra bởi thực tế là static-content:deploychỉ biên dịch các tệp một lần và sao chép chúng sau đó sang các ngôn ngữ khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.