有没有办法在将其打包到APK后添加或更改Android应用程序语言?

时间:2011-10-17 05:08:02

标签: android localization

对于Windows应用程序(EXE / DLL),我们可以在二进制文件中更改或添加语言资源,而无需重新编译它。如果是Android应用程序,可以这样做吗?是否有任何编辑器可以实现这一目标?

我的计划是用英语开发应用程序,然后将其发布到销售部门,他们将负责应用程序的本地化,而无需编译并将其打包成新的APK。我只想分割应用程序的开发部分和本地化部分。

5 个答案:

答案 0 :(得分:1)

本地化的正确方法是为您的基本语言创建一个字符串资源,然后将其本地化并重新导入到您支持的每种语言的项目中。

Localization documentation.

中可以找到更多细节

我不相信有一种安全/支持的方式可以在应用程序构建后将本地化字符串注入您的应用程序。

答案 1 :(得分:1)

没有。你不能,因为一旦你的apk签名然后在此之后修改它(你总是可以这样做,因为apk只是一个zip文件)将破坏签名的二进制文件。

答案 2 :(得分:0)

当您的应用程序使用多种语言时,您必须将它们构建到应用程序本身。 Android使用XML文件存储应用程序中使用的字符串。 Android允许您添加包含本地特定字符串的语言本地化文件。如果不重新编译项目,则无法执行此操作,因此您可能希望将其作为未来更新或从一开始就进行更新。但你不能让营销部门去做,这不是一个好主意。

答案 3 :(得分:0)

正如其他人所说,简短的回答是否定的。长(呃)的答案有点像。如果您将所有语言资源打包成可以从Web更新的远程XML,那么只需要一点预见,您就可以对应用程序的字符串,图形等进行各种实时更新。

答案 4 :(得分:0)

因此,如果你想对所有东西使用标准的R.string方法,那将会有点困难。我认为可以使用动态类加载器为资产和静态dex类做一些时髦的事情(基本上只有内联字节数组的数据类,可以在之后解码)。但是,这仍然需要编译。有关详细信息,请参阅Custom Class Loading in Dalvik

另一种方法更多的是标准的Java实现。 Java有一个名为ResourceBundle的类。您可以从属性文件(键值纯文本,甚至属性xml)创建ResourceBundle。然后可以通过网络连接或SD卡或其他文件类型资源将这些文件加载​​到apk外部,并根据需要删除。您将不得不为它编写加载程序代码,但任何解决方案都会发生这种情况。这个解决方案性能较差,超出了android的标准设计方法,但它将解决被要求解决的问题。就像你将无法使用R.string或@ string /以及任何这些资源一样,但我认为你可能能够为这些资源编写一个适配器(比如你自己的TextView扩展和任何允许所有这些的资源) )。这主要取决于您希望投入多少工作来解决这个实际问题。

老实说,如果您试图节省空间,我会选择尝试仅使用目标语言分发整个apks,但是在运行时无法更改应用程序的语言环境:(