พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com
PHP development / ทำเว็บให้มีสองภาษา
guest
guest
Fri 9 Sep 2005 15:34:48
ทำเว็บให้มีแบบเลือกได้ สองภาษาทำง้ยครับ ....ขอคำอธิบาย กับตัวอย่างน่ะครับ เคยได้ยินมาว่าให้ทำ session แต่ทำไม่เป็นน่ะครับ หรือ ท่าน เว็บมาสเตอร์มีแบบอื่นก็ได้ครับ  ของคุณครับ
Administrator
Fri 9 Sep 2005 15:59:38

โดยปกติแล้วจะใช้ cookie หรือไม่ก็ส่งค่าผ่าน uri เอาครับ แต่ถ้าจะใช้ session ก็สามารถทำได้ครับ นี่คือส่วนของการส่งค่า

ส่วนที่ว่าจะทำเว็บให้เป็น 2 ภาษานั้น แล้วแต่การประยุกต์ใช้ครับ

  1. แบบ database driven สร้าง database ส่วนของ content ขอเว็บไซท์ทั้งหมดเป็น 2 ภาษา เมื่อมีการเลือกภาษาก็ทำการ query ภาษาที่ต้องการออกมาจาก database ครับ อันนี้ต้องพยายามออกแบบ database ให้ดีครับไม่อย่างนั้นจะทำให้เว็บช้าลงอย่างถนัดตา
  2. แบบ directory โดยการสร้างเว็บไซท์เป็น 2 ภาษาแยกกันเป็นคนละ directory แบบนี้จะต้องทำส่วนของเนื้อหาเป็น 2 ชุดครับ แบบนี้ทำให้การใช้งานเว็บไซท์เร็วกว่าแบบแรกครับ
  3. แบบ embed แบบนี้เป็นการเขียนทั้งสองภาษาอยู่ในไฟล์เดียวกันครับ จะใช้การโหลด script มากหน่อยเหมาะสำหรับเนื้อหาที่เป็น 2 ภาษานั้นมีไม่มากเช่น menu ครับ
  4. แบบ XML driven เป็นการสร้างเว็บไซท์โดยบรรจุภาษาต่างๆไว้ใน XML file ครับคล้ายกับแบบ database driven ครับ และถ้ามีความเข้าใจโครงสร้างของ XML, XSLT และ XHTML ดีแล้วสามารถเขียนเว็บไซท์ครั้งเดียวสามารถใช้งานได้ 2 ภาษาเลยครับ โดยการระบุภาษาที่ attaribute xml:lang ของ tag html ได้ครับ

ถ้าเป็นไปได้แนะนำแบบ database driven ครับเพียงแต่ต้องออกแบบ database structure ให้ดีครับ ค่อนข้างง่ายครับ แต่ถ้าให้ดีกว่านั้น XHTML ครับเป็นมาตรฐานที่ควรศึกษาไว้ครับเพราะจะช่วยให้งานการเขียนเว็บง่ายขึ้นเยอะครับ

guest
guest
Fri 9 Sep 2005 16:44:23

ทั่นเว็บมาสเตอร์พอมีตัวอย่างการส่งค่าผ่าน url บ้างไหมครับ อยากทำแบบนี้เพราะว่าผมใช้ ไม่มากครับ

Administrator
Fri 9 Sep 2005 17:27:48
การส่งค่าของ ตัวแปรผ่าน uri ถ้าไฟล์ที่ต้องการรับค่าชื่อ module.php ก็สามารถส่งได้โดยการ module.php?lang=th
ในกรณีนี้ ในไฟล์ module.php นั้นจะมีการเช็คว่ามีตัวแปรชื่อ lang ส่งผ่านมาทาง url หรือไม่ เช่น
if(isset($_GET["lang"]) && $_GET["lang"] == "th"){
//process การทำงานในการเลือกภาษาไทยครับ
}elseif(isset($_GET["lang"]) && $_GET["lang"] == "en"){
//process การทำงานในการเลือกภาษาอังกฤษครับ
}

ส่วนถ้าการใช้งานในการเลือกภาษามีไม่มากอาจเลือกใช้แบบ embed ก็ได้ครับโค๊ดที่ได้จะเข้าใจได้ง่ายครับ เช่น ผมต้องการเขียนเมนู

<div class="menu"><a href="index.php?lang=<? echo ((isset($_GET["lang"]) && $_GET["lang"]=="th")?"th":"en"); ?>"><? echo ((isset($_GET["lang"]) && $_GET["lang"]=="th")?"หน้าแรก":"Home"); ?></a></div>

<div class="menu"><a href="webboard.php?lang=<? echo ((isset($_GET["lang"]) && $_GET["lang"]=="th")?"th":"en"); ?>"><? echo ((isset($_GET["lang"]) && $_GET["lang"]=="th")?"เว็บบอร์ด":"Webboard"); ?></a></div>

