[英]How to provide i18n service for developer and end user
许多android应用程序对i18n的支持都非常差,这是可以理解的,因为它为开发人员增加了很多工作。
从直观和文化的角度来看,如果最终用户可以自己翻译应用程序,并且OTA共享翻译而无需重新安装应用程序本身,那将是一件好事。
概念上 作为Wikipedia,有些可以轻松添加内容,有些则仅使用其中的内容。
对于应用程序开发人员和愿意进行转录的人员,尽可能简单地使用该服务当然很重要。
为简单起见,这就是我正在考虑的解决方案;
开发人员观点:
当打开活动/布局时,开发人员将使用自定义的setContentView,该活动/布局会寻找XML条目的折衷。 (下面)
定制版本以免费下载的库/类的形式提供...,使i18n功能或多或少地成为一个衬板。
用户角度:
用户无需任何翻译即可下载应用
应用启动时,它会检查在电话上运行的语言环境,并会在SD的共享空间中查找翻译后的xml文件。
如果没有或已转录的xml(如上所述),请尝试从Internet服务下载新的XML(异步)。 这些都是由上面的库完成的,不需要意图。
译者观点:
问题:现在,要使其高效运行,开发人员必须使用AeasyAP,最流畅的解决方案是setContentView的定制版本,该版本仅从外部xml加载转换后的值,而不是从xml中加载转换后的值。 apk。
这有可能吗?如果没有,您建议的解决方案是什么?
(当然, 新年快乐,feliz ano novo,blwyddyn newydd dda,Gott NyttÅr,kontan ane nouvo,szczęśliwegonowego roku…… )
问候/ T
是的,只有有人(可能是您,我或其他人)会重写setContentView()
才有可能-因为我仅在那儿看到问题的根源。 让我解释:
setContentView
完成。 怎么做? 2种选择:
OwnActivity
类,它将重新定义setContentView(int id)
。 例如: OwnActivity.setContentView()
在SQLite中查找具有当前语言环境的已知XML ID,如果未找到,则会从res / layout扩展XML 编辑1:
您可以像这样覆盖它:
public class MyActivity extends Activity
{
@Override
public void setContentView(int id)
{
if(checkPresenceInStorage(id))
//...
else
super.setContentView(id);
}
}
关于问题的第二部分,可以使用现有的翻译服务,例如Launchpad ,该服务在.po文件上运行gettext。 但是有android2po,它可以在Android的XML和gettext .po格式之间转换。
Launchpad上已经有一些Android翻译,例如ConnectBot,但是该服务需要登录后才能提供。 另外,您应该查看可用的基于gettext的网络翻译套件,例如Pootle。
抱歉,我不能发布多个URL。 请谷歌其余的:(
layoutinflator.factory是我一直在寻找的...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.