在PHP,Wordpress,phpMyAdmin,C,i18n,L10n等双下划线?

Run*_*ium 6 php c c++ localization internationalization

引用另一个在此结束我的问题.

这些PHP代码行中的双重下划线是什么意思?

$WPLD_Trans['Yes']=__('Yes',$WPLD_Domain);
$WPLD_Trans['No']=__('No',$WPLD_Domain);
Run Code Online (Sandbox Code Playgroud)

约的用途相关的问题__(),_()等等.在WordPress的等.

作为上述一个答案开始,和其他相关.但是作为自己的问题(带答案)发布,因为它变得更加详细.

请随时编辑和改进 - 或输入更好的答案/问题.

Run*_*ium 8

用法 __(…)

各种实现使用双下划线.提到Wordpress(WP),phpMyAdmin(PMA)是另一个,依此类推.

它反映了本机PHP函数 gettext(),它在PHP中有一个别名作为单个下划线:_().这不是PHP独有的.Gettext本身就是一个长期的GNU项目,用于在Unix系统上编写多语言程序.我们_()在各种编程语言中找到了别名.

关于这个问题的思考

在谦虚/诚实的观点中,人们可以说,_()作为本地和 __()自定义实现gettext,或其他特定于区域的用途,是唯一有效的 - 因为它是一个完善的惯例.另一方面它并不,但即使如此简洁.例如,在ANSI-C标准中,双下划线__保留用于编译器的内部使用; 并且由于PHP与C密切相关,因此它们保留了它,并且通常它甚至不是跨语言混合的最好的东西(恕我直言),它是在边界/薄冰/等.

(这里的一个问题是选择使用UnderscoreJS_作为与语言支持无关的东西的基础.)将它与prototype.js混合使用$,$$并且可能有一些理解为什么有人在看到时会挠头__()- 特别是考虑到PHP和JS在实现工作系统方面的接近程度.


区域支持

在这一步,我做了一些注意事项是用法:带有权重的区域设置支持i18nL10n.

它经常被使用,如与WP,2,3及(在有据可查)PMA,通过给语言支持.例如:

__('Error');将以Feil挪威语或Fehler德语收取.但是,需要注意的一件重要事情是,在同一领域,我们有更多的直接翻译,还有其他在不同语言环境/文化/语言中找到的怪癖.

例如(指定):

有些语言使用逗号 - ,- 作为小数分隔符,其他语言使用点 - .- 用于相同的目的.其他典型的区域变化是厘米与英寸,日期格式,12对24小时时钟,货币等.所以:

       NUMBER    LEN        TIME
LANG1: 3,133.44  2.00 inch   5:00 PM
LANG2: 3.133,44  5,08 cm    17:00

您揭开的代码下一层可能会有些参考而神秘的约定如i18nl10n变量名,函数和文件名.

一旦你知道他们的意思他们是非常方便的,定义可能有点模糊.一般来说,我们有:

i18n: Internationalization
l10n: Localization (Often L10n)
g11n: Globalization (Used by e.g. IBM and Sun Microsystems)
l12y: Localizability (Microsoft)
m17n: Multilingualization (Continuum between internationalization and localization)
...   And so on.

艾希,我的头疼.

数字是指第一个和最后一个字母之间的单词中的字母数.之前和之后的字母 - 是单词中的第一个和最后一个字母.唷.所以:

       i18n                 l10n
internationalization    localization
 |                |      |        |
 +-- 18 letters --+      +-- 10 --+

i       18         n    l    10    n

(我们也有更强大的数字名称,不遵循这样的惯例,如G8(八国集团) - 但是,那么我们不在编程领域 - 或者我们?).

然后到定义:

W3C国际化(i18n)和本地化(l10n)有一个相当明智的定义.

  • 国际化(i18n)是产品,应用程序或文档内容的设计和开发,可以为文化,地区或语言不同的目标受众轻松进行本地化.

  • 本地化(本地化),是指适应产品,应用程序或文档的内容,以满足语言,具体的目标市场(一个区域)的文化等方面的要求.

debian关于这个主题的简短而简洁的版本是:

  • 国际化(I18N):使软件可能处理多个区域设置.
  • 本地化(L10N):使软件处理特定的区域设置.

域名的使用

通常,在查看代码,阅读等本地化时,会遇到的使用.或许可以使用更多搜索引擎友好的名称Translation Domain.

(这里我有点薄冰.)

简而言之,可以将其定义为上下文.作为基础,您有一个区域设置.比如苏格兰.但是你可以进一步定义一个域作为主题,专业等的一部分.例如,编程中的Java与咖啡店有很大不同.或者在一个关于女性与农业的退化网站上的.

提供一些线索的页面是repoze.org:

翻译目录通常是:

/path/to/your/translation_root/en_US/LC_MESSAGES/
/path/to/your/translation_root/en_GB/LC_MESSAGES/
/path/to/your/translation_root/nn_NO/LC_MESSAGES/
…

与GetText一起使用的文件

如果您查看例如PMA,您将找到一个名为的目录locale.它包含各种语言的各种目录.这些文件带有.mo扩展名.这是GetText特定文件.一个通常从PO,可移植对象开始,文件是纯文本文件.它们被索引并编译为MO,机器对象,这些文件被索引以进行优化.更多关于此这里(同PMA以上-链接).