繁体   English   中英

如何为开发人员和最终用户提供i18n服务

[英]How to provide i18n service for developer and end user

许多android应用程序对i18n的支持都非常差,这是可以理解的,因为它为开发人员增加了很多工作。

从直观和文化的角度来看,如果最终用户可以自己翻译应用程序,并且OTA共享翻译而无需重新安装应用程序本身,那将是一件好事。

概念上 作为Wikipedia,有些可以轻松添加内容,有些则仅使用其中的内容。

对于应用程序开发人员和愿意进行转​​录的人员,尽可能简单地使用该服务当然很重要。

为简单起见,这就是我正在考虑的解决方案;

开发人员观点:

  • 当打开活动/布局时,开发人员将使用自定义的setContentView,该活动/布局会寻找XML条目的折衷。 (下面)

  • 定制版本以免费下载的库/类的形式提供...,使i18n功能或多或少地成为一个衬板。

用户角度:

  • 用户无需任何翻译即可下载应用

  • 应用启动时,它会检查在电话上运行的语言环境,并会在SD的共享空间中查找翻译后的xml文件。

  • 如果没有或已转录的xml(如上所述),请尝试从Internet服务下载新的XML(异步)。 这些都是由上面的库完成的,不需要意图。

译者观点:

  • 单独的应用程序可为使用上述i18n服务的任何应用程序提供翻译。 (可能只是一个webapp),并对翻译器/输入内容进行某种形式的质量检查。

问题:现在,要使其高效运行,开发人员必须使用AeasyAP,最流畅的解决方案是setContentView的定制版本,该版本仅从外部xml加载转换后的值,而不是从xml中加载转换后的值。 apk。

这有可能吗?如果没有,您建议的解决方案是什么?

(当然, 新年快乐,feliz ano novo,blwyddyn newydd dda,Gott NyttÅr,kontan ane nouvo,szczęśliwegonowego roku……

问候/ T

是的,只有有人(可能是您,我或其他人)会重写setContentView()才有可能-因为我仅在那儿看到问题的根源。 让我解释:

  1. 布局XML存储在res / layout中,并打包在APK中
  2. 无法修改APK运行时(至少我从未听说过)
  3. 这意味着基本上您不能在res / layout中重新定义在线/运行时自定义/国际化的布局XML
  4. 因此,您需要一个存储自定义XML的位置:首选项或SQLite
  5. 在这两种情况下,都需要在Activity / Dialog中填充XML,这可以通过setContentView完成。
  6. 所以最后-您必须重新定义setContentView

怎么做? 2种选择:

  • 英雄:完全重写Android源代码中的setContentView
  • 少用一些英雄:创建您自己的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM