引用另一个让我在这里结束的问题。
这些 PHP 代码行中的双下划线是什么意思?
$WPLD_Trans['Yes']=__('Yes',$WPLD_Domain);
$WPLD_Trans['No']=__('No',$WPLD_Domain);
以及有关在 Wordpress 等中使用等的__()
相关问题。_()
开始作为对上述问题和其他相关问题的回答。但是发布为自己的问题(带有答案),因为它变得更加详细。
请随时编辑和改进 - 或输入更好的答案/问题。
引用另一个让我在这里结束的问题。
这些 PHP 代码行中的双下划线是什么意思?
$WPLD_Trans['Yes']=__('Yes',$WPLD_Domain);
$WPLD_Trans['No']=__('No',$WPLD_Domain);
以及有关在 Wordpress 等中使用等的__()
相关问题。_()
开始作为对上述问题和其他相关问题的回答。但是发布为自己的问题(带有答案),因为它变得更加详细。
请随时编辑和改进 - 或输入更好的答案/问题。
__(…)
各种实现都使用双下划线。提到了 Wordpress (WP),phpMyAdmin (PMA) 是另一个,等等。
它反映了原生 PHP 函数 gettext()
,在 PHP 中有一个别名为单个下划线:_()
。这不是 PHP 独有的。Gettext本身是一个长期存在的 GNU 项目,用于在类 Unix 系统上编写多语言程序。我们_()
在各种编程语言中找到别名。
在谦虚/诚实的意见中,可以说,_()
作为本地和 __()
自定义实现gettext
,或其他特定于语言环境的用途,是唯一有效的 - 因为它是一个完善的约定。另一方面,它并不好,但即使如此简洁。例如,在 ANSI-C 标准中,双下划线__
保留给编译器内部使用;并且由于 PHP 与 C 密切相关,因此他们保留了它,而且总的来说,即使跨语言(恕我直言)混淆也不是最好的事情,它处于边界/薄冰/等等。
(这里的一个问题是选择UnderscoreJS作为_
他们的基础,与语言支持无关。)将它与prototype.js 混合,$
并且$$
可能会理解为什么有人在看到时会挠头__()
——尤其是拿考虑到 PHP 和 JS 在实现一个工作系统时有多接近。
在这一步中,我对用法做了一些说明:Locale support with weight on i18n
and L10n
。
通过提供语言支持,它经常与WP、2、3和(有据可查的)PMA一起使用。例如:
__('Error');
将产生Feil
挪威语或Fehler
德语。但是,这里需要注意的一件重要事情是,在同一领域中,我们拥有的不仅仅是直接翻译,还有在不同地区/文化/语言中发现的其他怪癖。
例如(指定):
一些语言使用逗号 – ,
– 作为小数分隔符,其他语言使用点 – .
– 用于相同目的。其他典型的语言环境变化是厘米与英寸、日期格式、12 与 24 小时制、货币等。所以:
数字时间 LANG1:3,133.44 2.00 英寸 5:00 PM LANG2:3.133,44 5,08 厘米 17:00
您揭开的下一层代码可能会参考一些相当神秘的约定,例如i18n
变量l10n
名、函数和文件名。
一旦您知道它们的含义,它们就非常方便,但定义可能会有些模糊。一般来说,我们有:
i18n:国际化 l10n:本地化(通常是 L10n) g11n:全球化(例如 IBM 和 Sun Microsystems 使用) l12y:可本地化(微软) m17n:多语言化(国际化和本地化之间的连续体) ... 等等。
哎呀,我的头好痛。
数字是指单词中第一个和最后一个字母之间的字母数。之前和之后的字母 - 是单词中的第一个和最后一个字母。呸。所以:
i18n l10n 国际化本地化 | | | | +-- 18 个字母 --+ +-- 10 --+ 我 18 nl 10 n
(我们也有更强大的数字名称,不遵循这个约定,比如G8
(八人组)-,但是我们超出了编程领域-或者我们是这样吗?)。
然后是定义:
W3C对国际化 (i18n) 和本地化(l10n)有一个相当清晰的定义。
国际化 (i18n) 是产品、应用程序或文档内容的设计和开发,能够为不同文化、地区或语言的目标受众轻松本地化。
本地化 (l10n) 是指调整产品、应用程序或文档内容以满足特定目标市场(区域设置)的语言、文化和其他要求。
来自debian的关于该主题的简短而简洁的版本是:
通常,在查看代码、阅读等本地化时,会遇到domain的用法。一个对搜索引擎更友好的名称可能是Translation Domain
.
(在这里我有点如履薄冰。)。
简而言之,可以将其定义为context。作为一个基地,你有一个语言环境。例如苏格兰。但是您可以进一步将域定义为主题、专业等的一部分。例如,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/ …
如果您看一下例如 PMA,您会发现一个名为locale
. 它包含各种语言的各种目录。这些文件带有.mo
扩展名。这是 GetText 特定的文件。一种通常从 PO(可移植对象)文件开始,它是纯文本文件。这些被索引并编译为 MO(机器对象)文件,这些文件被索引以进行优化。更多关于这里的信息(与上面的PMA链接相同)。