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

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

by khomkrit
happy indian man in turban holding paper sheet การทำแอป Flutter
Photo by Ketut Subiyanto on Pexels.com

เคยเขียนบทความถึง 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