flutter 國際化命令

國際化命令:flutter --no-color pub global run intl_utils:generate

Flutter 國際化步驟

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

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

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

flutter_intl:
  enabled: true
3:添加中文

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

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

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

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

1. 設(shè)置一個(gè)國際化的應(yīng)用程序:Flutter _localizations 包
  • 要使用 flutter_localizations,請將包作為依賴項(xiàng)添加到您的pubspec.yaml文件中:
dependencies:
  flutter:
    sdk: flutter
  flutter_localizations: # Add this line
    sdk: flutter         # Add this line
  • 接下來,運(yùn)行pub get packages,然后導(dǎo)入flutter_localizations庫,并指定 localizationsDelegates和supportedLocales為MaterialApp:
import 'package:flutter_localizations/flutter_localizations.dart';
2. 添加您自己的本地化消息
  • 一旦flutter_localizations包被添加,使用下面的說明本地化的文本添加到您的應(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/l10napp_en.arb文件提供模板,生成的本地化放置在app_localizations.dart文件中。
    {
        "helloWorld": "Hello World!",
        "@helloWorld": {
          "description": "The conventional newborn programmer greeting"
        }
    }
    
    1. 接下來,在同一目錄中添加一個(gè)app_zh.arb文件,用于同一消息的中文翻譯:
    {
      "helloWorld": "你好世界!"
    }
    
    1. 現(xiàn)在,運(yùn)行您的應(yīng)用程序,以便進(jìn)行代碼生成。您應(yīng)該會在 ${FLUTTER_PROJECT}/.dart_tool/flutter_gen/gen_l10n.
    2. 添加的import語句app_localizations.dart,并AppLocalizations.delegate 在調(diào)用的構(gòu)造MaterialApp。
    import 'package:flutter_gen/gen_l10n/app_localizations.dart';
    

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

    1. 在您的應(yīng)用程序中的任何位置使用 AppLocalizations。此處,翻譯后的消息用于文本小部件。
    Text(AppLocalizations.of(context)!.helloWorld);
    
    1. 您還可以使用生成的localizationsDelegates和supportedLocales列表,而不是手動提供它們。
    const MaterialApp(
      title: 'Localizations Sample App',
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      supportedLocales: AppLocalizations.supportedLocales,
    );
    
  • 注意: 如果需要繼續(xù)增加別的國際語言,只需要重復(fù)第5步即可,在同一目錄中添加一個(gè)app_es.arb文件,運(yùn)行項(xiàng)目,即可自動在.dart_tool/flutter_gen/gen_l10n目錄中新增相應(yīng)的文件,然后修改app_es.arb文件后,重新運(yùn)行即可,app_localizations_es.dart文件會自動更新,如果在app_es.arb中找不到app_en.arb對應(yīng)的值,會直接用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)用程序支持的語言環(huán)境,請使用以下說明:

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

  2. Project Navigator 中,打開項(xiàng)目文件夾Runner下的Runner文件夾下的Info.plist文件。

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

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

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


高級語言環(huán)境定義

一些具有多種變體的語言需要的不僅僅是語言代碼才能正確區(qū)分。
例如,完全區(qū)分中文的所有變體需要指定語言代碼、腳本代碼和國家代碼。這是由于簡繁體文字的存在,以及在同一文字類型中書寫字符的方式存在地區(qū)差異。
為了充分表達(dá)國家代碼CN、TW和HK的每個(gè)中文變體,支持的語言環(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ū)分這些國家/地區(qū)代碼的所有組合,并為這些國家/地區(qū)代碼的所有組合提供完全細(xì)致入微的本地化內(nèi)容。如果未指定用戶的首選語言環(huán)境,則使用最接近的匹配項(xiàng),這可能包含與用戶期望的差異。Flutter 僅解析為supportedLocales. Flutter 為常用語言提供了 scriptCode 差異化的本地化內(nèi)容。有關(guān)Localizations如何解析支持的語言環(huán)境和首選語言環(huán)境的信息,請參閱。
盡管中文是主要示例,但其他語言(如法語 ( fr_FR, fr_CA) )也應(yīng)完全區(qū)分,以實(shí)現(xiàn)更細(xì)微的本地化

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

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

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

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

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

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

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

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

MaterialApp(
  localeResolutionCallback: (
    Locale? locale,
    Iterable<Locale> supportedLocales,
  ) {
    return locale;
  },
);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容