Năm ngoái, chúng tôi đã giới thiệu một loạt bài về dịch các khía cạnh khác nhau của WordPress, tập trung vào việc quốc tế hóa một chủ đề hoặc plugin hiện có.
Trong bài đăng hôm nay, chúng tôi sẽ mở rộng và bổ sung cho loạt bài đó một số thông tin dành cho các nhà phát triển chủ đề và plugin, cụ thể là cách bản địa hóa chủ đề hoặc plugin của bạn hoặc nó đã sẵn sàng để dịch.
Chúng tôi sẽ xem xét những việc bạn cần làm khi tạo sản phẩm mới để đảm bảo người dùng có thể dễ dàng dịch chúng sang ngôn ngữ của họ. Từ 29% trang web WordPress.com được sử dụng bằng tiếng nước ngoài và trọng tâm lớn hơn đang được đặt vào việc quốc tế hóa trong cộng đồng WordPress, điều quan trọng hơn bao giờ hết là đảm bảo các chủ đề và plugin của bạn sẵn sàng dịch.
Vì vậy, hãy xem xét quá trình một cách chi tiết để đảm bảo chúng ta sử dụng các chức năng và phương pháp phù hợp khi tạo chủ đề và plugin.
Trong bài viết này, chúng tôi sẽ đề cập đến:
Nội dung
Miền văn bản
Điều đầu tiên bạn cần làm là xác định miền văn bản của bạn.
Miền văn bản là gì? Miền văn bản là một cách đánh dấu các bản dịch thuộc về nhau. Nó làm cho các tệp ngôn ngữ trở nên dễ di động, mô-đun và dễ đọc hơn nhiều.
Đặt tên miền văn bản là một vấn đề đơn giản bởi vì việc đặt tên cho plugin / chủ đề của bạn quyết định nó là gì. Miền văn bản phải khớp với slug của chủ đề hoặc plugin của bạn, thường là tên của thư mục chứa nó.
Đối với chủ đề Twenty Fifteen sắp tới, Tên của chủ đề, tất nhiên, là Twenty Fifteen. Các con sên – là tên của thư mục – là “hai mươi mốt.” Vì miền văn bản phải giống với slug, miền văn bản cũng là “mười hai mươi.”
Nơi đầu tiên bạn sẽ cần hiển thị miền văn bản của mình là khối nhận xét ban đầu về chủ đề hoặc plugin của bạn. Điều này được sử dụng để xác định các thuộc tính cơ bản của plugin của bạn như tên tác giả, tên plugin, thẻ chủ đề, v.v. Đảm bảo bạn cũng thêm thuộc tính “Tên miền văn bản”. Đây là khối bình luận của Twenty Fifteen trong style.css
tập tin.
Đánh dấu chuỗi để dịch
Hầu hết các nhà phát triển đều biết rằng để dịch các chuỗi, bạn nên bọc chúng trong __()
chức năng trả lại chúng hoặc _e()
chức năng lặp lại chúng. Trên thực tế, có 11 chức năng khác mà bạn có thể sử dụng để hoàn thiện bản dịch, mặc dù trong hầu hết các trường hợp, bạn thực sự sẽ sử dụng hai chức năng trên.
Hãy xem xét tất cả các tùy chọn của chúng tôi và chúng dùng để làm gì:
__()
Đây là một trong những chức năng dịch cơ bản nhất. Giống như nhiều anh chị em của nó, nó nhận hai tham số: chuỗi được dịch và miền văn bản.
Nó được sử dụng khi bạn muốn đánh dấu một chuỗi đơn giản để dịch và trả về giá trị để sử dụng ở một nơi khác. Điều này thường xảy ra trong các chức năng – hãy nghĩ đến việc đăng ký các loại bài đăng. Trong ví dụ từ Codex bên dưới, bạn có thể thấy cách tất cả các thành viên của mảng được đánh dấu để dịch:
_e()
Điều này gần giống như hàm trên, ngoại trừ nó lặp lại giá trị. Nó có thể được sử dụng khi bạn đang dịch trong thư mục nội dung HTML:
_n()
Hàm này được sử dụng khi dịch các chuỗi có số nhiều có điều kiện trong đó. Điều này có nghĩa là bạn không biết trước chuỗi sẽ sử dụng dạng số nhiều hay số ít vì nó phụ thuộc vào giá trị tạm thời của một số tham số. Một ví dụ điển hình là số lượng bình luận.
Ví dụ: nếu số lượng nhận xét là một, bạn sẽ cần sử dụng dạng số ít: “Một nhận xét”. Nếu số nhận xét là 0 hoặc nhiều hơn một, bạn sẽ sử dụng số nhiều: “Nhiều nhận xét”. Điều này có thể được thực hiện trong một lần sử dụng _n()
chức năng.
Nó có bốn tham số: dạng số ít, dạng số nhiều, số lượng cần kiểm tra và miền văn bản:
Sử dụng sprintf()
chức năng
sprintf()
là một hàm PHP nguyên bản, được sử dụng để xuất ra một chuỗi được định dạng theo một số tham số. Nó được sử dụng rộng rãi kết hợp với một số bản dịch phức tạp hơn, nơi các biến thường xuyên được sử dụng. Đây là cách nó nhìn chung:
Hai trình giữ chỗ thường xuyên nhất là %s
cho chuỗi và %d
cho số nguyên. Nếu bạn đang sử dụng các trình giữ chỗ này, bạn cần chuyển càng nhiều đối số bổ sung cho sprintf
như số lượng trình giữ chỗ bạn đang sử dụng. Cũng có thể lập chỉ mục trình giữ chỗ để sử dụng trình giữ chỗ thứ hai trước, v.v. Để sử dụng nâng cao chức năng này, hãy xem Tài liệu PHP.
Để làm cho ví dụ dịch của chúng tôi ở trên tốt hơn một chút, để tính đến 0 giá trị, chúng tôi có thể sử dụng _n()
đã cặp đôi với sprintf()
.
Trong ví dụ này, việc sử dụng $comment_count
biến có thể hơi khó hiểu. Khi được sử dụng trong _n()
chúng tôi đang xác định phiên bản nào sẽ sử dụng dựa trên giá trị của nó, phiên bản số ít hay số nhiều. Khi được sử dụng sau này trong dòng, làm tham số thứ hai cho sprintf()
chúng tôi đang sử dụng giá trị của nó để thay thế cho %s
.
_x()
, _ex()
và _nx()
Các chức năng có hương vị “x” tồn tại để xóa bất kỳ sự nhầm lẫn nào phát sinh từ các phần văn bản được dịch tương tự. Ví dụ: từ “bài đăng” được sử dụng như một động từ và làm tên của một loại mục trong blog. Trong một ngôn ngữ khác, họ có thể sử dụng hai từ rất khác nhau. Để phân biệt giữa chúng, chúng tôi sử dụng _x()
để thêm ngữ cảnh và trả về kết quả, _ex()
để thêm ngữ cảnh và lặp lại kết quả và _nx()
để thêm ngữ cảnh vào bản dịch số nhiều.
Thuộc tính thoát
Có hai bộ ba hàm để thoát các chuỗi đã dịch. Một tập hợp chăm sóc các chuỗi được sử dụng trong các thuộc tính, tập hợp còn lại chăm sóc thoát cho HTML. Họ đây rồi:
esc_attr__()
esc_attr_e()
esc_attr_n()
esc_html__()
esc_html_e()
esc_html_n()
Vì chúng tôi đã xem xét tất cả các loại chức năng này trước khi chúng nên tự giải thích. Đây là một ví dụ nhanh:
Bản dịch không có cửa sổ
Chức năng này không được đặt tên tốt và chỉ hữu ích trong một số trường hợp nhất định, điều này làm cho việc giải thích nó khá khó khăn. _n_noop()
và _nx_noop()
đăng ký chuỗi để dịch nhưng họ không dịch chúng ngay lập tức.
Tiếng Anh khá đơn giản vì có một dạng số ít và một dạng số nhiều. Trong các ngôn ngữ khác – chẳng hạn như tiếng Nga – nó không đơn giản như vậy. Các chức năng Nooped cho phép bạn đăng ký các bản dịch riêng biệt với việc sử dụng chúng. Đầu ra thực tế được tạo bằng cách sử dụng translate_nooped_plural()
chức năng. Codex cung cấp một ví dụ tuyệt vời về cách hoạt động của điều này:
Dịch Javascript
Không có chức năng dịch cho Javascript, nhưng sử dụng wp_localize_script()
chúng ta có thể thực hiện nó ở phía máy chủ. Ý tưởng là tạo một đối tượng trong chuỗi của chúng tôi và chuyển nó vào tập lệnh của chúng tôi bằng cách thêm nó vào tài liệu của chúng tôi. Nếu có sẵn tệp dịch, các chuỗi sẽ được dịch trước khi chúng được xuất ra.
Đầu tiên, tập lệnh được xếp vào hàng và sau đó được bản địa hóa. Tham số đầu tiên của hàm bản địa hóa là tên của tập lệnh mà chúng ta đang bản địa hóa. Thứ hai là một tên đối tượng duy nhất để sử dụng để giữ các chuỗi của chúng tôi. Tham số tiếp theo là một mảng các khóa và giá trị mà chúng tôi sẽ sử dụng trong tập lệnh của mình. Cuối cùng, chúng ta có thể triển khai nó ở phía Javascript:
Đang tải một miền văn bản
Để kích hoạt các chuỗi đã dịch của chúng tôi, chúng tôi cần cung cấp một tệp bản dịch. Bất cứ khi nào WordPress nhìn thấy một chức năng dịch, nó sẽ tìm tệp dịch của ngôn ngữ hiện tại và tìm kiếm văn bản được chỉ định trong hàm. Nếu không tìm thấy văn bản, nó sẽ trả về nguyên trạng.
Chúng tôi cần cho WordPress biết nơi chứa các tệp dịch cho plugin / chủ đề của chúng tôi. Điều này có thể được thực hiện bằng cách sử dụng load_plugin_textdomain()
chức năng này cần được nối vào plugins_loaded
hoạt động.
Ở giai đoạn này, mọi thứ sẽ hoạt động – HTML và Javascript của bạn phải dễ dàng dịch. Để giúp người dùng của chúng tôi, chúng tôi thực sự nên tạo một tệp pot, đó là tệp mẫu dịch.
Tệp dịch
Bạn sẽ thấy ba loại tệp trong quá trình dịch. Đầu tiên, tệp .POT, là tệp mẫu dịch. Các tệp này là tệp dịch mà con người có thể đọc được, trong khi tệp .MO, một loại tệp dịch khác, là tệp dịch có thể đọc được bằng máy. Khi một tệp ngôn ngữ mới được tạo, nó thường bắt đầu từ tệp POT. Nó được sao chép và đặt tên bằng cách sử dụng ngôn ngữ, ví dụ zh_CH.PO (zh là mã ngôn ngữ cho tiếng Trung và CH là mã quốc gia cho Trung Quốc). Sau đó, nó được mở bằng một công cụ như Poedit và tất cả các chuỗi được dịch. Khi được lưu, Poedit sẽ tạo ra một phiên bản .MO.
Cuối cùng, WordPress sử dụng phiên bản .MO vì nó rất cô đọng để mang lại hiệu quả. Tất cả đều tốt và tốt, nhưng làm cách nào để chúng ta tạo tệp .POT ban đầu?
Có khá nhiều cách, tôi khuyên bạn nên sử dụng Poedit trong lần đầu tiên của bạn.
Cài đặt Poedit đang mở và đi tới Tệp> Danh mục mới và điền vào các chi tiết.


