Flutter SDK (beta版)

用于Flutter的空中本地化SDK。更快地进行更改。

Lokalise Flutter SDK正在测试中

如果您想试用SDK,请通过www.wwealerts.com上的聊天小部件(右下角)联系我们的支持团队。

lokalise_flutter_sdk包提供对无线翻译更新的支持www.wwealerts.com

这些说明的副本如下:

特性

  • .arb.dart文件处理器,启发和跟随的脚步颤振gen-l10n
  • 的自定义本地化类AppLocalizations通过颤振gen-l10n用于无缝更换。
  • 无线功能,提供您的文本更新更快。

注意在.arb文件管理

此SDK不包括管理(下载和上传).arb文件。为此,我们推荐Lokalise CLIv2

开始

你需要有一个工作扑动项目。
开始颤振内化检查官方文件

在项目中启用over - air功能需要以下操作:

  • 准备Lokalise项目。
  • 准备Flutter项目。
  • 将SDK集成到应用程序中。

准备Lokalise项目

假设你已经有一个Lokalise项目,只有几个步骤来执行:

准备Flutter项目

1.更新 pubspec.yaml

添加intl而且lokalise_flutter_sdk打包到pubspec.yaml文件:

dependencies: flutter: sdk: flutter flutter_localizations: #添加此行sdk: flutter #添加此行intl: ^0.17.0 #添加此行lokalise_flutter_sdk: ^0.5.0 #添加此行

2.添加 .arb文件到 lib / l10n /目录

将ARB文件添加到lib / l10n /颤振项目的目录。我们建议您从Lokalise下载它们。

在下载部分,选择颤振(.arb)格式,启用文件结构->每种语言一个文件。包结构:选项,并将值设置为intl_ % LANG_ISO % % %格式

颤振被认为是一个其他平台上的Lokalise。因此,将键适当地分配给其他平台(学习如何).

例子.arb档案作测试用途

出于测试目的,您可以手动添加intl_en.arb文件。例如:

{"@@locale": "en", "helloWorld": "Hello World!", "@helloWorld": {"description": "常规的新生儿程序员问候"},"title": "是的,这是一个标题!"}

为Flutter应用程序中需要支持的每个语言环境添加一个ARB文件。使用以下模式命名它们:intl_LOCALE.arb.这里有一个> an的例子intl_es.arb文件:

{"helloWorld": "世界好!"}

3.设置项目并生成 .dart文件

运行以下命令安装依赖项:

颤振酒吧得到

生成.dart从所提供的.arb文件:

Flutter pub运行lokalise_flutter_sdk:gen-lok-l10n

中应该会看到生成的文件生成/ lib /目录中。

在你的应用中集成SDK

该包提供Lokalise而且Lt类。Lt类,并且名称是可定制的。

Lt习惯于:

  • 在应用程序中使用配置本地化Lt.delegateLt.supportedLocales而且Lt.localizationsDelegates参数。
  • 使用以下命令检索翻译Lt.of(上下文)调用。

Lokalise习惯于:

  • 配置要在帮助下使用的lockalise项目Lokalise.init方法。
  • 方法检索最新的翻译Lokalise.instance.update ()方法。

1.导入所有必要的包和类

导入的包:颤振/ material.dart ';导入的包:flutter_localizations / flutter_localizations.dart ';导入的包:lokalise_flutter_sdk / ota lokalise_sdk.dart”;进口“生成/ l10n.dart”;

2.中配置Lokalise项目 主要函数

//由于一些实现细节,我们要求' main '函数是' async '。WidgetsFlutterBinding.ensureInitialized ();等待Lokalise。init(sdkToken: 'Lokalise SDK Token', //确保' sdkToken '是一个SDK令牌(不是API令牌或JWT)。projd: '项目ID', pre - release: true, //只有当你想使用预发布时才添加这个。在生产中使用Bundle冻结功能);runApp (const MyApp ());}

3.在应用程序小部件中配置本地化

