10/10/2018, 09:41
Cách làm một website đa ngôn ngữ ?
Bà con ơi giúp tôi với.
Nếu muốn làm một trang web có 2 ngôn ngữ là tiếng Anh và tiếng việt,... thì phải làm sao. Có người nói dùng CSDL nhưng tôi lại thấy không cần thiết vì có những phần đã cố định(tĩnh). Tuy nhiên nêú làm hai trang tương ứng tiếng anh và tiếng việt thì khó cập nhật khi có thay đổi.
Hiện tôi đang phân vân không biết phải làm theo cách nào. Rất mong ý kiến cuả các bậc tiền bối.
Xin cám ơn.
Nếu muốn làm một trang web có 2 ngôn ngữ là tiếng Anh và tiếng việt,... thì phải làm sao. Có người nói dùng CSDL nhưng tôi lại thấy không cần thiết vì có những phần đã cố định(tĩnh). Tuy nhiên nêú làm hai trang tương ứng tiếng anh và tiếng việt thì khó cập nhật khi có thay đổi.
Hiện tôi đang phân vân không biết phải làm theo cách nào. Rất mong ý kiến cuả các bậc tiền bối.
Xin cám ơn.
Bài liên quan
<?
session_start();
$lang = $_GET['vlangue'];
if ($lang != '') {
$_SESSION['langue']=$lang;
}
?>
<form ENCTYPE="multipart/form-data" method="GET" action="<?php $PHP_SELF?>">
<Table ... >
...
<tr bgcolor="<?echo "$table_content_1a"?>">
<td width="28%">
<div align="right"><font face="<?echo $font_face?>" size="2">*<? echo $lng['vstsh']?> : </font></div>
</td>
<td width="72%">
<select name="vlangue">
<option value="1">Vietnamese</option>
<option value="2">English</option>
<option value="...">Not listed...</option>
</select>
</td>
</tr>
...
</table>
</form>
= ==========================================
file.php
<?
session_start();
if ($_SESSION['langue']==1) {
include ("File_viet_inc.php") ;
} else {
include ("File_Eng_inc.php") ;
}
?>
hy vọng đúng như anh cần .
Theo đoạn code trên nếu tôi đoán không lầm thì bạn phải có hai trang web khác nhau, một cho tiếng Việt và một cho tiếng Anh. Rồi chuyển 2 trang với nhau.
Vấn đề tôi muốn là cách làm trang web có 2 ngôn ngữ khác nhau sao cho tiện nhất(cả về thiết kế, nội dung và cập nhật sau này sao cho đồng bộ giữa hai ngôn ngữ) chứ không phải cách chuyển đổi từ trang này qua trang khác.
Tôi đang rất cần. rất mong các bạn chỉ giúp
Database thì có thể sử dụng chung được. Còn thiết kế thì ko làm 2 trang thì làm thành 1 trang rồi dùng if...else. Nhưng lúc đó coding sẽ rất là rối rắm.
Bạn ko nên làm biếng làm gì, tách thành 2 trang là tốt nhất.
Tôi sẽ thử cả 2 cách trên coi thế nào.
Mình tạo 2 file File_viet_inc.php và File_eng_inc.php
trong đó khai báo các biến như
File Eng
<?
$home='Home';
$contact='Contact us';
?>
File Viet
<?
$home='Trang chủ';
$contact='Liên hệ';
?>
Rồi file index.php:
<?PHP
session_start();
if ($_SESSION['langue']==1) {
include ("File_viet_inc.php") ;
} else {
include ("File_Eng_inc.php") ;
}
echo $home;
echo $contact;
?>
đúng như ý mình nói đó , chỉ langue thôi , cò tất cả chỉ y nguyên .
Tiếng việt
<?
$lng['DMucluc'] = 'Mục lục chính';
$lng['Siteban'] = 'Site Bạn';
$lng['tulinh'] = 'Mục lục TuLinh';
$lng['Tua'] = 'Tựa đề';
...
?>
Tiếng Anh
<?
$lng['DMucluc'] = 'Menu Principal';
$lng['Siteban'] = 'Site partenary';
$lng['tulinh'] = 'Menu TuLinh';
$lng['Tua'] = 'Title';
..
?>
File.php
<?
include("lang/choisir_lang.php");
...
<table width="100%" border="0" cellspacing="1" cellpadding="5">
<tr bgcolor="<?echo "$table_content_1a"?>">
<td width="28%">
<div align="right"><font face="<?echo $font_face?>" size="2">*
<? echo $lng['Tua'] ?> : </font></div>
</td>
<td width="72%">
<input type="text" name="vtitre" size="50" maxlength="120">
</td>
</tr>
....
?>
Cụ thể: Giả sử ban đầu bạn muốn có 2 ngôn ngữ là Tiếng Việt và tiếng Anh trên tràn web.
Vậy thì trên thư mục của server, ban đặt 2 file sau: languages/vie.php và languages/eng.php
Trong file index.php ngay dòng đầu tiên bạn đặt các lệnh sau:
<?php
session_start();
if (!(isset($_SESSION['language']))) $_SESSION['language']='vie';
require("languages/".$_SESSION['language'].".php");
?>
Điểm mấu chốt, trong các file như vie.php hoặc eng.php, các bạn cần định nghĩa các hằng số giống nhau. Ví dụ, trong menu cần thể hiện có mục: Trang nhà. Và bạn cần thể hiện nó = 2 ngôn ngữ. Vậy trong trang vie.php bạn khai báo như sau:
<?php
define('INDEX_HOME_TEXT','Trang nhà');
?>
Còn trong file eng.php bạn khai báo như sau:
<?php
define('INDEX_HOME_TEXT','Home');
?>
Điều đó có nghĩa là, trên giao diện của web, bất cứ chỗ nào bạn muốn thể hiện bằng hai ngôn ngữ, bạn phải khai báo bằng hằng số vào hai trong vie.php và eng.php tương ứng bằng tiếng Việt và tiếng Anh.
Rồi ở chỗ cần thể hiện nội dung, ta chỉ cần: echo INDEX_HOME_TEXT;
Thế là xong. Cần đinh nghĩa hằng số, chứ không nên khai báo bằng biến vì hai lý do chính sau:
-Khai báo biến sẽ làm tốn dung lượng nhớ trong khi máy chủ xử lý các kịch bản php. Nếu ta định nghĩa hằng số thì khác, vì bộ biên dịch php chỉ làm thao tác là tìm các chỗ có định nghĩa và chèn các hằng số tương ứng vào. Điều này không làm tốn bộ nhớ và hiệu quả hơn.
-Thứ hai, cách làm này sẽ giúp ta thực hiện được nhiều ngôn ngữ hơn và dễ dàng hơn.
Thật ra việc dùng khai báo mảng hay định nghĩa biến tĩnh đều được.
Tuy nhiên nếu khai báo mảng thì lại thuận tiện cho việc viết code và phát triển code hơn là việc nó làm chậm tốc độ của máy chủ (tuy có nhưng rõ ràng là không đáng kể).
Ví dụ:
bạn chỉ cần 1 biến $lang để giữ giá trị cho ngôn ngữ :
$lang["home"] = "trang chủ";
$lang["forum"] = "diễn đàn";