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

时间:2013-01-11 01:09:58

标签: php c++ c localization internationalization

引用在此结束我的another question

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

$WPLD_Trans['Yes']=__('Yes',$WPLD_Domain);
$WPLD_Trans['No']=__('No',$WPLD_Domain);

以及有关在Wordpress等中使用__()_()等的相关问题。

开始作为上述答案,以及其他相关的答案。但是随着它变得更加详细,发布为自己的问题(带答案)。

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

1 个答案:

答案 0 :(得分:8)

__(…)

的用法

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

它反映在native PHP function gettext()上,在PHP中有一个别名underscore_()。这不是PHP独有的。 Gettext本身就是一个长期存在的GNU项目,用于在Unix系统上编写多语言程序。我们在各种编程语言中找到_()别名。

对主题的反思

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

这里的一个问题是UnderscoreJS选择使用_作为与语言支持无关的基础。)将其与原型混合使用.js' $$$并且可能有一些理解为什么有人在看到__()时会摸不着头脑 - 特别是考虑到PHP和JS在执行a时的接近程度工作系统。


区域设置支持

在此步骤中,我会对使用情况做一些说明:区域设置支持,重量为i18nL10n

通常使用WP23和(well documentedPMA来提供语言支持。 E.g:

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

E.g。 (指定):

有些语言使用逗号 - , - 作为小数分隔符,其他语言使用点 - . - 用于相同目的。其他典型的区域设置变体是厘米与英寸,日期格式,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.

aich,我的头疼。

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

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

i       18         n    l    10    n

(我们还有更强大的 numeronyms 不遵循G8(八国集团)这样的惯例 - 但是我们已经超出了这个范围编程 - 还是我们?)。

然后到定义:

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

  • 国际化(i18n)是产品,应用程序或文档内容的设计和开发,支持轻松实现文化,地区或语言不同的目标受众的本地化。 / p>

  • 本地化(l10n)是指产品,应用程序或文档内容的改编,以满足特定目标市场(语言环境)的语言,文化和其他要求。

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

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

使用

通常,在查看代码,阅读等本地化时,会遇到的使用情况。更多搜索引擎友好 -name可能是Translation Domain

这里我有点在冰上。)。

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

提供一些线索的页面是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,机器对象,这些文件被索引以进行优化。有关此here的更多信息(与上面的 PMA - 链接相同)。