import 'dart:convert'; import 'package:flutter/services.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:intl/intl_standalone.dart'; /// Internationalization utilities /// /// @author Pierre HUBERT String? _currLang; late Map> translations; /// Initialize translations system /// /// This method currently fetch the current user language Future initTranslations() async { _currLang = await findSystemLocale(); await initializeDateFormatting(_currLang, null); // Load the list of translations final list = Map.from( jsonDecode(await rootBundle.loadString("assets/langs.json"))); translations = new Map(); for (final entry in list.entries) { translations[entry.key] = Map.from(jsonDecode( await rootBundle.loadString("assets/langs/${entry.value}.json"))); } } /// Translate a string /// /// Translate a given [string] into the current language, if available /// /// Then apply the list of [args] to the string, each argument name is /// surrounded by '%' String? tr(String? string, {Map? args}) { // Check if a translation is available if (_currLang != null && translations.containsKey(_currLang) && translations[_currLang!]!.containsKey(string)) string = translations[_currLang!]![string!]; //Apply arguments if (args != null) args.forEach((key, value) => string = string!.replaceAll("%$key%", value!)); return string; } /// Get current lang, in format aa_BB String get lang => _currLang != null ? _currLang! : "en_US"; /// Get short lang format, in format aa String get shortLang => lang.split("_")[0];