我有一个问题,我该如何检测设备语言,并据此在应用程序启动时首先提供正确的语言? 请尽可能提供示例代码。
答案 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中找到您要搜索的所有内容!