Flutter如何检测设备语言?

2024-02-25

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


Calling Localizations.localeOf(context).languageCode应该返回你的语言代码。如果未提供,MaterialApp 将创建并使用默认本地化,然后您可以在 MaterialApp 之后调用它,以了解设备当前使用的语言,并使用您的州管理人员使用该信息更新您的应用程序。

我对一个简单项目的建议是使用这个对于 VS IDE(或this https://plugins.jetbrains.com/plugin/13666-flutter-intl对于 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
   }
}

如果设备使用的是您不支持的语言(在我的例子中是法语),它将使用该类的默认语言 en('英语),如果您想使用另一种语言作为默认语言,请检查 pubspec 中的 main_locale

检查这个Example https://medium.com/flutter-community/flutter-internationalization-the-easy-way-using-provider-and-json-c47caa4212b2如果您想尝试不同的东西,如何使用 JSON 键进行国际化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter如何检测设备语言? 的相关文章

随机推荐

  • npm 只是不会安装 Node sass

    我第一次遇到这个问题是在尝试使用 ionic 时 它需要其模板的依赖关系 然后 当我尝试自己使用 npm 安装 node sass 时 问题仍然存在 这是在Windows 10 Version 1703 both nodejs 6 11 3
  • 从 Android 将联系人插入 SIM 卡

    我在尝试将 Android 联系人应用程序中存在的联系人复制到 SIM 卡时遇到问题 以下是代码 ContentValues cv new ContentValues cv put tag cName cv put number cNumb
  • 使用正则表达式,如何替换没有字符的空格?

    如何从正则表达式中替换许多空 空白字符 前任 div class someClass bunch of elements content div
  • 从另一个函数名计算一个函数名

    在 python 3 4 中 我希望能够出于测试目的制作一个非常简单的调度表 这个想法是有一个字典 键是要测试的函数名称的字符串 数据项是测试函数的名称 例如 myTestList myDrawFromTo myDrawLineDir my
  • 如何使用 animate 方法进行连续循环?

    如何使用一个连续循环动画animate 在这个例子中 我想做的就是无休止地旋转一个白色方块 myBall new Layer x 100 y 100 width 200 height 200 borderRadius 20px backgr
  • Excel VBA:获取单击按钮的行[重复]

    这个问题在这里已经有答案了 我正在尝试在 Excel 中创建一个按钮 将特定范围的单元格从活动工作簿复制到另一个工作簿 当我指定固定范围时 该范围的复制工作得很好 但我对如何找出单击的按钮的行感到困惑 每行包含 7 个左右的单元格 第 8
  • 无法获取总金额

    大家好 我已经解决了最初的问题 但现在它无法正确添加 我不确定该怎么做以及我哪里出了问题 任何帮助 将不胜感激 导入java util Scanner 公开课动物园 公共静态无效主 字符串 args int quantity confirm
  • 微调器的文本大小

    如何减小微调器的字体大小 我已将微调器大小减小到 35 像素 因此我的文本被切成两半 我怎么做 我也不希望事先选择任何东西 默认文本应该是 select some value 经过一些测试 有一个比继承 ArrayAdapter 更简单的方
  • 如何在自定义控件中包含光标(插入符号)?

    我被指派用 C 和 Windows 窗体制作自定义网格控件 我不确定的一件事是如何处理显示闪烁的光标 插入符号 以指示单元格编辑正在进行的位置以及将显示下一个字符 有谁知道这是如何使用标准文本框完成的 是否有一个标准框架结构可以为我做到这一
  • 列表理解中的 if/else

    我有一个清单xs包含字符串的混合物和None价值观 如何使用列表理解在每个字符串上调用函数 但将None价值观 而不是将它们传递给函数 I tried f x for x in xs if x is not None else 但它给出了S
  • 阿拉伯标签在 Geoserver 中无法正确显示

    我已随 Tomcat 安装了 geoserver 但文本标签无法正确显示 我在哪里可以设置geosever中的阿拉伯编码 标签在 QGIS 中显示得很好 但是当我将其发布到 geoserver 中时 我遇到了这个问题 1 https i s
  • 在 Bash 中比较两个字符串时出现“找不到命令”错误

    我的整个脚本目前是这样的 bin sh clear blanko Dummy Variablen variable Testvariable if variable blanko then echo Nichts da else echo
  • React setState 不更新状态

    所以我有这个 let total newDealersDeckTotal reduce function a b return a b 0 console log total tittal outputs correct total set
  • 如何增加 Google Cloud Run 中的内存限制?

    我正在使用 Cloud Run Cloud Firestore 构建一个简单的基于 Flask 的应用程序 有一种方法会带来大量数据 并且日志显示此错误 Memory limit of 244M exceeded with 248M use
  • 为什么 Python 装饰器不能跨定义链接?

    为什么以下两个脚本不等效 摘自另一个问题 了解 Python 装饰器 https stackoverflow com questions 739654 understanding python decorators def makebold
  • 在Webpack中构建dist文件夹后,如何将bundle.js和css文件移动到statics文件夹中?

    当我运行我的npm run build or npm run build dev 它在根目录中创建index html manage2 bundle js 和manage2 css 文件 我需要将这些文件移动到静态目录中 因此 下面生成的i
  • 有没有一种简单的方法可以在 Google 云中的项目之间克隆 SQL 实例?

    我想知道是否存在一种简单的方法可以在 Google Cloud 中的项目之间克隆 sql 实例 我知道我可以将数据导出到存储桶 请参阅img 1 但我发现这有点麻烦 如果有人有一个简单的方法来做到这一点 我们将不胜感激 没有 快速 方法可以
  • Pandas:合并数据框而不创建新列

    我有 2 个具有相同列的数据框 df1 pd DataFrame Abe 1 True Ben 2 True Charlie 3 True columns Name Number Other df2 pd DataFrame Derek 4
  • 使用 Python 加载 SQL_VARIANT 数据类型时出错

    我正在使用 Python 2 7 和 SQLAlchemy 0 7 8 来查询我没有创建的数据库 我在查询包含以下内容的表时遇到问题SQL VARIANT数据类型 我收到错误 sqlalchemy exc DBAPIError 错误 ODB
  • Flutter如何检测设备语言?

    我有一个问题 如何检测设备语言 并据此在应用程序最初启动时给出正确的语言 如果可能 请提供带有代码的示例 Calling Localizations localeOf context languageCode应该返回你的语言代码 如果未提供