Website đa ngôn ngữ trong PHP

Website đa ngôn ngữ trong PHP vẫn luôn là vấn đề muôn thuở của các lập trình viên.

Có 2 cách để hiển thị giao diện đa ngôn ngữ:

Cách 1: Tạo ra các file ngôn ngữ tương ứng. Ví dụ: vi.lng.php và en.lng.php

Cách 2: Sử dụng Google Translate. Tuy nhiên cách này sẽ gặp phải vấn đề là nhỡ đâu Google dịch sai ý nghĩa của câu từ thì sao, hoặc dịch từ tiếng nước ngoài sang tiếng Việt mà chúng ta cảm thấy không ưng ý hay hài lòng.

Trong bài viết hướng dẫn ngay sau đây, mình sẽ hướng dẫn các bạn một cách thật cụ tỉ nhất có thể. Các bạn chỉ cần đọc một lần là sẽ làm được ngay! 

Mình sẽ hướng dẫn các bạn làm theo cách đầu tiên (cách 1).

Đầu tiên các bạn tạo 1 project mới, có cấu trúc thư mục giống như hình bên dưới.

planguage

Đầu tiên các bạn tạo 1 folder và đặt tên nó là languages

Trong folder này, các bạn tạo ra 2 file ngôn ngữ, 1 cho tiếng Việt và 1 cho tiếng Anh. Đó là vi.lng.phpen.lng.php

2 file này có dữ liệu như sau

vi.lng.php

<?php
$main[‘language’] = “Ngôn ngữ”;
$main[‘welcome’] = “Chào mừng đến với blog PHPGO”;
$main[‘author’] = “Đây là blog của tác giả Lưu Văn Phong”;
$main[‘en-en’] = “Tiếng Anh”;
$main[‘en-vi’] = “Tiếng Việt”;
?>

en.lng.php

<?php
$main[‘language’] = “Language”;
$main[‘welcome’] = “Welcome to PHPGO blog”;
$main[‘author’] = “This is the blog of Luu Van Phong”;
$main[‘en-en’] = “English”;
$main[‘en-vi’] = “Vietnamese”;
?>

Các bạn chú ý nhé! Ngôn ngữ cho màn hình nào thì hãy đặt tên sao cho giống với màn hình đó. Ví dụ: mình đang xây dựng đa ngôn ngữ cho màn hình main.php, cho nên như các bạn có thể thấy mình bắt đầu bằng $main[‘language’] = “Language”;

Mình tạo ra một class tên là LanguageHelper để giúp xử lý việc trả về ngôn ngữ mà user đã lựa chọn từ dropdownlist.

<?php
/**
* Hiển thị giao diện đa ngôn ngữ của website
* @author Lưu Văn Phong <luuvanphong@outlook.com>
* @link https://phpgo.wordpress.com Tất cả các vấn đề liên quan đến PHP
*/

class LanguageHelper {
/**
* Kiểm tra xem user chọn hiển thị ngôn ngữ gì từ Dropdownlist
* Nếu chọn Tiếng Việt thì hiển thị Tiếng Việt, ngược lại thì hiển thị Tiếng Anh
* Mặc định ban đầu là Tiếng Việt
*/
function checkLang()
{
if (isset($_GET[‘lang’]))
{
$lang = $_GET[‘lang’];
return “languages/$lang.lng.php”;
}
else return “languages/vi.lng.php”;
}
}
?>

Và cuối cùng là việc hiển thị giao diện đa ngôn ngữ ở trang main.php

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Website đa ngôn ngữ trong PHP</title>
<!– Xử lý việc thay đổi ngôn ngữ khi user lựa chọn trong Dropdownlist –>
<script language=”javascript”>
function changeValue(val)
{
if (val===”vi”) {
window.location.href = “?lang=vi”; }
else {
window.location.href = “?lang=en”; }
}
</script>
</head>
<body>
<?php
/**
* Hiển thị giao diện đa ngôn ngữ của website
* @author Lưu Văn Phong <luuvanphong@outlook.com>
* @link https://phpgo.wordpress.com Tất cả các vấn đề liên quan đến PHP
*/

// Include LanguageHelper class
include_once ‘LanguageHelper.php’;

// Gọi hàm checkLang để xem user chọn ngôn ngữ nào
$object = new LanguageHelper();
$lang = $object->checkLang();

// User chọn ngôn ngữ nào thì mình sẽ include file ngôn ngữ đó vào page
include_once($lang);

// Hiển thị giao diện ngôn ngữ dựa vào option được chọn
$vi = $main[‘en-vi’];
$en = $main[‘en-en’];
$language = $main[‘language’];
$welcome = $main[‘welcome’];
$author = $main[‘author’];

echo <<<_LANGUAGE_
<form>
<b>$language:</b>
<select name=”lang” id=”lang” onchange=”changeValue(this.value)”>

_LANGUAGE_;
if (isset($_GET[‘lang’]))
{
if ($_GET[‘lang’] == “vi”)
{
echo <<<_LANGUAGE_
<option value=”vi” selected=”selected”>$vi</option>
<option value=”en”>$en</option>
_LANGUAGE_;
}
else
{
echo <<<_LANGUAGE_
<option value=”vi”>$vi</option>
<option value=”en” selected=”selected”>$en</option>
_LANGUAGE_;
}
echo <<<_LANGUAGE_
</select>
<p>$welcome</p>
<p>$author</p>
</form>
_LANGUAGE_;
}
else
{
echo <<<_LANGUAGE_
<option value=”vi” selected=”selected”>$vi</option>
<option value=”en”>$en</option>
</select>
<p>$welcome</p>
<p>$author</p>
</form>
_LANGUAGE_;
}
?>
</body>
</html>

Các bạn có thể tải về toàn bộ source code tại đây! Chúc các bạn thành công!  :)

One thought on “Website đa ngôn ngữ trong PHP

  1. Yếu tố ngôn ngữ hình như chỉ áp dụng được với những thành phần tĩnh, ít có sự thay đổi phải không nhỉ (menu, siderbar, message….) còn dữ liệu động (nội dung của một bài báo) thì mình phải soạn lại n lần ứng với n ngôn ngữ mà mình muốn hỗ trợ phải không nhỉ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s