I18N安全意味着什么?

我遇到了一些代码中提到的代码是“I18N安全”的评论。

这是指什么?

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

I18N安全意味着在devise和开发过程中采取了一些步骤,以便稍后进行本地化(L10N)。

这通常被称为代码或构造准备好I18N – 即通过普通的I18N技术轻松支持。 比如,下面就准备好了:

printf(loadResourceString("Result is %s"), result); 

而以下不是:

 printf("Result is " + result); 

因为单词顺序可能在不同的语言中有所不同。 Unicode支持,国际date时间格式等也是合格的。

编辑:添加loadResourceString作为一个接近现实生活的例子。

国际化。 它的推导是“字母I,十八个字母,字母N”。

国际化意味着我国际化 =>我( 18个字母 )n。 被标记为i18n安全的代码将是正确处理非ASCII字符数据的代码(例如Unicode)。

I18N代表国际化。

i18n是“国际化”的简写。 这是在DEC创造的,实际上使用小写字母in

作为一个旁注:L10n代表“本地化”,并使用大写L来区分它与小写字母i

没有任何额外的信息,我想这意味着代码将文本处理为UTF8,并且是区域意识。 有关更多信息,请参阅此维基百科文章 。

你能更具体一点吗?

国际安全是一个模糊的概念。 它通常是指可以在国际环境中工作的代码 – 具有不同的语言环境,键盘,字符集等。真正的国际安全代码很难写。

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

sizeof(char)== 1

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

这意味着代码不能依赖于一个string的字节数等于string的长度。 这意味着代码不能依赖string中的零字节来指示一个nul终止符。 这意味着代码不能简单地假定文本文件,string和input的ASCII编码。

I18N代表国际化 。

简而言之:I18N安全代码意味着它在UI上为文本使用某种查找表。 为此,您必须支持非ASCII编码。 这似乎很容易,但有一些陷阱 。

i18n处理 – 把硬编码的string从代码中移出(不是所有的都应该是这样),所以它们可以被本地化/翻译(本地化== L10n),正如其他人指出的那样,并且还处理 – 区域敏感的方法,例如 – 处理文本处理的方法(日文文本中有多less单词是显而易见的),不同语言/文字系统中的订单/整理, – 处理date/时间(最简单的例子是显示上午/下午例如美国,例如法国的24小时制,为特定的国家制定更为复杂的日历) – 处理阿拉伯文或希伯来文(用户界面和文本的方向等) – 像别人指出的那样 – 数据库问题这是一个相当全面的angular度。 只是处理“string外化”是远远不够的。

一些(软件)语言在帮助开发人员编写i18n代码(意味着将在不同地区运行的代码)方面比其他语言更好,但它仍然是软件工程的责任。

“I18N安全”编码是指不引入I18N错误的代码。 I18N是国际化的统称,I和N之间有18个字符。

与国际化有关的问题有多种,如:文化格式:date时间格式(英国的DD / MM / YY和美国的MM / DD / YY),数字格式,时区,度量单位从文化到文化。 数据必须被接受,处理,并以适当的文化/语言环境正确的格式显示。 国际angular色支持:所有不同语言的angular色都应该被接受,处理和正确显示。 可定位性:可翻译的string不应该是硬编码。 它们应该在资源文件中被外化。

“I18N安全”编码意味着以上问题都不是通过编写代码的方式引入的。