language_controller.dart 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import 'package:get/get.dart';
  2. import '../../../../config/translations/localization_service.dart';
  3. class LanguageInfo {
  4. final String code;
  5. final String name;
  6. final String nativeName;
  7. LanguageInfo({
  8. required this.code,
  9. required this.name,
  10. required this.nativeName,
  11. });
  12. }
  13. class LanguageController extends GetxController {
  14. // 当前选中的语言,默认为英语
  15. final selectedLanguage = 'en'.obs;
  16. // 支持的语言列表
  17. final List<LanguageInfo> languages = [
  18. LanguageInfo(code: 'en', name: 'English', nativeName: '英语'),
  19. // LanguageInfo(code: 'es', name: 'Español', nativeName: '西班牙语'),
  20. // LanguageInfo(code: 'fr', name: 'Français', nativeName: '法语'),
  21. // LanguageInfo(code: 'de', name: 'Deutsch', nativeName: '德语'),
  22. // LanguageInfo(code: 'ja', name: '日本語', nativeName: '日语'),
  23. // LanguageInfo(code: 'ko', name: '한국어', nativeName: '韩语'),
  24. // LanguageInfo(code: 'fa', name: 'فارسی', nativeName: '波斯语'),
  25. // LanguageInfo(code: 'my', name: 'မြန်မာဘာသာ', nativeName: '缅甸语'),
  26. // LanguageInfo(code: 'ar', name: 'عربي', nativeName: '阿拉伯语'),
  27. // LanguageInfo(code: 'ru', name: 'Русский', nativeName: '俄语'),
  28. LanguageInfo(code: 'zh_CN', name: '简体中文', nativeName: '简体中文'),
  29. // LanguageInfo(code: 'zh_TW', name: '繁體中文', nativeName: '繁体中文'),
  30. // LanguageInfo(code: 'tk', name: 'Türkmençe', nativeName: '土库曼语'),
  31. // LanguageInfo(
  32. // code: 'pt',
  33. // name: 'Português (Brasil)',
  34. // nativeName: '葡萄牙语 (巴西)',
  35. // ),
  36. // LanguageInfo(code: 'vi', name: 'Tiếng Việt', nativeName: '越南语'),
  37. // LanguageInfo(code: 'id', name: 'Bahasa Indonesia', nativeName: '印尼语'),
  38. // LanguageInfo(code: 'tl', name: 'Filipino', nativeName: '菲律宾语'),
  39. // LanguageInfo(code: 'th', name: 'ไทย', nativeName: '泰语'),
  40. // LanguageInfo(code: 'hi', name: 'हिन्दी', nativeName: '印地语'),
  41. // LanguageInfo(code: 'tr', name: 'Türkçe', nativeName: '土耳其语'),
  42. ];
  43. @override
  44. void onInit() {
  45. super.onInit();
  46. final locale = LocalizationService.getCurrentLocal();
  47. // 中文需要区分简体和繁体
  48. if (locale.languageCode == 'zh') {
  49. selectedLanguage.value = locale.countryCode == 'TW' ? 'zh_TW' : 'zh_CN';
  50. } else {
  51. selectedLanguage.value = locale.languageCode;
  52. }
  53. }
  54. /// 选择语言
  55. void selectLanguage(String languageCode) {
  56. selectedLanguage.value = languageCode;
  57. LocalizationService.updateLanguage(languageCode);
  58. }
  59. /// 获取当前选中的语言信息
  60. LanguageInfo? get currentLanguage {
  61. try {
  62. return languages.firstWhere(
  63. (lang) => lang.code == selectedLanguage.value,
  64. );
  65. } catch (e) {
  66. return languages.first; // 默认返回第一个
  67. }
  68. }
  69. }