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