2015-05-08 157 views
3

在PHP中,特別是在WordPress的,什麼是__('string')_x('string')之間的區別?「雙下劃線」和「下劃線x」有什麼區別?

我閱讀WordPress的文檔和困惑。混亂的下很好的例子,從上Wordpress doc示例代碼繪製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') 
); 
+0

見['_x()'](https://codex.wordpress.org/Function_Reference/_x)和['__()'](HTTPS://codex.wordpress。 org/Function_Reference/_2)→上下文參數。 – mario

回答

2

在WordPress中,既_x()__()是翻譯功能。 _x()允許你指定翻譯上下文:

<?php _x($text, $context, $domain); ?> 

__()並不:

<?php __($text, $domain); ?> 

上下文選項是哪裏直譯可能不會產生預期的結果不同的情況下非常有用。

由於字符串'Read'本身可能具有幾種不同的英文含義之一,所以給出上下文以便譯員知道他們應該提供一個短期的意思,即「我已閱讀的書」。

一些其他的例子可能是: 「日期」, 「類型」, 「右」, 「樹葉」 等

來源:WordPress Codex

3

__(..)不直接翻譯從字符串A到字符串乙

_x(..)讓你提供上下文。例如,假設您有兩個英文字符串表示相同的事物,但在另一種語言中可能不是同一件事,那麼您可以使用_x來提供上下文,以便儘管您的字符串在英語中是相同的,但您可以將它們翻譯到另一種語言的2個不同的字符串。

,以便在你的問題的例子,你有

__('All Books', 'your-plugin-textdomain'),

它採用__因爲筆者一定以爲「‘所有的書’永遠意味着‘所有的書籍’在每一個方面,這個詞是用過的」。但是讓我們考慮爲_x一個用例:

_x('Books', 'post type general name', 'your-plugin-textdomain')

所以在這裏筆者想「‘圖書’是一個通用詞,這取決於我們在我們的應用程序中使用的術語‘圖書’的背景下,我們可能想要以不同的方式來翻譯這個術語「 - 因此使用其他參數作爲上下文。當將'Books'翻譯爲上述行中的另一種語言時,我們會知道我們正在討論插件的textdomain環境中的書籍。

來源:http://wpengineer.com/2237/whats-the-difference-between-__-_e-_x-and-_ex/