Flutter国际化支持教程

Flutter国际化支持教程

3 回复

菜鸟教程有详细介绍,建议先了解MessageInterpolator机制。

更多关于Flutter国际化支持教程的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


设置Locale,使用ResourceBundle加载不同语言文件,动态切换语言。

Flutter 国际化支持可以通过 flutter_localizations 包来实现。以下是实现国际化的基本步骤:

1. 添加依赖

pubspec.yaml 文件中添加 flutter_localizationsintl 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  intl: ^0.17.0

然后运行 flutter pub get 来安装依赖。

2. 创建本地化文件

lib 目录下创建一个 l10n 文件夹,并在其中创建 app_localizations.dart 文件:

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'l10n/messages_all.dart';

class AppLocalizations {
  static Future<AppLocalizations> load(Locale locale) {
    final String name = locale.countryCode.isEmpty ? locale.languageCode : locale.toString();
    final String localeName = Intl.canonicalizedLocale(name);
    return initializeMessages(localeName).then((_) {
      Intl.defaultLocale = localeName;
      return AppLocalizations();
    });
  }

  static AppLocalizations of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations);
  }

  String get helloWorld => Intl.message('Hello, World!', name: 'helloWorld');
}

3. 生成本地化文件

l10n 文件夹中创建 intl_messages.arb 文件,内容如下:

{
  "helloWorld": "Hello, World!"
}

然后运行以下命令生成本地化文件:

flutter pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/l10n/app_localizations.dart lib/l10n/intl_messages.arb

4. 配置 MaterialApp

main.dart 中配置 MaterialApp 以支持国际化:

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'l10n/app_localizations.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        const Locale('en', ''),
        const Locale('es', ''),
      ],
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(AppLocalizations.of(context).helloWorld),
      ),
      body: Center(
        child: Text(AppLocalizations.of(context).helloWorld),
      ),
    );
  }
}

5. 添加更多语言

要为其他语言添加支持,只需在 l10n 文件夹中创建相应的 .arb 文件,并重新生成本地化文件。

6. 运行应用

现在,你的应用已经支持国际化了。你可以通过更改设备的语言设置来测试不同的语言。

总结

通过以上步骤,你可以在 Flutter 应用中实现国际化支持。flutter_localizationsintl 包使得处理多语言变得简单且高效。

回到顶部