美文网首页
用Flutter Intl 实现项目国际化

用Flutter Intl 实现项目国际化

作者: jane4321 | 来源:发表于2024-09-04 09:19 被阅读0次

    前言: 因为之前公司项目中做过iOS的国际化,学了Flutter之后也想试着做国际化相关的东西,这段时间闲在家里,就一边对之前的项目进行一个总结,一边研究一下之前想搞而没有时间搞的东西。其中Flutter的国际化就是其中之一

    Flutter Intl 既支持Android Studio也支持VS Code,本文以Android Studio为例:

    下载

    步骤:Android Studio --->Settings --->Plugins ---> Marketplace ---> 搜索框输入Intl ---> Install

    注:因为我已经下载过了,所以图中没有install按钮,如果没有下载过的同学在下图中用红框圈住的右下角会有Install按钮

    WX20240904-145537@2x.png

    项目国际化前期准备

    下载完Flutter Intl 之后在Android Studio顶部菜单栏Tool下就会出现Flutter Intl选项,如下图中的2、


    WX20240905-082951@2x.png

    点击图中3、之后项目中lib文件夹下就会多出两个文件夹:


    WX20240904-150856@2x.png

    这里把重要文件说明一下

    • I10n.dart: S对象,代码中国际的时候需要用到的主要对象
    • intl_en.arb: 存放的就是我们英文文案需要国际化的字段。以json的形式存放

    打开intl_en.arb文件,里面目前是空的,这里面存放的就是我们英文文案需要国际化的字段。以json的形式存放。如下图


    WX20240904-151729@2x.png

    把需要国际化的文案放如之后保存:command + s
    Flutter Intl会帮我们把刚才的字段自动动的生成get方法。

    添加新的国际化语言

    如果要添加新的需要国际化的语言(以中文为例):步骤 Tool ---> Flutter Intl ---> Add Locale

    WX20240905-082004@2x.png
    这个时候项目中会多出两个文件
    WX20240905-082326@2x.png
    之后和上面添加英语国际化字段一样,把需要中文翻译的字段以json的形式放入intl_zh.arb中然后command + s。这样中文国际化就完成了
    到这里前期的准备也就做完了

    项目中使用

    • 1、在项目的main函数中找到MaterialApp
    • 2、supportedLocales添加S.delegate.supportedLocales
    • 3、在localizationsDelegates中添加S.delegate
      具体代码如下
    class GHJApp extends StatelessWidget {
      const GHJApp({super.key});
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: GHJHomePage(),
          theme: ThemeData(
            highlightColor: Colors.transparent
          ),
          // 国际化需要支持的语言
          supportedLocales: S.delegate.supportedLocales, // 从S对象中获取
          // 设置widgets需要国际化
          localizationsDelegates: const [
            S.delegate,// 添加S的delegate
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
            GlobalCupertinoLocalizations.delegate,
            // GHJLocalizationsDelegate.delegate,
          ],
        );
      }
    }
    
    • 4、在需要使用的时候直接用S.of(context).例如
    Text(S.of(context).home_page_hello)
    
    到此国际化基本操作就完成了

    相关文章

      网友评论

          本文标题:用Flutter Intl 实现项目国际化

          本文链接:https://www.haomeiwen.com/subject/nwulljtx.html