Java 如何为开发者和最终用户提供i18n服务
许多android应用程序对i18n的支持非常差,这是可以理解的,因为它为开发人员增加了很多工作 从直观和文化的角度来看,如果最终用户可以自己翻译应用程序,并且OTA可以共享翻译,而无需重新安装应用程序本身,这将是一件好事 在概念上;作为维基百科,有些人很容易添加内容,有些人只使用那里的内容 当然,对于应用程序开发人员和愿意转录的人来说,该服务尽可能容易使用是很重要的 为了简单起见,这是我正在考虑的解决方案 开发者视角:Java 如何为开发者和最终用户提供i18n服务,java,android,internationalization,culture,Java,Android,Internationalization,Culture,许多android应用程序对i18n的支持非常差,这是可以理解的,因为它为开发人员增加了很多工作 从直观和文化的角度来看,如果最终用户可以自己翻译应用程序,并且OTA可以共享翻译,而无需重新安装应用程序本身,这将是一件好事 在概念上;作为维基百科,有些人很容易添加内容,有些人只使用那里的内容 当然,对于应用程序开发人员和愿意转录的人来说,该服务尽可能容易使用是很重要的 为了简单起见,这是我正在考虑的解决方案 开发者视角: 开发人员在打开活动/布局时使用自定义的setContentView来搜索
- 开发人员在打开活动/布局时使用自定义的setContentView来搜索xml条目的字符串。(下文)
- 定制版本作为一个可免费下载的库/类…提供,使i18n功能或多或少成为一个单行程序
- 用户无需翻译即可下载应用程序
- 当应用程序启动时,它会检查手机上运行的语言环境,并在SD的共享空间中查找翻译后的xml文件
- 如果没有或旧的转录xml(如上),请尝试从internet服务(ansync)下载新的。这都是由上面的库完成的,不需要意图
- 单独的应用程序为使用上述i18n服务的任何应用程序提供翻译。(可能只是一个网络应用程序),并对翻译/输入进行某种形式的QA
/T是的,只有当有人(可能是你、我或其他人)将重写
setContentView()
,这才有可能,因为我只在那里看到问题的根源。让我解释一下:
setContentView
- 英雄:在Android源代码中完全重写setContentView
- 不那么英勇:创建您自己的
类,该类将重新定义OwnActivity
。例如:setContentView(intID)
OwnActivity.setContentView()
public class MyActivity extends Activity
{
@Override
public void setContentView(int id)
{
if(checkPresenceInStorage(id))
//...
else
super.setContentView(id);
}
}
关于问题的第二部分,可以使用现有的翻译服务,如,它在gettext的.po文件上运行。 然而,还有android2po,它可以在Android的XML和gettext.po格式之间进行转换 Launchpad上已经有一些Android翻译,例如ConnectBot,但是该服务需要登录才能提供。或者,您应该查看可用的基于gettext的web翻译器套件,您也可以自己运行,比如Pootle
对不起,我不允许发布多个URL。请用谷歌搜索剩下的:(layoutinflator.factory是我一直在寻找的…感谢您的回答,澄清一下,资源在编译时不会硬编码到布局中,对吧?因为它会破坏确实有i18n的应用程序,所以这是应该被钩住的功能。我想英雄式的方法应该由谷歌来完成,即使这样,也会留下大量的curr耳鼻喉科手机(2.1)在寒冷中。如果我能用“进入”进行调试,我的目标就是不那么英勇的方法在setContentView上,我可以使用请求的扩展功能重新创建一个类,但我不能这样做?这没有意义,我知道所有内容都在apk中,但没有硬编码到布局中。一些链接必须在运行时执行,否则可绘制的ldpi/mdpi/hdpi将无法运行。您的任务是将XML膨胀为真正的de副作用不是拦截它的工作方式,而是膨胀所需的XML(本地化的)。因此,在我看来,它应该是这样的:从存储中读取正确的XML,并在setContentView()期间膨胀它,而不是那些存储在res/layoutI新it中的XML。Romain Guy甚至在询问“ViewInflateClass”之前就来拯救它,谢谢你提供的信息。不过,对于UGC来说,我相信这种方法必须简单得多。