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

问题描述 投票:0回答:1

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

我想本地化它并翻译它,但我无法在没有上下文的情况下从数据类访问字符串资源。我想避免到处传递上下文。通常如何处理这种情况?这似乎是

getString
的一个非常常见的用例,但看来我错了。

android kotlin android-activity localization android-resources
1个回答
4
投票
文本本地化所需的

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
的构造函数,以避免生命周期比应用程序短的上下文发生内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.