flutter 國(guó)際化命令

國(guó)際化命令:flutter --no-color pub global run intl_utils:generate

Flutter 國(guó)際化步驟

一:使用flutter intl進(jìn)行國(guó)際化

1:下載 flutter intl插件
2:在Android Studio中打開(kāi)項(xiàng)目,在Tools -> flutter intl -> initiazlize for the project

此時(shí)pubspec.yaml底部會(huì)多出內(nèi)容:

flutter_intl:
  enabled: true
3:添加中文

Tools -> flutter intl -> add Locale中呜笑,輸入 zh

4. 按照網(wǎng)上寫法按部就班的進(jìn)行瞬雹。

二:官方指導(dǎo)方式國(guó)際化- Flutter 中的本地化介紹

默認(rèn)情況下粗井,F(xiàn)lutter 僅提供美國(guó)英語(yǔ)本地化。要添加對(duì)其他語(yǔ)言的支持义锥,應(yīng)用程序必須指定附加MaterialApp(或CupertinoApp)屬性,并包含一個(gè)名為 flutter_localizations. 截至 2020 年 11 月,該軟件包支持 78 種語(yǔ)言姆坚。

1. 設(shè)置一個(gè)國(guó)際化的應(yīng)用程序:Flutter _localizations 包
  • 要使用 flutter_localizations,請(qǐng)將包作為依賴項(xiàng)添加到您的pubspec.yaml文件中:
dependencies:
  flutter:
    sdk: flutter
  flutter_localizations: # Add this line
    sdk: flutter         # Add this line
  • 接下來(lái)实愚,運(yùn)行pub get packages兼呵,然后導(dǎo)入flutter_localizations庫(kù),并指定 localizationsDelegates和supportedLocales為MaterialApp:
import 'package:flutter_localizations/flutter_localizations.dart';
2. 添加您自己的本地化消息
  • 一旦flutter_localizations包被添加腊敲,使用下面的說(shuō)明本地化的文本添加到您的應(yīng)用程序击喂。

    1. 將intl包添加到pubspec.yaml文件中:
    dependencies:
      flutter:
        sdk: flutter
      flutter_localizations:
        sdk: flutter
      intl: ^0.17.0 # Add this line
    
    1. 此外,在pubspec.yaml文件中碰辅,啟用generate 標(biāo)志懂昂。這被添加到特定于 Flutter 的 pubspec 部分,并且通常出現(xiàn)在 pubspec 文件中没宾。
    # The following section is specific to Flutter.
    flutter:
      generate: true # Add this line
    
    1. 在 Flutter 項(xiàng)目的根目錄添加一個(gè)新的 yaml 文件凌彬,調(diào)用l10n.yaml內(nèi)容如下
    arb-dir: lib/l10n
    template-arb-file: app_en.arb
    output-localization-file: app_localizations.dart
    
    1. 該文件配置本地化工具;在此示例中循衰,輸入文件位于中${FLUTTER_PROJECT}/lib/l10n铲敛,app_en.arb文件提供模板,生成的本地化放置在app_localizations.dart文件中羹蚣。
    {
        "helloWorld": "Hello World!",
        "@helloWorld": {
          "description": "The conventional newborn programmer greeting"
        }
    }
    
    1. 接下來(lái)原探,在同一目錄中添加一個(gè)app_zh.arb文件,用于同一消息的中文翻譯:
    {
      "helloWorld": "你好世界顽素!"
    }
    
    1. 現(xiàn)在咽弦,運(yùn)行您的應(yīng)用程序,以便進(jìn)行代碼生成胁出。您應(yīng)該會(huì)在 ${FLUTTER_PROJECT}/.dart_tool/flutter_gen/gen_l10n.
    2. 添加的import語(yǔ)句app_localizations.dart型型,并AppLocalizations.delegate 在調(diào)用的構(gòu)造MaterialApp。
    import 'package:flutter_gen/gen_l10n/app_localizations.dart';
    

    如果導(dǎo)入的時(shí)候全蝶,沒(méi)找到路徑闹蒜,import的時(shí)候沒(méi)有提示寺枉,但是在.dart_tool里面已經(jīng)看到該文件夾和路徑了,此時(shí)可以關(guān)閉Android Studio,重新打開(kāi)绷落,即可有提示了姥闪。

    1. 在您的應(yīng)用程序中的任何位置使用 AppLocalizations。此處砌烁,翻譯后的消息用于文本小部件筐喳。
    Text(AppLocalizations.of(context)!.helloWorld);
    
    1. 您還可以使用生成的localizationsDelegates和supportedLocales列表,而不是手動(dòng)提供它們函喉。
    const MaterialApp(
      title: 'Localizations Sample App',
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      supportedLocales: AppLocalizations.supportedLocales,
    );
    
  • 注意: 如果需要繼續(xù)增加別的國(guó)際語(yǔ)言避归,只需要重復(fù)第5步即可,在同一目錄中添加一個(gè)app_es.arb文件管呵,運(yùn)行項(xiàng)目梳毙,即可自動(dòng)在.dart_tool/flutter_gen/gen_l10n目錄中新增相應(yīng)的文件,然后修改app_es.arb文件后捐下,重新運(yùn)行即可账锹,app_localizations_es.dart文件會(huì)自動(dòng)更新,如果在app_es.arb中找不到app_en.arb對(duì)應(yīng)的值蔑担,會(huì)直接用app_en.arb中給出的值為默認(rèn)值


