Internationalization I18N safe是什么意思?

Internationalization I18N safe是什么意思?,internationalization,terminology,Internationalization,Terminology,我在一些代码中看到一条评论,称该代码是“I18N安全的” 这指的是什么?I18N代表国际化。国际化。它的派生词是“字母I,十八个字母,字母N”。i18n表示IInternationalizatioN=>I(18个字母)。标记为i18n-safe的代码将是正确处理非ASCII字符数据(例如Unicode)的代码。I+(约18个字符)+N=国际化 I18N safe意味着在设计和开发过程中采取了一些步骤,这些步骤将有助于以后的本地化(L10N)。如果没有任何附加信息,我猜这意味着代码以UTF8的形式

我在一些代码中看到一条评论,称该代码是“I18N安全的”


这指的是什么?

I18N代表国际化。

国际化。它的派生词是“字母I,十八个字母,字母N”。

i18n表示IInternationalizatioN=>I(18个字母)。标记为i18n-safe的代码将是正确处理非ASCII字符数据(例如Unicode)的代码。

I+(约18个字符)+N=国际化


I18N safe意味着在设计和开发过程中采取了一些步骤,这些步骤将有助于以后的本地化(L10N)。

如果没有任何附加信息,我猜这意味着代码以UTF8的形式处理文本,并具有区域设置意识。有关更多信息,请参阅


你能说得更具体一点吗?

这通常指的是为I18N准备好的代码或结构,即普通I18N技术很容易支持的代码或结构。例如,以下各项已准备就绪:

printf(loadResourceString("Result is %s"), result);
但以下情况并非如此:

printf("Result is " + result);
因为语序在不同的语言中可能会有所不同。Unicode支持、国际日期时间格式等也适用

编辑:添加了loadResourceString,使示例更接近现实生活。

I18N代表

简而言之:I18N安全代码意味着它使用某种查找表来查找UI上的文本。为此,您必须支持非ASCII编码。这似乎很容易,但也有一些。i18n是“国际化”的缩写。这是DEC发明的,实际上使用小写的i和n


旁注:L10n代表“本地化”,并使用大写字母L将其与小写字母i区分开来。

i18n safe是一个模糊的概念。它通常指的是在国际环境下工作的代码——具有不同的语言环境、键盘、字符集等。真正的i18n安全代码很难编写

这意味着代码不能依赖于:

sizeof(char)==1

因为该字符可以是UTF-32 4字节字符,也可以是UTF-16 2字节字符,并占用多个字节

这意味着代码不能依赖字符串的长度等于字符串中的字节数。这意味着代码不能依赖表示nul终止符的字符串中的零字节。这意味着代码不能简单地假定文本文件、字符串和输入的ASCII编码 -将硬编码字符串移出代码(顺便说一句,并非所有字符串都应该是硬编码的),以便可以对其进行本地化/翻译(本地化==L10n),正如其他人所指出的,并且还可以处理 -区域设置敏感的方法,例如 --处理文本处理的方法(日语文本中有多少单词是显而易见的:),不同语言/书写系统中的顺序/排序, --处理日期/时间(最简单的例子是美国显示am/pm,法国显示24小时时钟,特定国家使用更复杂的日历), --处理阿拉伯语或希伯来语(用户界面、文本等的方向), --正如其他人所指出的那样,编码 --数据库问题 这是一个相当全面的角度。仅仅处理“字符串外部化”是远远不够的

一些(软件)语言在帮助开发人员编写i18n代码(即在不同地区运行的代码)方面优于其他语言,但这仍然是软件工程的责任

“I18N安全”编码是指不引入I18N bug的代码。I18N是国际化的数字符号,在I和N之间有18个字符

与i18n相关的问题有多个类别,例如: 区域性格式:日期-时间格式(英国为DD/MM/YY,美国为MM/DD/YY)、数字格式、时区、度量单位随区域性而变化。数据必须以正确的格式接受、处理和显示,以适应正确的区域性/区域设置。 国际字符支持:所有不同语言的字符都应被正确接受、处理和显示。 本地化:可翻译字符串不应该是硬代码。它们应该在资源文件中外部化

“I18N安全”编码意味着上述问题都不是通过编写代码的方式产生的

这是国际化的标志

与首字母缩略词不同,numeronym是一个基于数字的词(例如411=信息,k9=犬科)

在代码中,这通常是一个文件夹标题,它通常指的是在国际环境中工作的代码-具有不同的语言环境、键盘、字符集等。。。"


请在此处阅读更多信息:

通常,代码将字符串保存在一个单独的文件中,该文件可以交换,而不是源代码中。为什么第二个文件与第一个文件不一样?结果不只是粘贴到%s的位置吗?第二个文件允许您轻松地将字符串移动到资源中并重新排列单词。然后你可以把它翻译成例如“%sзззззааааааааааааааазааааа;“相反?@Oscar:这种形式不是‘I18N安全’,当一种特定的I18N技术已经被应用时,它是更进一步的一步。我认为‘I18N安全’指的是使代码更适合I18N的一般想法。但是你的例子也符合要求。因为我有一种迂腐的情绪——它可以像任何Unicode一样处理文本,而不仅仅是UTF8.UTF7或UTF16。”有趣的是,I18N这个术语是I18N安全的,因为它避免了s/z UK/US的事情。非常有趣