我想问一个关于在UI上支持多种语言的桌面应用程序的问题。
在我搜索关于这个主题的现有问题时,我想到了单词“International”,所以我选择了国际化标签并阅读了一些匹配的问题。
最终,我意识到我可能应该在标记为本地化的问题下寻找。然而,我似乎不是唯一一个把这两个术语混淆的人。
那么,本地化和国际化之间的关键区别是什么?
另外,它们之间的明确区分真的那么重要吗?
我想问一个关于在UI上支持多种语言的桌面应用程序的问题。
在我搜索关于这个主题的现有问题时,我想到了单词“International”,所以我选择了国际化标签并阅读了一些匹配的问题。
最终,我意识到我可能应该在标记为本地化的问题下寻找。然而,我似乎不是唯一一个把这两个术语混淆的人。
那么,本地化和国际化之间的关键区别是什么?
另外,它们之间的明确区分真的那么重要吗?
当前回答
很多答案,很多正确的信息,但我的答案是另一个观点。
Internationalization - it is when developer does not have in code direct messages/error messages/buttons names/labels captions/etc in certain language but have a key which is passed to translation function, and translation function according to current user's locale will return final text in english/france/etc... Translation function works with storage (db/files/associative array/etc). Storage contains keys which is ussed in coode, and values, which is texts in certain language which application supports.
本地化—这是一个用新的语言(例如西班牙语)添加新的值到存储键的过程,而不需要开发人员参与这个过程。
例如,我们有存储:
key | english | italian |
------+------------+-------------------+
title | Welcome | Benvenuto |
agree | I agree | Sono d'accordo |
thank | Thank you | Grazie |
它在代码中使用国际化,比如confirm(t(agree));而不是confirm(“我同意”);或确认(“Sono d’accordo”); 本地化-它是添加新的地区到我们的存储,如:
key | english | italian | spanish |
------+------------+-------------------+------------------+
title | Welcome | Benvenuto | Bienvenido |
agree | I agree | Sono d'accordo | Estoy de acuerdo |
thank | Thank you | Grazie | Gracias |
这里开发者不需要更新代码,翻译功能就能正确地携带相应的文本。
其他回答
国际化-从任何特定的语言/文化中抽象应用程序。
本地化- l10n-在上面的i18n框架中插入对特定语言/文化/地区的具体支持。
基本上通过先做i18n,你得到的l10n比PITA少得多。
相反,如果你先在一个具体的地区创建一个应用程序,然后再尝试国际化它,它将是一个巨大的PITA。这不是简单地将一个具体的英文字符串“HelloWorld”转换为Resource.Global.HelloWorld。
不同的语言有不同的空间要求、布局、重点、颜色等。
如果您甚至认为可能需要支持多个语言环境,那么您需要从一开始就使用i18n框架来轻松地支持针对上述差异的语言环境切换。
稍后将其改造到应用程序中是非常困难的。您将不得不重新审视您(或其他人)在第一次中提出的整个体系结构注意事项和限制条件。
类比pov:想象一下,在你的图书馆里,一个书架只能放4x4英寸的一本书。国际化就是用各种不同的隔层来建造书架,这样可以容纳任何大小或形状的书。本地化就是把所有的书都放在正确的位置。把你的数据库、业务逻辑和UI想象成书架,把不同的语言、货币和文本方向想象成书籍。
国际化(i18n)改变软件的过程,使其不再局限于一种语言/地区/文化。 本地化(l10n)向软件中添加适当资源以支持特定语言/地区的过程。它的范围比维基百科上的这条条目要大,但这是一个良好的开端。
区别它们的价值在于(理论上)一旦你的程序经过了i18n进程,你就可以根据需要迭代许多l10n进程;此外,语言的精确性也很好。
国际化为应用程序本地化做好准备。例如,您可以使用Unicode (utf8mb4而不是latin1)对存储在数据库中的字符进行编码,将字符串移动到资源文件中,启用日期、时间和货币格式等。
例如,当你想出售你的应用程序的中文版本时,你可以通过雇佣翻译人员来构建zh-CN资源文件,并使用新的日期/时间/货币格式来本地化它。
让我们先了解语言环境
区域设置——一组参数,用于定义用户的语言、区域以及用户希望在用户界面中看到的任何特殊变量首选项。通常,区域设置标识符至少包含一个语言标识符和一个区域标识符。
i18n -设计和开发支持多种语言环境的软件。
l10n—只有当您的软件支持i18n时才有可能。但是l10n确保语言、日期格式、货币格式等在特定地区的上下文中显示。
例如,
# 1。1977年6月3日将被翻译成西班牙语为3 de junio de 1977。
# 2。一些国家的货币以'。' vs ','
# 3。根据地区的国家显示各自的货币符号
#1、#2和#3是本地化用例。
如果软件被设计为基于用户语言环境支持#1、#2或#3,那么product启用了l10n。
如果它支持多个地区,则启用了i18n。