【问题标题】:Localization of text outside of activities in Android?Android中活动之外的文本本地化?
【发布时间】:2021-03-29 22:12:52
【问题描述】:

我的应用程序在域、数据和表示层之间有明显的区别。我有我的数据模型,它是从我的服务器中获取的,它被转换为域模型,并被传递到用于绑定等的演示文稿中。我一直在尝试本地化我的项目。我有在发布帖子时阅读的文字。例如。 “1 小时前”、“片刻前”...

我想本地化并翻译它,但我无法从没有上下文的数据类中访问字符串 res。而且我想避免到处传递上下文。这通常是如何处理的?这似乎是getString 的一个很常见的用例,但似乎我错了。

【问题讨论】:

  • 应用上下文就足够了。使用应用上下文创建一个实例,我们称之为ResourceProvider,并在数据层中使用提供者。

标签: android kotlin localization android-resources android-context


【解决方案1】:

getResources(),你需要的文本本地化,是抽象Context类的方法。 Activity 只是继承它,这意味着您实际上不需要引用 Activity 来获取包资源。应用上下文就足够了。

关于在数据层使用Context,您可以创建一个实例(更好的单例),我们称之为ResourceProvider,传入应用程序上下文。例如,

interface ResourceProvider {
    fun getString(@StringRes id: Int): String
}

class ResourceProviderImpl constructor(private val context: Context) : ResourceProvider {

    override fun getString(id: Int): String = context.getString(id)
}

只需确保将applicationContext 传递给ResourceProviderImpl 的构造函数,以避免在生命周期短于应用程序的上下文中发生内存泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多