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
的构造函数,以避免在生命周期短于应用程序的上下文中发生内存泄漏。
我的应用程序在域、数据和表示层之间有明确的区别。我有我的数据模型,它是从我的服务器获取的,它被转换成一个域模型,然后被传送到演示文稿以用于绑定等。我一直在尝试本地化我的项目。当 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
的构造函数,以避免在生命周期短于应用程序的上下文中发生内存泄漏。