10/10/2018, 13:34

[HELP] Cách tạo session làm web đa ngôn ngữ trong PHP

Mình có 2 file en.phpvi.php lưu trong thư mục lang, giờ tạo session thế nào để làm được web đa ngữ trong php nhỉ!?
Mong các bạn giúp mình với.
Cảm ơn các bạn nhiều! ^^
thuyduongcd viết 15:47 ngày 10/10/2018
Code:
<?php
if (isset($_GET['lang'])){  // check GET trước
   $lang=strtolower($_GET['lang']);
   $_SESSION['lang']=$lang;
}elseif (isset($_SESSION['lang'])){
   $lang=strtolower($_SESSION['lang']);
}else{
   $lang="vi"; // default language
   $_SESSION['lang']="vi";
}
if (file_exists("lang/$lang.php")){
       include("lang/$lang.php");
}else{
// lang not exist, include default
       include("lang/vi.php");
       $_SESSION['lang']="vi";
}
?>
Mỗi lần muốn đổi ngôn ngữ, chỉ cần gọi http://yourdomain.com/index.php?lang="vi" hoặc http://yourdomain.com/index.php?lang="en". Sau này muốn thêm nhiều ngôn ngữ chỉ việc thêm file lang vào thư mục là ok
Minh Hoàng viết 15:44 ngày 10/10/2018
Cảm ơn thuyduongcd nhiều nha . . .^^
hoichobiet2212 viết 15:42 ngày 10/10/2018
Mình làm theo cách của bạn thuyduong thì bị thế này:
~> Khi ở 1 trang khác trang index.php, chọn ngôn ngữ tiếng anh hay tiếng việt thì nó lại trở về trang index.php.
~> Vậy làm sao để dù ko ở trang index.phpkhi thay đổi ngôn ngữ nó vẫn ở trang hiện tại nhỉ!? (như vậy mình cần phải đặt đoạn code trên vào tất cả mọi trang?? #:-s)
Mong các bạn giúp nha!
nokida viết 15:40 ngày 10/10/2018
có lẽ bạn có thể thay link ở phần chọn ngôn ngữ thành './index.php?'.$_SERVER['QUERY_STRING'].'&lang=vi' và
'./index.php?'.$_SERVER['QUERY_STRING'].'&lang=en'
hoichobiet2212 viết 15:46 ngày 10/10/2018
vậy code của bạn thuyduong sửa lại thế nào bạn!?
nokida viết 15:47 ngày 10/10/2018
Mình không biết bạn viết code theo cách gì, nếu bạn viết tất cả các request đều gửi về index.php (1) rồi dispatch hay là mỗi request, bạn có một file riêng (2) để xử lí mà không qua index.php (vd. http://yourdomain.com/login.php). Trong trường hợp (1), bạn không cần sửa gì, có thể put đoạn code của bạn thuyduong ở trang index.php. Trong trường hợp (2), bạn nên put đoạn code đó vào một file (vd. set_lang.php), rồi ở index.php và login.php (tất cả các file) đều require tới file set_lang.php đó.
thuyduongcd viết 15:47 ngày 10/10/2018
Dùng hàm này để lấy URL của trang hiện tại.
Code:
<?php
function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}
?>
Sau đó chèn đoạn code này vào chỗ thay đổi ngôn ngữ:
Code:
<?php 
echo '<a href="'.curPageURL().'&lang=vi">Tiếng Việt</a><br />'; 
echo '<a href="'.curPageURL().'&lang=en">English</a><br />'; 
?>
Còn một phương pháp khác là bạn có thể sử dụng công nhệ ajax. Dùng 1 hàm js (giả sử là setLang(lang)) gọi đến 1 trang php trên server với tham số (giả sử là setlang.php). Trang setlang.php này có 1 nhiệm vụ là thay đổi $_SESSION['lang']=".." tùy vào tham số đã nhận vào. Sau khi sert thành công chỉ cần gọi hàm refresh lại trang là được.
hoichobiet2212 viết 15:40 ngày 10/10/2018
Được gửi bởi thuyduongcd
Dùng hàm này để lấy URL của trang hiện tại.
Code:
<?php
function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}
?>
Sau đó chèn đoạn code này vào chỗ thay đổi ngôn ngữ:
Code:
<?php 
echo '<a href="'.curPageURL().'&lang=vi">Tiếng Việt</a><br />'; 
echo '<a href="'.curPageURL().'&lang=en">English</a><br />'; 
?>
Làm thế này thì khi mới load trang lên chưa chọn menu nào cả thì URL của ngôn ngữ được chọn sẽ là:

Code:
http://localhost/webphp/&lang=en
Hoặc:
Code:
http://localhost/webphp/&lang=vi
Để khắc phục mình làm onLoad URL là http://localhost/webphp/index.php ở thẻ <body> ko được. Vậy phải làm điều kiện j ở đây thuyduong ơi
thuyduongcd viết 15:45 ngày 10/10/2018
Chỉ cần xử lý cái curPageURL một chút là ổn thôi. Tìm trong chuỗi này ký tự ? nếu tìm thấy thì thêm vào chuỗi &lang=vi còn không thấy (như trường hợp bạn nêu) thì thêm vào chuỗi ?lang=vi
Code:
$curpage=curPageURL();
if (stripos($curpage,"?")===false){  // không tìm thấy
     $link="$curpage?lang=";
}else{
     $link="curpage&lang=";   
}
echo '<a href="'.$link.'vi">Tiếng Việt</a>';
echo '<a href="'.$link.'en">English</a>';
echo '<a href="'.$link.'fr">France</a>';
Bài liên quan
0