import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:encrypt_shared_preferences/provider.dart'; class MyTranslations extends Translations { static final MyTranslations instance = MyTranslations._internal(); MyTranslations._internal(); static final Map> _translations = {}; static Future loadTranslations() async { final locales = ['en_US', 'de_DE', 'fr_FR', 'nl_NL']; for (final locale in locales) { final String jsonString = await rootBundle.loadString('assets/i18n/$locale.json'); final Map jsonMap = json.decode(jsonString); _translations[locale] = jsonMap.map((key, value) => MapEntry(key, value.toString())); } } @override Map> get keys => _translations; } class LocalizationController extends GetxController { final EncryptedSharedPreferencesAsync storage = EncryptedSharedPreferencesAsync.getInstance(); Rx currentLocale = const Locale('en', 'US').obs; @override void onInit() { super.onInit(); loadLocale(); } Future loadLocale() async { String? savedLocale = await storage.getString( 'locale', defaultValue: 'en_US', ); if (savedLocale != null && savedLocale.isNotEmpty) { final List parts = savedLocale.split('_'); currentLocale.value = parts.length == 2 ? Locale(parts[0], parts[1]) : Locale(parts[0]); Get.locale = currentLocale.value; } } Future changeLocale(Locale newLocale) async { currentLocale.value = newLocale; Get.updateLocale(newLocale); await storage.setString( 'locale', '${newLocale.languageCode}_${newLocale.countryCode}', ); } }