欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Flutter多語(yǔ)言實(shí)踐-創(chuàng)新互聯(lián)

簡(jiǎn)單來(lái)講,流程圖如下:

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比尉氏網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式尉氏網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋尉氏地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

Flutter多語(yǔ)言實(shí)踐簡(jiǎn)單講一下整個(gè)流程:

  1. 我們先寫(xiě)一個(gè)AppStrings.dart,這個(gè)文件是整個(gè)多語(yǔ)言的核心,生成和使用都需要這個(gè)文件。在這個(gè)文件里可以定義獲得文本的api,比如

String order_list_waiting_for_review() => Intl.message(
        'Waiting for the review',
        name: "order_list_waiting_for_review",
          locale: _localeName
      );

其中,方法名和name必須保持一致(不要問(wèn)我為何會(huì)有這種坑爹要求)。'Waiting for the review'是默認(rèn)文案,locale是當(dāng)前的locale。
這樣定義的話,可以用下面的方式獲得文本

String text = AppStrings.of(context).order_list_waiting_for_review();
// text == "Waiting for the review"

很好理解,AppStrings.of(context)就是通過(guò)context獲得對(duì)應(yīng)的locale的AppStrings,進(jìn)而獲得對(duì)應(yīng)的文案。

  1. 在上面以那種格式定義后,我們可以執(zhí)行下面這個(gè)命令把AppStrings.dart生成intl_messages.arb

flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/l10n lib/app_strings.dart

*.arb是個(gè)中間產(chǎn)物,其內(nèi)就是JSON文本。其實(shí)會(huì)有更多附加信息,描述這個(gè)文本,不過(guò)在此省略。

{
  "order_list_waiting_for_review": "Waiting for the review",
}
  1. 生成的arb文件只是一種語(yǔ)言的,我們可以把它拷貝成N種語(yǔ)言對(duì)應(yīng)的文件,比如intl_en.arb,intl_es.arb等,并把內(nèi)容的value都替換成對(duì)應(yīng)語(yǔ)言的文案。

  2. 然后再執(zhí)行下面這個(gè)命令,生成messages_*.dart

flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n \
   --no-use-deferred-loading lib/app_strings.dart lib/l10n/intl_*.arb

可以看到,作為入?yún)⒌氖莑ib/app_strings.dart和lib/l10n/intl_*.arb,flutter工具黨確保lib/app_strings.dart中的方法名、方法中的name參數(shù),和lib/l10n/intl_*.arb中的json的key一致的時(shí)候,才會(huì)在生成的messages_*.dart文件中加入對(duì)應(yīng)的文案,缺一不可。

我們?cè)倩剡^(guò)頭來(lái)看這段代碼

String order_list_waiting_for_review() => Intl.message(
        'Waiting for the review',
        name: "order_list_waiting_for_review",
          locale: _localeName
      );

Intl.message()方法實(shí)際上是根據(jù)locale獲取對(duì)應(yīng)的message_*.dart文件,然后再通過(guò)name找到對(duì)應(yīng)的文案返回。

  1. 當(dāng)然,還需要對(duì)MaterialApp定義localizationsDelegates本地化代理和supportedLocales支持的多語(yǔ)言,這部分在文章最開(kāi)始的文檔里寫(xiě)的很詳細(xì)了,就不再贅述了。

官方方案的問(wèn)題

官方的方案雖然很長(zhǎng)很繁瑣,但還是可以實(shí)現(xiàn)多語(yǔ)言的功能的,只是對(duì)于我們來(lái)講,它存在以下幾個(gè)問(wèn)題:

  1. 需要在AppStrings.dart中定義文本獲得的方法,一個(gè)文本就需要定義一個(gè)方法,并且方法名和name必須一致才能和arb文件一起生成最后的dart文件。一個(gè)文案對(duì)應(yīng)一個(gè)方法,代碼寫(xiě)起來(lái)很冗余,并且不利于文案的枚舉使用(比如文案的key之間有關(guān)系)。和native開(kāi)發(fā)之前的習(xí)慣也不同。使用和生成的邏輯放到一起,倘若有幾千個(gè)文案,AppStrings.dart估計(jì)要爆表。

  2. 流程太長(zhǎng),不利于自動(dòng)化下載語(yǔ)言的腳本的實(shí)現(xiàn)

我們的流程

