WPML

ảnh chụp màn hình atahualpaTôi sẽ hướng dẫn cách sử dụng Atahualpa, của Bytes For All, để xây dựng các trang web WordPress đa ngôn ngữ bằng WPML.

Một giao diện cho trang web WordPress đa ngôn ngữ cần có tất cả các chuỗi văn bản được bọc trong các lệnh gọi gettext, nhưng như vậy vẫn chưa đủ. Việc sử dụng gettext trong giao diện cho phép nó hiển thị bằng một ngôn ngữ khác (đơn ngữ) so với ngôn ngữ ban đầu khi nó được xây dựng.

Để hoạt động đa ngôn ngữ, giao diện cần cho phép khách truy cập chọn ngôn ngữ hiển thị của họ và cung cấp nội dung chính xác theo từng ngôn ngữ.

Phiên bản đa ngôn ngữ cho Atahualpa


Hãy bắt đầu từ kết quả cuối cùng. Đây là trang web demo sử dụng phiên bản Atahualpa đã sửa đổi và đây là giao diện đã sửa đổi mà bạn có thể tải xuống và sử dụng.

Những gì chúng tôi đã thay đổi để làm cho Atahualpa trở thành đa ngôn ngữ

1. Thêm wpml-integration.php vào thư mục của giao diện


wpml-integration.php được tìm thấy trong thư mục của WPML dưới docs/theme-integration. Nó bao gồm một tập hợp các hàm giúp biến các giao diện thành đa ngôn ngữ.

Tất cả các hàm này được thiết kế để làm cho giao diện sử dụng WPML nếu nó đang hoạt động hoặc bỏ qua nó nếu không có. Điều này có nghĩa là giao diện sẽ hoạt động đa ngôn ngữ nếu WPML khả dụng, hoặc hoạt động bình thường (đơn ngữ) nếu không.

Đã thêm vào functions.php:

include dirname(__FILE__) . '/wpml-integration.php';

Câu lệnh này tải wpml-integration.php và làm cho nó khả dụng đối với tất cả các tệp trong giao diện.

2. Thêm bộ chuyển đổi ngôn ngữ


Các bộ chuyển đổi ngôn ngữ giúp khách truy cập có thể chọn ngôn ngữ hiển thị của trang web. Thông thường, việc thêm một vài loại bộ chuyển đổi ngôn ngữ là một ý tưởng hay. Khách truy cập lướt qua trang web rất nhanh và tìm kiếm các gợi ý trực quan về nội dung bằng ngôn ngữ của họ. Những người khác nhau sẽ nhìn vào những vị trí khác nhau, vì vậy việc thêm các loại bộ chuyển đổi ngôn ngữ khác nhau vào các phần khác nhau của trang sẽ giúp điều hướng khách truy cập tìm thấy ngôn ngữ của họ.

Chúng tôi đã thêm bộ chuyển đổi ngôn ngữ dạng thả xuống của WPML vào thanh bên bằng cách thêm nó vào header.php:

<?php wpml_languages_selector() ?>
bộ chuyển đổi ngôn ngữ dạng thả xuống atahualpa
Bộ chuyển đổi ngôn ngữ dạng thả xuống

Chúng tôi cũng đã thêm một danh sách ngôn ngữ ngang vào chân trang của trang web. Nhiều người dùng thường cuộn thẳng xuống dưới cùng để xem có những gì ở đó (và độ dài của trang), vì vậy đây là một vị trí tốt để thông báo rằng các trang có sẵn bằng những ngôn ngữ khác. Chúng tôi đã thêm đoạn mã sau vào footer.php:

<?php wpml_languages_list() ?>
Bộ chuyển đổi ngôn ngữ ngang ở chân trang
Bộ chuyển đổi ngôn ngữ ngang ở chân trang

Cuối cùng, chúng tôi đã thêm một bộ chuyển đổi ngôn ngữ vào cuối mỗi bài viết. Điều này thêm một câu vào mỗi bài viết, cho biết nó có sẵn bằng những ngôn ngữ nào khác. Đã thêm đoạn mã sau vào index.php (bao gồm một phiên bản tùy chỉnh của vòng lặp hiển thị trong WordPress):

<?php if(is_singular()) wpml_content_languages(); ?>
Danh sách ngôn ngữ dịch
Danh sách ngôn ngữ dịch

Khi khách truy cập nhấp vào ‘Trang chủ’, họ kỳ vọng sẽ đến trang chủ mà không bị chuyển đổi ngôn ngữ. Vì mỗi ngôn ngữ có một ‘trang chủ’ với một URL khác nhau, nên một giá trị duy nhất cho tất cả sẽ không hoạt động.

Thông thường, các giao diện WordPress tính toán địa chỉ cho trang ‘Trang chủ’ dựa trên giá trị ‘Blog URL’ được thiết lập trong trang quản trị. WPML đã tạo ra một hàm để tính toán địa chỉ trang chủ chính xác theo ngôn ngữ hiển thị.