iOS 本地化:更新 iOS 應(yīng)用程序包

iOS 應(yīng)用程序在內(nèi)Info.plist置于應(yīng)用程序包的文件中定義關(guān)鍵應(yīng)用程序元數(shù)據(jù)牌废,包括支持的區(qū)域設(shè)置咽白。要配置您的應(yīng)用程序支持的語(yǔ)言環(huán)境啤握,請(qǐng)使用以下說(shuō)明:

  1. 打開(kāi)項(xiàng)目的ios/Runner.xcworkspaceXcode 文件。

  2. Project Navigator 中晶框,打開(kāi)項(xiàng)目文件夾Runner下的Runner文件夾下的Info.plist文件排抬。

  3. 選擇Information Property List 項(xiàng)。然后從Editor 菜單中選擇Add Item授段,并從彈出菜單中選擇Localizations蹲蒲。

  4. 選擇并展開(kāi)新創(chuàng)建的Localizations項(xiàng)目。對(duì)于您的應(yīng)用程序支持的每個(gè)區(qū)域設(shè)置侵贵,添加一個(gè)新項(xiàng)目并從字段的彈出菜單中選擇您希望添加的區(qū)域設(shè)置届搁。此列表應(yīng)與supportedLocales參數(shù)中列出的語(yǔ)言一致。

  5. 添加所有支持的語(yǔ)言環(huán)境后窍育,保存文件卡睦。


高級(jí)語(yǔ)言環(huán)境定義

一些具有多種變體的語(yǔ)言需要的不僅僅是語(yǔ)言代碼才能正確區(qū)分。
例如漱抓,完全區(qū)分中文的所有變體需要指定語(yǔ)言代碼表锻、腳本代碼和國(guó)家代碼。這是由于簡(jiǎn)繁體文字的存在乞娄,以及在同一文字類型中書(shū)寫字符的方式存在地區(qū)差異瞬逊。
為了充分表達(dá)國(guó)家代碼CN显歧、TW和HK的每個(gè)中文變體,支持的語(yǔ)言環(huán)境列表應(yīng)包括:

supportedLocales: [
  Locale.fromSubtags(languageCode: 'zh'), // generic Chinese 'zh'
  Locale.fromSubtags(
      languageCode: 'zh',
      scriptCode: 'Hans'), // generic simplified Chinese 'zh_Hans'
  Locale.fromSubtags(
      languageCode: 'zh',
      scriptCode: 'Hant'), // generic traditional Chinese 'zh_Hant'
  Locale.fromSubtags(
      languageCode: 'zh',
      scriptCode: 'Hans',
      countryCode: 'CN'), // 'zh_Hans_CN'
  Locale.fromSubtags(
      languageCode: 'zh',
      scriptCode: 'Hant',
      countryCode: 'TW'), // 'zh_Hant_TW'
  Locale.fromSubtags(
      languageCode: 'zh',
      scriptCode: 'Hant',
      countryCode: 'HK'), // 'zh_Hant_HK'
],

這種明確的完整定義可確保您的應(yīng)用程序能夠區(qū)分這些國(guó)家/地區(qū)代碼的所有組合确镊,并為這些國(guó)家/地區(qū)代碼的所有組合提供完全細(xì)致入微的本地化內(nèi)容士骤。如果未指定用戶的首選語(yǔ)言環(huán)境,則使用最接近的匹配項(xiàng)蕾域,這可能包含與用戶期望的差異敦间。Flutter 僅解析為supportedLocales. Flutter 為常用語(yǔ)言提供了 scriptCode 差異化的本地化內(nèi)容。有關(guān)Localizations如何解析支持的語(yǔ)言環(huán)境和首選語(yǔ)言環(huán)境的信息束铭,請(qǐng)參閱廓块。
盡管中文是主要示例,但其他語(yǔ)言(如法語(yǔ) ( fr_FR, fr_CA) )也應(yīng)完全區(qū)分契沫,以實(shí)現(xiàn)更細(xì)微的本地化

