Flutter本地化插件fast_localization的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter本地化插件fast_localization的使用

快速本地化解决方案

fast_localization 是一个为 Flutter 应用程序提供的快速本地化解决方案,使用 Dart 的 Map 实现。无需为每个本地化项使用 context

开始使用

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

dependencies:
  fast_localization: <last_version>

示例代码

最小化配置(内置 fast_localization MaterialApp)

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

void main() async {
  // 4. 声明本地化语言
  final locales = {
    Locale('en'): {
      "title": "Demo",
      "welcome": "Hello World!",
    },
    Locale('ar'): {
      "title": "عرض",
      "welcome": "أهلاً بالعالم!",
    },
  };

  // 5. 加载本地化资源
  await Localization.load(locales);

  // 6. 使用 LocalizationApp
  runApp(LocalizationApp(
    title: () => Localization.translate('title'), // MaterialApp(title)
    home: () => HomeScreen(), // MaterialApp(home)
    theme: ThemeData.light(), // MaterialApp(theme)
  ));
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(Localization.translate('title')), // 设置标题
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('😉', style: TextStyle(fontSize: 50)),
            Text(Localization.translate('title'), style: TextStyle(fontSize: 25)),
            SizedBox(height: 60),
            TextButton(
              child: Text('English'),
              onPressed: () {
                Localization.changeLocale(Locale('en'), context); // 切换到英文
              },
            ),
            TextButton(
              child: Text('عربي'),
              onPressed: () {
                Localization.changeLocale(Locale('ar'), context); // 切换到阿拉伯文
              },
            ),
          ],
        ),
      ),
    );
  }
}

灵活配置

如果需要使用自定义的 MaterialAppCupertinoAppWidgetsApp,可以按以下方式配置:

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

void main() async {
  // 4. 声明本地化语言
  final locales = {
    Locale('en'): {
      "title": "Demo",
      "welcome": "Hello World!",
    },
    Locale('ar'): {
      "title": "عرض",
      "welcome": "أهلاً بالعالم!",
    },
  };

  // 5. 加载本地化资源
  await Localization.load(locales);

  // 6. 使用 LocalizationApp
  runApp(LocalizationApp(
    child: (context) => MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: Localization.translate('title'), // 设置标题
      home: HomeScreen(), // 设置首页
      theme: ThemeData.light(), // 设置主题
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        FastLocalizationsDelegate(),
      ],
      supportedLocales: Localization.supportedLocales,
    );
  }
}

使用 LocalizationApp(...)

最小化配置

参数 类型 示例 是否必需
title Function => String () => t(‘title’)
home Function => Widget () => HomeScreen()
theme ThemeData ThemeData.dark()

灵活配置

参数 类型 示例 是否必需
child Function(BuildContext) => Widget (context) => MyApp()

注意:只能选择 MinimalFlexible 中的一种。

使用 Localization

函数

函数 参数 返回值
Localization.load(...) (Map<Locale, Map<String, dynamic>> languages) Future
Localization.changeLocale(...) (Locale locale, [BuildContext context]) Future
Localization.translate(...) (String key, [Map<String, String> params]) String
Localization.t(...) (别名) (String key, [Map<String, String> params]) String

字段

字段 类型 描述
Localization.locale Locale 获取当前区域设置
Localization.supportedLocales List<Locale> 获取支持的区域设置
Localization.languageCountry String 获取当前区域设置的字符串表示形式,如 ‘en_US’

注意:有一个全局别名 Localization.translate(key, params),即 t(key, params)

本地化声明

平坦结构

final en = {
  "title": "Demo",
  "welcome": "Hello World!",
};

使用方法:

Localization.translate('welcome');
Localization.t('welcome');
t('welcome');

嵌套结构

final en = {
  "app": {
    "name": "Demo",
    "description": "A demo app",
  },
};

使用方法:

Localization.translate('app.name');
Localization.t('app.name');
t('app.name');

带参数

final en = {
  "info": {
    "name": "My name is {{name}}",
  },
};

使用方法:

Localization.translate('info.name', {"name": "Hasan"});
Localization.t('info.name', {"name": "Hasan"});
t('info.name', {"name": "Hasan"});

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

1 回复

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


当然,以下是关于如何在Flutter项目中使用fast_localization插件进行本地化的代码案例。fast_localization是一个方便的Flutter插件,用于实现应用的本地化功能。以下步骤将指导你如何配置和使用这个插件。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  fast_localization: ^x.y.z  # 请替换为最新版本号

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

2. 配置本地化资源

android/app/src/main/res目录下创建values文件夹(如果尚未存在),并在其中创建多个以语言代码命名的文件夹(如values-envalues-zh等),每个文件夹中包含一个strings.xml文件。

例如,在values-en文件夹中的strings.xml内容如下:

<resources>
    <string name="app_name">My App</string>
    <string name="welcome_message">Welcome!</string>
</resources>

values-zh文件夹中的strings.xml内容如下:

<resources>
    <string name="app_name">我的应用</string>
    <string name="welcome_message">欢迎!</string>
</resources>

对于iOS,你需要在ios/Runner目录下的InfoPlist.strings文件中添加类似的配置,或者创建Localizable.strings文件。但fast_localization插件主要处理Android资源文件,iOS部分你可能需要手动处理或使用其他插件。

3. 初始化插件

在你的Flutter项目的main.dart文件中,初始化FastLocalization插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FastLocalization(
        child: MyHomePage(),
        supportedLocales: ['en', 'zh'],  // 支持的语言列表
        defaultLocale: 'en',  // 默认语言
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final fastLocalization = FastLocalization.of(context);

    return Scaffold(
      appBar: AppBar(
        title: Text(fastLocalization.translate('app_name')),
      ),
      body: Center(
        child: Text(fastLocalization.translate('welcome_message')),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 切换语言示例,这里切换到中文
          fastLocalization.setLocale('zh');
        },
        tooltip: 'Change Language',
        child: Icon(Icons.translate),
      ),
    );
  }
}

4. 使用翻译功能

在你的组件中,使用FastLocalization.of(context).translate('key')方法来获取翻译后的字符串。

Text(fastLocalization.translate('some_key'))

注意事项

  • 确保你已经正确配置了Android和iOS的本地化资源。
  • fast_localization插件可能不会自动处理iOS的本地化文件,你可能需要手动处理或寻找其他支持iOS本地化的插件。
  • 根据插件的最新文档和API,可能需要对上述代码进行一些调整。

通过上述步骤,你应该能够在Flutter项目中成功集成并使用fast_localization插件进行本地化。

回到顶部