我应该如何在第二个dart文件中调用加载的本地化json数据?
我在lib/resources/lang/下有一个3JSON文件。我在lib/下还有demo_localizations.dart(基于:)文件。我在lib/drawer下还有第二个_page.dart。当我调用second_page.dart时,第二页上没有任何本地化信息 en、ru和tr json文件示例:我应该如何在第二个dart文件中调用加载的本地化json数据?,json,localization,dart,flutter,Json,Localization,Dart,Flutter,我在lib/resources/lang/下有一个3JSON文件。我在lib/下还有demo_localizations.dart(基于:)文件。我在lib/drawer下还有第二个_page.dart。当我调用second_page.dart时,第二页上没有任何本地化信息 en、ru和tr json文件示例: { "greetings": "Hello world", "secondPageTitle": "Second Page" } { "greetings": "Привет мир",
{ "greetings": "Hello world", "secondPageTitle": "Second Page" }
{ "greetings": "Привет мир", "secondPageTitle": "Вторая страница"}
{ "greetings": “Merhaba Dünya”, "secondPageTitle": “Sayfa İki“}
这是主页本地化的一部分,如下所示:
新文本(DemoLocalizations.of(context.trans)(“问候语”)
这是我的第二页。dart代码:
import 'package:flutter/material.dart';
import '../demo_localizations.dart';
class SecondPage extends StatefulWidget {
@override
_SecondPageState createState() => new _SecondPageState();
}
class _SecondPageState extends State<SecondPage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Second Page'),
),
body: new Center(
// TODO: This part is not working
child: new Text(DemoLocalizations.of(context).trans('secondPageTitle')),
// TODO: This is working without using DemoLocalizations
//child:new Text('Second Page'),
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“../demo_localizations.dart”;
类SecondPage扩展StatefulWidget{
@凌驾
_SecondPageState createState()=>new_SecondPageState();
}
类_SecondPageState扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“第二页”),
),
正文:新中心(
//TODO:这部分不起作用
子文本:新文本(DemoLocalizations.of(context).trans('secondPageTitle')),
//TODO:这在不使用去本地化的情况下有效
//子项:新文本(“第二页”),
),
);
}
}
这是我的demo_localizations.dart代码:
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
class DemoLocalizations {
DemoLocalizations(this.locale);
final Locale locale;
static DemoLocalizations of(BuildContext context) {
return Localizations.of<DemoLocalizations>(context, DemoLocalizations);
}
Map<String, dynamic> _sentences;
Future<bool> load() async {
String data = await rootBundle.loadString('resources/lang/${this.locale.languageCode}.json');
this._sentences = json.decode(data);
return true;
}
String trans(String key) {
return this._sentences[key];
}
}
class DemoLocalizationsDelegate extends LocalizationsDelegate<DemoLocalizations> {
const DemoLocalizationsDelegate();
@override
bool isSupported(Locale locale) => ['tr', 'en', 'ru'].contains(locale.languageCode);
@override
Future<DemoLocalizations> load(Locale locale) async {
DemoLocalizations localizations = new DemoLocalizations(locale);
await localizations.load();
print("Load ${locale.languageCode}");
return localizations;
}
@override
bool shouldReload(DemoLocalizationsDelegate old) => false;
}
导入'dart:async';
导入“dart:convert”;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“package:flatter_本地化/flatter_本地化.dart”;
阶级去本地化{
取消本地化(this.locale);
最终地点;
(BuildContext上下文)的静态去本地化{
返回本地化。of(上下文,去本地化);
}
映射句子;
Future load()异步{
String data=await rootBundle.loadString('resources/lang/${this.locale.languageCode}.json');
这个._句子=json.decode(数据);
返回true;
}
字符串转换(字符串键){
把这个还给我;
}
}
类DemoLocalizationsDelegate扩展了LocalizationsDelegate{
常量DemoLocalizationsDelegate();
@凌驾
bool isSupported(Locale)=>['tr','en','ru'].contains(Locale.languageCode);
@凌驾
未来加载(区域设置)异步{
DemoLocalizations localizations=新的DemoLocalizations(区域设置);
等待本地化。加载();
打印(“加载${locale.languageCode}”);
回归局部化;
}
@凌驾
bool应该重新加载(DemoLocalizationsDelegate old)=>false;
}
我应该如何在第二个dart文件中调用加载的本地化json数据?hi,我知道这是一个老问题。但我最近编写了一个VisualStudio代码扩展来处理Flatter中的本地化json文件:我遵循了这篇文章,它工作得非常好!我不是你所说的颤振/飞镖专家,所以我无法帮助你完成你展示的特定代码!希望有帮助!