Chúng tôi đã thay thế get_option('home’) bằng wpml_get_home_url(). Ngoài ra, hàm get_option('home’) trả về địa chỉ của trang web mà không có dấu gạch chéo ở cuối (/), vì vậy các giao diện phải thêm nó theo cách thủ công. Hàm của WPML đã bao gồm dấu gạch chéo này (có một câu chuyện dài đằng sau điều này).

Để thực hiện thay đổi này, chúng tôi đã phải chỉnh sửa hai tệp. Đã sửa đổi functions/bfa_get_options.php và thay đổi:

$bfa_ata['get_option_home'] = get_option('home');

thành
$bfa_ata['get_option_home'] = wpml_get_home_url();

Đồng thời, đã chỉnh sửa functions/bfa_header_config.php và xóa dấu gạch chéo ở cuối khỏi liên kết trang chủ:
'<a href="' . $bfa_ata['get_option_home'] . '">' . $bfa_ata['bloginfo_name'] . '</a>'

4. Rất nâng cao – Dịch các văn bản do người dùng nhập trong màn hình quản trị giao diện


Atahualpa cho phép kiểm soát một số văn bản thông qua màn hình quản trị. Đây là một điều tuyệt vời cho phép quản lý trang web mà không cần chỉnh sửa các tệp PHP. WPML cũng có thể dịch các chuỗi văn bản này bằng cách sử dụng cơ chế Dịch chuỗi của nó.

Để làm điều này, giao diện cần cho WPML biết những chuỗi văn bản nào cần được dịch và sau đó hiển thị bản dịch nếu nó tồn tại.

Khi người dùng truy cập vào màn hình quản trị của giao diện, cập nhật các văn bản và nhấp vào Lưu, hàm bfa_ata_add_admin từ functions/bfa_ata_add_admin.php sẽ được thực thi. Chúng tôi đã thêm phần sau vào đó (bắt đầu từ dòng 11):

global $wpml_translatable_strings;

 foreach($wpml_translatable_strings as $wpml_str ){

   if(isset($_REQUEST['bfa_ata_'.$wpml_str]) && trim($_REQUEST['bfa_ata_'.$wpml_str])){

    wpml_register_string('atahualpa theme', $wpml_str, stripslashes($_REQUEST['bfa_ata_'.$wpml_str]));

  }

 }

Hành động này sẽ chạy qua một danh sách các chuỗi văn bản được xác định trong biến toàn cục $wpml_translatable_strings. Nó đăng ký từng chuỗi trong danh sách dịch chuỗi của WPML.

Đối số đầu tiên là ngữ cảnh cho các chuỗi văn bản. Bất kỳ tên nào cũng được, nhưng bạn nên chọn một tên mô tả được các chuỗi văn bản đó. Đối số thứ hai là tên cho chuỗi văn bản (không được dịch). Đối số cuối cùng là giá trị của chuỗi văn bản – phần sẽ được dịch.

Để hiển thị các bản dịch (nếu chúng tồn tại), chúng tôi đã thêm hàm wpml_t vào functions/bfa_get_options.php (bắt đầu từ dòng 204):

global $wpml_translatable_strings;

foreach($bfa_ata as $k=>$v){

   if(in_array($k, $wpml_translatable_strings) || $__first){

    $bfa_ata[$k] = wpml_t('atahualpa theme', $k, $v);     

  }

}

Đoạn mã này được chạy khi trang web được hiển thị cho khách truy cập. Nó sẽ lặp qua danh sách các chuỗi văn bản, kiểm tra xem nó đã được đăng ký để dịch chưa (in_array) và nếu có, sẽ lấy bản dịch. Hàm wpml_t sẽ trả về chuỗi đã dịch bằng ngôn ngữ hiện tại, nếu bản dịch tồn tại, hoặc chỉ trả về chuỗi gốc nếu không có bản dịch.

Biến các giao diện WordPress khác thành đa ngôn ngữ


Chúng tôi đã thực hiện công việc tương tự trên iNoveArras và đang lên kế hoạch chuyển đổi thêm nhiều giao diện khác thành đa ngôn ngữ.

Mục đích của chúng tôi là cung cấp các giao diện đa ngôn ngữ sẵn sàng để sử dụng và giúp bạn xây dựng các giao diện Multilingual Ready (sẵn sàng cho đa ngôn ngữ) của riêng mình. Bằng cách sử dụng các kỹ thuật mà chúng tôi đã mô tả ở đây, bạn có thể xây dựng các giao diện sẽ hoạt động đa ngôn ngữ khi có WPML hoặc ở dạng đơn ngữ khi không có WPML.

Nếu bạn đang xây dựng các giao diện và cần trợ giúp để biến chúng thành đa ngôn ngữ, đừng ngần ngại mở các chủ đề mới trong diễn đàn.

Bạn cũng có thể kiếm tiền (thực sự là thu nhập thụ động) bằng cách thêm hỗ trợ đa ngôn ngữ vào các giao diện của mình. Chúng tôi sẽ nói về việc đưa các ID liên kết vào giao diện trong bài viết tiếp theo.

Bạn thấy bài viết này hữu ích? Hãy chia sẻ bài viết này: