Android 多语言国际化框架

最近因为项目需求,在应用中修改语言并保存用户习惯。后来使用 Kotlin 封装了一下代码,写成框架放到了 JCenter 中,方便依赖使用。

Github地址(含 Demo):MultiLanguage

集成
dependencies {
    implementation 'com.cyrus:language:1.0.1'
}
初始化框架

在 Applicaiton 中初始化:

override fun onCreate() {
    super.onCreate()
    LanguageHelper.init(this)
}
应用配置

覆写 Applicaiton 中的方法:

override fun attachBaseContext(base: Context) {
    super.attachBaseContext(LanguageHelper.onAttach(base))
}

覆写 ContextWrapper 子类(如 Activity、Service)中的方法(androidx 版本在 Activity 中需要多调用一次 onAttach(Context)):

override fun attachBaseContext(newBase: Context) {
    super.attachBaseContext(LanguageHelper.onAttach(newBase))
    /*
     * androidx 方法内部调用的代理方法覆盖了我们设置的属性,所以这里再设置一次。
     * 注意:这里传的上下文需要是被覆盖过之后的,所以是 this 不是 newBase。
     */
    LanguageHelper.onAttach(this)
}
修改配置

在需要修改配置的地方调用:

LanguageHelper.updateLanguage(context, locale)

或者跟随系统语言:

LanguageHelper.autoLanguage(context)

并根据项目自身需要重启 Activity。

其他 API
/** 设置语言存储实现 */
public fun setLocaleStore(context: Context, store: LanguageStore): Unit

/** 获取系统语言 */
public fun getSystemLanguage(): Locale

/** 获取设置的语言,[defaultLocale]为获取不到时的默认返回 */
public fun getLanguage(context: Context, defaultLocale: Locale? = null): Locale

/** 获取设置语言的资源 */
public fun getResources(context: Context): Resources

/** 获取对应语言的资源 */
public fun getResourcesByLocale(context: Context, locale: Locale): Resources

/** 通过[id]获取设置语言的对应字符串,[formatArgs]用于置换字符串中的占位符 */
public fun getString(context: Context, id: Int, vararg formatArgs: Any): String

/** 通过[id]获取对应语言的对应字符串,[formatArgs]用于置换字符串中的占位符 */
public fun getStringByLocale(context: Context, locale: Locale, id: Int, vararg formatArgs: Any): String
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值