1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-10-23 06:53:23 +00:00
comunicmobile/lib/utils/intl_utils.dart

58 lines
1.6 KiB
Dart
Raw Normal View History

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