ทำแอป ios รองรับหลายภาษา

สวัสดีครับ พอดีได้รับโปรเจคแอป ios ทำแอปแบบสองภาษา คือ ไทย-อังกฤษ จริงๆก่อนหน้านี้ก็เคยทำมาแล้ว แต่ยังไม่ได้เขียนบทความ จนเว้นช่วงมานานพอได้กลับมาทำอีกทีก็จำไม่ได้แล้ว จึงถือโอกาสทำเป็นบทความเผื่อไว้กลับมาทบทวนด้วยครับ


การทำแอปรองรับหลายภาษา ถ้าทำโดยปกติแบบรวดเร็วทั่วๆไป เชื่อว่าหลายๆท่านคงจะใช้กระบวนท่า UserDefault บันทึกค่า language เป็น en,th จากนั้นเช็กเงื่อนไข if และปรับภาษาของ UI ตามนั้น ตามตัวอย่างโค้ดด้านบน

คราวนี้เรามาดูอีกวิธีที่จะแนะนำเผื่อเป็นทางเลือกนะครับ บางท่านอาจจะยังไม่รู้ว่า มีวิธีการตั้งค่าแบบนี้อยู่ด้วย ซึ่งเป็นการสร้างไฟล์ strings เพื่อใช้เก็บค่าตัวแปรและภาษาของแต่ล่ะภาษาไว้ในไฟล์ เพื่อสะดวกในการปรับแก้ไขได้ในภายหลังครับ ดังตัวอย่างในรูปข้างล่าง…


การเรียนรู้ที่ดีที่สุด คือการลงมือทำ…

เรามาเริ่มต้นลงมือทำกันเลยดีกว่าครับ เริ่มต้นด้วยการ create new project ใน xcode ก่อนเลยครับ ของผมใช้ว่า TestApp นะครับ ตั้งกันตามสะดวกได้เลย จากนั้นคลิกที่โปรเจค TestApp ตามในรูป จะเห็น Language กด + บวกได้เลย(ไม่ได้ไปรุมใครนะครับ 555+) เพิ่มเป็นภาษาไทยครับ เพราะมี default เป็น english มาให้อยู่แล้ว

dark theme xcode สวยงาม…

หลังจากกดเลือกภาษาที่เราต้องการแล้วจะให้เลือก storyboard เราก็เลือกที่เราต้องการใช้งานทำรองรับหลายภาษาได้เลยครับ

เลือก storyboard ที่จะใช้งาน…

หลังจากเพิ่มภาษาเข้ามาแล้ว ให้คลิกขวาสร้างไฟล์ localizable.strings เพื่อไว้ตั้งค่าภาษาสำหรับส่วนของการเขียนโค้ดมาอ่านค่า

สร้างไฟล์ strings…

เพิ่ม 2 ภาษา เข้าไปในไฟล์ Localizable.strings ด้วยการติ๊กภาษาทั้ง thai,english ในช่องที่ Localization เพื่อไว้ตั้งภาษา

สร้างไฟล์ Localizable.strings…

จัดการตั้งค่าภาษาได้ตามความต้องการเลยครับ

ตั้งภาษาได้เลยครับ…

สุดท้ายคือการเขียนโค้ดเรียกใช้งานครับ

ขออธิบายตัวโค้ดซักนิดนึง ส่วนข้างล่างคือ ส่วนสำคัญของโค้ดอยู่ที่ extension String ก็คือสร้างฟังก์ชันเพิ่มใหม่ให้กับ String โดยจะส่งค่า parameter เป็น lang หรือภาษาที่เราเลือก จากนั้นส่งค่าเพื่อดึงข้อมูลจาก NSLocalizedString จะได้ค่า String ที่เป็นอักษรภาษากลับมาครับ จากนั้นที่เหลือก็แค่แปลง UI ให้ใช้ภาษาที่ได้รับกลับไปครับ

ยังไงชอบวิธีไหนก็เลือกใช้งานกันตามสมควรได้เลยนะครับ ผลการรันทดสอบตามด้านล่างได้เลยครับ 🙂

https://github.com/nisit15/SwiftMultiLanguage

ตัวอย่างครับ…