generated from nhcarrigan/template
feat: add an about command #2
+1
-1
@@ -23,7 +23,7 @@
|
|||||||
"vitest": "3.0.5"
|
"vitest": "3.0.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"discord.js": "14.17.3",
|
"discord.js": "14.18.0",
|
||||||
"fastify": "5.2.1",
|
"fastify": "5.2.1",
|
||||||
"winston": "3.17.0"
|
"winston": "3.17.0"
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+23
-23
@@ -9,8 +9,8 @@ importers:
|
|||||||
.:
|
.:
|
||||||
dependencies:
|
dependencies:
|
||||||
discord.js:
|
discord.js:
|
||||||
specifier: 14.17.3
|
specifier: 14.18.0
|
||||||
version: 14.17.3
|
version: 14.18.0
|
||||||
fastify:
|
fastify:
|
||||||
specifier: 5.2.1
|
specifier: 5.2.1
|
||||||
version: 5.2.1
|
version: 5.2.1
|
||||||
@@ -116,8 +116,8 @@ packages:
|
|||||||
'@dabh/diagnostics@2.0.3':
|
'@dabh/diagnostics@2.0.3':
|
||||||
resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
|
resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
|
||||||
|
|
||||||
'@discordjs/builders@1.10.0':
|
'@discordjs/builders@1.10.1':
|
||||||
resolution: {integrity: sha512-ikVZsZP+3shmVJ5S1oM+7SveUCK3L9fTyfA8aJ7uD9cNQlTqF+3Irbk2Y22KXTb3C3RNUahRkSInClJMkHrINg==}
|
resolution: {integrity: sha512-OWo1fY4ztL1/M/DUyRPShB4d/EzVfuUvPTRRHRIt/YxBrUYSz0a+JicD5F5zHFoNs2oTuWavxCOVFV1UljHTng==}
|
||||||
engines: {node: '>=16.11.0'}
|
engines: {node: '>=16.11.0'}
|
||||||
|
|
||||||
'@discordjs/collection@1.5.3':
|
'@discordjs/collection@1.5.3':
|
||||||
@@ -132,16 +132,16 @@ packages:
|
|||||||
resolution: {integrity: sha512-YIruKw4UILt/ivO4uISmrGq2GdMY6EkoTtD0oS0GvkJFRZbTSdPhzYiUILbJ/QslsvC9H9nTgGgnarnIl4jMfw==}
|
resolution: {integrity: sha512-YIruKw4UILt/ivO4uISmrGq2GdMY6EkoTtD0oS0GvkJFRZbTSdPhzYiUILbJ/QslsvC9H9nTgGgnarnIl4jMfw==}
|
||||||
engines: {node: '>=16.11.0'}
|
engines: {node: '>=16.11.0'}
|
||||||
|
|
||||||
'@discordjs/rest@2.4.2':
|
'@discordjs/rest@2.4.3':
|
||||||
resolution: {integrity: sha512-9bOvXYLQd5IBg/kKGuEFq3cstVxAMJ6wMxO2U3wjrgO+lHv8oNCT+BBRpuzVQh7BoXKvk/gpajceGvQUiRoJ8g==}
|
resolution: {integrity: sha512-+SO4RKvWsM+y8uFHgYQrcTl/3+cY02uQOH7/7bKbVZsTfrfpoE62o5p+mmV+s7FVhTX82/kQUGGbu4YlV60RtA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
'@discordjs/util@1.1.1':
|
'@discordjs/util@1.1.1':
|
||||||
resolution: {integrity: sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==}
|
resolution: {integrity: sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
'@discordjs/ws@1.2.0':
|
'@discordjs/ws@1.2.1':
|
||||||
resolution: {integrity: sha512-QH5CAFe3wHDiedbO+EI3OOiyipwWd+Q6BdoFZUw/Wf2fw5Cv2fgU/9UEtJRmJa9RecI+TAhdGPadMaEIur5yJg==}
|
resolution: {integrity: sha512-PBvenhZG56a6tMWF/f4P6f4GxZKJTBG95n7aiGSPTnodmz4N5g60t79rSIAq7ywMbv8A4jFtexMruH+oe51aQQ==}
|
||||||
engines: {node: '>=16.11.0'}
|
engines: {node: '>=16.11.0'}
|
||||||
|
|
||||||
'@es-joy/jsdoccomment@0.49.0':
|
'@es-joy/jsdoccomment@0.49.0':
|
||||||
@@ -1021,8 +1021,8 @@ packages:
|
|||||||
discord-api-types@0.37.119:
|
discord-api-types@0.37.119:
|
||||||
resolution: {integrity: sha512-WasbGFXEB+VQWXlo6IpW3oUv73Yuau1Ig4AZF/m13tXcTKnMpc/mHjpztIlz4+BM9FG9BHQkEXiPto3bKduQUg==}
|
resolution: {integrity: sha512-WasbGFXEB+VQWXlo6IpW3oUv73Yuau1Ig4AZF/m13tXcTKnMpc/mHjpztIlz4+BM9FG9BHQkEXiPto3bKduQUg==}
|
||||||
|
|
||||||
discord.js@14.17.3:
|
discord.js@14.18.0:
|
||||||
resolution: {integrity: sha512-8/j8udc3CU7dz3Eqch64UaSHoJtUT6IXK4da5ixjbav4NAXJicloWswD/iwn1ImZEMoAV3LscsdO0zhBh6H+0Q==}
|
resolution: {integrity: sha512-SvU5kVUvwunQhN2/+0t55QW/1EHfB1lp0TtLZUSXVHDmyHTrdOj5LRKdR0zLcybaA15F+NtdWuWmGOX9lE+CAw==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
doctrine@2.1.0:
|
doctrine@2.1.0:
|
||||||
@@ -2296,8 +2296,8 @@ packages:
|
|||||||
undici-types@6.20.0:
|
undici-types@6.20.0:
|
||||||
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
|
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
|
||||||
|
|
||||||
undici@6.19.8:
|
undici@6.21.1:
|
||||||
resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==}
|
resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==}
|
||||||
engines: {node: '>=18.17'}
|
engines: {node: '>=18.17'}
|
||||||
|
|
||||||
update-browserslist-db@1.1.2:
|
update-browserslist-db@1.1.2:
|
||||||
@@ -2567,7 +2567,7 @@ snapshots:
|
|||||||
enabled: 2.0.0
|
enabled: 2.0.0
|
||||||
kuler: 2.0.0
|
kuler: 2.0.0
|
||||||
|
|
||||||
'@discordjs/builders@1.10.0':
|
'@discordjs/builders@1.10.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@discordjs/formatters': 0.6.0
|
'@discordjs/formatters': 0.6.0
|
||||||
'@discordjs/util': 1.1.1
|
'@discordjs/util': 1.1.1
|
||||||
@@ -2585,7 +2585,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
discord-api-types: 0.37.119
|
discord-api-types: 0.37.119
|
||||||
|
|
||||||
'@discordjs/rest@2.4.2':
|
'@discordjs/rest@2.4.3':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@discordjs/collection': 2.1.1
|
'@discordjs/collection': 2.1.1
|
||||||
'@discordjs/util': 1.1.1
|
'@discordjs/util': 1.1.1
|
||||||
@@ -2595,14 +2595,14 @@ snapshots:
|
|||||||
discord-api-types: 0.37.119
|
discord-api-types: 0.37.119
|
||||||
magic-bytes.js: 1.10.0
|
magic-bytes.js: 1.10.0
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
undici: 6.19.8
|
undici: 6.21.1
|
||||||
|
|
||||||
'@discordjs/util@1.1.1': {}
|
'@discordjs/util@1.1.1': {}
|
||||||
|
|
||||||
'@discordjs/ws@1.2.0':
|
'@discordjs/ws@1.2.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@discordjs/collection': 2.1.1
|
'@discordjs/collection': 2.1.1
|
||||||
'@discordjs/rest': 2.4.2
|
'@discordjs/rest': 2.4.3
|
||||||
'@discordjs/util': 1.1.1
|
'@discordjs/util': 1.1.1
|
||||||
'@sapphire/async-queue': 1.5.5
|
'@sapphire/async-queue': 1.5.5
|
||||||
'@types/ws': 8.5.14
|
'@types/ws': 8.5.14
|
||||||
@@ -3477,20 +3477,20 @@ snapshots:
|
|||||||
|
|
||||||
discord-api-types@0.37.119: {}
|
discord-api-types@0.37.119: {}
|
||||||
|
|
||||||
discord.js@14.17.3:
|
discord.js@14.18.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@discordjs/builders': 1.10.0
|
'@discordjs/builders': 1.10.1
|
||||||
'@discordjs/collection': 1.5.3
|
'@discordjs/collection': 1.5.3
|
||||||
'@discordjs/formatters': 0.6.0
|
'@discordjs/formatters': 0.6.0
|
||||||
'@discordjs/rest': 2.4.2
|
'@discordjs/rest': 2.4.3
|
||||||
'@discordjs/util': 1.1.1
|
'@discordjs/util': 1.1.1
|
||||||
'@discordjs/ws': 1.2.0
|
'@discordjs/ws': 1.2.1
|
||||||
'@sapphire/snowflake': 3.5.3
|
'@sapphire/snowflake': 3.5.3
|
||||||
discord-api-types: 0.37.119
|
discord-api-types: 0.37.119
|
||||||
fast-deep-equal: 3.1.3
|
fast-deep-equal: 3.1.3
|
||||||
lodash.snakecase: 4.1.1
|
lodash.snakecase: 4.1.1
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
undici: 6.19.8
|
undici: 6.21.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bufferutil
|
- bufferutil
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
@@ -5018,7 +5018,7 @@ snapshots:
|
|||||||
|
|
||||||
undici-types@6.20.0: {}
|
undici-types@6.20.0: {}
|
||||||
|
|
||||||
undici@6.19.8: {}
|
undici@6.21.1: {}
|
||||||
|
|
||||||
update-browserslist-db@1.1.2(browserslist@4.24.4):
|
update-browserslist-db@1.1.2(browserslist@4.24.4):
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {
|
||||||
|
ApplicationIntegrationType,
|
||||||
|
SlashCommandBuilder,
|
||||||
|
InteractionContextType,
|
||||||
|
Locale,
|
||||||
|
} from "discord.js";
|
||||||
|
|
||||||
|
const command = new SlashCommandBuilder().
|
||||||
|
setContexts(
|
||||||
|
InteractionContextType.BotDM,
|
||||||
|
InteractionContextType.Guild,
|
||||||
|
InteractionContextType.PrivateChannel,
|
||||||
|
).
|
||||||
|
setIntegrationTypes(ApplicationIntegrationType.UserInstall).
|
||||||
|
setName("about").
|
||||||
|
setNameLocalizations({
|
||||||
|
[Locale.Indonesian]: "tentang",
|
||||||
|
[Locale.EnglishGB]: "about",
|
||||||
|
[Locale.EnglishUS]: "about",
|
||||||
|
[Locale.Bulgarian]: "за",
|
||||||
|
[Locale.ChineseCN]: "å
³äŗ",
|
||||||
|
[Locale.ChineseTW]: "éę¼",
|
||||||
|
[Locale.Czech]: "o-aplikaci",
|
||||||
|
[Locale.Danish]: "om",
|
||||||
|
[Locale.Dutch]: "over",
|
||||||
|
[Locale.Finnish]: "tietoja",
|
||||||
|
[Locale.French]: "Ć -propos",
|
||||||
|
[Locale.German]: "über",
|
||||||
|
[Locale.Greek]: "ĻĻεĻικά-με",
|
||||||
|
[Locale.Hindi]: "ą¤ą„-बारą„-ą¤®ą„ą¤",
|
||||||
|
[Locale.Hungarian]: "rólunk",
|
||||||
|
[Locale.Italian]: "informazioni",
|
||||||
|
[Locale.Japanese]: "ē“",
|
||||||
|
[Locale.Korean]: "ģ½",
|
||||||
|
[Locale.Lithuanian]: "apie",
|
||||||
|
[Locale.Polish]: "o-nas",
|
||||||
|
[Locale.PortugueseBR]: "sobre",
|
||||||
|
[Locale.Romanian]: "despre",
|
||||||
|
[Locale.Russian]: "о",
|
||||||
|
[Locale.SpanishES]: "acerca-de",
|
||||||
|
[Locale.SpanishLATAM]: "acerca-de",
|
||||||
|
[Locale.Swedish]: "om",
|
||||||
|
[Locale.Thai]: "ą¹ąøąøµą¹ąø¢ąø§ąøąø±ąø",
|
||||||
|
[Locale.Turkish]: "hakkında",
|
||||||
|
[Locale.Ukrainian]: "ŠæŃŠ¾",
|
||||||
|
}).
|
||||||
|
setDescription("Learn more about this bot!").
|
||||||
|
setDescriptionLocalizations({
|
||||||
|
[Locale.Indonesian]: "Pelajari lebih lanjut tentang bot ini!",
|
||||||
|
[Locale.EnglishGB]: "Learn more about this bot!",
|
||||||
|
[Locale.EnglishUS]: "Learn more about this bot!",
|
||||||
|
[Locale.Bulgarian]: "ŠŠ°ŃŃŠµŃе ŠæŠ¾Š²ŠµŃŠµ за ŃŠ¾Š·Šø боŃ!",
|
||||||
|
[Locale.ChineseCN]: "äŗč§£ęå
³ę¤ęŗåØäŗŗēę“å¤äæ”ęÆļ¼",
|
||||||
|
[Locale.ChineseTW]: "äŗč§£ęéę¤ę©åØäŗŗēę“å¤äæ”ęÆļ¼",
|
||||||
|
[Locale.Czech]: "DozvÄdÄt se vĆce o tomto botovi!",
|
||||||
|
[Locale.Danish]: "LƦr mere om denne bot!",
|
||||||
|
[Locale.Dutch]: "Leer meer over deze bot!",
|
||||||
|
[Locale.Finnish]: "LisƤtietoja tƤstƤ botista!",
|
||||||
|
[Locale.French]: "En savoir plus sur ce bot!",
|
||||||
|
[Locale.German]: "Erfahren Sie mehr über diesen Bot!",
|
||||||
|
[Locale.Greek]: "ĪάθεĻε ĻεĻιĻĻĻĻεĻα για αĻ
ĻĻ ĻĪæ bot!",
|
||||||
|
[Locale.Hindi]: "ą¤ą¤ø ą¤¬ą„ą¤ ą¤ą„ ą¤¬ą¤¾ą¤°ą„ ą¤®ą„ą¤ ą¤ą¤° ą¤
ą¤§ą¤æą¤ ą¤ą¤¾ą¤Øą„ą¤!",
|
||||||
|
[Locale.Hungarian]: "Tudj meg tƶbbet errÅl a botról!",
|
||||||
|
[Locale.Italian]: "Scopri di più su questo bot!",
|
||||||
|
[Locale.Japanese]: "ćć®ćććć«ć¤ćć¦ćć£ćØč©³ććē„ćļ¼",
|
||||||
|
[Locale.Korean]: "ģ“ ė“ģ ėķ“ ė ģģ볓기!",
|
||||||
|
[Locale.Lithuanian]: "Sužinokite daugiau apie Ŕį botÄ
!",
|
||||||
|
[Locale.Polish]: "Dowiedz siÄ wiÄcej o tym bocie!",
|
||||||
|
[Locale.PortugueseBR]: "Saiba mais sobre este bot!",
|
||||||
|
[Locale.Romanian]: "AflaČi mai multe despre acest bot!",
|
||||||
|
[Locale.Russian]: "Š£Š·Š½Š°Š¹ŃŠµ болŃŃŠµ об ŃŃŠ¾Š¼ Š±Š¾ŃŠµ!",
|
||||||
|
[Locale.SpanishES]: "”Obtén mÔs información sobre este bot!",
|
||||||
|
[Locale.SpanishLATAM]: "”Obtén mÔs información sobre este bot!",
|
||||||
|
[Locale.Swedish]: "LƤr dig mer om denna bot!",
|
||||||
|
[Locale.Thai]: "ą¹ąø£ąøµąø¢ąøąø£ąø¹ą¹ą¹ąøąø“ą¹ąø”ą¹ąøąø“ąø”ą¹ąøąøµą¹ąø¢ąø§ąøąø±ąøąøąøąøąøąøµą¹!",
|
||||||
|
[Locale.Turkish]: "Bu bot hakkında daha fazla bilgi edinin!",
|
||||||
|
[Locale.Ukrainian]: "ŠŃŠ·Š½Š°Š¹ŃŠµŃŃ Š±ŃŠ»ŃŃŠµ ŠæŃŠ¾ ŃŃŠ¾Š³Š¾ Š±Š¾ŃŠ°!",
|
||||||
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-console -- We don't need our logger here as this never runs in production.
|
||||||
|
console.log(JSON.stringify(command.toJSON()));
|
||||||
+361
-148
@@ -6,10 +6,21 @@
|
|||||||
|
|
||||||
/* eslint-disable @typescript-eslint/naming-convention -- This is the convention for these keys. */
|
/* eslint-disable @typescript-eslint/naming-convention -- This is the convention for these keys. */
|
||||||
/* eslint-disable stylistic/max-len -- These are going to be long strings and that's okay. */
|
/* eslint-disable stylistic/max-len -- These are going to be long strings and that's okay. */
|
||||||
|
/* eslint-disable max-lines -- massive chonky boi*/
|
||||||
import { Locale } from "discord.js";
|
import { Locale } from "discord.js";
|
||||||
|
|
||||||
export const responses: Record<string, { "no-message-content": string; "subscription-required": string; "translation": string; "unsupported-locale": string }> = {
|
export const responses: Record<string, { "no-message-content": string; "subscription-required": string; "translation": string; "unsupported-locale": string; "embed": { title: string; description: string; commit: string; version: string }; "button": { support: string; code: string } }> = {
|
||||||
en: {
|
en: {
|
||||||
|
"button": {
|
||||||
|
code: "Source code",
|
||||||
|
support: "Need help?",
|
||||||
|
},
|
||||||
|
"embed": {
|
||||||
|
commit: "Current Commit",
|
||||||
|
description: "Aria Iuvo is a Discord bot that uses LibreTranslate to provide translations for messages. She is developed by NHCarrigan. To use the bot, right click on a message, select `Apps`, then select `Translate message`!",
|
||||||
|
title: "About Aria Iuvo",
|
||||||
|
version: "Running Version",
|
||||||
|
},
|
||||||
"no-message-content": "No message content found.",
|
"no-message-content": "No message content found.",
|
||||||
"subscription-required":
|
"subscription-required":
|
||||||
"You must be subscribed to translate messages.",
|
"You must be subscribed to translate messages.",
|
||||||
@@ -18,201 +29,403 @@ export const responses: Record<string, { "no-message-content": string; "subscrip
|
|||||||
"unsupported-locale": "Language {{target}} is not supported by our translation software.",
|
"unsupported-locale": "Language {{target}} is not supported by our translation software.",
|
||||||
},
|
},
|
||||||
[Locale.Indonesian]: {
|
[Locale.Indonesian]: {
|
||||||
"no-message-content": "Tidak ada konten pesan ditemukan.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Kode sumber",
|
||||||
"Anda harus berlangganan untuk menerjemahkan pesan.",
|
support: "Butuh bantuan?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Mendeteksi {{language}} dengan kepercayaan {{confidence}}%.",
|
"embed": {
|
||||||
"unsupported-locale": "Bahasa {{target}} tidak didukung oleh perangkat lunak terjemahan kami.",
|
commit: "Commit Saat Ini",
|
||||||
|
description: "Aria Iuvo adalah bot Discord yang menggunakan LibreTranslate untuk menyediakan terjemahan pesan. Dia dikembangkan oleh NHCarrigan. Untuk menggunakan bot, klik kanan pada pesan, pilih `Apps`, lalu pilih `Translate message`!",
|
||||||
|
title: "Tentang Aria Iuvo",
|
||||||
|
version: "Versi Berjalan",
|
||||||
|
},
|
||||||
|
"no-message-content": "Tidak ditemukan konten pesan.",
|
||||||
|
"subscription-required": "Anda harus berlangganan untuk menerjemahkan pesan.",
|
||||||
|
"translation": "{{translation}}\n-# Terdeteksi {{language}} dengan tingkat kepercayaan {{confidence}}%.",
|
||||||
|
"unsupported-locale": "Bahasa {{target}} tidak didukung oleh perangkat lunak terjemahan kami.",
|
||||||
},
|
},
|
||||||
es: {
|
es: {
|
||||||
"no-message-content": "No se encontró contenido del mensaje.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Código fuente",
|
||||||
"Debes estar suscrito para traducir mensajes.",
|
support: "ĀæNecesitas ayuda?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Detectado {{language}} con {{confidence}}% de confianza.",
|
"embed": {
|
||||||
"unsupported-locale": "El idioma {{target}} no es compatible con nuestro software de traducción.",
|
commit: "Commit Actual",
|
||||||
|
description: "Aria Iuvo es un bot de Discord que usa LibreTranslate para proporcionar traducciones de mensajes. EstÔ desarrollada por NHCarrigan. Para usar el bot, haz clic derecho en un mensaje, selecciona `Apps`, ”luego selecciona `Translate message`!",
|
||||||
|
title: "Sobre Aria Iuvo",
|
||||||
|
version: "Versión en Ejecución",
|
||||||
|
},
|
||||||
|
"no-message-content": "No se encontró contenido del mensaje.",
|
||||||
|
"subscription-required": "Debes estar suscrito para traducir mensajes.",
|
||||||
|
"translation": "{{translation}}\n-# Detectado {{language}} con {{confidence}}% de confianza.",
|
||||||
|
"unsupported-locale": "El idioma {{target}} no es compatible con nuestro software de traducción.",
|
||||||
},
|
},
|
||||||
pt: {
|
pt: {
|
||||||
"no-message-content": "Nenhum conteĆŗdo de mensagem encontrado.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Código fonte",
|
||||||
"VocĆŖ deve estar inscrito para traduzir mensagens.",
|
support: "Precisa de ajuda?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Detectado {{language}} com {{confidence}}% de confianƧa.",
|
"embed": {
|
||||||
"unsupported-locale": "O idioma {{target}} não é suportado pelo nosso software de tradução.",
|
commit: "Commit Atual",
|
||||||
|
description: "Aria Iuvo é um bot do Discord que usa LibreTranslate para fornecer traduções de mensagens. Ela é desenvolvida por NHCarrigan. Para usar o bot, clique com o botão direito em uma mensagem, selecione `Apps`, depois selecione `Translate message`!",
|
||||||
|
title: "Sobre Aria Iuvo",
|
||||||
|
version: "Versão em Execução",
|
||||||
|
},
|
||||||
|
"no-message-content": "Nenhum conteĆŗdo de mensagem encontrado.",
|
||||||
|
"subscription-required": "VocĆŖ precisa ser assinante para traduzir mensagens.",
|
||||||
|
"translation": "{{translation}}\n-# Detectado {{language}} com {{confidence}}% de confianƧa.",
|
||||||
|
"unsupported-locale": "O idioma {{target}} não é suportado pelo nosso software de tradução.",
|
||||||
},
|
},
|
||||||
[Locale.Czech]: {
|
[Locale.Czech]: {
|
||||||
"no-message-content": "Nebyl nalezen žÔdný obsah zprÔvy.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Zdrojový kód",
|
||||||
"MusĆte být pÅihlÔŔeni k pÅekladu zprĆ”v.",
|
support: "PotÅebujete pomoc?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# DetekovĆ”no {{language}} s dÅÆvÄrou {{confidence}}%.",
|
"embed": {
|
||||||
"unsupported-locale": "Jazyk {{target}} nenĆ podporovĆ”n naÅ”Ćm pÅekladovým softwarem.",
|
commit: "AktuÔlnà Commit",
|
||||||
|
description: "Aria Iuvo je Discord bot, který použĆvĆ” LibreTranslate k poskytovĆ”nĆ pÅekladÅÆ zprĆ”v. Je vyvĆjena NHCarriganem. Pro použitĆ bota kliknÄte pravým tlaÄĆtkem na zprĆ”vu, vyberte `Apps`, pak vyberte `Translate message`!",
|
||||||
|
title: "O Aria Iuvo",
|
||||||
|
version: "AktuÔlnà Verze",
|
||||||
|
},
|
||||||
|
"no-message-content": "Nebyl nalezen žÔdný obsah zprÔvy.",
|
||||||
|
"subscription-required": "Pro pÅeklĆ”dĆ”nĆ zprĆ”v musĆte mĆt pÅedplatnĆ©.",
|
||||||
|
"translation": "{{translation}}\n-# DetekovƔn jazyk {{language}} s {{confidence}}% jistotou.",
|
||||||
|
"unsupported-locale": "Jazyk {{target}} nenĆ podporovĆ”n naÅ”Ćm pÅekladovým softwarem.",
|
||||||
},
|
},
|
||||||
[Locale.Danish]: {
|
[Locale.Danish]: {
|
||||||
"no-message-content": "Ingen beskedindhold fundet.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Kildekode",
|
||||||
"Du skal vƦre tilmeldt for at oversƦtte beskeder.",
|
support: "Brug for hjƦlp?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Detekteret {{language}} med {{confidence}}% tillid.",
|
"embed": {
|
||||||
"unsupported-locale": "Sproget {{target}} understøttes ikke af vores oversættelsessoftware.",
|
commit: "NuvƦrende Commit",
|
||||||
|
description: "Aria Iuvo er en Discord bot, der bruger LibreTranslate til at levere oversættelser af beskeder. Hun er udviklet af NHCarrigan. For at bruge botten, højreklik pÄ en besked, vælg `Apps`, vælg derefter `Translate message`!",
|
||||||
|
title: "Om Aria Iuvo",
|
||||||
|
version: "KĆørende Version",
|
||||||
|
},
|
||||||
|
"no-message-content": "Intet beskedindhold fundet.",
|
||||||
|
"subscription-required": "Du skal vƦre abonnent for at oversƦtte beskeder.",
|
||||||
|
"translation": "{{translation}}\n-# Detekteret {{language}} med {{confidence}}% sikkerhed.",
|
||||||
|
"unsupported-locale": "Sproget {{target}} understøttes ikke af vores oversættelsessoftware.",
|
||||||
},
|
},
|
||||||
[Locale.Dutch]: {
|
[Locale.Dutch]: {
|
||||||
"no-message-content": "Geen berichtinhoud gevonden.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Broncode",
|
||||||
"U moet zijn geabonneerd om berichten te vertalen.",
|
support: "Hulp nodig?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Gedetecteerd {{language}} met {{confidence}}% vertrouwen.",
|
"embed": {
|
||||||
"unsupported-locale": "Taal {{target}} wordt niet ondersteund door onze vertaalsoftware.",
|
commit: "Huidige Commit",
|
||||||
|
description: "Aria Iuvo is een Discord bot die LibreTranslate gebruikt om vertalingen voor berichten te verzorgen. Ze is ontwikkeld door NHCarrigan. Om de bot te gebruiken, klik met de rechtermuisknop op een bericht, selecteer `Apps`, selecteer vervolgens `Translate message`!",
|
||||||
|
title: "Over Aria Iuvo",
|
||||||
|
version: "Huidige Versie",
|
||||||
|
},
|
||||||
|
"no-message-content": "Geen berichtinhoud gevonden.",
|
||||||
|
"subscription-required": "Je moet geabonneerd zijn om berichten te vertalen.",
|
||||||
|
"translation": "{{translation}}\n-# Gedetecteerd {{language}} met {{confidence}}% zekerheid.",
|
||||||
|
"unsupported-locale": "Taal {{target}} wordt niet ondersteund door onze vertaalsoftware.",
|
||||||
},
|
},
|
||||||
[Locale.Finnish]: {
|
[Locale.Finnish]: {
|
||||||
"no-message-content": "Ei viestisisƤltƶƤ lƶytynyt.",
|
"button": {
|
||||||
"subscription-required":
|
code: "LƤhdekoodi",
|
||||||
"Sinun on tilattava viestien kƤƤntƤmiseksi.",
|
support: "Tarvitsetko apua?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Havaittu {{language}} {{confidence}}% luottamuksella.",
|
"embed": {
|
||||||
"unsupported-locale": "KieltƤ {{target}} ei tueta kƤƤnnƶssovelluksellamme.",
|
commit: "Nykyinen Commit",
|
||||||
|
description: "Aria Iuvo on Discord-botti, joka kƤyttƤƤ LibreTranslatea viestien kƤƤntƤmiseen. Sen on kehittƤnyt NHCarrigan. KƤyttƤƤksesi bottia, napsauta hiiren oikealla painikkeella viestiƤ, valitse `Apps`, sitten valitse `Translate message`!",
|
||||||
|
title: "Tietoja Aria Iuvosta",
|
||||||
|
version: "KƤynnissƤ Oleva Versio",
|
||||||
|
},
|
||||||
|
"no-message-content": "Viestin sisƤltƶƤ ei lƶytynyt.",
|
||||||
|
"subscription-required": "Sinun tƤytyy olla tilaaja kƤƤntƤƤksesi viestejƤ.",
|
||||||
|
"translation": "{{translation}}\n-# Tunnistettu {{language}} {{confidence}}% varmuudella.",
|
||||||
|
"unsupported-locale": "Kieli {{target}} ei ole kƤƤnnƶsohjelmistomme tukema.",
|
||||||
},
|
},
|
||||||
[Locale.French]: {
|
[Locale.French]: {
|
||||||
"no-message-content": "Aucun contenu de message trouvƩ.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Code source",
|
||||||
"Vous devez être abonné pour traduire les messages.",
|
support: "Besoin d'aide ?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# DƩtectƩ {{language}} avec {{confidence}}% de confiance.",
|
"embed": {
|
||||||
"unsupported-locale": "La langue {{target}} n'est pas prise en charge par notre logiciel de traduction.",
|
commit: "Commit Actuel",
|
||||||
|
description: "Aria Iuvo est un bot Discord qui utilise LibreTranslate pour fournir des traductions de messages. Elle est dƩveloppƩe par NHCarrigan. Pour utiliser le bot, faites un clic droit sur un message, sƩlectionnez `Apps`, puis sƩlectionnez `Translate message` !",
|
||||||
|
title: "Ć propos d'Aria Iuvo",
|
||||||
|
version: "Version en Cours",
|
||||||
|
},
|
||||||
|
"no-message-content": "Aucun contenu de message trouvƩ.",
|
||||||
|
"subscription-required": "Vous devez être abonné pour traduire les messages.",
|
||||||
|
"translation": "{{translation}}\n-# DƩtectƩ {{language}} avec {{confidence}}% de confiance.",
|
||||||
|
"unsupported-locale": "La langue {{target}} n'est pas prise en charge par notre logiciel de traduction.",
|
||||||
},
|
},
|
||||||
[Locale.German]: {
|
[Locale.German]: {
|
||||||
"no-message-content": "Kein Nachrichteninhalt gefunden.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Quellcode",
|
||||||
"Sie müssen abonniert sein, um Nachrichten zu übersetzen.",
|
support: "Hilfe benƶtigt?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Erkannt {{language}} mit {{confidence}}% Vertrauen.",
|
"embed": {
|
||||||
"unsupported-locale": "Die Sprache {{target}} wird von unserer Ćbersetzungssoftware nicht unterstützt.",
|
commit: "Aktueller Commit",
|
||||||
|
description: "Aria Iuvo ist ein Discord-Bot, der LibreTranslate verwendet, um Ćbersetzungen für Nachrichten bereitzustellen. Sie wurde von NHCarrigan entwickelt. Um den Bot zu verwenden, klicken Sie mit der rechten Maustaste auf eine Nachricht, wƤhlen Sie `Apps` und dann `Translate message`!",
|
||||||
|
title: "Ćber Aria Iuvo",
|
||||||
|
version: "Laufende Version",
|
||||||
|
},
|
||||||
|
"no-message-content": "Kein Nachrichteninhalt gefunden.",
|
||||||
|
"subscription-required": "Sie müssen abonniert sein, um Nachrichten zu übersetzen.",
|
||||||
|
"translation": "{{translation}}\n-# Erkannt {{language}} mit {{confidence}}% Sicherheit.",
|
||||||
|
"unsupported-locale": "Die Sprache {{target}} wird von unserer Ćbersetzungssoftware nicht unterstützt.",
|
||||||
},
|
},
|
||||||
[Locale.Greek]: {
|
[Locale.Greek]: {
|
||||||
"no-message-content": "Īεν βĻĪθηκε ĻεĻιεĻĻμενο μηνĻμαĻĪæĻ.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Ī Ī·Ī³Ī±ĪÆĪæĻ ĪŗĻΓικαĻ",
|
||||||
"Ī ĻĪĻει να είĻĻε ĻĻ
νΓĻομηĻĪ®Ļ Ī³Ī¹Ī± να μεĻαĻĻάĻεĻε μηνĻμαĻα.",
|
support: "ΧĻειάζεĻĻε βοήθεια;",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# ĪνιĻνεĻθηκε {{language}} με {{confidence}}% εμĻιĻĻĪæĻĻνη.",
|
"embed": {
|
||||||
"unsupported-locale": "ΠγλĻĻĻα {{target}} Γεν Ļ
ĻĪæĻĻĪ·ĻίζεĻαι αĻĻ ĻĪæ λογιĻĪ¼Ī¹ĪŗĻ Ī¼ĪµĻάĻĻαĻĪ®Ļ Ī¼Ī±Ļ.",
|
commit: "ΤĻĪĻον Commit",
|
||||||
|
description: "Ī Aria Iuvo είναι Īνα bot Discord ĻĪæĻ
ĻĻĪ·ĻιμοĻοιεί ĻĪæ LibreTranslate για να ĻαĻĪĻει μεĻαĻĻάĻĪµĪ¹Ļ Ī¼Ī·Ī½Ļ
μάĻĻν. ĪναĻĻĻĻθηκε αĻĻ Ļον NHCarrigan. Īια να ĻĻĪ·ĻιμοĻοιήĻεĻε ĻĪæ bot, κάνĻε Γεξί κλικ Ļε Īνα μήνĻ
μα, εĻιλĪξĻε `Apps`, ĻĻĪ· ĻĻ
νĪĻεια εĻιλĪξĻε `Translate message`!",
|
||||||
|
title: "Ī£ĻεĻικά με Ļην Aria Iuvo",
|
||||||
|
version: "ΤĻĪĻĪæĻ
Ļα ĪκΓοĻĪ·",
|
||||||
|
},
|
||||||
|
"no-message-content": "Īεν βĻĪθηκε ĻεĻιεĻĻμενο μηνĻμαĻĪæĻ.",
|
||||||
|
"subscription-required": "Ī ĻĪĻει να είĻĻε ĻĻ
νΓĻομηĻĪ®Ļ Ī³Ī¹Ī± να μεĻαĻĻάĻεĻε μηνĻμαĻα.",
|
||||||
|
"translation": "{{translation}}\n-# ĪνĻĪæĻĪÆĻĻηκε {{language}} με {{confidence}}% βεβαιĻĻĪ·Ļα.",
|
||||||
|
"unsupported-locale": "ΠγλĻĻĻα {{target}} Γεν Ļ
ĻĪæĻĻĪ·ĻίζεĻαι αĻĻ ĻĪæ λογιĻĪ¼Ī¹ĪŗĻ Ī¼ĪµĻάĻĻαĻĪ®Ļ Ī¼Ī±Ļ.",
|
||||||
},
|
},
|
||||||
[Locale.Hindi]: {
|
[Locale.Hindi]: {
|
||||||
"no-message-content": "ą¤ą„ą¤ ą¤øą¤ą¤¦ą„श ą¤øą¤¾ą¤®ą¤ą„ą¤°ą„ ą¤Øą¤¹ą„ą¤ ą¤®ą¤æą¤²ą„ą„¤",
|
"button": {
|
||||||
"subscription-required":
|
code: "ą¤øą„ą¤°ą„स ą¤ą„औ",
|
||||||
"ą¤ą¤Ŗą¤ą„ ą¤øą¤ą¤¦ą„श ą¤
ą¤Øą„ą¤µą¤¾ą¤¦ ą¤ą¤°ą¤Øą„ ą¤ą„ ą¤²ą¤æą¤ ą¤øą¤¬ą„ą¤øą¤ą„ą¤°ą¤¾ą¤ą¤¬ ą¤ą¤°ą¤Øą¤¾ ą¤¹ą„ą¤ą¤¾ą„¤",
|
support: "मदद ą¤ą¤¾ą¤¹ą¤æą¤?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# {{confidence}}% ą¤µą¤æą¤¶ą„ą¤µą¤¾ą¤ø ą¤ą„ साऄ {{language}} ą¤ą¤¾ पता ą¤²ą¤ą¤¾ą¤Æą¤¾ ą¤ą¤Æą¤¾ą„¤",
|
"embed": {
|
||||||
"unsupported-locale": "ą¤¹ą¤®ą¤¾ą¤°ą„ ą¤
ą¤Øą„ą¤µą¤¾ą¤¦ ą¤øą„ą¤«ą¤¼ą„ą¤ą¤µą„यर ą¤¦ą„ą¤µą¤¾ą¤°ą¤¾ {{target}} ą¤ą¤¾ą¤·ą¤¾ ą¤ą¤¾ ą¤øą¤®ą¤°ą„ą¤„न ą¤Øą¤¹ą„ą¤ ą¤ą¤æą¤Æą¤¾ ą¤ą¤¾ą¤¤ą¤¾ ą¤¹ą„ą„¤",
|
commit: "ą¤µą¤°ą„ą¤¤ą¤®ą¤¾ą¤Ø ą¤ą¤®ą¤æą¤",
|
||||||
|
description: "Aria Iuvo ą¤ą¤ Discord ą¤¬ą„ą¤ ą¤¹ą„ ą¤ą„ ą¤øą¤ą¤¦ą„ą¤¶ą„ą¤ ą¤ą„ ą¤
ą¤Øą„ą¤µą¤¾ą¤¦ ą¤ą„ लिठLibreTranslate ą¤ą¤¾ ą¤ą¤Ŗą¤Æą„ą¤ ą¤ą¤°ą¤¤ą„ ą¤¹ą„ą„¤ ą¤ą¤øą„ NHCarrigan ą¤¦ą„ą¤µą¤¾ą¤°ą¤¾ ą¤µą¤æą¤ą¤øą¤æą¤¤ ą¤ą¤æą¤Æą¤¾ ą¤ą¤Æą¤¾ ą¤¹ą„ą„¤ ą¤¬ą„ą¤ ą¤ą¤¾ ą¤ą¤Ŗą¤Æą„ą¤ ą¤ą¤°ą¤Øą„ ą¤ą„ लिą¤, ą¤ą¤æą¤øą„ ą¤øą¤ą¤¦ą„श पर ą¤°ą¤¾ą¤ą¤ ą¤ą„ą¤²ą¤æą¤ ą¤ą¤°ą„ą¤, `Apps` ą¤ą„ą¤Øą„ą¤, फिर `Translate message` ą¤ą„ą¤Øą„ą¤!",
|
||||||
|
title: "Aria Iuvo ą¤ą„ ą¤¬ą¤¾ą¤°ą„ ą¤®ą„ą¤",
|
||||||
|
version: "ą¤ą¤² रहा ą¤øą¤ą¤øą„ą¤ą¤°ą¤£",
|
||||||
|
},
|
||||||
|
"no-message-content": "ą¤ą„ą¤ ą¤øą¤ą¤¦ą„श ą¤øą¤¾ą¤®ą¤ą„ą¤°ą„ ą¤Øą¤¹ą„ą¤ ą¤®ą¤æą¤²ą„ą„¤",
|
||||||
|
"subscription-required": "ą¤øą¤ą¤¦ą„ą¤¶ą„ą¤ ą¤ą¤¾ ą¤
ą¤Øą„ą¤µą¤¾ą¤¦ ą¤ą¤°ą¤Øą„ ą¤ą„ ą¤²ą¤æą¤ ą¤ą¤Ŗą¤ą„ ą¤øą¤¦ą¤øą„ą¤Æą¤¤ą¤¾ ą¤²ą„ą¤Øą„ ą¤¹ą„ą¤ą„ą„¤",
|
||||||
|
"translation": "{{translation}}\n-# {{confidence}}% ą¤µą¤æą¤¶ą„ą¤µą¤¾ą¤ø ą¤ą„ साऄ {{language}} ą¤ą¤¾ पता ą¤ą¤²ą¤¾ą„¤",
|
||||||
|
"unsupported-locale": "ą¤ą¤¾ą¤·ą¤¾ {{target}} ą¤¹ą¤®ą¤¾ą¤°ą„ ą¤
ą¤Øą„ą¤µą¤¾ą¤¦ ą¤øą„ą¤«ą„ą¤ą¤µą„यर ą¤¦ą„ą¤µą¤¾ą¤°ą¤¾ ą¤øą¤®ą¤°ą„ą¤„ित ą¤Øą¤¹ą„ą¤ ą¤¹ą„ą„¤",
|
||||||
},
|
},
|
||||||
[Locale.Hungarian]: {
|
[Locale.Hungarian]: {
|
||||||
"no-message-content": "Nem talÔlható üzenettartalom.",
|
"button": {
|
||||||
"subscription-required":
|
code: "ForrÔskód",
|
||||||
"Fel kell iratkoznia az üzenetek fordĆtĆ”sĆ”hoz.",
|
support: "SegĆtsĆ©gre van szüksĆ©ge?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# {{language}} ƩrzƩkelve {{confidence}}% bizalommal.",
|
"embed": {
|
||||||
"unsupported-locale": "A {{target}} nyelvet nem tĆ”mogatja fordĆtó szoftverünk.",
|
commit: "Jelenlegi Commit",
|
||||||
|
description: "Az Aria Iuvo egy Discord bot, amely a LibreTranslate-et hasznĆ”lja üzenetek fordĆtĆ”sĆ”hoz. NHCarrigan fejlesztette. A bot hasznĆ”latĆ”hoz kattintson jobb gombbal egy üzenetre, vĆ”lassza az `Apps` lehetÅsĆ©get, majd vĆ”lassza a `Translate message` opciót!",
|
||||||
|
title: "Az Aria Iuvoról",
|
||||||
|
version: "Futó Verzió",
|
||||||
|
},
|
||||||
|
"no-message-content": "Nem talÔlható üzenet tartalom.",
|
||||||
|
"subscription-required": "FeliratkozĆ”s szüksĆ©ges az üzenetek fordĆtĆ”sĆ”hoz.",
|
||||||
|
"translation": "{{translation}}\n-# {{language}} nyelv Ʃszlelve {{confidence}}% biztonsƔggal.",
|
||||||
|
"unsupported-locale": "A(z) {{target}} nyelvet nem tĆ”mogatja a fordĆtó szoftverünk.",
|
||||||
},
|
},
|
||||||
[Locale.Italian]: {
|
[Locale.Italian]: {
|
||||||
"no-message-content": "Nessun contenuto del messaggio trovato.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Codice sorgente",
|
||||||
"Devi essere abbonato per tradurre i messaggi.",
|
support: "Hai bisogno di aiuto?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Rilevato {{language}} con {{confidence}}% di fiducia.",
|
"embed": {
|
||||||
"unsupported-locale": "La lingua {{target}} non ĆØ supportata dal nostro software di traduzione.",
|
commit: "Commit Attuale",
|
||||||
|
description: "Aria Iuvo ĆØ un bot Discord che utilizza LibreTranslate per fornire traduzioni dei messaggi. Ć sviluppata da NHCarrigan. Per utilizzare il bot, fai clic destro su un messaggio, seleziona `Apps`, quindi seleziona `Translate message`!",
|
||||||
|
title: "Informazioni su Aria Iuvo",
|
||||||
|
version: "Versione in Esecuzione",
|
||||||
|
},
|
||||||
|
"no-message-content": "Nessun contenuto del messaggio trovato.",
|
||||||
|
"subscription-required": "Devi essere abbonato per tradurre i messaggi.",
|
||||||
|
"translation": "{{translation}}\n-# Rilevato {{language}} con {{confidence}}% di affidabilitĆ .",
|
||||||
|
"unsupported-locale": "La lingua {{target}} non ĆØ supportata dal nostro software di traduzione.",
|
||||||
},
|
},
|
||||||
[Locale.Japanese]: {
|
[Locale.Japanese]: {
|
||||||
"no-message-content": "ć”ćć»ć¼ćøć³ć³ćć³ććč¦ć¤ććć¾ććć",
|
"button": {
|
||||||
"subscription-required":
|
code: "ć½ć¼ć¹ć³ć¼ć",
|
||||||
"ć”ćć»ć¼ćøć翻訳ććć«ćÆč³¼čŖććåæ
č¦ćććć¾ćć",
|
support: "ćµćć¼ććåæ
č¦ć§ććļ¼",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# {{confidence}}% ć®äæ”é ¼åŗ¦ć§ {{language}} ćę¤åŗćć¾ććć",
|
"embed": {
|
||||||
"unsupported-locale": "{{target}} čØčŖćÆć翻訳ć½ććć¦ć§ć¢ć§ćµćć¼ćććć¦ćć¾ććć",
|
commit: "ē¾åØć®ć³ććć",
|
||||||
|
description: "Aria IuvoćÆćLibreTranslateć使ēØćć¦ć”ćć»ć¼ćøć®ēæ»čسćęä¾ććDiscordćććć§ććNHCarriganć«ćć£ć¦éēŗććć¾ććććććć使ēØććć«ćÆćć”ćć»ć¼ćøćå³ćÆćŖććÆćć`Apps`ćéøęćć`Translate message`ćéøęćć¦ćć ććļ¼",
|
||||||
|
title: "Aria Iuvoć«ć¤ćć¦",
|
||||||
|
version: "å®č”äøć®ćć¼ćøć§ć³",
|
||||||
|
},
|
||||||
|
"no-message-content": "ć”ćć»ć¼ćøć®å
容ćč¦ć¤ććć¾ććć",
|
||||||
|
"subscription-required": "ć”ćć»ć¼ćøć翻訳ććć«ćÆč³¼čŖćåæ
č¦ć§ćć",
|
||||||
|
"translation": "{{translation}}\n-# {{confidence}}%ć®ē¢ŗēć§{{language}}ćę¤åŗćć¾ććć",
|
||||||
|
"unsupported-locale": "čØčŖ{{target}}ćÆēæ»čسć½ććć¦ć§ć¢ć§ćµćć¼ćććć¦ćć¾ććć",
|
||||||
},
|
},
|
||||||
[Locale.Korean]: {
|
[Locale.Korean]: {
|
||||||
"no-message-content": "ė©ģģ§ ė“ģ©ģ ģ°¾ģ ģ ģģµėė¤.",
|
"button": {
|
||||||
"subscription-required":
|
code: "ģģ¤ ģ½ė",
|
||||||
"ė©ģģ§ė„¼ ė²ģķė ¤ė©“ 구ė
ķ“ģ¼ ķ©ėė¤.",
|
support: "ėģģ“ ķģķģ ź°ģ?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# {{confidence}}% ģ 뢰ėė” {{language}} ź°ģ§.",
|
"embed": {
|
||||||
"unsupported-locale": "{{target}} ģøģ“ė ė²ģ ģķķøģØģ“ģģ ģ§ģėģ§ ģģµėė¤.",
|
commit: "ķģ¬ ģ»¤ė°",
|
||||||
|
description: "Aria Iuvoė LibreTranslate넼 ģ¬ģ©ķģ¬ ė©ģģ§ ė²ģģ ģ ź³µķė Discord ė“ģ
ėė¤. NHCarriganģ“ ź°ė°ķģµėė¤. ė“ģ ģ¬ģ©ķė ¤ė©“ ė©ģģ§ė„¼ ė§ģ°ģ¤ ģ¤ė„øģŖ½ ė²ķ¼ģ¼ė” ķ“ė¦ķź³ `Apps`넼 ģ ķķ ė¤ģ `Translate message`넼 ģ ķķģøģ!",
|
||||||
|
title: "Aria Iuvo ģź°",
|
||||||
|
version: "ģ¤ķ ģ¤ģø ė²ģ ",
|
||||||
|
},
|
||||||
|
"no-message-content": "ė©ģģ§ ė“ģ©ģ ģ°¾ģ ģ ģģµėė¤.",
|
||||||
|
"subscription-required": "ė©ģģ§ė„¼ ė²ģķė ¤ė©“ 구ė
ģ“ ķģķ©ėė¤.",
|
||||||
|
"translation": "{{translation}}\n-# {{confidence}}% ģ 뢰ėė” {{language}} ź°ģ§ėØ.",
|
||||||
|
"unsupported-locale": "ģøģ“ {{target}}ė ė²ģ ģķķøģØģ“ģģ ģ§ģėģ§ ģģµėė¤.",
|
||||||
},
|
},
|
||||||
[Locale.Lithuanian]: {
|
[Locale.Lithuanian]: {
|
||||||
"no-message-content": "Nerasta jokio praneŔimo turinio.",
|
"button": {
|
||||||
"subscription-required":
|
code: "IŔeities kodas",
|
||||||
"Norint iŔversti žinutes, turite būti prenumeratorius.",
|
support: "Reikia pagalbos?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Aptikta {{language}} su {{confidence}}% pasitikÄjimu.",
|
"embed": {
|
||||||
"unsupported-locale": "{{target}} kalba nepalaikoma mūsų vertimo programine įranga.",
|
commit: "Dabartinis Commit",
|
||||||
|
description: "Aria Iuvo yra Discord botas, naudojantis LibreTranslate žinuÄių vertimams. JÄ
sukÅ«rÄ NHCarrigan. NorÄdami naudoti botÄ
, deÅ”iniuoju pelÄs klaviÅ”u spustelÄkite žinutÄ, pasirinkite `Apps`, tada pasirinkite `Translate message`!",
|
||||||
|
title: "Apie Aria Iuvo",
|
||||||
|
version: "Veikianti Versija",
|
||||||
|
},
|
||||||
|
"no-message-content": "ŽinutÄs turinio nerasta.",
|
||||||
|
"subscription-required": "Turite bÅ«ti prenumeratorius, kad galÄtumÄte versti žinutes.",
|
||||||
|
"translation": "{{translation}}\n-# Aptikta {{language}} su {{confidence}}% tikimybe.",
|
||||||
|
"unsupported-locale": "Kalba {{target}} nÄra palaikoma mÅ«sų vertimo programinÄs ÄÆrangos.",
|
||||||
},
|
},
|
||||||
[Locale.Polish]: {
|
[Locale.Polish]: {
|
||||||
"no-message-content": "Nie znaleziono treÅci wiadomoÅci.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Kod ÅŗródÅowy",
|
||||||
"Aby tÅumaczyÄ wiadomoÅci, musisz byÄ subskrybentem.",
|
support: "Potrzebujesz pomocy?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Wykryto {{language}} z {{confidence}}% pewnoÅciÄ
.",
|
"embed": {
|
||||||
"unsupported-locale": "JÄzyk {{target}} nie jest obsÅugiwany przez nasze oprogramowanie do tÅumaczenia.",
|
commit: "Aktualny Commit",
|
||||||
|
description: "Aria Iuvo to bot Discord, który używa LibreTranslate do tÅumaczenia wiadomoÅci. ZostaÅa stworzona przez NHCarrigan. Aby użyÄ bota, kliknij prawym przyciskiem myszy na wiadomoÅÄ, wybierz `Apps`, nastÄpnie wybierz `Translate message`!",
|
||||||
|
title: "O Aria Iuvo",
|
||||||
|
version: "Aktualna Wersja",
|
||||||
|
},
|
||||||
|
"no-message-content": "Nie znaleziono treÅci wiadomoÅci.",
|
||||||
|
"subscription-required": "Musisz byÄ subskrybentem, aby tÅumaczyÄ wiadomoÅci.",
|
||||||
|
"translation": "{{translation}}\n-# Wykryto {{language}} z {{confidence}}% pewnoÅciÄ
.",
|
||||||
|
"unsupported-locale": "JÄzyk {{target}} nie jest obsÅugiwany przez nasze oprogramowanie do tÅumaczeÅ.",
|
||||||
},
|
},
|
||||||
sv: {
|
sv: {
|
||||||
"no-message-content": "Inget meddelandeinnehƄll hittades.",
|
"button": {
|
||||||
"subscription-required":
|
code: "KƤllkod",
|
||||||
"Du mƄste prenumerera fƶr att ƶversƤtta meddelanden.",
|
support: "Behƶver du hjƤlp?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# UpptƤckt {{language}} med {{confidence}}% fƶrtroende.",
|
"embed": {
|
||||||
"unsupported-locale": "SprƄket {{target}} stƶds inte av vƄr ƶversƤttningsprogramvara.",
|
commit: "Nuvarande Commit",
|
||||||
|
description: "Aria Iuvo Ƥr en Discord-bot som anvƤnder LibreTranslate fƶr att tillhandahƄlla ƶversƤttningar av meddelanden. Hon Ƥr utvecklad av NHCarrigan. Fƶr att anvƤnda boten, hƶgerklicka pƄ ett meddelande, vƤlj `Apps`, vƤlj sedan `Translate message`!",
|
||||||
|
title: "Om Aria Iuvo",
|
||||||
|
version: "Kƶrande Version",
|
||||||
|
},
|
||||||
|
"no-message-content": "Inget meddelandeinnehƄll hittades.",
|
||||||
|
"subscription-required": "Du mƄste prenumerera fƶr att ƶversƤtta meddelanden.",
|
||||||
|
"translation": "{{translation}}\n-# UpptƤckte {{language}} med {{confidence}}% sƤkerhet.",
|
||||||
|
"unsupported-locale": "SprƄket {{target}} stƶds inte av vƄr ƶversƤttningsprogramvara.",
|
||||||
},
|
},
|
||||||
[Locale.Romanian]: {
|
[Locale.Romanian]: {
|
||||||
"no-message-content": "Nu s-a gÄsit niciun conČinut de mesaj.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Cod sursÄ",
|
||||||
"Trebuie sÄ fiČi abonat pentru a traduce mesajele.",
|
support: "AveČi nevoie de ajutor?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# Detectat {{language}} cu {{confidence}}% Ʈncredere.",
|
"embed": {
|
||||||
"unsupported-locale": "Limba {{target}} nu este acceptatÄ de software-ul nostru de traducere.",
|
commit: "Commit Curent",
|
||||||
|
description: "Aria Iuvo este un bot Discord care foloseČte LibreTranslate pentru a furniza traduceri pentru mesaje. Este dezvoltat de NHCarrigan. Pentru a folosi botul, faceČi clic dreapta pe un mesaj, selectaČi `Apps`, apoi selectaČi `Translate message`!",
|
||||||
|
title: "Despre Aria Iuvo",
|
||||||
|
version: "Versiunea CurentÄ",
|
||||||
|
},
|
||||||
|
"no-message-content": "Nu s-a gÄsit conČinutul mesajului.",
|
||||||
|
"subscription-required": "Trebuie sÄ fiČi abonat pentru a traduce mesaje.",
|
||||||
|
"translation": "{{translation}}\n-# Detectat {{language}} cu {{confidence}}% Ʈncredere.",
|
||||||
|
"unsupported-locale": "Limba {{target}} nu este suportatÄ de software-ul nostru de traducere.",
|
||||||
},
|
},
|
||||||
[Locale.Russian]: {
|
[Locale.Russian]: {
|
||||||
"no-message-content": "Š”Š¾Š“ŠµŃŠ¶ŠøŠ¼Š¾Šµ ŃŠ¾Š¾Š±ŃŠµŠ½ŠøŃ Š½Šµ найГено.",
|
"button": {
|
||||||
"subscription-required":
|
code: "ŠŃŃ
Š¾Š“Š½ŃŠ¹ коГ",
|
||||||
"ŠŃ Š“Š¾Š»Š¶Š½Ń Š±ŃŃŃ ŠæŠ¾Š“ŠæŠøŃŠ°Š½Ń на ŠæŠµŃŠµŠ²Š¾Š“ ŃŠ¾Š¾Š±Ńений.",
|
support: "ŠŃжна помоŃŃ?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# ŠŠ±Š½Š°ŃŃŠ¶ŠµŠ½ {{language}} Ń {{confidence}}% ŃŠ²ŠµŃенноŃŃŃŃ.",
|
"embed": {
|
||||||
"unsupported-locale": "ŠÆŠ·ŃŠŗ {{target}} не ŠæŠ¾Š“Š“ŠµŃŠ¶ŠøŠ²Š°ŠµŃŃŃ Š½Š°ŃŠøŠ¼ ŠæŃŠ¾Š³ŃŠ°Š¼Š¼Š½ŃŠ¼ Š¾Š±ŠµŃŠæŠµŃŠµŠ½ŠøŠµŠ¼ Š“Š»Ń ŠæŠµŃŠµŠ²Š¾Š“а.",
|
commit: "ТекŃŃŠøŠ¹ ŠŠ¾Š¼Š¼ŠøŃ",
|
||||||
|
description: "Aria Iuvo - ŃŃŠ¾ Discord боŃ, ŠøŃŠæŠ¾Š»ŃŠ·ŃŃŃŠøŠ¹ LibreTranslate Š“Š»Ń ŠæŠµŃŠµŠ²Š¾Š“а ŃŠ¾Š¾Š±Ńений. Š Š°Š·ŃŠ°Š±Š¾Ńан NHCarrigan. Š§ŃŠ¾Š±Ń ŠøŃŠæŠ¾Š»ŃŠ·Š¾Š²Š°ŃŃ Š±Š¾ŃŠ°, ŃŠµŠ»ŠŗŠ½ŠøŃе ŠæŃавой кнопкой мŃŃŠø по ŃŠ¾Š¾Š±ŃениŃ, Š²ŃŠ±ŠµŃŠøŃŠµ `Apps`, Š·Š°ŃŠµŠ¼ Š²ŃŠ±ŠµŃŠøŃŠµ `Translate message`!",
|
||||||
|
title: "Š Aria Iuvo",
|
||||||
|
version: "ТекŃŃŠ°Ń ŠŠµŃŃŠøŃ",
|
||||||
|
},
|
||||||
|
"no-message-content": "Š”Š¾Š“ŠµŃŠ¶ŠøŠ¼Š¾Šµ ŃŠ¾Š¾Š±ŃŠµŠ½ŠøŃ Š½Šµ найГено.",
|
||||||
|
"subscription-required": "ŠŠ»Ń ŠæŠµŃŠµŠ²Š¾Š“а ŃŠ¾Š¾Š±Ńений необŃ
оГима ŠæŠ¾Š“ŠæŠøŃŠŗŠ°.",
|
||||||
|
"translation": "{{translation}}\n-# ŠŠ±Š½Š°ŃŃŠ¶ŠµŠ½ {{language}} Ń ŃŠ²ŠµŃенноŃŃŃŃ {{confidence}}%.",
|
||||||
|
"unsupported-locale": "ŠÆŠ·ŃŠŗ {{target}} не ŠæŠ¾Š“Š“ŠµŃŠ¶ŠøŠ²Š°ŠµŃŃŃ Š½Š°ŃŠøŠ¼ ŠæŃŠ¾Š³ŃŠ°Š¼Š¼Š½ŃŠ¼ Š¾Š±ŠµŃŠæŠµŃŠµŠ½ŠøŠµŠ¼ Š“Š»Ń ŠæŠµŃŠµŠ²Š¾Š“а.",
|
||||||
},
|
},
|
||||||
zh: {
|
zh: {
|
||||||
|
"button": {
|
||||||
|
code: "ęŗä»£ē ",
|
||||||
|
support: "éč¦åø®å©ļ¼",
|
||||||
|
},
|
||||||
|
"embed": {
|
||||||
|
commit: "å½åęäŗ¤",
|
||||||
|
description: "Aria IuvoęÆäøäøŖä½æēØLibreTranslateęä¾ę¶ęÆēæ»čÆēDiscordęŗåØäŗŗćē±NHCarriganå¼åćč¦ä½æēØęŗåØäŗŗļ¼å³é®ē¹å»ę¶ęÆļ¼éę©`Apps`ļ¼ē¶åéę©`Translate message`ļ¼",
|
||||||
|
title: "å
³äŗAria Iuvo",
|
||||||
|
version: "čæč”ēę¬",
|
||||||
|
},
|
||||||
"no-message-content": "ęŖę¾å°ę¶ęÆå
容ć",
|
"no-message-content": "ęŖę¾å°ę¶ęÆå
容ć",
|
||||||
"subscription-required": "ęØåæ
锻订é
仄翻čÆę¶ęÆć",
|
"subscription-required": "ęØåæ
锻订é
ęč½ēæ»čÆę¶ęÆć",
|
||||||
"translation":
|
"translation": "{{translation}}\n-# ę£ęµå°{{language}}ļ¼ē½®äæ”度为{{confidence}}%ć",
|
||||||
"{{translation}}\n-# ę£ęµå° {{language}}ļ¼{{confidence}}% ēäæ”åæć",
|
"unsupported-locale": "ę们ēēæ»čÆč½Æä»¶äøęÆę{{target}}čÆčØć",
|
||||||
"unsupported-locale": "ę们ēēæ»čÆč½Æä»¶äøęÆę {{target}} čÆčØć",
|
|
||||||
},
|
},
|
||||||
zt: {
|
zt: {
|
||||||
"no-message-content": "ęŖę¾å°ę¶ęÆå
容ć",
|
"button": {
|
||||||
"subscription-required": "ęØåæ
锻订é
仄翻čÆę¶ęÆć",
|
code: "åå§ē¢¼",
|
||||||
"translation":
|
support: "éč¦å¹«å©ļ¼",
|
||||||
"{{translation}}\n-# ę£ęµå° {{language}}ļ¼{{confidence}}% ēäæ”åæć",
|
},
|
||||||
"unsupported-locale": "ę们ēēæ»čÆč½Æä»¶äøęÆę {{target}} čÆčØć",
|
"embed": {
|
||||||
|
commit: "ē¶åęäŗ¤",
|
||||||
|
description: "Aria IuvoęÆäøå使ēØLibreTranslateęä¾čØęÆēæ»čÆēDiscordę©åØäŗŗćē±NHCarriganéē¼ćč¦ä½æēØę©åØäŗŗļ¼å³éµé»ęčØęÆļ¼éøę`Apps`ļ¼ē¶å¾éøę`Translate message`ļ¼",
|
||||||
|
title: "éę¼Aria Iuvo",
|
||||||
|
version: "éč”ēę¬",
|
||||||
|
},
|
||||||
|
"no-message-content": "ęŖę¾å°čØęÆå
§å®¹ć",
|
||||||
|
"subscription-required": "ęØåæ
é čØé±ęč½ēæ»čÆčØęÆć",
|
||||||
|
"translation": "{{translation}}\n-# 檢測å°{{language}}ļ¼ē½®äæ”åŗ¦ēŗ{{confidence}}%ć",
|
||||||
|
"unsupported-locale": "ęåēēæ»čÆč»ä»¶äøęÆę{{target}}čŖčØć",
|
||||||
},
|
},
|
||||||
[Locale.Thai]: {
|
[Locale.Thai]: {
|
||||||
"no-message-content": "ą¹ąø”ą¹ąøąøą¹ąøąø·ą¹ąøąø«ąø²ąøą¹ąøąøąø§ąø²ąø”",
|
"button": {
|
||||||
"subscription-required":
|
code: "ąøąøąø£ą¹ąøŖą¹ąøą¹ąø",
|
||||||
"ąøąøøąøąøą¹ąøąøąøŖąø”ąø±ąøąø£ąøŖąø”ąø²ąøąø“ąøą¹ąøąø·ą¹ąøą¹ąøąø„ąøą¹ąøąøąø§ąø²ąø”",
|
support: "ąøą¹ąøąøąøąø²ąø£ąøąø§ąø²ąø”ąøą¹ąø§ąø¢ą¹ąø«ąø„ąø·ąø?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# ąøąø£ąø§ąøąøąø {{language}} ąøą¹ąø§ąø¢ąøąø§ąø²ąø”ąø”ąø±ą¹ąøą¹ąø {{confidence}}%",
|
"embed": {
|
||||||
"unsupported-locale": "ภาษา {{target}} ą¹ąø”ą¹ą¹ąøą¹ąø£ąø±ąøąøąø²ąø£ąøŖąøąø±ąøąøŖąøąøøąøą¹ąøąø¢ąøąøąøąøą¹ą¹ąø§ąø£ą¹ą¹ąøąø„ąøąøąøą¹ąø£ąø²",
|
commit: "ąøąøąø”ąø”ąø“ąøąøąø±ąøąøąøøąøąø±ąø",
|
||||||
|
description: "Aria Iuvo ą¹ąøą¹ąøąøąøąø Discord ąøąøµą¹ą¹ąøą¹ LibreTranslate ą¹ąøąø·ą¹ąøą¹ąøąø„ąøą¹ąøąøąø§ąø²ąø” ąøąø±ąøąøąø²ą¹ąøąø¢ NHCarrigan ą¹ąøąøąø²ąø£ą¹ąøą¹ąøąøąø ą¹ąø«ą¹ąøąø„ąø“ąøąøąø§ąø²ąøąøµą¹ąøą¹ąøąøąø§ąø²ąø” ą¹ąø„ąø·ąøąø `Apps` ąøąø²ąøąøąø±ą¹ąøą¹ąø„ąø·ąøąø `Translate message`!",
|
||||||
|
title: "ą¹ąøąøµą¹ąø¢ąø§ąøąø±ąø Aria Iuvo",
|
||||||
|
version: "ą¹ąø§ąøąø£ą¹ąøąø±ąøąøąøµą¹ą¹ąøą¹ąøąø²ąø",
|
||||||
|
},
|
||||||
|
"no-message-content": "ą¹ąø”ą¹ąøąøą¹ąøąø·ą¹ąøąø«ąø²ąøą¹ąøąøąø§ąø²ąø”",
|
||||||
|
"subscription-required": "ąøąøøąøąøą¹ąøąøą¹ąøą¹ąøąøŖąø”ąø²ąøąø“ąøą¹ąøąø·ą¹ąøą¹ąøąø„ąøą¹ąøąøąø§ąø²ąø”",
|
||||||
|
"translation": "{{translation}}\n-# ąøąø£ąø§ąøąøąø {{language}} ąøą¹ąø§ąø¢ąøąø§ąø²ąø”ą¹ąøąø·ą¹ąøąø”ąø±ą¹ąø {{confidence}}%",
|
||||||
|
"unsupported-locale": "ภาษา {{target}} ą¹ąø”ą¹ąø£ąøąøąø£ąø±ąøą¹ąøąø¢ąøąøąøąøą¹ą¹ąø§ąø£ą¹ą¹ąøąø„ąø ąø²ąø©ąø²ąøąøąøą¹ąø£ąø²",
|
||||||
},
|
},
|
||||||
[Locale.Turkish]: {
|
[Locale.Turkish]: {
|
||||||
"no-message-content": "HiƧbir mesaj iƧeriÄi bulunamadı.",
|
"button": {
|
||||||
"subscription-required":
|
code: "Kaynak kodu",
|
||||||
"Mesajları Ƨevirmek iƧin abone olmalısınız.",
|
support: "Yardıma mı ihtiyacınız var?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# {{confidence}}% güvenle {{language}} tespit edildi.",
|
"embed": {
|
||||||
"unsupported-locale": "{{target}} dilimiz tarafından desteklenmiyor.",
|
commit: "Mevcut Commit",
|
||||||
|
description: "Aria Iuvo, mesajlar iƧin Ƨeviri saÄlamak üzere LibreTranslate kullanan bir Discord botudur. NHCarrigan tarafından geliÅtirilmiÅtir. Botu kullanmak iƧin, bir mesaja saÄ tıklayın, `Apps`'i seƧin, ardından `Translate message`'ı seƧin!",
|
||||||
|
title: "Aria Iuvo Hakkında",
|
||||||
|
version: "ĆalıÅan Sürüm",
|
||||||
|
},
|
||||||
|
"no-message-content": "Mesaj iƧeriÄi bulunamadı.",
|
||||||
|
"subscription-required": "Mesajları Ƨevirmek iƧin abone olmanız gerekiyor.",
|
||||||
|
"translation": "{{translation}}\n-# {{confidence}}% güvenle {{language}} tespit edildi.",
|
||||||
|
"unsupported-locale": "{{target}} dili Ƨeviri yazılımımız tarafından desteklenmiyor.",
|
||||||
},
|
},
|
||||||
[Locale.Ukrainian]: {
|
[Locale.Ukrainian]: {
|
||||||
"no-message-content": "ŠŠµ знайГено вмŃŃŃŃ ŠæŠ¾Š²ŃŠ“омленнŃ.",
|
"button": {
|
||||||
"subscription-required":
|
code: "ŠŠøŃ
ŃŠ“ний коГ",
|
||||||
"ŠŠø ŠæŠ¾Š²ŠøŠ½Š½Ń ŠæŃŠ“ŠæŠøŃŠ°ŃŠøŃŃ Š½Š° ŠæŠµŃŠµŠŗŠ»Š°Š“ ŠæŠ¾Š²ŃŠ“омленŃ.",
|
support: "ŠŠ¾ŃŃŃŠ±Š½Š° Гопомога?",
|
||||||
"translation":
|
},
|
||||||
"{{translation}}\n-# ŠŠøŃвлено {{language}} Š· {{confidence}}% впевненŃŃŃŃ.",
|
"embed": {
|
||||||
"unsupported-locale": "ŠŠ¾Š²Š° {{target}} не ŠæŃŠ“ŃŃŠøŠ¼ŃŃŃŃŃŃ Š½Š°ŃŠøŠ¼ ŠæŃŠ¾Š³Ńамним Š·Š°Š±ŠµŠ·ŠæŠµŃеннŃм Š“Š»Ń ŠæŠµŃŠµŠŗŠ»Š°Š“Ń.",
|
commit: "ŠŠ¾ŃŠ¾ŃŠ½ŠøŠ¹ ŠŠ¾Š¼ŃŃ",
|
||||||
|
description: "Aria Iuvo - ŃŠµ Discord боŃ, ŃŠŗŠøŠ¹ Š²ŠøŠŗŠ¾ŃŠøŃŃŠ¾Š²ŃŃ LibreTranslate Š“Š»Ń ŠæŠµŃŠµŠŗŠ»Š°Š“Ń ŠæŠ¾Š²ŃŠ“омленŃ. Š Š¾Š·ŃŠ¾Š±Š»ŠµŠ½ŠøŠ¹ NHCarrigan. Щоб Š²ŠøŠŗŠ¾ŃŠøŃŃŠ¾Š²ŃŠ²Š°ŃŠø Š±Š¾ŃŠ°, ŠŗŠ»Š°ŃŠ½ŃŃŃ ŠæŃŠ°Š²Š¾Ń ŠŗŠ½Š¾ŠæŠŗŠ¾Ń Š¼ŠøŃŃ Š½Š° ŠæŠ¾Š²ŃŠ“омленнŃ, вибеŃŃŃŃ `Apps`, поŃŃŠ¼ вибеŃŃŃŃ `Translate message`!",
|
||||||
|
title: "ŠŃо Aria Iuvo",
|
||||||
|
version: "ŠŠ¾ŃŠ¾ŃŠ½Š° ŠŠµŃŃŃŃ",
|
||||||
|
},
|
||||||
|
"no-message-content": "ŠŠ¼ŃŃŃ ŠæŠ¾Š²ŃŠ“Š¾Š¼Š»ŠµŠ½Š½Ń Š½Šµ знайГено.",
|
||||||
|
"subscription-required": "ŠŠ»Ń ŠæŠµŃŠµŠŗŠ»Š°Š“Ń ŠæŠ¾Š²ŃŠ“Š¾Š¼Š»ŠµŠ½Ń ŠæŠ¾ŃŃŃŠ±Š½Š° ŠæŃŠ“ŠæŠøŃŠŗŠ°.",
|
||||||
|
"translation": "{{translation}}\n-# ŠŠøŃвлено {{language}} Š· впевненŃŃŃŃ {{confidence}}%.",
|
||||||
|
"unsupported-locale": "ŠŠ¾Š²Š° {{target}} не ŠæŃŠ“ŃŃŠøŠ¼ŃŃŃŃŃŃ Š½Š°ŃŠøŠ¼ ŠæŃŠ¾Š³Ńамним Š·Š°Š±ŠµŠ·ŠæŠµŃеннŃм Š“Š»Ń ŠæŠµŃŠµŠŗŠ»Š°Š“Ń.",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
* @author Naomi Carrigan
|
* @author Naomi Carrigan
|
||||||
*/
|
*/
|
||||||
import { Client, Events } from "discord.js";
|
import { Client, Events } from "discord.js";
|
||||||
|
import { about } from "./modules/about.js";
|
||||||
import { translate } from "./modules/translate.js";
|
import { translate } from "./modules/translate.js";
|
||||||
import { instantiateServer } from "./server/serve.js";
|
import { instantiateServer } from "./server/serve.js";
|
||||||
import { logHandler } from "./utils/logHandler.js";
|
import { logHandler } from "./utils/logHandler.js";
|
||||||
@@ -16,6 +17,9 @@ client.on(Events.InteractionCreate, (interaction) => {
|
|||||||
if (interaction.isMessageContextMenuCommand()) {
|
if (interaction.isMessageContextMenuCommand()) {
|
||||||
void translate(interaction);
|
void translate(interaction);
|
||||||
}
|
}
|
||||||
|
if (interaction.isChatInputCommand()) {
|
||||||
|
void about(interaction);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on(Events.ClientReady, () => {
|
client.on(Events.ClientReady, () => {
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { execSync } from "node:child_process";
|
||||||
|
import {
|
||||||
|
ActionRowBuilder,
|
||||||
|
ButtonBuilder,
|
||||||
|
ButtonStyle,
|
||||||
|
EmbedBuilder,
|
||||||
|
MessageFlags,
|
||||||
|
type ChatInputCommandInteraction,
|
||||||
|
} from "discord.js";
|
||||||
|
import { i18n } from "../utils/i18n.js";
|
||||||
|
import { getLocale } from "./getLocale.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Responds with information about the bot.
|
||||||
|
* @param interaction -- The interaction payload from Discord.
|
||||||
|
*/
|
||||||
|
export const about
|
||||||
|
= async(interaction: ChatInputCommandInteraction): Promise<void> => {
|
||||||
|
await interaction.deferReply({ flags: [ MessageFlags.Ephemeral ] });
|
||||||
|
const targetLocale = getLocale(interaction);
|
||||||
|
|
||||||
|
const version = process.env.npm_package_version ?? "Unknown";
|
||||||
|
const commit = execSync("git rev-parse --short HEAD").toString().
|
||||||
|
trim();
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder();
|
||||||
|
embed.setTitle(i18n("embed.title", targetLocale));
|
||||||
|
embed.setDescription(i18n("embed.description", targetLocale));
|
||||||
|
embed.addFields(
|
||||||
|
{
|
||||||
|
name: i18n("embed.version", targetLocale),
|
||||||
|
value: version,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: i18n("embed.commit", targetLocale),
|
||||||
|
value: commit,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const supportButton = new ButtonBuilder().
|
||||||
|
setLabel(i18n("button.support", targetLocale)).
|
||||||
|
setStyle(ButtonStyle.Link).
|
||||||
|
setURL("https://chat.nhcarrigan.com");
|
||||||
|
const sourceButton = new ButtonBuilder().
|
||||||
|
setLabel(i18n("button.code", targetLocale)).
|
||||||
|
setStyle(ButtonStyle.Link).
|
||||||
|
setURL("https://git.nhcarrigan.com/nhcarrigan/aria-iuvo");
|
||||||
|
const subscribeButton = new ButtonBuilder().
|
||||||
|
setStyle(ButtonStyle.Premium).
|
||||||
|
setSKUId("1338596712121499669");
|
||||||
|
const row = new ActionRowBuilder<ButtonBuilder>().addComponents(
|
||||||
|
supportButton,
|
||||||
|
sourceButton,
|
||||||
|
subscribeButton,
|
||||||
|
);
|
||||||
|
|
||||||
|
await interaction.editReply({
|
||||||
|
components: [ row ],
|
||||||
|
embeds: [ embed ],
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { mappedLocales } from "../config/locales.js";
|
import { mappedLocales } from "../config/locales.js";
|
||||||
import type { MessageContextMenuCommandInteraction } from "discord.js";
|
import type { CommandInteraction } from "discord.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses the locale from the interaction, using our mapped
|
* Parses the locale from the interaction, using our mapped
|
||||||
@@ -14,7 +14,7 @@ import type { MessageContextMenuCommandInteraction } from "discord.js";
|
|||||||
* @returns The locale string.
|
* @returns The locale string.
|
||||||
*/
|
*/
|
||||||
export const getLocale = (
|
export const getLocale = (
|
||||||
interaction: MessageContextMenuCommandInteraction,
|
interaction: CommandInteraction,
|
||||||
): string => {
|
): string => {
|
||||||
if (mappedLocales[interaction.locale] !== undefined) {
|
if (mappedLocales[interaction.locale] !== undefined) {
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- It's not undefined.
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- It's not undefined.
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
ActionRowBuilder,
|
||||||
|
ButtonBuilder,
|
||||||
|
ButtonStyle,
|
||||||
MessageFlags,
|
MessageFlags,
|
||||||
type MessageContextMenuCommandInteraction,
|
type MessageContextMenuCommandInteraction,
|
||||||
} from "discord.js";
|
} from "discord.js";
|
||||||
@@ -28,8 +31,15 @@ export const translate = async(
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!isEntitled && interaction.user.id !== "465650873650118659") {
|
if (!isEntitled && interaction.user.id !== "465650873650118659") {
|
||||||
|
const subscribeButton = new ButtonBuilder().
|
||||||
|
setStyle(ButtonStyle.Premium).
|
||||||
|
setSKUId("1338596712121499669");
|
||||||
|
const row = new ActionRowBuilder<ButtonBuilder>().addComponents(
|
||||||
|
subscribeButton,
|
||||||
|
);
|
||||||
await interaction.editReply({
|
await interaction.editReply({
|
||||||
content: i18n("subscription-required", targetLocale),
|
components: [ row ],
|
||||||
|
content: i18n("subscription-required", targetLocale),
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-6
@@ -3,25 +3,58 @@
|
|||||||
* @license Naomi's Public License
|
* @license Naomi's Public License
|
||||||
* @author Naomi Carrigan
|
* @author Naomi Carrigan
|
||||||
*/
|
*/
|
||||||
|
/* eslint-disable @typescript-eslint/no-non-null-assertion -- We've already asserted the language exists through our typeguard.*/
|
||||||
|
/* eslint-disable unicorn/no-array-reduce -- It's a clean approach here and makes sense. */
|
||||||
|
/* eslint-disable @typescript-eslint/consistent-type-assertions -- We have likely over-engineered the hell out of this...*/
|
||||||
|
|
||||||
import { responses } from "../i18n/responses.js";
|
import { responses } from "../i18n/responses.js";
|
||||||
|
|
||||||
|
const isTranslatedLocale = (
|
||||||
|
locale: string,
|
||||||
|
): locale is keyof typeof responses => {
|
||||||
|
return locale in responses;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translates a key to the specified locale, performing
|
* Translates a key to the specified locale, performing
|
||||||
* interpolation on the string.
|
* interpolation on the string.
|
||||||
* @param key -- The key to translate.
|
* @param key -- The key to translate.
|
||||||
* @param locale -- The user's locale.
|
* @param rawLocale -- The user's locale.
|
||||||
* @param interpolation -- An object of keys to replace with values.
|
* @param interpolation -- An object of keys to replace with values.
|
||||||
* @returns The translated string.
|
* @returns The translated string.
|
||||||
*/
|
*/
|
||||||
export const i18n = (
|
export const i18n = (
|
||||||
key: keyof (typeof responses)["en"],
|
key:
|
||||||
locale: string,
|
| keyof (typeof responses)["en"]
|
||||||
|
| `embed.${keyof (typeof responses)["en"]["embed"]}`
|
||||||
|
| `button.${keyof (typeof responses)["en"]["button"]}`,
|
||||||
|
rawLocale: string,
|
||||||
interpolation: Record<string, unknown> = {},
|
interpolation: Record<string, unknown> = {},
|
||||||
): string => {
|
): string => {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- We know the en key exists, but having the loose type helps.
|
const locale: keyof typeof responses = isTranslatedLocale(rawLocale)
|
||||||
const string = responses[locale]?.[key] ?? responses.en![key];
|
? rawLocale
|
||||||
// eslint-disable-next-line unicorn/no-array-reduce -- This is the cleanest way to do it, really.
|
: "en";
|
||||||
|
const isNestedProperty = key.startsWith("embed.")
|
||||||
|
|| key.startsWith("button.");
|
||||||
|
if (isNestedProperty) {
|
||||||
|
const [ category, property ] = key.split(".") as
|
||||||
|
| ["embed", keyof (typeof responses)["en"]["embed"]]
|
||||||
|
| ["button", keyof (typeof responses)["en"]["button"]];
|
||||||
|
if (category === "embed") {
|
||||||
|
const string = responses[locale]![category][property];
|
||||||
|
return Object.entries(interpolation).reduce((accumulator, [ k, v ]) => {
|
||||||
|
return accumulator.replace(`{{${k}}}`, String(v));
|
||||||
|
}, string);
|
||||||
|
}
|
||||||
|
const string = responses[locale]![category][property];
|
||||||
|
return Object.entries(interpolation).reduce((accumulator, [ k, v ]) => {
|
||||||
|
return accumulator.replace(`{{${k}}}`, String(v));
|
||||||
|
}, string);
|
||||||
|
}
|
||||||
|
const string
|
||||||
|
= responses[locale]![
|
||||||
|
key as Exclude<keyof (typeof responses)["en"], "embed" | "button">
|
||||||
|
];
|
||||||
return Object.entries(interpolation).reduce((accumulator, [ k, v ]) => {
|
return Object.entries(interpolation).reduce((accumulator, [ k, v ]) => {
|
||||||
return accumulator.replace(`{{${k}}}`, String(v));
|
return accumulator.replace(`{{${k}}}`, String(v));
|
||||||
}, string);
|
}, string);
|
||||||
|
|||||||
+67
-9
@@ -7,16 +7,74 @@
|
|||||||
import { describe, it, expect } from "vitest";
|
import { describe, it, expect } from "vitest";
|
||||||
import { supportedLocales, mappedLocales } from "../src/config/locales.js";
|
import { supportedLocales, mappedLocales } from "../src/config/locales.js";
|
||||||
|
|
||||||
const localesSupportedByLibretranslate = [ "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "eo", "es", "et", "eu", "fa", "fi", "fr", "ga", "gl", "he", "hi", "hu", "id", "it", "ja", "ko", "lt", "lv", "ms", "nb", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sv", "th", "tl", "tr", "uk", "ur", "zh", "zt" ];
|
const localesSupportedByLibretranslate = [
|
||||||
|
"ar",
|
||||||
|
"az",
|
||||||
|
"bg",
|
||||||
|
"bn",
|
||||||
|
"ca",
|
||||||
|
"cs",
|
||||||
|
"da",
|
||||||
|
"de",
|
||||||
|
"el",
|
||||||
|
"en",
|
||||||
|
"eo",
|
||||||
|
"es",
|
||||||
|
"et",
|
||||||
|
"eu",
|
||||||
|
"fa",
|
||||||
|
"fi",
|
||||||
|
"fr",
|
||||||
|
"ga",
|
||||||
|
"gl",
|
||||||
|
"he",
|
||||||
|
"hi",
|
||||||
|
"hu",
|
||||||
|
"id",
|
||||||
|
"it",
|
||||||
|
"ja",
|
||||||
|
"ko",
|
||||||
|
"lt",
|
||||||
|
"lv",
|
||||||
|
"ms",
|
||||||
|
"nb",
|
||||||
|
"nl",
|
||||||
|
"pl",
|
||||||
|
"pt",
|
||||||
|
"ro",
|
||||||
|
"ru",
|
||||||
|
"sk",
|
||||||
|
"sl",
|
||||||
|
"sq",
|
||||||
|
"sv",
|
||||||
|
"th",
|
||||||
|
"tl",
|
||||||
|
"tr",
|
||||||
|
"uk",
|
||||||
|
"ur",
|
||||||
|
"zh",
|
||||||
|
"zt",
|
||||||
|
];
|
||||||
|
|
||||||
describe("i18n locales", () => {
|
describe("i18n locales", () => {
|
||||||
it.each(supportedLocales)("%s should be supported by libretranslate", (lang) => {
|
it.each(supportedLocales)(
|
||||||
expect.assertions(1);
|
"%s should be supported by libretranslate",
|
||||||
expect(localesSupportedByLibretranslate, `${lang} is not supported by libretranslate`).toContain(lang);
|
(lang) => {
|
||||||
});
|
expect.assertions(1);
|
||||||
|
expect(
|
||||||
|
localesSupportedByLibretranslate,
|
||||||
|
`${lang} is not supported by libretranslate`,
|
||||||
|
).toContain(lang);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
it.each(Object.values(mappedLocales))("%s should be mapped to a supported locale", (lang) => {
|
it.each(Object.values(mappedLocales))(
|
||||||
expect.assertions(1);
|
"%s should be mapped to a supported locale",
|
||||||
expect(supportedLocales, `${lang} is not supported by our app`).toContain(lang);
|
(lang) => {
|
||||||
});
|
expect.assertions(1);
|
||||||
|
expect(supportedLocales, `${lang} is not supported by our app`).toContain(
|
||||||
|
lang,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user