Home Codingการทำแอป Flutter ให้เปลี่ยนภาษาได้แบบง่ายๆ

การทำแอป Flutter ให้เปลี่ยนภาษาได้แบบง่ายๆ

by khomkrit
Published: Updated:

เคยเขียนบทความถึง Get ไปว่ามันเป็น microframework และมี Utils อะไรต่างๆ ให้เราใช้มากมาย นอกจากจะช่วยจัดการเรื่อง state management และ เรื่องการจัดการกับ route ให้เราแล้ว อีกอย่างหนึ่งก็คือมันช่วยให้ การทำแอป Flutter ให้สามารถเปลี่ยนภาษาได้กลายเป็นเรื่องง่ายขึ้นมาทันตาเห็น

แนวทางก็คือให้เราสร้างคลาสที่ extends Translations ขึ้นมา ในคลาสนี้จะต้อง override key ตามในโค้ดตัวอย่างต่อไปนี้ ซึ่ง keys นี้จะนิยามภาษาที่แอปเราต้องการใช้ก่อน ในกรณีนี้ก็คือใช้ en_US กับ th_TH จากนั้นก็ต้องนิยามคำต่างๆ ที่เราจะใช้ภายในแอปแยกลงไปในแต่ละภาษา ดังนี้

import 'package:get/get.dart';
class Message extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
    'en_US': {
      'hello': 'Hello',
    },
    'th_TH': {
      'hello': 'สวัสดี'
    }
  };
}

จากนั้นเราก็นำ Message ที่เราสร้างไว้ไปกำหนดค่าให้ attribute translations ให้ GetMaterialApp ดังนี้

void main() {
  runApp(GetMaterialApp(
    translations: Message(),
    home: Home()
  ));
}

ตรงไหนที่ต้องการแสดงคำที่เรานิยามไว้ใน Message เราก็สามารถนำไปใช้ได้เลยโดยมีข้อแม้ว่าต้องต่อท้ายด้วย .tr แล้ว Get จะจัดการเลือกคำที่เหมาะสมกับ Locale ปัจจุบันให้เอง

Text('hello'.tr),

หลังจากนั้นเมื่อเราต้องการเปลี่ยนภาษา ก็ทำได้ดังนี้

Get.updateLocale(Locale('en', 'US')))

เท่านี้ก็เสร็จแล้ว!

หลังจากใช้ Get เราก็พบว่า การทำแอป Flutter ให้เปลี่ยนภาษาได้เป็นเรื่องง่ายดายขึ้นมาเลยทีเดียว

เพิ่มเติมอีกหน่อยก็คือ เราสามารถกำหนด Locale เริ่มต้นให้กับแอปเราได้เลยดังนี้ โดยไม่ต้องสนใจว่า Locale ของอุปกรณ์จะเป็นอะไรในตอนแรก

void main() {
  runApp(GetMaterialApp(
    translations: Message(),
    locale: Locale('th', 'TH')
  ));
}

ถ้าเราอยากรู้ว่าตอนนี้อุปกรณ์ที่กำลังรันแอปของเราอยู่ใช้ Locale อะไรอยู่ก็ทำได้ดังนี้

import 'dart:ui' as ui;
print(ui.window.locale)

You may also like