Flutter插件inu的使用_Inu是一个用于 Flutter 应用程序的简单本地化工具

Flutter插件inu的使用_Inu是一个用于 Flutter 应用程序的简单本地化工具

Inu 🐕 #

特性 #

Inu 是一个用于 Flutter 应用程序的简单本地化工具。它基于从包含应用程序所有字符串的结构化 YAML 文件生成的类。

每个区域文件都会生成一个区域类。
一旦生成,您就可以通过一个继承自 Inu 的类实例来访问这些字符串。

开始使用 #

所有的本地化文件应该具有相同的 YAML-map 结构。每个键的值应该包含每种语言的翻译字符串。

  • 将您的本地化文件放在目录 assets/translations/
  • 在您的 Flutter 应用中将 Inu 添加到依赖项中,使用命令 flutter pub add inu
  • 运行 dart run inu:init 来首次生成区域类

使用方法 #

Inu 创建了一个名为 Inu 的抽象类,每个其他区域类都实现该类。该类是从开发过程中使用的主语言生成的。

如果您没有提供任何翻译,则会使用 Inu 类中的字符串(就像一个“回退区域”)。

类生成 #</h>

如果您向您的区域文件中添加了更多的字符串,可以运行以下命令:

dart run inu:gen_classes

或者如果您使用 just,可以运行:

just inu

Inu 在生成过程中检查区域文件的完整性。一旦发现未翻译的字符串,您可以在终端提示中立即翻译它们或跳过该过程。

一旦类已经生成,您可以通过使用 Inu 的实例作为所有字符串的容器来继续使用。

特定语言的翻译可以通过 InuLocale 枚举选择。

Inu chooseLocale() {
  final String locale = Locale(Platform.localeName).languageCode;
  return InuLocale.select(locale) ?? InuLocale.en_US.inu;
}

字符串插入 #

您也可以在形式为 List<String> 的参数或命名参数的 Map<String, String> 中使用字符串,并使用 StringText() 扩展的 tr() 方法。
只需在您的区域文件中的字符串值中添加花括号,如下所示:

arguments: 这个字符串包含 {} 和 {}
namedArguments: 你好,我的名字是 {firstname} {surname}

然后使用 tr() 扩展的方法如下:

Text(inu.arguments).tr(args: ['有趣的', '单词']);
String greeting = inu.namedArguments.tr(namedArgs: { 
    'firstname' : '瑞安',
    'surname' : '斯特肯'});

查看 示例 以获取 Flutter 演示应用的翻译版本!

区域文件的结构 #

您应该按简单的映射形式(没有列表或纯文本)来组织您的文件。所有文件的映射结构必须相同。

英语区域文件 #

title: 应用
section1:
  undersection1:
    key1 : 值
    key2: "很棒的值"
  anotherKey : 另一个值

section2:
  supriseKey: ""吓人的!"
  arguments: 这个字符串包含 {} 和 {}
  namedArguments: 你好,我的名字是 {firstname} {surname}

end: 这是结束

德语区域文件 #

title: 应用
section1:
  undersection1:
    key1 : 值
    key2: "很棒的值"
  anotherKey : 另一个值

section2:
  supriseKey: ""吓人的!"
  arguments: 这个字符串包含 {} 和 {}
  namedArguments: 你好,我的名字是 {firstname} {surname}

end: 这是结束

示例代码

import 'dart:io';

import 'package:flutter/material.dart';

import 'inu_classes/de-DE.g.dart';
import 'inu_classes/en-US.g.dart';
import 'inu_classes/inu.g.dart';

late final Inu inu;

Inu chooseLocale() {
  final String langCode =
      Locale(Platform.localeName).languageCode.replaceAll('_', '-');

  switch (langCode) {
    case 'de-DE':
      return DeDE();
    default:
      return EnUS();
  }
}

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    inu = chooseLocale();
    return MaterialApp(
      title: inu.general.appTitle,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: MyHomePage(title: inu.general.appBar),
    );
  }
}

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

  final String title;

  [@override](/user/override)
  State&lt;MyHomePage&gt; createState() =&gt; _MyHomePageState();
}

class _MyHomePageState extends State&lt;MyHomePage&gt; {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/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: &lt;Widget&gt;[
            Text(
              inu.mainPage.buttonCounterMsg,
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: inu.mainPage.increment,
        child: const Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter插件inu的使用_Inu是一个用于 Flutter 应用程序的简单本地化工具的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件inu的使用_Inu是一个用于 Flutter 应用程序的简单本地化工具的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,如果你遇到“功能未定义插件inu”的错误,通常意味着你尝试使用了一个不存在的插件或包,或者你在代码中引用了一个未定义的插件。以下是一些可能的原因和解决方法:

1. 检查插件名称拼写

确保你在pubspec.yaml文件中正确拼写了插件的名称。例如:

dependencies:
  flutter:
    sdk: flutter
  inu: ^1.0.0  # 确保插件名称正确

如果inu插件不存在,你可能会遇到错误。

2. 查找正确的插件

如果你不确定是否存在名为inu的插件,可以在 pub.dev 上搜索相关插件。如果找不到,可能需要使用其他插件来实现你需要的功能。

3. 检查插件的导入

确保你在pubspec.yaml文件中正确添加了插件,并且在代码中正确导入了插件。例如:

import 'package:inu/inu.dart';  // 确保导入路径正确

如果导入路径不正确,Flutter 将无法识别插件。

4. 运行flutter pub get

在添加或修改pubspec.yaml文件后,确保运行以下命令以获取依赖项:

flutter pub get

这将下载并安装所有依赖项。

5. 检查插件版本

如果你使用的是特定版本的插件,确保该版本存在并且与你的Flutter版本兼容。你可以在pubspec.yaml文件中指定插件的版本号。

6. 自定义插件

如果inu是你自己开发的插件,确保它已经正确构建并发布到本地或远程仓库。你可以通过以下步骤来使用本地插件:

dependencies:
  inu:
    path: ../path_to_your_plugin  # 指定本地路径

7. 错误信息分析

如果错误信息中提到了具体的未定义功能,检查该功能是否在插件中正确定义。你可以查看插件的文档或源代码以确认。

8. 重新启动应用

有时候,Flutter 可能需要重新启动才能正确加载插件。你可以尝试停止并重新启动应用。

9. 清理项目

如果问题仍然存在,尝试清理项目并重新构建:

flutter clean
flutter pub get
flutter run
回到顶部