ประมาณนี้ครับ
guest
guest
Mon 12 Sep 2005 10:02:16

ขอบคุณครับ ผมเอาไป ดัดแปลง แล้วใช้ได้ดีมากเลยครับ ขอบอกหน่อยเผื่อ ท่านอื่นสนใจ ขั้นแรก ก็สร้าง lang-th.php ขึ้นมา จะสร้างกี่ไฟล์ก็ได้ ข้างในก็

<?php
define("_CHARSET","TIS-620");
define("_Home","หน้าหลัก");
define("_About","เกี่ยวกับเรา");

.......... ได้ตามต้องการ

?>

แค่เนี้ย เสร็จแล้วก็ทำตามที่ทั้นเว็บมาสเตอร์แนะนำ  ในส่วนของ process การทำงานก็ include ไฟล์ที่เราทำขึ้นมา ต้องการ ภาษาไหนเอามาได้ เลย

guest
guest
Mon 12 Sep 2005 12:15:01
อีกนิดครับ....ผมทำแบบนีแล้วดันมีปัญหาคือ ถ้าผมอยู่ในหน้า ของมันเองแล้วคลิ๊ก ปุ่ม Home ซึ่งเป็นหน้าของมัน ค่าที่ได้จะไม่เป็นค่า เดิ่มที่รับค่ามา ครับ คือไม่เป็น ทั้ง th หรืเ eng คือมันไม่จำค่าที่รับมาน่ะครับ ไม่รู้ว่าจะต้องแก้ยังงัยครับ
Administrator
Mon 12 Sep 2005 15:39:09
ตอนที่สร้างลิงค์ต้องมีการนำตัวแปรจาก uri นำมาต่อท้ายครับโดยให้ส่งค่าไปพร้อมกับ uri ครับ โดยจากที่ผมยกตัวอย่างนั้นถ้าลอง view source ออกมาเป็น html แล้วถ้ามีการส่งค่ามากับ uri เช่น ?lang=th
เมื่อมีการแสดงผลตามภาษา HTML แล้วจะแสดงออกมาเป็น
<div class="menu"><a href="index.php?lang=th">หน้าแรก</a></div>
<div class="menu"><a href="webboard.php?lang=th">เว็บบอร์ด</a></div>

แต่ถ้ามีการส่งค่ามาเป็น ?lang=en เมื่อแสดงผลเป็น HTML แล้วจะได้เป็น
<div class="menu"><a href="index.php?lang=en">Home</a></div>
<div class="menu"><a href="webboard.php?lang=en">Webboard</a></div>

ลองตรวจเช็คผลที่แสดงออกมาเป็น HTML อีกทีครับเพื่อความถูกต้องของข้อมูล
guest
guest
Tue 13 Sep 2005 09:03:53

ทั่นเว็บมาสเตอร์ พอ อธิบายโค๊ดนี้ได้ไหมครับ แล้วถ้าผมจะไม่ใช้ การดึงข้อมูลจาก ด้าต้าเบส แต่เปลี่ยนมาเป็น include ไฟล์ ขึ้นมาแทนได้ไหมครับ ตัวอย่างไฟล์ที่ดึงมาน่ะครับ

<?php
define("_CHARSET","TIS-620");
define("_Home","หน้าแรก");
define("_About","เกี่ยวกับเรา");
?>

อาไรทำนองเนี้ยครับ  เพราะผมลองทำตามทั้นเว็บมาสเตอร์ดูแล้ว จากหน้า แรก พอ เลือกภาษาแล้ว มันก็ลิงค์ไปหน้า โฮม แต่ พอคลิ๊ก ที่ปุ่มโฮม มันกลับไม่เปลี่ยนภาษา มันกลายเป็น _Home | _About | อาไรทำนองเนี้ยครับ ต้องคอยคลิ๊กที่ปุ่มภาษา ไทย หรือ อังกฤษ เพือ ส่งค่าให้มันตลอด ไม่รู่ว่าผิดตรงไหน รบกวน ทั่นเว็บมาสเตอร์ อีกทีนะครับ ส่วนโค๊ดที่ส่งมาให้ดู เป็นตัวอย่างจากเว็บอื่นน่ะครับ เห็นบอกว่าเป็นแบบ เซสชั่น

session_start();
if(!session_is_registered(session_var)){
session_register(session_var);}
if(empty($session_var[language])&empty($language)){
$session_var[language]=1;
}elseif(!empty($language)){
$session_var[language]=$language;}
$connect=mysql_connect(,,);
mysql_select_db(,$connect);
$language=mysql_query("select id,language from language",$connect);
$counter=mysql_num_rows($language);
for($i=0;$i<$counter;$i++){
$language1=mysql_fetch_array($language);
echo"<a href=$_SERVER[PHP_SELF]?language=$language1[id]><img src=/image/$language1[language].gif border=0></a> ";}
mysql_close($connect);

