Magento2: làm thế nào ghi đè dịch trong gói ngôn ngữ?


9

Tôi đã cài đặt gói ngôn ngữ app/i18n/magento2translations/language_nl_nl/với tệp nl_NL.csv Nó hoạt động hoàn hảo.
Ngoài ra, tôi đã thêm vào tệp chủ đề tùy chỉnh app/design/frontend/COMPANY/PROJECT/i18n/nl_NL.csvvới các bản dịch tùy chỉnh của mình, nhưng nó không hoạt động (chế độ: nhà phát triển, nội dung tĩnh và bộ nhớ cache đã được xóa).
Khi tôi di chuyển dịch tùy chỉnh sang gói ngôn ngữ nl_NL.csv , gói dịch tùy chỉnh hoạt động tốt.
Tôi nghĩ gói ngôn ngữ được ưu tiên hơn là một chủ đề tùy chỉnh i18n dịch .
Làm thế nào ghi đè dịch trong gói ngôn ngữ theo cách chính xác?


Vui lòng thử chuyển chế độ sang mặc định hoặc sản xuất và kiểm tra lại.
Tự chẩn đoán

thử rm -rf pub/static/*, rm -rf var/cache/*từ thư mục gốc m2.
belfort1

Tôi đã viết trong câu hỏi (chế độ: nhà phát triển, nội dung tĩnh và bộ nhớ cache đã được xóa) + bộ nhớ cục bộ đã dịch trong json. Nó cũng được làm sạch. Không ảnh hưởng.
goral

Câu trả lời:


11


[CẬP NHẬT] Vì thứ tự tải dịch Magento 2.2 là như sau:

  1. Đang tải các bản dịch mô-đun.
  2. Tải thông tin gói dịch.
  3. Tải tập tin dịch chủ đề.
  4. Tải cơ sở dữ liệu dịch. (Bản dịch nội tuyến)

Điều đó về cơ bản có nghĩa là gói dịch sẽ ghi đè lên bản dịch chủ đề. Vì vậy, giải pháp nhanh chóng và dễ dàng sẽ được khắc phục bằng cách sử dụng bản dịch Inline, điều này cũng có thể có trong M1. Nhưng hiện tại chúng tôi có M2 có tính linh hoạt cao hơn trên tàu và có một cách để mở rộng các gói dịch hiện có với các gói dịch tùy chỉnh. Tất cả bạn cần làm là tạo ra một gói dịch. Vì vậy, tạo một mô-đun

Dự án \ Địa điểm

tạo một register.php cho nó với nội dung sau:

\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
'project_nl_nl',
__DIR__
);

Đó là cách chúng tôi xác định mô-đun đó là một gói dịch. Bước cuối cùng, tạo một tệp ngôn ngữ tệp meta với nội dung sau:

<language ...>
  <code>nl_NL</code>
  <vendor>project</vendor>
  <package>nl_nl</package>
  <sort_order>10</sort_order>
  <use vendor="language" package="nl_nl" />
</language>

Bằng cách này, bạn chỉ định gói dịch chính mà bạn muốn gia hạn. Và cũng xác định thứ tự, trong trường hợp bạn đã có kế thừa gói dịch trong dự án. Đây là một liên kết trên ví dụ từ chính magento .

Một điều nữa. Hãy chắc chắn rằng <vendor> . '_' . <code>(từ ngôn ngữ của bạn ) sẽ khớp với tên mô-đun từ registration.php. project_nl_nltrong ví dụ của tôi


Âm thanh tuyệt vời - nhưng chính xác thì tôi sẽ ghi đè bản dịch ở đâu? Một cái khác nl_NL.csvtrong mô-đun đó?
fritzmg

1
@fritzmg vâng, định dạng / tên tệp tranlsation hoàn toàn giống nhau
Sergey

1
thx, nghĩ vậy Tuy nhiên tôi vẫn không thể làm cho nó hoạt động được, mặc dù tôi đã mở một câu hỏi riêng cho điều đó: magento.stackexchange.com/questions/238459/ trộm
fritzmg

1
Chỉ cần cho độc giả thêm, câu trả lời này không còn giá trị. Từ lâu, Magento đã thay đổi hành vi này: github.com/magento/magento2/blob/2.3-develop/lib/i INTERNal /. Thứ tự hiện tại là: 1) Dịch mô-đun (app / code / [Vendor_Name] / i18n) 2) Bản dịch gói ngôn ngữ (app / i18n) 3) Bản dịch chủ đề (ứng dụng / thiết kế / [theme] / i18n) 4) Bản dịch cơ sở dữ liệu (nội tuyến)
Manuel García Solipa

@ ManuelGarcíaSolipa vâng, bạn đúng, họ đã thay đổi nó trong 2.2. Đã cập nhật bài đăng
Sergey

4

Tôi đã có cùng một vấn đề và tìm thấy giải pháp. \ Magento \ Framework \ Translate trước tiên sẽ tải bản dịch chủ đề và sau đó tải bản dịch gói. Bạn nên tạo một plugin cho lớp này trên phương thức loadData và sửa thứ tự tải.


Ý kiến ​​hay. Làm thế nào bạn tạo ra một plugin? Tôi chỉ quản lý để tạo một ưu tiên vì tất cả các phương pháp khác tôi cần đã được bảo vệ. Tôi sẽ quan tâm đến một giải pháp giống như plugin.
simonthesorcerer

2

Tôi không biết đó là vì bây giờ là năm 2019 hay nếu câu trả lời của Serge đã có lỗi ngay từ đầu, nhưng thứ tự tải thực tế trong nhà cung cấp tệp / magento / framework / Translate.php là:

$this->_loadModuleTranslation();
$this->_loadPackTranslation();
$this->_loadThemeTranslation();
$this->_loadDbTranslation();

Những gì được tải sau này, được ghi đè lên các bản dịch trước đó.

Vì vậy, mặc dù câu trả lời của Daniel Sloof hoạt động, bạn chỉ cần thêm bản dịch của mình vào chủ đề và nó sẽ có mức độ ưu tiên cao hơn gói ngôn ngữ.


1

Nếu nội dung tĩnh sạch, lưu trữ và dịch trong CSV chủ đề lưu trữ cục bộ hoạt động, nhưng không cho một số từ. Vì vậy, gói lang được ghi đè bởi dịch chủ đề tùy chỉnh, nhưng không phải cho tất cả các cụm từ.


0

Magento đang tải thông tin dịch theo thứ tự sau

Đang tải các bản dịch mô-đun. Tải tập tin dịch chủ đề Tải thông tin gói dịch. Tải db tranlation. (Bản dịch nội tuyến)

Tôi có bản dịch khác nhau trong gói de_de trong mô-đun, chủ đề và gói khác (nhà cung cấp / {name} / ngôn ngữ-de_de). Tôi thấy bản dịch đó lấy từ chủ đề luôn. Xóa pub / static và cache (có cache trong Chrome). Các ưu tiên dịch tải thực sự là gì?

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.