在PHP中,特别是在Wordpress中,__('string')
和_x('string')
之间有什么区别?
我正在阅读Wordpress文档并感到困惑。以下关于混淆的好例子来自register_post_type()
$labels = array(
'name' => _x( 'Books', 'post type general name', 'your-plugin-textdomain' ),
'singular_name' => _x( 'Book', 'post type singular name', 'your-plugin-textdomain' ),
'menu_name' => _x( 'Books', 'admin menu', 'your-plugin-textdomain' ),
'name_admin_bar' => _x( 'Book', 'add new on admin bar', 'your-plugin-textdomain' ),
'add_new' => _x( 'Add New', 'book', 'your-plugin-textdomain' ),
'add_new_item' => __( 'Add New Book', 'your-plugin-textdomain' ),
'new_item' => __( 'New Book', 'your-plugin-textdomain' ),
'edit_item' => __( 'Edit Book', 'your-plugin-textdomain' ),
'view_item' => __( 'View Book', 'your-plugin-textdomain' ),
'all_items' => __( 'All Books', 'your-plugin-textdomain' ),
'search_items' => __( 'Search Books', 'your-plugin-textdomain' ),
'parent_item_colon' => __( 'Parent Books:', 'your-plugin-textdomain' ),
'not_found' => __( 'No books found.', 'your-plugin-textdomain' ),
'not_found_in_trash' => __( 'No books found in Trash.', 'your-plugin-textdomain' )
);
上的示例代码:
Center the hat
答案 0 :(得分:3)
__(..)
会直接从字符串A转换为字符串B
_x(..)
可让您提供上下文。例如,假设您有2个英文字符串表示相同的内容,但在另一种语言中可能并不意味着相同的事情,那么您可以使用_x
来提供上下文,以便尽管您的字符串在英语中是相同的,你可以用另一种语言将它们翻译成2个不同的字符串。
所以你的问题就是一个例子
__( 'All Books', 'your-plugin-textdomain' ),
使用__
,因为作者必须已经考虑过"'所有图书'将永远意味着所有书籍'在每个使用该术语的上下文中#34;但是,我们考虑使用_x
的用例:
_x( 'Books', 'post type general name', 'your-plugin-textdomain' )
所以这里作者正在思考"'书籍'是一个非常通用的术语,取决于我们使用术语' Books'在我们的应用程序中,我们可能希望以不同的方式翻译此术语" - 因此附加参数用作上下文。在翻译“书籍”时对于上述行中的另一种语言,我们知道我们在插件的文本域中讨论了书籍。
来源:http://wpengineer.com/2237/whats-the-difference-between-__-_e-_x-and-_ex/
答案 1 :(得分:2)
在WordPress中,_x()
和__()
都是翻译功能。 _x()
允许您指定翻译的上下文:
<?php _x( $text, $context, $domain ); ?>
__()
没有:
<?php __( $text, $domain ); ?>
上下文选项对于文字翻译可能无法产生所需结果的各种情况非常有用。
由于字符串“Read”本身可能具有英语中几种不同含义中的一种,因此提供了上下文,以便翻译人员知道他们应该提供一个短期内容,意思是“我读过的书籍。”
其他一些例子可能是:“日期”,“类型”,“正确”,“离开”等。