大多数人都同意将现有应用程序国际化比从头开发国际化应用程序更昂贵。
这是真的吗?或者当你从零开始编写一个国际化的应用程序时,执行I18N的成本只是在多个小任务上分摊,没有人感觉到国际化任务的全部重要性?
你甚至可以声称一个成熟的应用程序有很多很多LOC在项目历史中被删除,并且如果国际化是作为一个思想进行的话,它们不需要是I18Ned,但如果是项目从一开始就国际化了。
您是否认为从今天开始的项目必须国际化,或者根据软件的成功与否以及需求的地理分布,将该决策推迟到未来
我不是在谈论操纵unicode数据的能力。您可以在大多数主流语言,数据库和库中免费使用。我所说的是专门用多种语言和语言环境支持您自己软件的用户界面。
答案 0 :(得分:14)
“当您从头开始编写国际化应用程序时,执行I18N的成本是......摊销的”
但是,这不是全部。
在某些情况下,追溯性地追踪每条消息给用户是不可能的。
不难。不可能的。
考虑一下。
theMessage = "Some initial part" + some_function() + "some following part";
你将很难找到所有这些情况。毕竟,some_function
只返回一个字符串。您不知道它是否是数据库密钥(从未向某人显示)或必须翻译的消息。当它被翻译时,语法规则可能会揭示出一个由3部分组成的字符串连接是一个愚蠢的想法。
你不能简单地将每个字符串值函数GREP包含一个必须翻译的可能的I18N消息。你必须实际读取代码,并可能重写函数。
显然,当some_function
完全没有任何复杂性时,你会感到困惑,为什么你的应用程序的一部分仍然是瑞典语,而其余部分成功地使用其他语言。 (特别是不要选择瑞典语,将其替换为与最终部署不同的任何用于开发的语言。)
更糟糕的是,当然,如果您使用的是C或C ++,您可能会在预处理器宏和正确的C语言语法之间进行一些划分。
在动态语言中 - 代码可以在运行中构建 - 您将因为无法正确识别所有代码的设计而陷入瘫痪。虽然动态生成代码是一个坏主意,但它也使你的追溯I18N工作变得不可能。
答案 1 :(得分:5)
我不得不不同意将它添加到现有应用程序中的成本要高于从头开始添加新应用程序的成本。
我更愿意“当我们来到这座桥时跨越那座桥梁”,并且只有当您有一位付费客户寻找它时才会进行国际化。
答案 2 :(得分:1)
是的,将现有应用程序国际化绝对比从第一天开始国际化的应用程序更昂贵。而且这几乎从不是微不足道的。
例如
Message = "Do you want to load the " & fileType() & " file?"
如果没有一些代码更改,就无法国际化,因为许多语言都有像性别协议这样的语法规则。您通常需要一个不同的消息字符串来加载每种可能的文件类型,而不像英语时那样可以将子字符串连接在一起。
有many other issues like this:你需要更多的UI空间,因为有些语言需要比英语更多的字符来表达相同的概念,你需要在东亚使用更大的字体,你需要在用户界面中使用本地化的日期/时间但是在与数据库通信时,也许是英国美国,你需要使用分号作为CSV文件的分隔符,字符串比较和排序是文化,电话号码和分类。地址...
所以你认为一个项目开始 今天,必须国际化,或 这个决定可以推迟到 未来取决于成功(或不成功) 软件享有和地理位置 分配需求?
取决于。具体项目有多大可能国际化?快速获得第一个版本有多重要?
答案 3 :(得分:0)
我不能说什么是昂贵的,但我可以告诉你,一个干净的API可以让你以非常低的成本国际化你的应用程序。
答案 4 :(得分:0)
如果您真的认为“免费”获得“unicode处理”,那么当您尝试时,您可能会遇到惊喜。
除非你使用一个已经证明具有ANSI或非常相似字符集的语言之外的i18n能力的框架,你会发现几个小问题和更多主要问题,其中unicode处理不太正确,或者根本不可用。即使使用相对常见的语言(例如德语),您也可能会遇到缩小或扩展字母数量以及不支持unicode的API的困难。
然后想一下具有不同阅读顺序的语言!
这是你应该从一开始就真正计划它的原因之一,并在你计划支持的语言集上测试这些内容。
答案 5 :(得分:0)
i18n和l10n的概念比仅仅翻译某些语言的字符串更为广泛。
示例:考虑用户输入的日期和时间。如果您在设计时没有考虑国际化
a)用户界面和
b)存储,检索和显示机制
当你想启用其他输入方案时,你会得到一个非常糟糕的时间。
同意,在大多数情况下,首先不需要i18n。但是,这就是我的观点,如果你不考虑某些区域,那么必须触及i18n,你会发现自己最终会重写大部分原始代码。然后,添加i18n 比预先花了一些心思要贵得多。
答案 6 :(得分:0)
似乎可能是一个大问题的一件事是各种语言的消息的字符数不同。我在iPhone应用程序上做了一些工作,特别是在小屏幕上,如果你设计了一个包含10个字符的消息的UI,然后你尝试进行国际化,然后发现你需要20个字符才能显示你现在必须重做你的UI以适应。即使使用桌面应用程序,这仍然可以是一个庞大的PITA。
答案 7 :(得分:0)
这取决于您的项目以及您的团队的组织方式。
我参与了一个网站的国际化,它是一个开发人员一年的全职工作,可能大约需要6-8个月的时间让我在需要时处理安装影响(重新组织文件等)和其他开发人员不时参与他们的项目需要大量重构。这是在v3的应用程序中。
所以这绝对是昂贵的。您要问的是,从一开始就提供本地化系统的成本是多少,以及在早期阶段如何影响项目。您在v1的项目可能无法承受因匆忙设计的国际化框架问题而导致的延迟和挫折,而具有广泛客户群的稳定v3项目可能有资金投入正确的做法。
这还取决于您是否希望国际化所有内容,包括日志消息,或仅仅是UI字符串,以及有多少这些UI字符串,以及您可以进行本地化的人员以及随之而来的QA,以及甚至你想支持哪些语言 - 例如,你的系统是否需要支持unicode字符串(这是亚洲语言的要求)。
答案 8 :(得分:0)
并且不要忘记更改数据库后端以支持国际化数据也可能代价高昂。当你已经拥有20,000,000条记录时,尝试将该varchar字段更改为nvarchar。
答案 9 :(得分:0)
我认为取决于语言。每个j2ee(java web)应用程序都是i18n,因为它非常容易(甚至IDE可以为你提取字符串,你只需要命名它们)。
在j2ee中,稍后添加它会更便宜,但文化是尽快添加它们。我认为这是因为j2ee使用了大量的开源,几乎所有的开源库都是i18n。对于他们来说这是个好主意,但对于大多数j2ee app来说都不是。 大多数企业应用仅适用于使用一种语言的公司。
另外,如果你有糟糕的测试人员过早地让他们为你提供关于标签和翻译的错误报告(我只看过翻译不是由开发人员完成的)。在测试人员完成测试后,您将获得具有出色i18n支持的错误应用程序。但是,用户切换语言并查看是否可以使用它可能会很有趣。然而,使用你的应用程序对他们来说只是无聊的工作,所以他们甚至不会这样做。 i18n的唯一用户是测试人员。
奇怪的字符串加入不在j2ee文化中,因为你知道有一天有人可能想要它成为i18n。唯一的问题是从html模板中提取标签。