TODO: To change the header's content go to Dr.Explain menu Options : Project Settings : HTML (CHM) Export : Setup HTML Template and Layout
×
Menu
Index

Dịch đa ngôn ngữ với qtranslate

Tạo đa ngôn ngữ trên website, chúng ta sử dụng pLugin qtranslate và mq translate tiếp tục phát triển phiên bản qtranslate đã ngừng update.
Plugin giải quyết vấn đề dịch các ngôn ngữ trong một bài post.
 
Tải và kích hoạt plugin mqtranslate: https://wordpress.org/plugins/mqtranslate/
Cấu hình:
Sau khi kích hoạt plugin , bạn nên thiết lập lại permalink để cập nhật đường dẫn cho đa ngôn ngữ. Để thực hiện bạn truy cập menu Settings > Permalink và nhấn 'Save Changes'.
- Vào trang cấu hình truy cập vào Settings > Languages.
+ Bạn chọn những ngôn ngữ muốn sử dụng dịch trên website. Bằng cách nhấn 'Enable' & nhấn Disable vào ngôn ngữ không muốn sử dụng.
+ Tạo thêm ngôn ngữ bằng tính năng Add Language, ở phía bên tay trái.
+ Chọn ngôn ngữ mặc định và nhấn Save Changes.
 
Advanced Settings: Nhấn vào show/hide bên cạnh cài đặt này.
+ URL Modification Mode: chọn Use Pre-Path Mode.
 
- Trong phần sửa nội dung title, content bài viết có từng ô ngôn ngữ để sửa, tuy nhiên URL slug thì cố định, nếu muốn thay đổi cả slug khi chuyển ngôn ngữ thì cài thêm plugin 'qTranslate slug'.
 
Thêm nội dung cho từng ngôn ngữ.
Trong phần sửa bài viết có nhiều mục nhập nội dung với từng ngôn ngữ.
 
Đối với Tag và Category cũng như vậy, tuy nhiên phần slug thì cố định không thay đổi.
 
Sử dụng:
- Hiển thị danh sách chuyển đổi/menu chọn ngôn ngữ trên website:
Cách 1: Để hiển thị liên kết chuyển đổi ngôn ngữ, các ngôn ngữ được chọn sẽ hiển thị dạng biểu tượng và có thể kèm chữ. Chúng ta gọi hàm qtrans_generateLanguageSelectCode($type).
<div style="float: right; margin: 7px 15px 0 0;">
    <?=qtrans_generateLanguageSelectCode('dropdown');?>
</div>
Kiểu hiển thị $type:
 
Chú ý: class cho từng ngôn ngữ có dạng: qtrans_flag_[mã ngôn ngữ]
vd: qtrans_flag_vi
 
Cách 2: sử dụng widget.
Vào Appearance -> Widget và tìm widget “qTranslate Languages Chooser” rồi kéo vào sidebar nơi vị trí bạn muốn hiển thị.
 
- Dịch trong nội dung:
+ Sử dụng ký tự shortcode, chèn trước mỗi nội dung của ngôn ngữ đó là mã shortcode. cú pháp: [:lang-code]
[:en]Homepage [:vi]Trang chủ
 
+ Sử dụng ký tự mở đóng ngôn ngữ.
<!--:en-->English<!--:--><!--:vi-->Tieng viet<!--:-->
 
Hàm tiện ích:
- Lấy mã ngôn ngữ hiện tại kích hoạt trên website.
$currentLang = qtrans_getLanguage();
if($currentLang == 'fr')
{
    //show french logo
    $imageName = logoFR.png';
}
else if($currentLang == 'hi')
{
    //show Hindi logo
    $imageName = logoHI.png';
}
else
{
    //show english logo to rest
    $imageName = logoEN.png';
}
 
Bản bất mã ngôn ngữ hiện tại được lưu vào biến  $GLOBALS['q_config']['language']. Bạn có thể lấy giá trị của biến này.
$currentLang = $GLOBALS['q_config']['language'];
 
- Lấy tên Hiển thị ngôn ngữ bởi mã ngôn ngữ.
$language='vi';
echo $GLOBALS['q_config']['language_name'][$language];
 
- Trả về danh sách các ngôn ngữ được sử dụng.
qtrans_getSortedLanguages($reverse = false)
 
- Dịch chuỗi phát hiện bởi ngôn ngữ hiện tại.
Sử dụng hàm qtrans_use($lang, $text, $show_available=false).
<?php
$id=47;
$post = get_page($id);
$content = qtrans_use('en', $post->post_content,false);
echo $content;
?>
 
- Gắn mã ngôn ngữ vào URL.
Gọi hàm qtrans_convertURL vào mọi URL bạn sẽ gắn thêm mã ngôn ngữ đang kích hoạt hoặc một ngôn ngữ chỉ định khác.
//lấy ngôn ngữ hiện tại
echo esc_attr( qtrans_convertURL(home_url()) );
 
//chuyển sang ngôn ngữ chỉ định. Bỏ trống tham số $url sẽ lấy URL hiện tại.
$language='en';
$language_url = qtrans_convertURL('',$language);
      echo '<a lang="'.$language.'" href="'.$language_url.'" rel="alternate" >ABC</a>'."n";
 
Sửa lỗi liên kết chưa có mã ngôn ngữ:
- next_post_link & previous_post_link & get_pagenum_link.
if ( function_exists('qtrans_convertURL') ):
add_filter('next_post_link', 'qtranslate_single_next_previous_fix');
add_filter('previous_post_link', 'qtranslate_single_next_previous_fix');
function qtranslate_single_next_previous_fix($url) {
        $just_url = preg_match("/href="([^"]*)"/", $url, $matches);
        return str_replace($matches[1], qtrans_convertURL($matches[1]), $url);
}
 
add_filter('get_pagenum_link', 'qtranslate_next_previous_fix');
function qtranslate_next_previous_fix($url) {
        return qtrans_convertURL($url);
}
endif;
 
- Fix URL trang chủ.
function qtrans_convertHomeURL($url, $what) {
    if($what=='/') return qtrans_convertURL($url);
    return $url;
}
 
add_filter('home_url', 'qtrans_convertHomeURL', 10, 2);
 
- Fix Liên kết trong nav menu.
add_filter('nav_menu_link_attributes','custom_menu',10,3);
function custom_menu($atts, $item, $args){
     if($item->url=='/'){
          $atts['href']=qtrans_convertURL($item->url);
     }
     return $atts;
}
Made with help of Dr.Explain

Unregistered version