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(截图)
在我的仪表板中,Projects
和 Add New
按钮仍然以英文显示,尽管已分别翻译为 Projekte
和 Erstellen
。
我做错了什么?非常感谢。
好吧,虽然我无法解决 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"
在我正在开发的 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(截图)
在我的仪表板中,Projects
和 Add New
按钮仍然以英文显示,尽管已分别翻译为 Projekte
和 Erstellen
。
我做错了什么?非常感谢。
好吧,虽然我无法解决 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"