|
|
|
วันนี้งานไม่ยุ่ง แจกเลย ฟังก์ชั่น Translate (แปลภาษา) |
|
|
|
|
|
|
|
Code (PHP)
/*
* // เริ่มใช้งานโดย
* 1. ตั่งค่า ที่อยู่ของไดเรคทอรีของภาษา define("DIR_LANG", 'langpack/'); ข้างใน langpack ก็คือ langpack/en/en.ini , langpack/th/th.ini
* 2. ตั่งค่าค่าเริ่มต้น ภาษา define('DEFUALT_LANG', 'en');
* // ความสำคัญในการ แปลเริ่มจาก
* 1. tran($str, $lang) // $lang ที่ระบุเข้าไป
* 2. จาก $_SESSION['lang']
* 3. จาก DEFUALT_LANG
* //
* การใช้งาน tran('YOU_KEY') // หากไม่พบ KEY จะสร้าง Key ใหม่ ในไฟล์ให้
* 1. KEY เช่น HELLO_WORLD , hello world, hell_World = มีค่าเท่ากับ HELLO_WORLD ซึ่งแล้วแต่สะดวกในการใช้
* 2. การใส่ KEY ครั้งแรก จะเป็นการสร้าง KEY ใหม่ หาก มี Key อยู่แล้ว จะ return Value มาให้
* ฉะนั้น ควร Refesh เพื่อรับเป็น Value
* 3. ทีนี้ก็ไปไล่ แปลใน ไดเรคทอรี ที่เรามีอยู่ เป็นอันเสร็จ
*
* echo tran('hello',false,'th') // สัวัสดี
*
* $_SESSION['lang'] = 'en';
* echo tran('hello') // Hello
*
* echo tran('HELLO') // Hello
* echo tran('HELLO'),' ',tran('world','s') // Hello world // 's' = ตัวเล็ก
* echo tran('HELLO',false,'th'),' ',tran('world') // สวัสดี World
*
*/
// ปล. หากเจอข้อผิดพลาด โพสต์ไว้ด้วยนะครับ จะได้เอาไปแก้ เพราะใช้อยู่ก็ไม่เจอปัญหาอะไร
// การใช้กับ Database ก็หลักการเดียกันครับ ไม่เจอ KEY ก็ INSERT KEY เข้าไป แต่ก่อนก็ใช้แต่แปลลำบาก
function lang_case($lang) {
$arr_case_lang = array('th', 'lo'); // ภาษาที่ไม่ต้องการ แปลงเป็นตัวเล็ก/ตัวใหญ่
if (is_array($lang)) {
$i = 0;
do {
if (in_array($lang[$i], $arr_case_lang))
return TRUE;
$i++;
}while ($i < count($lang));
}else {
if (in_array($lang, $arr_case_lang))
return TRUE;
else
return FALSE;
}
return FALSE;
}
function tran($str, $type = FALSE,$lang = FALSE) {
// by sornarinb(at)gmail.com
if (!sub_dir(DIR_LANG, 2))
return $str . '[err:DIR_LANG]';
$all_lang = sub_dir(DIR_LANG, 2);
$key = strtoupper(trim($str));
if ($lang) {
$lang = trim($lang);
if (file_exists(DIR_LANG . $lang . '/' . $lang . '.ini')) {
$word = parse_ini_file(DIR_LANG . $lang . '/' . $lang . '.ini');
if (isset($word[$key])) {
if ($type == 's' && !lang_case($lang))
return strtolower($word[$key]);
return $word[$key];
}else {
foreach ($all_lang as $value) {
$path = DIR_LANG . $value . '/' . $value . '.ini';
$data[$key] = $key;
write_ini($data, $path);
}
if ($type == 's' && !lang_case($lang))
return strtolower($word[$key]);
return $key;
}
} else {
$word = parse_ini_file(DIR_LANG . DEFUALT_LANG . '/' . DEFUALT_LANG . '.ini');
if (isset($word[$key])) {
if ($type == 's' && !lang_case(DEFUALT_LANG))
return strtolower($word[$key]);
return $word[$key];
}else {
foreach ($all_lang as $value) {
$path = DIR_LANG . $value . '/' . $value . '.ini';
$data[$key] = $key;
write_ini($data, $path);
}
if ($type == 's' && !lang_case(DEFUALT_LANG))
return strtolower($word[$key]);
return $key;
}
}
} else if (@$_SESSION['lang'] != '' && strlen($_SESSION['lang']) == 2) {
$path = DIR_LANG . $_SESSION['lang'] . '/' . $_SESSION['lang'] . '.ini';
$word = parse_ini_file($path);
if (isset($word[$key])) {
if ($type == 's' && !lang_case($_SESSION['lang']))
return strtolower($word[$key]);
return $word[$key];
}else {
foreach ($all_lang as $value) {
$path = DIR_LANG . $value . '/' . $value . '.ini';
$data[$key] = $key;
write_ini($data, $path);
}
if ($type == 's' && !lang_case($_SESSION['lang']))
return strtolower($word[$key]);
return $key;
}
} else {
$word = parse_ini_file(DIR_LANG . DEFUALT_LANG . '/' . DEFUALT_LANG . '.ini');
if (isset($word[$key])) {
if ($type == 's' && !lang_case(DEFUALT_LANG))
return strtolower($word[$key]);
return $word[$key];
}else {
foreach ($all_lang as $value) {
$path = DIR_LANG . $value . '/' . $value . '.ini';
$data[$key] = $key;
write_ini($data, $path);
}
if ($type == 's' && !lang_case(DEFUALT_LANG))
return strtolower($word[$key]);
return $key;
}
}
}
function write_ini($data, $path, $create = FALSE) {
if ($create) {
// create ini file
} else {
$fp = fopen($path, 'a'); // 'a' will append or add to the file
while (list($key, $values) = each($data)) {
$value = trim($values);
$value = strtoupper($key) . ' = ' . $values;
fwrite($fp, "\n" . $value);
}
}
fclose($fp);
}
function sub_dir($dir, $dir_length = FALSE) {
$in_dir = scandir($dir);
if ($dir_length) {
foreach ($in_dir as $value) {
if (!strpos($value, '.') && $value != '.' && $value != '..' && strlen($value) == $dir_length)
$sub_dir[] = $value;
}
} else {
foreach ($in_dir as $value) {
if (!strpos($value, '.') && $value != '.' && $value != '..')
$sub_dir[] = $value;
}
}
if (!isset($sub_dir))
return FALSE;
return $sub_dir;
}
Tag : PHP
|
ประวัติการแก้ไข 2012-11-06 16:52:34
|
|
|
|
|
Date :
2012-11-06 16:43:13 |
By :
t-monroe |
View :
1145 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้ใช้ร่วมกันอะไรครับ Google Translate หรือเปล่าครับ
|
|
|
|
|
Date :
2012-11-06 17:02:10 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เปล่าครับ...
เราต้องเข้าไปแปลเอง Google การเลือกใช้คำของ Google ยังไม่ได้เท่าที่ควร
ก็ต้องแปลเอง หรือว่าผมเขียนผิด -*- ใช่ ต้องเรียบกว่า "เปลียนภาษา" ไม่ใช่ "แปลภาษา"
|
ประวัติการแก้ไข 2012-11-06 17:12:17
|
|
|
|
Date :
2012-11-06 17:06:44 |
By :
t-monroe |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|