Hướng dẫn viết themes WordPress đa ngôn ngữ

Hướng dẫn viết themes WordPress đa ngôn ngữ

Một theme được viết ra nên được hỗ trợ chuyển đổi ngôn ngữ. Thông thường các theme thường chèn luôn các Text tĩnh, điều này sẽ làm khó cho việc dịch theme sau này vì phải tìm từng chữ ở nhiều file khác nhau để dịch chúng. Điều đáng nói hơn nữa là nếu sử dụng các Plugin chuyển đổi ngôn ngữ như PolyLang thì theme cũng không thể chuyển đổi ngôn ngữ được. Để khắc phục điều này, thì khi viết theme bạn nên tạo cho nó các text động, tức là sử dụng các hàm và text domain để xác định ngôn ngữ. Trong bài viết này, mình sẽ hướng dẫn chi tiết cách viết theme WordPress hỗ trợ đa ngôn ngữ một cách dễ hiểu nhất.

Các hàm hỗ trợ chuyển đổi ngôn ngữ trong themes WordPress

Trong các bài hướng dẫn viết Themes mình thường để như thế này:

<div class="modal-content">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">&times;</button>
    <h4 class="modal-title">Thành công</h4>
  </div>
  <div class="modal-body">
    <p>Sản phẩm đã được thêm vào giỏ hàng !.</p>
    <a href="<?php echo wc_get_cart_url(); ?>" class="btn btn-success">VÀO GIỎ HÀNG</a>
    <a href="<?php echo wc_get_checkout_url(); ?>" class="btn btn-danger">TIẾN HÀNH ĐẶT HÀNG LUÔN</a>
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Đóng</button>
  </div>
 </div>

Những chữ in đỏ phía trên là cố định, dù bạn dùng bất cứ plugin chuyển đổi ngôn ngữ nào cũng không thể đổi được nó. Vì thế nên có một số bạn hỏi vì sao khi cài plugin chuyển đổi rồi mà vẫn không thể chuyển đổi được những từ như thế. Để khắc phục bạn sử dụng 2 hàm sau để thay thế cho chúng.

Hàm _e()

Đây là hàm phổ biến, được sử dụng trong nhiều theme để dịch. Giá trị của nó trả về là ‘echo’ nên nó thường không được sử dụng trong hàm khác.

Cú pháp:

_e( string $text, string $domain = 'default' )

Ví dụ:

<h4 class="modal-title"><?php _e( 'Thành Công', 'tuandc' ) ?></h4>

Hàm __()

 

Hàm này ít khi sử dụng, nhưng nếu sử dụng trong hàm khác thì nên dùng nó vì giá trị trả về của nó là ‘return’.

Cú pháp:

__( string $text, string $domain = 'default' )

Ví dụ:

<h4 class="modal-title"><?php echo __( 'Thành Công', 'tuandc' ) ?></h4>

*lưu ý: để hiển thị Text trong hàm này bạn cần sử dụng echo hoặc sprintf().

Bạn sử dụng hai hàm trên để thay thế cho tất cả text trong theme nhé.

Load theme textdomain và chỉ định thư mục ngôn ngữ

Textdomain dùng để xác định theme trong WordPress. Trong các hàm chuyển đổi domain trên chúng. Mình sử dụng một textdomain là tuandc, textdomain này sẽ sử dụng để chỉ định tệp ngôn ngữ cho theme. Khai báo Load theme textdomain trong file functions.php như sau:

Cú pháp:

load_theme_textdomain( 'string $domain', $path);

Ví dụ:

load_theme_textdomain( 'tuandc', get_template_directory() . '/languages' );

Bạn có thể sử dụng trong hàm setup theme như sau:

add_action( 'after_setup_theme', 'my_theme_setup' );
function my_theme_setup(){
  load_theme_textdomain( 'tuandc', get_template_directory() . '/languages' );
}

Sau này bạn chỉ cần tạo ra các file ngôn ngữ tương ứng với tên thư mục theme và để trong thư mục Languges của theme là được. Bạn có thể tham khảo bài viết tạo bản dịch theme đa ngôn ngữ để hiểu rõ hơn về cách dịch theme nhé.

Chúc bạn thành công !