Tạo file ngôn ngữ đơn giản nhanh chóng trong theme và plugin
Chào các bạn! Trong quá trình phát triển theme và plugin thì 1 phần cũng khá quan trọng giúp theme và plugin của bạn trở nên chuyên nghiệp và quốc tế hơn đó là tạo file ngôn ngữ. Các file ngôn ngữ các bạn thường bắt gặp trong thư mục languages của theme hay plugin và có có đuôi mở rộng là pot, po, mo. Thông qua file file pot, người dùng có thể tạo thành nhiều ngôn ngữ khác nhau từ đó giúp theme, plugin của các bạn linh động và chuyên nghiệp hơn. Đây cũng là 1 giải pháp an toàn để dịch thay vì phải vào source code để sửa. Trong bài viết này mình sẽ hướng dẫn các bạn làm một cách đơn giản và nhanh chóng chỉ trong vài bước.
Về quy tắc hoạt động thì như nhau cho theme và plugin. Trước tiên mình sẽ hướng dẫn cho theme. Các bạn làm theo các bước sau:
1. Chỉ định thư mục chứa file ngôn ngữ
Đầu tiên các bạn chỉ định thư mục chứa các file ngôn ngữ bằng cách sử dụng hàm load_theme_textdomain($domain, $path). Hàm này có 2 tham số:
– $domain: tên dùng để nhận biết khi translate, tên này là duy nhất (cách tốt nhất để tránh trùng lặp là lấy tên của theme)
– $path: đường dẫn tới thư mục chứa file ngôn ngữ (.mo)
Các bạn vào file functions.php và thêm vào đoạn code sau:
1
2
3
4
5
6
7
|
add_action( 'after_setup_theme' , 'dvd_theme_setup_language_ directory ' ); function dvd_theme_setup_language_directory (){ load_theme_textdomain( 'dvd-theme-sw' , get_template_directory() . '/languages' ); } |
Ở đây domain mình đặt là dvd-theme-sw và thư mục chứa file ngôn ngữ mình để trong thư mục languages của theme.
2. Xử lý text để dịch
Bước tiếp theo các bạn cần vào thư mục chứa theme, vào các file và sửa lại các chuỗi cần để có thể dịch. Trước khi tiến hành mình giới thiệu 2 hàm quan trọng và thường được sử dụng của WordPress hỗ trợ chúng ta translate text đó là _e($msg, $domain) và __($msg, $domain).
Hàm _e() sẽ tìm chuỗi cần dịch trong file ngôn ngữ, dịch và xuất ra kết quả dịch.
Hàm __() cũng sẽ tìm chuỗi cần dịch trong file ngôn ngữ, dịch nhưng thay vì xuất ra thì nó trả về 1 kết quả dịch.
Ví dụ:
Trong source của các bạn có đoạn:
1
|
echo "welcome" ; |
Các bạn thay lại thành:
1
|
_e( "welcome" , "tên domain" ); |
Tương tự cho hàm __().
Ở đây mình sẽ ví dụ với file index.php trong theme của mình. Các bạn có thể thao tác với các file khác tùy ý.
Đây là nội dung file index.php của mình sau khi đã xử lý các chuỗi để có thể dịch:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
<?php get_header(); ?> <div class = "content-wrap pull-left" > <h1 class = "ct_title" style= "text-transform: uppercase;" ><span class = "glyphicon glyphicon-fire" ></span> <?php _e( "Special products" , "dvd-theme-sw" ); ?></h1> <?php global $dvd_product_prefix ; $arg = array ( "post_type" => "product" , "post_status" => "publish" , 'tax_query' => array ( array ( 'taxonomy' => "pro_type" , 'field' => 'slug' , 'terms' => 'noi-bat' , ) ), "posts_per_page" => 5 ); $pro_query = new WP_Query( $arg ); while ( $pro_query ->have_posts()) : $pro_query ->the_post(); $price = get_post_meta(get_the_ID(), $dvd_product_prefix . "price" , true); ?> <div class = "product" > <img class = "pull-left" alt= "<?php the_title(); ?>" src= "<?php if(has_post_thumbnail()) echo wp_get_attachment_url(get_post_thumbnail_id(get_the_ID())); else echo TEMPLATEURL." /images/no_img.png "; ?>" > <div class = "pull-right pro_excerpt" > <h2><a href= "<?php the_permalink(); ?>" title= "<?php the_title(); ?>" ><?php echo dvd_substr(get_the_title(), 50); ?></a></h2> <p><b><?php _e( "Price" , "dvd-theme-sw" ); ?>: </b> <?php echo number_format( $price ). ' VND' ; ?></p> <p><?php the_excerpt(); ?></p> <a href= "<?php bloginfo('url'); ?>/gio-hang/them/<?php echo get_the_ID(); ?>" class = "btn btn-default" ><span class = "glyphicon glyphicon-shopping-cart" ></span> <?php _e( "Add to cart" , "dvd-theme-sw" ); ?></a> <a href= "<?php the_permalink(); ?>" class = "btn btn-default" ><span class = "glyphicon glyphicon-eye-open" ></span> <?php _e( "Product details" , "dvd-theme-sw" ); ?></a> </div> </div> <?php endwhile ; ?> <a href= "<?php echo get_term_link('noi-bat', 'pro_type'); ?>" class = "pull-right btn btn-primary" ><span class = "glyphicon glyphicon-collapse-up" ></span> <?php _e( "View more ..." , "dvd-theme-sw" ); ?></a> </div><!-- end content--> <?php get_sidebar(); ?> <?php get_footer(); ?> |
Ngôn ngữ gốc mình để ở đây là tiếng anh nhé. Ở trên có tổng cộng 5 text có thể dịch.
3. Tạo file pot
Bước kế tiếp này chúng ta sẽ tạo ra file pot bằng phần mềm Poedit. Các bạn có thể vào đây để dowload.
Bước cài đặt đơn giản rồi nên mình không hướng dẫn nữa.
Chúng ta sẽ tạo 1 file pot. File pot này sẽ chứa các đoạn text có thể dịch. Từ file này người khác có thể dịch và save lại với đuôi mở rộng là po. Sau khi file po được tạo thì đồng thời file mo được tạo theo, và file mo này là file dùng được WordPress dùng để translate.
Các bạn chạy phần mềm lên vào file -> New catalog… sau đó điền các thông tin như tên, email, …
Bên trên là thông tin file của mình. Tiếp đến các bạn chuyển qua tab Sources paths. Tab này lưu các đường dẫn tới thư mục chứa file có các đoạn text có thể dịch. Tùy theo vị trị của file pot này mà ta phải thiết lập đường dẫn cho phù hợp.
Do languages là thư mục nằm trong thư mục themes và file pot này mình sẽ lưu trong thư mục languages nên đường dẫn mình sẽ để là ../ (nhảy lên 1 cấp)
Các bạn có thể thêm nhiều đường dẫn khác tùy ý theo theme của các bạn.
Tiếp đến chuyển qua tab Sources keywords. Đây là tab chúng ta quy định các hàm sẽ được seach. Ở trên mình sử dụng 2 hàm __() và _e() nên mình sẽ add tên 2 hàm này vào. Poedit sẽ search các đoạn text trong 2 hàm này ở các file trong đường dẫn đã quy định và đưa nó vào danh sách.
Tiếp đến bấm OK và lưu file vào thư mục languages với tên tùy ý có đuôi mở rộng là pot.
Sau khi lưu các bạn sẽ được danh sách các text có thể dịch. Trên file index.php của mình có 5 text.
Đến đây chắc các bạn đã hiểu rồi chứ. Có file pot rồi, bây giờ cần dịch sang ngôn ngữ nào thì chỉ cần mở file pot này lên sau đó dịch và save lại với file po.
Đây là file mình đã dịch:
Dịch xong, lưu lại thành file po với đúng language code và country code. Các bạn có thể xem thêm tại đây. Sau đó vào file wp_config.php thiết lập lại cho phù hợp với ngôn ngữ cần dùng.
1
|
define( 'WPLANG' , '' ); |
Đây là kết quả của mình trước khi dịch:
Sau khi dịch:
Ok. Vậy là đã xong. Đối với plugin các bạn làm tương tự chỉ khác ở khâu load đường dẫn tới thư mục languages thôi.
1
2
3
4
5
6
7
8
9
|
function dvd_setup_plugin_language_directory() { load_plugin_textdomain( 'myplugin' , false, basename ( dirname( __FILE__ ) ) . '/languages' ); } add_action( 'init' , 'dvd_setup_plugin_language_directory' ); |
Lời kết
Thật đơn giản phải không nào. Chỉ với vài bước thôi các bạn đã có thể tạo 1 file ngôn ngữ cho theme và plugin của mình rồi.
Bài viết của mình kết thúc tại đây. Mọi vướng mắc các bạn có thể để lại comment bên dưới.
cho mình hỏi một chút là mình muốn chỉnh sửa thẻ của Leave a Reply thì nó nằm trong file nào nhỉ
Bạn cho mình hỏi?
Mình có một giao diện web wordpress mình chuyển từ html theme wp mà nó không chuẩn trên thiết bị di động. Nó chỉ hiện một nửa bên còn một bên khuất đi.
Web mình đây: styleshop9x.besaba.com
Bạn có thể hướng dẫn chi tiết hay quay một video hướng dẫn về phần này chia sẻ cho mình và mọi người được không, cảm ơn bạn trước!