Flutter中的国际化:如何写一个多语言的App

  原文链接:https://www.didierboelens.com/2018/04/internationalization---make-an-flutter-application-multi-lingual/
  这篇文章介绍了一种让你的Flutter App支持多语言的方法,用户可以选择一种不同于手机设置中设置的语言。
  难度:中等

前言

  国际化已经被讨论了很多次了,官方关于国际化的文档可以看 这里。因为想要理解国际化的概念,同时满足我的项目需要,我决定写下这篇文章来分享我的经验,也希望可以给你们一些提示。

需求

  • 默认情况下,工作语言是在手机的系统设置中配置的。
  • 如果App不支持设置的语言,那么默认值为“en”。
  • 翻译文件被当作资源文件(asset)存放在Json文件“language specific”中。
  • 用户可以从支持的语言列表中选择另一种工作语言。
  • 当用户选择来另一种工作语言时,为了展示最新选择的语言,整个App布局刷新。

内部依赖

  Flutter本身就支持地区化(即Locale的概念),Locale类的languageCode用来判断用户所使用的语言。
  使用这个地区化的包,需要用到flutter_localizations包,我们在pubspec.yaml文件中添加如下依赖内容:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

  我们保存pubspec.yaml文件,编译器会提示你load/import这个新依赖。

翻译文件

  下一步就是创建翻译文件,然后将它们定义为资源文件(asset)。
  根据我以前开发网站的经验,我将这些资源文件存放在名为“/locale”的文件夹下,命名惯例为“i18n_{lang}.json”,在这篇文章中我也使用这些规则。
  我们新建一个和“/lib”同级别的文件夹“/locale”,然后在这个文件夹中新建两个文件,分别为“i18n_en.json” 和“ i18n_fr.json”。
  文件夹树现在是这个样子的:
MyApplication
  |
  +- android
  +- build
  +- images
  +- ios
  +- lib
  +- locale
   |
   +- i18n_en.json
   +- i18n_fr.json
  +- test
  接下来我们需要将这两个文件设置为资源文件的一部分,编辑pubspec.yaml文件,然后将它们都添加进assets部分:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

flutter:
  assets:
    - locale/i18n_en.json
    - locale/i18n_fr.json

实现

  现在我们可以开始实现我们的需求了。
  首先在 main.dart 中初始化App的地方添加相关配置:

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';  // 导入flutter的包
import 'translations.dart';  // 导入我们自定义的处理翻译逻辑的包(后面会讲)

void main
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值