本地化和国际化有什么不同?
我要问一个关于如何准备桌面应用程序来支持UI上的多种语言的问题。
在我search关于该主题的现有问题时,我正在考虑“国际”这个词,所以我select了“国际化”标签并通读了一些匹配的问题。
最终,我意识到我应该在标签本地化的问题看。 不过,看起来我并不孤单,把这两个术语搞混了。
那么,它们在本地化和国际化之间的关键区别是什么?
另外,他们之间的区别是否真的那么重要?
- 国际化(i18n)
- 改变你的软件的过程,使它不硬连接到一种语言/区域/文化。
- 本地化(l10n)
- 为您的软件添加适当的资源以支持特定语言/区域设置的过程。 它的范围比这个维基百科条目更大,但这是一个好的开始。
区分它们的价值在于(理论上)一旦你的程序经历了国际化进程,你可以根据需要迭代许多lOn个进程; 同样,用语言来精确也很好。
据苹果介绍 :
国际化是devise和构build应用程序以促进本地化的过程。 本地化反过来又是文化和语言上的适应,将国际化应用到两个或更多的文化不同的市场。
国际化准备您的本地化应用程序。 例如,你可以使用Unicode编码存储在数据库中的字符( utf8mb4
而不是latin1
),将string移动到资源文件中,使用date,时间和货币格式等。
例如,如果您希望销售应用程序的中文版本,则可以通过聘请翻译人员来构buildzh-CN资源文件并使用新的date/时间/货币格式进行本地化。
L10n有时可以显示你的i18n失败的地方 – 例如,你的字典有一个单词条目,用作一个名词和一个英文动词,不会翻译成另一种语言中的同一个单词,或者UI元素/devise不适合文化(L / R方向)。
所以l10n“普遍”是在i18n之后发生的,但是可以反馈给你的i18n,需要进一步的重新devise,所以你不能认为你的应用完全国际化,直到你做了一些本地化。
根据维基百科
国际化是devise一个软件应用程序的过程,以便它可以适应各种语言和地区, without engineering changes
。
本地化是通过添加特定于语言环境的组件和翻译文本来adapting internationalized software
特定地区或语言的过程。
此外 ,本地化(可能针对不同地区多次执行)使用infrastructure or flexibility provided by internationalization
的infrastructure or flexibility provided by internationalization
(理想情况下仅执行一次,或作为正在进行的开发的一个组成部分)。
全球化(G11n):开发和销售多语言软件产品到全球市场的过程。
多语言软件的发展目前经历了两个阶段:第一阶段是国际化,第二阶段是本地化。
国际化(I18n):是对产品进行概括的过程,它可以处理多种语言和文化习俗,而不需要重新devise(即语言和文化中立)。
本地化(L10n):是指在产品使用和销售(即特定语言和文化)的目标区域(国家/地区和语言)的语言和文化上适用产品的过程。
如果按照以下定义进行操作,这非常简单,
国际化是国际化
devise应用程序的过程,以便它具有改变为不同语言的function,而不需要对应用程序进行编程改变。
l10n(本地化)是
创build 实际语言特定文本和格式的过程 。
这里有几个非常好的答案,所以我不会回收它们。 然而在某些情况下,通常在国际化testing和本地化语言testing之间,国际化和本地化倾向于重叠。 有人提到l10n反馈国际化,但是如果你正在进行质量国际化testing,并创build伪本地化的内容,那么在本地化过程中迭代发展问题应该是例外,而不是规则。 界面resize,特别是调整页面以支持阿拉伯语和希伯来语等双向语言也倾向于混合本地化问题和国际化工程。
可以这么说,国际化涉及到根据需求修改源文件来支持任何语言环境。 如果国际化进展顺利
本地化涉及内容的适应性和一定程度的expression(如大胆的标签),以便最好地满足特定目标市场(地区)的需求。
许多文章和白皮书供参考: http : //www.lingoport.com/software-internationalization-articles
您可以参考以下链接查看内部化和本地化之间的确切区别。
KnowledgePapers/Localization_Internationalization_Testing.pdf
国际化 – 国际化 – 从任何特定的语言/文化中抽象出一个应用程序。
本地化 – l10n-将特定语言/文化/语言环境的具体支持塞入上述国际化框架。
基本上通过i18n首先你使得PITAless得多。
相比之下,如果您先在具体的语言环境中创build应用程序,然后尝试将其应用程序国际化,那么这将是一个庞大的PITA。 它不是一个简单的问题,只是把一个具体的英文string换成“Hello World”给Resource.Global.HelloWorld。
不同的语言将有不同的空间要求,布局,重点,颜色等。
如果您甚至认为您可能需要支持多个语言环境,则需要从头开始实施i18n框架,以轻松地支持语言环境之间的切换。
稍后将它join应用程序是非常困难的。 您将不得不重新审视您(或其他人)第一次进行的大量架构考虑和约束。
我觉得本土化可以没有国际化,但国际化与本地化不应该做…
类比pov:想象一下你的图书馆里只有一个尺寸为4×4英寸的书架。 国际化将build立与各种不同的车厢,可以让它来处理任何书的大小或形状的架子。 本地化将设置在正确的部分所有的书籍。 把你的数据库,业务逻辑和用户界面看作是书架,不同的语言,货币和文本方向。
很多的答案,很多正确的信息,但我的答案是一点点的另一个观点。
国际化 – 开发者在某些语言中没有代码直接的消息/错误消息/button名称/标签字幕/等,但是有一个传递给翻译function的键 ,并且根据当前用户的语言环境的翻译function将返回最终文本在英语/法国/等…
翻译function与存储(db / files / associative array / etc)一起工作。
存储包含使用coode的键和值,这是应用程序支持的某种语言的文本。
本地化 – 这是一个在新的语言(例如西class牙)中添加新值的过程,适用于存储密钥,而不需要开发人员参与到这个过程中。
例如,我们有存储:
key | english | italian | ------+------------+-------------------+ title | Welcome | Benvenuto | agree | I agree | Sono d'accordo | thank | Thank you | Grazie |
在代码中使用的国际化如confirm(t(agree));
而不是confirm("I 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 |
而这里开发者不需要更新代码,翻译function会正确地载入适当的文本。
i18n – devise和开发支持多种语言环境的软件。
i10n – 这只有在i18n到位时才有可能。 但是i10n可以确保语言,date格式,货币格式等在上下文中切换到特定的语言环境/语言。
例如,
#1。 1977年6月3日将作为1977年3月3日译成西class牙文。
#2。 有些国家的货币之间用“。”隔开。 vs','
#3。 根据地区的国家显示相应的货币符号
#1,#2和#3是用于本地化的用例。
如果软件devise为支持基于用户语言环境的#1 或 #2 或 #3,则产品支持i18n
只是,
国际化(I18N)是使您的软件能够适应不同的语言,地区和文化的过程。
本地化(L10N)是将您的软件翻译成多种语言的过程。 但在您可以本地化您的软件之前,请将其国际化。
i18n和l10n有很多定义。 我使用的是:
国际化(i18n) :语言特定的应用程序改编(翻译)
本地化(l10n) :您的应用程序(金钱,数字格式,date格式…)的语言环境特定改编。
例如,我们可以在法国和瑞士(我们都讲法语,至less在瑞士的一些地区)使用相同的语言,但是我们仍然需要一些适应措施来将欧元兑换成瑞士法郎。