Flutter本地化管理插件locale_manager的使用

Flutter本地化管理插件locale_manager的使用

LocaleManagerPlugin 是一个 Flutter 插件,允许你更新应用的原生语言设置,适用于 iOS 和 Android。这在你需要动态更改应用程序语言时非常有用。

使用

要使用此插件,请在 pubspec.yaml 文件中添加 locale_manager 作为依赖项。

dependencies:
  locale_manager: any

可用方法

  • setLocale: 设置应用的原生语言。参数:locale (String) - 要设置的语言代码(例如:en-US, pt-BR)。
  • getLocale: 返回当前的应用语言。
  • getLocalized: 返回特定键的本地化字符串。

示例

请参考示例项目中的演示应用:

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 此小部件是您的应用程序的根。
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Locale Manager',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Locale Manager Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late final TextEditingController _controller;
  late final LocaleManager _locale;

  String? _nativeText;

  @override
  void initState() {
    _locale = LocaleManager();
    _controller = TextEditingController();
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      final locale = await _locale.getLocale();
      _controller.text = locale.toLanguageTag();

      await _fetchText();
    });
    super.initState();
  }

  Future<void> _onPressed() async {
    await _locale.setLocale(_controller.text.trim());
    await _fetchText();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              controller: _controller,
              decoration: const InputDecoration(
                labelText: 'Locale',
              ),
            ),
            Text(
              _nativeText ?? 'Dart Text',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _onPressed,
        tooltip: '更新语言',
        child: const Icon(Icons.language),
      ), // 这个尾随逗号使自动格式化更美观。
    );
  }

  Future<void> _fetchText() async {
    final text = await _locale.getLocalized('TEXT');
    debugPrint('获取到的文本: $text');
    if (!mounted) {
      return;
    }

    setState(() {
      _nativeText = text ?? '未找到本地化文本';
    });
  }
}

限制

iOS 插件仅在指定的语言被应用程序支持时才会更新视图。如果语言不被支持,应用程序将继续使用之前的语言,直到重新启动。

贡献

欢迎贡献。请打开一个 PR。请注意,该项目仍处于早期阶段,可能会有一些错误。如果您发现任何问题,请打开一个 issue。

我们需要帮助的部分:

  • ❌ 添加测试
  • ❌ Web 支持
  • ❌ macOS 支持
  • ❌ Windows 支持
  • ❌ Linux 支持

许可证

该项目根据 MIT 许可证授权 - 详情请参阅 LICENSE 文件。


更多关于Flutter本地化管理插件locale_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter本地化管理插件locale_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


locale_manager 是一个用于管理 Flutter 应用本地化的插件。它可以帮助开发者轻松地管理应用的本地化资源,并在运行时切换应用的语言。以下是 locale_manager 的基本使用方法:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 locale_manager 的依赖:

dependencies:
  flutter:
    sdk: flutter
  locale_manager: ^2.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 LocaleManager

在你的应用的 main.dart 文件中,初始化 LocaleManager

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 LocaleManager
  await LocaleManager.instance.initialize();

  runApp(MyApp());
}

3. 配置本地化资源

pubspec.yaml 文件中配置你的本地化资源。例如:

flutter:
  assets:
    - assets/locales/en.json
    - assets/locales/es.json

然后在 assets/locales 目录下创建对应的 JSON 文件,如 en.jsones.json,内容如下:

en.json:

{
  "hello": "Hello",
  "world": "World"
}

es.json:

{
  "hello": "Hola",
  "world": "Mundo"
}

4. 使用 LocaleManager 获取本地化字符串

在你的应用中使用 LocaleManager 来获取本地化字符串:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('LocaleManager Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(LocaleManager.instance.translate('hello')),
              Text(LocaleManager.instance.translate('world')),
            ],
          ),
        ),
      ),
    );
  }
}

5. 切换语言

你可以使用 LocaleManager 来动态切换应用的语言。例如:

FlatButton(
  onPressed: () {
    LocaleManager.instance.setLocale('en');
  },
  child: Text('Switch to English'),
),
FlatButton(
  onPressed: () {
    LocaleManager.instance.setLocale('es');
  },
  child: Text('Switch to Spanish'),
),

6. 监听语言变化(可选)

你可以监听语言的变化,并在语言切换时更新 UI:

LocaleManager.instance.addListener(() {
  // 更新 UI
  setState(() {});
});

7. 获取当前语言

你可以使用 LocaleManager 来获取当前语言:

String currentLocale = LocaleManager.instance.currentLocale;
回到顶部