Câu trả lời:
Tôi giả sử bạn có nghĩa là bản dịch của $this->__('...')
nơi không có người trợ giúp bùng nổ được sử dụng. Sau đó, nó phụ thuộc vào phạm vi mô-đun của khối
Lớp khối đang được sử dụng để kết xuất mẫu. Bạn sẽ có thể xác định nó từ các tệp XML bố trí, nhưng một số khối được tạo theo chương trình, trong trường hợp này bạn sẽ phải tìm kiếm trong mã. Nếu bạn may mắn, lớp khối được ghi lại trong chính mẫu, như thế này:
/** @var $this Mage_Catalog_Block_Product_List */
hoặc như thế này:
/** @see Mage_Catalog_Block_Product_List */
Phạm vi là mô-đun mà lớp này thuộc về (như Mage_Catalog
). Nhưng hãy cẩn thận với các bài viết lại. Nếu lớp khối đã được viết lại bởi một phần mở rộng, phạm vi sẽ thay đổi thành phần mở rộng này.
module_name
đã được đặt (ví dụ thông qua bố cục XML), thì điều này được ưu tiên.getModuleName()
phương thức, phạm vi được trả về từ phương thức này được sử dụng.Bây giờ bạn đã biết phạm vi, bạn có thể tra cứu tệp CSV, đó là tệp được xác định trong mô-đun này config.xml
. Nó cũng có thể có nhiều hơn một, nhưng quy ước thường được tuân theo là có một tệp cho mỗi mô-đun trong biểu mẫu Module_Name.csv
.
Nếu tệp này chứa chuỗi cần dịch, bạn đã tìm thấy nó, ngoại trừ nếu bạn có translate.csv
trong chủ đề của mình, nó sẽ ghi đè bản dịch cho phạm vi chính xác này (như "Module_Name::Foo","Foo"
:).
Nếu nó không có trong cả hai, hãy tìm bản dịch không có tiền tố phạm vi mô-đun translate.csv
(nếu nó tồn tại).
Nếu nó không ở đó, tìm kiếm trong tất cả các tệp CSV mô-đun khác . Cái nào từ mô-đun được tải trước, sẽ thắng (tức là mô-đun lõi trước, sau đó theo thứ tự bảng chữ cái, tôn trọng các phụ thuộc). Lưu ý rằng dự phòng này chỉ được sử dụng khi không ở chế độ nhà phát triển.
Nếu bạn muốn chắc chắn, từ các tệp mà một bản dịch cụ thể trên trang đến từ đâu, tôi có thể đề xuất cho bạn phần mở rộng miễn phí Bản dịch ( DISCLAIMER: Tôi đã viết nó)
Lấy nó ở đây: https://github.com/schmengler/TranslationH gợi ý
Trừ khi bạn đang thử nghiệm đơn vị, bạn thường không thực sự quan tâm csv dịch nào đang được sử dụng bởi vì tất cả chúng đều được hợp nhất trước khi Magento bắt đầu dịch bất cứ thứ gì.
Tuy nhiên, nếu bạn vẫn muốn tìm ra nó, trước tiên hãy sử dụng các tệp xml bố cục để tìm ra lớp khối nào đang được sử dụng. Nếu bạn tìm thấy lớp khối, thì nó sẽ sử dụng tệp config.xml của mô-đun đó. Nếu không có lớp khối nào được chỉ định trong bố cục, bạn có thể cần phải tìm trong các lớp và bộ điều khiển khối cha.
Điều chính cần biết là các mẫu sử dụng hàm dịch __ của lớp khối liên kết của chúng và lớp khối sử dụng hàm __ của lớp trợ giúp Data.php của lớp.
Có vẻ như bạn muốn giữ ngăn nắp khi bạn thêm bản dịch của mình. Với rất nhiều tệp CSV để dịch, tại sao chọn một tệp ngẫu nhiên, tại sao không thêm nó vào đúng tệp CSV?
Dưới đây là một ví dụ tôi đã làm việc trên: Giả sử bạn đang chỉnh sửa trang tài khoản của khách hàng, và bạn đã thay đổi Sổ địa chỉ để địa chỉ của tôi . Bây giờ không có bản dịch tiếng Pháp hiển thị cho Địa chỉ của tôi .
Cách để tìm đúng tệp CSV là tìm kiếm bản dịch hiện có trong cùng một phần của trang web. Mục Đơn hàng của tôi / Lệnh Mes nằm trong cùng một phần của trang web, vì vậy tôi có thể chạy tìm kiếm:
$ cd magento/app/
$ find . -iname '*.csv' | xargs grep -in --color 'Mes Commandes'
./locale/fr_FR/Mage_Sales.csv:73:"Back to My Orders","Retour à mes commandes"
./locale/fr_FR/Mage_Sales.csv:308:"My Orders","Mes commandes"
./locale/fr_FR/Mage_Sales.csv:309:"My Orders - Details","Mes commandes - Détails"
./locale/fr_FR/Mage_Oscommerce.csv:7:"Back to My Orders","Retour à mes commande "
./locale/fr_FR/Mage_Oscommerce.csv:51:"My Previous Orders","Mes commandes précédentes"
./locale/fr_FR/Mage_Customer.csv:215:"My Orders","Mes commandes"
Vì vậy, nhìn vào điều này với một chút đoán, tập tin tốt nhất để sửa đổi là locale / fr_FR / Mage_Sales.csv. Sau khi thực hiện thay đổi, đừng quên làm mới Bản dịch trong Hệ thống> Quản lý bộ đệm !
Ngoài ra: lưu ý các tùy chọn không phân biệt chữ hoa chữ thường; -iname
cho find
, và -i
cho grep
. Những điều này làm giảm nỗ lực bạn cần dành để săn bắn. Các --color
tùy chọn không phản ánh ở đây, nhưng sản lượng sẽ được nhiều dễ đọc hơn so với những gì bạn thấy ở đây.
Phương thức dịch __ () được sử dụng trong các mẫu có trong tệp /app/code/core/Mage/Core/Block/ Abauge.php và lấy tên mô-đun để tìm bản dịch chính xác. Nó xây dựng một mảng theo định dạng sau sẽ được sử dụng để dịch:
array(1) {
[0]=> object(Mage_Core_Model_Translate_Expr)#161 (2) {
["_text":protected]=> string(18) "Orders and Returns"
["_module":protected]=> string(10) "Mage_Sales"
}
}
Nếu bạn muốn xem tên mô-đun mà mẫu của bạn đang sử dụng, bạn có thể gọi một hàm:
$this->getModuleName();
Sau đó nên có một tệp dịch phù hợp với chuỗi này. Ví dụ với tôi trên trang xem danh mục, chức năng này sẽ trả về * Mage_Catalog * và sau đó tôi có thể tìm thấy tệp dịch Mage_Catalog.csv