颤振如何检测设备语言?

时间:2020-06-17 15:56:13

标签: flutter internationalization

我有一个问题,我该如何检测设备语言,并据此在应用程序启动时首先提供正确的语言? 请尽可能提供示例代码。

2 个答案:

答案 0 :(得分:1)

致电Localizations.localeOf(context).languageCode应该返回您的languageCode。 MaterialApp会创建并使用默认的本地化(如果未提供),然后您可以在MaterialApp之后调用它,以了解其当前正在使用设备的语言,并使用州管理系统使用该信息更新您的应用。

对于一个简单的项目,我的建议是将此plugin用于VS IDE(对于Android Studio使用this,来自同一作者)。安装后,只需将依赖项添加到您的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_zh.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
   }
}

如果设备使用的语言不支持(例如我的法语),它将使用该类的默认语言,即en(“英语”),如果要使用其他语言,请在pubspec中检查main_locale作为您的默认值

如果您想尝试其他方法,请查看此Example,了解如何对JSON键使用国际化。

答案 1 :(得分:0)

您可能会在Internationalizing Flutter Apps doc中找到您要搜索的所有内容!