WordPress 不支持自定义 post 类型的 _x() 标签函数的翻译

WordPress not honoring translations of _x() label functions of custom post type

在我正在开发的 WordPress 主题中,我注册了一个名为 'Project' 的自定义 post 类型,如下所示。

function add_custom_post_type() {

register_post_type( 'project', 
    array(
        'label'         => __( 'Projects', 'maria' ),
        'labels'        => array(
            'name'               => _x( 'Projects', 'post type general name', 'maria' ),
            'singular_name'      => _x( 'Project', 'post type singular name', 'maria' ),
            'menu_name'          => _x( 'Projects', 'admin menu', 'maria' ),
            'name_admin_bar'     => _x( 'Project', 'add new on admin bar', 'maria' ),
            'add_new'            => _x( 'Add New', 'project', 'maria' ),
            'add_new_item'       => __( 'Add New Project', 'maria' ),
            'new_item'           => __( 'New Project', 'maria' ),
            'edit_item'          => __( 'Edit Project', 'maria' ),
            'view_item'          => __( 'View Project', 'maria' ),
            'all_items'          => __( 'All Projects', 'maria' ),
            'search_items'       => __( 'Search Projects', 'maria' ),
            'parent_item_colon'  => __( 'Parent Projects:', 'maria' ),
            'not_found'          => __( 'No Projects found.', 'maria' ),
            'not_found_in_trash' => __( 'No Projects found in Trash.', 'maria' )
            ),
        'public'        => true,
        'menu_position' => 5,
        'supports'      => array( 'title', 'editor', 'thumbnail' ),
        'rewrite'       => array( 'slug' => __( 'project' ))
        )
    );
}
add_action( 'init', 'add_custom_post_type' );

使用 Poedit 应用程序,我现在正在尝试将自定义 post 类型的标签翻译成德语。我正在导入 functions/keywords ___e_x。字符串按预期显示。

https://abload.de/img/screenshot2019-09-29av4jhv.png(截图)

然而,在翻译我的 .po 文件并为 WordPress 本地化编译 .mo 文件时,WordPress 似乎只尊重我为 ___e 函数输入的翻译,而忽略 _x 函数。

https://abload.de/img/screenshot2019-09-29ah7jxx.png(截图)

在我的仪表板中,ProjectsAdd New 按钮仍然以英文显示,尽管已分别翻译为 ProjekteErstellen

我做错了什么?非常感谢。

好吧,虽然我无法解决 WordPress 不支持 _x 函数翻译的问题,但我通过使用以下解决方法让标签正确显示。

在我的 register_post_type 函数中,我将所有 _x 函数更改为 __ 函数(删除过程中的上下文参数)。最终工作代码如下:

function add_custom_post_type() {

register_post_type( 'project', 
    array(
        'label'         => __( 'Projects', 'maria' ),
        'labels'        => array(
            'name'               => __( 'Projects', 'maria' ),
            'singular_name'      => __( 'Project', 'maria' ),
            'menu_name'          => __( 'Projects', 'maria' ),
            'name_admin_bar'     => __( 'Project', 'maria' ),
            'add_new'            => __( 'Add New', 'maria' ),
            'add_new_item'       => __( 'Add New Project', 'maria' ),
            'new_item'           => __( 'New Project', 'maria' ),
            'edit_item'          => __( 'Edit Project', 'maria' ),
            'view_item'          => __( 'View Project', 'maria' ),
            'all_items'          => __( 'All Projects', 'maria' ),
            'search_items'       => __( 'Search Projects', 'maria' ),
            'parent_item_colon'  => __( 'Parent Projects:', 'maria' ),
            'not_found'          => __( 'No Projects found.', 'maria' ),
            'not_found_in_trash' => __( 'No Projects found in Trash.', 'maria' )
            ),
        'public'        => true,
        'menu_position' => 5,
        'supports'      => array( 'title', 'editor', 'thumbnail' ),
        'rewrite'       => array( 'slug' => __( 'project' ))
        )
    );
}
add_action( 'init', 'add_custom_post_type' );

我 运行 进入这个问题,发现 .pot / .po 文件需要使用 msgctxt 键定义上下文。所以,例如:

'name' => _x( 'Projects', 'post type general name', 'maria' ),

需要使用 msgctxt 定义上下文 'post type general name',如下所示:

#: inc/file.php:120
msgctxt "post type general name"
msgid "Projects"
msgstr "Projekts"