10/10/2018, 00:21
Hỏi về việc chuyễn đổi ngôn ngữ trong web
Chào các bạn. Mình có vấn đề này muốn hỏi : mình tạo 2 loại ngôn ngữ cho web : english và vietnamese, mình muốn khi mình đang đứng ở bất cứ page nào( trừ main page) và chọn ngôn ngữ khác(ngoài ngôn ngữ đang hiển thị) thì nội dung sẽ thay đổi sang ngôn ngữ đó nhưng vị trí đang đứng trên page đó vẫn được giữ nguyên. Ví dụ, mình đang đứng ở page about, khi mình muốn chuyển sang englisg lang, nội dung sẽ thay đổi nhưng không cần phải trả mình về lại main page ( mình đang bị vấn đề này). Mong các bạn chỉ giúp (web mình viết bằng PHP).
Bài liên quan
THứ nhất, bạn phải lưu biến language bằng SESSION. Mỗi lần click và nút đổi ngôn ngữ thì sẽ reload loại trang với language mới.
THứ hai, có 2 loại localization, một là ngôn ngữ giao diện, thì dễ rồi, bạn chỉ cần dùng mảng associate hay dùng hàm gettext. Loại thứ hai là ngôn ngữ của nội dung, chẳng hạn bản tin, cái này bạn cần design database lấy .
- Lệnh gọi trang:
+ vi.php
+ en.php
+ set.php
===============
Nội dung file:
+ Mỗi biến được gán một text show ra của biến đó với cả 2 trang en.php và vi.php cùng dùng chung biến.
- vi.php
+ Đầu tiên nếu giá trị của lang trên URL = "vi", $_SESSION["ngonngu"] sẽ được gán bằng "vi" và cùng lúc include file vi.php vào.
+ Khác đi nếu giá trị của lang trên URL = "en", $_SESSION["ngonngu"] sẽ được gán bằng "en" và cùng lúc include file en.php vào.
+ Khác đi khi không thỏa mãn cả 2 điều kiện trên tức $_GET["lang"] khác "vi" và "en" ta sẽ kiểm tra xem $_SESSION["ngonngu"] lúc này mang giá trị gì? Nếu $_SESSION["ngonngu"] khác trống tức có giá trị (chỉ có thể là "vi" hoặc "en") ta sẽ include file mang giá trị là $_SESSION["ngonngu"].
+ Khác đi khi không thỏa mãn mọi điều kiện trên ta bắt buộc phải đặt default ngôn ngữ là "vi", tất nhiên việc gán cho $_SESSION["ngonngu"] = "vi" lúc này là cần thiết.
+ Tag <div> xác định đặt link Tiếng Việt và English cách bên phải và bên trên màn hình 5px với chiều dài là 120px
- set.php
- Với cách làm này bạn sẽ không cần quan tâm đến file set.php lần thứ 2 và chỉ việc add thêm các biến vào 2 trang vi.php và en.php rất khỏe.
Chúc thành công!
Việc tạo file lang *.php mà chứa toàn variable là không cần thiết. Tốt nhất bạn nên đưa vào mảng để dễ quản lý và sử dụng
Chỉ thay đổi hiện tại khi click vào ngôn ngữ Tiếng Anh khi bấm và liên kết khác (chẳng hạn như liên hệ...) thì trở về ngôn ngữ mặc định(Tiếng việt).
Vậy bạn nào làm thành công load lên cho mình tham khảo nữa nhé
Thanks
lang_vie.php , lang_eng.php ...
trong file lang.php được include trong các file php của bạn bạn viết như thế này:
if(in_array($_GET***91;'lang'***93;, aray("eng", "vie"))
$_SESSION***91;'lang'***93; = $_GET***91;'lang'***93;;
if(!in_array($_SESION***91;'lang'***93;, aray("eng", "vie"))
$_SESSION***91;'lang'***93; = "vie"; // Default lang
include "lang_".$_SESSION***91;'lang'***93;.".php";
foreach($_GET as $k=>$v)
if($k!="lang"&& $v!="")
$uri .= "&".$k."=".$v;
$uri = htmlspecialchars($uri);
echo "<a href='lang=vie{$uri}'>Tiếng Việt</a> | <a href='lang=eng{$uri}'>Tiếng Anh</a>";
còn nếu muốn chuyển sang trang chuyển đổi ngôn ngữ riêng rồi sau đó back lại trang vừa xem thì bạn có thể dùng header("location:".$_SERVER['HTTP_REFERER']); sau khi xử lý xong ngôn ngữ
[=========> Bổ sung bài viết <=========]
aray là array nhé, do bật telex nên viết nhầm
Mình tạo 4 trang
lang_vie.php
<?php
define("_HOME","TRANG CHỦ");
define("_VOITINGS","THĂM DÒ DƯ LUẬN");
?>
lang_eng.php
<?php
define("_HOME","HOME");
define("_VOITINGS","VOITINGS");
?>
lang.php
<?php
foreach($_GET as $k=>$v)
if($k!="lang"&& $v!="")
$uri .= "&".$k."=".$v;
$uri = htmlspecialchars($uri);
if(in_array($_GET['lang'], array("eng", "vie")))
$_SESSION['lang'] = $_GET['lang'];
if(!in_array($_SESSION['lang'], array("eng", "vie")))
$_SESSION['lang'] = "vie"; // Default lang
include "lang_".$_SESSION['lang'].".php";
?>
index.php
<?php
include ('lang.php');
$modules=$HTTP_GET_VARS['modules'];
echo "<a href='?lang=vie{$uri}'>Tiếng Việt</a> | <a href='?lang=eng{$uri}'>Tiếng Anh</a>";
?>
<table width="423" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="29"> </td>
<td width="190"><a href="index.php">Trang Chủ</a></td>
<td width="98"><a href="?modules=lienhe">Liên Hệ</a></td>
<td width="73"><a href="?modules=huongdan">Hướng Dẫn</a></td>
<td width="33">.......</td>
</tr>
</table>
<?php
if ($modules==lienhe)
{
echo "liên hệ";
echo "<br>";
echo _HOME;
echo "<br>";
echo _VOITINGS;
}
if ($modules==huongdan)
{
echo "hướng dẫn";
echo "<br>";
echo _HOME;
echo "<br>";
echo _VOITINGS;
}
?>
Vậy bạn giúp mình nhé.
Thanks
Tham khảo thêm về session ở đây: http://vn2.php.net/manual/en/book.session.php
và đây nữa
http://vn2.php.net/manual/en/reserved.variables.php
nhưng báo lỗi
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\AppServ\www\NGONNGU\languages\index.php:1) in C:\AppServ\www\NGONNGU\languages\index.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\NGONNGU\languages\index.php:1) in C:\AppServ\www\NGONNGU\languages\index.php on line 2
còn nếu thêm @ vào đầu
@session_start();
Thì vần như cũ
không thấy hiệu ứng gì cả