Flutter国际化的三种方式-->flutter-i18n


1. 安装Flutter i18n

Flutter i18n是一个Android Studio的插件。没有安装的需要进行安装,如下图所示。



安装后项目的结构如下图所示:


res/values/strings_en.arb和lib/generated/i18n.dart是自动生成的。

2.在res/values目录下添加strings_zh.arb

strings后面跟的zh必须是Locale的languageCode。添加完成之后分别在strings_en.arb和strings_zh.arb中添加你要国际化的属性,如下所示:

{
  "hello": "你好!",
  "greetTo": " $name,见到你非常高兴!"
}
{
  "hello": "Hello!",
  "greetTo": "Nice to meet you, $name!"
}

从上面,我们发现flutter i18n插件比起intl方法,帮我们省了很多东西,我们只需要关注要国际化的属性即可,不在需要关注生成arb文件和arb文件再生成dart这些步骤。

3. 在main中的使用

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'generated/i18n.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _locale = 'zh';
  onChangeLanguage() {
    if (_locale == 'en') {
      setState(() {
        _locale = 'zh';
      });
    } else {
      setState(() {
        _locale = 'en';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
        locale: Locale(_locale, ""),
        localizationsDelegates: [
          S.delegate,
          GlobalMaterialLocalizations.delegate,
          GlobalWidgetsLocalizations.delegate,
          GlobalCupertinoLocalizations.delegate,
        ],
        supportedLocales: S.delegate.supportedLocales,
        localeResolutionCallback:
            S.delegate.resolution(fallback: new Locale('zh', '')),
        home: MyHomePage(this.onChangeLanguage));
  }
}

class MyHomePage extends StatelessWidget {
  final VoidCallback onChangeLanguage;
  MyHomePage(this.onChangeLanguage);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text(S.of(context).hello),
        ),
        body: new Center(
          child: new Text(S.of(context).greetTo('Nina')),
        ),
        floatingActionButton: new FloatingActionButton(
            child: new Icon(Icons.language), onPressed: onChangeLanguage));
  }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,727评论 0 3
  • flutter 国际化工具flutter_i18n 简介: flutter_i18n 有插件,比Intl简单。 1...
    ted4kra阅读 3,987评论 2 1
  • 大家好,很久不见,甚是想念,今天,我们来学习以下如何使用国际化神器Flutter i18n,该神器为一位叫Razv...
    rhyme_lph阅读 7,848评论 13 53
  • 查看官方文档以及Flutter中文网.还是觉得国际化处理的太过复杂.想着是否有合适的第三方控件.还真找到一款能像以...
    侭情显現阅读 6,135评论 8 3
  • 前言 如果APP有需要支持多种语言,就需要支持国际化,无论是android和ios,现在针对flutter的国际化...
    lebonbill阅读 10,806评论 4 6