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

Discord.js命令名称、描述及选项可本地化,但自动补全内容失效

Discord自动补全选项本地化解决方案

你遇到的问题核心是:Discord API的自动补全响应并不支持nameLocalizations字段——这个字段仅对预定义的命令选项choices生效,动态返回的自动补全结果只能通过直接返回对应语言的name值来实现本地化。

解决思路

  1. 获取用户语言环境:通过interaction.locale获取用户当前的Discord界面语言(例如de代表德语,en-US代表美式英语)。
  2. 动态生成对应语言的选项名称:不再尝试设置nameLocalizations,直接将name字段设置为用户语言对应的文本。
  3. 适配过滤逻辑:根据用户输入的聚焦值(对应其语言),匹配对应语言的选项名称,而非仅匹配英文名称。

修改后的代码示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:31