การทำให้เป็นสากล (i18n) ใน PHP: คู่มือปฏิบัติสำหรับนักพัฒนา

Yee
Aug 03, 2024

พัฒนาเว็บไซต์ PHP ของคุณสู่ระดับสากล: โซลูชันการทำให้รองรับหลายภาษาที่มีประสิทธิภาพยิ่งขึ้น
ถ้าคุณเป็นเหมือนผม ที่ดูแลโปรเจกต์ PHP แบบ "vanilla" ที่ไม่ได้ใช้เฟรมเวิร์กขนาดใหญ่ (เช่น Laravel หรือ Symfony) การรองรับหลายภาษา (i18n) ก็คงเป็นปัญหากวนใจเล็ก ๆ ที่เจอกันอยู่บ่อย ๆ
โซลูชันแบบดั้งเดิมอย่าง gettext
แม้จะทรงพลัง แต่ก็ตั้งค่าได้ยุ่งยากพอสมควรโดยเฉพาะในโปรเจกต์ขนาดเล็ก มันรู้สึกเหมือนกับ "ใช้ค้อนปอนด์ทุบถั่ว" สิ่งที่เราต้องการจริง ๆ คือวิธีที่สามารถนำไปใช้ได้อย่างรวดเร็วโดยไม่เพิ่มความซับซ้อนมากเกินไป
หลังจากลองผิดลองถูกกับหลายโปรเจกต์ เราก็ได้พัฒนาโซลูชันการทำให้รองรับหลายภาษาที่มีน้ำหนักเบา โดยใช้ไฟล์ array ของ PHP ร่วมกับเครื่องมือแปลออนไลน์วิธีนี้ไม่เพียงแต่ติดตั้งง่าย แต่ยังมีต้นทุนการดูแลรักษาต่ำมากอีกด้วยวันนี้ผมขอแบ่งปันโซลูชันนี้ให้กับคุณแบบไม่มีเงื่อนไข
คู่มือปฏิบัติจริง: ผมจัดการรองรับหลายภาษาใน PHP ด้วย O.Translator ได้อย่างไร
แนวคิดหลักของเรานั้นตรงไปตรงมามาก: แต่ละภาษาจะมีไฟล์ PHP ของตัวเอง ซึ่งภายในจะมีคำสั่ง return
ที่คืนค่า associative array วิธีนี้เรียบง่าย เข้าใจง่าย และแทบไม่มีผลกระทบต่อประสิทธิภาพ
ขั้นตอนที่ 1: วางแผนโครงสร้างไดเรกทอรีของคุณ
โครงสร้างไดเรกทอรีที่ชัดเจนคือชัยชนะไปแล้วครึ่งหนึ่งเพื่อให้ทุกอย่างเป็นระเบียบ เราจะเก็บไฟล์ภาษาทั้งหมดไว้ในไดเรกทอรีเดียวกัน และตั้งชื่อไฟล์ตามรหัสภาษา เช่นนี้:
project_root/
├── index.php // Your main logic file
├── i18n/ // Folder for all language files
│ ├── lang.cn.php // Chinese language pack
│ ├── lang.en.php // English language pack
│ └── lang.fr.php // French language pack
ขั้นตอนที่ 2: สร้าง "คลังแสงภาษา" ของคุณ
ต่อไป เราจะสร้างไฟล์ภาษาหลักขอยกตัวอย่างภาษาจีน โดยสร้างไฟล์ lang.cn.php
เนื้อหาในไฟล์จะเป็น PHP array แบบง่าย ๆ โดย key คือรหัสเฉพาะ และ value คือข้อความที่ต้องการแสดง
ตัวอย่าง lang.cn.php: key คงที่ แต่ value เปลี่ยนตามภาษา
ขั้นตอนที่ 3: เข้าสู่โลกแห่งการแปลด้วย O.Translator
ต้องแปลข้อความทีละหลายสิบหรือหลายร้อยรายการด้วยตัวเองใช่ไหม?นี่แหละ งานซ้ำ ๆ ที่โปรแกรมเมอร์ส่วนใหญ่ไม่ชอบที่สุดตรงนี้เองที่อาวุธลับของเรา O.Translator จะเข้ามาช่วย
นี่คือแพลตฟอร์มแปลเอกสารออนไลน์ระดับมืออาชีพที่รองรับไฟล์ PHP ได้อย่างสมบูรณ์แบบ สามารถอ่าน array ของคุณโดยตรงและแปลได้มากกว่า 70 ภาษา
กระบวนการนี้ง่ายมากอย่างเหลือเชื่อ:
- เข้าไปที่ หน้าแรกของ O.Translator แล้วอัปโหลดไฟล์ภาษาหลักของคุณ (เช่น
lang.cn.php
) - เลือกภาษาที่ต้องการ เช่น ภาษาอังกฤษและภาษาฝรั่งเศส
- คลิกแปล รอสักครู่ แล้วไฟล์
lang.en.php
และlang.fr.php
ที่แปลเสร็จจะพร้อมให้คุณดาวน์โหลด
สิ่งที่ผมประทับใจที่สุดคือ O.Translator ให้คุณ ดูตัวอย่าง การแปลบางส่วนได้ฟรีถ้าคุณพอใจกับผลลัพธ์แล้ว คุณจึงค่อยตัดสินใจว่าจะชำระเงินเพื่อรับไฟล์แปลฉบับเต็มหรือไม่ในคำพูดของพวกเขาเอง: "อย่าจ่ายเงินสำหรับสินค้าที่คุณไม่พอใจ"
ขั้นตอนที่ 4: ทำให้โค้ดใช้งานได้จริง
ทุกอย่างพร้อมแล้ว;เหลือเพียงขั้นตอนสุดท้ายเท่านั้นตอนนี้เราจะมาแก้ไขไฟล์ index.php
หลัก เพื่อให้สามารถโหลดชุดภาษาได้แบบไดนามิกตามที่ผู้ใช้เลือก
<?php
// 1. Determine the current language (using a GET parameter for demonstration)
$supported_langs = ['en', 'cn', 'fr'];
$default_lang = 'en';
$lang = isset($_GET['lang']) && in_array($_GET['lang'], $supported_langs) ? $_GET['lang'] : $default_lang;
// 2. Load the corresponding language file
// Use a global variable like $_ or a specific variable like $TEXTS to store the strings
$_ = require_once __DIR__ . "/i18n/lang.{$lang}.php";
?>
ในเทมเพลต HTML ของคุณ คุณสามารถเรียกใช้งานข้อความต่าง ๆ ได้ง่าย ๆ แบบนี้:
<!DOCTYPE html>
<html lang="<?php echo htmlspecialchars($lang); ?>">
<head>
<meta charset="UTF-8">
<title><?php echo htmlspecialchars($_['heading_home']); ?></title>
</head>
<body>
<header>
<h1><?php echo htmlspecialchars($_['heading_home']); ?></h1>
<nav>
<ul>
<li><?php echo htmlspecialchars($_['heading_about']); ?></li>
<li><?php echo htmlspecialchars($_['button_read_more']); ?></li>
</ul>
</nav>
</header>
</body>
</html>
และนี่ก็คือ—เว็บไซต์หลายภาษาง่าย ๆ ก็ถือกำเนิดขึ้นแล้ว!
ข้อควรพิจารณาและแนวคิดขั้นสูง
แม้โซลูชันนี้จะมีน้ำหนักเบา แต่ก็มีบางประเด็นที่ควรพิจารณาก่อนนำไปใช้งานจริง:
- จะตรวจจับภาษาของผู้ใช้อย่างไร? ตัวอย่างนี้ใช้พารามิเตอร์ GET เช่น
?lang=en
ในแอปพลิเคชันจริง คุณอาจใช้$_SESSION
,$_COOKIE
หรือแยกวิเคราะห์ request headerAccept-Language
ของเบราว์เซอร์เพื่อการตรวจจับอัตโนมัติ - ข้อควรพิจารณาด้านประสิทธิภาพ: สำหรับเว็บไซต์ขนาดเล็กถึงกลาง ค่า overhead ของ
require_once
สำหรับไฟล์ PHP ในแต่ละ request นั้นแทบไม่มีนัยสำคัญหากเว็บไซต์ของคุณมีทราฟฟิกสูง ควรพิจารณาใช้เทคโนโลยี bytecode caching เช่น APC หรือ OPcache เพื่อเพิ่มประสิทธิภาพอีกขั้น - การขยายตัว: เมื่อจำนวนภาษาหรือข้อความเพิ่มขึ้น การจัดการไฟล์ด้วยตนเองอาจซับซ้อนมากขึ้นในจุดนั้น คุณอาจต้องพิจารณาโซลูชัน i18n ที่เป็นมืออาชีพมากขึ้น เช่น PHP's gettext extension หรือคอมโพเนนต์ localization ที่มีในเฟรมเวิร์กต่าง ๆ
- ความสม่ำเสมอในการแปล: เพื่อให้ชื่อแบรนด์และคำศัพท์เฉพาะมีความสอดคล้องกันในทุกภาษา ขอแนะนำอย่างยิ่งให้ใช้ ฟีเจอร์ Glossary ของ O.Translator
- กลยุทธ์ระดับสูง: บทความนี้จะเน้นที่การนำไปใช้ในเชิงเทคนิคหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ กลยุทธ์โดยรวมสำหรับการทำเว็บไซต์ให้รองรับหลายภาษา คุณสามารถอ่านบทความเชิงลึกฉบับอื่นของเราได้