类MyApp extends StatelessWidget {const MyApp({Key?键}):super(键:键);@覆盖小部件构建(BuildContext上下文){返回MaterialApp(标题:“Lokalise SDK”,主题:theme data (primarySwatch: Colors。blue,), home: const MyHomePage(), //你可以使用Lt. localizationsdelegate来更短地声明localizationsdelegate localizationsdelegate: const [Lt.delegate, //这将Lt添加到委托调用堆栈GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate,], supportedLocales: Lt.supportedLocales, //这将根据生成的'。Dart文件);}}

4.添加 Lokalise.instance.update ()调用初始页面

类my主页扩展StatefulWidget {const my主页({键?键}):super(键:键);@override State< my首页> createState() => _MyHomePageState();} class _MyHomePageState extends State< my首页> {bool _isLoading = true;@override void initState() {super.initState();Lokalise.instance.update()。then(//这是一个异步调用,适当地处理它(response) => setState(() {_isLoading = false;}), onError: (error) => setState(() {_isLoading = false;}));} @覆盖小部件构建(BuildContext context){返回脚手架(appBar: appBar (title: Text(Lt.of(context).title),), body: Center(child: _isLoading ? const CircularProgressIndicator() : Center( child: Text(Lt.of(context).helloWorld), )), ); } }

最终产品

样例应用程序

您还可以找到带有集成SDK的示例Flutter应用程序GitHub上

下面是一个完整的示例,演示了Flutter SDK的使用方法(重要的行用注释标记):

导入的包:颤振/ material.dart ';导入的包:flutter_localizations / flutter_localizations.dart ';导入的包:lokalise_flutter_sdk / ota lokalise_sdk.dart”;//导入SDK导入'generated/l10n.dart';//导入生成的Lt类void main() async {WidgetsFlutterBinding.ensureInitialized();等待Lokalise。init(//配置SDK sdkToken: 'Lokalise SDK Token', projectId: '项目ID', pre - release: true, //只有当你想使用预发布时才添加这个。在生产中使用Bundle冻结功能);runApp (const MyApp ());}类MyApp扩展StatelessWidget {const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( title: 'Lokalise SDK', theme: ThemeData( primarySwatch: Colors.blue, ), home: const MyHomePage(), localizationsDelegates: const [ Lt.delegate, // This adds Lt to the delegate call stack GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: Lt.supportedLocales, // Provides a list of supported locales ); } } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key}) : super(key: key); @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { bool _isLoading = true; @override void initState() { super.initState(); Lokalise.instance.update().then( // Ensures application has the latest translations (response) => setState(() { _isLoading = false; }), onError: (error) => setState(() { _isLoading = false; }) ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(Lt.of(context).title), // Gets the translation ), body: Center( child: _isLoading ? const CircularProgressIndicator() : Center( child: Text(Lt.of(context).helloWorld), // Gets the translation )), ); } }

注意更新本地翻译

翻译更改后(lib / l10n / intl_LOCALE.arb),使用Flutter pub运行lokalise_flutter_sdk:gen-lok-l10n命令重新生成Dart类。

额外的细节

包冻结

为了使用包冻结功能,SDK使用版本键从pubspec.yaml位于Flutter项目根目录中。

给定一个版本:1.2.3 + 4值,1.2.3,并传递给OTA服务器。

定制

类生成的Dart类名gen-lok-l10n命令,方法为lok-l10n.yaml文件中lib / l10n是这样的:

输出类:“MyCustomClassName”

局限性和已知问题

  • Localizations.override小部件不支持。
    • 不会发生崩溃,但可能会发生意想不到的事情。
  • SDK支持只包含复数而不包含任何额外文本的复数翻译。
    • {count,复数,=0{没有苹果}=1{一个苹果}其他{{计数}苹果}}是支持的。
    • 我得到{count,复数,=0{没有苹果}=1{一个苹果}其他{{count}苹果}}不支持。
    • 再次检查生成的.dart文件,然后再使用复数键。
  • 你的应用版本pubspec.yaml必须遵循一个简单的模式(例如,x.y.z支持;x.y.z-aa-bb不支持)。

许可证

这个插件是根据BSD 3条款许可

版权(c)Lokalise团队