6

引用另一个让我在这里结束的问题。

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

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

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

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

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

4

1 回答 1

8

的使用__(…)

各种实现都使用双下划线。提到了 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 i18nand L10n

通过提供语言支持,它经常与WP23和(有据可查的)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的关于该主题的简短而简洁的版本是:

  • 国际化 (I18N):使软件有可能处理多个语言环境。
  • 本地化(L10N):使软件处理特定的语言环境。

的使用

通常,在查看代码、阅读等本地化时,会遇到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/
…

与 GetText 一起使用的文件

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


于 2013-01-11T01:10:24.880 回答