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

more

Yee

Aug 03, 2024

cover-img

พัฒนาเว็บไซต์ 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 ภาษา

กระบวนการนี้ง่ายมากอย่างเหลือเชื่อ:

  1. เข้าไปที่ หน้าแรกของ O.Translator แล้วอัปโหลดไฟล์ภาษาหลักของคุณ (เช่น lang.cn.php)
  2. เลือกภาษาที่ต้องการ เช่น ภาษาอังกฤษและภาษาฝรั่งเศส
  3. คลิกแปล รอสักครู่ แล้วไฟล์ 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 header Accept-Language ของเบราว์เซอร์เพื่อการตรวจจับอัตโนมัติ
  • ข้อควรพิจารณาด้านประสิทธิภาพ: สำหรับเว็บไซต์ขนาดเล็กถึงกลาง ค่า overhead ของ require_once สำหรับไฟล์ PHP ในแต่ละ request นั้นแทบไม่มีนัยสำคัญหากเว็บไซต์ของคุณมีทราฟฟิกสูง ควรพิจารณาใช้เทคโนโลยี bytecode caching เช่น APC หรือ OPcache เพื่อเพิ่มประสิทธิภาพอีกขั้น
  • การขยายตัว: เมื่อจำนวนภาษาหรือข้อความเพิ่มขึ้น การจัดการไฟล์ด้วยตนเองอาจซับซ้อนมากขึ้นในจุดนั้น คุณอาจต้องพิจารณาโซลูชัน i18n ที่เป็นมืออาชีพมากขึ้น เช่น PHP's gettext extension หรือคอมโพเนนต์ localization ที่มีในเฟรมเวิร์กต่าง ๆ
  • ความสม่ำเสมอในการแปล: เพื่อให้ชื่อแบรนด์และคำศัพท์เฉพาะมีความสอดคล้องกันในทุกภาษา ขอแนะนำอย่างยิ่งให้ใช้ ฟีเจอร์ Glossary ของ O.Translator
  • กลยุทธ์ระดับสูง: บทความนี้จะเน้นที่การนำไปใช้ในเชิงเทคนิคหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ กลยุทธ์โดยรวมสำหรับการทำเว็บไซต์ให้รองรับหลายภาษา คุณสามารถอ่านบทความเชิงลึกฉบับอื่นของเราได้

หัวข้อ

ฉาก

ฉาก

บทความที่เผยแพร่แล้ว11

แนะนำให้อ่าน