我尝试按照www.example.com和www.example.com中的国际化文档https://flutter.dev/docs/development/accessibility-and-localization/internationalization#dart-toolshttps://docs.google.com/document/d/10e0saTfAv32OZLRmONy866vnaw0I2jwL8zukykpgWBc/edit#heading=h.upcu5w85cvc2,但没有生成任何文件。
基本上它说,使这些mods到pub spec.yaml
文件:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.17.0-nullsafety.2
flutter:
generate: true
然后创建<project-root>/l10n.yaml
文件,其中包含:
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
最后用这样的代码创建app_en.arb
:
{
"@@locale": "en",
"helloWorld": "Hello World!",
"@helloWorld": {
"description": "The conventional newborn programmer greeting"
}
}
从那里的指南说,一个flutter_gen/gen_l10n/app_localizations.dart
文件将自动生成。
除了什么都没有发生。我在Android Studio中工作,做了一个pub get
,尝试了flutter clean
和flutter build ios
以及其他我想不起来的东西,但没有任何东西在构建那个文件。
有什么想法吗?
9条答案
按热度按时间rxztt3cl1#
除了@drekka的回答,
你得赶紧跑
如果不是自动生成的话。
jtoj6r0c2#
好的。做了一些进一步的挖掘,我已经解决了这个问题。基本上Flutter文档有点过时。
首先,生成的文件正在生成,但它们在**
<project_dir>.dart_tools/flutter_gen/genl10n
**中。生成器创建一个合成包,该包自动可用于项目,因此不需要任何进一步的pubspec.yaml
更改。其次,您的
main.dart
必须如下所示:这里有两件事:
1.导入
app_localizations.dart
生成的文件(文档确实提到了,但可能没有很好地解释)和...1.修改
localizationsDelegates
和supportedLocales
。你不需要列出文档中提到的所有委托和语言环境,因为生成的本地化文件会自动包含它们。只需切换到AppLocalizations
的两个属性即可。PS
写完上面的内容后,我尝试将应用程序的标题国际化:
Epic fail -原因是在解析标题时,代理和语言环境尚未设置,因此从
AppLocalizations.of(context)
返回的是null
。相反,您需要更改为onGeneratedTitle
,如下所示:zhte4eai3#
当需要通过CLI生成这些文件而根本不使用IDE时(在CircleCI上),面临类似的问题。
首先,您应该将
intl_utils
作为项目依赖项或全局激活。要将其作为依赖项安装(并管理每个项目的版本)-只需将
intl_utils: ^2.1.0
添加到pubspec.yaml
的dependencies
部分(不要忘记设置您需要的版本)。(将
intl_en.arb
更改为实际的.arb
文件名,或者在与默认app_en.arb
匹配的情况下省略整个参数)要全局激活
intl_utils
(并在所有项目上使用单一版本的intl_utils
),请执行以下操作:然后从项目目录运行此命令:
在我的例子中,因为项目还没有迁移到使用null安全,所以将
intl_utils
作为项目依赖项会导致null安全问题,所以技巧是全局使用intl_utils 1.9.0
。jvidinwx4#
在终端或命令行上运行此命令:
dart发布全局激活intl_utils 2.1.0
或
dart发布全局运行intl_utils:生成
70gysomp5#
我现在也遇到了同样的问题,我不知道为什么会这样,但是我发现这个post提供了同样的信息,我决定尝试使用它提到的插件。
该插件名为“Flutter Intl”,适用于Android Studio和VSCode。您需要将其安装在IDE中并运行“Flutter Intl:初始化”命令。此操作应创建包含所有所需样板文件的“lib/generated”文件夹。
fivyi3re6#
遇到了同样的问题。意外地发现我在
lib
目录中创建了l10 nidoyaml而不是base目录。把它移到了应该在的地方,一切都正常了!9njqaruj7#
如果您在pubspec.yaml中添加此代码,它将自动生成
m528fe3b8#
flutter pub cache clean
在这种情况下提供了帮助zu0ti5jz9#
我也遇到过同样的问题,因为我从另一个开发人员那里导入了这个项目,但是没有一个解决方案能帮到我。你必须在添加依赖项之后删除所有的东西,然后启动程序一次。然后这个文件就被创建了。只有这样你才能把这个文件导入到类中并使用它。