|
|
|
อยากทราบวิธีเปลี่ยนภาษาเว็บโดยใช้ php ครับ คือต้องการทำเว็บเปลี่ยนภาษาจาก th เป็น en ด้วย (มีการนำข้อมูลใน db มาแสดงด้วย) |
|
|
|
|
|
|
|
ถ้าคิดจะทำแค่
hellow กับ สวัสดี แค่นั้นก็เอาอยู่หละครับ
แต่ความเป็นจริง
มันต้องทำตั้งแต่ระบบหน้าแรก เลยครับ จนถึง ข้อมูลที่เก็บต้องแยก 2 ภาษากันเลย
แล้วทีนี้ค่อยมาเชคว่า ตอนนี้เลือกภาษาอะไรอยู่ เราก็ค่อย Include ภาษาโครงสร้างไว้หน้าเว็บ
แล้วก็ดึง DB ภาษานั้น ๆ ออกมาแสดง
มีอะไรก็ถามกันได้เน่อ ผมตอบแบบคลุมเครือเปล่าหว่า แต่ผมเข้าใจแบบนี้นะ
[email protected]
|
|
|
|
|
Date :
2009-03-11 11:53:46 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เข้าใจแล้วครับ ผมเองก็รู้สึกว่ามันไม่น่าจะมีอะไร translate ได้เป้ะๆขนาดนั้นหรอก ต้องทำแยกภาษาแหละครับ
แต่อยากรุ้วิธีการที่เขา กดเลือกภาษาน่ะครับ ว่าควรจะส่งไปแบบไหนดี
รับ $_GET['lang']; ตรงๆ ทุกหน้า แล้วเพิ่มส่งตัวแปร &lang=th,en แนบไปทุกอันด้วย
หรือใช้ SESSION เช็คเอา จะได้ไม่ต้องทำลิ้งทุกหน้า (แต่ผมกำลังปวดหัวกับมันอยู่ เปลี่ยนภาษาแต่พอไปอีกหน้ากัลบเป็นไทยเหมือนเดิม)
หรือใช้ setcookie เอาครับ เจอปัญหาเดียวกับ session เลยแต่นี้แปลกดี เปลี่ยนหน้ายังเป็น en แต่พอ back กลับดันเป็น th อีกและ
ผมคิดว่าแบบ 1 น่าจะชัวร์ที่สุด เพราะรับจาก GET เลย แต่ต้องมานั่งเสียเวลาใส่ตัวแปรแนบทุกลิ้งด้วยนี่ดิ -- --
รบกวนต่อด้วยนะครับ
|
|
|
|
|
Date :
2009-03-11 12:04:23 |
By :
lovehinatava |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมแนะนำให้ใช้ session ครับ
ทุกหน้าต้องทำการตรวจสอบก่อนว่ามีการเก็บค่าของภาษาที่เลือกไว้ใน session หรือยัง
ถ้ามีแล้วก็ให้ใช้ session ตัวเดิม แต่ถ้าไม่มีก็ให้ สร้าง session ขึ้นมาแล้ว เก็บค่าภาษาไว้
สมมุติให้เป็นภาษาไทย คราวนี้พอจะเปลี่ยนเป็นภาษาอังกฤษ อาจจะเกิดจากการคลิกที่ ธงชาติอังกฤษ
ก็ให้ส่งตัวแปรภาษาที่ต้องการมา อาจจะเป็น lang=en แล้วอีกหน้าก็ GET['lang'];
แล้วก็ให้ session ตัวเดิม เก็บค่าของ GET['lang']; ซะ
น่าจะประมาณนี้ ลองดูครับ
|
|
|
|
|
Date :
2009-03-11 13:13:42 |
By :
ttong |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอนนี้ทำได้แล้วครับ แต่ยังไม่แน่ใจว่าจะทำให้เว็บช้าลงหรือเปล่าอ่ะครับ เพราะเว็บเน้นรูป ไม่ค่อยมีอักษรในเว็บเท่าไหร่
(ข้อมูลส่วนใหญ่ก็ดึงจาก DB ซะหมด)
ผมลองใช้ session อะครับ เพราะว่าถ้า start ได้แล้ว ประกาศบนหัวเว็บทุกอันก็จบ
ผมเลยสร้าง ไฟล์ lang.php เพื่อทำให้รับค่า lang ออกมาเป็น session แล้วกลับคืนไปหน้าเดิม
lang.php
<?php
@session_start();
if(session_is_registered("lang")) session_unregister("lang"); //ถ้ามี session มาก่อนแล้วให้ทำลายก่อน เดวมันไม่รับ langใหม่
$lang = $_GET['lang'];
session_register("lang");
$_SESSION["lang"]=$lang;
echo"<script language='JavaScript'>window.history.back();</script>"; //ย้อนกลับไปหน้าที่แล้ว(หน้าที่กดเปลี่ยนภาษา)
?>
จากนั้นพอเวลาจะใช้งาน ก็ส่งลิ้งไปที่ lang.php?lang=en หรือ th แบบนี้ดีไหมครับ
แล้วในเว็บนี้ผมใช้เทียบดู lang แล้ว echo ออกมาตาม lang นั้นๆ จะดีไหมครับ
(ผมกลัวมันอืดลงอะครับ เพราะ 1 ประโยค ก็ต้องยัด if 1ตัวแต่หน้านึงมีประมานไม่เกิน 20 คำ(หัวข้อ)อะครับที่ใช้ภาษาไทย)
|
|
|
|
|
Date :
2009-03-11 14:06:25 |
By :
lovehinatava |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จาก code ที่เอามาให้ดูแปลว่า
if(session_is_registered("lang")) session_unregister("lang"); บรรทัดนี้สั่งให้ทำลาย session lang
แปลว่าเราต้องส่งตัวแปร lang ทุกหน้า ใช่มั้ยครับ เช่น lang.php?lang=en
ถ้าเราไม่ทำลายมัน เราก็ไม่จำเป็นต้องส่งตัวแปร lang มาทุกหน้า
เราจะส่งค่า lang.php?lang=en ต่อเมื่อมีการกดที่ ธงชาติอังกฤษ lang.php?lang=th เมื่อมีการกดที่ ธงชาติไทย
ที่เหลือให้ใช้เป็น lang.php แล้วอ่านค่า lang จาก session เอา
ส่วนเรื่องที่บอกว่าต้อง if ทุกประโยค
เราน่าจะ แยกข้อความภาษาอังกฤษ มาเก็บไว้ที่ en.php แล้ว แยกข้อความภาษาไทย มาเก็บไว้ที่ th.php
สมมุติมีการส่ง lang.php?lang=en มา
ก็ให้ include($lang.".php");
แล้วก็ echo $text; เลย โดยไม่ต้องมา if อีก
|
|
|
|
|
Date :
2009-03-11 14:36:38 |
By :
ttong |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ที่ต้องทำลายก่อนเพราะ เกิดถ้าจะเปลี่ยนภาษา มัน session_register ทับไม่ได้อะครับ(กลายเป็น lang เดิมไม่รุ้เพราะอะไรเหมือนกัน) เลยต้องทำลายก่อนที่จะขอเปลี่ยนภาษา
(แค่เปลี่ยนภาษาเท่านั้นครับ หน้าแสดงผลผมแค่แปะ $lang = $_SESSION['lang']; ไว้อะครับ)
ส่วนทำแยกภาษานี่ผมยังงงอยู่เลยครับ แต่น่าจะเป็นประโยชน์มาเลยครับ เพราะข้อความที่อยู่ในเว็บก็คำเดิมๆ เกือบจะทุกหน้า
พอจะยกตัวอย่างข้อความใน en.php แล้วก็ตอนเรียกใช้บางตัวได้ไหมครับ
ขอบคุณครับ
|
|
|
|
|
Date :
2009-03-11 14:57:01 |
By :
lovehinatava |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ้อ ๆ ไปค้นเจอมาแล้วครับ
ใช่แบบนี้รึเปล่าครับ
http://forums.thainetdev.com/index.php?showtopic=45
|
|
|
|
|
Date :
2009-03-11 15:08:45 |
By :
lovehinatava |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Internationalization
|
|
|
|
|
Date :
2009-03-11 16:28:53 |
By :
pjgunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<?
session_start();
if($_SESSION["lang"] == "EN")
{
include("en.php");
}
else
{
include("th.php");
}
?>
Code (th.php)
<?
$strTitle = "ยินดีต้อนรับเข้าสู่เว็บไซต์ของฉัน";
$strHome = "หน้าแรก";
$strService = "บริการของเรา";
$strAbout = "เกี่ยวกับเรา";
$strContact = "ติดต่อเรา";
//** สมมุติค่ามาจาก Database ที่ได้จากการ Query ***//
$result["DETAIL_TH"] = "นี้คือเนื้อหาภาษาไทย";
$strDetail = $result["DETAIL_TH"];
?>
Code (en.php)
<?
$strTitle = "Welcome to My Web Site";
$strHome = "Home";
$strService = "Service";
$strAbout = "About Us";
$strContact = "Contact Us";
//** สมมุติค่ามาจาก Database ที่ได้จากการ Query ***//
$result["DETAIL_EN"] = "This is content English";
$strDetail = $result["DETAIL_EN"];
?>
Go to : PHP Multiple Language การใช้ PHP ทำเว็บ 2 ภาษาแบบง่าย ๆ
|
|
|
|
|
Date :
2011-08-22 13:07:06 |
By :
thaicreate |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
น่าจะได้
Code (PHP)
//SET LANGUAGE
if(isset($_GET["cc"])){
//CHECK FILE IS EXIST
$lang_file = "public/render/lang/lang.".$_GET["cc"].".php";
if(file_exists($lang_file)){
$_SESSION["language"]=filter_input(INPUT_GET,"cc");
} else{
$get_location = json_decode(file_get_contents('http://ipinfo.io/json'));
$_SESSION["language"]=strtolower($get_location->country);
}
//IF EXIST THEN SET FILE TO DEFAULT LANGUAGE (EN)
} else{
if(isset($_SESSION["language"])){
$lang_file = "public/render/lang/lang.".$_SESSION["language"].".php";
//CHECK FILE IS EXIST
if(file_exists($lang_file)){
//$_SESSION["language"];
$lang_file = "public/render/lang/lang.".$_SESSION["language"].".php";
} else{
$get_location = json_decode(file_get_contents('http://ipinfo.io/json'));
$_SESSION["language"]=strtolower($get_location->country);
$lang_file = "public/render/lang/lang.".$_SESSION["language"].".php";
}
//IF EXIST THEN SET FILE TO DEFAULT LANGUAGE (EN)
} else{
$_SESSION["language"]="en";
$lang_file = "public/render/lang/lang.".$_SESSION["language"].".php";
//SET TO DEFAULT LOCATION LANGUAGE
}
}
require($lang_file);
|
|
|
|
|
Date :
2015-03-21 14:19:43 |
By :
Aom Siriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ๆ จากด้านบน :)
Code (PHP)
//SET LANGUAGE
if(isset($_GET["cc"])){
//CHECK FILE IS EXIST
$lang_file = "public/render/lang/lang.".filter_input(INPUT_GET,"cc").".php";
if(file_exists($lang_file)){
$_SESSION["language"]=filter_input(INPUT_GET,"cc");
} else{
$get_location = json_decode(file_get_contents('http://ipinfo.io/json'));
$_SESSION["language"]=strtolower($get_location->country);
}
//IF EXIST THEN SET FILE TO DEFAULT LANGUAGE (EN)
} else{
if(isset($_SESSION["language"])){
$lang_file = "public/render/lang/lang.".$_SESSION["language"].".php";
//CHECK FILE IS EXIST
if(file_exists($lang_file)){
//$_SESSION["language"];
echo $_SESSION["language"];
} else{
$get_location = json_decode(file_get_contents('http://ipinfo.io/json'));
$_SESSION["language"]=strtolower($get_location->country);
}
//IF EXIST THEN SET FILE TO DEFAULT LANGUAGE (EN)
} else{
$_SESSION["language"]="en";
//SET TO DEFAULT LOCATION LANGUAGE
}
}
require("public/render/lang/lang.".$_SESSION["language"].".php");
|
|
|
|
|
Date :
2015-03-21 14:42:35 |
By :
Aom Siriwat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำใมไม่แยก sub domain หรือ sub directory ไปเลยอะครับ ง่ายกว่ากันเย๊อะได้ผลเหมือนกัน... ดีกว่าเก็บแบบซับซ้อนเผลอๆบอทไม่เข้าใจอีก..
En.myweb.com
Myweb.com/en/
|
|
|
|
|
Date :
2015-03-22 01:21:56 |
By :
meannerss |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|