Skip to content

Commit

Permalink
add localization
Browse files Browse the repository at this point in the history
  • Loading branch information
NateRobinson committed Apr 23, 2019
1 parent c4191d4 commit 5a000bb
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/config/RouterConfig.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import 'package:flutter_starter_notes/ui/ImageAndIconAbout.dart';
import 'package:flutter_starter_notes/ui/InheritedWidgetAbout.dart';
import 'package:flutter_starter_notes/ui/InputAndFormAbout.dart';
import 'package:flutter_starter_notes/ui/ListViewAbout.dart';
import 'package:flutter_starter_notes/ui/LocalizationAbout.dart';
import 'package:flutter_starter_notes/ui/MaterialContainerAbout.dart';
import 'package:flutter_starter_notes/ui/NotificationAbout.dart';
import 'package:flutter_starter_notes/ui/PaddingAbout.dart';
Expand Down Expand Up @@ -54,6 +55,7 @@ class RouterConfig {
"custom": "自定义 Widgets",
"fileAndHttp": "文件操作与网络请求",
"packageAndPlugin": "包与插件",
"localization": "国际化",
};

static List<RouterBean> allRoutes = [
Expand Down Expand Up @@ -391,6 +393,14 @@ class RouterConfig {
title: "插件开发",
),
),
RouterBean(
"/localizationabout",
"实现Localizations",
"localization",
(context) => LocalizationAbout(
title: "实现Localizations",
),
),
];

static Map<String, WidgetBuilder> genRouters() {
Expand Down
14 changes: 14 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_starter_notes/config/RouterConfig.dart';
import 'package:flutter_starter_notes/ui/LocalizationAbout.dart';

void main() {
debugPaintSizeEnabled = false; //打开视觉调试开关
Expand All @@ -21,6 +23,18 @@ class MyApp extends StatelessWidget {
),
initialRoute: '/',
routes: RouterConfig.genRouters(),
// Material 和 widgets 支持多语言
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
// 注册我们的Delegate
DemoLocalizationsDelegate()
],
supportedLocales: [
const Locale("en", "US"),
const Locale("zh", "CN"),
],
//locale: const Locale('en', 'US'), //手动指定 locale
);
}
}
70 changes: 70 additions & 0 deletions lib/ui/LocalizationAbout.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_starter_notes/component/CommonTitle.dart';

class LocalizationAbout extends StatelessWidget {
LocalizationAbout({Key key, this.title});

final String title;

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(title),
),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
CommonTitle('自定义多语言实现-切换系统语言回来试试'),
Container(
padding: EdgeInsets.all(16),
child: Text(DemoLocalizations.of(context).testDesc),
),
],
),
),
);
}
}

//Locale资源类
class DemoLocalizations {
DemoLocalizations(this.isZh);

//是否为中文
bool isZh = false;

//为了使用方便,我们定义一个静态方法
static DemoLocalizations of(BuildContext context) {
return Localizations.of<DemoLocalizations>(context, DemoLocalizations);
}

//Locale相关值,title为应用标题
String get testDesc {
return isZh ? "我是中文" : "I am English";
}
//... 其它的值
}

//Locale代理类
class DemoLocalizationsDelegate
extends LocalizationsDelegate<DemoLocalizations> {
const DemoLocalizationsDelegate();

//是否支持某个Local
@override
bool isSupported(Locale locale) => ['en', 'zh'].contains(locale.languageCode);

// Flutter会调用此类加载相应的Locale资源类
@override
Future<DemoLocalizations> load(Locale locale) {
return SynchronousFuture<DemoLocalizations>(
DemoLocalizations(locale.languageCode == "zh"));
}

@override
bool shouldReload(DemoLocalizationsDelegate old) => false;
}
2 changes: 2 additions & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ environment:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter

# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
Expand Down

0 comments on commit 5a000bb

Please sign in to comment.