【问题标题】:Internationalization in a monorepo单一仓库中的国际化
【发布时间】:2022-10-22 20:34:31
【问题描述】:

我有一个应用程序(只是前端),它的代码在 monorepo 中结构化。每个自定义小部件都有单独的包。我还想要一个包含所有翻译的包。这样,如果另一个包需要翻译,我只需要导入那个包。所以我创建了翻译包,并在我刚刚编写的主文件中(这里我使用intl):

export 'package:flutter_gen/gen_l10n/app_localizations.dart';

现在,如果我将该包导入另一个包中,并使用以下命令导入文件:

import 'package:l10n/l10n.dart';

它告诉我没有使用该导入,并且当我使用带有AppLocalizations.of(context)!.foo 的翻译时出现错误

【问题讨论】:

  • 嗨 Damien,你找到更好的解决方案了吗?我得到Undefined name 'AppLocalizations'. 即使在导出export 'package:flutter_gen/gen_l10n/app_localizations.dart' show AppLocalizations; 然后导入包含它的包import 'package:l10n/l10n.dart';
  • 嗨@Chris,看看我刚刚在下面添加的答案

标签: flutter dart internationalization monorepo


【解决方案1】:

如果你使用VScode(不知道其他编辑器)你必须手动导入生成的翻译包:

import 'package:flutter_gen/gen_l10n/app_localizations.dart';

【讨论】:

  • 手动?我希望如果我导出一个生成的文件,然后我从另一个包中导入它,它可以工作(就像任何其他非生成的文件一样)。这里有什么问题?对我来说,这似乎是大型项目的主要障碍。无论如何,谢谢你的回答!
  • 别客气!老实说,我没有尝试为此找到解决方案。不要忘记勾选答案。
【解决方案2】:

似乎无法按设计导出生成的文件(check out this github issue)。我发现解决我的问题的最佳解决方案如下:

  1. 在您的项目中创建一个翻译包,例如在packages/translations 中,并将该包添加到您的主项目的pubspec.yaml。像这样:
    dependencies:
      flutter:
        sdk: flutter
      translations:
        path: packages/translations
    
    1. 在该包中创建一个l10n.yaml 文件,如下所示:
    arb-dir: lib
    template-arb-file: app_en.arb
    output-localization-file: app_localizations.dart
    synthetic-package: false
    
    1. 如果您在 git 存储库中工作,请在您的 .gitignore 中添加 packages/translations/lib/app_localizations*.dart
    2. 现在,如果您在该翻译包中运行 flutter packages get && flutter gen-l10n,所有翻译都将自动生成(假设它们在 packages/translations/lib/app_xx.arb 中)
    3. 现在您可以使用import 'package:translations/app_localizations.dart'; 从主包中导入翻译文件

    唯一的缺点是当您键入flutter pub get (see this issue) 时不会自动生成翻译。为了重新生成它们,您每次都必须在 translations 包中键入 flutter gen-l10n。可以通过使用像melos 这样的管理 Dart monorepo 项目的工具来改进该解决方案。

    我所描述的代码 + melos 实现可以在this github repo 中找到

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多