You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress中翻译自定义用户角色名称

解决WordPress自定义用户角色名称翻译问题

因为add_role仅在首次执行时将角色数据写入数据库,后续后台直接读取数据库中的值,所以直接在add_role里用__()只会保存执行时的语言版本,无法动态切换。下面提供两种可行方案:

方法1:用过滤器动态翻译(推荐,无需修改数据库)

通过钩子拦截角色名称的输出,实时根据当前语言环境翻译,不影响数据库存储的原始值。

处理通用文本输出

添加gettext过滤器,拦截角色名称的显示并替换为翻译后内容:

add_filter('gettext', 'translate_warehouse_role', 10, 3);
function translate_warehouse_role($translated_text, $original_text, $domain) {
    // 匹配原始角色名称,替换为带文本域的翻译值
    if ($original_text === 'Warehouse' && $domain === 'default') {
        return __('Warehouse', 'mytextdomain');
    }
    return $translated_text;
}

处理用户角色下拉列表

如果角色在用户编辑页的下拉框中显示,还需额外处理list_roles过滤器:

add_filter('list_roles', 'fix_warehouse_role_list_display');
function fix_warehouse_role_list_display($roles) {
    if (isset($roles['warehouse'])) {
        $roles['warehouse']['name'] = __('Warehouse', 'mytextdomain');
    }
    return $roles;
}

方法2:更新数据库中的角色名称(需谨慎操作)

如果希望数据库里存储的就是可翻译的结构,需要先删除旧角色再重新创建。注意:删除角色会清空所有该角色用户的角色权限,操作前务必备份用户数据!

步骤如下:

  1. 执行一次删除并重建角色的代码(仅运行一次):
// 删除旧角色(执行一次后立即注释掉)
remove_role('warehouse');
// 重新创建带翻译的角色
add_role('warehouse', __('Warehouse', 'mytextdomain'), get_role('administrator')->capabilities);
  1. 访问一次WordPress后台,确认角色重建完成
  2. 立即注释掉remove_role代码,避免每次加载都删除角色

最后确保你的主题/插件已正确加载mytextdomain文本域,且对应的翻译文件(如mytextdomain-zh_CN.mo)中包含Warehouse的中文翻译(例如“仓库管理员”)。

内容的提问来源于stack exchange,提问作者Pavol Eichler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:14:50