Bot in Discord with discord.js (16)

23 年 4 月 10 日 星期一
894 字
5 分钟

Chapter 19 - 命令本地化

本文编写时,项目已升级至 [email protected]

本地化(Localization)是什么

本地化是指将软件或产品适应不同的语言、文化和地区的过程。

本地化可以帮助你的程序在全球范围内更好地接受和使用,从而提高用户体验和满意度。

本地化可以帮助你的程序更好地适应当地的文化、习惯和法律法规,从而避免很多问题,特别是你考虑不到的习惯和文化细节的问题。

引入本地化可以带来以下好处:提高竞争优势、增加业务收入、减少市场进入障碍。

如果你想要进军国际市场,那么本地化是非常重要的。

为命令引入本地化

首先我们需要判断用户的语言/区域设置(locale),这个值就是用户使用 Discord 发送命令时,使用的 Discord 客户端(包括网页版、手机 App、桌面 App 等)里的语言设置。这个设置是跨平台使用的,即用户在一处设置语言,Discord 将处处使用该语言作为客户端 UI 展示用语言。

截至本文撰写时,Discord 有效 locale值有:

LocaleLanguage Name语言名称Native Name
idIndonesian印度尼西亚语Bahasa Indonesia
daDanish丹麦语Dansk
deGerman德语Deutsch
en-GBEnglish, UK英语(英国)English, UK
en-USEnglish, US英语(美国)English, US
es-ESSpanish西班牙语Español
frFrench法语Français
hrCroatian克罗地亚语Hrvatski
itItalian意大利语Italiano
ltLithuanian立陶宛语Lietuviškai
huHungarian匈牙利语Magyar
nlDutch荷兰语Nederlands
noNorwegian挪威语Norsk
plPolish波兰语Polski
pt-BRPortuguese, Brazilian葡萄牙语(巴西)Português do Brasil
roRomanian, Romania罗马尼亚语(罗马尼亚)Română
fiFinnish芬兰语Suomi
sv-SESwedish瑞典语Svenska
viVietnamese越南语Tiếng Việt
trTurkish土耳其语Türkçe
csCzech捷克语Čeština
elGreek希腊语Ελληνικά
bgBulgarian保加利亚语български
ruRussian俄语Pусский
ukUkrainian乌克兰语Українська
hiHindi印地语हिन्दी
thThai泰语ไทย
zh-CNChinese, China简体中文中文
jaJapanese日语日本語
zh-TWChinese, Taiwan繁体中文繁體中文
koKorean韩语한국어

我们下面使用一个示例斜杠命令来解释如何为命令实现本地化。

下面我们将实现多语言回复“你好”的命令 /hello

js
const { SlashCommandBuilder, ButtonBuilder, ActionRowBuilder, ButtonStyle } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('hello')
        // you can set localized names in bulk
        .setNameLocalizations({
            'en-GB': 'hello2',
            'zh-CN': '你好',
            'zh-TW': '你好',
            'cs': 'ahoj',
            'ru': 'привет',
            'ko': '안녕하세요',
            'es-ES': 'hola'
        })
        .setDescription('Replies with hello, but in localized response!')
        // you can set localized descriptions in bulk
        .setDescriptionLocalizations({
            'zh-TW': '回复你好,但以本地化回复!',
            'cs': 'Odpovědi ahoj, ale v lokalizované odpovědi!',
            'en-GB': 'Replies with hello, but in localized response2!',
            'es-ES': '¡Responde con hola, pero en respuesta localizada!',
            'ko': '안녕하세요로 회신하지만 현지화된 응답으로!',
            'zh-CN': '回复你好,但以本地化回复!',
            'ru': 'Отвечает приветствием, но локализованным ответом!'
        })
    ,
    async execute(interaction) {
        const HelloWorldLocales = {
            'zh-CN': '你好世界!',
            'en-GB': 'Hello world2!',
            'zh-TW': '你好世界!',
            'cs': 'Ahoj světe',
            'ko': '안녕 세상!',
            'es-ES': '¡Hola Mundo!',
            'ru': 'Привет, мир!',
        };

        const eatLocales = {
            'en-GB': 'Eat2',
            'zh-CN': '吃',
            'es-ES': 'Comer'
        }
        const sleepLocales = {
            'zh-CN': '睡觉',
            'es-ES': 'Dormir'
        }

        // add two buttons that are absolutely useless
        // just a localization example
        const row = new ActionRowBuilder()
            .addComponents(
                new ButtonBuilder()
                    .setCustomId(`b1`)
                    .setLabel(eatLocales[interaction.locale] ?? 'Eat')
                    .setStyle(ButtonStyle.Primary),
                new ButtonBuilder()
                    .setCustomId(`b2`)
                    .setLabel(sleepLocales[interaction.locale] ?? 'Sleep')
                    .setStyle(ButtonStyle.Danger),
            );

        // default is English: Hello world!
        await interaction.reply({
            content: `${HelloWorldLocales[interaction.locale] ?? 'Hello world!'}, locale:(${interaction.locale}})`,
            components: [row]
        });
    },
};

效果图

语言设置为 zh-CN (已完全翻译)

image
image
image

语言设置为 es-ES (已完全翻译)

image
image
image

语言设置为 ru (未翻译按钮)

image
image

语言设置为 ja (完全未翻译)

image
image

小结

我们学习了在 discord.js 里进行本地化翻译的基本操作

原文作者闪电豹猫,原文链接https://www.cnblogs.com/hhzm/p/17301564.html 转载注明出处

文章标题:Bot in Discord with discord.js (16)

文章作者:闪电豹猫

文章链接:https://hhzm.win/posts/bot-in-discord-16[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。