Flutter多語(yǔ)言實(shí)踐起點(diǎn)的i18n.py是我們自己寫(xiě)的python腳本,一共有兩個(gè)作用

  1. 從美杜莎(阿里國(guó)際化文案管理平臺(tái))上獲得多語(yǔ)言文案,并重命名成arb文件。

前面說(shuō)到,arb文件其實(shí)是json格式的,美杜莎支持以json格式導(dǎo)出文本,所以我們做的只是重命名,不需要對(duì)內(nèi)容進(jìn)行更改。

  1. 在arb文件處理好后,會(huì)拿默認(rèn)的(英語(yǔ))文本去生成一個(gè)dart文件,這個(gè)dart文件只用來(lái)作為中間產(chǎn)物,不會(huì)被其他dart使用的。
    其中只包含如下內(nèi)容

import 'package:intl/intl.dart';
class MessagesIndex {
  String order_list_waiting_for_review() => Intl.message(
        'Waiting for the review',
        name: "order_list_waiting_for_review",
      );
  // ......
}

那么,我們繼續(xù)調(diào)用生成最終產(chǎn)物的命令行

flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n \
   --no-use-deferred-loading lib/messages_index.dart lib/l10n/intl_*.arb

發(fā)現(xiàn)文件以及其內(nèi)的文案已經(jīng)被正確生成了。

調(diào)用方式

我之所以這樣更改流程,其實(shí)只有兩個(gè)目的:

  1. 可以像讀map一樣的讀取多語(yǔ)言文案,而不是像調(diào)用方法那樣去讀取。

  2. 拉取、生成多語(yǔ)言文案的過(guò)程可以自動(dòng)化。
    通過(guò)上面一頓操作,生成文案的工作都被自動(dòng)化搞定了,那我們只需要在AppStrings.dart中添加一個(gè)方法,傳入name,傳出想要的多語(yǔ)言文案即可:

class AppStrings {
  final String _localeName;
  // ......
  static AppStrings of(BuildContext context) {
    return Localizations.of<AppStrings>(context, AppStrings);
  }
  // AppStrings.of(context).str(stringKey)
  String str(String name) {
    return Intl.message(name, name: name, locale: _localeName);
  }
  // 重寫(xiě)操作符,減少代碼量
  // AppStrings.of(context)[stringKey]
  operator [](String messageName) => str(messageName);
}

【本文轉(zhuǎn)載自云棲社區(qū),作者: shoulder ,原文鏈接:https://yq.aliyun.com/articles/624559?spm=a2c4e.11157919.spm-cont-list.8.146c27aewVdE98】

當(dāng)前文章:Flutter多語(yǔ)言實(shí)踐-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://chinadenli.net/article12/psggc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、云服務(wù)器、小程序開(kāi)發(fā)、企業(yè)網(wǎng)站制作、商城網(wǎng)站、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
丝袜破了有美女肉体免费观看 | 久久精品免费视看国产成人| 厕所偷拍一区二区三区视频| 日本精品理论在线观看| 国产一级一片内射视频在线| 中文字幕区自拍偷拍区| 日本免费熟女一区二区三区| 狠色婷婷久久一区二区三区| 日韩人妻av中文字幕| 老司机精品一区二区三区| 在线观看免费视频你懂的| 黄色美女日本的美女日人| 亚洲熟女熟妇乱色一区| 中国日韩一级黄色大片| 欧美日韩一区二区三区色拉拉| 偷拍美女洗澡免费视频| 偷拍偷窥女厕一区二区视频| 2019年国产最新视频| 黑丝国产精品一区二区| 日本加勒比在线观看一区| 男女一进一出午夜视频| 亚洲天堂一区在线播放| 欧美激情视频一区二区三区| 在线免费视频你懂的观看| 久久久精品日韩欧美丰满| 日本淫片一区二区三区| 欧美日韩综合综合久久久| 麻豆亚州无矿码专区视频| 真实偷拍一区二区免费视频| 中文字幕高清免费日韩视频| 午夜精品成年人免费视频| 久久免费精品拍拍一区二区| 熟女免费视频一区二区| 最新午夜福利视频偷拍| 成人三级视频在线观看不卡| 国产又色又爽又黄又大| 国产午夜精品在线免费看| 偷拍偷窥女厕一区二区视频| 日韩精品日韩激情日韩综合| 欧美久久一区二区精品| 亚洲高清欧美中文字幕|