简介
Android SDK 2.0完全重写了Kotlin中的原始SDK。重写背后的想法是关注性能、可靠性和可扩展性。此外,SDK内部现在使用ViewPump
库,它允许你使用自己的布局拦截器与我们的SDK。为简单起见,本文档中的所有示例都将放在Java
.此外,如果您喜欢新版本的SDK,也欢迎任何积极的反馈。
限制
自定义视图中的文本需要以编程方式更新(LokaliseResources
类可用于获取最新的字符串)。
Beta 10的突破性更改
我们正在最终确定SDK 2的规格,这可能是该SDK正式发布前的最后一个beta版本。请注意,自从beta-10LokaliseMenuInflater
已删除,您应该使用translateToolbarItems
方法从LokaliseResources
如果您希望自动翻译菜单项。
MainActivity扩展了AppCompatActivity {
...
私人工具栏工具栏;
@Override
protected void onCreate(Bundle savedInstanceState) {
工具栏= findViewById (R.id.toolbar);
}
@Override
公共boolean onCreateOptionsMenu(菜单菜单){
getMenuInflater () .inflate (R.menu。主菜单);
((LokaliseResources) getresource ()) .translateToolbarItems(工具栏);
返回true;
}
...
}
同时,Realm.io
库已更新到版本10
,因此,如果您的项目正在使用旧版本的Realm.io
,你可能需要更新它。
文件大小
请注意,新的APK文件的大小可能会增加。为了缓解这个问题,我们建议上传一个由Android Studio生成的包到谷歌Play,而不是一个简单的APK文件。这将允许谷歌Play只向终端用户设备提供所需的资源,大大减少了下载大小。
开始
步骤1:在Lokalise中设置项目
如果你还没有这样做,在Lokalise中添加一个新项目,上传你可能有的任何源语言文件(或者直接在Lokalise的编辑器中添加键,如果你正在构建一个新的应用程序)。注意项目ID,它可以在项目设置中找到,通常看起来像这样:
3281927757690217 f560f6.71199070
步骤2:生成包
去下载页面,选择“Lokalise Android SDK”作为格式,点击构建只按钮来生成包。您将被自动带到项目设置中的bundle版本管理页面。暂时让开关保持原样。请参阅管理捆绑包部分中的详细信息。
确保在发布应用程序时总是在项目中包含最新的字符串。
步骤3:在项目中包含Lokalise SDK
首先你需要添加https://maven.www.wwealerts.com
达到你的最高境界.gradle
文件:
allprojects {
存储库{
...
maven {
url“https://maven.www.wwealerts.com”
}
}
}
之后,将SDK添加到应用程序模块级别.gradle
文件(注意它现在是sdk
)而不是ota-sdk
:
依赖关系{
...
实现(com.lokalise.android: sdk: 2.0.1) {
传递= true
}
}
或者如果你想要一个轻量级版本的SDK(使用SQLite而不是Realm.io),你可以使用新的lite
版本:
...
实现(com.lokalise.android: sdk: 2.0.1-lite) {
传递= true
}
}
如果您正在使用ProGuard,请添加以下规则(请注意,它现在是com。
):
com.lokalise小类。* * {*;}
-dontwarn com.lokalise。*
-keep @interface io.realm.annotations.RealmModule {*;}
-keep类io.realm.annotations.RealmModule {*;}
根据您的ProGuard设置,您可能还需要包括Gson库的规则.
另外,如果你正在使用DexGuard,你需要指定这些额外的规则:
/ * * -keepresources字符串
-keepresources字符串数组/ * *
-keepresources复数/ * *
步骤4:初始化SDK
对于这一步,你需要你的SDK令牌(在项目设置> General选项卡中生成一个令牌)和所需项目的项目ID(在项目设置中获得)。在你的主Application类中包含以下代码:
公共类MyApplication扩展应用
...
@Override
公共无效onCreate() {
super.onCreate ();
//在"super.onCreate()"后面的init很重要
Lokalise。Init (this, "","<项目id>">);
//只有当你想使用预发布包时才添加这个
Lokalise.setPreRelease(真正的);
//从Lokalise获取最新的翻译(可以在任何地方调用)
Lokalise.updateTranslations ();
}
...
}
我们还需要将Lokalise SDK注入到Activity上下文中,并使用来自的方法转换菜单项LokaliseResources
.为此,我们建议您创建一个基本Activity类,并从中扩展所有的活动。添加以下代码到您的活动:
MainActivity扩展了AppCompatActivity {
...
私人工具栏工具栏;
@Override
protected void onCreate(Bundle savedInstanceState) {
工具栏= findViewById (R.id.toolbar);
}
@Override
protected void attachBaseContext(Context newBase) {
//将Lokalise SDK注入到活动上下文
super.attachBaseContext (LokaliseContextWrapper.wrap (newBase));
}
@Override
公共boolean onCreateOptionsMenu(菜单菜单){
getMenuInflater () .inflate (R.menu。主菜单);
((LokaliseResources) getresource ()) .translateToolbarItems(工具栏);
返回true;
}
...
}
就是这样!你已经准备好了!
使用
更新的翻译
没有必要更新你的代码,照例引用键:
...
< TextView
android: id =“@ + id /测试”
android:文本= " @string / hello_world”
.../>
...
或从代码:
TextView test = (TextView) findViewById(R.id.test);
test.setText (R.string.hello_world);
或者如果你需要从应用程序的部分获得最新的翻译上下文
是否被覆盖(例如在自定义视图内),您可以使用LokaliseResources
类直接:
LokaliseResources = new LokaliseResources(context);
String myString = lokaliseresource . getstring (R.string.hello_world);
改变应用程序语言环境
如果需要手动更改应用程序的区域设置,请使用Lokalise。setLocale(
方法。
不需要自定义区域设置更改代码或上下文包装器,只需调用此方法并重新启动Activity。如果希望传播区域设置更改,还建议传递当前Activity的上下文。
但是,请注意,Lokalise SDK只使用上下文中的语言环境信息,不会在应用程序重新启动时持久化设置的语言环境。这个方法只是一个helper方法,它试图设置Context的语言环境,在应用程序的生命周期中,它可以被其他系统组件覆盖,在这种情况下,您将需要调用setLocale
一次。
动态地添加键
有时需要添加新的字符串而无需重新编译应用程序。
在通过Lokalise界面添加一个新密钥并创建一个新的Android SDK包后,你可以使用以下代码通过名称引用新密钥:
...
LokaliseResources资源= new LokaliseResources(context);
String newKey = resources.getString("new_key_name");
if(newKey != null) {
//对新值执行一些操作
}
请注意,当您请求该键时,并不能保证它会存在,因为您可以将任何键名传递给方法,所以请确保检查返回值是否为空。
回调
如果您需要知道Lokalise何时下载完一个新的翻译包,有几个选项。
LokaliseCallback
最简单的方法是使用LokaliseCallback
接口:
myCallback = new LokaliseCallback() {
@Override
onUpdated(long oldBundleId, long newBundleId) {
}
@Override
onUpdateFailed(LokaliseUpdateError错误){
}
@Override
onupdatenonneeded () {
}
});
Lokalise.addCallback (myCallback);
如果需要删除回调,只需使用Lokalise.removeCallback (myCallback);
广播接收器
你也可以通过Broadcast接收器接收关于bundle更新的通知:
...
myIntentFilter = new IntentFilter();
myIntentFilter.addAction (LokaliseDefines.INTENT_TRANSLATIONS_UPDATED);
myIntentFilter.addAction (LokaliseDefines.INTENT_TRANSLATION_UPDATE_FAILED);
myIntentFilter.addAction (LokaliseDefines.INTENT_TRANSLATION_UPDATE_NOT_NEEDED);
BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
onReceive(Context Context, Intent Intent) {
String action = intent.getAction();
如果(action.equals (LokaliseDefines.INTENT_TRANSLATIONS_UPDATED)) {
lokalisedefinitions . long olbundleid = intent.getLongExtraEXTRA_BUNDLE_VERSION_OLD, 0);
lokalisedefinitions . long newBundleId = intent.getLongExtraEXTRA_BUNDLE_VERSION_NEW, 0);
/ /做某事
} else if(action.equals(lokalisedefinitions . intent_translation_update_failed)) {
LokaliseUpdateError错误= (LokaliseUpdateError) intent.getSerializableExtra(lokalisedefinitions . extra_update_error);
/ /做某事
} else if(action.equals(lokalisedefinitions . intent_translation_update_not_needed)) {
/ /做某事
}
}
};
@Override
onResume() {
super.onResume ();
registerReceiver (myReceiver myIntentFilter);
}
@Override
受保护的无效onPause() {
super.onPause ();
unregisterReceiver (myReceiver);
}
...
兼容ViewPump
如果在项目中使用ViewPump,则可以将拦截器的列表传递给Lokalise.init ()
方法。
...
List postInterceptors = new ArrayList<>();
preInterceptors = new ArrayList<>();
Lokalise。init(this, "","<项目id>">, postInterceptors, preInterceptors);
...
请注意,您需要使用LokaliseContextWrapper
而不是ViewPumpContextWrapper
为了让一切正常运转。
管理包
出版的变化
Lokalise支持包的生产版本和预发布版本,并允许您保留每个包的不同版本。
![](https://downloads.intercomcdn.com/i/o/42206345/6374ed3e62ddaea75b183447/blob.png?expires=1619107200&signature=76073de4a7261aad94d39629bc363b415f7310a93a95de3e6ac7e7b714b722b3)
当bundle生成时,它将带你到项目设置/ Lokalise Android SDK部分。在bundle发布到生产或预发布之前打开相关开关。
![](https://downloads.intercomcdn.com/i/o/42206376/ff21f8529aa8a5f95870fe39/android-sdk-bundles.png?expires=1619107200&signature=7e68bfee53d5f0f5879ef78cb30854ea528ac35f3d9140b7e2cfbc373b971f90)
打击保存更改申请。
包冻结
Lokalise提供了在特定应用版本上冻结特定包的选项。正如你在下面的截图中所看到的,“Test_01”包被分配给构建从0到6的应用,而最新的包被分配给构建从7到12的应用。Lokalise Android SDK 1.3及以上版本支持此功能。
![](https://downloads.intercomcdn.com/i/o/72041539/e4a5eef789aa4009e38e08f3/Selection_128.png?expires=1619107200&signature=eb3618e9675ed7e2d36956af6685ab037643059263e7a348abf261f1d2605c65)
移动SDK的见解
我们在项目的统计页面上提供了全面的使用统计。这些报告包括:
每日独立用户(范围)
每日请求(范围)
应用程序语言(所有时间)
设备语言(所有时间)
设备-应用程序语言对(所有时间)
应用程序语言(每周比较)
每月活跃用户
![](https://downloads.intercomcdn.com/i/o/45019392/3d9832761ca099ea01450dce/1-1.jpg?expires=1619107200&signature=afbd736e91b35e4bb1de47e61415d4a7f9ddf3d28ecc8b542fab9d9e9ab72463)
用户隐私
我们不会追踪您的应用程序用户的个人数据。SDK收集关于用户的有限信息,以提供Mobile SDK Insights。这包括设备语言和应用程序语言。