簡體   English   中英

Flutter如何檢測設備語言?

[英]Flutter how to detect device language?

我有一個問題,我如何檢測設備語言並根據應用程序啟動時最初給出正確的語言? 如果可能,請提供帶有代碼的示例。

調用Localizations.localeOf(context).languageCode應該會返回語言代碼。 如果未提供 MaterialApp 會創建並使用默認本地化,然后您可以在 MaterialApp 之后調用它以了解它當前使用設備的語言,並使用您的 State Managament 使用該信息更新您的應用程序。

對於一個簡單的項目,我的建議是將此插件用於 VS IDE(或用於 Android Studio,它來自同一作者)。 安裝后只需將依賴項添加到您的 pubspec.yaml

dependencies:
  // Other dependencies...
  flutter_localizations:
    sdk: flutter

  ...

  flutter_intl:
    enabled: true
    class_name: S # Optional. Sets the name for the generated localization class. Default: S
    main_locale: en # Optional. Sets the main locale used for generating localization files. Provided value should comply with ISO-639-1 and ISO-3166-1 (e.g. "en", "en_GB"). Default: en

在 Android Studio 中(我真的不知道在哪里 VS 對不起)檢查Tools > Flutter intl (它應該在最后),在那里你可以初始化你的項目並添加語言環境。 現在應該在您的項目lib/l10n中有一個包含 arb 文件的文件夾,它們看起來像 JSON 文件,只需添加帶有字符串的鍵。 為您想要的每個語言環境創建一個,並為他們提供每種語言的字符串參數

intl_en.arb { "name": "我有一個名字" }

intl_es.arb { "name": "Yo tengo un Nombre" }

它應該自動運行構建。 之后創建您的 Material App 委派 S(將生成的代碼的名稱,您可以稍后根據需要更改名稱)。

import 'package:flutter_localizations/flutter_localizations.dart';
import 'generated/l10n.dart';

class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return new MaterialApp(
            localizationsDelegates: [
                S.delegate, //The class S
                GlobalMaterialLocalizations.delegate,
                GlobalWidgetsLocalizations.delegate,
                GlobalCupertinoLocalizations.delegate,
            ],
            supportedLocales: S.delegate.supportedLocales,
            title: 'Flutter Demo',
            home: MyHomePage(),
        );
    }
}

現在您可以在 Widget 樹中使用它

class MyHomePage extends StatelessWidget{
   @override
   Widget build(BuildContext context){
     return Text(S.of(context).name) 
     // now it prints the string of name depending the language the device is
   }
}

如果設備使用您不支持的語言(在我的情況下為法語),它將使用 class 的默認語言,en('英語),如果您想使用另一種作為默認語言,請檢查 pubspec 中的 main_locale

如果您想嘗試不同的方法,請查看如何使用 JSON 鍵使用國際化的示例

您可能會在Internationalizing Flutter Apps 文檔中找到您要搜索的所有內容!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM