解决使用flutter_intl出现警告No @@locale or _locale field found in intl_en

Flutter国际化:解决arb文件修改后出现的提示问题
在Flutter应用中使用flutter_intl插件进行国际化时,遇到修改arb文件后出现提示信息的问题。解决方法是为arb文件添加@@locale字段,如在intl_en.arb中添加@@locale:en,表示该文件的语言环境为英文。完成此步骤后,提示将不再显示。

在Flutter中使用flutter_intl插件做国际化时,每次修改arb文件后,就会在Message窗口出现以下提示。对于强迫症患者非常难受,必须解决掉!

/Users/ado/Developer/develop_env/flutter_2.10.5/bin/flutter --no-color pub global run intl_utils:generate
INFO: No @@locale or _locale field found in intl_en, assuming 'en' based on the file name.
Process finished with exit code 0

解决方案

ARB介绍

首先我们需要了解arb文件是什么
ARB详细说明:https://github.com/google/app-resource-bundle

ARB全称Application Resource Bundle 是一种基于JSON的本地化格式文件。

根据Google的介绍,@@开头的字段属于Global attributes,必须加在arb文件json格式的最上面。
@@locale

Flutter 项目中生成 `intl_en.arb` 文件,通常是为了支持多语言国际化(i18n)功能。该文件是用于存储英文资源字符串的 `.arb`(Application Resource Bundle)格式文件,是 Flutter 使用 `intl` 包进行本地化管理的一部分。 要生成 `intl_en.arb` 文件,首先需要在项目中引入 `intl` 包,并确保其版本兼容性。通常依赖配置如下: ```yaml dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter intl: ^0.17.0 ``` 随后,需要创建一个 Dart 文件(例如 `app_intl.dart`),用于定义本地化资源的访问方式。该文件中应包含一个继承自 `LocalizationsDelegate` 的类,并声明用于访问字符串的静态方法。例如: ```dart import 'package:intl/intl.dart'; import 'package:flutter/material.dart'; import 'generated/l10n.dart'; class AppLocalizations { static AppLocalizations of(BuildContext context) { return Localizations.of<AppLocalizations>(context, AppLocalizations)!; } static Future<AppLocalizations> load(Locale locale) async { final String name = locale.countryCode!.isEmpty ? locale.languageCode : locale.toString(); final String localeName = Intl.canonicalizedLocale(name); await initializeDateFormatting(localeName, null); return SynchronousFuture<AppLocalizations>(AppLocalizations()); } static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate(); String get welcomeMessage => Intl.message('Welcome to MyApp!', name: 'welcomeMessage'); } ``` 接着,运行以下命令生成 `.arb` 文件: ```bash flutter pub pub run intl_utils:generate ``` 或者使用更传统的命令: ```bash flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n \ --no-use-deferred-loading lib/app_intl.dart lib/l10n/intl_*.arb ``` 该命令会根据 `app_intl.dart` 中定义的 `Intl.message()` 调用生成 `intl_en.arb` 文件,并将其保存在 `lib/l10n` 目录中。生成的文件内容如下所示: ```json { "welcomeMessage": "Welcome to MyApp!" } ``` 如果在运行上述命令时提示找不到插件,可尝试添加 `build_runner` 依赖以确保生成工具正常运行: ```yaml dev_dependencies: build_runner: ^1.7.0 ``` 生成 `.arb` 文件后,可以继续为其他语言创建对应的资源文件,如 `intl_zh.arb`、`intl_ja.arb` 等,并在 `MaterialApp` 中启用本地化支持: ```dart import 'package:flutter/material.dart'; import 'app_intl.dart'; void main() { runApp( MaterialApp( localizationsDelegates: [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: [ const Locale('en'), const Locale('zh'), ], home: MyHomePage(), ), ); } ``` 通过上述流程,可以成功生成 `intl_en.arb` 文件并实现 Flutter 项目的国际化支持。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值