Dart与Flutter教程 国际化支持完全指南

Dart与Flutter教程 国际化支持完全指南

3 回复

推荐看官方文档,实践出真知,多敲代码试试。

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


推荐看官方文档,有详细步骤和代码示例,保证不迷路。

在Flutter应用中实现国际化支持,可以确保应用能够适应不同语言和地区的用户。以下是实现国际化支持的完整指南:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_localizationsintl 依赖:

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

2. 创建本地化文件

lib/l10n 目录下创建 intl_en.arbintl_zh.arb 文件,分别用于存储英文和中文的翻译内容。

intl_en.arb:

{
  "title": "Hello World",
  "button": "Click Me"
}

intl_zh.arb:

{
  "title": "你好世界",
  "button": "点击我"
}

3. 生成本地化类

使用 flutter pub run intl_translation:generate_from_arb 命令生成本地化类。运行以下命令:

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

这将在 lib/l10n 目录下生成 messages_all.dartmessages_en.dartmessages_zh.dart 等文件。

4. 配置MaterialApp

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      localizationsDelegates: [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        const Locale('en', ''), // 英文
        const Locale('zh', ''), // 中文
      ],
      home: MyHomePage(),
    );
  }
}

5. 使用本地化字符串

在需要使用本地化字符串的地方,通过 AppLocalizations.of(context) 获取翻译内容:

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

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

6. 切换语言

可以通过 Locale 来动态切换应用的语言:

Locale _locale = Locale('en');

void _changeLanguage(Locale locale) {
  setState(() {
    _locale = locale;
  });
}

MaterialApp(
  locale: _locale,
  // 其他配置
);

7. 测试

运行应用时,系统会根据设备的语言设置自动选择合适的语言。你也可以通过 _changeLanguage 方法手动切换语言。

通过以上步骤,你的Flutter应用就可以支持多语言国际化了。

回到顶部