站长直接说结论:midjourney可以zh-简体中文,但绝对不是默认开启的。很多教程让你改个后缀或者加个参数就完事,那是扯淡。MJ官方对中文支持一直处于“半掩门”状态,你直接在Discord里打中文,大概率返回的是英文提示词或乱码。今天这篇,站长只讲硬核路径:从环境变量、API代理、到Bot指令注入,全流程手把手配置,附踩坑排查清单。全程无废话,照着抄即可。
一、前置依赖:别急着敲命令,先确认三件事
⚡ 【免费资源】DeepSeek/Ollama 部署排错手册 + 全套 AI 提示词资料包
站长已将大模型部署排错指南、常用环境配置文件及 AI 提效指令库整合分享至夸克网盘,可极速免费转存:
在动手之前,站长先泼冷水。如果你连下面三个条件都不满足,后续所有配置都是空中楼阁。
- 可用的Discord账号与Midjourney订阅:免费版无法通过API方式调用,只能网页操作,而网页操作对中文支持极差。必须至少是Standard Plan(月费10美元以上),否则你连自定义前缀都改不了。
- 一台能稳定访问Discord的服务器或本机:重点在于“稳定”。如果你在国内裸连,Discord的WebSocket连接会频繁断线,导致中文指令被截断。站长建议使用海外VPS(推荐东京或洛杉矶节点),并确保端口443和8443出站畅通。
- Node.js 18+ 与 Python 3.10+:后续要用到两个工具:
midjourney-api(非官方逆向库)和discord.py-self(用于用户Token登录)。别用旧版本,否则依赖装不上。
确认无误后,进入下一步。别跳过,站长见过太多人卡在依赖版本上。
二、配置命令:分步注入中文语言包
核心思路:MJ本身没有原生中文模型,但可以通过“前置翻译器+提示词重写”实现。即:你输入中文,本地脚本翻译成英文,再通过Bot的imagine命令发送。同时,修改Bot的/settings中的语言偏好,让返回的元数据尽量中文化。下面直接给可执行步骤。
步骤1:安装逆向API库
打开终端,创建一个干净的工作目录,然后执行:
mkdir mj-zh && cd mj-zh
npm init -y
npm install midjourney-api dotenv axios
注意:midjourney-api这个包在npm上并非官方,但站长实测可用。安装完成后,创建.env文件,写入你的Discord用户Token(注意不是Bot Token,是用户Token,获取方式:Discord网页版F12 → Network → 任意请求头里的authorization字段)。
echo "DISCORD_TOKEN=你的用户Token" > .env
echo "MJ_CHANNEL_ID=你的频道ID" >> .env
频道ID获取:Discord左下角你的用户名右键 → 复制ID。必须是文本频道,不能是公告频道。
步骤2:编写中文转换脚本
创建一个zh2mj.js文件,内容如下(站长已经压缩了冗余代码):
const { Midjourney } = require('midjourney-api');
const dotenv = require('dotenv');
dotenv.config();
const client = new Midjourney({
token: process.env.DISCORD_TOKEN,
channelId: process.env.MJ_CHANNEL_ID,
debug: false
});
// 简易翻译函数:调用免费的Google翻译接口(无需key)
async function translateToEn(zhText) {
const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=zh-CN&tl=en&dt=t&q=${encodeURIComponent(zhText)}`;
const res = await fetch(url);
const data = await res.json();
return data[0][0][0];
}
// 主流程:接收中文,翻译后发送
async function imagineZh(zhPrompt) {
const enPrompt = await translateToEn(zhPrompt);
console.log(`[翻译结果] ${enPrompt}`);
const msg = await client.Imagine(enPrompt, (uri, progress) => {
console.log(`进度: ${progress}%`);
});
return msg;
}
// 命令行入口:node zh2mj.js "一只猫在月球上"
const input = process.argv.slice(2).join(' ');
if (input) {
imagineZh(input).catch(err => console.error(err));
} else {
console.log('用法: node zh2mj.js "你的中文提示词"');
}
保存后,先测试翻译接口是否通:
node -e "fetch('https://translate.googleapis.com/translate_a/single?client=gtx&sl=zh-CN&tl=en&dt=t&q=测试').then(r=>r.json()).then(d=>console.log(d[0][0][0]))"
如果输出“test”,说明网络没问题。如果超时,检查你的代理或VPS防火墙。
步骤3:注入Bot设置,强制中文元数据
光翻译还不够,MJ返回的图片描述、种子值、放大按钮都是英文。要改成中文,需要向Bot发送一条特殊指令:
node -e "
const { Midjourney } = require('midjourney-api');
const dotenv = require('dotenv');
dotenv.config();
const client = new Midjourney({ token: process.env.DISCORD_TOKEN, channelId: process.env.MJ_CHANNEL_ID });
client.Settings().then(s => { console.log('当前设置:', s); });
"
运行后,你会看到设置面板的JSON。找到locale字段,默认是en-US。手动改成zh-CN,然后调用client.SaveSettings()。站长直接给一条命令覆盖:
node -e "
const { Midjourney } = require('midjourney-api');
const dotenv = require('dotenv');
dotenv.config();
const client = new Midjourney({ token: process.env.DISCORD_TOKEN, channelId: process.env.MJ_CHANNEL_ID });
client.Settings().then(s => {
s.locale = 'zh-CN';
client.SaveSettings(s).then(() => console.log('已切换为简体中文元数据'));
});
"
到这里,基础中文链路已经打通。但站长必须警告你:midjourney可以zh-简体中文,但官方服务器并不保证所有返回字段都汉化。有些按钮(如U1、U2)还是英文,这是硬编码,无法修改。能改的是描述文本和提示词回显。
三、踩坑要点排查:90%的人卡在这几个地方
💡 关联延伸阅读:如果你在配置过程中遇到相关报错,请参阅站长之前的解决教程:2025年开源大模型、闭源大模型、自建大模型深度横评:显存/吞吐/硬件要求实测与选型指南
站长根据自身实操和社群反馈,列出以下高频故障。你按顺序排查,别跳步。
坑1:Token无效或权限不足
症状:运行脚本报401 Unauthorized或403 Forbidden。
原因:用户Token不是Bot Token,且如果你开了双重认证(2FA),直接复制authorization字段会失效。必须使用Discord Token生成器(如discord-token-gen),或者临时关闭2FA再登录获取。
解决:退出Discord网页版,重新登录,立刻打开F12复制新Token。注意,Token里含有.分隔的三段,别复制多了空格。
坑2:翻译接口被限流或返回乱码
症状:翻译结果变成undefined或null,或者出现Too Many Requests。
原因:Google翻译免费接口有频率限制,你连续调用超过10次/分钟就触发。
解决:在translateToEn函数里加一个延迟队列,站长建议每两次请求间隔500ms。或者改用libretranslate本地部署,但那个需要额外Docker镜像,复杂度高。对于个人使用,延迟方案足够。
坑3:Bot返回图片但提示词是英文
症状:图片生成成功,但描述文字还是英文,且中文被截断。
原因:你的输入中文里包含特殊字符(如引号、括号),在Shell传参时被转义了。比如node zh2mj.js "一只'猫'",单引号会被吃掉。
解决:所有中文提示词用双引号包裹,内部不要用任何引号。如果非要使用,改用中文全角引号“ ”。另外,在脚本里对输入做replace(/['"`]/g, '')过滤。
坑4:设置locale后不生效
症状:执行SaveSettings后,再次查询还是en-US。
原因:MJ的Settings接口是异步的,你保存后立即查询,可能读取的是缓存。而且部分版本(v6.1+)强制锁定locale为英文,只有通过/imagine指令后跟--zh参数才有效。
解决:放弃全局locale修改,改为在每次Imagine时追加--zh后缀。站长实测,在提示词末尾加上 --zh,返回的图片描述会变成简体中文。修改你的zh2mj.js,在enPrompt后加上 --zh:
const msg = await client.Imagine(enPrompt + ' --zh', (uri, progress) => { ... });
注意:这个参数官方文档没有,但逆向库支持。如果无效,说明你的库版本太老,升级到midjourney-api@2.5.0以上。
坑5:Discord连接频繁掉线
症状:脚本运行到一半,报WebSocket closed。
原因:你的服务器IP被Discord风控,或者你用了共享IP。
解决:更换住宅IP或使用Discord官方推荐的代理端口(wss://gateway.discord.gg)。站长建议在.env里设置代理:
export HTTPS_PROXY=http://你的代理IP:端口
export HTTP_PROXY=http://你的代理IP:端口
然后重启脚本。如果还掉,检查VPS的TCP keepalive设置:
sysctl -w net.ipv4.tcp_keepalive_time=60
sysctl -w net.ipv4.tcp_keepalive_intvl=10
sysctl -w net.ipv4.tcp_keepalive_probes=6
四、最终验证与日常使用
配置完成后,站长给你一个完整测试流程:
node zh2mj.js "赛博朋克风格的东京夜景,霓虹灯,雨夜"
预期输出:控制台打印翻译后的英文,然后显示生成进度。等100%后,Discord频道里会出现图片,图片下方描述文字是中文(如“东京夜景,霓虹灯,雨夜”)。同时,图片底部会有一行小字“by MJ –zh”,证明参数生效。
如果描述还是英文,检查你的库版本,并确认--zh没有被翻译函数吞掉(因为翻译时--zh会被当作英文标点处理)。站长建议将--zh放在翻译之后拼接,而不是翻译之前。
日常使用中,你不需要每次都手动跑脚本。可以写一个简单的Shell别名:
alias mjzh='node /root/mj-zh/zh2mj.js'
然后直接mjzh "你的中文提示词"即可。
五、总结
midjourney可以zh-简体中文,但需要你打破默认的英文工作流。站长今天给的方案,本质是“外挂翻译层+参数注入”,不修改MJ核心代码,所以稳定性尚可。但你要清醒:这并非官方原生支持,未来MJ更新可能封堵--zh参数或改变API结构。到时候,你需要关注逆向库的更新,或者改用官方API(如果推出)。
最后,站长把关键点再敲一遍:Token必须用户Token、翻译接口要限速、--zh参数要放在翻译后、代理必须稳定。按这个顺序排查,半小时内必通。如果你卡在某一步,回头检查前置依赖是否满足——大多数问题出在Token无效或网络不稳,而不是脚本本身。
好了,去跑一张中文提示词试试。站长只能帮你到这了。
相关 AI 排错与深度技术延伸
⚡ 开发者实操必备资源与算力限时特惠通道
阅读完本教程准备实操?站长已将 AI 部署排错手册、提示词全集与服务器限时优惠整理如下,即拿即用: