0Pricing
React Academy · บทเรียน

ตัวสลับภาษาและการโหลดคำแปลแบบ Lazy

สร้างตัวสลับภาษาท้องถิ่นและโหลดชุดคำแปลเมื่อจำเป็นเพื่อลดขนาดเริ่มต้น

ตัวสลับภาษาและการโหลดคำแปลแบบ Lazy เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

ในบทเรียนนี้ คุณจะสร้างคอมโพเนนต์ตัวสลับภาษาและกำหนดค่า i18next ให้โหลดชุดการแปลเมื่อจำเป็น เพื่อลดขนาด JavaScript ที่โหลดในครั้งแรก

ตัวสลับภาษาแบบง่าย

เรียกใช้ i18n.changeLanguage() เมื่อคลิกปุ่มเพื่อเปลี่ยนภาษาที่ใช้งานอยู่ คอมโพเนนต์ทั้งหมดที่ใช้ useTranslation จะเรนเดอร์ใหม่ด้วยภาษาใหม่โดยอัตโนมัติ
function LanguageSwitcher() {
  const { i18n } = useTranslation();
  return (
    <div>
      {['en', 'tr', 'fr'].map(lng => (
        <button
          key={lng}
          onClick={() => i18n.changeLanguage(lng)}
          style={{ fontWeight: i18n.language === lng ? 'bold' : 'normal' }}
        >
          {lng.toUpperCase()}
        </button>
      ))}
    </div>
  );
}

การจดจำภาษาที่เลือก

บันทึกภาษาที่เลือกไว้ใน localStorage เพื่อให้ภาษานั้นยังคงอยู่หลังโหลดหน้าใหม่ ปลั๊กอิน LanguageDetector จะจัดการเรื่องนี้โดยอัตโนมัติด้วยลำดับตัวตรวจจับ `localStorage`
i18n.init({
  detection: {
    order: ['localStorage', 'navigator'],
    caches: ['localStorage'],
  },
});

เหตุผลที่ควรโหลดการแปลแบบขี้เกียจ

การรวมการแปลทั้งหมดไว้ในชุด JavaScript จะเพิ่มเวลาโหลดครั้งแรก การโหลดแบบขี้เกียจจะส่งเฉพาะภาษาเริ่มต้นเมื่อโหลดครั้งแรก และดึงภาษาอื่นเมื่อผู้ใช้เปลี่ยนภาษาเท่านั้น

การกำหนดค่าแบ็กเอนด์ HTTP

ปลั๊กอิน i18next-http-backend จะดึงไฟล์การแปลจากรูปแบบ URL ไฟล์การแปลอยู่ในโฟลเดอร์ `public/` และให้บริการเป็นทรัพยากรแบบสแตติก จึงไม่จำเป็นต้องมีโค้ดฝั่งเซิร์ฟเวอร์
import Backend from 'i18next-http-backend';

i18n.use(Backend).init({
  backend: {
    loadPath: '/locales/{{lng}}/{{ns}}.json',
  },
  ns: ['common', 'auth'],
  defaultNS: 'common',
});

การเพิ่มไฟล์การแปล

สร้างไฟล์ JSON หนึ่งไฟล์ต่อหนึ่งภาษาและหนึ่งเนมสเปซไว้ใน `public/locales/` แบ็กเอนด์ HTTP จะดึงไฟล์เหล่านี้โดยอัตโนมัติเมื่อมีการใช้ภาษาหรือเนมสเปซนั้นเป็นครั้งแรก
public/locales/
  en/common.json
  en/auth.json
  tr/common.json
  tr/auth.json

การแสดงสถานะกำลังโหลดระหว่างเปลี่ยนภาษา

หลังเรียกใช้ changeLanguage() แล้ว i18next จะโหลดไฟล์ของภาษาใหม่แบบอะซิงโครนัส สมัครรับเหตุการณ์ `i18n.on('languageChanged')` หรือตรวจสอบ `i18n.isInitialized` เพื่อแสดงตัวหมุนขณะโหลด
const [switching, setSwitching] = useState(false);

const change = async (lng) => {
  setSwitching(true);
  await i18n.changeLanguage(lng);
  setSwitching(false);
};

การโหลดเนมสเปซเฉพาะแบบขี้เกียจ

โหลดเนมสเปซเมื่อจำเป็นเป็นครั้งแรกด้วย `i18n.loadNamespaces(['dashboard'])` เรียกใช้ใน useEffect เมื่อเส้นทางแดชบอร์ดถูกเมานต์ เพื่อหลีกเลี่ยงการโหลดเนมสเปซนี้สำหรับผู้ใช้ที่ยังไม่ได้ยืนยันตัวตน
useEffect(() => {
  i18n.loadNamespaces('dashboard');
}, []);

CDN สำหรับไฟล์การแปล

สำหรับสภาพแวดล้อมจริง ให้โฮสต์ไฟล์การแปลบน CDN (S3 + CloudFront) ปรับ `loadPath` ให้เป็น URL ของ CDN วิธีนี้จะแยกการอัปเดตการแปลออกจากการนำโค้ดขึ้นใช้งาน
backend: {
  loadPath: 'https://cdn.example.com/locales/{{lng}}/{{ns}}.json',
}

ภาษาท้องถิ่นใน URL

แอปจำนวนมากฝังภาษาท้องถิ่นไว้ใน URL (เช่น /en/products, /tr/products) ใช้ React Router ร่วมกับ i18n โดยอ่านภาษาท้องถิ่นจากพารามิเตอร์ URL เรียกใช้ changeLanguage และอัปเดต URL เมื่อผู้ใช้เปลี่ยนภาษา

ตรวจสอบอย่างรวดเร็ว

ปลั๊กอิน i18next-http-backend ทำหน้าที่อะไร

สรุปทบทวน

สร้างตัวสลับภาษาด้วย i18n.changeLanguage() จดจำภาษาที่เลือกด้วยตัวตรวจจับ localStorage ใช้ i18next-http-backend เพื่อโหลดไฟล์การแปลแบบขี้เกียจ แสดงสถานะกำลังโหลดระหว่างเปลี่ยนภาษา และโฮสต์ไฟล์บน CDN สำหรับสภาพแวดล้อมจริง

จบหลักสูตร

ยินดีด้วย! คุณเรียนจบ **การทำให้เป็นสากล (i18n) ใน React** แล้ว ตอนนี้คุณสามารถตั้งค่า react-i18next แปลสตริงด้วยเนมสเปซ จัดการรูปพหูพจน์และการแทรกค่า และโหลดไฟล์การแปลแบบขี้เกียจได้แล้ว

คำถามที่พบบ่อย

บทเรียน “ตัวสลับภาษาและการโหลดคำแปลแบบ Lazy” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวสลับภาษาและการโหลดคำแปลแบบ Lazy” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวสลับภาษาและการโหลดคำแปลแบบ Lazy”

สร้างตัวสลับภาษาท้องถิ่นและโหลดชุดคำแปลเมื่อจำเป็นเพื่อลดขนาดเริ่มต้น คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวสลับภาษาและการโหลดคำแปลแบบ Lazy” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่า react-i18next
  2. การใช้ฮุก useTranslation
  3. การผันรูปพหูพจน์และการแทนค่า
  4. ตัวสลับภาษาและการโหลดคำแปลแบบ Lazy
← กลับไปที่ React Academy