PHP:__('Some text')有什么作用?


73

阅读有关Kohana模板的信息,并看到一些我从未见过的东西:

$this->template->title = __('Welcome To Acme Widgets');

什么__('Text')意思 它是什么?它有什么作用?


1
很奇怪...我下载了Kohana,但在源代码中找不到对该功能的任何引用。
阿尔瓦罗·冈萨雷斯

@Alvaro也许您下载了2.x版本。尝试找到版本
3。– Alex

Answers:


46

在Kohana(版本3)中,该函数在system / base.php中定义,并且是一个便利功能(如其他答案所述),有助于国际化。您提供一个字符串(可以选择使用一些占位符将值替换为完成的文本),然后对该字符串进行解释,并在需要时返回翻译。

与其他答案中的假设相反,它不使用gettext

一个非常基本的示例是(该特殊字符串已在Kohana中翻译为英语,西班牙语和法语):

// 1. In your bootstrap.php somewhere below the Kohana::init line
I18n::lang('fr');

// 2. In a view
echo __("Hello, world!"); // Bonjour, monde!

1
从3.2版本开始,它移至Kohana_I18n
timborden 2011年


6

这意味着有人创建了一个名为__的函数(两个下划线彼此相邻。)

我的猜测是在Kohana文档中的某个地方定义了它。


6
他问那是什么意思。对我而言,这意味着他不知道这是函数调用。YMMV。
jmucchiello,2010年

1
@Adriano我不同意,至少这个问题似乎想这是一些其他的不是函数。就像jQuery中的$一样,这是一个奇怪的函数名称,可能会与其他名称混淆。
Tim Lytle 2010年

2
+1,并非完全没有用,我同意蒂姆·莱特尔的观点。如果只有其他更好的答案被接受,我会很沮丧。
Alex

6

它是string gettext ( string $message )http : //php.net/manual/en/function.gettext.php

如果在翻译表中找到一个翻译后的字符串,则返回一个翻译后的字符串;如果未找到,则返回已提交的消息。

__()只是它的别名。所以__("some text")等于gettext("some text")

编辑:实际上,如果它是两个下划线,则不是gettext()。gettext()的别名是一个下划线。

第二次编辑:看起来__()可能是gettext()的另一个别名。与_()略有不同。看到这里:http : //groups.google.com/group/cake-php/browse_thread/thread/9f501e31a4d4130d?pli=1

第三次也是最后一次编辑:这是一篇文章,对其进行更详细的说明。看起来它不是内置函数,而是许多框架中通常添加的东西。它本质上是gettext的别名-它执行相同的功能。但是,它不是直接别名(我不认为)。它在框架中实现并特定于框架。它搜索并返回给定字符串的本地化或翻译。有关更多信息,请参见此博客文章:http : //www.eatmybusiness.com/food/2007/04/13/what-on-earth-does-a-double-underscore-then-parenthesis-mean-in-php- __ / 7 /


1
不只是一个 _,不是两个吗?
TJ Crowder 2010年

我不知道 但是问题是关于功能“两个下划线”的。
jmucchiello,2010年

@TJ Crowder是的,我的第一个搜索结果是该文章,但我没有发现它只是一个而不是两个。但是,在第二次搜索中,它看起来基本上是相同的。刚刚针对该框架实施。
丹尼尔·宾汉

1
我怀疑框架会重新实现它,因此您无需在配置框架的基础上配置gettext。
jmucchiello 2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.