ทำระบบหลายภาษายังไงดีครับ? จากไฟล์ index.php ผมจะทำไงให้เรียก echo language::trans("ok");
อย่างกระทู้นี้.. https://www.thaicreate.com/php/forum/006630.html
ลองทำแล้ว โดยเรียกไฟล์ languages/th.php มาแล้ใช้ array
$lntext['ok'] = 'โอเค';
เขียนใน php echo language::trans("ok"); มันก็ได้อยู่ แต่เรียกผ่าน smarty template แล้วกลายเป็นผลออกมา array เฉยๆซะงั้น
Date :
2009-07-16 21:33:14
By :
mr.v
ทำเว็บสองภาษาอะค่ะ แต่ทำไมไม่เห็นต้องใช้ function อะไรวุ่นวายเลยอะค่ะ แค่ทำฟร์อมรับข้อมูลไว้สองภาษาแล้วเรียกขึ้นมาแสดงเท่านั้นเอง อะ หรือว่า ที่หนูทำนี่ไม่ถูกอะค่ะ เพราะเห็นคนอื่นทำเว็บหลายภาษาแล้วเหมือนยาก ๆ ยังไงก็ไม่รู้ แต่ว่ามันก็รันได้หมดนะค่ะ แสดงออกมาสองภาษาแต่มันใช้ได้จริงรึเปล่าอะค่ะ ถ้าอัพขึ้น server อะ
Date :
2009-07-27 00:16:33
By :
jiro_aaron
ู^
^
เหมือนกันครับ ไม่รู้เหมือนกันทำไมท่านอื่นทำกันแบบยากๆ แบบว่าผมไม่เก่งมากหรอกแต่เท่าที่ผมคิดก็คือ
2 ภาษาก็ ตั้งไว้เลย englishlang.php และ thailang.php แล้วก็ใส่ค่าเข้าไปเลยในแต่ละไฟล์
thank="Thank You"; // englishlang.php
thank="ขอบคุณ"; // thailang.php
แล้วก็ echo เอาเลยอ่ะครับตามต้องการ
คือผมคิดจะทำแบบนี้ในเว็บอนาคตของผมอ่ะครับ แต่ไม่รู้เหมือนกันว่ามันเป็นวิธีที่ผิดหรือเปล่าอ่ะครับ (เพราะดูวิธีอื่นที่เขาใช้กันมันงงๆอ่ะครับ) ถ้าอย่างไรก็ตามช่วยชี้แนะด้วยครับ ^^
Date :
2009-07-27 00:25:46
By :
cjmling
ง่ะ.... จะบอกอ้อมๆว่าผมเรื่องมากใช่ม้า.. >_<
ถ้าทำตามตย.คุณ jiro ก็จะพบว่าต้องทำฟอร์ม 2 ภาษา(ตามที่อ่านเข้าใจคือ 2 ไฟล์) เวลาแก้มันจะต้องแก้หลายที่หลายครั้ง แต่วิธีนี้ก็ทำงานได้เหมือนกัน
กรณีของคุณ ling เข้าใจว่าเป็น array หรืออาจจะเป็นตัวแปล อย่าง $thank วิธีนี้ก็ทำงานได้อีกไม่มีปัญหาหรอก
แต่ต้นกระทู้ผมบอกว่าผมใช้เทมเพลทของ smarty ดังนั้นหมายความว่ามันมีหลายภาษาทั้งในเทมเพลท และในไฟล์ php
ซึ่งถ้าทำแบบทั่วไป ผมคงตามแก้กันวุ่นเลยล่ะ
ลองดูแผนผังการทำงานแบบง่ายๆ
smarty เรียกฟังก์ชั่น l มีตัวกำหนด s='ภาษา' เช่น {l s='hello'} (ฟังก์ชั่น l จะเป็นตัวอะไรก็ได้)
ในฟังก์ชั่น l ที่ผม register ไว้ มันไปเรียกคลาส language -> ฟังก์ชั่น trans ตามรูปแบบ language::trans($inputtext)
อย่างเช่นในเทมเพลทเขียนว่า {l s='hello'} ตัวฟังก์ชั่นก็จะประมวลคำสั่งไปเรียก language::trans("hello") แล้วส่งกลับไปแสดงผล
ทีนี้ดูไฟล์ php ธรรมดา แทนที่ผมจะเขียนว่า echo "hello"; หรือ $language["hello"] ผมก็ใช้ class language ฟังก์ชั่น trans ให้เป็นประโยชน์ กลายเป็น echo language::trans("hello")
ซึ่งในฟังก์ชั่น trans อาจใส่ตัวกำหนดไว้ก็ได้ว่าถ้า $language["hello"] ไม่มีกำหนดไว้ ให้ส่งคืนค่าเดิมกลับไป
อะไรแบบนี้ พอจะเข้าใจมั้ยครับ
แล้วเวลาแปลภาษา ก็เข้าไปในไฟล์ภาษาไฟล์เดียวเลย ไฟล์ภาษาก็จะเป็นแบบนี้
$language = array();
$language['hello'] = "สวัสดี";
จริงๆมันไม่ยากมากหรอก ผมอยากแนะนำให้ลองทำเล่นๆดู แล้วจะติดใจ เดี๋ยวให้โค้ดตัวอย่าง
Code (PHP)
<?php
/* Autoload */
function __autoload($className)
{
if (!class_exists($className, false))
require_once(dirname(__FILE__).'/../classes/'.$className.'.php');
}
define('_SITE_LN_', 'th');
?>
ไฟล์ /include/config.php
Code (PHP)
<?php
class language {
/**
*
* เปิดไฟล์แปลแล้วส่งกลับไป
*
**/
static public function trans($textin) {
require("languages/"._SITE_LN_.".php");
$text = $_lntxt[$textin];
if ($text == null) {
$text = $textin;
}
return $text;
}
}
?>
ไฟล์ /classes/language.php
Code (PHP)
<?php
$language = array();
$language['hello'] = "สวัสดี";
?>
ไฟล์ /languages/th.php
Code (PHP)
<?php
echo language::trans("hello");
?>
เรียกใช้งาน
Date :
2009-07-27 03:36:58
By :
mr.v
สรุปว่าได้ยังคับ
Date :
2009-07-27 08:09:32
By :
pjgunner
คือ แบบว่าเราก็ไม่เก่งอะ แต่เราทำเป็นเทมเพตไว้สองภาษาอะ แล้วก็ สร้างฟร์อมรับข้อมูลไว้สองภาษา เก็บไว้ในดาต้าเบสอะ แล้วออกแบบดาต้าเบสไว้แบบนี้อะ id (int) (auto)(pk), m_thai(text) , m_eng(text) , date_reg(date) แบบนี้อะ คืออันนี้ลองทำดูก่อนอะค่ะ กำลังหาวิธีทำอยู่ แบบว่าคิดว่ามันน่าจะใช้ได้อะ เลยทำแบบง่าย ๆ ไว้ก่อนอะคือเราไม่ค่อยเก่งเท่าไหร่อะนะ แล้วตอนนี้ก็ทำด้วยความจนตรอกแล้วเพราะ Project อันนี้ติด i ไม่ได้ด้วย อาจารย์บอกว่าไม่ผ่านก็ลงใหม่อะ สองอย่าง เพราะเป็น Project ฝึกงานอะ หัวหน้าก็เร่งด้วย
ปล.ตอนนี้ที่ทำมีปัญหาเรื่องคอลัมภ์ด้วยอะ เซ็งมากเลย ถึงทุกท่านจะให้คำแนะนำหรือติชมก็ได้นะค่ะน้อมรับค่ะ อยากเก่ง ๆ อะ เหมือนพวกคุณอะ
Date :
2009-07-27 21:54:28
By :
jiro_aaron
จริงๆทำแบบไหนก็ได้แหละครับ ให้มันทำงานได้ดีก็ ok แล้ว แต่ถ้ามีประสบการณ์มากขึ้นก็ลองค่อยๆออกแบบให้มันมารวมกันง่ายขึ้น แก้ที่เดียว อะไรแบบนี้
ผมก็ไม่เก่ง ถึงได้บอกว่าไปลอกเค้ามา
Date :
2009-07-27 22:27:18
By :
mr.v
ค่ะ ประสบการณืจิงๆๆช่วยสอนเราเราก็พยายามแสวงหาอยู่ค่ะ
Date :
2009-07-28 07:37:39
By :
kai9
Load balance : Server 04