Flutter SDK (beta版)
用于Flutter的空中本地化SDK。更快地进行更改。
Lokalise Flutter SDK正在测试中
如果您想试用SDK,请通过www.wwealerts.com上的聊天小部件(右下角)联系我们的支持团队。
的lokalise_flutter_sdk
包提供对无线翻译更新的支持www.wwealerts.com.
这些说明的副本如下:
- 在官方包存储库.
- 在Lokalise开发人员中心.
特性
.arb
来.dart
文件处理器,启发和跟随的脚步颤振gen-l10n
.- 的自定义本地化类
AppLocalizations
通过颤振gen-l10n
用于无缝更换。 - 无线功能,提供您的文本更新更快。
注意在
.arb
文件管理此SDK不包括管理(下载和上传)
.arb
文件。为此,我们推荐Lokalise CLIv2.
开始
你需要有一个工作扑动项目。
开始颤振内化检查官方文件.
在项目中启用over - air功能需要以下操作:
- 准备Lokalise项目。
- 准备Flutter项目。
- 将SDK集成到应用程序中。
准备Lokalise项目
假设你已经有一个Lokalise项目,只有几个步骤来执行:
准备Flutter项目
1.更新
pubspec.yaml
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 /
目录将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
文件运行以下命令安装依赖项:
颤振酒吧得到
生成.dart
从所提供的.arb
文件:
Flutter pub运行lokalise_flutter_sdk:gen-lok-l10n
中应该会看到生成的文件生成/ lib /
目录中。
在你的应用中集成SDK
该包提供Lokalise
而且Lt
类。Lt
类,并且名称是可定制的。
Lt
习惯于:
- 在应用程序中使用配置本地化
Lt.delegate
,Lt.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 ()
调用初始页面
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团队.
更新 5天前