Day18 - Flutter - 国际化(下)

简介: Day18 - Flutter - 国际化(下)

三、国际化的工具



  • 3.1、认识 arb文件目前我们已经可以通过加载对应的json文件来进行本地化了但是还有另外一个问题,我们在进行国际化的过程中,下面的代码依然需要根据 json文件 手动编写:


String get title {
   return _localizedValues[locale.languageCode]["title"];
}
String get greet {
   return _localizedValues[locale.languageCode]["greet"];
}
String get pickTime {
   return _localizedValues[locale.languageCode]["picktime"];
}
  • 有没有一种更好的方式,让我们可以快速在本地化文件-dart代码文件直接来转换呢?答案就是arb文件
  • 3.2、intl package官方文档推荐可以使用intl package来进行arb和dart文件之间的转换(通过终端指令)
  • 需要在在 pubspec.yaml 中添加其相关的依赖,具体步骤这里不再详细给出,可以参考官方文档
  • 3.3、使用IDE插件
  • 在之前有一个比较好用的Android Studio的插件:Flutter i18n
  • 但是这个插件已经很久不再维护了,所以不再推荐给大家使用
  • 目前我们可以使用另外一个插件:Flutter Intl
  • 该插件更新维护频率很高,并且广受好评;
  • 另外,在Android Studio和VSCode中都是支持的
  • 我们这里以Android Studio为例,讲解其使用过程:
  • 3.3.1、安装插件
    在Android Studio的Plugins中安装插件:



image.png

提示:如果遇到如下图的问题,可看下图修复


image.png

image.png

3.3.2. 初始化 intl

选择工具栏Tools - Flutter Intl - Initialize for the Project


image.png


image.pngimage.png


  • 完成上面的操作之后会自动生成如下文件目录:
  • generated是自动生成的dart代码
  • I10n 是对应的 arb文件目录


  • 3.3.3、使用intl
  • 在localizationsDelegates中配置生成的class,名字是S
  • 1.添加对应的delegate
  • 2.supportedLocales使用S.delegate.supportedLocales


localizationsDelegates: [
   GlobalMaterialLocalizations.delegate,
   GlobalWidgetsLocalizations.delegate,
   GlobalCupertinoLocalizations.delegate,
   JKLocalizationsDelegate.delegate,
   S.delegate
],
supportedLocales: S.delegate.supportedLocales,
  • 因为我们目前还没有对应的本地化字符串,所以需要在intl_en.arb文件中编写:编写后ctrl(command) + s保存即可


{
  "title": "home",
  "greet": "hello~",
  "picktime": "Pick a time"
}


  • 在代码中使用即可,按照如下格式:S.of(context).title
  • 3.3.4、添加中文
    如果希望添加中文支持:add local,在弹出框中输入zh即可,我们会发现,会生成对应的intl_zh.arbmessages_zh.dart文件

image.png

image.png

image.png

image.png


  • 编写intl_zh.arb文件


{
    "title": "首页",
    "greet": "您好~",
    "picktime": "选择一个时间"
}
  • 查看界面,会根据当前语言显示对应的语言文本


  • 3.4. arb 其它语法
  • 如果我们希望在使用本地化的过程中传递一些参数:
  • 比如hello kobe或hello james
  • 比如你好啊,周杰伦 或 你好啊
  • 修改对应的arb文件:{name} 表示传递的参数


{
  "title": "home",
  "greet": "hello~",
  "picktime": "Pick a time",
  "sayHello": "hello {name}"
}
  • 在使用时,传入对应的参数即可:



Text(S.of(context).sayHello("周杰伦")),
  • 提示: arb 的好处, 每次我们只需要修改 intl_en.arbintl_zh.arb等文件的 json数据,它会自动帮我们生成对用名字的 get 方法,到时候直接 S.of(context).名字 调用即可



最后对应的 i18n代码

目录
相关文章
|
JSON Dart IDE
Flutter实现国际化
开发一个App,如果我们的App需要面向不同的语种(比如中文、英文、繁体等),那么我们需要对齐进行国际化开发
1396 0
Flutter实现国际化
|
3月前
|
JSON 自然语言处理 Android开发
Flutter本地化(国际化)之App名称
Flutter本地化(国际化)之App名称
67 1
|
4月前
|
存储 Dart 开发工具
flutter实现语言的国际化
【7月更文挑战第16天】
86 1
|
6月前
|
自然语言处理 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的国际化与本地化支持
【4月更文挑战第30天】Flutter支持国际化与本地化,借助`Intl`包和`Localizations`类,帮助开发者实现多语言应用。`Intl`提供日期、时间格式化,而`Localizations`管理不同语言环境的资源。在`pubspec.yaml`添加`intl`依赖,创建本地化资源文件并定义`LocalizationsDelegate`。通过`Localizations.of()`获取本地化资源,实现应用适应不同语言环境。
208 0
【Flutter前端技术开发专栏】Flutter中的国际化与本地化支持
|
6月前
|
存储 自然语言处理 API
Flutter应用的国际化支持:实现多语言环境的优雅策略
【4月更文挑战第26天】Flutter提供强大的国际化(i18n)和本地化(l10n)支持,使开发者能轻松实现应用多语言特性。通过定义`.arb`文件来管理字符串资源,使用`LocalizationsDelegate`加载资源,设置应用语言环境,以及在UI中使用`S.of(context).someString`访问字符串。进阶技巧包括字符串格式化、复数形式、双向文本和Unicode支持。充分测试确保所有语言正确显示。随着全球化需求增长,Flutter的国际化支持成为应用开发关键。
|
6月前
|
存储 容器
Flutter 应用服务:主题、暗黑、国际化、本地化-app_service库
Flutter 应用服务:主题、暗黑、国际化、本地化-app_service库
277 0
|
JSON Android开发 iOS开发
Day18 - Flutter - 国际化(上)
Day18 - Flutter - 国际化(上)
300 0
Day18 - Flutter - 国际化(上)
|
自然语言处理 JavaScript 前端开发
|
Dart
Flutter - International 国际化,Localization 本地化, 使用字符串Map
记录一种简单的方式实现字符串的国际化。 这里没有用到Intl包,而是将所需的字符串存放在一个map中。 步骤: MaterialApp中添加本地化代理和语言类型 创建文字资源文件 新建一个类继承LocalizationsDelegate,和文字资源文件联系起来 使用代理获取想要的文字资源 新建项目international_demo,得到一个带按钮示例工程。
3769 0
|
JSON Dart 开发工具
Flutter - International 国际化,Localization 本地化, 使用Intl
新建项目,得到一个示例工程。本例中使用intl包来管理文字资源。 项目地址: https://github.com/RustFisher/localization_demo 步骤: 添加依赖项 - intl 创建文字资源文件 生成arb文件 新增和修改arb文件 根据arb生成dart文件...
4853 0