1. Chọn cấu trúc URL cho ngôn ngữ
Có nhiều cách hiển thị ngôn ngữ, phổ biến nhất là:
- Subdirectory:
/en/,/vi/, v.v. - Subdomain:
en.example.com(cần cấu hình DNS). - Query string:
?lang=en(ít thân thiện SEO).
Bài viết này sẽ hướng dẫn dùng cấu trúc subdirectory như /en/ và /vi/, vì dễ triển khai và tốt cho SEO.
2. Tạo file functions.php hỗ trợ ngôn ngữ
Trong theme, bạn thêm vào functions.php đoạn code sau để xử lý phát hiện ngôn ngữ và nạp file dịch:
// Xác định ngôn ngữ từ URL
function get_site_lang() {
$uri = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
$parts = explode('/', $uri);
$lang = $parts[0];
// Danh sách ngôn ngữ được hỗ trợ
$supported = ['en', 'vi'];
if (in_array($lang, $supported)) {
return $lang;
}
return 'vi'; // Mặc định
}
// Tải file ngôn ngữ tương ứng
function load_translations() {
$lang = get_site_lang();
$file = get_template_directory() . '/lang/' . $lang . '.php';
if (file_exists($file)) {
require_once $file;
}
}
load_translations();
3. Tạo các file ngôn ngữ
Trong thư mục theme, tạo thư mục /lang chứa các file ví dụ như vi.php, en.php:
// lang/vi.php
$GLOBALS['t'] = [
'hello' => 'Xin chào',
'read_more' => 'Đọc tiếp',
'contact' => 'Liên hệ',
];
// lang/en.php
$GLOBALS['t'] = [
'hello' => 'Hello',
'read_more' => 'Read more',
'contact' => 'Contact',
];
4. Sử dụng trong theme
Ở bất kỳ vị trí nào trong theme, bạn chỉ cần gọi:
<?php echo $t['hello']; ?>
Hoặc nếu muốn an toàn hơn, bạn có thể tạo một hàm tiện lợi:
function __t($key) {
return $GLOBALS['t'][$key] ?? $key;
}
Và dùng: <?php echo __t('read_more'); ?>
5. Cấu trúc thư mục và phân trang
Bạn nên tạo các page có slug theo ngôn ngữ:
/vi/trang-chu,/vi/lien-he/en/home,/en/contact
Từ đó bạn tự xây dựng menu đa ngôn ngữ thủ công, hoặc thêm điều kiện hiện menu khác nhau theo ngôn ngữ hiện tại.
6. Tuỳ chọn: Redirect theo trình duyệt
Muốn redirect lần đầu theo trình duyệt người dùng:
function redirect_by_browser_lang() {
if (!isset($_COOKIE['lang_redirected'])) {
$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$supported = ['vi', 'en'];
if (in_array($browser_lang, $supported)) {
setcookie('lang_redirected', '1', time() + 3600, '/');
wp_redirect(home_url('/' . $browser_lang . '/'));
exit;
}
}
}
add_action('template_redirect', 'redirect_by_browser_lang');
Kết luận
Bằng cách tự xây dựng hệ thống ngôn ngữ như trên, bạn có thể:
- Giữ site nhẹ, không phụ thuộc plugin.
- Kiểm soát hoàn toàn nội dung, cấu trúc URL và giao diện.
- Phù hợp cho các site đơn giản, giới thiệu công ty, cá nhân hoặc landing page.
Lưu ý: Cách này không phù hợp cho site có hệ thống bài viết phức tạp, hoặc cần chuyển ngữ nội dung động. Khi đó, plugin như WPML sẽ phù hợp hơn.
Bình luận