Flutter翻译弹窗插件flutter_translation_sheet的使用

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

Flutter翻译弹窗插件flutter_translation_sheet的使用

flutter_translation_sheet 是一个强大的工具,用于管理Flutter应用中的多语言支持。它通过Google Sheets进行自动翻译和同步,并生成相应的代码文件。以下是如何使用该插件的详细指南。

安装步骤

1. 添加依赖

在你的 pubspec.yaml 文件中添加 flutter_translation_sheet 作为开发依赖:

dev_dependencies:
    flutter_translation_sheet: ^1.0.31

或者全局安装:

flutter pub global activate flutter_translation_sheet

如果你使用的是开发依赖,请在项目根目录运行:

dart run flutter_translation_sheet:main

默认情况下,运行时会执行 run 命令。例如,如果你想运行 fetch 命令:

dart run flutter_translation_sheet:main fetch

2. 创建配置文件

在项目根目录运行 fts 来创建模板配置文件 trconfig.yaml

fts

配置文件示例

trconfig.yaml 示例:

fts:
  entry_file: strings/app.yaml
  param_output_pattern: "{{*}}"
  dart:
    output_dir: lib/i18n
    keys_id: Strings
    translations_id: Translations
    use_maps: false
    output_fts_utils: true
    
  locales:
    - en
    - es
  gsheets:
    use_iterative_cache: false
    credentials_path: "PATH_TO_YOUR_CREDENTIALS"
    spreadsheet_id: "SPREADSHEET_ID"
    worksheet: Sheet1

Google 凭证配置

有两种方式可以配置凭证:

  1. 使用路径:
gsheets:
  credentials_path: c:/my_project/credentials.json or ./credentials.json

注意:Windows用户请使用双反斜杠或正斜杠。

  1. 直接嵌入凭证内容:
gsheets:
  credentials: {
    "type": "service_account",
    "project_id": "project-id",
    "private_key_id": "",
    "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCB-----END PRIVATE KEY-----\n",
    "client_email": "gsheets@project.iam.gserviceaccount.com",
    "client_id": "123456",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gsheets%40evolution-cp-calculator.iam.gserviceaccount.com"
  }

使用命令

运行命令

在终端中进入你的Flutter项目目录并运行:

fts run

第一次运行会创建一个模板,并要求你提供Google凭证json文件。

监听文件变化

你可以让 fts 监听文件变化:

fts run --watch

退出监听器使用 q 然后按 Enter

提取字符串

提取Dart代码中的字符串:

fts extract --path path/to/dart/files --output path/to/output

下载最新数据

从Google Sheets下载最新数据并生成文件:

fts fetch

示例Demo

以下是一个简单的Flutter应用示例,展示如何使用生成的翻译文件:

import 'package:flutter/material.dart';
import 'package:flutter_translation_sheet/flutter_translation_sheet.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: MyHomePage(title: 'Flutter Demo Home Page'),
      localizationsDelegates: const [Fts.delegate],
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        actions: [
          LangPickerMaterial(
            onSelected: (locale) {
              Fts.locale = locale;
            },
            selected: Fts.locale,
          ),
        ],
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Hello world'.tr()),
            Text('Welcome back {{user}}, today is {{date}}.'.tr(namedArgs: {'user': 'John', 'date': '2023-10-10'})),
          ],
        ),
      ),
    );
  }
}

以上示例展示了如何集成 flutter_translation_sheet 并使用生成的翻译文件来实现多语言支持。希望这个指南对你有所帮助!如果有任何问题,请参考官方文档或社区资源。


更多关于Flutter翻译弹窗插件flutter_translation_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter翻译弹窗插件flutter_translation_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用flutter_translation_sheet插件的示例代码。这个插件允许你在应用中显示一个翻译弹窗,让用户能够轻松地在不同语言之间切换。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_translation_sheet: ^最新版本号  # 请替换为实际最新版本号

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

接下来是一个简单的示例,展示如何使用flutter_translation_sheet

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:flutter_translation_sheet/flutter_translation_sheet.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
  1. 设置支持的语言
final List<Locale> supportedLocales = [
  Locale('en', 'US'),
  Locale('es', 'ES'),
  Locale('fr', 'FR'),
  // 添加更多语言支持
];
  1. 创建翻译映射
final Map<Locale, Map<String, String>> translations = {
  Locale('en', 'US'): {
    'hello': 'Hello',
    'goodbye': 'Goodbye',
    // 添加更多翻译
  },
  Locale('es', 'ES'): {
    'hello': 'Hola',
    'goodbye': 'Adiós',
    // 添加更多翻译
  },
  Locale('fr', 'FR'): {
    'hello': 'Bonjour',
    'goodbye': 'Au revoir',
    // 添加更多翻译
  },
  // 添加更多语言的翻译
};
  1. 创建主应用
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Translation Sheet Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      localizationsDelegates: [
        // 添加 Flutter 本地化委托
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: supportedLocales,
      home: TranslationSheetDemo(),
    );
  }
}
  1. 实现翻译弹窗
class TranslationSheetDemo extends StatefulWidget {
  @override
  _TranslationSheetDemoState createState() => _TranslationSheetDemoState();
}

class _TranslationSheetDemoState extends State<TranslationSheetDemo> {
  Locale _currentLocale = Locale('en', 'US');

  void _showTranslationSheet(BuildContext context) {
    showTranslationSheet(
      context: context,
      supportedLocales: supportedLocales,
      currentLocale: _currentLocale,
      translations: translations,
      onLocaleChanged: (Locale newLocale) {
        setState(() {
          _currentLocale = newLocale;
        });
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    final String hello = translations[_currentLocale]!['hello'] ?? 'Hello';
    final String goodbye = translations[_currentLocale]!['goodbye'] ?? 'Goodbye';

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Translation Sheet Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(hello),
            Text(goodbye),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => _showTranslationSheet(context),
              child: Text('Change Language'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个Flutter应用,它使用flutter_translation_sheet插件来显示一个翻译弹窗。用户可以通过点击按钮来打开弹窗,然后选择不同的语言。选择语言后,应用会更新界面以显示相应的翻译文本。

请确保你已经按照插件的文档进行了所有必要的配置,并替换示例中的最新版本号为实际的插件版本号。

回到顶部