[英]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.