在Android上面进行Flutter语言国际化


记录Flutter中语言国际化的方式,该过程中可能会有冗余步骤,但是却可以实现功能。

这是根据Flutter默认项目进行的更改

环境: Windows、Android Studio

一、下载intl插件

File->Settings->Plugins->Maketplace中搜索Flutter Intl,安装后重启Android Studio

二、初始化项目

通过Tools->Flutter Intl->Initialize for the project进行项目初始化

三、配置pubspec.yaml

name: flutter_app
description: 这是一个flutter项目
version: 1.0.0+1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.0
  flutter_localizations:
    sdk: flutter
  intl: ^0.16.1 # Add this line

dev_dependencies:
  flutter_test:
    sdk: flutter
flutter:
  uses-material-design: true
  generate: true # 生成国际化启用标志
flutter_intl:
  enabled: true

然后下载依赖

现在项目会生成一些文件(默认只有en的文件,其他是后加上去的),如下:
在这里插入图片描述
这里看下intl_zn.arb的内容,定义的文本内容都是在这里面写的
在这里插入图片描述

这里注意下l10n.dart的内容,内容如下:
在这里插入图片描述

可以看到类名为S,这个类一会儿会使用,这个名字每个项目不一定叫这个,记得随时看下就好。

四、创建l10n.yaml

这个文件不知道有啥用。官网是这样写的

代码如下(注意文件名要跟生成的文件名一致):

arb-dir: lib/l10n
template-arb-file: intl_en.arb
output-localization-file: l10n.dart

五、main.dart代码使用

1、导入依赖:
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_dq_app/generated/l10n.dart'; //位置可能不一样,注意下生成的位置就好
2、初始化语言配置
class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        // ... app-specific localization delegate[s] here
        S.delegate,//注意这个名字
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: [//这里面的语言最好是定义好的
        const Locale('en', ''), // English, no country code
        const Locale('ar', ''), // Arabic, no country code
        const Locale.fromSubtags(languageCode: 'zh'), // Chinese *See Advanced Locales below*
        // ... other locales the app supports
      ],
...
...
3、引用定义的文本内容
class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              S.of(context).helloWorld,//注意这个类名和引用的文本名字,还有所处的位置
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

六、创建中文内容

定义的文本内容是在arb文件内,初始的文件只有英文,中文需要自己创建,创建方式如下(方式有很多种,这里介绍一种):

项目根目录右键新建arb文件,如下:
在这里插入图片描述
在这里插入图片描述

然后会在l10n文件夹下面创建新的文件intl_zh.arb

里面内容定义如下:

{
  "helloWorld": "你好!"
}

然后运行项目就好,没有效果的话重新clean项目

在这里插入图片描述

七、参考链接:

https://flutter.cn/docs/development/accessibility-and-localization/internationalization#dart-tools
https://github.com/flutter/website/blob/master/examples/internationalization/gen_l10n_example/lib/main.dart
https://blog.csdn.net/ithouse/article/details/106567502

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值