关于getText语法的意义是什么?

时间:2012-07-07 作者:Circuit Circus

到目前为止,我一直在处理Wordpress中的一些翻译,并试图阅读官方的gettext文档,但没有找到一件可能很简单的事情:像\\uu(,\\ u e(,等等)这样的开头之间有什么区别?甚至更多:旁边还有哪些其他的?提前谢谢!

直率的

3 个回复
最合适的回答,由SO网友:Otto 整理而成

__ (双下划线)是基本转换函数。它转换字符串并将其作为字符串返回。

_e 是否与相同__, 但echo马上就是结果。

_x 是上下文翻译功能。它还有第二种选择,为翻译人员提供上下文。

_ex 与相同_x, 但echo是结果。

使用示例_x:

$string = _x( \'Buffalo\', \'an animal\', \'plugin-domain\' );
$string = _x( \'Buffalo\', \'a city in New York\', \'plugin-domain\' );
$string = _x( \'Buffalo\', \'a verb meaning to confuse somebody\', \'plugin-domain\' );
有时,相同的字符串在其他语言中可能不同。为翻译人员提供上下文可以帮助他们选择正确的单词。

快捷方式功能:

  • esc_attr__ : 相当于__ 但也会将结果贯穿始终esc_attr.
  • esc_html__ : 相当于__ 但也会将结果贯穿始终esc_html.
  • esc_attr_e : 相当于_e 但也会将结果贯穿始终esc_attr.
  • esc_html_e : 相当于_e 但也会将结果贯穿始终esc_html.
  • esc_attr_x : 相当于_x 但也会将结果贯穿始终esc_attr.
  • esc_html_x : 相当于_x 但也会将结果贯穿始终esc_html.
_n 是复数处理程序。示例:

$string = sprintf( _n(
        \'You have %d taco.\', 
        \'You have %d tacos.\', 
        $number, 
        \'plugin-domain\'), 
    $number );
在这个例子中,有两种方法来表示玉米饼的数量,这取决于它是否是单数。第一次使用$number告诉_n 函数使用哪个版本。$number的第二次使用发生在sprintf中,用字符串中的实际数字替换%d。

没有等效的回声函数_n, 但有一个函数名为_nx. 它是_n_x. 多元化和语境。

_n_noop 是一个特别的。它用于翻译复数字符串,但实际上并不立即执行翻译。如果您希望使字符串集中化,但实际上在其他地方执行工作,这将非常有用。在其他地方实际起作用的函数是translate_nooped_plural.

示例:

$holder = _n_noop(\'You have %d taco.\', \'You have %d tacos.\', \'plugin-domain\');
// ... later ...
$string = sprintf( translate_nooped_plural( $holder, $count ), $count );
这没有太多的用途,但对于组织来说很方便。例如,如果将所有字符串放在一个文件中,然后在其他地方引用它们,那么仅使用_n, 你需要这样的东西_n_noop 这样做。

_nx_noop 与相同_n_noop, 但也可以为翻译人员提供上下文,与_x.

请注意,您可以将域放入noop函数调用或translate\\u nooped\\u复数函数调用中。无论哪个对您的组织更有意义。如果两者都有一个域,那么传递给noop调用的域将获胜。

number_format_i18n 相当于PHP的内置number_format, 但它增加了对小数等事物的处理,这在其他地区是不同的。

date_i18n 相当于PHP的内置date, 以及所有相关的处理。月份名称、日期名称等。

而且never break the laws. 只是提醒一下。:)

SO网友:Johannes Pille

__(),\\u e()和\\u x(),\\u ex()

__()_e() 本质上都是translate() (不要直接使用)几乎相同。

区别在于__() 返回翻译后的字符串,并_e() 与之呼应。两者都需要输入一个字符串作为必需参数,并且通常(尽管是可选的)还需要一个textdomain。

类似地,有_x()_ex(), 它允许您指定一个上下文,该上下文可以描述字符串的显示位置。如果您的项目包含几十个以上的可翻译字符串,那么使用上下文就很有意义。

此外,请注意_n()_nx() 复数。

常见用法示例

$output = \'<label for="some_field">\' .
        _x( \'Some Information.\', \'Some Form Field\', \'your-text-domain\' ) .
    \'</label>\' .
    \'<input type="text" name="some_field" value="" />\' .
    \'<p class="description">\' .
        _x( \'Here you can enter some info.\', \'Some Form Field\', \'your-text-domain\' ) .
    \'</p>\';

return $output;

参数

__( $text, $domain )
_e( $text, $domain )
_x( $text, $context, $domain )
_ex( $text, $context, $domain )
_n( $single, $plural, $number $domain )
_nx( $single, $plural, $number, $context, $domain )
所有参数,但$number 是字符串。所有,但$domain 是必需的。

变量和sprintf()更加灵活如果字符串将包含变量数字或单词,请使用sprintf():

$stars = get_post_meta( $post->ID, \'rating\', true );
$title = get_the_title( $post->ID );

$output = \'<p>\' .
        sprintf(
            _x(
                \'The movie titled %2$s received a %1$d star rating.\',
                \'Movie Description\',
                \'your-text-domain\'
            ),
            $stars,
            $title
        ) .
    \'</p>\';

return $output;
其他资源

即将推出的WordPress I18n Ninja的一些其他资源:

SO网友:Jeremy Jared

我不是翻译专家,但WordPress Codex页面有很好的文档,并解释了使用每个实例的原因。

From the codex pages:

__()

当消息作为参数传递给另一个函数时使用;_e() 用于将消息直接写入页面。关于这两个功能的更多详细信息:

__(\'message\')

在本地化模块中搜索“message”的翻译,并将翻译传递给PHP return语句。如果找不到“message”的翻译,它只返回“message”。

_e(\'message\')

在本地化模块中搜索“message”的翻译,并将翻译传递给PHP echo语句。如果找不到“message”的翻译,它只会回显“message”。

请注意,如果要国际化主题或插件,则应使用"Text Domain".

gettext框架负责大部分WordPress。但是,WordPress发行版中有几个地方无法使用gettext:

WordPress的主要自述文件——它是一个静态HTML文件,不是PHP文件,因此无法通过gettext函数运行

Link to the Codex Page

Additional info regarding when gettext doesn\'t work

希望这能回答你的问题,如果不让我们知道,也许其他人可以帮助,或者我可以做更多的研究。

结束

相关推荐

Plugin Localization

我刚刚为wp构建了我的第一个插件,即使它不是一个伟大的“代码诗意”;)它正常工作。这是一个使用GalleryView 3.0 jquery插件转换默认wp库的插件(http://spaceforaname.com/galleryview).我唯一不能做的就是本地化。此插件的本地化意味着转换管理界面,在这里可以配置jquery插件选项来更改结果库的外观。我试着关注网络上数百万的教程,在论坛上阅读了很多关于这个问题的帖子,并遵循了codex的指南。。。但仍然没有运气。这就是我所做的:每个文本行都位于gette