引用在此结束我的another question。
这些PHP代码行中的双重下划线是什么意思?
$WPLD_Trans['Yes']=__('Yes',$WPLD_Domain);
$WPLD_Trans['No']=__('No',$WPLD_Domain);
以及有关在Wordpress等中使用__()
,_()
等的相关问题。
开始作为上述答案,以及其他相关的答案。但是随着它变得更加详细,发布为自己的问题(带答案)。
请随时编辑和改进 - 或输入更好的答案/问题。
答案 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时的接近程度工作系统。
在此步骤中,我会对使用情况做一些说明:区域设置支持,重量为i18n
和L10n
。
通常使用WP,2,3和(well documented)PMA来提供语言支持。 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
您公开的下一层代码可能会引用变量名,函数和文件名中的i18n
或l10n
等相当神秘的约定。
一旦你知道他们的意思他们是非常方便的,定义可能有点模糊。一般来说,我们有:
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关于这个主题的简短而简洁的版本是:
通常,在查看代码,阅读等本地化时,会遇到域的使用情况。更多搜索引擎友好 -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/ …
如果你看看例如PMA你会找到一个名为locale
的目录。它包含各种语言的各种目录。这些文件的扩展名为.mo
。这是GetText特定文件。一个通常从PO,可移植对象开始,文件是纯文本文件。它们被索引并编译到MO,机器对象,这些文件被索引以进行优化。有关此here的更多信息(与上面的 PMA - 链接相同)。