在库中的静态函数中本地化字符串 - android

时间:2013-04-30 16:34:47

标签: android

我正在开发一个Android库。

这个库有一个实用程序类,它包含静态函数,其中包含字符串(主要用于各种错误的详细描述)。

我想本地化这些字符串。因此,在库中,我将这些字符串放在res/values/strings.xml

要在我的库代码中使用这些字符串,我需要调用getString(),但此方法需要Context。上下文必须是库上下文,因为字符串仅在库资源中定义。

到目前为止我的研究

我搜索了有关在静态函数中使用字符串资源的类似问题,但给出的答案在我的情况下不起作用。 2个流行的答案是:

  1. 将上下文作为参数传递给静态函数 - 我认为这对我不起作用,因为使用实用程序类的代码是使用库的应用程序(而不是库本身)。这意味着调用者可以传递的唯一可能的上下文是应用程序的上下文 - 但我需要库的上下文。

  2. 通过访问Application对象(通常通过单例)并调用getApplicationContext()来静态检索上下文 - 我认为这不会出于同样的原因,上下文将是应用程序的上下文而不是库的。

  3. 有什么想法吗?

    我认为我没有尝试任何特殊的东西。开发用于共享和代码重用的库是完全正常的。在此库中具有静态实用程序功能是完全正常的。在这些函数中使用字符串来描述错误条件是完全正常的。想要本地化这些字符串是正常的。为什么这么难?!

1 个答案:

答案 0 :(得分:2)

图书馆资源被吸收到使用它们的项目中 - 因此应用程序的上下文应该没问题。你试过这样做吗?

当我在Library项目中定义资源时,我在我的id上加上了Library名称,以便不太可能发生冲突:R.string.mylib_astring

此外,如果您在应用中通过R引用资源,它们将位于图书馆的软件包中,而不是应用程序中。例如com.example.mylib.R而不是com.example.myapp.R