本地化和国际化,有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地化和国际化,有什么区别?相关的知识,希望对你有一定的参考价值。
我打算提出一个关于准备桌面应用程序以支持UI上的多种语言的问题。
在我搜索关于该主题的现有问题时,我正在考虑“国际”这个词,因此我选择了国际化标签并阅读了一些匹配的问题。
最终我意识到我应该在标记为Localization的问题下查找。然而,似乎我并不是唯一一个让这两个术语混淆的人。
那么,它们在本地化和国际化之间的主要区别是什么?
还有,它们之间有明显的区别吗?
- Internationalization (i18n)
- the process of changing your software so that it isn't hardwired to one language/locale/culture.
- Localization (l10n)
- the process of adding the appropriate resources to your software so that a particular language/locale is supported. It's bigger in scope than just this Wikipedia entry, but it's a good start.
区分它们的价值在于(理论上)一旦你的程序通过i18n进程,你就可以根据需要迭代许多l10n进程;此外,精确的语言很好。
国际化 - i18n - 从任何特定语言/文化中抽象出一个应用程序。
本地化 - l10n-将特定语言/文化/语言环境的具体支持插入到上述i18n框架中。
基本上通过首先进行i18n,你可以减少l10n的PITA。
相比之下,如果您首先在具体的区域设置中创建应用程序,然后再尝试将其国际化,那么它将是一个庞大的PITA。简单的问题就是只更换一个具体的英文字符串,向Resource.Global.HelloWorld说“Hello World”。
不同的语言将有不同的空间要求,布局,重点,颜色等。
如果您认为可能需要支持多个语言环境,那么您需要从头开始实施i18n框架,以便轻松支持区域设置之间的这种切换。
稍后将其改装到应用程序中真的很难。您将不得不重新审视您(或其他人)第一次进行的一系列架构考虑和约束。
我觉得本地化可以没有国际化但是......本地化的国际化不应该......
类比pov:想象一下你图书馆的一个架子,只能拿一本4x4英寸的书。国际化将建造具有各种不同隔间的架子,以允许其处理任何书籍尺寸或形状。本地化将在正确的部分设置所有书籍。将您的数据库,业务逻辑和UI视为书架,将不同的语言,货币和文本方向视为书籍。
让我们先了解语言环境
locale - 一组参数,用于定义用户的语言,区域以及用户希望在其用户界面中查看的任何特殊变体首选项。通常,区域设置标识符至少包括语言标识符和区域标识符。
i18n - 设计和开发支持多种语言环境的软件。
l10n - 仅当您的软件支持i18n时才可以。但l10n确保,语言,日期格式,货币格式等在特定区域设置的上下文中显示。
例如,
#1。 1977年6月3日将翻译为西班牙语,作为1977年的3 de junio。
#2。某些国家/地区的货币以“。”分隔。 vs','
#3。根据区域设置的国家/地区显示相应的货币符号
#1,#2和#3是用于本地化的用例。
如果软件设计为支持基于用户区域设置的#1 OR#2 OR#3,则产品将启用l10n。
如果它支持多个语言环境,则启用其i18n。
只是,
国际化(I18N)是使您的软件能够适应不同语言,地区和文化的过程。
本地化(L10N)是将您的软件翻译成多种语言的过程。但在您将软件本地化之前,您需要将其国际化。
i18n和l10n有很多定义。我使用的是:
国际化(i18n):您的应用程序的语言特定适应(翻译)
本地化(l10n):您的应用程序的区域设置特定适应(金钱,数字格式,日期格式......)。
例如,我们可以为在法国和瑞士分发的应用程序使用相同的语言(我们都说法语,至少在瑞士的某些地区),但我们仍需要一些适应性将欧元兑换成瑞士法郎。
据Apple说:
国际化是设计和构建应用程序以促进本地化的过程。反过来,本地化是对两个或多个文化不同的市场的国际化应用的文化和语言适应。
国际化准备您的本地化应用程序。例如,您可以使用Unicode(utf8mb4
而不是latin1
)对数据库中存储的字符进行编码,将字符串移动到资源文件,启用日期,时间和货币格式等。
例如,如果您希望销售应用程序的中文版本,则可以通过聘请翻译人员构建zh-CN资源文件进行本地化,并使用新的日期/时间/货币格式。
L10n有时可以显示你的i18n失败的地方 - 例如,你的词典只有一个单词条目用作一个名词,一个英语动词不能翻译成另一种语言的同一个单词,或者UI元素/ design不适合文化(L / R方向)。
所以l10n“通常”发生在i18n之后,但可以反馈到你的i18n并需要进一步重新设计,所以你不能认为你的应用程序完全国际化,直到你做了一些本地化。
国际化是设计软件应用程序的过程,以便它可以适应各种语言和地区without engineering changes
。
本地化是adapting internationalized software
针对特定区域或语言的过程,通过添加特定于语言环境的组件和翻译文本。
此外,本地化(可能多次针对不同的语言环境执行)使用infrastructure or flexibility provided by internationalization
(理想情况下只执行一次,或作为正在进行的开发的一个组成部分)。
全球化(G11n):是向全球市场开发和营销多语言软件产品的过程。
多语言软件的开发目前分为两个阶段:第一阶段是国际化,第二阶段是本地化。
国际化(I18n):推广产品的过程,使其能够处理多种语言和文化习俗,而无需重新设计(即语言和文化中立)。
本地化(L10n):采用产品并使其在语言和文化上适合目标地区(国家/地区和语言)使用和销售(即语言和文化特定)的过程。
如果按照以下定义,这很简单,
i18n(国际化)是
设计应用程序的过程,使其具有更改为不同语言的功能,而无需通过程序更改应用程序。
l10n(本地化)是
创建实际语言特定文本和格式的过程。
很多答案,很多正确的信息,但我的答案是一点点另一种观点。
国际化 - 当开发人员在某些语言中没有代码直接消息/错误消息/按钮名称/标签字幕/等时,但是有一个传递给翻译功能的键,并且根据当前用户的语言环境的翻译功能将返回最终文本在英语/法国/等... 翻译功能与存储(db / files / associative array / etc)一起使用。 存储包含以coode和值的形式使用的键,这些是应用程序支持的特定语言的文本。
本地化 - 它是在适合密钥存储的新语言(例如西班牙)中添加新值而不涉及此过程中的开发人员的过程。
例如,我们有存储空间:
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 |
而这里的开发人员不需要更新代码,翻译功能会正确地携带相应的文本。
这里有一些非常好的答案,所以我不会回收它们。然而,在某些时候,通常在国际化测试和本地化语言测试之间,国际化和本地化往往会重叠。有人提到l10n反馈国际化,但如果你正在进行高质量的i18n测试,并创建伪本地化内容,那么在本地化期间迭代开发问题应该是例外,而不是规则。界面调整大小,特别是调整页面以支持阿拉伯语和希伯来语等双向语言也倾向于融合本地化问题和国际化工程。
可以这么说,国际化涉及对源进行更改以支持基于需求的任何区域设置。如果国际化做得好......
......本地化涉及内容的适应性和某些级别的呈现(例如粗体标记),以便最好地满足特定目标市场(区域性)的需求。
很多文章和白皮书供参考:http://www.lingoport.com/software-internationalization-articles
以上是关于本地化和国际化,有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
ngx-translate实现国际化:this.translate.use()this.translate.get()this.translate.instant()onLangChange(代码片段