Administrator
Tue 13 Sep 2005 11:41:58
ต้องขออภัยจริงๆครับ จากโค๊ดที่ให้มา
<?php
define("_CHARSET","TIS-620");
define("_Home","หน้าแรก");
define("_About","เกี่ยวกับเรา");
?>

มันเป็นการประกาศค่าคงที่เท่านั้นนะครับ ส่วนโค๊ดที่ดึงข้อมูลจาก database นั้นคล้ายกับโค๊ดที่ผมบอกนั่นล่ะครับ แต่เขาเก็บชื่อภาษาไว้ใน database เท่านั้นครับ ซึ่งน่าจะเหมาะกับเว็บที่มีมากกว่า 2 ภาษาครับ เพราะแน่นอนว่ามันต้องมีการ query ที่เพิ่มขึ้น

เรามาดูตัวอย่างที่คุณ guest ให้มาดีกว่าครับ จากที่คุณ guest ให้มานั้นผลสุดท้าย ถ้ามี 3 ภาษาจะมีการแสดงผลเป็น
<a href="index.php?language=en"><img src="/image/en.gif"></a>
<a href="index.php?language="th"><img src="/image/th.gif"></a>
<a href="index.php?language="fr"><img src="/image/fr.gif"></a>
ในกรณีที่ ไฟล์ที่ทำงานชื่อ index.php นะครับจะเห็นว่ามีการส่งตัวแปรผ่าน uri มาชื่อ language โดยค่าที่ส่งมาคือชื่อภาษา จะเห็นว่าเหมือนกับโค๊ดที่ผมได้เขียนไว้

ที่นี้เรามาดูตัวอย่าง อีกอันครับ
<?
//ส่วนของเมนูของเว็บ
if(isset($_GET["language"]) && $_GET["language"] == "th"){
    echo "<a href=\"index.php?language=th\">หน้าแรก</a>";
    echo "<a href=\"about.php?language=th\">About us</a>";
}else{
    echo "<a href=\"index.php?language=en\">Home</a>";
    echo "<a href=\"about.php?language=th\">About us</a>";
}
?>
<a href="<? echo $_SERVER["PHP_SELF"]; ?>?language=en"><img src="image/en.gif"></a>
<a href="<? echo $_SERVER["PHP_SELF"]; ?>?language=th"><img src="image/th.gif"></a>

จะเห็นว่าเป็นการส่งตัวแปรเหมือนอย่างตัวอย่างที่คุณ guest ให้มาเลยครับเพียงแต่มีแค่ 2 ภาษาเท่านั้น

ส่วนเรามาดูการทำงานแบบ session กันครับ
การทำงานของ session ก็ต้องมีส่วนนึงที่เหมือนกันกับข้างบนนั่นล่ะครับ คือต้องมีส่วนคอยตรวจเช็คว่าที่หน้านั้นๆ user ทำการเปลี่ยนเป็นภาษาใด ส่วนนั้นก็คือ

<?
session_start();
if(isset($_GET["language"]) && $_GET["language"] != ""){
    session_register("language");
    $_SESSION["language"] = $_GET["language"];
}
?>

ส่วนในการทำให้เนื้อหาเป็น 2 ภาษานั้นก็คือ
<?
//ส่วนของเมนูของเว็บ
if(isset($_SESSION["language"]) && $_SESSION["language"] == "th"){
    echo "<a href=\"index.php?language=th\">หน้าแรก</a>";
    echo "<a href=\"about.php?language=th\">About us</a>";
}else{
    echo "<a href=\"index.php?language=en\">Home</a>";
    echo "<a href=\"about.php?language=th\">About us</a>";
}
?>
<a href="<? echo $_SERVER["PHP_SELF"]; ?>?language=en"><img src="image/en.gif"></a>
<a href="<? echo $_SERVER["PHP_SELF"]; ?>?language=th"><img src="image/th.gif"></a>

จะเห็นว่าเหมือนๆกันครับ เพียงแต่ต้องเพิ่มโค๊ดมาอีกชุดในการ register session เท่านั้นครับ
ส่วนปัญหาของคุณ guest นั้นผมอยากให้ลอง debug ด้วยการ view code HTML มาดูกันครับว่ามีปัญหาตรงไหน ประเด็นการทำงานของระบบทั้งหมดคือต้องมีการส่งตัวแปรไปกับ uri เท่านั้นครับ ส่วนในหน้าที่ลิงค์ไปก็มีการเช็คตัวแปรที่มากับ uri เท่านั้นว่าเป็นภาษาอะไรครับ

