微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Android中活动之外的文本本地化?

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

我想本地化并翻译它,但我无法从没有上下文的数据类中访问字符串 res。而且我想避免到处传递上下文。这通常是如何处理的?这似乎是 public static int solutions(int num) { if (num <3 || num > 30) return 0; return solutions(num,1,1); } public static int solutions(int num,int x1,int x2,int x3) { if (x1 > 10 || x2 > 10 || x3 > 10) return 0; int count,val1,val2,val3; if (x1 + x2 + x3 == num) { System.out.println(x1+" + "+x2+" + "+x3); count = 1; } else count = 0; val1 = solutions(num,x1+1,x2,x3); val2 = solutions(num,x1,x2+1,x3); val3 = solutions(num,x3+1); return count + val1 + val2 + val3; } 一个非常常见的用例,但似乎我错了。

解决方法

文本本地化所需的

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。