Попробуйте:
Первый метод:
AppLocalizations.of(context).translate(“about”);
И измените свою функцию перевода на это:
String translate(String key) {
// Returns a localized text
return _localizedValues[“Information”][key];
}
Или вы можете сделайте это:
Второй метод:
AppLocalizations.of(context).translate(”Information”,“about”);
И измените свою функцию перевода следующим образом:
String translate(String parentkey, String nestedKey) {
// Returns a localized text
return _localizedValues[parentKey][nestedKey];
}
This может помочь.
Кроме того, Эта хорошая статья, чтобы научиться разбирать сложные json файлы
ОБНОВЛЕННЫЙ ОТВЕТ:
Попробовав код, я понял проблему.
Проблема в том, что _localizedValues ["Information"] будет строкой, а не картой, потому что мы преобразовали значение в value.toString (), и поэтому вы не можете использовать второй ключ, поскольку возвращаемый объект не является Карта, но это строка.
Итак, _localizedValues ["Информация"] равно "{about: About}".
Чтобы решить проблему, используйте следующий код:
Map<String, dynamic> _localizedValues; //your values are not String anymore and we use dynamic instead
Future<bool> load() async {
// Load a language JSON file from the 'i18n' folder
String value = await rootBundle.loadString('i18n/${locale.languageCode}.json');
Map<String, dynamic> jsonMap = jsonDecode(value);
_localizedValues = jsonMap.map((key, value) {
return MapEntry(key, value); //not value.toString() so the value will be a map
});
return true;
}
String translate(String parentkey, String nestedKey) {
// Returns a localized text
return _localizedValues[parentKey][nestedKey];
}
И тогда вы должны получить "О" из кода ниже:
AppLocalizations.of(context).translate('Information','about');