บทความนี้จะพูดถึงวิธีที่คุณสามารถสลับภาษาด้วยตนเองในแอป next.js ของคุณ หากต้องการตั้งค่าคุณลักษณะนี้ คุณสามารถกลับไปที่ บทความก่อนหน้าของฉัน ดังนั้น ฉันคิดว่าแอปของคุณสามารถดึงสคริปต์ที่แตกต่างจากสคริปต์ภาษาที่เกี่ยวข้องได้แล้ว นอกจากนี้ ฉันได้สร้าง repo เพื่อสาธิตสิ่งนี้ ดังนั้นอย่าลังเลที่จะไปเยี่ยมชมที่นั่น

เพิ่มปุ่ม

ก่อนอื่น ฉันจะใช้ความช่วยเหลือของ material-UI เพื่อเพิ่มปุ่มสำหรับเปลี่ยนภาษา คุณสามารถเรียกใช้สิ่งนี้:

npm install @material-ui/icons @material-ui/core

หลังจากติดตั้งสำเร็จแล้ว คุณสามารถนำเข้าส่วนประกอบเหล่านี้ที่เราจะใช้:

import TranslateIcon from "@material-ui/icons/Translate"
import { Button } from "@material-ui/core"

ด้วยรหัสง่ายๆดังนี้:

<Button aria-controls="simple-menu" aria-haspopup="true"  color="primary" startIcon={<TranslateIcon />}>
           Switch Language
</Button>

เราได้ปุ่มเปลี่ยนภาษา👇

ทำให้ปุ่มนั้นใช้งานได้!

ตอนนี้ถึงเวลาทำให้มันใช้งานได้โดยให้ปุ่มมีเมธอด onClick ดังนี้:

<Button aria-controls="simple-menu" aria-haspopup="true"  color="primary" onClick={handleClick} startIcon={<TranslateIcon />}>
           Switch Language
</Button>

ในฟังก์ชัน handleClick เราต้องทำสองสิ่ง:

  1. ตรวจสอบว่าเราใช้ภาษาอะไรอยู่ตอนนี้
  2. เปลี่ยนภาษาเป็นภาษาอื่น

โปรดจำไว้ว่าใน "บทความที่แล้ว" เราพูดถึงวิธีตั้งค่าไฟล์ชื่อ i18n.js ? เราจำเป็นต้องนำเข้า i18n จากสิ่งนี้:

import { withTranslation, i18n } from "../i18n"

แล้วเราก็สามารถใช้ i18n นั้นได้

หากต้องการ ตรวจสอบว่ามีการใช้งานภาษาใดอยู่ใช้ i18n.language ในกรณีของเรา มันจะบอกคุณว่าภาษาคือ zh หรือ en

หากต้องการเปลี่ยนภาษา เพียงใช้วิธีการที่มาพร้อมกับภาษานี้: changeLanguage คุณสามารถเรียกมันว่า: i18n.changeLanguage(the new language)

ตอนนี้เราสามารถใช้ทั้งสองวิธีนี้ในฟังก์ชัน handleClick ของเราได้ เนื่องจากในแอปเราอาจจะต้องใช้ภาษานั้นมาก (เพื่อตัดสินใจเลือกไอคอนหรือ UI อื่น ๆ ) ดังนั้นฉันจึงชอบใช้ state เพื่อจัดเก็บภาษาและใช้ในภายหลัง ดังนั้นฉันจึงตั้งค่าสถานะ language ก่อนและใช้ในฟังก์ชัน handleClick ของฉัน:

const [language, setLanguage] = useState("en")
const handleClick = () =>{
    language=="en"? setLanguage("zh") : setLanguage("en")
    i18n.changeLanguage(language)
  }

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

โบนัส: หากคุณต้องการให้ปุ่มแสดงภาษาปัจจุบันของคุณ เพียงเปลี่ยนรหัสในปุ่มดังนี้:

<Button aria-controls="simple-menu" aria-haspopup="true"  color="primary" onClick={handleClick} startIcon={<TranslateIcon />}>
           {i18n.language=="en"? "English" : "中文"}
</Button>

ดังนั้นข้อความที่เกี่ยวข้องจะแสดงผลขึ้นอยู่กับภาษาที่ใช้!

จบ

แค่นั้นแหละสำหรับสัปดาห์นี้! ครั้งต่อไป ฉันจะเขียนต่อเกี่ยวกับการเพิ่ม URL เฉพาะภาษาลงในแอปด้วย localSubPaths ขอบคุณที่อ่าน!

ทรัพยากร:

  1. แพ็คเกจ next-i18next
  2. ตัวอย่างของฉันซื้อคืน
  3. เพิ่มคุณสมบัติการแปลให้กับแอป Next.js ตอนที่ 1: ตั้งค่าแพ็คเกจ next-i18next
  4. เพิ่มคุณสมบัติการแปลให้กับแอป Next.JS ของคุณตอนที่ 3: เพิ่ม URL เฉพาะภาษา