Chuyển sang tab tiếp theo (Đường dẫn nguồn) và đặt đường dẫn của bạn. Đường dẫn phải liên quan đến vị trí của tệp .POT của bạn. Nếu bạn đang làm việc trên một plugin và tệp danh mục sẽ ở trong languages
bạn nên sử dụng ../
cho đường dẫn nguồn của bạn.
Trong tab “Từ khóa nguồn”, bạn sẽ cần tìm các chức năng bạn muốn kiểm tra. Nếu bạn chỉ sử dụng các chức năng cơ bản, bạn có thể chỉ cần thêm __
và _e,
nhưng tốt nhất là bạn nên thêm mọi thứ vào.


Sau khi nhấp vào “OK”, bạn sẽ có thể chọn vị trí cho tệp của mình. Poedit thực sự sẽ tạo các tệp .PO và .MO. Bạn có thể tạo tệp POT bằng cách chỉ cần sao chép-dán tệp .PO trống và đổi tên tệp.
Tổng quat
Theo quan điểm của tôi, quốc tế hóa là một cần phải. Điều đó thật dễ dàng thực hiện nên không có lý do gì để loại trừ những khách truy cập khỏi trang web của bạn, những người không nói hoặc đọc được tiếng Anh.
Trong bài viết này, chúng ta đã xem xét những điều cơ bản về bản dịch, miền văn bản là gì, các chức năng chúng ta có thể sử dụng và cách tạo tệp dịch.