Discord.js命令名称、描述及选项可本地化,但自动补全内容失效
Discord自动补全选项本地化解决方案
你遇到的问题核心是:Discord API的自动补全响应并不支持nameLocalizations字段——这个字段仅对预定义的命令选项choices生效,动态返回的自动补全结果只能通过直接返回对应语言的name值来实现本地化。
解决思路
- 获取用户语言环境:通过
interaction.locale获取用户当前的Discord界面语言(例如de代表德语,en-US代表美式英语)。 - 动态生成对应语言的选项名称:不再尝试设置
nameLocalizations,直接将name字段设置为用户语言对应的文本。 - 适配过滤逻辑:根据用户输入的聚焦值(对应其语言),匹配对应语言的选项名称,而非仅匹配英文名称。
修改后的代码示例
export const command = { data: new SlashCommandBuilder() .setName('example') .setDescription('Some description') .setNameLocalizations({ de: 'Beispiel' }) .setDescriptionLocalizations({ de: 'Einige Beschreibung' }) .addStringOption((option) => option .setName('month') .setDescription('Month') .setNameLocalizations({ de: 'monat' }) .setDescriptionLocalizations({ de: 'Monat' }) .addChoices( { name: 'January', name_localizations: { de: 'Januar' }, value: '01', }, { name: 'February', name_localizations: { de: 'Februar' }, value: '02', }, { name: 'March', name_localizations: { de: 'März' }, value: '03', }, // ... and so on ) .setRequired(true), ) .addStringOption((option) => option .setName('gift') .setNameLocalizations({ de: 'Geschenk' }) .setDescription('What gift you want?') .setDescriptionLocalizations({ de: 'Welches Geschenk willst du?' }) .setAutocomplete(true) .setRequired(true), ), async autocomplete(interaction) { const focusedValue = interaction.options.getFocused(); const userLocale = interaction.locale; // 根据用户语言获取对应名称,默认回退到英文 const getName = (choice) => choice.name[userLocale] || choice.name.en; const filtered = values.filter((choice) => getName(choice).toLowerCase().includes(focusedValue.toLowerCase()), ); await interaction.respond( filtered .map((choice) => ({ name: getName(choice), value: choice.value, })) .slice(0, 25), ); }, // ... execute };
补充说明
interaction.locale返回符合Discord标准的语言代码,比如de、en-US、fr等,需确保你的values数组包含对应语言的名称映射。- 如果用户的语言不在支持列表中,设置英文作为回退选项,避免显示空白或错误内容。
内容的提问来源于stack exchange,提问作者Zsolt Meszaros
相关产品推荐
相关产品推荐

