【问题标题】:PHP: What does __('Some text') do?PHP:__('Some text') 做什么?
【发布时间】:2010-03-11 17:26:26
【问题描述】:

阅读Kohana templates 并看到一些我以前从未见过的东西:

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

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

【问题讨论】:

  • 奇怪...我下载了 Kohana,但在源代码中找不到对此类函数的任何引用。
  • @Alvaro 也许你下载了 2.x 版。尝试找到第 3 版。

标签: php kohana-3


【解决方案1】:

在 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!

【讨论】:

【解决方案2】:

双 '__' 用于 CakePHP(以及可能的其他框架)中的本地化

http://book.cakephp.org/view/163/Localization-in-CakePHP

【讨论】:

  • 您评论的问题是,您所说的“本地化”是什么意思? :D
  • @ElsonSolano,不,这应该是众所周知的,如果不是,这里还有其他问题回答它是什么:)
【解决方案3】:

这意味着有人创建了一个名为 __ 的函数(这是两个并排的下划线。)

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

【讨论】:

  • 他问这是什么意思。这对我来说意味着他不知道这是函数调用。 YMMV。
  • @Adriano 我不同意,这个问题至少似乎认为这是 other 而不是函数。就像 jQuery 中的 $ 一样,这是一个奇怪的函数名,可能会被混淆为其他东西。
  • +1,并非完全没用,我同意 Tim Lytle 的观点。如果这被其他更好的答案接受,我只会感到不安。
【解决方案4】:

我是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/

【讨论】:

  • 那不是只有 一个 _,而不是两个吗?
  • 我不知道。但问题是关于“两个下划线”的功能。
  • @T.J. Crowder 是的,我的第一次搜索出现了那篇文章,我没有注意到它只有一篇而不是两篇。但是,在第二次搜索时,它看起来基本上是做同样的事情。只是针对框架实现的。
  • 我怀疑框架会重新实现它,因此您无需在配置框架之上再配置 gettext。
【解决方案5】:
// Display a translated message
echo __('Hello, world');

// With parameter replacement
echo __('Hello, :user', array(':user' => $username));

详情请见http://kohanaframework.org/3.2/guide/api/I18n

【讨论】:

  • 如果上述方法不起作用,您可以使用它 echo __('Hello, %1', $username);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 2012-07-01
  • 1970-01-01
  • 2014-06-22
  • 2019-11-22
  • 2010-09-27
  • 1970-01-01
相关资源
最近更新 更多