ลองใช้งานระบบ 2 ภาษาของผมได้ที่ http://pagerank.modoeye.com
guest
guest
Tue 13 Sep 2005 13:11:06

ขอบคุณทั่นเว็บมาสเตอร์มากครับ ทำได้แล้ว...จริง ๆ ไม่ มีข้อผิดพลาด ผมใช้แบบ session ตัวอย่างล่าสุดน่ะครับ แต่เปลี่ยน จาก

if(isset($_SESSION["language"]) && $_SESSION["language"] == "th"){
    echo "<a href=\"index.php?language=th\">หน้าแรก</a>";
    echo "<a href=\"about.php?language=th\">About us</a>";
}else{
    echo "<a href=\"index.php?language=en\">Home</a>";
    echo "<a href=\"about.php?language=th\">About us</a>";
}

เป็น

if(isset($_SESSION["lang"]) && $_SESSION["lang"] == "th"){
    include "lang-th.php";
}else{
    include "lang-eng.php";
}

 แทน น่ะครับ ดึงจากค่าคงที่ที่สร้างไว้ ตัวอย่างค่าคงที่เอามาจาก phpnuke น่ะครับ แล้วเอาของทั่นเว็บมาสเตอร์มาดัดแปลง ใช้ได้ดีทีเดี่ยว

ในส่วนของเมนูก็ทำแบบนี้ครับ

<a href="home.php"><? if(isset($_GET["lang"]) && $_GET["lang"] == "th"){echo_Home; }      else{echo _Home;}?></a> 
| <a href="about.php"><? if(isset($_GET["lang"]) && $_GET["lang"] == "th"){echo _About ;}else{echo _About;}?></a>

ปล้ำมาตั้งนานกว่าจะทำได้...ต้องขอบคุณทั่นเว็บมาสเตอร์ด้วยนะครับที่อุตส่าห์เสียเวลากับผม (ผมเพิ่งหัดเขียน php ครั้งแรกครับ มีหนังสืออยู่ 1 เล่ม ไม่ได้เรียน ด้วย เลยเข้าใจยากนิดนึง) สุดท้ายขอให้คนเข้ามาเยี่ยมชม เว็บนี้เยอะ ๆ และ ขอให้เว็บนี้อยู่กับพวกเราไปอีกนานนะครับ.......

bank
bank
Wed 20 Feb 2008 10:41:36

ขอถามท่านเว็บมาสเตอร์หน่อยนะครับ คือที่ผมทำตามที่ได้บอกมาแล้วใช้ได้ดี แต่มันมีปัญหาตรงที่เวลาเข้าไปหน้าอื่น เช่น ตอนอยู่หน้า Home ผมเลือกภาษาไทยไว้และจากนั้นผมก็เข้าไปหน้า About as แล้วไปเปลี่ยนให้เป็นอีกภาษาในหน้า About us ทำไมมันจะลิ้งมาที่หน้าอ่ะครับ งงเลย เว็บที่ผมเขียนพอดีทำหน้า header.php เป็นไฟล์ที่เก็บเมนูหลัก ซึ่งไฟล์ Index.php จะเรียกมาใช้งานโดยการ include อ่ะครับ ไฟล์ header.php ก็คล้ายๆกับไฟล์ left_menubar.php ทั่วๆไปอ่ะครับ แต่ในที่นี้ผมมีไฟล์ Home.php กับ ไฟล์ Aboutus.php ทั้ง 2 ไฟล์จะเรียกไฟล์ Header.php มาทำงาน โดยไฟล์นี้จะเก็บจะเก็บโค้ด

<a href="<? echo $_SERVER["PHP_SELF"]; ?>?language=en"><img src="image/en.gif"></a>
<a href="<? echo $_SERVER["PHP_SELF"]; ?>?language=th"><img src="image/th.gif"></a>

 $_SERVER["PHP_SELF"] หมายถึงอะไรครับทำไมมันลิ้งกลับไปที่หน้า home.php ตลอดเลย ไม่ว่าเราจะไปที่หน้าไหนเวลากดเปลี่ยนภาษามันจะมาที่หน้า home.php

คือโคด้ที่เป็นไฟล์ module.php  มีดังนี้

if(isset($_SESSION["lang"]) && $_SESSION["lang"] == "th"){
    include "lang-th.php";
}else{
    include "lang-eng.php";
}

webmaster
webmaster
Thu 21 Feb 2008 23:58:02
PHP_SELF เป็นไฟล์ที่กำลังทำงานอยู่ครับ ส่วนการตรวจสอบว่าเขาเลือกภาษาใดมาก็ให้ตรวจสอบจาก QueryString เอาครับ จากโค๊ตของคุณไปตรวจสอบค่าที่ Session ซึ่งน่าจะไม่มีค่าดังกล่าว
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login