Flutter语言处理插件languagehandling的使用

Flutter语言处理插件languagehandling的使用

语言处理

语言处理是一个用于在Flutter应用中处理多语言本地化的包。

开始使用

前提条件

在使用该包之前,请确保已安装Flutter。

安装

pubspec.yaml文件中添加以下依赖项:

dependencies:
  languagehandling: ^1.0.0

Android配置

android/app/build.gradle文件中,确保有以下配置:

android {
    ...

    defaultConfig {
        ...
        minSdkVersion 21
        ...
    }
    ...
}

如何使用

准备语言源

创建一个Dart文件,其中包含应用程序所需的所有语言映射数据。你可以根据需要更改文件名、类名和文件路径。例如:

const List<MapLocale> LOCALES = [
  MapLocale("en", LocalData.EN),
  MapLocale("de", LocalData.DE),
  MapLocale("zh", LocalData.ZH)
];

mixin LocalData {
  static const String title = 'title';
  static const String body = 'body';

  static const Map<String, dynamic> EN = {
    title: 'localization',
    body: 'Welcome to this localization flutter application %a'
  };

  static const Map<String, dynamic> DE = {
    title: 'Lokalisierung',
    body: 'Willkommen bei dieser Lokalisierungs-Anwendung %a'
  };

  static const Map<String, dynamic> ZH = {
    title: '本地化',
    body: '欢迎使用这个本地化  应用程序 %a'
  };
}

项目配置

初始化LanguageHandling对象。这可以在局部或全局范围内进行,具体取决于你的偏好:

final LanguageHandling localization = LanguageHandling.instance;
初始化MapLocale列表和启动语言

main.dart文件或MaterialApp小部件内执行以下步骤以初始化MapLocale列表并设置应用程序的启动语言:

@override
void initState() {
    configureLocalization();
    super.initState();
}

@override
Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Language Testing',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.black),
        useMaterial3: true,
      ),
      supportedLocales: localization.supportedLocales,
      localizationsDelegates: localization.localizationsDelegates,
      home: const Homepage(),
    );
}

void configureLocalization() {
    localization.init(
        mapLocales: LOCALES, initLanguageCode: "en"); // Pass LOCALES here
    localization.onTranslatedLanguage = onTranslatedLanguage;
}

void onTranslatedLanguage(Locale? locale) {
    setState(() {});
}

使用

包括一些简短且有用的示例供用户参考。较长的示例可以添加到/example文件夹中。

const like = 'sample';

更多关于Flutter语言处理插件languagehandling的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter语言处理插件languagehandling的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中处理多语言支持通常使用 flutter_localizations 包,结合 intl 包来实现国际化(i18n)。以下是如何使用这些插件来处理应用的多语言支持的基本步骤。

1. 添加依赖

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

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

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

2. 创建本地化文件

lib 目录下创建一个 l10n 文件夹,然后在其中创建 arb 文件,例如 app_en.arbapp_es.arb。这些文件将包含不同语言的翻译。

app_en.arb:

{
  "helloWorld": "Hello World!",
  "@helloWorld": {
    "description": "The conventional newborn programmer greeting"
  }
}

app_es.arb:

{
  "helloWorld": "¡Hola Mundo!",
  "@helloWorld": {
    "description": "El saludo convencional del programador recién nacido"
  }
}

3. 生成本地化类

使用 intl 工具生成本地化类。首先,确保你已经安装了 intl 工具:

flutter pub global activate intl_utils

然后在项目根目录下运行以下命令来生成本地化类:

flutter pub run intl_utils:generate

这将生成一个 AppLocalizations 类,包含所有翻译的字符串。

4. 配置 MaterialApp

main.dart 中配置 MaterialApp 使用本地化:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        S.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: S.delegate.supportedLocales,
      home: MyHomePage(),
    );
  }
}

5. 使用本地化字符串

在应用中使用生成的本地化字符串:

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

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

6. 切换语言(可选)

如果你希望在应用中动态切换语言,可以使用 LocalesetState 来实现。

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Locale _locale = Locale('en');

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(S.of(context).helloWorld),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(S.of(context).helloWorld),
            ElevatedButton(
              onPressed: () => _changeLanguage(Locale('en')),
              child: Text('English'),
            ),
            ElevatedButton(
              onPressed: () => _changeLanguage(Locale('es')),
              child: Text('Español'),
            ),
          ],
        ),
      ),
    );
  }
}

7. 配置 MaterialApp 支持动态语言切换

确保 MaterialApp 支持动态语言切换:

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      locale: _locale, // 添加这一行
      localizationsDelegates: [
        S.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: S.delegate.supportedLocales,
      home: MyHomePage(),
    );
  }
}
回到顶部