Lokalise的使用

        因为我们公司项目已经到后期,所以算是很庞大了。现在需要做优化和重载,其中涉及到多语言适配化方面,不可能将几千个单词再同时翻译成其他各个国家的吧,那任务量太重了。所以我们就使用了Lokalise这个工具,帮助我们适配,但是集成他们的sdk是需要付费的,但确实挺好用的,如果公司能接受,可以推荐。

       官网:https://lokalise.co/

       注册账号后,里面可以创建工程并上传自己的字符串文件。参考里面的文档,集成自己的sdk,我是集成了android sdk。

      1. 在lokalise里创建自己的工程

       创建后,导入自己的字符串文件l,ex(strings.xml),将各种语言导入后,去到“project setting”里,得到工程的project id。

for example:

3281927757690217f560f6.71199070

      2.生成bundle

      3.在工程中添加lokalise的库

         在自己的module工程里放入lokalise库

repositories {
    ...
    maven {
        url "https://maven.lokalise.co"
    }
}
...
dependencies {
    ...
    compile 'com.lokalise.android:ota-sdk:1.+'
    compile 'com.google.code.gson:gson:2.8.0'
}添加库后,需要混淆,
   1)用的是ProGuard,就添加下列语句
-keep class co.lokalise.** { *; }
-dontwarn co.lokalise.*

       2)用DexGuard,就添加

-keepresources string/**
-keepresources string-array/**
-keepresources plurals/**

  4.在代码中初始化sdk

public class MyApplication extends Application {
    ...
    @Override
    public void onCreate() {
        super.onCreate();
        // Initialise Lokalise SDK with projects SDK token and project id
        // It is important to call this right after the "super.onCreate()"
        // If you are using AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
        // make sure it is called before LokaliseSDK.init()
        LokaliseSDK.init("<sdk token>", "<project id>", this);
    
        // Add this only if you want to use pre-release bundles
        LokaliseSDK.setPreRelease(true);
        
        // Fetch the latest translations from Lokalise (can be called anywhere)
        LokaliseSDK.updateTranslations();
    }
    ...
}
public class MainActivity extends AppCompatActivity {
    ...
    @Override
    protected void attachBaseContext(Context newBase) {
        // Inject the Lokalise SDK into the activity context
        super.attachBaseContext(LokaliseContextWrapper.wrap(newBase));
    }
    ...
}

如果使用Calligraphy library,就用下面语句

...
super.attachBaseContext(LokaliseContextWrapper.wrap(
    CalligraphyContextWrapper.wrap(newBase)
));
...

 5.使用

 在使用中,就跟平常一样调用字符串文件,但是当你在lokalise上修改某个字符串时,调用下列语句去监测到字符串更新

 1)Lokalise callback

LokaliseCallback myCallback = new LokaliseCallback() {
    @Override
    public void onTranslationsUpdated(long oldBundleVersion, long newBundleVersion) {
        // Do something
    }
};
LokaliseSDK.addCallback(myCallback);

 2)Broadcast receiver

...
IntentFilter myIntentFilter = new IntentFilter(LokaliseDefines.INTENT_TRANSLATIONS_UPDATED);
BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        long previous_version = intent.getLongExtra(LokaliseDefines.EXTRA_BUNDLE_VERSION_OLD, 0);
        long current_version = intent.getLongExtra(LokaliseDefines.EXTRA_BUNDLE_VERSION_NEW, 0);
        // Do something
    }
};
@Override
protected void onResume() {
    super.onResume();
    registerReceiver(myReceiver, myIntentFilter);
}
@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(myReceiver);
}
...

监测到字符串文件更新后,lokalise会自动给你返回最新的字符串库的response,然后你的程序会自动使用所有的最新字符串。

缺点:

这个是国外提供的库,可能会涉及到由于网络缓慢而导致字符串更新缓慢,从而达不到立即更新的效果。 但是可以大量节省你每次都在本地添加字符串的时间,而且这个跨平台,你可以在lokalise平台上更改字符串文件后,自动导出各种平台的字符串文件(Android,iOS,web and so on),然后copy到本地使用,就可以解决上面的问题,但这也就不用使用sdk啦,总之有利有弊,看公司情况决定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值