flutter国际化,读取语言文件

地址:https://github.com/hexiekuaile/i18nstr
https://pub.dev/packages/i18nstr/versions/0.0.1

可实时读取i18n目录下的语言文件,如zh_CN.json。

约定:语言文件放在i18n文件夹下

具体参看样例 https://github.com/hexiekuaile/i18nstr/tree/master/example

i18n/zh_CN.json ,在主要的、默认的语言文件中,可加入supportedLocales,其他语言文件是否添加这个,无所谓了。

{
 "supportedLocales": "zh_CN,en_US,ja_JP",
 "chinese": "中文",
 "english": "英语",
 "title": "国际化字符串插件测试",
 "ip": "172.16.40.101:1112",
 "system": "xx系统",
 "pushedTimes": "按键 {0} - {1} 次",
 "animal": "动物: ::dog:: ::cat:: ",
 "a": {
   "firstPage": "首页"
 },
 "c": {
   "commit": "录入  ",
   "info": "信息",
   "metaInfo": "基础信息",
   "URL_saveRow": "http://<<ip>>/entity/"
 }
}

在pubspec.yaml中:

dependencies:
  i18nstr: ^0.0.1
flutter:
   assets:
    - ./i18n/

在main.dart中:

import 'package:i18nstr/i18nstr.dart';

//设定 初始化默认语言,
I18nDelegate _i18nDelegate = new I18nDelegate(Locale('zh', 'CN'));
//设定null,初始化语言是 手机语言设置中的支持语言列表第一个 
//或new I18nDelegate(null);
class MyApp extends StatefulWidge

class _MyAppState extends State<MyApp> 
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      supportedLocales: I18nDelegate.supportedLocales,
      localizationsDelegates: [
        _i18nDelegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      home: HomePage(this.switchLanguage),
    );
  }

//回调函数
  void switchLanguage() {
    setState(() {});
  }

_str = I18nstr.of(context); 不能放在上面第一个StatefulWidge中,否则寻找不到_str。 所以又建了个StatefulWidge。

class _HomePageState extends State<HomePage> {
  I18nstr _str;

@override
  Widget build(BuildContext context) {
    _str = I18nstr.of(context);

    return Scaffold(
      appBar: AppBar(
        title: Text(_str.valueOf('title')),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Text('${_str.valueOf('system')}'),
          Text('嵌套功能 a.firstPage : ${_str.valueOf('a.firstPage')}'),
          Text('序号替换功能  按键 {0} - {1} 次, : ${_str.valueOf('pushedTimes', args: [50, 80])}'),
          Text('map值替换功能  key,value : ${_str.valueOf('animal', namedArgs: {'dog': '小狗', 'cat': '小猫'})}'),
          Text('变量功能 http://<<ip>>/entity/ :${_str.valueOf('c.URL_saveRow')}'),


            RaisedButton.icon(
                icon: Icon(Icons.save, size: 25.0),
                //padding: EdgeInsets.all(15.0),
                label: Text('${_str.valueOf('english')}'),
                color: Colors.blue,
                textColor: Colors.white,
                onPressed: () {
                  setState(() {
                    _i18nDelegate = new I18nDelegate(Locale('en', 'US'));
                    widget.callback();
                  });
                },
              ),

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值