1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart';
void main() { runApp(MyApp()); }
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', localizationsDelegates: [ AppLocalizationsDelegate(), ], supportedLocales: [ const Locale('en'), const Locale('zh') ], theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class AppLocalizations { final Locale locale;
AppLocalizations(this.locale);
static AppLocalizations? of(BuildContext context) { return Localizations.of<AppLocalizations>(context, AppLocalizations); }
static Map<String, Map<String, String>> _localizedValues = { 'en': { 'title': 'Hello World', }, 'zh': { 'title': '你好', }, };
String? get title { return _localizedValues[locale.languageCode]?['title']; } }
class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> { const AppLocalizationsDelegate();
@override bool isSupported(Locale locale) => ['en', 'zh'].contains(locale.languageCode);
@override Future<AppLocalizations> load(Locale locale) { return SynchronousFuture<AppLocalizations>(AppLocalizations(locale)); }
@override bool shouldReload(AppLocalizationsDelegate old) => false; }
class MyHomePage extends StatefulWidget { MyHomePage({Key? key, required this.title}) : super(key: key); final String title;
@override _MyHomePageState createState() => _MyHomePageState(); }
class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( //appBar: AppBar(title: Text(widget.title),), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text('国际化:${AppLocalizations.of(context)!.title}') ], ), ), ); } }
|