跟蹤語(yǔ)言環(huán)境:Locale 類和 Localizations 小部件

Locale類標(biāo)識(shí)用戶的語(yǔ)言带猴。移動(dòng)設(shè)備支持為所有應(yīng)用程序設(shè)置區(qū)域設(shè)置,通常使用系統(tǒng)設(shè)置菜單懈万。國(guó)際化應(yīng)用程序通過(guò)顯示特定于區(qū)域設(shè)置的值來(lái)響應(yīng)拴清。例如,如果用戶將設(shè)備的區(qū)域設(shè)置從英語(yǔ)切換到法語(yǔ)会通,那么Text最初顯示“Hello World”的小部件將使用“Bonjour le monde”重建口予。

Localizations控件定義的區(qū)域設(shè)置為其子和本地化資源,孩子依賴涕侈。如果系統(tǒng)的區(qū)域設(shè)置更改沪停,WidgetsApp小部件會(huì)創(chuàng)建一個(gè)Localizations小部件并重建它。

您始終可以使用以下命令查找應(yīng)用程序的當(dāng)前語(yǔ)言環(huán)境 Localizations.localeOf()

Locale myLocale = Localizations.localeOf(context);
指定應(yīng)用程序的 supportedLocales 參數(shù)

盡管該flutter_localizations庫(kù)目前支持 78 種語(yǔ)言和語(yǔ)言變體裳涛,但默認(rèn)情況下僅提供英語(yǔ)語(yǔ)言翻譯木张。由開(kāi)發(fā)人員決定支持哪些語(yǔ)言。

MaterialApp supportedLocales 參數(shù)限制區(qū)域設(shè)置更改端三。當(dāng)用戶更改其設(shè)備上的區(qū)域設(shè)置時(shí)舷礼,Localizations只有當(dāng)新區(qū)域是此列表的成員時(shí),應(yīng)用程序的小部件才會(huì)隨之更改郊闯。如果找不到與設(shè)備區(qū)域設(shè)置的完全匹配妻献,則使用具有匹配項(xiàng)的第一個(gè)支持的區(qū)域設(shè)置languageCode 。如果失敗团赁,則supportedLocales使用列表的第一個(gè)元素 育拨。

想要使用不同“區(qū)域設(shè)置解析”方法的應(yīng)用程序可以提供一個(gè)localeResolutionCallback. 例如,要讓您的應(yīng)用程序無(wú)條件接受用戶選擇的任何語(yǔ)言環(huán)境:

MaterialApp(
  localeResolutionCallback: (
    Locale? locale,
    Iterable<Locale> supportedLocales,
  ) {
    return locale;
  },
);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末然痊,一起剝皮案震驚了整個(gè)濱河市至朗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剧浸,老刑警劉巖锹引,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矗钟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嫌变,警方通過(guò)查閱死者的電腦和手機(jī)吨艇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腾啥,“玉大人东涡,你說(shuō)我怎么就攤上這事√却” “怎么了疮跑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凸舵。 經(jīng)常有香客問(wèn)我祖娘,道長(zhǎng),這世上最難降的妖魔是什么啊奄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任渐苏,我火速辦了婚禮,結(jié)果婚禮上菇夸,老公的妹妹穿的比我還像新娘琼富。我一直安慰自己,他們只是感情好庄新,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布鞠眉。 她就那樣靜靜地躺著,像睡著了一般摄咆。 火紅的嫁衣襯著肌膚如雪凡蚜。 梳的紋絲不亂的頭發(fā)上人断,一...
    開(kāi)封第一講書(shū)人閱讀 52,807評(píng)論 1 314
  • 那天吭从,我揣著相機(jī)與錄音,去河邊找鬼恶迈。 笑死涩金,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暇仲。 我是一名探鬼主播步做,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奈附!你這毒婦竟也來(lái)了全度?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤斥滤,失蹤者是張志新(化名)和其女友劉穎将鸵,沒(méi)想到半個(gè)月后勉盅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顶掉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年草娜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痒筒。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宰闰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出簿透,到底是詐尸還是另有隱情移袍,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布老充,位于F島的核電站咐容,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蚂维。R本人自食惡果不足惜戳粒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虫啥。 院中可真熱鬧蔚约,春花似錦、人聲如沸涂籽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)评雌。三九已至树枫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間景东,已是汗流浹背砂轻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斤吐,地道東北人搔涝。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像和措,于是被迫代替她去往敵國(guó)和親庄呈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容