Android 活动之外的文本本地化?

Localization of text outside of activities in Android?

我的应用程序在域、数据和表示层之间有明确的区别。我有我的数据模型,它是从我的服务器获取的,它被转换成一个域模型,然后被传送到演示文稿以用于绑定等。我一直在尝试本地化我的项目。当 post 被 post 编辑时,我有文本读取。例如。 “1 小时前”、“几分钟前”...

我想对其进行本地化和翻译,但我无法在没有上下文的情况下从数据 class 访问字符串资源。而且我想避免到处传递上下文。这通常是如何处理的?这似乎是 getString 的一个非常常见的用例,但我似乎错了。

getResources(),你需要的文本本地化,是抽象的方法Context class。 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 的构造函数,以避免在生命周期短于应用程序的上下文中发生内存泄漏。