📜  Flutter – 国际化

📅  最后修改于: 2021-09-02 05:22:40             🧑  作者: Mango

国际化是指应用以不同的区域语言提供以更好地覆盖人们的术语。为此,我们必须以不同的语言提供一个应用程序,并为它们提供合适的布局。 Flutter提供了国际化应用程序的方法。我们将讨论如何本地化MaterialApp

Flutter支持 78 种不同的语言。默认情况下,英语(美国)是本地化语言。

设置应用程序:

首先,我们必须在pubspec.yaml依赖文件中添加以下代码行,如下所示:

dependencies:
 flutter:
   sdk: flutter
 flutter_localizations: # ADD
   sdk: flutter         # ADD
 intl: ^0.17.0-nullsafety.2   # ADD

pubspec.yaml的flutter部分添加代码:

generate: true

单击 pub get 以获取所有依赖项。

现在在项目的根目录中创建一个新的yaml 文件(如l10n.yaml) ,内容如下:

arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart

在 lib 目录中添加一个名为l10n的目录,然后添加语言的文件。在这里,我们将添加两种语言的数据,即英语和印地语。

Name: app_en.arb
Content:
{
  "helloWorld": "GeeksforGeeks",
  "displayText":"This is a sample App",
  "@helloWorld": {
    "description": "SampleApp for GeeksforGeeks"
  }
}

而对于第二个文件

Name: app_hi.arb
Content:
{
  "helloWorld": "गीक्स फॉर गीक्स ",
  "displayText":"यह एक सैंपल ऐप है"
}

现在重新启动应用程序,以便app_localizations. dart文件在以下目录中生成:

.dart_tools/flutter_get/genl10n

现在我们必须编写以下代码行来使应用程序国际化 –

首先,我们必须导入app_localizations然后我们必须将以下两个属性添加到MaterialApp

import 'package:flutter_gen/gen_l10n/app_localizations.dart';
  • localizationsDelegates 属性:它定义了应用程序的所有本地化资源。
  • supportedLocales 属性:它提供了应用程序支持的语言列表。
  • onGeneratedTitle 属性:在设置小部件后调用它,这意味着本地化可用。

例子:

Dart
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
  
void main() {
  runApp(MyApp());
}
  
class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      onGenerateTitle: (context) => AppLocalizations.of(context).helloWorld,
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      supportedLocales: AppLocalizations.supportedLocales,
      theme: ThemeData(primarySwatch: Colors.green),
      home: MyHomePage(),
    );
  }
}
  
class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
  
class _MyHomePageState extends State {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(AppLocalizations.of(context).helloWorld),
      ),
      body: Center(
        child: Text(
          AppLocalizations.of(context).displayText,
          style: TextStyle(fontSize: 30),
        ),
      ),
    );
  }
}


输出:

我们可以通过在设置中更改设备的语言来切换语言。

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!