flutter如何设置locale国际化

在Flutter中如何正确设置Locale来实现应用的国际化?我尝试使用MaterialApplocale属性,但切换语言时界面没有实时更新。请问除了设置locale,还需要配置哪些内容?如何实现动态语言切换并保证界面即时刷新?

2 回复

在Flutter中设置Locale国际化,需在MaterialApp中配置supportedLocales和localizationsDelegates。例如:

MaterialApp(
  supportedLocales: [
    Locale('zh', 'CN'),
    Locale('en', 'US'),
  ],
  localizationsDelegates: [
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
  ],
)

同时使用intl包管理翻译文件。

更多关于flutter如何设置locale国际化的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中设置Locale国际化主要通过以下步骤实现:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

2. 创建本地化资源

在项目根目录创建 l10n 文件夹,添加 app_localizations.dart

import 'package:flutter/material.dart';

class AppLocalizations {
  static final Map<String, Map<String, String>> _localizedValues = {
    'en': {
      'title': 'Hello World',
      'login': 'Login',
    },
    'zh': {
      'title': '你好世界',
      'login': '登录',
    },
  };

  final Locale locale;

  AppLocalizations(this.locale);

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

  String get title {
    return _localizedValues[locale.languageCode]!['title']!;
  }

  String get login {
    return _localizedValues[locale.languageCode]!['login']!;
  }
}

3. 配置MaterialApp

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('en', 'US'), // 英语
        Locale('zh', 'CN'), // 中文
      ],
      locale: Locale('zh', 'CN'), // 设置默认语言
      home: MyHomePage(),
    );
  }
}

4. 使用本地化文本

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

5. 动态切换语言

// 在需要切换语言的地方
Locale newLocale = Locale('en', 'US');
// 重启应用或使用状态管理更新

这样就完成了Flutter的国际化设置。可以根据需要添加更多语言支持。

回到顶部