From cb87345537dbc8556ccff70e6cd55ce5d4b3b73e Mon Sep 17 00:00:00 2001 From: thororen <78185467+thororen1234@users.noreply.github.com> Date: Sun, 15 Feb 2026 13:57:54 -0500 Subject: [PATCH 1/6] New Crowdin updates (#776) * New translations equicord.json (Afrikaans) * New translations equicord.json (Arabic) * New translations equicord.json (Portuguese, Brazilian) * New translations vencord.json (Portuguese, Brazilian) * New translations api.json (Czech) * New translations api.json (Danish) * New translations translation.json (Danish) * New translations equicord.json (Czech) * New translations equicord.json (Portuguese, Brazilian) * New translations api.json (Arabic) * New translations translation.json (Czech) * New translations equicord.json (Spanish) * New translations equicord.json (Arabic) * New translations equicord.json (Czech) * New translations equicord.json (Portuguese, Brazilian) --- i18n/af-ZA/equicord.json | 2 +- i18n/ar-SA/api.json | 26 +-- i18n/ar-SA/equicord.json | 14 +- i18n/cs-CZ/api.json | 38 ++-- i18n/cs-CZ/equicord.json | 96 +++++----- i18n/cs-CZ/translation.json | 8 +- i18n/da-DK/api.json | 38 ++-- i18n/da-DK/translation.json | 8 +- i18n/es-ES/equicord.json | 190 +++++++++---------- i18n/pt-BR/equicord.json | 356 ++++++++++++++++++------------------ i18n/pt-BR/vencord.json | 102 +++++------ 11 files changed, 439 insertions(+), 439 deletions(-) diff --git a/i18n/af-ZA/equicord.json b/i18n/af-ZA/equicord.json index 6f41b4dd2..8f22db55d 100644 --- a/i18n/af-ZA/equicord.json +++ b/i18n/af-ZA/equicord.json @@ -1327,4 +1327,4 @@ "scanQrCode": "Scan QR Code" } } -} +} \ No newline at end of file diff --git a/i18n/ar-SA/api.json b/i18n/ar-SA/api.json index c70c4b850..aea78df91 100644 --- a/i18n/ar-SA/api.json +++ b/i18n/ar-SA/api.json @@ -1,25 +1,25 @@ { "commands": { - "errorExecuting": "An Error occurred while executing command \"{name}\"" + "errorExecuting": "حدث خطأ أثناء تنفيذ الأمر \"{name}\"" }, "notifications": { - "dismissNotification": "Dismiss Notification", - "noNotifications": "No notifications yet", - "notificationLog": "Notification Log", - "notificationSettings": "Notification Settings", + "dismissNotification": "تجاهل الإشعار", + "noNotifications": "لا توجد اشعارات حتى الان", + "notificationLog": "سجل الإشعار", + "notificationSettings": "إعدادات الإشعارات", "logs": { - "title": "Are you sure?", - "body_zero": "No notification selected.", + "title": "هل انت متأكد ؟", + "body_zero": "لم يتم تحديد إشعار.", "body_one": "This will permanently remove {count} notification. This action cannot be undone.", - "body_other": "This will permanently remove {count} notifications. This action cannot be undone.", - "confirm": "Do it!", - "cancel": "Nevermind", + "body_other": "سيؤدي هذا إلى إزالة الإشعارات {count} بشكل دائم. لا يمكن التراجع عن هذا الإجراء.", + "confirm": "افعلها!", + "cancel": "لا يهم", "clearNotificationLog": "Clear Notification Log" }, "missedNotifications": { - "title": "While you were away", + "title": "بينما كنت بعيدا", "body_one": "{count} notification received", - "body_other": "{count} notifications received" + "body_other": "تم استلام إشعارات {count}" } }, "memberListDecorators": { @@ -32,6 +32,6 @@ "fallback": "Failed to render {key} Message Decoration" }, "notices": { - "fallback": "Error Showing Notice" + "fallback": "خطأ في عرض الإشعار" } } \ No newline at end of file diff --git a/i18n/ar-SA/equicord.json b/i18n/ar-SA/equicord.json index 6f41b4dd2..c08d5fc6f 100644 --- a/i18n/ar-SA/equicord.json +++ b/i18n/ar-SA/equicord.json @@ -82,7 +82,7 @@ "expireTooltip": "This invite will {expiry}", "expireWill": "expire", "notExpire": "not expire", - "invitedYouTo": "{inviter} invited you to {guild}" + "invitedYouTo": "{inviter} دعاك إلى {guild}" } }, "bypassStatus": { @@ -97,14 +97,14 @@ "statusToUse": "Status to use for whitelist" }, "statusOptions": { - "online": "Online", - "idle": "Idle", + "online": "متصل", + "idle": "مشغول", "dnd": "Do Not Disturb", - "invisible": "Invisible" + "invisible": "مخفي" }, "contextMenu": { - "addStatusBypass": "Add Status Bypass", - "removeStatusBypass": "Remove Status Bypass" + "addStatusBypass": "إضافة تجاوز الحالة", + "removeStatusBypass": "إزالة تجاوز الحالة" }, "placeholder": { "separateWithCommas": "Separate with commas" @@ -1327,4 +1327,4 @@ "scanQrCode": "Scan QR Code" } } -} +} \ No newline at end of file diff --git a/i18n/cs-CZ/api.json b/i18n/cs-CZ/api.json index c70c4b850..20de9de4f 100644 --- a/i18n/cs-CZ/api.json +++ b/i18n/cs-CZ/api.json @@ -1,37 +1,37 @@ { "commands": { - "errorExecuting": "An Error occurred while executing command \"{name}\"" + "errorExecuting": "Nastala chyba při provádění příkazu \"{name}\"" }, "notifications": { - "dismissNotification": "Dismiss Notification", - "noNotifications": "No notifications yet", - "notificationLog": "Notification Log", - "notificationSettings": "Notification Settings", + "dismissNotification": "Odmítnout oznámení", + "noNotifications": "Zatím žádná oznámení", + "notificationLog": "Záznam oznámení", + "notificationSettings": "Nastavení oznámení", "logs": { - "title": "Are you sure?", - "body_zero": "No notification selected.", - "body_one": "This will permanently remove {count} notification. This action cannot be undone.", - "body_other": "This will permanently remove {count} notifications. This action cannot be undone.", - "confirm": "Do it!", - "cancel": "Nevermind", - "clearNotificationLog": "Clear Notification Log" + "title": "Jste si jistý?", + "body_zero": "Nebylo vybráno žádné oznámení.", + "body_one": "Toto trvale odstraní {count} oznámení. Tuto akci nelze vrátit zpět.", + "body_other": "Toto trvale odstraní {count} oznámení. Tuto akci nelze vrátit zpět.", + "confirm": "Udělejte to!", + "cancel": "Nevadí", + "clearNotificationLog": "Vyčistit protokol oznámení" }, "missedNotifications": { - "title": "While you were away", - "body_one": "{count} notification received", - "body_other": "{count} notifications received" + "title": "Když jste byli pryč", + "body_one": "Přijato {count} oznámení", + "body_other": "Přijata {count} oznámení" } }, "memberListDecorators": { - "fallback": "Failed to render {key} Member List Decorator" + "fallback": "Nepodařilo se vykreslit {key} dekoraci seznamu členů" }, "messageAccessories": { - "fallback": "Failed to render {key} Message Accessory" + "fallback": "Nepodařilo se zobrazit {key} příslušenství zpráv" }, "messageDecorations": { - "fallback": "Failed to render {key} Message Decoration" + "fallback": "Nepodařilo se zobrazit dekoraci {key} zpráv" }, "notices": { - "fallback": "Error Showing Notice" + "fallback": "Chyba při zobrazování oznámení" } } \ No newline at end of file diff --git a/i18n/cs-CZ/equicord.json b/i18n/cs-CZ/equicord.json index 8f22db55d..dee4e3f76 100644 --- a/i18n/cs-CZ/equicord.json +++ b/i18n/cs-CZ/equicord.json @@ -1,88 +1,88 @@ { "absRPC": { - "description": "Rich presence for AudioBookShelf media server", + "description": "Bohatá přítomnost pro AudioBookShelf media server", "settings": { - "serverUrl": "AudioBookShelf server URL (e.g., https://abs.example.com)", - "username": "AudioBookShelf username", - "password": "AudioBookShelf password" + "serverUrl": "Adresa URL serveru AudioBookShelf (např. https://abs.example.com)", + "username": "AudioBookShelf uživatelské jméno", + "password": "AudiobookShelf heslo" }, "about": { - "title": "How to connect to AudioBookShelf", - "description": "Enter your AudioBookShelf server URL, username, and password to display your currently playing audiobooks as Discord Rich Presence.", - "automaticAuth": "The plugin will automatically authenticate and fetch your listening progress." + "title": "Jak se připojit k AudioBookShelf", + "description": "Zadejte URL svého AudioBookShelf serveru, uživatelské jméno a heslo pro zobrazení tvých aktuálně přehrávaných audioknih jako Discord Rich Presence.", + "automaticAuth": "Plugin automaticky ověří a načte váš postup poslechu." }, "toasts": { - "notConfigured": "AudioBookShelf RPC is not configured." + "notConfigured": "AudioBookShelf RPC není nakonfigurován." } }, "altKrispSwitch": { - "description": "Makes the Noise Suppression Popout switch between None and Krisp instead of Krisp and Standard" + "description": "Umění přepínač Popout na potlačení šumu mezi None a Krisp namísto Krisp a Standard" }, "bannersEverywhere": { - "description": "Displays banners in the member list ", + "description": "Zobrazuje bannery v seznamu členů ", "settings": { - "animate": "Animate banners", - "preferNameplate": "prefer nameplate over banner" + "animate": "Animovat bannery", + "preferNameplate": "preferovaná tabulka se jménem nad bannerem" } }, "baseDecoder": { - "description": "Decode base64 content of any message and copy the decoded content.", + "description": "Dekódujte base64 obsah zprávy a zkopírujte dekódovaný obsah.", "settings": { - "clickMethod": "Change the button to decode base64 content of any message.", + "clickMethod": "Změňte tlačítko pro dekódování base64 obsahu jakékoli zprávy.", "clickMethodOptions": { - "left": "Left Click to decode the base64 content.", - "right": "Right click to decode the base64 content." + "left": "Kliknutím levým tlačítkem dekódovat obsah base64.", + "right": "Kliknutím pravým tlačítkem myši dekódovat obsah base64." } }, "ui": { - "modalTitle": "Decoded Base64 Content", - "decodedContent": "Decoded Content", - "copyDecoded": "Copy Decoded Content", - "copiedToast": "Decoded content copied to clipboard!", - "tooltipLeft": "Copy Decoded (Left Click) / Decode Base64 (Right Click)", - "tooltipRight": "Decode Base64 (Left Click) / Copy Decoded (Right Click)" + "modalTitle": "Obsah base64 dekódován", + "decodedContent": "Dekódovaný Obsah", + "copyDecoded": "Zkopírovat dekódovaný obsah", + "copiedToast": "Dekódovaný obsah zkopírován do schránky!", + "tooltipLeft": "Kopírovat dekódované (kliknutím levým tlačítkem) / Dekódovat Base64 (pravé kliknutí)", + "tooltipRight": "Dekódovat Base64 (kliknutí levým tlačítkem) / Kopírovat dekódované (pravé kliknutí)" } }, "betterAudioPlayer": { - "description": "Adds a spectrograph and oscilloscope visualizer to audio attachment players", + "description": "", "settings": { - "oscilloscope": "Enable oscilloscope visualizer", - "spectrograph": "Enable spectrograph visualizer", - "oscilloscopeSolidColor": "Use solid color for oscilloscope", - "oscilloscopeColor": "Color for oscilloscope", - "spectrographSolidColor": "Use solid color for spectrograph", - "spectrographColor": "Color for spectrograph", - "forceMoveBelow": "Force the visualizer below the audio player" + "oscilloscope": "Povolit vizualizér osciloskopu", + "spectrograph": "Povolit vizualizér spektografu", + "oscilloscopeSolidColor": "Použít pevnou barvu pro osciloskop", + "oscilloscopeColor": "Barva pro osciloskop", + "spectrographSolidColor": "Použít pevnou barvu pro spektrograf", + "spectrographColor": "Barva pro spektrograf", + "forceMoveBelow": "Vynutit vizualizér pod zvukovým přehrávačem" }, "toasts": { - "invalidColor": "Invalid color format for {settingKey}, make sure it's in the format 'R, G, B' or '#RRGGBB'" + "invalidColor": "Neplatný formát barvy pro {settingKey}, ujistěte se, že je ve formátu 'R, G, B' nebo '#RRGBB'" } }, "betterBanReasons": { - "description": "Create custom reasons to use in the Discord ban modal, and/or show a text input by default instead of the options.", + "description": "Vytvořte vlastní důvody pro použití v režimu zakázání Discord a/nebo zobrazí výchozí textový vstup namísto možností.", "settings": { - "reasons": "Your custom reasons", + "reasons": "Vaše vlastní důvody", "isTextInputDefault": "Shows a text input instead of a select menu by default. (Equivalent to clicking the \"Other\" option)" }, "ui": { - "reasons": "Reasons", - "reasonPlaceholder": "Reason", - "addAnotherReason": "Add another reason" + "reasons": "Zdůvodnění", + "reasonPlaceholder": "Důvod", + "addAnotherReason": "Přidat další důvod" } }, "betterBlockedUsers": { "description": "Allows you to search in blocked users list and makes names selectable in settings.", "ui": { - "searchPlaceholder": "Search users..." + "searchPlaceholder": "Hledat uživatele..." } }, "betterInvites": { "description": "See invites expiration date, view inviter profile and preview servers before joining by clicking the name", "ui": { - "expireTooltip": "This invite will {expiry}", - "expireWill": "expire", - "notExpire": "not expire", - "invitedYouTo": "{inviter} invited you to {guild}" + "expireTooltip": "Tato pozvánka bude {expiry}", + "expireWill": "vyprší", + "notExpire": "nevyprší", + "invitedYouTo": "{inviter} vás pozval do {guild}" } }, "bypassStatus": { @@ -98,9 +98,9 @@ }, "statusOptions": { "online": "Online", - "idle": "Idle", - "dnd": "Do Not Disturb", - "invisible": "Invisible" + "idle": "Nečinný", + "dnd": "Nerušit", + "invisible": "Neviditelný" }, "contextMenu": { "addStatusBypass": "Add Status Bypass", @@ -135,10 +135,10 @@ "soundQuality": "Quality of sound to use" }, "quality": { - "high": "High", - "medium": "Medium", - "low": "Low", - "lowest": "Lowest" + "high": "Vysoký", + "medium": "Střední", + "low": "Nízká", + "lowest": "Nejnižší" } }, "atSomeone": { diff --git a/i18n/cs-CZ/translation.json b/i18n/cs-CZ/translation.json index f9cdbfd6f..8c1ad0067 100644 --- a/i18n/cs-CZ/translation.json +++ b/i18n/cs-CZ/translation.json @@ -1,10 +1,10 @@ { - "description": "Assists with translating Equicord", + "description": "Pomoc s překládáním Equicord", "settings": { "forceLocale": { - "description": "Force a different locale for Equicord to use", - "followDiscord": "Default (follow Discord)" + "description": "Vynutit jinou lokalizaci pro použití Equicord", + "followDiscord": "Výchozí (sledovat Discord)" }, - "showMissingKeys": "If the current locale is missing translations, show the keys instead of falling back to English" + "showMissingKeys": "Pokud v aktuálním jazyku chybí překlady, zobrazte klíče místo toho, aby se vrátily do angličtiny" } } \ No newline at end of file diff --git a/i18n/da-DK/api.json b/i18n/da-DK/api.json index c70c4b850..26f5782b1 100644 --- a/i18n/da-DK/api.json +++ b/i18n/da-DK/api.json @@ -1,37 +1,37 @@ { "commands": { - "errorExecuting": "An Error occurred while executing command \"{name}\"" + "errorExecuting": "Der opstod en fejl under udførelse af kommandoen \"{name}\"" }, "notifications": { - "dismissNotification": "Dismiss Notification", - "noNotifications": "No notifications yet", - "notificationLog": "Notification Log", - "notificationSettings": "Notification Settings", + "dismissNotification": "Afvis notifikation", + "noNotifications": "Ingen notifikationer endnu", + "notificationLog": "Notifikationslog", + "notificationSettings": "Indstillinger for notifikationer", "logs": { - "title": "Are you sure?", - "body_zero": "No notification selected.", - "body_one": "This will permanently remove {count} notification. This action cannot be undone.", - "body_other": "This will permanently remove {count} notifications. This action cannot be undone.", - "confirm": "Do it!", - "cancel": "Nevermind", - "clearNotificationLog": "Clear Notification Log" + "title": "Er du sikker?", + "body_zero": "Ingen notifikation valgt.", + "body_one": "Dette vil permanent fjerne {count} notifikation. Denne handling kan ikke fortrydes.", + "body_other": "Dette vil permanent fjerne {count} notifikationer. Denne handling kan ikke fortrydes.", + "confirm": "Gør det!", + "cancel": "Glem det", + "clearNotificationLog": "Ryd notifikationslog" }, "missedNotifications": { - "title": "While you were away", - "body_one": "{count} notification received", - "body_other": "{count} notifications received" + "title": "Mens du var væk", + "body_one": "{count} notifikation modtaget", + "body_other": "{count} notifikationer modtaget" } }, "memberListDecorators": { - "fallback": "Failed to render {key} Member List Decorator" + "fallback": "Kunne ikke vise {key} medlemsliste dekorator" }, "messageAccessories": { - "fallback": "Failed to render {key} Message Accessory" + "fallback": "Kunne ikke vise {key} beskedtilbehør" }, "messageDecorations": { - "fallback": "Failed to render {key} Message Decoration" + "fallback": "Kunne ikke vise {key} besked dekoration" }, "notices": { - "fallback": "Error Showing Notice" + "fallback": "Fejl ved visning af meddelelse" } } \ No newline at end of file diff --git a/i18n/da-DK/translation.json b/i18n/da-DK/translation.json index f9cdbfd6f..1dd39fb6e 100644 --- a/i18n/da-DK/translation.json +++ b/i18n/da-DK/translation.json @@ -1,10 +1,10 @@ { - "description": "Assists with translating Equicord", + "description": "Hjælp med at oversætte Equicord", "settings": { "forceLocale": { - "description": "Force a different locale for Equicord to use", - "followDiscord": "Default (follow Discord)" + "description": "Tving en anden sprogstandard for Equicord at bruge", + "followDiscord": "Standard (følg Discord)" }, - "showMissingKeys": "If the current locale is missing translations, show the keys instead of falling back to English" + "showMissingKeys": "Hvis den aktuelle sprogstandard mangler oversættelser, så vis nøglerne i stedet for at falde tilbage til engelsk" } } \ No newline at end of file diff --git a/i18n/es-ES/equicord.json b/i18n/es-ES/equicord.json index 8f22db55d..4422007aa 100644 --- a/i18n/es-ES/equicord.json +++ b/i18n/es-ES/equicord.json @@ -1,13 +1,13 @@ { "absRPC": { - "description": "Rich presence for AudioBookShelf media server", + "description": "Rich presence para el servidor multimedia de AudioBookShelf", "settings": { - "serverUrl": "AudioBookShelf server URL (e.g., https://abs.example.com)", - "username": "AudioBookShelf username", - "password": "AudioBookShelf password" + "serverUrl": "URL del servidor AudioBookShelf (p. ej. https://abs.example.com)", + "username": "Usuario de AudioBookShelf", + "password": "Contraseña de AudioBookShelf" }, "about": { - "title": "How to connect to AudioBookShelf", + "title": "Cómo conectarse a AudioBookShelf", "description": "Enter your AudioBookShelf server URL, username, and password to display your currently playing audiobooks as Discord Rich Presence.", "automaticAuth": "The plugin will automatically authenticate and fetch your listening progress." }, @@ -21,7 +21,7 @@ "bannersEverywhere": { "description": "Displays banners in the member list ", "settings": { - "animate": "Animate banners", + "animate": "Animar banners", "preferNameplate": "prefer nameplate over banner" } }, @@ -35,12 +35,12 @@ } }, "ui": { - "modalTitle": "Decoded Base64 Content", - "decodedContent": "Decoded Content", - "copyDecoded": "Copy Decoded Content", - "copiedToast": "Decoded content copied to clipboard!", - "tooltipLeft": "Copy Decoded (Left Click) / Decode Base64 (Right Click)", - "tooltipRight": "Decode Base64 (Left Click) / Copy Decoded (Right Click)" + "modalTitle": "Contenido Base64 Decodificado", + "decodedContent": "Contenido Decodificado", + "copyDecoded": "Copiar Contenido Decodificado", + "copiedToast": "¡Contenido decodificado ha sido copiado al portapapeles!", + "tooltipLeft": "Copiar Decodificado (Click Izquierdo) / Decodificar Base64 (Click Derecho)", + "tooltipRight": "Decodificar Base64 (Click Izquierdo) / Copiar decodificado (Click Derecho)" } }, "betterAudioPlayer": { @@ -61,19 +61,19 @@ "betterBanReasons": { "description": "Create custom reasons to use in the Discord ban modal, and/or show a text input by default instead of the options.", "settings": { - "reasons": "Your custom reasons", + "reasons": "Tus razones personalizadas", "isTextInputDefault": "Shows a text input instead of a select menu by default. (Equivalent to clicking the \"Other\" option)" }, "ui": { - "reasons": "Reasons", - "reasonPlaceholder": "Reason", - "addAnotherReason": "Add another reason" + "reasons": "Razones", + "reasonPlaceholder": "Razón", + "addAnotherReason": "Añadir otro motivo" } }, "betterBlockedUsers": { "description": "Allows you to search in blocked users list and makes names selectable in settings.", "ui": { - "searchPlaceholder": "Search users..." + "searchPlaceholder": "Buscar usuarios..." } }, "betterInvites": { @@ -82,7 +82,7 @@ "expireTooltip": "This invite will {expiry}", "expireWill": "expire", "notExpire": "not expire", - "invitedYouTo": "{inviter} invited you to {guild}" + "invitedYouTo": "{inviter} te invitó a {guild}" } }, "bypassStatus": { @@ -94,33 +94,33 @@ "allowOutsideOfDms": "Allow selected users to bypass status outside of DMs too (acts like a channel/guild bypass, but it's for all messages sent by the selected users)", "notificationSound": "Whether the notification sound should be played", "respectSilentPings": "Respect silent pings (@silent / suppress notifications)", - "statusToUse": "Status to use for whitelist" + "statusToUse": "" }, "statusOptions": { "online": "Online", - "idle": "Idle", - "dnd": "Do Not Disturb", + "idle": "Ausente", + "dnd": "No molestar", "invisible": "Invisible" }, "contextMenu": { - "addStatusBypass": "Add Status Bypass", - "removeStatusBypass": "Remove Status Bypass" + "addStatusBypass": "Añadir Bypass de Estado", + "removeStatusBypass": "Eliminar Bypass de Estado" }, "placeholder": { - "separateWithCommas": "Separate with commas" + "separateWithCommas": "Separar con comas" } }, "alwaysExpandProfiles": { "description": "Always expands profile popouts to the full modal" }, "anammox": { - "description": "Hides various features related to nitro and the store", + "description": "Ocultar varias funciones relacionadas con el nitro y la tienda", "settings": { - "dms": "Remove shops above DMs list", - "quests": "Remove quests above DMs list", - "serverBoost": "Remove server boost info above channel list", - "billing": "Remove billing settings", - "gift": "Remove gift button", + "dms": "Eliminar tiendas sobre la lista de Mensajes Directos", + "quests": "Eliminar misiones sobre la lista de Mensajes Directos", + "serverBoost": "Eliminar información sobre mejoras del servidor sobre la lista de Mensajes Directos", + "billing": "Eliminar ajustes de facturación", + "gift": "Eliminar botón de regalo", "emojiList": "Remove unavailable categories from the emoji picker" } }, @@ -129,22 +129,22 @@ "settings": { "volume": "Volume of the animalese sound", "speed": "Speed of the animalese sound", - "pitch": "Pitch multiplier", + "pitch": "Multiplicador de tono", "messageLengthLimit": "Maximum length of message to process", "processOwnMessages": "Enable to yap your own messages too", "soundQuality": "Quality of sound to use" }, "quality": { - "high": "High", - "medium": "Medium", - "low": "Low", - "lowest": "Lowest" + "high": "Alto", + "medium": "Mediano", + "low": "Bajo", + "lowest": "Muy bajo" } }, "atSomeone": { - "description": "Mention someone randomly", + "description": "Mencionar a alguien al azar", "contextMenu": { - "someone": "Mention someone randomly" + "someone": "Mencionar a alguien al azar" } }, "autoZipper": { @@ -202,10 +202,10 @@ "description": "Adds badges to channels based on their type", "settings": { "oneBadgePerChannel": "Show only one badge per channel", - "showTextBadge": "Show Text badge", - "showVoiceBadge": "Show Voice badge", - "showCategoryBadge": "Show Category badge", - "showDirectoryBadge": "Show Directory badge", + "showTextBadge": "Mostrar insignia de texto", + "showVoiceBadge": "Mostrar insignia de voz", + "showCategoryBadge": "Mostrar insignia de categoría", + "showDirectoryBadge": "Mostrar insignia de directorio", "showAnnouncementThreadBadge": "Show Announcement Thread badge", "showPublicThreadBadge": "Show Public Thread badge", "showPrivateThreadBadge": "Show Private Thread badge", @@ -242,22 +242,22 @@ "stageBadgeColor": "Stage badge color", "directoryBadgeColor": "Directory badge color", "forumBadgeColor": "Forum badge color", - "mediaBadgeColor": "Media badge color", - "nsfwBadgeColor": "NSFW badge color", - "lockedBadgeColor": "Locked badge color", - "rulesBadgeColor": "Rules badge color", - "unknownBadgeColor": "Unknown badge color" + "mediaBadgeColor": "Color de la insignia multimedia", + "nsfwBadgeColor": "Color de la insignia NSFW", + "lockedBadgeColor": "Color de insignia bloqueada", + "rulesBadgeColor": "Color de la insignia de Reglas", + "unknownBadgeColor": "Color de insignia Desconocido" }, "tooltips": { "lockedChannel": "This channel is locked.", - "nsfwChannel": "This channel is marked as NSFW.", - "rulesChannel": "This channel is the server rules channel." + "nsfwChannel": "Este canal está marcado como NSFW.", + "rulesChannel": "Este canal es el canal de reglas del servidor." } }, "channelTabs": { "description": "Group your commonly visited channels in tabs, like a browser", "contextMenu": { - "openInNewTab": "Open in New Tab" + "openInNewTab": "Abrir en una Nueva Pestaña" } }, "characterCounter": { @@ -283,7 +283,7 @@ "blockedReplyDisplay": "What should display instead of the message when someone replies to someone you have hidden", "blockedReplyDisplayOptions": { "displayText": "Display text saying a hidden message was replied to", - "hideReply": "Literally nothing" + "hideReply": "Literalmente nada" }, "guildBlackList": "Guild ids to disable functionality in", "guildWhiteList": "Guild ids to enable functionality in" @@ -297,9 +297,9 @@ "settings": { "richPresenceTagging": "When should clips be tagged with the current Rich Presence?", "richPresenceTaggingOptions": { - "always": "Always", + "always": "Siempre", "whenMatched": "Only when beginning or end of activity name matches", - "never": "Never" + "never": "Nunca" }, "enableScreenshotKeybind": "Enable the screenshot keybind feature", "enableVoiceOnlyClips": "Enable voice-only clips (audio without video)", @@ -314,8 +314,8 @@ "hotkey": "Hotkey used to open the command palette", "visualStyle": "Palette appearance", "visualStyleOptions": { - "classic": "Classic", - "polished": "Polished" + "classic": "Clásico", + "polished": "Pulido" }, "showTags": "Display tag chips for commands", "enableTagFilter": "Show the tag filter bar", @@ -325,7 +325,7 @@ "hotkeyTitle": "Command Palette Hotkey", "hotkeyDescription": "Hotkey used to open the command palette", "pressAnyKey": "Press any key...", - "reset": "Reset" + "reset": "Restablecer" } }, "components": { @@ -338,7 +338,7 @@ }, "ui": { "flaggedWords": "Flagged Words", - "placeholder": "Word" + "placeholder": "Palabra" } }, "copyProfileColors": { @@ -355,7 +355,7 @@ "copyStatusUrls": { "description": "Copy the users status url when you right-click it", "toast": { - "copied": "Copied URL", + "copied": "URL Copiado", "error": "Error copying URL, check console for more info" } }, @@ -371,19 +371,19 @@ "buddy": "Pick a cursor buddy", "buddyOptions": { "oneko": "Oneko", - "fathorse": "Fatass Horse" + "fathorse": "Caballo Gordo" }, - "speed": "Speed of your buddy", - "fps": "Framerate of your buddy", - "furColor": "Fur hex color for Oneko", + "speed": "Velocidad de tu amigo", + "fps": "Cantidad de frames de tu amigo", + "furColor": "Color hexadecimal de piel de Oneko", "outlineColor": "Outline hex color for Oneko", - "size": "Size of the fatass horse", + "size": "Tamaño del caballo gordo", "fade": "If the horse should fade when the cursor is near", "freeroam": "If the horse should roam freely when idle", "shake": "If the horse should shake the window when it's walking" }, "ui": { - "furColor": "Fur Color", + "furColor": "Color de Pelaje", "outlineColor": "Outline Color" } }, @@ -395,9 +395,9 @@ "settings": { "searchSounds": "Search Sounds", "searchPlaceholder": "Search by name or ID", - "import": "Import", - "export": "Export", - "resetAll": "Reset All", + "import": "Importar", + "export": "Exportar", + "resetAll": "Resetear todo", "debug": "Debug" }, "toast": { @@ -456,23 +456,23 @@ }, "inviteExpireAfter": "Invite expiration.", "inviteExpireAfterOptions": { - "30min": "30 minutes", - "1hour": "1 hour", - "6hours": "6 hours", - "12hours": "12 hours", - "1day": "1 day", - "7days": "7 days", - "never": "Never" + "30min": "30 minutos", + "1hour": "1 hora", + "6hours": "6 horas", + "12hours": "12 horas", + "1day": "1 día", + "7days": "7 días", + "never": "Nunca" }, "inviteMaxUses": "Invite max uses.", "inviteMaxUsesOptions": { - "noLimit": "No limit", - "1use": "1 use", - "5uses": "5 uses", - "10uses": "10 uses", - "25uses": "25 uses", - "50uses": "50 uses", - "100uses": "100 uses" + "noLimit": "Ilimitado", + "1use": "1 uso", + "5uses": "5 usos", + "10uses": "10 usos", + "25uses": "25 usos", + "50uses": "50 usos", + "100uses": "100 usos" }, "inviteTemporaryMembership": "Grant temporary membership.", "reuseExistingInvites": "Reuse existing invite instead of creating a new one.", @@ -481,8 +481,8 @@ "toast": { "dropFailed": "Dragify failed to handle drop.", "noChannelForInvites": "No channel available for invites.", - "inviteCreated": "Invite created.", - "inviteFailed": "Unable to create invite." + "inviteCreated": "Invitación creada.", + "inviteFailed": "No se pudo crear la invitación." } }, "messageLoggerEnhanced": { @@ -517,27 +517,27 @@ "selectLogsDir": "Select logs directory", "importLogsFromFile": "Import Logs From File", "exportLogsFromIndexedDB": "Export Logs From IndexedDB", - "openLogs": "Open Logs", + "openLogs": "Abrir Registros", "openImageCacheFolder": "Opens the image cache directory" }, "modal": { "filterMessages": "Filter Messages", - "deleted": "Deleted", - "edited": "Edited", - "ghostPinged": "Ghost Pinged", - "clearAllLogs": "Clear All Logs", - "clearVisibleLogs": "Clear Visible Logs", - "sortOldestFirst": "Sort Oldest First", - "sortNewestFirst": "Sort Newest First", - "noResultsIn": "No results in {tab}.", - "maybeTry": "Maybe try {nextTab} or {lastTab}", + "deleted": "Eliminado", + "edited": "Editado", + "ghostPinged": "Ping Fantasma", + "clearAllLogs": "Borrar todos los registros", + "clearVisibleLogs": "Borrar Registros Visibles", + "sortOldestFirst": "Ordenar primero más antiguo", + "sortNewestFirst": "Ordenar primero más nuevo", + "noResultsIn": "Sin resultados en {tab}.", + "maybeTry": "Tal vez pruebe {nextTab} o {lastTab}", "emptyLogs": "Empty eh", "importLogsTooltip": "ML Enhanced now stores logs in indexeddb. You need to import your old logs from the logs directory. Importing wont overwrite existing logs", - "importLogs": "Import Logs", - "loadMore": "Load More", + "importLogs": "Importar Registros", + "loadMore": "Cargar Más", "jumpToMessage": "Jump To Message", "openUserProfile": "Open user profile", - "copyContent": "Copy Content", + "copyContent": "Copiar Contenido", "copyUserId": "Copy User ID", "copyMessageId": "Copy Message ID", "copyChannelId": "Copy Channel ID", diff --git a/i18n/pt-BR/equicord.json b/i18n/pt-BR/equicord.json index 8f22db55d..d5d28c17f 100644 --- a/i18n/pt-BR/equicord.json +++ b/i18n/pt-BR/equicord.json @@ -1,307 +1,307 @@ { "absRPC": { - "description": "Rich presence for AudioBookShelf media server", + "description": "Rich presence para servidor de mídia AudioBookShelf", "settings": { - "serverUrl": "AudioBookShelf server URL (e.g., https://abs.example.com)", - "username": "AudioBookShelf username", - "password": "AudioBookShelf password" + "serverUrl": "URL do servidor AudioBookShelf (exemplo: https://abs.exemplo.com)", + "username": "Usuário AudioBookShelf", + "password": "Senha AudioBookShelf" }, "about": { - "title": "How to connect to AudioBookShelf", - "description": "Enter your AudioBookShelf server URL, username, and password to display your currently playing audiobooks as Discord Rich Presence.", - "automaticAuth": "The plugin will automatically authenticate and fetch your listening progress." + "title": "Como conectar ao AudioBookShelf", + "description": "Insira a URL do seu servidor AudioBookShelf, usuário e senha para exibir os audiolivros que você está ouvindo no Discord Rich Presence.", + "automaticAuth": "O plugin irá autenticar automaticamente e buscar seu progresso de escuta." }, "toasts": { - "notConfigured": "AudioBookShelf RPC is not configured." + "notConfigured": "AudioBookShelf RPC não está configurado." } }, "altKrispSwitch": { - "description": "Makes the Noise Suppression Popout switch between None and Krisp instead of Krisp and Standard" + "description": "Faz o Popout de Supressão de Ruído alternar entre Nenhum e Krisp em vez de Krisp e Padrão" }, "bannersEverywhere": { - "description": "Displays banners in the member list ", + "description": "Exibe banners na lista de membros ", "settings": { - "animate": "Animate banners", - "preferNameplate": "prefer nameplate over banner" + "animate": "Animar banners", + "preferNameplate": "preferir placa de identificação em vez de banner" } }, "baseDecoder": { - "description": "Decode base64 content of any message and copy the decoded content.", + "description": "Decodificar conteúdo base64 de qualquer mensagem e copiar o conteúdo decodificado.", "settings": { - "clickMethod": "Change the button to decode base64 content of any message.", + "clickMethod": "Altere o botão para decodificar conteúdo base64 de qualquer mensagem.", "clickMethodOptions": { - "left": "Left Click to decode the base64 content.", - "right": "Right click to decode the base64 content." + "left": "Clique esquerdo para decodificar o conteúdo base64.", + "right": "Clique direito para decodificar o conteúdo base64." } }, "ui": { - "modalTitle": "Decoded Base64 Content", - "decodedContent": "Decoded Content", - "copyDecoded": "Copy Decoded Content", - "copiedToast": "Decoded content copied to clipboard!", - "tooltipLeft": "Copy Decoded (Left Click) / Decode Base64 (Right Click)", - "tooltipRight": "Decode Base64 (Left Click) / Copy Decoded (Right Click)" + "modalTitle": "Conteúdo Base64 Decodificado", + "decodedContent": "Conteúdo Decodificado", + "copyDecoded": "Copiar Conteúdo Decodificado", + "copiedToast": "Conteúdo decodificado copiado para área de transferência!", + "tooltipLeft": "Copiar Decodificado (Clique esquerdo) / Decodificar Base64 (Clique direito)", + "tooltipRight": "Decodificar Base64 (Clique esquerdo) / Copiar Decodificado (Clique direito)" } }, "betterAudioPlayer": { - "description": "Adds a spectrograph and oscilloscope visualizer to audio attachment players", + "description": "Adiciona um visualizador de espectrógrafo e osciloscópio aos reprodutores de anexos de áudio", "settings": { - "oscilloscope": "Enable oscilloscope visualizer", - "spectrograph": "Enable spectrograph visualizer", - "oscilloscopeSolidColor": "Use solid color for oscilloscope", - "oscilloscopeColor": "Color for oscilloscope", - "spectrographSolidColor": "Use solid color for spectrograph", - "spectrographColor": "Color for spectrograph", - "forceMoveBelow": "Force the visualizer below the audio player" + "oscilloscope": "Ativar visualizador de osciloscópio", + "spectrograph": "Ativar visualizador espectrográfico", + "oscilloscopeSolidColor": "Usar cor sólida para o osciloscópio", + "oscilloscopeColor": "Cor para osciloscópio", + "spectrographSolidColor": "Usar cores sólidas para o espectrógrafo", + "spectrographColor": "Cor para espectrográfico", + "forceMoveBelow": "Forçar o visualizador abaixo do reprodutor de áudio" }, "toasts": { - "invalidColor": "Invalid color format for {settingKey}, make sure it's in the format 'R, G, B' or '#RRGGBB'" + "invalidColor": "Formato de cor inválido para {settingKey}, verifique se está no formato 'R, G, B' ou '#RGGBB'" } }, "betterBanReasons": { - "description": "Create custom reasons to use in the Discord ban modal, and/or show a text input by default instead of the options.", + "description": "Criar motivos personalizados para usar na janela de banimento do Discord e/ou exibir uma entrada de texto por padrão em vez das opções.", "settings": { - "reasons": "Your custom reasons", - "isTextInputDefault": "Shows a text input instead of a select menu by default. (Equivalent to clicking the \"Other\" option)" + "reasons": "Seus motivos personalizados", + "isTextInputDefault": "Mostra uma entrada de texto em vez de um menu de seleção por padrão. (Equivalente a clicar na opção \"Outro\")" }, "ui": { - "reasons": "Reasons", - "reasonPlaceholder": "Reason", - "addAnotherReason": "Add another reason" + "reasons": "Motivos", + "reasonPlaceholder": "Motivo", + "addAnotherReason": "Adicionar outro motivo" } }, "betterBlockedUsers": { - "description": "Allows you to search in blocked users list and makes names selectable in settings.", + "description": "Permite que você pesquise na lista de usuários bloqueados e torna os nomes selecionáveis nas configurações.", "ui": { - "searchPlaceholder": "Search users..." + "searchPlaceholder": "Pesquisar usuários..." } }, "betterInvites": { - "description": "See invites expiration date, view inviter profile and preview servers before joining by clicking the name", + "description": "Ver a data de expiração dos convites, visualizar o perfil de quem convidou e pré-visualizar servidores antes de entrar ao clicar no nome", "ui": { - "expireTooltip": "This invite will {expiry}", - "expireWill": "expire", - "notExpire": "not expire", - "invitedYouTo": "{inviter} invited you to {guild}" + "expireTooltip": "Este convite irá {expiry}", + "expireWill": "expirar", + "notExpire": "não expirar", + "invitedYouTo": "{inviter} convidou você para {guild}" } }, "bypassStatus": { - "description": "Still get notifications from specific sources when in do not disturb mode. Right-click on users/channels/guilds to set them to bypass do not disturb mode.", + "description": "Ainda receba notificações de lugares específicos quando estiver no modo não perturbe. Clique com o botão direito em usuários/canais/servidores para defini-los para ignorar o modo não perturbe.", "settings": { - "guilds": "Guilds to let bypass (notified when pinged anywhere in guild)", - "channels": "Channels to let bypass (notified when pinged in that channel)", - "users": "Users to let bypass (notified for all messages sent in DMs)", - "allowOutsideOfDms": "Allow selected users to bypass status outside of DMs too (acts like a channel/guild bypass, but it's for all messages sent by the selected users)", - "notificationSound": "Whether the notification sound should be played", - "respectSilentPings": "Respect silent pings (@silent / suppress notifications)", - "statusToUse": "Status to use for whitelist" + "guilds": "Servidores para permitir ignorar (notificado quando mencionado em qualquer lugar no servidor)", + "channels": "Canais para permitir ignorar (notificado quando mencionado naquele canal)", + "users": "Usuários para permitir ignorar (notificado para todas as mensagens enviadas em DMs)", + "allowOutsideOfDms": "Permitir que usuários selecionados ignorem o status fora de DMs também (age como uma exceção de canal/servidor, mas é para todas as mensagens enviadas pelos usuários selecionados)", + "notificationSound": "Se o som de notificação deve ser reproduzido", + "respectSilentPings": "Respeita pings silenciosos (@silent / suprimir notificações)", + "statusToUse": "Status para usar para lista de permissões" }, "statusOptions": { "online": "Online", - "idle": "Idle", - "dnd": "Do Not Disturb", - "invisible": "Invisible" + "idle": "Ausente", + "dnd": "Não perturbe", + "invisible": "Invisível" }, "contextMenu": { - "addStatusBypass": "Add Status Bypass", - "removeStatusBypass": "Remove Status Bypass" + "addStatusBypass": "Adicionar Exceção de Status", + "removeStatusBypass": "Remover Exceção de Status" }, "placeholder": { - "separateWithCommas": "Separate with commas" + "separateWithCommas": "Separe com vírgulas" } }, "alwaysExpandProfiles": { - "description": "Always expands profile popouts to the full modal" + "description": "Sempre expande os popouts de perfil para o modal completo" }, "anammox": { - "description": "Hides various features related to nitro and the store", + "description": "Oculta vários recursos relacionados com o nitro e a loja", "settings": { - "dms": "Remove shops above DMs list", - "quests": "Remove quests above DMs list", - "serverBoost": "Remove server boost info above channel list", - "billing": "Remove billing settings", - "gift": "Remove gift button", - "emojiList": "Remove unavailable categories from the emoji picker" + "dms": "Remover lojas acima da lista de DMs", + "quests": "Remover lojas acima da lista de DMs", + "serverBoost": "Remover informação de boost do servidor acima da lista de canais", + "billing": "Remover configurações de cobrança", + "gift": "Remover botão de presente", + "emojiList": "Remover categorias indisponíveis do seletor de emoji" } }, "animalese": { - "description": "Plays animal crossing animalese for every message sent (they yap a lot)", + "description": "Reproduz animalese de animal crossing para cada mensagem enviada (eles são muito tagarela)", "settings": { - "volume": "Volume of the animalese sound", - "speed": "Speed of the animalese sound", - "pitch": "Pitch multiplier", - "messageLengthLimit": "Maximum length of message to process", - "processOwnMessages": "Enable to yap your own messages too", - "soundQuality": "Quality of sound to use" + "volume": "Volume do som de animalese", + "speed": "Velocidade do som de animalese", + "pitch": "Multiplicador de Tom", + "messageLengthLimit": "Tamanho máximo de mensagens para processar", + "processOwnMessages": "Ativar para tagarelar suas próprias mensagens também", + "soundQuality": "Qualidade do som para ser usado" }, "quality": { - "high": "High", - "medium": "Medium", - "low": "Low", - "lowest": "Lowest" + "high": "Alto", + "medium": "Médio", + "low": "Baixa", + "lowest": "Mais Baixa" } }, "atSomeone": { - "description": "Mention someone randomly", + "description": "Mencione alguém aleatoriamente", "contextMenu": { - "someone": "Mention someone randomly" + "someone": "Mencione alguém aleatoriamente" } }, "autoZipper": { - "description": "Automatically zips specified file types and folders before uploading to Discord", + "description": "Compacta automaticamente pastas e tipos de arquivos especificados antes de fazer o upload para o Discord", "settings": { - "extensions": "Comma-separated list of file extensions to auto-zip (e.g., .psd,.blend,.exe,.dmg)" + "extensions": "Aqui está a tradução fiel, respeitando a capitalização original:\n\nLista de extensões de arquivos separadas por vírgulas para compactar automaticamente (ex: .psd, .blend, .exe, .dmg)" } }, "betterCommands": { - "description": "Enhances the command system with miscellaneous improvements.", + "description": "Melhora o sistema de comandos com diversas melhorias.", "settings": { - "autoFillArguments": "Automatically fill command with all arguements instead of just required ones", - "allowNewlinesInCommands": "Allow newlines in command inputs (CTRL + Shift + Enter)" + "autoFillArguments": "Preencher automaticamente o comando com todos os argumentos em vez de apenas os necessários", + "allowNewlinesInCommands": "Permitir novas linhas em entradas de comando (CTRL + Shift + Enter)" }, "commands": { "refresh": { - "description": "Refreshes Discord application commands locally", - "userOption": "specific user to try and refresh", - "refreshing": "Refreshing application commands...", - "success": "Commands refreshed successfully!", - "failed": "Failed to refresh commands. Check the console for details." + "description": "Atualiza os comandos do aplicativo Discord localmente", + "userOption": "usuário específico para tentar atualizar", + "refreshing": "Atualizando comandos do aplicativo...", + "success": "Comandos atualizados com sucesso!", + "failed": "Falha ao atualizar comandos. Verifique o console para detalhes." } } }, "betterPlusReacts": { - "description": "The amount of plus before :emoji: is the message to add it to" + "description": "A quantidade de mais antes de :emoji: é a mensagem para adicioná-lo" }, "betterUserArea": { - "description": "Customize and make the user area more clean.", + "description": "Personalize e faça a área do usuário mais limpa.", "settings": { - "removeNameplate": "Remove nameplate styling.", - "removeAudioMenus": "Remove menus next to mute and deafen buttons.", - "alwaysShowUsername": "Always show username instead of status.", - "removeButtonTooltips": "Remove button tooltips.", - "removeAvatarDecoration": "Remove avatar decoration.", - "removeUsernameStyles": "Remove username colors and effects." + "removeNameplate": "Remover estilo da placa de identificação.", + "removeAudioMenus": "Remova menus ao lado dos botões de mutar e silenciar áudio.", + "alwaysShowUsername": "Sempre mostrar nome de usuário em vez de status.", + "removeButtonTooltips": "Remover dicas de ferramentas dos botões.", + "removeAvatarDecoration": "Remover decoração de avatar.", + "removeUsernameStyles": "Remover cores e efeitos de nome de usuário." } }, "blockKeywords": { - "description": "Blocks messages containing specific user-defined keywords, as if the user sending them was blocked.", + "description": "Bloqueia mensagens contendo palavras-chave específicas definidas pelo usuário, como se o usuário que as enviou estivesse bloqueado.", "settings": { - "blockedWords": "Comma-seperated list of words to block", - "useRegex": "Use each value as a regular expression when checking message content (advanced)", - "caseSensitive": "Whether to use a case sensitive search or not", - "ignoreBlockedMessages": "Completely ignores (recent) new messages bar" + "blockedWords": "Lista de palavras separadas por vírgulas para bloquear", + "useRegex": "Usar cada valor como uma expressão regular ao verificar o conteúdo da mensagem (avançado)", + "caseSensitive": "Se deve usar uma pesquisa sensível a maiúsculas e minúsculas ou não", + "ignoreBlockedMessages": "Ignora completamente a barra de novas mensagens (recentes)" } }, "blockKrisp": { - "description": "Prevent Krisp from loading" + "description": "Impede que Krisp carregue" }, "bypassPinPrompt": { - "description": "Bypass the pin prompt when using the pin functions" + "description": "Ignorar a confirmação de fixação ao usar as funções de fixar" }, "channelBadges": { - "description": "Adds badges to channels based on their type", + "description": "Adiciona emblemas a canais baseados no seu tipo", "settings": { - "oneBadgePerChannel": "Show only one badge per channel", - "showTextBadge": "Show Text badge", - "showVoiceBadge": "Show Voice badge", - "showCategoryBadge": "Show Category badge", - "showDirectoryBadge": "Show Directory badge", - "showAnnouncementThreadBadge": "Show Announcement Thread badge", - "showPublicThreadBadge": "Show Public Thread badge", - "showPrivateThreadBadge": "Show Private Thread badge", - "showStageBadge": "Show Stage badge", - "showAnnouncementBadge": "Show Announcement badge", - "showForumBadge": "Show Forum badge", - "showMediaBadge": "Show Media badge", - "showNSFWBadge": "Show NSFW badge", - "showLockedBadge": "Show Locked badge", - "showRulesBadge": "Show Rules badge", - "showUnknownBadge": "Show Unknown badge", - "textBadgeLabel": "Text badge label", - "voiceBadgeLabel": "Voice badge label", - "categoryBadgeLabel": "Category badge label", - "announcementBadgeLabel": "Announcement badge label", - "announcementThreadBadgeLabel": "Announcement Thread badge label", - "publicThreadBadgeLabel": "Public Thread badge label", - "privateThreadBadgeLabel": "Private Thread badge label", - "stageBadgeLabel": "Stage badge label", - "directoryBadgeLabel": "Directory badge label", - "forumBadgeLabel": "Forum badge label", - "mediaBadgeLabel": "Media badge label", - "nsfwBadgeLabel": "NSFW badge label", - "lockedBadgeLabel": "Locked badge label", - "rulesBadgeLabel": "Rules badge label", - "unknownBadgeLabel": "Unknown badge label", - "textBadgeColor": "Text badge color", - "voiceBadgeColor": "Voice badge color", - "categoryBadgeColor": "Category badge color", - "announcementBadgeColor": "Announcement badge color", - "announcementThreadBadgeColor": "Announcement Thread badge color", - "publicThreadBadgeColor": "Public Thread badge color", - "privateThreadBadgeColor": "Private Thread badge color", - "stageBadgeColor": "Stage badge color", - "directoryBadgeColor": "Directory badge color", - "forumBadgeColor": "Forum badge color", - "mediaBadgeColor": "Media badge color", - "nsfwBadgeColor": "NSFW badge color", - "lockedBadgeColor": "Locked badge color", - "rulesBadgeColor": "Rules badge color", - "unknownBadgeColor": "Unknown badge color" + "oneBadgePerChannel": "Mostrar apenas um emblema por canal", + "showTextBadge": "Mostrar emblema de Texto", + "showVoiceBadge": "Mostrar emblema de Voz", + "showCategoryBadge": "Mostrar emblema de Categoria", + "showDirectoryBadge": "Mostrar emblema de Diretório", + "showAnnouncementThreadBadge": "Mostrar emblema de Tópico de Anúncio", + "showPublicThreadBadge": "Mostrar emblema de Tópico Público", + "showPrivateThreadBadge": "Mostrar emblema de Tópico Privado", + "showStageBadge": "Mostrar emblema de Palco", + "showAnnouncementBadge": "Mostrar emblema de Anúncio", + "showForumBadge": "Mostrar emblema de Fórum", + "showMediaBadge": "Mostrar emblema de Mídia", + "showNSFWBadge": "Mostrar emblema de NSFW", + "showLockedBadge": "Mostrar emblema de Bloqueado", + "showRulesBadge": "Mostrar emblema de Regras", + "showUnknownBadge": "Mostrar emblema de Desconhecido", + "textBadgeLabel": "Rótulo do emblema de Texto", + "voiceBadgeLabel": "Rótulo do emblema de Voz", + "categoryBadgeLabel": "Rótulo do emblema de Categoria", + "announcementBadgeLabel": "Rótulo do emblema de Anúncio", + "announcementThreadBadgeLabel": "Rótulo do emblema de Tópico de Anúncio", + "publicThreadBadgeLabel": "Rótulo do emblema de Tópico público", + "privateThreadBadgeLabel": "Rótulo do emblema de Tópico privado", + "stageBadgeLabel": "Rótulo do emblema de Palco", + "directoryBadgeLabel": "Rótulo do emblema de Diretório", + "forumBadgeLabel": "Rótulo do emblema de Fórum", + "mediaBadgeLabel": "Rótulo do emblema de Mídia", + "nsfwBadgeLabel": "Rótulo do emblema de NSFW", + "lockedBadgeLabel": "Rótulo do emblema de Bloqueado", + "rulesBadgeLabel": "Rótulo do emblema de Regras", + "unknownBadgeLabel": "Rótulo do emblema de Desconhecido", + "textBadgeColor": "Cor do emblema de Texto", + "voiceBadgeColor": "Cor do emblema de Voz", + "categoryBadgeColor": "Cor do emblema de Categoria", + "announcementBadgeColor": "Cor do emblema de Anúncio", + "announcementThreadBadgeColor": "Cor do emblema de Tópico de Anúncio", + "publicThreadBadgeColor": "Cor do emblema de Tópico Público", + "privateThreadBadgeColor": "Cor do emblema de Tópico Privado", + "stageBadgeColor": "Cor do emblema de Palco", + "directoryBadgeColor": "Cor do emblema de Diretório", + "forumBadgeColor": "Cor do emblema de Fórum", + "mediaBadgeColor": "Cor do emblema de Mídia", + "nsfwBadgeColor": "Cor do emblema de NSFW", + "lockedBadgeColor": "Cor do emblema de Bloqueado", + "rulesBadgeColor": "Cor do emblema de Regras", + "unknownBadgeColor": "Cor do emblema de Desconhecido" }, "tooltips": { - "lockedChannel": "This channel is locked.", - "nsfwChannel": "This channel is marked as NSFW.", - "rulesChannel": "This channel is the server rules channel." + "lockedChannel": "Este canal está bloqueado.", + "nsfwChannel": "Este canal está marcado como NSFW.", + "rulesChannel": "Este canal é o canal de regras do servidor." } }, "channelTabs": { - "description": "Group your commonly visited channels in tabs, like a browser", + "description": "Agrupe os canais que você visita com frequência em guias, como em um navegador", "contextMenu": { - "openInNewTab": "Open in New Tab" + "openInNewTab": "Abrir em Nova Aba" } }, "characterCounter": { - "description": "Adds a character counter to the chat input", + "description": "Adiciona um contador de caracteres na entrada de chat", "settings": { - "colorEffects": "Turn on or off color effects for getting close to the character limit" + "colorEffects": "Ativar ou desativar efeitos de cor para ficar perto do limite de caracteres" } }, "cleanChannelName": { - "description": "remove all emoji and decor shit from channel names" + "description": "remove todos os emojis e decorações irrelevantes dos nomes dos canais" }, "cleanerChannelGroups": { - "description": "Hides all channels in collapsed categories, even if they have unread messages." + "description": "Oculta todos os canais em categorias colapsadas, mesmo se tiverem mensagens não lidas." }, "clientSideBlock": { - "description": "Allows you to locally hide almost all content from any user", + "description": "Permite que você oculte localmente quase todo o conteúdo de qualquer usuário", "settings": { - "hideVc": "Hide voice channels containing blocked users.", - "usersToBlock": "User IDs seperated by a comma and a space", - "hideBlockedUsers": "Should blocked users should also be hidden everywhere", - "hideBlockedMessages": "Should messages from blocked users should be hidden fully (same as the old noblockedmessages plugin)", - "hideEmptyRoles": "Should role headers be hidden if all of their members are blocked", - "blockedReplyDisplay": "What should display instead of the message when someone replies to someone you have hidden", + "hideVc": "Ocultar canais de voz contendo usuários bloqueados.", + "usersToBlock": "IDs de usuários separados por uma vírgula e um espaço", + "hideBlockedUsers": "Usuários bloqueados também devem estar ocultos em todos os lugares", + "hideBlockedMessages": "Se as mensagens de usuários bloqueados devem ser totalmente ocultadas (igual ao antigo plugin noblockedmessages)", + "hideEmptyRoles": "Se os cabeçalhos de cargos devem ser ocultados se todos os seus membros estiverem bloqueados", + "blockedReplyDisplay": "O que deve ser exibido em vez da mensagem quando alguém responde a alguém que você ocultou", "blockedReplyDisplayOptions": { - "displayText": "Display text saying a hidden message was replied to", - "hideReply": "Literally nothing" + "displayText": "Exibir texto informando que uma mensagem oculta foi respondida", + "hideReply": "Literalmente nada" }, - "guildBlackList": "Guild ids to disable functionality in", - "guildWhiteList": "Guild ids to enable functionality in" + "guildBlackList": "Ids de servidores para desativar a funcionalidade em", + "guildWhiteList": "Ids de servidores para ativar a funcionalidade em" }, "reply": { - "replyingToBlocked": "Replying to blocked message" + "replyingToBlocked": "Respondendo a uma mensagem bloqueada" } }, "clipsEnhancements": { - "description": "Add more Clip FPS and duration options, custom clip length, RPC tagging and more", + "description": "Adicionar mais opções de FPS e duração de Clipes, comprimento de clipe personalizado, marcação de RPC e mais", "settings": { - "richPresenceTagging": "When should clips be tagged with the current Rich Presence?", + "richPresenceTagging": "Quando os clipes devem ser marcados com a Rich Presence atual?", "richPresenceTaggingOptions": { - "always": "Always", - "whenMatched": "Only when beginning or end of activity name matches", - "never": "Never" + "always": "Sempre", + "whenMatched": "Somente quando o início ou o fim do nome da atividade coincidir", + "never": "Nunca" }, - "enableScreenshotKeybind": "Enable the screenshot keybind feature", + "enableScreenshotKeybind": "Ativar o recurso de teclas de atalho para captura de tela", "enableVoiceOnlyClips": "Enable voice-only clips (audio without video)", "enableAdvancedSignals": "Enable advanced clip signals (auto-clip triggers)", "ignorePlatformRestriction": "Allow Platform Restricted Clipping (may cause save errors)", diff --git a/i18n/pt-BR/vencord.json b/i18n/pt-BR/vencord.json index 025bb8011..5595a3929 100644 --- a/i18n/pt-BR/vencord.json +++ b/i18n/pt-BR/vencord.json @@ -207,76 +207,76 @@ }, "reviewDB": { "settings": { - "authorize": "Authorize with ReviewDB", + "authorize": "Autorizar com ReviewDB", "notifyReviews": { - "description": "Notify about new reviews on startup" + "description": "Notificar sobre novas avaliações na inicialização" }, "showWarning": { - "description": "Display warning to be respectful at the top of the reviews list" + "description": "Exibir aviso para ser respeitoso no topo da lista de avaliações" }, "hideTimestamps": { - "description": "Hide timestamps on reviews" + "description": "Esconder data e hora em avaliações" }, "hideBlockedUsers": { - "description": "Hide reviews from blocked users" + "description": "Esconder avaliações de usuários bloqueados" }, - "manageBlockedUsers": "Manage Blocked Users", - "supportDevelopment": "Support ReviewDB development", + "manageBlockedUsers": "Gerenciar Usuários Bloqueados", + "supportDevelopment": "Suporte ao desenvolvimento do ReviewDB", "website": "ReviewDB website", - "supportServer": "ReviewDB Support Server" + "supportServer": "ReviewDB Servidor de Suporte" }, - "viewReviews": "View Reviews", - "newReviews": "You have new reviews on your profile!", + "viewReviews": "Ver Avaliações", + "newReviews": "Você tem novas avaliações no seu perfil!", "appeal": "Appeal", "ok": "Ok", - "areYouSure": "Are you sure?", - "confirmDelete": "Do you really want to delete this review?", - "delete": "Delete", - "nevermind": "Nevermind", - "mustBeLoggedInDelete": "You must be logged in to delete reviews.", - "confirmReport": "Do you really want to report this review?", - "report": "Report", - "mustBeLoggedInReport": "You must be logged in to report reviews.", - "confirmBlock": "Do you really want to block this user? They will be unable to leave further reviews on your profile. You can unblock users in the plugin settings.", - "block": "Block", - "mustBeLoggedInBlock": "You must be logged in to block users.", - "system": "System", - "blockedUser": "You have blocked this user", - "readMore": "Read more", - "unblockUser": "Unblock user", + "areYouSure": "Você tem certeza?", + "confirmDelete": "Você realmente deseja deletar esta avaliação?", + "delete": "Deletar", + "nevermind": "Deixa pra lá", + "mustBeLoggedInDelete": "Você tem que estar logado para deletar avaliações.", + "confirmReport": "Você realmente deseja reportar está avaliação?", + "report": "Reportar", + "mustBeLoggedInReport": "Você tem que estar logado para reportar avaliações.", + "confirmBlock": "Você realmente quer bloquear esse usuário? Eles não poderão deixar mais avaliações no seu perfil. Você pode desbloquear usuários nas configurações do plugin.", + "block": "Bloquear", + "mustBeLoggedInBlock": "Você tem que estar logado para bloquear usuários.", + "system": "Sistema", + "blockedUser": "Você bloqueou este usuário", + "readMore": "Ler mais", + "unblockUser": "Desbloquear usuário", "failedToFetchBlocks": "Failed to fetch blocks: {error}", - "noBlockedUsers": "No blocked users.", - "blockedUsers": "Blocked Users", - "notLoggedIn": "You are not logged into ReviewDB!" + "noBlockedUsers": "Sem usuários bloqueados.", + "blockedUsers": "Usuários Bloqueados", + "notLoggedIn": "Você não esta logado no ReviewDB!" }, "translate": { "autoTranslateEnabled": { - "title": "Equicord Auto-Translate Enabled", + "title": "Equicord Tradução Automática Ativada", "body": "You just enabled Auto Translate! Any message <0>will automatically be translated before being sent." }, - "disableAutoTranslate": "Disable Auto-Translate", - "gotIt": "Got it", - "dontShowAgain": "Don't show again", + "disableAutoTranslate": "Desativar Tradução Automática", + "gotIt": "Entendi", + "dontShowAgain": "Não mostrar novamente", "openTranslateModal": "Open Translate Modal", - "autoTranslateEnabledLabel": "Auto Translate Enabled", - "translate": "Translate", - "selectLanguage": "Select a language", + "autoTranslateEnabledLabel": "Tradução Automática Ativada", + "translate": "Traduzir", + "selectLanguage": "Selecionar um idioma", "autoTranslate": "Auto Translate", "modalTitle": "Translate" }, "voiceMessages": { - "send": "Send Voice Message", - "missingPermissions": "(Missing Permissions)", - "recordModal": "Record Voice Message", - "uploadFile": "Upload File", + "send": "Enviar Mensagem de Voz", + "missingPermissions": "(Permissões Ausentes)", + "recordModal": "Gravar Mensagem de Voz", + "uploadFile": "Enviar Arquivo", "preview": "Preview", "failedToParse": "Failed to parse selected audio file: {error}", "iosWarning": "Voice Messages have to be OggOpus to be playable on iOS. This file is <0>{type} so it will not be playable on iOS.", "iosFix": "To fix it, first convert it to OggOpus, for example using the <0>convertio web converter", - "sending": "Now sending voice message... Please be patient", - "failedToUpload": "Failed to upload voice message", - "noiseSuppression": "Noise Suppression", - "echoCancellation": "Echo Cancellation" + "sending": "Enviando mensagem de voz... Por favor seja paciente", + "failedToUpload": "Falha ao enviar mensagem de voz", + "noiseSuppression": "Supressão de ruído", + "echoCancellation": "Cancelamento de Eco" }, "showHiddenChannels": { "hiddenChannel": "This is a hidden {type} channel", @@ -333,9 +333,9 @@ "removeMessageTemporary": "Remove Message (Temporary)", "clearMessageLog": "Clear Message Log", "settings": { - "deleteStyle": "The style of deleted messages", - "deleteStyleRedText": "Red text", - "deleteStyleRedOverlay": "Red overlay", + "deleteStyle": "O estilo das mensagens excluídas", + "deleteStyleRedText": "Texto vermelho", + "deleteStyleRedOverlay": "Overlay vermelho", "logDeletes": "Whether to log deleted messages", "collapseDeleted": "Whether to collapse deleted messages, similar to blocked messages", "logEdits": "Whether to log edited messages", @@ -416,13 +416,13 @@ "enterValue": "Enter a value", "selectOption": "Select an option" }, - "activityType": "Activity Type", + "activityType": "Tipo de atividade", "activityTypes": { - "playing": "Playing", + "playing": "Jogando", "streaming": "Streaming", - "listening": "Listening", - "watching": "Watching", - "competing": "Competing" + "listening": "Ouvindo", + "watching": "Assistindo", + "competing": "Competindo" }, "appId": "Application ID", "appName": "Application Name", From 7911dd9a13af0d4c6c59d73e099061961fc377d4 Mon Sep 17 00:00:00 2001 From: M <91066601+mishl-dev@users.noreply.github.com> Date: Mon, 16 Feb 2026 01:00:26 +0600 Subject: [PATCH 2/6] fix(i18n): add missing en-US translations (#777) * New translations equicord.json (Afrikaans) * New translations equicord.json (Arabic) * New translations equicord.json (Portuguese, Brazilian) * New translations vencord.json (Portuguese, Brazilian) * New translations api.json (Czech) * New translations api.json (Danish) * New translations translation.json (Danish) * New translations equicord.json (Czech) * New translations equicord.json (Portuguese, Brazilian) * New translations api.json (Arabic) * New translations translation.json (Czech) * New translations equicord.json (Spanish) * New translations equicord.json (Arabic) * New translations equicord.json (Czech) * New translations equicord.json (Portuguese, Brazilian) * fix(i18n): add missing en-US translations --------- Co-authored-by: thororen <78185467+thororen1234@users.noreply.github.com> Co-authored-by: Mishal <91066601+mishalhossin@users.noreply.github.com> --- i18n/en-US/equicord.json | 1117 ++++++++++++++++- i18n/en-US/vencord.json | 833 +++++++++++- src/plugins/_api/notices.ts | 3 +- src/plugins/_api/serverList.ts | 3 +- src/plugins/_core/noTrack.ts | 5 +- src/plugins/alwaysAnimate/index.ts | 13 +- src/plugins/alwaysExpandRoles/index.ts | 5 +- src/plugins/alwaysTrust/index.tsx | 16 +- src/plugins/arRPC.web/index.tsx | 2 +- .../index.ts | 15 +- src/plugins/betterGifAltText/index.ts | 4 +- src/plugins/betterGifPicker/index.ts | 5 +- src/plugins/betterNotes/index.tsx | 7 +- src/plugins/betterRoleDot/index.ts | 7 +- src/plugins/betterUploadButton/index.ts | 3 +- src/plugins/blurNsfw/index.ts | 7 +- src/plugins/clearURLs/index.ts | 3 +- src/plugins/clientTheme/index.tsx | 3 +- src/plugins/colorSighted/index.ts | 3 +- src/plugins/consoleShortcuts/index.ts | 3 +- src/plugins/crashHandler/index.ts | 21 +- src/plugins/ctrlEnterSend/index.ts | 13 +- src/plugins/customIdle/index.ts | 11 +- src/plugins/devCompanion.dev/index.tsx | 9 +- src/plugins/disableCallIdle/index.ts | 3 +- src/plugins/dontRoundMyTimestamps/index.ts | 3 +- src/plugins/f8break/index.ts | 3 +- .../modals/ClearAliasesConfirmModal.tsx | 7 +- .../components/modals/SetAliasModal.tsx | 11 +- src/plugins/favEmojiFirst/index.tsx | 33 +- src/plugins/fixCodeblockGap/index.ts | 3 +- .../fixSpotifyEmbeds.desktop/index.tsx | 6 +- src/plugins/fixYoutubeEmbeds.desktop/index.ts | 3 +- src/plugins/forceOwnerCrown/index.ts | 3 +- src/plugins/friendInvites/index.ts | 21 +- src/plugins/fullSearchContext/index.tsx | 3 +- src/plugins/fullUserInChatbox/index.tsx | 3 +- src/plugins/gifPaste/index.ts | 3 +- src/plugins/iLoveSpam/index.ts | 3 +- src/plugins/imageFilename/index.ts | 5 +- src/plugins/imageLink/index.ts | 3 +- src/plugins/implicitRelationships/index.ts | 9 +- src/plugins/noDeepLinks.web/index.ts | 3 +- .../noSystemBadge.discordDesktop/index.ts | 3 +- src/plugins/relationshipNotifier/index.ts | 3 +- src/plugins/relationshipNotifier/utils.ts | 11 +- src/plugins/secretRingTone/index.ts | 5 +- src/plugins/shikiCodeblocks.desktop/index.ts | 3 +- .../shikiCodeblocks.desktop/settings.ts | 25 +- .../components/HiddenChannelLockScreen.tsx | 12 +- src/plugins/showHiddenChannels/index.tsx | 27 +- src/plugins/showHiddenThings/index.ts | 9 +- src/plugins/spotifyCrack/index.ts | 7 +- src/plugins/spotifyShareCommands/index.ts | 9 +- src/plugins/startupTimings/index.tsx | 5 +- src/plugins/stickerPaste/index.ts | 3 +- src/plugins/streamerModeOnStream/index.ts | 3 +- src/plugins/superReactionTweaks/index.ts | 9 +- src/plugins/themeAttributes/index.ts | 3 +- src/plugins/unindent/index.ts | 3 +- src/plugins/unlockedAvatarZoom/index.ts | 5 +- src/plugins/userMessagesPronouns/index.ts | 3 +- src/plugins/userMessagesPronouns/settings.ts | 9 +- src/plugins/validReply/index.ts | 3 +- src/plugins/validUser/index.tsx | 3 +- src/plugins/vcDoubleClick/index.ts | 3 +- src/plugins/volumeBooster/index.ts | 5 +- src/plugins/webContextMenus.web/index.ts | 5 +- src/plugins/webKeybinds.web/index.ts | 3 +- src/plugins/webScreenShareFixes.web/index.ts | 3 +- src/plugins/youtubeAdblock.desktop/index.ts | 3 +- 71 files changed, 2215 insertions(+), 209 deletions(-) diff --git a/i18n/en-US/equicord.json b/i18n/en-US/equicord.json index 8f22db55d..7e40312cc 100644 --- a/i18n/en-US/equicord.json +++ b/i18n/en-US/equicord.json @@ -153,6 +153,23 @@ "extensions": "Comma-separated list of file extensions to auto-zip (e.g., .psd,.blend,.exe,.dmg)" } }, + "betterActivities": { + "description": "Shows all activities in the member list and user popout, with options to customize the display", + "settings": { + "memberList": "Show activities in the member list", + "iconSize": "Size of the activity icons", + "specialFirst": "Show special activities first", + "renderGifs": "Render GIFs in activity icons", + "removeGameActivityStatus": "Remove the game activity status indicator", + "userPopout": "Show all activities in user popout", + "hideTooltip": "Hide the tooltip on activity icons", + "allActivitiesStyle": "Style for displaying all activities" + }, + "options": { + "carousel": "Carousel", + "list": "List" + } + }, "betterCommands": { "description": "Enhances the command system with miscellaneous improvements.", "settings": { @@ -554,6 +571,160 @@ "exportLogs": "Export Logs" } }, + "mediaPlaybackSpeed": { + "description": "Control media playback speed for voice messages, videos, and audio attachments", + "settings": { + "defaultVoiceMessageSpeed": "Default playback speed for voice messages", + "defaultVideoSpeed": "Default playback speed for videos", + "defaultAudioSpeed": "Default playback speed for audio files" + } + }, + "messageBurst": { + "description": "Send messages in bursts by merging consecutive messages within a time period", + "settings": { + "timePeriod": "Time period in seconds to merge messages", + "shouldMergeWithAttachment": "Allow merging messages with attachments", + "useSpace": "Use space instead of newline as separator" + } + }, + "messageColors": { + "description": "Render color codes (hex, rgb, hsl) in messages with color preview", + "settings": { + "renderType": "How to render colors in messages", + "renderTypeOptions": { + "textColor": "Change text color", + "blockNearby": "Show color block", + "backgroundColor": "Change background color" + }, + "enableShortHexCodes": "Enable short hex color codes (3 characters)", + "blockView": "Position of the color block", + "blockViewOptions": { + "rightSide": "Right side of text", + "leftSide": "Left side of text", + "bothSides": "Both sides of text" + } + } + }, + "messageFetchTimer": { + "description": "Show message fetch times in the chat bar", + "settings": { + "showIcon": "Show the fetch timer icon", + "showMs": "Show milliseconds instead of seconds", + "iconColor": "Color of the fetch timer icon" + } + }, + "messageLinkTooltip": { + "description": "Show message previews when hovering over message links, replies, and forwarded messages", + "settings": { + "onLink": "Show tooltip when hovering over message links", + "onReply": "Show tooltip when hovering over message replies", + "onForward": "Show tooltip when hovering over forwarded messages", + "display": "Display style for message preview" + } + }, + "messageNotifier": { + "description": "Get notified when specific users send messages", + "settings": { + "users": "User IDs to get notifications for (comma-separated)" + } + }, + "messagePeek": { + "description": "Peek at the last message in DM channels without opening them" + }, + "messageTranslate": { + "description": "Automatically translate messages to your preferred language", + "settings": { + "targetLanguage": "Target language for translation (e.g., en, es, fr)", + "confidenceRequirement": "Minimum confidence level for translation (0-1)" + } + }, + "micLoopbackTester": { + "description": "Test your microphone with a loopback button in the user area" + }, + "moreCommands": { + "description": "Additional slash commands including system info, dice rolls, coin flips, and more", + "settings": { + "addFreakyEnding": "Add 👅 or ❤️ at the end of freaky command", + "uwuEveryMessage": "Make every single message uwuified", + "uwuEverything": "Makes all text uwuified - really bad idea" + } + }, + "moreKaomoji": { + "description": "More kaomoji slash commands for expressing emotions" + }, + "moreStickers": { + "description": "Add more sticker packs from external sources", + "settings": { + "promptToUpload": "Prompt before uploading stickers", + "packs": "Manage sticker packs" + } + }, + "moreUserTags": { + "description": "Show additional user tags based on permissions and roles", + "settings": { + "dontShowForBots": "Don't show tags for bot users", + "dontShowBotTag": "Hide the default BOT tag", + "showWebhookTagFully": "Show webhook tags fully", + "tagSettings": "Configure individual tag settings" + } + }, + "moyai": { + "description": "Play the moyai sound effect when 🗿 emoji is used", + "settings": { + "volume": "Volume of the moyai sound", + "quality": "Quality of the moyai sound", + "qualityOptions": { + "normal": "Normal", + "hd": "HD" + }, + "triggerWhenUnfocused": "Trigger sound even when window is not focused", + "ignoreBots": "Ignore messages from bots", + "ignoreBlocked": "Ignore messages from blocked users" + } + }, + "musicControls": { + "description": "Show music player controls for Spotify, Tidal, and YouTube Music", + "settings": { + "hoverControls": "Show controls on hover only", + "showSpotifyControls": "Show Spotify controls", + "showSpotifyLyrics": "Show Spotify lyrics", + "showTidalControls": "Show Tidal controls", + "showTidalLyrics": "Show Tidal lyrics", + "showYoutubeMusicControls": "Show YouTube Music controls", + "LyricsPosition": "Position of lyrics relative to player", + "LyricsProvider": "Source for lyrics", + "TranslateTo": "Translate lyrics to", + "LyricsConversion": "Auto-translate or romanize lyrics", + "FallbackProvider": "Use fallback provider when primary fails", + "ShowFailedToasts": "Show error toasts when lyrics fail to load", + "LyricDelay": "Lyric delay offset", + "useSpotifyUris": "Open Spotify URIs instead of URLs", + "previousButtonRestartsTrack": "Restart track when pressing previous button", + "YoutubeMusicApiUrl": "Custom YouTube Music API URL" + } + }, + "neverPausePreviews": { + "description": "Never pause video previews when switching channels or unfocusing", + "warning": "This may increase resource usage and data consumption" + }, + "newPluginsManager": { + "description": "Manage and discover new plugins with the plugin manager" + }, + "noAppsAllowed": { + "description": "Blocks apps/categories from showing in the app launcher" + }, + "noBulletPoints": { + "description": "Remove bullet points from messages by escaping them" + }, + "noModalAnimation": { + "description": "Disable modal animations for faster UI interactions" + }, + "noNitroUpsell": { + "description": "Removes Nitro upsells by overriding your premium type" + }, + "noRPC": { + "description": "Disables Discord's Rich Presence (RPC) feature" + }, "friendCodes": { "settings": { "autoCopy": "Automatically copy friend code to clipboard when it changes", @@ -1326,5 +1497,949 @@ "enableAndRestart": "Enable the plugin and restart your client to scan a login QR code", "scanQrCode": "Scan QR Code" } + }, + "partyMode": { + "description": "Enable party mode effects with confetti and screen shake", + "settings": { + "superIntensePartyMode": "Party mode intensity level", + "intensityOptions": { + "normal": "Normal - Subtle effects", + "better": "Better - More confetti", + "projectX": "Project X - Maximum intensity" + } + } + }, + "pinIcon": { + "description": "Adds a pin icon to pinned messages" + }, + "pingNotifications": { + "description": "Custom notification settings for pings, DMs, and friend messages", + "settings": { + "friends": "Notify when friends send messages in servers", + "mentions": "Notify when mentioned (@username)", + "dms": "Notify for DM and group DM messages", + "showInActive": "Show notifications even when channel is active", + "ignoreMuted": "Ignore muted channels, guilds, and blocked users" + } + }, + "platformSpoofer": { + "description": "Spoof your platform status (mobile, desktop, web, console)", + "settings": { + "platform": "Platform to spoof as", + "platformOptions": { + "desktop": "Desktop (Discord Client)", + "web": "Web (Discord Web)", + "android": "Android", + "ios": "iOS", + "xbox": "Xbox", + "playstation": "PlayStation" + } + }, + "warning": "Changing platform may affect certain features and how others see your status." + }, + "polishWording": { + "description": "Automatically improve message text with better grammar, capitalization, and punctuation", + "settings": { + "quickDisable": "Quick disable - temporarily disable all corrections", + "blockedWords": "Comma-separated list of words to exclude from capitalization fixes", + "fixApostrophes": "Fix missing apostrophes in contractions (e.g., 'dont' → 'don't')", + "expandContractions": "Expand contractions (e.g., 'don't' → 'do not')", + "fixCapitalization": "Fix sentence capitalization", + "fixPunctuation": "Add periods to end of sentences", + "fixPunctuationFrequency": "Frequency of auto-adding periods (0-100%)" + } + }, + "profileSets": { + "description": "Save and manage profile customization presets", + "settings": { + "avatarSize": "Avatar size in preset manager" + } + }, + "questify": { + "description": "Enhanced quest management with auto-completion, notifications, and custom styling", + "settings": { + "questButtonDisplay": "When to show quest button in server list", + "questButtonUnclaimed": "Show badge/pill for unclaimed quests", + "questButtonBadgeColor": "Custom badge color", + "questButtonLeftClickAction": "Left-click action", + "questButtonMiddleClickAction": "Middle-click action", + "questButtonRightClickAction": "Right-click action", + "completeVideoQuestsInBackground": "Auto-complete video quests in background", + "completeGameQuestsInBackground": "Auto-complete game quests in background (desktop only)", + "completeAchievementQuestsInBackground": "Auto-complete achievement quests in background (desktop only)", + "notifyOnQuestComplete": "Show notification when quest completes", + "makeMobileQuestsDesktopCompatible": "Make mobile-only video quests completable on desktop", + "reorderQuests": "Custom quest order (comma-separated: unclaimed, claimed, expired, ignored)", + "unclaimedSubsort": "Sort unclaimed quests by", + "claimedSubsort": "Sort claimed quests by", + "ignoredSubsort": "Sort ignored quests by", + "expiredSubsort": "Sort expired quests by", + "restyleQuestsUnclaimed": "Custom color for unclaimed quests", + "restyleQuestsClaimed": "Custom color for claimed quests", + "restyleQuestsIgnored": "Custom color for ignored quests", + "restyleQuestsExpired": "Custom color for expired quests", + "restyleQuestsGradient": "Gradient style for restyled quests", + "restyleQuestsPreload": "Preload quest assets for better styling", + "disableQuestsEverything": "Hide all quest-related elements", + "disableQuestsDiscoveryTab": "Hide Quests tab in Discovery", + "disableQuestsDirectMessagesTab": "Hide Quests tab in DMs", + "disableQuestsPopupAboveAccountPanel": "Hide quest progress popup", + "disableQuestsBadgeOnUserProfiles": "Hide quest badge on profiles", + "disableQuestsPageSponsoredBanner": "Hide sponsored quest banner", + "disableQuestsGiftInventoryRelocationNotice": "Hide gift inventory notice", + "disableQuestsFetchingQuests": "Prevent fetching quest data", + "disableFriendsListActiveNowPromotion": "Hide Active Now promotion in friends list", + "disableMembersListActivelyPlayingIcon": "Hide actively playing icon in member list" + }, + "sortOptions": { + "recentAsc": "Recent (Oldest first)", + "recentDesc": "Recent (Newest first)", + "expiringAsc": "Expiring (Soonest first)", + "expiringDesc": "Expiring (Latest first)", + "claimedAsc": "Claimed (Oldest first)", + "claimedDesc": "Claimed (Newest first)" + }, + "gradientOptions": { + "default": "Default", + "intense": "Intense", + "black": "Black", + "hide": "Hide" + }, + "buttonActions": { + "openQuests": "Open Quests page", + "pluginSettings": "Open plugin settings", + "contextMenu": "Show context menu" + } + }, + "questionMarkReplacement": { + "description": "Replace question marks with custom text/emoji when message contains only question marks", + "settings": { + "replace": "Text or emoji to replace '?' with" + } + }, + "quickThemeSwitcher": { + "description": "Quickly cycle through themes using keyboard shortcuts", + "settings": { + "includeLocal": "Include local themes in the cycle", + "includeOnline": "Include online themes in the cycle", + "sortOrder": "Sort order for the theme list", + "sortOptions": { + "az": "A-Z (Alphabetical)", + "za": "Z-A (Reverse Alphabetical)", + "recent": "Recently Used" + }, + "autoRefresh": "Automatically refresh theme list when changes are detected", + "showNotifications": "Show notifications when themes are added or removed" + } + }, + "quoter": { + "description": "Create stylized quote images from messages", + "settings": { + "quoteFont": "Font for quote images", + "watermark": "Watermark text", + "grayscale": "Apply grayscale filter", + "showWatermark": "Show watermark on quotes", + "saveAsGif": "Save as GIF instead of PNG" + } + }, + "randomVoice": { + "description": "Join random voice channels based on customizable filters", + "settings": { + "UserAmount": "Target user count in channel", + "UserAmountOperation": "User count comparison operator", + "spacesLeft": "Minimum spaces left in channel", + "spacesLeftOperation": "Spaces left comparison operator", + "vcLimit": "Voice channel user limit", + "vcLimitOperation": "Channel limit comparison operator", + "Servers": "Server IDs to include (comma-separated)", + "autoNavigate": "Automatically navigate to voice channel", + "autoCamera": "Automatically turn on camera", + "autoStream": "Automatically start streaming", + "selfMute": "Auto-mute when joining", + "selfDeafen": "Auto-deafen when joining", + "leaveEmpty": "Leave when channel becomes empty", + "avoidStages": "Avoid stage channels", + "avoidAfk": "Avoid AFK channels", + "video": "Look for channels with video enabled", + "stream": "Look for channels with streams", + "mute": "Look for muted users", + "deafen": "Look for deafened users", + "includeStates": "Include users matching state filters", + "avoidStates": "Avoid users matching state filters" + }, + "operations": { + "moreThan": "More than", + "lessThan": "Less than", + "equalTo": "Equal to" + } + }, + "recentDMSwitcher": { + "description": "Quickly switch between recent DMs using Ctrl+Tab (Alt+Tab style)", + "settings": { + "visualStyle": "Visual indicator style while cycling", + "overlayMode": "Overlay content mode", + "amountOfUsers": "Number of users to track", + "overlayRowLength": "Number of DMs to show in overlay row", + "overlayShowAvatars": "Show avatars in overlay", + "toastDurationMs": "Toast notification duration (ms)", + "clearRdms": "Clear RDMS history" + }, + "visualStyles": { + "overlay": "Overlay (Alt+Tab style)", + "toast": "Toast notification", + "off": "No visual indicator" + }, + "overlayModes": { + "row": "Row of recent DMs", + "current": "Current DM only" + } + }, + "remix": { + "description": "Remix images directly in Discord with a built-in editor" + }, + "repeatMessages": { + "description": "Repeat messages with optional reply (Shift+Click to reply)" + }, + "replyPingControl": { + "description": "Control whether you get pinged when someone replies to your messages", + "settings": { + "alwaysPingOnReply": "Always get pinged when someone replies to your messages", + "replyPingWhitelist": "Comma-separated list of User IDs to always receive reply pings from" + } + }, + "richMagnetLinks": { + "description": "Display rich previews for magnet links with filename extraction" + }, + "rpcEditor": { + "description": "Edit and customize your Rich Presence (RPC) display for any application", + "settings": { + "replacedAppIds": "Manage application-specific RPC overrides" + }, + "placeholders": { + "name": "Application name", + "details": "Current details text", + "state": "Current state text", + "largeImage": "Large image URL", + "largeText": "Large image tooltip text", + "smallImage": "Small image URL", + "smallText": "Small image tooltip text" + } + }, + "rpcStats": { + "description": "Display custom statistics in your Rich Presence (messages sent, Last.fm top album)", + "settings": { + "assetURL": "Custom image URL for RPC (default: your avatar)", + "RPCTitle": "Title text for the RPC", + "statDisplay": "Statistic to display", + "lastFMApiKey": "Last.fm API key (get from last.fm/api)", + "lastFMUsername": "Last.fm username", + "albumCoverImage": "Use album cover as RPC image (Last.fm mode)", + "lastFMStatFormat": "Format for Last.fm stat ($album, $artist)" + }, + "statOptions": { + "messagesToday": "Messages sent today", + "messagesAllTime": "Messages sent all time", + "mostListenedAlbum": "Most listened album this week (Last.fm)" + } + }, + "saveFavoriteGIFs": { + "description": "Save all favorite GIF urls to a text file", + "settings": { + "showToolboxButton": "Show 'Save Favorite GIFs' button in Equicord Toolbox (Requires Reload)" + } + }, + "scheduledMessages": { + "description": "Schedule messages to send later", + "settings": { + "maxMessagesPerMinute": "Max scheduled messages per channel that can fire in the same minute", + "checkIntervalSeconds": "How often to check for messages to send (seconds)", + "showNotifications": "Show toast notifications when messages are sent", + "showPhantomMessages": "Show scheduled messages as phantom messages in chat" + } + }, + "screenRecorder": { + "description": "Screen recording functionality for Equibop" + }, + "searchFix": { + "description": "Fix search functionality by working around Discord's 5000 message offset limit" + }, + "sekaiStickers": { + "description": "Sekai stickers integration", + "settings": { + "AutoCloseModal": "Auto close modal when done" + } + }, + "selfForward": { + "description": "Forward messages to yourself" + }, + "serverSearch": { + "description": "Enhanced server search with quick switcher integration" + }, + "showBadgesInChat": { + "description": "Show user badges in chat messages", + "settings": { + "showEquicordDonor": "Enable to show Equicord Donor badges in chat", + "EquicordDonorPosition": "The position of the Equicord Donor badges", + "showEquicordContributor": "Enable to show Equicord Contributor badges in chat", + "EquicordContributorPosition": "The position of the Equicord Contributor badge", + "showVencordDonor": "Enable to show Vencord donor badges in chat", + "VencordDonorPosition": "The position of the Vencord Donor badges", + "showVencordContributor": "Enable to show Vencord contributor badges in chat", + "VencordContributorPosition": "The position of the Vencord Contributor badge", + "showDiscordProfile": "Enable to show Discord profile badges in chat", + "DiscordProfilePosition": "The position of the Discord profile badges", + "showDiscordNitro": "Enable to show Discord Nitro badges in chat", + "DiscordNitroPosition": "The position of the Discord Nitro badge", + "badgeSettings": "Setup badge layout and visibility" + } + }, + "showMessageEmbeds": { + "description": "Show message embeds with options to add or remove embeds from messages" + }, + "showResourceChannels": { + "description": "Show resource channels that are normally hidden" + }, + "showSongName": { + "description": "Show currently playing song name in status" + }, + "sidebarChat": { + "description": "Sidebar chat interface for viewing multiple channels", + "settings": { + "persistSidebar": "Keep the sidebar chat open across Discord restarts", + "patchCommunity": "Patch things like the Channel Browser or Members tab that community servers have" + } + }, + "signature": { + "description": "Add signatures to messages", + "settings": { + "name": "The signature that will be added to the end of your messages", + "textHeader": "What header to preface text with", + "showIcon": "Show an icon for toggling the plugin in the chat bar", + "contextMenu": "Add option to toggle the functionality in the chat input context menu", + "isEnabled": "Toggle functionality" + } + }, + "snowfall": { + "description": "Adds a christmas-y snowfall effect on top of Discord's interface", + "settings": { + "typeOfSnow": "Change the type of snow displayed (Affects performance)", + "maxSize": "Maximum snowflake size", + "speed": "Snowfall speed (higher = faster fall)", + "flakesPerSecond": "Snowflakes per second (higher = denser snowfall)" + } + }, + "soggy": { + "description": "Soggy plugin with clickable image and sound effects", + "settings": { + "songVolume": "Volume of the song. 0 to disable", + "boopVolume": "Volume of the boop sound", + "tooltipText": "The text shown when hovering over the button", + "imageLink": "URL for the image (button and modal)", + "songLink": "URL for the song to play", + "boopLink": "URL for the boop sound" + } + }, + "songLink": { + "description": "Song.link integration for sharing music across platforms", + "settings": { + "servicesSettings": "Settings for services", + "userCountry": "Country used for lookup (Two letter country code)" + } + }, + "soundBoardLogger": { + "description": "Log soundboard usage in voice channels", + "settings": { + "SavedIds": "The amount of soundboard ids you want to save at a time (0 lets you save infinite)", + "FileType": "The format that you want to save your file", + "soundVolume": "How loud the toggle sound is (0 to disable)" + } + }, + "splitLargeMessages": { + "description": "Split large messages into chunks automatically", + "settings": { + "maxLength": "Maximum length of a message before it is split. Set to 0 to automatically detect", + "disableFileConversion": "If true, disables file conversion for large messages", + "sendDelay": "Delay between each chunk in seconds", + "hardSplit": "If true, splits on the last character instead of the last space/newline", + "splitInSlowmode": "Should messages be split if the channel has slowmode enabled?", + "slowmodeMax": "Maximum slowmode time if splitting in slowmode" + } + }, + "spotifyActivityToggle": { + "description": "Toggle Spotify activity sharing on and off", + "settings": { + "location": "Where to show the Spotify toggle button" + } + }, + "statsfmPresence": { + "description": "Stats.fm presence integration", + "settings": { + "username": "Stats.fm username", + "shareUsername": "Show link to stats.fm profile", + "shareSong": "Show link to song on stats.fm", + "hideWithSpotify": "Hide stats.fm presence if spotify is running", + "hideWithExternalRPC": "Hides stats.fm presence if an external RPC is running", + "statusName": "Custom status text", + "nameFormat": "Show name of song and artist in status name", + "useListeningStatus": "Show 'Listening to' status instead of 'Playing'", + "missingArt": "When albums or albums art is missing", + "showStatsFmLogo": "Show the Stats.fm next to the albums cover", + "alwaysHideArt": "Disable downloading album art" + } + }, + "statusPresets": { + "description": "Save and load status presets" + }, + "statusWhileActive": { + "description": "Automatically set status while active in voice channels", + "settings": { + "statusToSet": "Status to set while in a voice channel" + } + }, + "steamStatusSync": { + "description": "Sync Steam status with Discord status", + "settings": { + "onlineStatus": "Steam status when on Online", + "idleStatus": "Steam status when on Idle", + "dndStatus": "Steam status when on Do Not Disturb", + "invisibleStatus": "Steam status when on Invisible", + "goInvisibleIfActivityIsHidden": "Always go invisible if hiding game activity on Discord" + } + }, + "stickerBlocker": { + "description": "Block specific stickers from appearing", + "settings": { + "showGif": "Whether to show a snazzy cat gif", + "showMessage": "Whether to show a message detailing which id was blocked", + "showButton": "Whether to show a button to unblock the gif", + "blockedStickers": "The list of blocked sticker IDs (don't edit unless you know what you're doing)" + } + }, + "streamingCodecDisabler": { + "description": "Disable streaming codec for Discord streaming", + "settings": { + "disableAv1Codec": "Make Discord not consider using AV1 for streaming", + "disableH265Codec": "Make Discord not consider using H265 for streaming", + "disableH264Codec": "Make Discord not consider using H264 for streaming", + "disableVP8Codec": "Make Discord not consider using VP8 for streaming", + "disableVP9Codec": "Make Discord not consider using VP9 for streaming" + } + }, + "talkInReverse": { + "description": "Adds a chat bar button to reverse your messages before sending" + }, + "themeLibrary": { + "description": "Browse and manage themes from the Equicord theme library", + "toolbox": { + "openThemeLibrary": "Open Theme Library" + } + }, + "tidalEmbeds": { + "description": "Embeds Tidal music links with a custom player" + }, + "tiktokTTS": { + "description": "Play TikTok text-to-speech for messages", + "settings": { + "volume": "Playback volume" + }, + "contextMenu": { + "playTikTokTTS": "Play TikTok TTS" + } + }, + "timezones": { + "description": "Display user timezones in profiles and message headers", + "settings": { + "showOwnTimezone": "Show your own timezone in profiles and message headers", + "24hTime": "Show time in 24h format", + "showTimezoneInfo": "Show timezone info next to time", + "showMessageHeaderTime": "Show time in message headers", + "showProfileTime": "Show time in profiles", + "useDatabase": "Enable database for getting user timezones", + "preferDatabaseOverLocal": "Prefer database over local storage for timezones", + "databaseUrl": "Database URL for timezone storage", + "setDatabaseTimezone": "Set your timezone on the database", + "resetDatabaseTimezone": "Reset your timezone on the database" + }, + "contextMenu": { + "setLocalTimezone": "Set Local Timezone" + }, + "toolbox": { + "setDatabaseTimezone": "Set Database Timezone", + "refreshDatabaseTimezones": "Refresh Database Timezones" + }, + "toasts": { + "refreshed": "Timezones refreshed successfully!", + "failed": "Timezones Failed to refresh!" + } + }, + "title": { + "description": "Change Discord's window title", + "settings": { + "title": "Window title prefix" + } + }, + "toastNotifications": { + "description": "Show toast notifications for messages and events", + "settings": { + "position": "The position of the toast notification", + "timeout": "Time in seconds notifications will be shown for", + "opacity": "Opacity of the notification", + "maxNotifications": "Maximum number of notifications displayed at once", + "determineServerNotifications": "Automatically determine what server notifications to show based on your channel/guild settings", + "disableInStreamerMode": "Disable notifications while in streamer mode", + "renderImages": "Render images in notifications", + "directMessages": "Show notifications for direct messages", + "groupMessages": "Show notifications for group messages", + "friendServerNotifications": "Show notifications when friends send messages in servers they share with you", + "friendActivity": "Show notifications for adding someone or receiving a friend request", + "streamingTreatment": "How to treat notifications while sharing your screen", + "notifyFor": "Create a list of channel ids to receive notifications from (separate with commas)", + "ignoreUsers": "Create a list of user ids to ignore all their notifications from (separate with commas)", + "exampleButton": "Show an example toast notification" + }, + "positionOptions": { + "bottomLeft": "Bottom Left", + "topLeft": "Top Left", + "topRight": "Top Right", + "bottomRight": "Bottom Right" + }, + "streamingOptions": { + "normal": "Normal - Show the notification as normal", + "noContent": "No Content - Hide the notification body", + "ignore": "Ignore - Don't show the notification at all" + } + }, + "toggleVideoBind": { + "description": "Adds a keybind to toggle your video/webcam in voice chat", + "settings": { + "keyBind": "The key to toggle webcam when pressed", + "reqCtrl": "Require control to be held", + "reqShift": "Require shift to be held", + "reqAlt": "Require alt to be held" + } + }, + "toneIndicators": { + "description": "Adds tone indicators (sarcasm, joking, etc.) to messages", + "settings": { + "prefix": "Prefix character(s) for tone indicators", + "customIndicators": "Custom tone indicators (format: jk=Joking; srs=Serious)", + "maxIndicators": "Maximum number of tone indicators to show per message" + } + }, + "tosuRPC": { + "description": "Rich presence integration for osu! via tosu" + }, + "translatePlus": { + "description": "Adds a translate button to messages with a better UI", + "contextMenu": { + "translate": "Translate" + }, + "popover": { + "translate": "Translate" + } + }, + "unitConverter": { + "description": "Convert units in messages (imperial/metric)", + "settings": { + "myUnits": "The units you use and want things converted to" + }, + "unitOptions": { + "imperial": "Imperial", + "metric": "Metric" + }, + "popover": { + "convertUnits": "Convert Units" + } + }, + "universalMention": { + "description": "Mention users from any server using a universal format", + "settings": { + "globalMention": "Mention users from any server, not just the current one", + "onlyDMUsers": "Only show users you've had DMs with" + }, + "warning": "Using Global Mention can cause performance issues and show an absurd amount of users in the autocomplete." + }, + "unlimitedAccounts": { + "description": "Removes the 5 account limit for Discord's account switcher", + "settings": { + "maxAccounts": "Number of accounts that can be added, or 0 for no limit" + } + }, + "unreadBadgeCount": { + "description": "Show unread message count badges on channels", + "settings": { + "showOnMutedChannels": "Show unread count on muted channels", + "notificationCountLimit": "Limit notification count to 99+" + } + }, + "urlHighlighter": { + "description": "Highlight specific URLs in messages with custom colors", + "settings": { + "patterns": "URL patterns to highlight using glob patterns", + "boldUrls": "Make highlighted URLs bold", + "highlightEmbeds": "Also highlight URLs in embed content" + }, + "ui": { + "urlPatterns": "URL Patterns", + "patternPlaceholder": "*.example.com", + "addNew": "Add New" + } + }, + "userpfp": { + "description": "Use custom profile pictures from UserPFP database or set your own", + "settings": { + "overrideServerAvatars": "Override server avatars with custom avatars or the default user avatar if no custom avatar is set", + "preferNitro": "Which avatar to use if both default animated (Nitro) pfp and UserPFP avatars are present", + "databaseSource": "URL to load database from" + }, + "avatarOptions": { + "userpfp": "UserPFP", + "nitro": "Nitro" + }, + "notice": "Using the set avatar feature is local only meaning only you see it change.", + "contextMenu": { + "setAvatar": "Set Avatar" + }, + "buttons": { + "joinServer": "Join UserPFP Server", + "support": "Support UserPFP here" + } + }, + "vcNarratorCustom": { + "description": "Custom voice channel narrator with TTS for user joins/leaves and state changes", + "settings": { + "customVoice": "Narrator voice", + "volume": "Narrator Volume", + "rate": "Narrator Speed", + "sayOwnName": "Say own name", + "ignoreSelf": "Ignore yourself for all events", + "latinOnly": "Strip non latin characters from names before saying them", + "joinMessage": "Placeholders: {{USER}}, {{DISPLAY_NAME}}, {{NICKNAME}}, {{CHANNEL}}", + "leaveMessage": "Leave Message", + "moveMessage": "Move Message", + "announceOthersMute": "Announce when other users mute/unmute in your current VC", + "announceOthersDeafen": "Announce when other users deafen/undeafen in your current VC", + "announceOthersStream": "Announce when other users start/stop streaming in your current VC", + "announceSelfStream": "Announce when you start/stop streaming", + "stateChangeCooldownMs": "State-change announce cooldown (ms)", + "userVoiceMap": "Per-user voice overrides (format: userId:voiceId,userId2:voiceId2). Right-click users to set.", + "stateChangeFilterMode": "Filter which users trigger state-change announcements", + "stateChangeFilterList": "Comma-separated user IDs for whitelist/blacklist. Right-click users to add/remove." + }, + "filterOptions": { + "off": "Off", + "whitelist": "Whitelist (only announce listed users)", + "blacklist": "Blacklist (announce everyone except listed)" + }, + "contextMenu": { + "vcNarrator": "VC Narrator", + "voice": "Voice", + "stateFilter": "State-change filter" + }, + "troubleshooting": { + "title": "Troubleshooting", + "clearCache": "Clear cache", + "refreshSize": "Refresh size", + "cacheInfo": "Cache", + "lastApiCall": "Last API call" + }, + "preview": { + "title": "Preview Sounds", + "playing": "playing...", + "subtitle": "Uses your selected narrator voice" + }, + "modal": { + "title": "VC Narrator Voice", + "selectVoice": "Select a voice", + "previewHint": "Preview how this voice sounds with their name:", + "cancel": "Cancel", + "save": "Save" + } + }, + "vcPanelSettings": { + "description": "Customize the voice channel panel with additional settings", + "settings": { + "uncollapseSettingsByDefault": "Automatically uncollapse voice settings by default", + "outputVolume": "Show an output volume slider", + "inputVolume": "Show an input volume slider", + "outputDevice": "Show an output device selector", + "inputDevice": "Show an input device selector", + "camera": "Show a camera selector", + "showOutputVolumeHeader": "Show header above output volume slider", + "showInputVolumeHeader": "Show header above input volume slider", + "showOutputDeviceHeader": "Show header above output device selector", + "showInputDeviceHeader": "Show header above input device selector", + "showVideoDeviceHeader": "Show header above camera selector" + }, + "ui": { + "settings": "Settings", + "hide": "Hide", + "outputVolume": "Output volume", + "inputVolume": "Input volume", + "outputDevice": "Output device", + "inputDevice": "Input device", + "camera": "Camera" + } + }, + "viewRawVariant": { + "description": "View raw JSON data for messages, users, channels, and guilds", + "contextMenu": { + "viewRaw": "View Raw" + }, + "modal": { + "title": "View Raw {type}", + "content": "Content", + "data": "Data" + } + }, + "voiceButtons": { + "description": "Adds quick action buttons (chat, mute, deafen) to voice channel users", + "settings": { + "showChatButton": "Show chat button", + "showMuteButton": "Show mute button", + "showDeafenButton": "Show deafen button" + } + }, + "voiceChannelLog": { + "description": "Log voice channel join/leave/move events", + "settings": { + "mode": "How to show the voice channel log", + "voiceChannelChatSelf": "Log your own voice channel events in the voice channels", + "voiceChannelChatSilent": "Join/leave/move messages in voice channel chats will be silent", + "voiceChannelChatSilentSelf": "Join/leave/move messages in voice channel chats will be silent if you are in the voice channel", + "ignoreBlockedUsers": "Do not log blocked users" + }, + "modeOptions": { + "logMenu": "Log menu", + "logToChat": "Log to associated chat directly", + "both": "Log to chat and log menu" + }, + "contextMenu": { + "viewChannelLogs": "View Channel Logs" + } + }, + "voiceChatUtils": { + "description": "Adds voice channel moderation tools (mute all, deafen all, move all, disconnect all)", + "settings": { + "waitAfter": "Amount of API actions to perform before waiting (to avoid rate limits)", + "waitSeconds": "Time to wait between each action (in seconds)" + }, + "contextMenu": { + "voiceTools": "Voice Tools", + "disconnectAll": "Disconnect all", + "muteAll": "Mute all", + "unmuteAll": "Unmute all", + "deafenAll": "Deafen all", + "undeafenAll": "Undeafen all", + "moveAll": "Move all" + } + }, + "voiceJoinMessages": { + "description": "Receive notifications when friends join voice channels", + "settings": { + "friendDirectMessages": "Receive notifications in your friends' DMs when they join a voice channel", + "friendDirectMessagesShowMembers": "Show a list of other members in the voice channel when receiving a DM notification", + "friendDirectMessagesShowMemberCount": "Show the count of other members in the voice channel when receiving a DM notification", + "friendDirectMessagesSelf": "Receive notifications in your friends' DMs even if you are in the same voice channel as them", + "friendDirectMessagesSilent": "Join messages in your friends DMs will be silent", + "allowedFriends": "Comma or space separated list of friends' user IDs you want to receive join messages from", + "ignoreBlockedUsers": "Do not send messages about blocked users joining/leaving/moving voice channels" + } + }, + "voiceMessageTranscriber": { + "description": "Transcribe voice messages using AI (Whisper)", + "settings": { + "selectedModel": "Model size", + "quantized": "Use quantized model (smaller size, slightly lower accuracy)", + "delete": "Delete all cached files" + }, + "modelOptions": { + "tiny": "Tiny (Fastest, lowest accuracy)", + "base": "Base (Recommended)", + "small": "Small", + "medium": "Medium (Slowest, best accuracy)" + }, + "modal": { + "transcriptionOptions": "Transcription Options", + "audioLanguage": "Audio Language", + "autoDetect": "Auto Detect", + "action": "Action", + "transcribe": "Transcribe", + "translateToEnglish": "Translate to English", + "start": "Start", + "transcription": "Transcription", + "initializing": "Initializing...", + "downloadingAudio": "Downloading Audio...", + "processingAudio": "Processing Audio...", + "loadingModel": "Loading Model...", + "transcribing": "Transcribing...", + "inProgress": "Transcribing in progress...", + "showTimestamps": "Show Timestamps", + "copyToClipboard": "Copy to Clipboard", + "copied": "Copied!", + "error": "Error", + "retry": "Retry" + } + }, + "voiceRejoin": { + "description": "Automatically rejoin voice channels after connection drops", + "settings": { + "rejoinDelay": "Set Delay before rejoining voice channel", + "rejoinTimeout": "Don't attempt to rejoin after this many seconds have passed since disconnecting", + "preventReconnectIfCallEnded": "Do not reconnect if the call has ended or the voice channel is empty or does not exist", + "applyOnlyToDms": "Only apply to DMs" + }, + "preventionOptions": { + "none": "None", + "dms": "DMs only", + "servers": "Servers only", + "both": "DMs and Servers" + } + }, + "waitForSlot": { + "description": "Queue for full voice channels and get notified when a slot opens", + "settings": { + "autoJoin": "Join the channel immediately instead of showing a notice", + "notificationSound": "Play a sound when a slot becomes available" + }, + "contextMenu": { + "joinQueue": "Join Queue", + "leaveQueue": "Leave Queue" + }, + "notices": { + "channelFull": "Voice channel {channel} is full. Wait for a slot?", + "slotAvailable": "Hey, someone just left #{channel} and there's a spot for you now!", + "wait": "Wait", + "join": "Join" + } + }, + "wallpaperFree": { + "description": "Set custom wallpapers for channels, users, or globally", + "settings": { + "globalDefault": "Set a global default wallpaper for all channels", + "stylingTips": "Styling tips" + }, + "contextMenu": { + "setWallpaper": "Set Wallpaper", + "removeWallpaper": "Remove Wallpaper" + } + }, + "webpackTarball": { + "description": "Export Discord's webpack modules as a tarball for analysis", + "settings": { + "patched": "Include patched modules" + }, + "toolbox": { + "webpackTarball": "Webpack Tarball" + }, + "modal": { + "title": "Webpack Tarball", + "lazyChunks": "Lazy chunks", + "loaded": "Loaded", + "errors": "errors", + "loadAll": "Load all", + "loading": "Loading", + "loadedStatus": "Loaded", + "create": "Create" + } + }, + "whitelistedEmojis": { + "description": "Whitelist specific emojis and hide all others from the emoji picker", + "settings": { + "defaultEmojis": "Hide default emojis", + "serverEmojis": "Hide server emojis", + "disableToasts": "Disable toasts", + "whitelistedEmojis": "Whitelisted Emojis", + "exportEmojis": "Export Emojis", + "importEmojis": "Import Emojis", + "resetEmojis": "Reset Emojis" + }, + "contextMenu": { + "addToWhitelist": "Add to Whitelist", + "removeFromWhitelist": "Remove from Whitelist", + "addAllGuildEmojis": "Add All Guild Emojis", + "removeAllGuildEmojis": "Remove All Guild Emojis" + }, + "alerts": { + "importConfirmTitle": "Are you sure?", + "importConfirmBody": "This will overwrite your current whitelist.", + "resetConfirmTitle": "Are you sure?", + "resetConfirmBody": "This will remove all emojis from your whitelist." + }, + "ui": { + "defaultEmojis": "Default Emojis", + "guildEmojis": "{guild} Emojis", + "removeAll": "Remove All", + "noEmojis": "No emojis in the whitelist." + }, + "toasts": { + "added": "Added \"{name}\" to the list", + "alreadyInList": "\"{name}\" is already in the list", + "removed": "Removed \"{name}\" from the list", + "notInList": "\"{name}\" is not in the list", + "addedBulk": "Added {count} emojis to the list, {skipped} already in the list", + "removedBulk": "Removed {count} emojis from the list", + "imported": "Successfully imported emojis", + "importFailed": "Failed to import emojis: {error}", + "exported": "Successfully exported emojis", + "reset": "Reset emojis" + } + }, + "whosWatching": { + "description": "See who's watching your screen share or streams", + "settings": { + "showPanel": "Show spectators under screenshare panel" + }, + "ui": { + "spectators": "Spectators", + "noSpectators": "No spectators" + } + }, + "wigglyText": { + "description": "Make text wiggle with special syntax (~text~)", + "settings": { + "intensity": "Animation intensity in px" + }, + "about": { + "description": "You can make text wiggle with the following:", + "leftRight": "left and right by typing <~text~>", + "upDown": "up and down by typing ^~text~^", + "circle": "in a circle by typing )~text~^(" + } + }, + "writeUpperCase": { + "description": "Automatically capitalize the first letter of sentences", + "settings": { + "blockedWords": "Strings not to capitalize (separate with a comma)" + } + }, + "noRoleHeaders": { + "description": "Removes role headers from the member list, creating a cleaner appearance" + }, + "orbolayBridge": { + "description": "Bridge plugin for Orbolay overlay integration, enabling voice state sync and message notifications", + "settings": { + "port": "Port number for the Orbolay WebSocket connection", + "isKeybindEnabled": "Enable keybind support for Orbolay controls", + "messageAlignment": "Alignment position for message overlay", + "userAlignment": "Alignment position for user overlay", + "alignmentOptions": { + "topLeft": "Top Left", + "topRight": "Top Right", + "bottomLeft": "Bottom Left", + "bottomRight": "Bottom Right" + }, + "voiceSemitransparent": "Make voice overlay semi-transparent", + "messagesSemitransparent": "Make messages overlay semi-transparent" + } + }, + "normalizeMessageLinks": { + "description": "Normalizes Discord message links by removing canary/ptb subdomains for consistency" + }, + "notificationTitle": { + "description": "Adds detailed notification titles showing the sender, channel, and server information" + }, + "youtubeDescription": { + "description": "Adds a toggleable description for YouTube video embeds" } -} \ No newline at end of file +} diff --git a/i18n/en-US/vencord.json b/i18n/en-US/vencord.json index 09b1860e8..1fb9eedbb 100644 --- a/i18n/en-US/vencord.json +++ b/i18n/en-US/vencord.json @@ -1,4 +1,240 @@ { + "badgeAPI": { + "description": "API to add badges to users" + }, + "chatInputButtonAPI": { + "description": "API to add buttons to the chat input" + }, + "commandsAPI": { + "description": "API required by anything that uses commands" + }, + "contextMenuAPI": { + "description": "API for adding/removing items to/from context menus" + }, + "dynamicImageModalAPI": { + "description": "Allows you to omit either width or height when opening an image modal" + }, + "memberListDecoratorsAPI": { + "description": "API to add decorators to member list (both in servers and DMs)" + }, + "menuItemDemanglerAPI": { + "description": "Demangles Discord's Menu Item module" + }, + "messageAccessoriesAPI": { + "description": "API to add message accessories" + }, + "messageDecorationsAPI": { + "description": "API to add decorations to messages" + }, + "messageEventsAPI": { + "description": "API required by anything using message events" + }, + "messagePopoverAPI": { + "description": "API to add buttons to message popovers" + }, + "messageUpdaterAPI": { + "description": "API for updating and re-rendering messages" + }, + "nicknameIconsAPI": { + "description": "API to add icons to the nickname, in profiles" + }, + "noticesAPI": { + "description": "Fixes notices being automatically dismissed" + }, + "serverListAPI": { + "description": "API required for plugins that modify the server list" + }, + "userSettingsAPI": { + "description": "Patches Discord's UserSettings to expose their group and name" + }, + "secretRingTone": { + "description": "Always play the secret version of the discord ringtone (except during special ringtone events)", + "settings": { + "onlySnow": "Only play the Snow Halation Theme" + } + }, + "shikiCodeblocks": { + "description": "Brings vscode-style codeblocks into Discord, powered by Shiki", + "settings": { + "theme": "Default themes", + "customTheme": "A link to a custom vscode theme", + "tryHljs": "Use the more lightweight default Discord highlighter and theme.", + "tryHljsOptions": { + "never": "Never", + "preferShiki": "Prefer Shiki instead of Highlight.js", + "preferHljs": "Prefer Highlight.js instead of Shiki", + "always": "Always" + }, + "useDevIcon": "How to show language icons on codeblocks", + "useDevIconOptions": { + "disabled": "Disabled", + "colorless": "Colorless", + "colored": "Colored" + }, + "bgOpacity": "Background opacity" + } + }, + "showHiddenThings": { + "description": "Displays various hidden & moderator-only things regardless of permissions.", + "settings": { + "showTimeouts": "Show member timeout icons in chat.", + "showInvitesPaused": "Show the invites paused tooltip in the server list.", + "showModView": "Show the member mod view context menu item in all servers." + } + }, + "spotifyCrack": { + "description": "Free listen along, no auto-pausing in voice chat, and allows activity to continue playing when idling", + "settings": { + "noSpotifyAutoPause": "Disable Spotify auto-pause", + "keepSpotifyActivityOnIdle": "Keep Spotify activity playing when idling" + } + }, + "spotifyShareCommands": { + "description": "Share your current Spotify track, album or artist via slash command (/track, /album, /artist)", + "commands": { + "shareDescription": "Share your current Spotify {name} in chat", + "notListening": "You're not listening to any music.", + "trackNotFound": "Failed to find the track on spotify." + } + }, + "startupTimings": { + "description": "Adds Startup Timings to the Settings menu", + "ui": { + "title": "Startup Timings" + } + }, + "stickerPaste": { + "description": "Makes picking a sticker in the sticker picker insert it into the chatbox instead of instantly sending" + }, + "streamerModeOnStream": { + "description": "Automatically enables streamer mode when you start streaming in Discord" + }, + "superReactionTweaks": { + "description": "Customize the limit of Super Reactions playing at once, and super react by default", + "settings": { + "superReactByDefault": "Reaction picker will default to Super Reactions", + "unlimitedSuperReactionPlaying": "Remove the limit on Super Reactions playing at once", + "superReactionPlayingLimit": "Max Super Reactions to play at once. 0 to disable playing Super Reactions" + } + }, + "themeAttributes": { + "description": "Adds data attributes to various elements for theming purposes" + }, + "unindent": { + "description": "Trims leading indentation from codeblocks" + }, + "unlockedAvatarZoom": { + "description": "Allows you to zoom in further in the image crop tool when changing your avatar", + "settings": { + "zoomMultiplier": "Zoom multiplier" + } + }, + "userMessagesPronouns": { + "description": "Adds pronouns to chat user messages", + "settings": { + "pronounsFormat": "The format for pronouns to appear in chat", + "pronounsFormatOptions": { + "lowercase": "Lowercase", + "capitalized": "Capitalized" + }, + "showSelf": "Enable or disable showing pronouns for yourself" + } + }, + "validReply": { + "description": "Fixes \"Message could not be loaded\" upon hovering over the reply" + }, + "validUser": { + "description": "Fix mentions for unknown users showing up as '@unknown-user' (hover over a mention to fix it)" + }, + "vcDoubleClick": { + "description": "Join voice chats via double click instead of single click" + }, + "volumeBooster": { + "description": "Allows you to set the user and stream volume above the default maximum", + "settings": { + "multiplier": "Volume Multiplier" + } + }, + "webContextMenus": { + "description": "Re-adds context menus missing in the web version of Discord: Links & Images (Copy/Open Link/Image), Text Area (Copy, Cut, Paste, SpellCheck)", + "settings": { + "addBack": "Add back the Discord context menus for images, links and the chat input bar" + } + }, + "webKeybinds": { + "description": "Re-adds keybinds missing in the web version of Discord: ctrl+t, ctrl+shift+t, ctrl+tab, ctrl+shift+tab, ctrl+1-9, ctrl+,. Only works fully on Vesktop/Legcord, not inside your browser" + }, + "webScreenShareFixes": { + "description": "Removes 2500kbps bitrate cap on chromium and vesktop clients." + }, + "youtubeAdblock": { + "description": "Block ads in YouTube embeds and the WatchTogether activity via AdGuard" + }, + "devCompanion": { + "description": "Dev Companion Plugin. Please report anything not working or being weird (most likely its a bug) to sadan, either ping or dm, thanks!", + "settings": { + "notifyOnAutoConnect": "Whether to notify when Dev Companion has automatically connected.", + "usePatchedModule": "On extract requests, reply with the current patched module (if it is patched) instead of the original.", + "reloadAfterToggle": "Reload after a disable/enable plugin command is recived." + } + }, + "disableCallIdle": { + "description": "Disables automatically getting kicked from a DM voice call after 3 minutes and being moved to an AFK voice channel." + }, + "dontRoundMyTimestamps": { + "description": "Always rounds relative timestamps down, so 7.6y becomes 7y instead of 8y" + }, + "f8break": { + "description": "Pause the client when you press F8 with DevTools (+ breakpoints) open." + }, + "fixCodeblockGap": { + "description": "Removes the gap between codeblocks and text below it" + }, + "fixSpotifyEmbeds": { + "description": "Fixes spotify embeds being incredibly loud by letting you customise the volume", + "settings": { + "volume": "The volume % to set for spotify embeds. Anything above 10% is veeeery loud" + } + }, + "fixYoutubeEmbeds": { + "description": "Bypasses youtube videos being blocked from display on Discord (for example by UMG)" + }, + "forceOwnerCrown": { + "description": "Force the owner crown next to usernames even if the server is large." + }, + "friendInvites": { + "description": "Create and manage friend invite links via slash commands (/create friend invite, /view friend invites, /revoke friend invites).", + "commands": { + "createFriendInvite": { + "name": "create friend invite", + "description": "Generates a friend invite link." + }, + "viewFriendInvites": { + "name": "view friend invites", + "description": "View a list of all generated friend invites." + }, + "revokeFriendInvites": { + "name": "revoke friend invites", + "description": "Revokes all generated friend invites." + } + }, + "ui": { + "expires": "Expires:", + "maxUses": "Max uses:", + "timesUsed": "Times used:", + "noActiveInvites": "You have no active friend invites!", + "allRevoked": "All friend invites have been revoked." + } + }, + "fullSearchContext": { + "description": "Makes the message context menu in message search results have all options you'd expect" + }, + "fullUserInChatbox": { + "description": "Makes the user mention in the chatbox have more functionalities, like left/right clicking" + }, + "gifPaste": { + "description": "Makes picking a gif in the gif picker insert a link into the chatbox instead of instantly sending it" + }, "donate": "Donate", "invite": "Invite", "loading": "Loading...", @@ -279,6 +515,7 @@ "echoCancellation": "Echo Cancellation" }, "showHiddenChannels": { + "description": "Show channels that you do not have access to view.", "hiddenChannel": "This is a hidden {type} channel", "lockedChannel": "This is a locked {type} channel", "nsfw": "NSFW", @@ -302,6 +539,25 @@ "allowedUsersAndRoles": "Allowed users and roles:", "hideAllowedUsersAndRoles": "Hide Allowed Users and Roles", "viewAllowedUsersAndRoles": "View Allowed Users and Roles", + "hiddenChannelTooltip": "Hidden Channel", + "settings": { + "channelStyle": { + "description": "The style used to display hidden channels.", + "classic": "Classic", + "muted": "Muted", + "showUnreads": "Show Unreads", + "mutedAndShowUnreads": "Muted and Show Unreads" + }, + "showMode": { + "description": "The mode used to display hidden channels.", + "lockIcon": "Lock Icon replacing channel icon", + "eyeIconRight": "Eye icon on the right", + "lockIconRight": "Lock icon on the right" + }, + "defaultAllowedUsersAndRolesDropdownState": { + "description": "Whether the allowed users and roles dropdown on hidden channels should be open by default" + } + }, "channelTypes": { "text": "text", "announcement": "announcement", @@ -309,7 +565,11 @@ "voice": "voice", "stage": "stage", "messages": "messages", - "posts": "posts" + "message": "message", + "posts": "posts", + "post": "post", + "threads": "threads", + "thread": "thread" }, "sortOrders": { "latestActivity": "Latest activity", @@ -684,10 +944,16 @@ "servers": "Notify when removed from a server", "groups": "Notify when removed from a group chat" }, + "description": "Notifies you when a friend, group chat, or server removes you.", "friendRemoved": "{username} removed you as a friend.", "friendRequestRemoved": "A friend request from {username} has been removed.", "serverRemoved": "You were removed from the server {name}.", - "groupRemoved": "You were removed from the group {name}." + "groupRemoved": "You were removed from the group {name}.", + "offlineGroupRemoved": "You are no longer in the group {name}.", + "offlineServerRemoved": "You are no longer in the server {name}.", + "offlineFriendRemoved": "You are no longer friends with {username}.", + "offlineFriendRequestRevoked": "Friend request from {username} has been revoked.", + "notificationTitle": "Relationship Notifier" }, "messageLatency": { "settings": { @@ -830,6 +1096,65 @@ "disableGameActivity": "Disable Game Activity", "enableGameActivity": "Enable Game Activity" }, + "autoDndWhilePlaying": { + "description": "Automatically sets your status to Do Not Disturb or another status when playing games", + "settings": { + "statusToSet": "Status to set when playing games", + "excludeInvisible": "Don't change status if you're currently invisible" + }, + "statusOptions": { + "online": "Online", + "idle": "Idle", + "dnd": "Do Not Disturb", + "invisible": "Invisible" + } + }, + "appleMusicRichPresence": { + "description": "Shows your currently playing Apple Music track in your Discord status", + "settings": { + "activityType": "Activity type to display as", + "statusDisplayType": "Show the track or artist name in the member list", + "refreshInterval": "How often to refresh the track data (in seconds)", + "enableTimestamps": "Enable timestamps showing how long you've been listening", + "enableButtons": "Enable buttons to view the track on Apple Music or SongLink", + "nameString": "The name to display for the activity. Use {name}, {artist}, and {album} as placeholders", + "detailsString": "The details text. Use {name}, {artist}, and {album} as placeholders", + "stateString": "The state text. Use {name}, {artist}, and {album} as placeholders", + "largeImageType": "The type of image to use for the large activity image", + "largeTextString": "The text to display when hovering over the large image. Use {name}, {artist}, and {album} as placeholders", + "smallImageType": "The type of image to use for the small activity image", + "smallTextString": "The text to display when hovering over the small image. Use {name}, {artist}, and {album} as placeholders" + }, + "activityTypes": { + "playing": "Playing", + "listening": "Listening" + }, + "statusDisplayTypes": { + "off": "Off", + "artist": "Artist name", + "track": "Track name" + }, + "assetImageTypes": { + "album": "Album Artwork", + "artist": "Artist Artwork", + "disabled": "Disabled" + }, + "defaultName": "Apple Music", + "defaultDetails": "{name}", + "defaultState": "by {artist}", + "defaultLargeText": "{album}", + "defaultSmallText": "by {artist}", + "settingsAbout": { + "intro": "You can use placeholders in the string fields:", + "namePlaceholder": "will be replaced with the track name", + "artistPlaceholder": "will be replaced with the artist name", + "albumPlaceholder": "will be replaced with the album name" + }, + "buttons": { + "listenOnAppleMusic": "Listen on Apple Music", + "viewOnSongLink": "View on SongLink" + } + }, "lastfmRichPresence": { "description": "Little plugin for Last.fm rich presence", "settings": { @@ -1390,5 +1715,507 @@ "both_one": "[no content, {attachments} attachment and {embeds} embed]", "both_other": "[no content, {attachments} attachments and {embeds} embeds]" } + }, + "alwaysAnimate": { + "description": "Animates anything that can be animated", + "settings": { + "icons": "Always animate server icons, avatars, decor and more", + "statusEmojis": "Always animate status emojis", + "serverBanners": "Always animate server banners", + "nameplates": "Always animate nameplates", + "roleGradients": "Always animate role gradients" + } + }, + "alwaysExpandRoles": { + "description": "Always expands the role list in profile popouts", + "settings": { + "hideArrow": "Hide Arrow" + } + }, + "alwaysTrust": { + "description": "Removes the annoying untrusted domain and suspicious file popup", + "settings": { + "domain": "Remove the untrusted domain popup when opening links", + "file": "Remove the 'Potentially Dangerous Download' popup when opening links", + "noDeleteSafety": "Removes the enter server name requirement when deleting a server", + "confirmModal": "Should a \"are you sure you want to delete\" modal be shown?" + }, + "ui": { + "deleteServerTitle": "Delete server?", + "deleteServerBody": "It's permanent, if that wasn't obvious.", + "deleteServerConfirm": "Delete" + } + }, + "autoDndWhilePlaying": { + "description": "Automatically updates your online status (online, idle, dnd) when launching games", + "settings": { + "statusToSet": "Status to set while playing a game", + "excludeInvisible": "Prevent automatic status changes while your status is set to invisible" + }, + "statusOptions": { + "online": "Online", + "idle": "Idle", + "dnd": "Do Not Disturb", + "invisible": "Invisible" + } + }, + "betterGifAltText": { + "description": "Change GIF alt text from simply being 'GIF' to containing the gif tags / filename" + }, + "betterNotesBox": { + "description": "Hide notes or disable spellcheck (Configure in settings!!)", + "settings": { + "hide": "Hide notes", + "noSpellCheck": "Disable spellcheck in notes" + } + }, + "betterRoleDot": { + "description": "Copy role colour on RoleDot (accessibility setting) click. Also allows using both RoleDot and coloured names simultaneously", + "settings": { + "bothStyles": "Show both role dot and coloured names", + "copyRoleColorInProfilePopout": "Allow click on role dot in profile popout to copy role color" + } + }, + "betterUploadButton": { + "description": "Upload with a single click, open menu with right click" + }, + "blurNsfw": { + "description": "Blur attachments in NSFW channels until hovered", + "settings": { + "blurAmount": "Blur Amount (in pixels)", + "blurAllChannels": "Blur attachments in all channels (not just NSFW)" + } + }, + "clearURLs": { + "description": "Automatically removes tracking elements from URLs you send" + }, + "colorSighted": { + "description": "Removes the colorblind-friendly icons from statuses, just like 2015-2017 Discord" + }, + "consoleShortcuts": { + "description": "Adds shorter Aliases for many things on the window. Run `shortcutList` for a list." + }, + "crashHandler": { + "description": "Utility plugin for handling and possibly recovering from crashes without a restart", + "settings": { + "attemptToPreventCrashes": "Whether to attempt to prevent Discord crashes.", + "attemptToNavigateToHome": "Whether to attempt to navigate to the home when preventing Discord crashes." + }, + "notifications": { + "crashedTitle": "Discord has crashed!", + "crashedBody": "Awn :( Discord has crashed two times rapidly, not attempting to recover. Click here to join our support server!", + "recoveringBody": "Attempting to recover... Click here to join our support server!", + "invalidInvite": "Invalid or expired invite" + }, + "updatePrompt": "Uh oh, Discord has just crashed... but good news, there is a Equicord update available that might fix this issue! Would you like to update now?" + }, + "ctrlEnterSend": { + "description": "Use Ctrl+Enter to send messages (customizable)", + "settings": { + "submitRule": "The way to send a message", + "sendMessageInTheMiddleOfACodeBlock": "Whether to send a message in the middle of a code block" + }, + "submitRuleOptions": { + "ctrlEnter": "Ctrl+Enter (Enter or Shift+Enter for new line) (cmd+enter on macOS)", + "shiftEnter": "Shift+Enter (Enter for new line)", + "enter": "Enter (Shift+Enter for new line; Discord default)" + } + }, + "customIdle": { + "description": "Allows you to set the time before Discord goes idle (or disable auto-idle)", + "settings": { + "idleTimeout": "Minutes before Discord goes idle (0 to disable auto-idle)", + "remainInIdle": "When you come back to Discord, remain idle until you confirm you want to go online" + }, + "ui": { + "backOnlineMessage": "Welcome back! Click the button to go online. Click the X to stay idle until reload.", + "exitIdle": "Exit idle" + } + }, + "iLoveSpam": { + "description": "Do not hide messages from 'likely spammers'" + }, + "imageFilename": { + "description": "Display the file name of images & GIFs as a tooltip when hovering over them", + "settings": { + "showFullUrl": "Show the full URL of the image instead of just the file name. Always enabled for GIFs because they usually have no meaningful file name" + } + }, + "imageLink": { + "description": "Never hide image links in messages, even if it's the only content" + }, + "implicitRelationships": { + "description": "Shows your implicit relationships in the Friends tab.", + "settings": { + "sortByAffinity": "Whether to sort implicit relationships by their affinity to you." + }, + "ui": { + "implicitHeader": "Implicit — {count}", + "implicitSection": "Implicit" + } + }, + "ircColors": { + "description": "Makes username colors in chat unique, like in IRC clients", + "settings": { + "lightness": "Lightness, in %. Change if the colors are too light or too dark", + "memberListColors": "Replace role colors in the member list", + "applyColorOnlyToUsersWithoutColor": "Apply colors only to users who don't have a predefined color", + "applyColorOnlyInDms": "Apply colors only in direct messages; do not apply colors in servers." + } + }, + "keepCurrentChannel": { + "description": "Attempt to navigate to the channel you were in before switching accounts or loading Discord." + }, + "loadingQuotes": { + "description": "Replace Discords loading quotes", + "settings": { + "replaceEvents": "Should this plugin also apply during events with special event themed quotes? (e.g. Halloween)", + "enablePluginPresetQuotes": "Enable the quotes preset by this plugin", + "enableDiscordPresetQuotes": "Enable Discord's preset quotes (including event quotes, during events)", + "additionalQuotes": "Additional custom quotes to possibly appear, separated by the below delimiter", + "additionalQuotesDelimiter": "Delimiter for additional quotes" + }, + "ui": { + "noQuotesQuote": "Did you really disable all loading quotes? What a buffoon you are..." + } + }, + "mentionAvatars": { + "description": "Shows user avatars and role icons inside mentions", + "settings": { + "showAtSymbol": "Whether the the @ symbol should be displayed on user mentions" + } + }, + "messageTags": { + "description": "Allows you to save messages and to use them with a simple command.", + "settings": { + "clydeName": "Clyde message on send", + "clydeDescription": "If enabled, clyde will send you an ephemeral message when a tag was used." + }, + "commands": { + "tags": "Manage all the tags for yourself", + "create": "Create a new tag", + "delete": "Remove a tag from your yourself", + "list": "List all tags from yourself", + "preview": "Preview a tag without sending it publicly", + "tagName": "The name of the tag to trigger the response", + "message": "The message that you will send when using this tag" + }, + "ui": { + "tagDoesNotExist": "The tag **{name}** does not exist anymore! Please reload ur Discord to fix :)", + "tagSent": "The tag **{name}** has been sent!", + "tagAlreadyExists": "A Tag with the name **{name}** already exists!", + "tagCreated": "Successfully created the tag **{name}**!", + "tagDoesNotExist2": "A Tag with the name **{name}** does not exist!", + "tagDeleted": "Successfully deleted the tag **{name}**!", + "allTags": "All Tags:", + "noTagsYet": "Woops! There are no tags yet, use `/tags create` to create one!", + "invalidSubCommand": "Invalid sub-command" + } + }, + "moreQuickReactions": { + "description": "Improves the quick react buttons in the message context menu.", + "settings": { + "reactionCount": "Number of reactions (0-42)", + "frequentEmojis": "Use frequently used emojis instead of favourite emojis", + "rows": "Rows of quick reactions to display", + "columns": "Columns of quick reactions to display", + "compactMode": "Scales the buttons to 75% of their original scale, whilst increasing the inner emoji to 125% scale. Emojis will be 93.75% of the original size. Recommended to have a minimum of 5 columns", + "scroll": "Enable scrolling the list of emojis" + } + }, + "noDeepLinks": { + "description": "Disables Discord's stupid deep linking feature which tries to force you to use their Desktop App" + }, + "noDevtoolsWarning": { + "description": "Disables the 'HOLD UP' banner in the console. As a side effect, also prevents Discord from hiding your token, which prevents random logouts." + }, + "noF1": { + "description": "Disables F1 help bind." + }, + "noMaskedUrlPaste": { + "description": "Pasting a link while having text selected will not paste as masked URL" + }, + "noMosaic": { + "description": "Removes Discord image mosaic", + "settings": { + "inlineVideo": "Play videos without carousel modal" + } + }, + "noOnboardingDelay": { + "description": "Skips the slow and annoying onboarding delay" + }, + "noPendingCount": { + "description": "Removes the ping count of incoming friend requests, message requests, and nitro offers.", + "settings": { + "hideFriendRequestsCount": "Hide incoming friend requests count", + "hideMessageRequestsCount": "Hide message requests count", + "hidePremiumOffersCount": "Hide nitro offers count" + } + }, + "noProfileThemes": { + "description": "Completely removes Nitro profile themes from everyone but yourself" + }, + "noServerEmojis": { + "description": "Do not show server emojis in the autocomplete menu.", + "settings": { + "shownEmojis": "The types of emojis to show in the autocomplete menu.", + "shownEmojisOptions": { + "onlyUnicode": "Only unicode emojis", + "currentServer": "Unicode emojis and server emojis from current server", + "all": "Unicode emojis and all server emojis (Discord default)" + } + } + }, + "noSystemBadge": { + "description": "Disables the taskbar and system tray unread count badge." + }, + "notificationVolume": { + "description": "Save your ears and set a separate volume for notifications and in-app sounds", + "settings": { + "notificationVolume": "Notification volume" + } + }, + "noTypingAnimation": { + "description": "Disables the CPU-intensive typing dots animation" + }, + "noUnblockToJump": { + "description": "Allows you to jump to messages of blocked or ignored users and likely spammers without unblocking them" + }, + "onePingPerDM": { + "description": "If unread messages are sent by a user in DMs multiple times, you'll only receive one audio ping.", + "settings": { + "channelToAffect": "Select the type of DM for the plugin to affect", + "channelToAffectOptions": { + "both": "Both", + "userDm": "User DMs", + "groupDm": "Group DMs" + }, + "allowMentions": "Receive audio pings for @mentions", + "allowEveryone": "Receive audio pings for @everyone and @here in group DMs", + "ignoreUsers": "User IDs (comma + space) whose pings should NEVER be throttled", + "alwaysPlaySound": "Play the message notification sound even when its disabled" + } + }, + "openInApp": { + "description": "Open links in their respective apps instead of your browser", + "settings": { + "spotify": "Open Spotify links in the Spotify app", + "steam": "Open Steam links in the Steam app", + "epic": "Open Epic Games links in the Epic Games Launcher", + "tidal": "Open Tidal links in the Tidal app", + "itunes": "Open Apple Music links in the iTunes app", + "vrcx": "Open VRChat links in the VRCX app" + }, + "ui": { + "openedInApp": "Opened link in native app" + } + }, + "permissionFreeWill": { + "description": "Disables the client-side restrictions for channel permission management.", + "settings": { + "lockout": "Bypass the permission lockout prevention (\"Pretty sure you don't want to do this\")", + "onboarding": "Bypass the onboarding requirements (\"Making this change will make your server incompatible [...]\")" + } + }, + "petpet": { + "description": "Adds a /petpet slash command to create headpet gifs from any image", + "commands": { + "petpet": { + "name": "petpet", + "description": "Create a petpet gif. You can only specify one of the image options", + "options": { + "delay": "The delay between each frame in ms. Rounded to nearest 10ms. Defaults to the minimum value of 20.", + "resolution": "Resolution for the gif. Defaults to 120. If you enter an insane number and it freezes Discord that's your fault.", + "image": "Image attachment to use", + "url": "URL to fetch image from", + "user": "User whose avatar to use as image", + "noServerPfp": "Use the normal avatar instead of the server specific one when using the 'user' option" + } + } + }, + "errors": { + "noImage": "No Image specified!", + "delayMinimum": "Delay must be at least 20.", + "uploadNotImage": "Upload is not an image", + "failedToFetchUser": "Failed to fetch user. Check the console for more info." + } + }, + "plainFolderIcon": { + "description": "Dont show the small guild icons in folders" + }, + "quickReply": { + "description": "Reply to (ctrl + up/down) and edit (ctrl + shift + up/down) messages via keybinds", + "settings": { + "shouldMention": "Ping reply by default", + "shouldMentionOptions": { + "followPlugin": "Follow NoReplyMention plugin (if enabled)", + "enabled": "Enabled", + "disabled": "Disabled" + }, + "ignoreBlockedAndIgnored": "Ignore messages by blocked/ignored users when navigating" + } + }, + "reactErrorDecoder": { + "description": "Replaces \"Minifed React Error\" with the actual error." + }, + "replyTimestamp": { + "description": "Shows a timestamp on replied-message previews" + }, + "revealAllSpoilers": { + "description": "Reveal all spoilers in a message by Ctrl-clicking a spoiler, or in the chat with Ctrl+Shift-click" + }, + "roleColorEverywhere": { + "description": "Adds the top role color anywhere possible", + "settings": { + "chatMentions": "Show role colors in chat mentions (including in the message box)", + "memberList": "Show role colors in member list role headers", + "voiceUsers": "Show role colors in the voice chat user list", + "reactorsList": "Show role colors in the reactors list", + "pollResults": "Show role colors in the poll results", + "colorChatMessages": "Color chat messages based on the author's role color", + "messageSaturation": "Intensity of message coloring." + } + }, + "betterGifPicker": { + "description": "Makes the gif picker open the favourite category by default", + "settings": { + "keepOpen": "Keeps the gif picker open after selecting a gif" + } + }, + "favEmojiFirst": { + "description": "Puts your favorite emoji first in the emoji autocomplete and also has emoji alias.", + "settings": { + "aliases": "Manage your emoji aliases.", + "clearAll": "Delete all aliases." + }, + "ui": { + "setAlias": "Set alias", + "editAlias": "Edit alias", + "aliasRequired": "Alias is required.", + "aliasValidation": "Alias must be 2-32 characters and only use lowercase letters, numbers, or underscores.", + "duplicateAlias": "Duplicate alias", + "failedToSave": "Failed to save alias.", + "aliasSetFor": "Alias set for {emoji}.", + "removedAlias": "Removed alias :{alias}:", + "failedToRemove": "Failed to remove alias.", + "deletedAllAliases": "Deleted all emoji aliases.", + "failedToDelete": "Failed to delete aliases.", + "noAliasesYet": "No aliases set yet.", + "deleteAllAliases": "Delete all aliases", + "remove": "Remove", + "modal": { + "setTitle": "Set alias", + "setDescription": "Set an alias for {emoji}", + "placeholder": "Alias, e.g. \"sob\"", + "save": "Save" + }, + "confirmModal": { + "title": "Delete all aliases", + "description": "This will remove every emoji alias you saved.", + "confirmButton": "Delete all aliases" + } + } + }, + "messageClickActions": { + "description": "Customize click actions on messages.", + "settings": { + "reactEmoji": "Emoji to use for react actions", + "singleClickAction": "Action on single click (your messages)", + "singleClickModifier": "Modifier required for single click action (your messages)", + "singleClickOthersAction": "Action on single click (others' messages)", + "singleClickOthersModifier": "Modifier required for single click action (others' messages)", + "doubleClickAction": "Action on double-click (your messages)", + "doubleClickOthersAction": "Action on double-click (others' messages)", + "doubleClickModifier": "Modifier required for double-click action", + "tripleClickAction": "Action on triple-click", + "tripleClickModifier": "Modifier required for triple-click action", + "disableInDms": "Disable all click actions in direct messages", + "disableInSystemDms": "Disable all click actions in system DMs", + "clickTimeout": "Timeout to distinguish double/triple clicks (ms)", + "doubleClickHoldThreshold": "Max hold time for double-click actions (ms). Holding longer allows text selection", + "deferDoubleClickForTriple": "Delay double-click to allow triple-click actions (disables triple-click when off)", + "selectionHoldTimeout": "Timeout to allow text selection (ms)", + "quoteWithReply": "When quoting, also reply to the message", + "useSelectionForQuote": "When quoting, use selected text if available" + }, + "actions": { + "none": "None", + "delete": "Delete", + "copyLink": "Copy Link", + "copyId": "Copy ID", + "copyContent": "Copy Content", + "copyUserId": "Copy User ID", + "edit": "Edit", + "reply": "Reply", + "react": "React", + "openThread": "Open Thread", + "openTab": "Open Tab", + "quote": "Quote", + "pin": "Pin" + }, + "modifiers": { + "none": "None", + "shift": "Shift", + "ctrl": "Ctrl", + "alt": "Alt", + "backspace": "Backspace", + "delete": "Delete" + }, + "toasts": { + "cannotReact": "Cannot react: Missing permissions", + "cannotPin": "Cannot pin: Missing permissions", + "cannotQuote": "Cannot quote this message type" + }, + "ui": { + "linkCopied": "Link copied!", + "messageIdCopied": "Message ID copied!", + "messageContentCopied": "Message content copied!", + "userIdCopied": "User ID copied!" + } + }, + "noBlockedMessages": { + "description": "Hide all blocked/ignored messages from chat completely.", + "settings": { + "alsoHideIgnoredUsers": "Also hide messages from ignored users.", + "disableNotifications": "Hide new message notifications for blocked users. Always true if \"Default Hide Users\" is enabled below and the user triggering the notification is not exempted in \"Override Users\".", + "allowAutoModMessages": "Allow messages sent by AutoMod to bypass filtering.", + "hideBlockedUserReplies": "Hide replies to blocked users.", + "defaultHideUsers": "If enabled, messages from blocked users will be completely hidden and any messages from user IDs in the override list will be collapsed (default Discord behavior) instead. If disabled, messages from blocked users will be collapsed and any messages from user IDs in the override list will be completely hidden instead.", + "overrideUsers": "Comma separated list of user IDs which will be hidden or collapsed instead of the default behavior selected above." + } + }, + "serverInfo": { + "description": "Allows you to view info about a server", + "settings": { + "sorting": "Username or if applicable Display Name", + "sortingOptions": { + "username": "Username", + "displayname": "Display Name", + "none": "Dont Sort" + } + }, + "ui": { + "serverInfo": "Server Info", + "friends": "Friends", + "mutualUsers": "Mutual Users", + "blockedUsers": "Blocked Users", + "ignoredUsers": "Ignored Users", + "serverOwner": "Server Owner", + "createdAt": "Created At", + "joinedAt": "Joined At", + "vanityLink": "Vanity Link", + "preferredLocale": "Preferred Locale", + "verificationLevel": "Verification Level", + "serverBoosts": "Server Boosts", + "channels": "Channels", + "roles": "Roles" + } + }, + "showAllMessageButtons": { + "description": "Always show all message buttons no matter if you are holding the shift key or not.", + "settings": { + "noShiftDelete": "Remove requirement to hold shift for deleting a message.", + "noShiftPin": "Remove requirement to hold shift for pinning a message." + } } -} \ No newline at end of file +} diff --git a/src/plugins/_api/notices.ts b/src/plugins/_api/notices.ts index 49f1bf268..949389861 100644 --- a/src/plugins/_api/notices.ts +++ b/src/plugins/_api/notices.ts @@ -18,10 +18,11 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; export default definePlugin({ name: "NoticesAPI", - description: "Fixes notices being automatically dismissed", + description: t("noticesAPI.description"), authors: [Devs.Ven], required: true, patches: [ diff --git a/src/plugins/_api/serverList.ts b/src/plugins/_api/serverList.ts index a85569cdf..fa3fd1cae 100644 --- a/src/plugins/_api/serverList.ts +++ b/src/plugins/_api/serverList.ts @@ -18,11 +18,12 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; export default definePlugin({ name: "ServerListAPI", authors: [Devs.kemo], - description: "Api required for plugins that modify the server list", + description: t("serverListAPI.description"), patches: [ { find: "#{intl::DISCODO_DISABLED}", diff --git a/src/plugins/_core/noTrack.ts b/src/plugins/_core/noTrack.ts index cd6234dc4..5f0fbe1a1 100644 --- a/src/plugins/_core/noTrack.ts +++ b/src/plugins/_core/noTrack.ts @@ -19,13 +19,14 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { Logger } from "@utils/Logger"; +import { t } from "@utils/translation"; import definePlugin, { OptionType, StartAt } from "@utils/types"; import { WebpackRequire } from "@vencord/discord-types/webpack"; const settings = definePluginSettings({ disableAnalytics: { type: OptionType.BOOLEAN, - description: "Disable Discord's tracking (analytics/'science')", + description: t("noTrack.settings.disableAnalytics"), default: true, restartNeeded: true } @@ -33,7 +34,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "NoTrack", - description: "Disable Discord's tracking (analytics/'science'), metrics and Sentry crash reporting", + description: t("noTrack.description"), authors: [Devs.Cyn, Devs.Ven, Devs.Nuckyz, Devs.Arrow], required: true, diff --git a/src/plugins/alwaysAnimate/index.ts b/src/plugins/alwaysAnimate/index.ts index 2052998ad..ab53faee7 100644 --- a/src/plugins/alwaysAnimate/index.ts +++ b/src/plugins/alwaysAnimate/index.ts @@ -18,39 +18,40 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; const settings = definePluginSettings({ icons: { type: OptionType.BOOLEAN, - description: "Always animate server icons, avatars, decor and more", + description: t("alwaysAnimate.settings.icons"), default: true, }, statusEmojis: { type: OptionType.BOOLEAN, - description: "Always animate status emojis", + description: t("alwaysAnimate.settings.statusEmojis"), default: true, }, serverBanners: { type: OptionType.BOOLEAN, - description: "Always animate server banners", + description: t("alwaysAnimate.settings.serverBanners"), default: true, }, nameplates: { type: OptionType.BOOLEAN, - description: "Always animate nameplates", + description: t("alwaysAnimate.settings.nameplates"), default: true, }, roleGradients: { type: OptionType.BOOLEAN, - description: "Always animate role gradients", + description: t("alwaysAnimate.settings.roleGradients"), default: true, } }); export default definePlugin({ name: "AlwaysAnimate", - description: "Animates anything that can be animated", + description: t("alwaysAnimate.description"), authors: [Devs.FieryFlames], settings, patches: [ diff --git a/src/plugins/alwaysExpandRoles/index.ts b/src/plugins/alwaysExpandRoles/index.ts index 7ad1e6fae..d1038e018 100644 --- a/src/plugins/alwaysExpandRoles/index.ts +++ b/src/plugins/alwaysExpandRoles/index.ts @@ -18,13 +18,14 @@ import { definePluginSettings, migratePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; const settings = definePluginSettings({ hideArrow: { type: OptionType.BOOLEAN, default: false, - description: "Hide Arrow", + description: t("alwaysExpandRoles.settings.hideArrow"), restartNeeded: true }, }); @@ -32,7 +33,7 @@ const settings = definePluginSettings({ migratePluginSettings("AlwaysExpandRoles", "ShowAllRoles"); export default definePlugin({ name: "AlwaysExpandRoles", - description: "Always expands the role list in profile popouts", + description: t("alwaysExpandRoles.description"), authors: [Devs.surgedevs], isModified: true, settings, diff --git a/src/plugins/alwaysTrust/index.tsx b/src/plugins/alwaysTrust/index.tsx index 22c579fc2..415bf67e0 100644 --- a/src/plugins/alwaysTrust/index.tsx +++ b/src/plugins/alwaysTrust/index.tsx @@ -36,31 +36,31 @@ const settings = definePluginSettings({ domain: { type: OptionType.BOOLEAN, default: true, - description: "Remove the untrusted domain popup when opening links", + description: t("alwaysTrust.settings.domain"), restartNeeded: true }, file: { type: OptionType.BOOLEAN, default: true, - description: "Remove the 'Potentially Dangerous Download' popup when opening links", + description: t("alwaysTrust.settings.file"), restartNeeded: true }, noDeleteSafety: { type: OptionType.BOOLEAN, default: true, - description: "Removes the enter server name requirement when deleting a server", + description: t("alwaysTrust.settings.noDeleteSafety"), restartNeeded: true }, confirmModal: { type: OptionType.BOOLEAN, - description: "Should a \"are you sure you want to delete\" modal be shown?", + description: t("alwaysTrust.settings.confirmModal"), default: true }, }); export default definePlugin({ name: "AlwaysTrust", - description: "Removes the annoying untrusted domain and suspicious file popup", + description: t("alwaysTrust.description"), authors: [Devs.zt, Devs.Trwy], isModified: true, settings, @@ -93,10 +93,10 @@ export default definePlugin({ async HandleGuildDeleteModal(server) { if (settings.store.confirmModal) { return Alerts.show({ - title: "Delete server?", - body:

It's permanent, if that wasn't obvious.

, + title: t("alwaysTrust.ui.deleteServerTitle"), + body:

{t("alwaysTrust.ui.deleteServerBody")}

, confirmColor: Button.Colors.RED, - confirmText: "Delete", + confirmText: t("alwaysTrust.ui.deleteServerConfirm"), onConfirm: () => GetPropsAndDeleteGuild(server.id), cancelText: t("vencord.cancel") }); diff --git a/src/plugins/arRPC.web/index.tsx b/src/plugins/arRPC.web/index.tsx index e28cbb0ea..f78c6352e 100644 --- a/src/plugins/arRPC.web/index.tsx +++ b/src/plugins/arRPC.web/index.tsx @@ -42,7 +42,7 @@ let ws: WebSocket; migratePluginSettings("WebRichPresence", "WebRichPresence (arRPC)"); export default definePlugin({ name: "WebRichPresence", - description: "Client plugin for arRPC to enable RPC on Discord Web (experimental)", + description: t("arRPC.description"), authors: [Devs.Ducko], reporterTestable: ReporterTestable.None, hidden: !IS_EQUIBOP && !IS_VESKTOP && !("legcord" in window), diff --git a/src/plugins/autoDndWhilePlaying.discordDesktop/index.ts b/src/plugins/autoDndWhilePlaying.discordDesktop/index.ts index d1dbdc213..7e1b2b6ea 100644 --- a/src/plugins/autoDndWhilePlaying.discordDesktop/index.ts +++ b/src/plugins/autoDndWhilePlaying.discordDesktop/index.ts @@ -7,6 +7,7 @@ import { definePluginSettings, migratePluginSettings } from "@api/Settings"; import { getUserSettingLazy } from "@api/UserSettings"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; let savedStatus: string | null; @@ -16,30 +17,30 @@ const StatusSettings = getUserSettingLazy("status", "status")!; const settings = definePluginSettings({ statusToSet: { type: OptionType.SELECT, - description: "Status to set while playing a game", + description: t("autoDndWhilePlaying.settings.statusToSet"), options: [ { - label: "Online", + label: t("autoDndWhilePlaying.statusOptions.online"), value: "online", }, { - label: "Idle", + label: t("autoDndWhilePlaying.statusOptions.idle"), value: "idle", }, { - label: "Do Not Disturb", + label: t("autoDndWhilePlaying.statusOptions.dnd"), value: "dnd", default: true }, { - label: "Invisible", + label: t("autoDndWhilePlaying.statusOptions.invisible"), value: "invisible", } ] }, excludeInvisible: { type: OptionType.BOOLEAN, - description: "Prevent automatic status changes while your status is set to invisible", + description: t("autoDndWhilePlaying.settings.excludeInvisible"), default: false }, }); @@ -47,7 +48,7 @@ const settings = definePluginSettings({ migratePluginSettings("AutoDNDWhilePlaying", "StatusWhilePlaying"); export default definePlugin({ name: "AutoDNDWhilePlaying", - description: "Automatically updates your online status (online, idle, dnd) when launching games", + description: t("autoDndWhilePlaying.description"), authors: [Devs.thororen], isModified: true, settings, diff --git a/src/plugins/betterGifAltText/index.ts b/src/plugins/betterGifAltText/index.ts index 0a381e547..1e3dd7898 100644 --- a/src/plugins/betterGifAltText/index.ts +++ b/src/plugins/betterGifAltText/index.ts @@ -17,13 +17,13 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "BetterGifAltText", authors: [Devs.Ven], - description: - "Change GIF alt text from simply being 'GIF' to containing the gif tags / filename", + description: t("betterGifAltText.description"), patches: [ { find: ".modalContext})};", diff --git a/src/plugins/betterGifPicker/index.ts b/src/plugins/betterGifPicker/index.ts index cb2675886..9e85ef684 100644 --- a/src/plugins/betterGifPicker/index.ts +++ b/src/plugins/betterGifPicker/index.ts @@ -6,12 +6,13 @@ import { definePluginSettings } from "@api/Settings"; import { Devs, EquicordDevs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; let closeSuppressCount = 0; const settings = definePluginSettings({ keepOpen: { - description: "Keeps the gif picker open after selecting a gif", + description: t("betterGifPicker.settings.keepOpen"), type: OptionType.BOOLEAN, default: false }, @@ -19,7 +20,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BetterGifPicker", - description: "Makes the gif picker open the favourite category by default", + description: t("betterGifPicker.description"), authors: [Devs.Samwich, EquicordDevs.justjxke], isModified: true, settings, diff --git a/src/plugins/betterNotes/index.tsx b/src/plugins/betterNotes/index.tsx index 68aa70c61..5687e7451 100644 --- a/src/plugins/betterNotes/index.tsx +++ b/src/plugins/betterNotes/index.tsx @@ -19,18 +19,19 @@ import { definePluginSettings, Settings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { canonicalizeMatch } from "@utils/patches"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; const settings = definePluginSettings({ hide: { type: OptionType.BOOLEAN, - description: "Hide notes", + description: t("betterNotesBox.settings.hide"), default: false, restartNeeded: true }, noSpellCheck: { type: OptionType.BOOLEAN, - description: "Disable spellcheck in notes", + description: t("betterNotesBox.settings.noSpellCheck"), disabled: () => Settings.plugins.BetterNotesBox.hide, default: false } @@ -38,7 +39,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BetterNotesBox", - description: "Hide notes or disable spellcheck (Configure in settings!!)", + description: t("betterNotesBox.description"), authors: [Devs.Ven], settings, diff --git a/src/plugins/betterRoleDot/index.ts b/src/plugins/betterRoleDot/index.ts index 3cdff9bb4..b78a0754d 100644 --- a/src/plugins/betterRoleDot/index.ts +++ b/src/plugins/betterRoleDot/index.ts @@ -19,18 +19,19 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { copyWithToast } from "@utils/discord"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; const settings = definePluginSettings({ bothStyles: { type: OptionType.BOOLEAN, - description: "Show both role dot and coloured names", + description: t("betterRoleDot.settings.bothStyles"), restartNeeded: true, default: false, }, copyRoleColorInProfilePopout: { type: OptionType.BOOLEAN, - description: "Allow click on role dot in profile popout to copy role color", + description: t("betterRoleDot.settings.copyRoleColorInProfilePopout"), restartNeeded: true, default: false }, @@ -39,7 +40,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BetterRoleDot", authors: [Devs.Ven, Devs.AutumnVN], - description: "Copy role colour on RoleDot (accessibility setting) click. Also allows using both RoleDot and coloured names simultaneously", + description: t("betterRoleDot.description"), settings, patches: [ diff --git a/src/plugins/betterUploadButton/index.ts b/src/plugins/betterUploadButton/index.ts index 9639dc60a..a91f1056f 100644 --- a/src/plugins/betterUploadButton/index.ts +++ b/src/plugins/betterUploadButton/index.ts @@ -17,12 +17,13 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "BetterUploadButton", authors: [Devs.fawn, Devs.Ven], - description: "Upload with a single click, open menu with right click", + description: t("betterUploadButton.description"), patches: [ { find: ".CHAT_INPUT_BUTTON_NOTIFICATION,", diff --git a/src/plugins/blurNsfw/index.ts b/src/plugins/blurNsfw/index.ts index d37545836..3b3c9268c 100644 --- a/src/plugins/blurNsfw/index.ts +++ b/src/plugins/blurNsfw/index.ts @@ -8,6 +8,7 @@ import { definePluginSettings } from "@api/Settings"; import { managedStyleRootNode } from "@api/Styles"; import { Devs } from "@utils/constants"; import { createAndAppendStyle } from "@utils/css"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; let style: HTMLStyleElement; @@ -29,20 +30,20 @@ function setCss() { const settings = definePluginSettings({ blurAmount: { type: OptionType.NUMBER, - description: "Blur Amount (in pixels)", + description: t("blurNsfw.settings.blurAmount"), default: 10, onChange: setCss }, blurAllChannels: { type: OptionType.BOOLEAN, - description: "Blur attachments in all channels (not just NSFW)", + description: t("blurNsfw.settings.blurAllChannels"), default: false }, }); export default definePlugin({ name: "BlurNSFW", - description: "Blur attachments in NSFW channels until hovered", + description: t("blurNsfw.description"), authors: [Devs.Ven], isModified: true, settings, diff --git a/src/plugins/clearURLs/index.ts b/src/plugins/clearURLs/index.ts index 362706079..73523bfaf 100644 --- a/src/plugins/clearURLs/index.ts +++ b/src/plugins/clearURLs/index.ts @@ -20,6 +20,7 @@ import { MessageObject } from "@api/MessageEvents"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; const CLEAR_URLS_JSON_URL = "https://raw.githubusercontent.com/ClearURLs/Rules/master/data.min.json"; @@ -49,7 +50,7 @@ interface RuleSet { export default definePlugin({ name: "ClearURLs", - description: "Automatically removes tracking elements from URLs you send", + description: t("clearURLs.description"), authors: [Devs.adryd, Devs.thororen], rules: [] as RuleSet[], diff --git a/src/plugins/clientTheme/index.tsx b/src/plugins/clientTheme/index.tsx index 984318e29..dac43114f 100644 --- a/src/plugins/clientTheme/index.tsx +++ b/src/plugins/clientTheme/index.tsx @@ -8,6 +8,7 @@ import "./clientTheme.css"; import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin, { OptionType, StartAt } from "@utils/types"; import { ResetThemeColorComponent, ThemeSettingsComponent } from "./components/Settings"; @@ -28,7 +29,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "ClientTheme", authors: [Devs.Nuckyz], - description: "Recreation of the old client theme experiment. Add a color to your Discord client theme", + description: t("clientTheme.themeColorDescription"), settings, startAt: StartAt.DOMContentLoaded, diff --git a/src/plugins/colorSighted/index.ts b/src/plugins/colorSighted/index.ts index 025cfb94e..26e07041d 100644 --- a/src/plugins/colorSighted/index.ts +++ b/src/plugins/colorSighted/index.ts @@ -17,11 +17,12 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "ColorSighted", - description: "Removes the colorblind-friendly icons from statuses, just like 2015-2017 Discord", + description: t("colorSighted.description"), authors: [Devs.lewisakura], patches: [ { diff --git a/src/plugins/consoleShortcuts/index.ts b/src/plugins/consoleShortcuts/index.ts index 8b158e6df..979d55011 100644 --- a/src/plugins/consoleShortcuts/index.ts +++ b/src/plugins/consoleShortcuts/index.ts @@ -24,6 +24,7 @@ import { sleep } from "@utils/misc"; import { ModalAPI } from "@utils/modal"; import { relaunch } from "@utils/native"; import { canonicalizeMatch, canonicalizeReplace, canonicalizeReplacement } from "@utils/patches"; +import { t } from "@utils/translation"; import definePlugin, { PluginNative, StartAt } from "@utils/types"; import * as Webpack from "@webpack"; import { extract, filters, findAll, findModuleId, search } from "@webpack"; @@ -243,7 +244,7 @@ const webpackModulesProbablyLoaded = Webpack.onceReady.then(() => sleep(1000)); export default definePlugin({ name: "ConsoleShortcuts", - description: "Adds shorter Aliases for many things on the window. Run `shortcutList` for a list.", + description: t("consoleShortcuts.description"), authors: [Devs.Ven], startAt: StartAt.Init, diff --git a/src/plugins/crashHandler/index.ts b/src/plugins/crashHandler/index.ts index 89457c306..c999d43f0 100644 --- a/src/plugins/crashHandler/index.ts +++ b/src/plugins/crashHandler/index.ts @@ -22,6 +22,7 @@ import { Devs } from "@utils/constants"; import { openInviteModal } from "@utils/discord"; import { Logger } from "@utils/Logger"; import { closeAllModals } from "@utils/modal"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; import { maybePromptToUpdate } from "@utils/updater"; import { filters, findBulk, proxyLazyWebpack } from "@webpack"; @@ -44,12 +45,12 @@ const { ModalStack, DraftManager } = proxyLazyWebpack(() => { const settings = definePluginSettings({ attemptToPreventCrashes: { type: OptionType.BOOLEAN, - description: "Whether to attempt to prevent Discord crashes.", + description: t("crashHandler.settings.attemptToPreventCrashes"), default: true }, attemptToNavigateToHome: { type: OptionType.BOOLEAN, - description: "Whether to attempt to navigate to the home when preventing Discord crashes.", + description: t("crashHandler.settings.attemptToNavigateToHome"), default: false } }); @@ -60,7 +61,7 @@ let shouldAttemptRecover = true; export default definePlugin({ name: "CrashHandler", - description: "Utility plugin for handling and possibly recovering from crashes without a restart", + description: t("crashHandler.description"), authors: [Devs.Nuckyz], enabledByDefault: true, @@ -98,11 +99,11 @@ export default definePlugin({ try { showNotification({ color: "#eed202", - title: "Discord has crashed!", - body: "Awn :( Discord has crashed two times rapidly, not attempting to recover. Click here to join our support server!", + title: t("crashHandler.notifications.crashedTitle"), + body: t("crashHandler.notifications.crashedBody"), noPersist: true, onClick: () => openInviteModal("wKgT9j2xfN").catch(() => - showToast("Invalid or expired invite"), + showToast(t("crashHandler.notifications.invalidInvite")), ) }); } catch { } @@ -118,7 +119,7 @@ export default definePlugin({ try { if (!hasCrashedOnce) { hasCrashedOnce = true; - maybePromptToUpdate("Uh oh, Discord has just crashed... but good news, there is a Equicord update available that might fix this issue! Would you like to update now?", true); + maybePromptToUpdate(t("crashHandler.updatePrompt"), true); } } catch { } @@ -136,11 +137,11 @@ export default definePlugin({ try { showNotification({ color: "#eed202", - title: "Discord has crashed!", - body: "Attempting to recover... Click here to join our support server!", + title: t("crashHandler.notifications.crashedTitle"), + body: t("crashHandler.notifications.recoveringBody"), noPersist: true, onClick: () => openInviteModal("wKgT9j2xfN").catch(() => - showToast("Invalid or expired invite"), + showToast(t("crashHandler.notifications.invalidInvite")), ) }); } catch { } diff --git a/src/plugins/ctrlEnterSend/index.ts b/src/plugins/ctrlEnterSend/index.ts index 7b0b26b9a..5a5a0466c 100644 --- a/src/plugins/ctrlEnterSend/index.ts +++ b/src/plugins/ctrlEnterSend/index.ts @@ -6,34 +6,35 @@ import { definePluginSettings } from "@api/Settings"; import { Devs, IS_MAC } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; export default definePlugin({ name: "CtrlEnterSend", authors: [Devs.UlyssesZhan], - description: "Use Ctrl+Enter to send messages (customizable)", + description: t("ctrlEnterSend.description"), settings: definePluginSettings({ submitRule: { - description: "The way to send a message", + description: t("ctrlEnterSend.settings.submitRule"), type: OptionType.SELECT, options: [ { - label: "Ctrl+Enter (Enter or Shift+Enter for new line) (cmd+enter on macOS)", + label: t("ctrlEnterSend.submitRuleOptions.ctrlEnter"), value: "ctrl+enter" }, { - label: "Shift+Enter (Enter for new line)", + label: t("ctrlEnterSend.submitRuleOptions.shiftEnter"), value: "shift+enter" }, { - label: "Enter (Shift+Enter for new line; Discord default)", + label: t("ctrlEnterSend.submitRuleOptions.enter"), value: "enter" } ], default: "ctrl+enter" }, sendMessageInTheMiddleOfACodeBlock: { - description: "Whether to send a message in the middle of a code block", + description: t("ctrlEnterSend.settings.sendMessageInTheMiddleOfACodeBlock"), type: OptionType.BOOLEAN, default: true, } diff --git a/src/plugins/customIdle/index.ts b/src/plugins/customIdle/index.ts index 60ebf6ba7..cad2bcbdd 100644 --- a/src/plugins/customIdle/index.ts +++ b/src/plugins/customIdle/index.ts @@ -7,12 +7,13 @@ import { currentNotice, noticesQueue, popNotice, showNotice } from "@api/Notices"; import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin, { makeRange, OptionType } from "@utils/types"; import { FluxDispatcher } from "@webpack/common"; const settings = definePluginSettings({ idleTimeout: { - description: "Minutes before Discord goes idle (0 to disable auto-idle)", + description: t("customIdle.settings.idleTimeout"), type: OptionType.SLIDER, markers: makeRange(0, 60, 5), default: 10, @@ -20,7 +21,7 @@ const settings = definePluginSettings({ restartNeeded: true // Because of the setInterval patch }, remainInIdle: { - description: "When you come back to Discord, remain idle until you confirm you want to go online", + description: t("customIdle.settings.remainInIdle"), type: OptionType.BOOLEAN, default: true } @@ -28,7 +29,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "CustomIdle", - description: "Allows you to set the time before Discord goes idle (or disable auto-idle)", + description: t("customIdle.description"), authors: [Devs.newwares], settings, patches: [ @@ -60,13 +61,13 @@ export default definePlugin({ return; } - const backOnlineMessage = "Welcome back! Click the button to go online. Click the X to stay idle until reload."; + const backOnlineMessage = t("customIdle.ui.backOnlineMessage"); if ( currentNotice?.[1] === backOnlineMessage || noticesQueue.some(([, noticeMessage]) => noticeMessage === backOnlineMessage) ) return; - showNotice(backOnlineMessage, "Exit idle", () => { + showNotice(backOnlineMessage, t("customIdle.ui.exitIdle"), () => { popNotice(); FluxDispatcher.dispatch({ type: "IDLE", diff --git a/src/plugins/devCompanion.dev/index.tsx b/src/plugins/devCompanion.dev/index.tsx index 43449840c..1912507f9 100644 --- a/src/plugins/devCompanion.dev/index.tsx +++ b/src/plugins/devCompanion.dev/index.tsx @@ -20,6 +20,7 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { Logger } from "@utils/Logger"; import definePlugin, { OptionType, ReporterTestable } from "@utils/types"; +import { t } from "@utils/translation"; import { initWs, socket, stopWs } from "./initWs"; export const PORT = 8485; @@ -29,17 +30,17 @@ export const logger = new Logger("DevCompanion"); export const settings = definePluginSettings({ notifyOnAutoConnect: { - description: "Whether to notify when Dev Companion has automatically connected.", + description: t("devCompanion.settings.notifyOnAutoConnect"), type: OptionType.BOOLEAN, default: true }, usePatchedModule: { - description: "On extract requests, reply with the current patched module (if it is patched) instead of the original.", + description: t("devCompanion.settings.usePatchedModule"), default: true, type: OptionType.BOOLEAN, }, reloadAfterToggle: { - description: "Reload after a disable/enable plugin command is recived.", + description: t("devCompanion.settings.reloadAfterToggle"), default: true, type: OptionType.BOOLEAN } @@ -47,7 +48,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "DevCompanion", - description: "Dev Companion Plugin. Please report anything not working or being weird (most likely its a bug) to sadan, either ping or dm, thanks!", + description: t("devCompanion.description"), authors: [Devs.Ven, Devs.sadan], reporterTestable: ReporterTestable.None, isModified: true, diff --git a/src/plugins/disableCallIdle/index.ts b/src/plugins/disableCallIdle/index.ts index 216f1218c..da976a489 100644 --- a/src/plugins/disableCallIdle/index.ts +++ b/src/plugins/disableCallIdle/index.ts @@ -17,11 +17,12 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "DisableCallIdle", - description: "Disables automatically getting kicked from a DM voice call after 3 minutes and being moved to an AFK voice channel.", + description: t("disableCallIdle.description"), authors: [Devs.Nuckyz], patches: [ { diff --git a/src/plugins/dontRoundMyTimestamps/index.ts b/src/plugins/dontRoundMyTimestamps/index.ts index 4c432c73f..3367b4314 100644 --- a/src/plugins/dontRoundMyTimestamps/index.ts +++ b/src/plugins/dontRoundMyTimestamps/index.ts @@ -17,13 +17,14 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; import { moment } from "@webpack/common"; export default definePlugin({ name: "DontRoundMyTimestamps", authors: [Devs.Lexi], - description: "Always rounds relative timestamps down, so 7.6y becomes 7y instead of 8y", + description: t("dontRoundMyTimestamps.description"), start() { moment.relativeTimeRounding(Math.floor); diff --git a/src/plugins/f8break/index.ts b/src/plugins/f8break/index.ts index 89dd2c92f..6b728f8bb 100644 --- a/src/plugins/f8break/index.ts +++ b/src/plugins/f8break/index.ts @@ -17,11 +17,12 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "F8Break", - description: "Pause the client when you press F8 with DevTools (+ breakpoints) open.", + description: t("f8break.description"), authors: [Devs.lewisakura], start() { diff --git a/src/plugins/favEmojiFirst/components/modals/ClearAliasesConfirmModal.tsx b/src/plugins/favEmojiFirst/components/modals/ClearAliasesConfirmModal.tsx index dac9f4022..38a10a153 100644 --- a/src/plugins/favEmojiFirst/components/modals/ClearAliasesConfirmModal.tsx +++ b/src/plugins/favEmojiFirst/components/modals/ClearAliasesConfirmModal.tsx @@ -8,6 +8,7 @@ import { Button } from "@components/Button"; import { Heading } from "@components/Heading"; import { Paragraph } from "@components/Paragraph"; import { ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalRoot, ModalSize } from "@utils/modal"; +import { t } from "@utils/translation"; import { ClearAliasesConfirmModalProps } from "./types"; @@ -15,11 +16,11 @@ export function ClearAliasesConfirmModal({ modalProps, onConfirm }: ClearAliases return ( - Delete all aliases + {t("favEmojiFirst.ui.confirmModal.title")} - This will remove every emoji alias you saved. + {t("favEmojiFirst.ui.confirmModal.description")} diff --git a/src/plugins/favEmojiFirst/components/modals/SetAliasModal.tsx b/src/plugins/favEmojiFirst/components/modals/SetAliasModal.tsx index 19e0fddd6..3d6f795c1 100644 --- a/src/plugins/favEmojiFirst/components/modals/SetAliasModal.tsx +++ b/src/plugins/favEmojiFirst/components/modals/SetAliasModal.tsx @@ -9,6 +9,7 @@ import { Button } from "@components/Button"; import { Heading } from "@components/Heading"; import { Paragraph } from "@components/Paragraph"; import { ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalRoot, ModalSize } from "@utils/modal"; +import { t } from "@utils/translation"; import { TextInput, useState } from "@webpack/common"; import { SetAliasModalProps } from "./types"; @@ -26,25 +27,25 @@ export function SetAliasModal({ const validationError = getValidationError(input); const duplicateAlias = isDuplicateAlias(input); - const finalError = duplicateAlias ? "Duplicate alias" : error ?? validationError; + const finalError = duplicateAlias ? t("favEmojiFirst.ui.duplicateAlias") : error ?? validationError; const canSave = !validationError && !duplicateAlias; return ( - Set alias + {t("favEmojiFirst.ui.modal.setTitle")} - Set an alias for {emojiDisplayName} + {t("favEmojiFirst.ui.modal.setDescription", { emoji: emojiDisplayName })} { setInput(value); setError(null); }} - placeholder='Alias, e.g. "sob"' + placeholder={t("favEmojiFirst.ui.modal.placeholder")} /> {finalError && ( @@ -66,7 +67,7 @@ export function SetAliasModal({ modalProps.onClose(); }} > - Save + {t("favEmojiFirst.ui.modal.save")} diff --git a/src/plugins/favEmojiFirst/index.tsx b/src/plugins/favEmojiFirst/index.tsx index f369023c5..9462a1498 100644 --- a/src/plugins/favEmojiFirst/index.tsx +++ b/src/plugins/favEmojiFirst/index.tsx @@ -16,6 +16,7 @@ import { Devs, EquicordDevs } from "@utils/constants"; import { classNameFactory } from "@utils/css"; import { Logger } from "@utils/Logger"; import { openModal } from "@utils/modal"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; import { Emoji, Message } from "@vencord/discord-types"; import { findByPropsLazy, findExportedComponentLazy } from "@webpack"; @@ -111,12 +112,12 @@ const aliasResultCache = new Map(); const settings = definePluginSettings({ aliases: { type: OptionType.COMPONENT, - description: "Manage your emoji aliases.", + description: t("favEmojiFirst.settings.aliases"), component: AliasListSetting }, clearAll: { type: OptionType.COMPONENT, - description: "Delete all aliases.", + description: t("favEmojiFirst.settings.clearAll"), component: ClearAllAliasesSetting } }); @@ -149,8 +150,8 @@ function normalizeEmojiNameForCompare(input: string | undefined): string { function getAliasValidationError(input: string): string | null { const normalized = normalizeAlias(input); - if (!normalized.length) return "Alias is required."; - if (!/^[a-z0-9_]{2,32}$/.test(normalized)) return "Alias must be 2-32 characters and only use lowercase letters, numbers, or underscores."; + if (!normalized.length) return t("favEmojiFirst.ui.aliasRequired"); + if (!/^[a-z0-9_]{2,32}$/.test(normalized)) return t("favEmojiFirst.ui.aliasValidation"); return null; } @@ -661,7 +662,7 @@ async function saveAlias(aliasInput: string, ref: StoredEmojiRef): Promise<{ ok: const existing = aliasMap[alias]; if (existing && !isSameEmoji(existing, ref)) { - return { ok: false, error: "Duplicate alias" }; + return { ok: false, error: t("favEmojiFirst.ui.duplicateAlias") }; } const normalizedRef = ref.kind === "unicode" @@ -685,12 +686,12 @@ async function saveAlias(aliasInput: string, ref: StoredEmojiRef): Promise<{ ok: return { ok: true }; } catch (error) { logger.error("Failed to save emoji alias.", error); - return { ok: false, error: "Failed to save alias." }; + return { ok: false, error: t("favEmojiFirst.ui.failedToSave") }; } } function getAliasMenuLabel(ref: StoredEmojiRef): string { - return getExistingAliasForEmoji(ref) ? "Edit alias" : "Set alias"; + return getExistingAliasForEmoji(ref) ? t("favEmojiFirst.ui.editAlias") : t("favEmojiFirst.ui.setAlias"); } async function removeAlias(alias: string) { @@ -703,14 +704,14 @@ async function removeAlias(alias: string) { await persistAliases(nextMap); Toasts.show({ id: Toasts.genId(), - message: `Removed alias :${alias}:`, + message: t("favEmojiFirst.ui.removedAlias", { alias }), type: Toasts.Type.SUCCESS }); } catch (error) { logger.error("Failed to remove emoji alias.", error); Toasts.show({ id: Toasts.genId(), - message: "Failed to remove alias.", + message: t("favEmojiFirst.ui.failedToRemove"), type: Toasts.Type.FAILURE }); } @@ -723,14 +724,14 @@ async function clearAliases() { await persistAliases({}); Toasts.show({ id: Toasts.genId(), - message: "Deleted all emoji aliases.", + message: t("favEmojiFirst.ui.deletedAllAliases"), type: Toasts.Type.SUCCESS }); } catch (error) { logger.error("Failed to clear emoji aliases.", error); Toasts.show({ id: Toasts.genId(), - message: "Failed to delete aliases.", + message: t("favEmojiFirst.ui.failedToDelete"), type: Toasts.Type.FAILURE }); } @@ -753,7 +754,7 @@ function openSetAliasModal(ref: StoredEmojiRef) { if (!result.ok) return result; Toasts.show({ id: Toasts.genId(), - message: `Alias set for ${getEmojiDisplayName(ref)}.`, + message: t("favEmojiFirst.ui.aliasSetFor", { emoji: getEmojiDisplayName(ref) }), type: Toasts.Type.SUCCESS }); return result; @@ -1020,7 +1021,7 @@ function AliasRow({ alias, emojiRef }: { alias: string; emojiRef: StoredEmojiRef > - + ); @@ -1034,7 +1035,7 @@ function AliasListSetting() { const entries = getAliasMapEntries(); if (!entries.length) { - return No aliases set yet.; + return {t("favEmojiFirst.ui.noAliasesYet")}; } return ( @@ -1055,7 +1056,7 @@ function ClearAllAliasesSetting() { return ( ); } @@ -1102,7 +1103,7 @@ export default definePlugin({ name: "FavoriteEmojiFirst", authors: [Devs.Aria, Devs.Ven, EquicordDevs.justjxke], tags: ["EmojiAlias"], - description: "Puts your favorite emoji first in the emoji autocomplete and also has emoji alias.", + description: t("favEmojiFirst.description"), settings, contextMenus: { "expression-picker": expressionPickerPatch, diff --git a/src/plugins/fixCodeblockGap/index.ts b/src/plugins/fixCodeblockGap/index.ts index d65d83dc7..ffc481fac 100644 --- a/src/plugins/fixCodeblockGap/index.ts +++ b/src/plugins/fixCodeblockGap/index.ts @@ -5,11 +5,12 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "FixCodeblockGap", - description: "Removes the gap between codeblocks and text below it", + description: t("fixCodeblockGap.description"), authors: [Devs.Grzesiek11], patches: [ { diff --git a/src/plugins/fixSpotifyEmbeds.desktop/index.tsx b/src/plugins/fixSpotifyEmbeds.desktop/index.tsx index c5b42742a..be6927f12 100644 --- a/src/plugins/fixSpotifyEmbeds.desktop/index.tsx +++ b/src/plugins/fixSpotifyEmbeds.desktop/index.tsx @@ -6,22 +6,22 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin, { makeRange, OptionType } from "@utils/types"; const settings = definePluginSettings({ volume: { type: OptionType.SLIDER, - description: "The volume % to set for spotify embeds. Anything above 10% is veeeery loud", + description: t("fixSpotifyEmbeds.settings.volume"), markers: makeRange(0, 100, 10), stickToMarkers: false, default: 10 } }); -// The entire code of this plugin can be found in ipcPlugins export default definePlugin({ name: "FixSpotifyEmbeds", - description: "Fixes spotify embeds being incredibly loud by letting you customise the volume", + description: t("fixSpotifyEmbeds.description"), authors: [Devs.Ven], settings, }); diff --git a/src/plugins/fixYoutubeEmbeds.desktop/index.ts b/src/plugins/fixYoutubeEmbeds.desktop/index.ts index 55486d763..5278ea5c3 100644 --- a/src/plugins/fixYoutubeEmbeds.desktop/index.ts +++ b/src/plugins/fixYoutubeEmbeds.desktop/index.ts @@ -5,10 +5,11 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "FixYoutubeEmbeds", - description: "Bypasses youtube videos being blocked from display on Discord (for example by UMG)", + description: t("fixYoutubeEmbeds.description"), authors: [Devs.coolelectronics] }); diff --git a/src/plugins/forceOwnerCrown/index.ts b/src/plugins/forceOwnerCrown/index.ts index f7e4b4701..2c53d656d 100644 --- a/src/plugins/forceOwnerCrown/index.ts +++ b/src/plugins/forceOwnerCrown/index.ts @@ -17,13 +17,14 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; import { Channel, User } from "@vencord/discord-types"; import { GuildStore } from "@webpack/common"; export default definePlugin({ name: "ForceOwnerCrown", - description: "Force the owner crown next to usernames even if the server is large.", + description: t("forceOwnerCrown.description"), authors: [Devs.D3SOX, Devs.Nickyux], patches: [ { diff --git a/src/plugins/friendInvites/index.ts b/src/plugins/friendInvites/index.ts index 0af611bc9..2cb21934b 100644 --- a/src/plugins/friendInvites/index.ts +++ b/src/plugins/friendInvites/index.ts @@ -18,6 +18,7 @@ import { ApplicationCommandInputType, sendBotMessage } from "@api/Commands"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; import { findByPropsLazy } from "@webpack"; @@ -25,12 +26,12 @@ const FriendInvites = findByPropsLazy("createFriendInvite"); export default definePlugin({ name: "FriendInvites", - description: "Create and manage friend invite links via slash commands (/create friend invite, /view friend invites, /revoke friend invites).", + description: t("friendInvites.description"), authors: [Devs.afn, Devs.Dziurwa], commands: [ { name: "create friend invite", - description: "Generates a friend invite link.", + description: t("friendInvites.commands.createFriendInvite.description"), inputType: ApplicationCommandInputType.BUILT_IN, execute: async (args, ctx) => { @@ -39,40 +40,40 @@ export default definePlugin({ sendBotMessage(ctx.channel.id, { content: ` discord.gg/${invite.code} · - Expires: · - Max uses: \`${invite.max_uses}\` + ${t("friendInvites.ui.expires")} · + ${t("friendInvites.ui.maxUses")} \`${invite.max_uses}\` `.trim().replace(/\s+/g, " ") }); } }, { name: "view friend invites", - description: "View a list of all generated friend invites.", + description: t("friendInvites.commands.viewFriendInvites.description"), inputType: ApplicationCommandInputType.BUILT_IN, execute: async (_, ctx) => { const invites = await FriendInvites.getAllFriendInvites(); const friendInviteList = invites.map(i => ` _discord.gg/${i.code}_ · - Expires: · - Times used: \`${i.uses}/${i.max_uses}\` + ${t("friendInvites.ui.expires")} · + ${t("friendInvites.ui.timesUsed")} \`${i.uses}/${i.max_uses}\` `.trim().replace(/\s+/g, " ") ); sendBotMessage(ctx.channel.id, { - content: friendInviteList.join("\n") || "You have no active friend invites!" + content: friendInviteList.join("\n") || t("friendInvites.ui.noActiveInvites") }); }, }, { name: "revoke friend invites", - description: "Revokes all generated friend invites.", + description: t("friendInvites.commands.revokeFriendInvites.description"), inputType: ApplicationCommandInputType.BUILT_IN, execute: async (_, ctx) => { await FriendInvites.revokeFriendInvites(); sendBotMessage(ctx.channel.id, { - content: "All friend invites have been revoked." + content: t("friendInvites.ui.allRevoked") }); }, }, diff --git a/src/plugins/fullSearchContext/index.tsx b/src/plugins/fullSearchContext/index.tsx index 2f20cd53b..b260d81f7 100644 --- a/src/plugins/fullSearchContext/index.tsx +++ b/src/plugins/fullSearchContext/index.tsx @@ -21,6 +21,7 @@ import { migratePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { getIntlMessage } from "@utils/discord"; import { NoopComponent } from "@utils/react"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; import { Message } from "@vencord/discord-types"; import { filters, findByCodeLazy, waitFor } from "@webpack"; @@ -80,7 +81,7 @@ const contextMenuPatch: NavContextMenuPatchCallback = (children, props: MessageA migratePluginSettings("FullSearchContext", "SearchReply"); export default definePlugin({ name: "FullSearchContext", - description: "Makes the message context menu in message search results have all options you'd expect", + description: t("fullSearchContext.description"), authors: [Devs.Ven, Devs.Aria], patches: [{ diff --git a/src/plugins/fullUserInChatbox/index.tsx b/src/plugins/fullUserInChatbox/index.tsx index 9ac4f811d..a9ef44a40 100644 --- a/src/plugins/fullUserInChatbox/index.tsx +++ b/src/plugins/fullUserInChatbox/index.tsx @@ -6,6 +6,7 @@ import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; import { findComponentByCodeLazy } from "@webpack"; import { UserStore, useStateFromStores } from "@webpack/common"; @@ -22,7 +23,7 @@ interface UserMentionComponentProps { export default definePlugin({ name: "FullUserInChatbox", - description: "Makes the user mention in the chatbox have more functionalities, like left/right clicking", + description: t("fullUserInChatbox.description"), authors: [Devs.sadan], patches: [ diff --git a/src/plugins/gifPaste/index.ts b/src/plugins/gifPaste/index.ts index 65ea464c4..e86f7be86 100644 --- a/src/plugins/gifPaste/index.ts +++ b/src/plugins/gifPaste/index.ts @@ -20,12 +20,13 @@ import { isPluginEnabled } from "@api/PluginManager"; import betterGifPicker from "@plugins/betterGifPicker"; import { Devs } from "@utils/constants"; import { insertTextIntoChatInputBox } from "@utils/discord"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; import { ExpressionPickerStore } from "@webpack/common"; export default definePlugin({ name: "GifPaste", - description: "Makes picking a gif in the gif picker insert a link into the chatbox instead of instantly sending it", + description: t("gifPaste.description"), authors: [Devs.Ven], patches: [{ diff --git a/src/plugins/iLoveSpam/index.ts b/src/plugins/iLoveSpam/index.ts index 2e574cb46..a00158f83 100644 --- a/src/plugins/iLoveSpam/index.ts +++ b/src/plugins/iLoveSpam/index.ts @@ -18,12 +18,13 @@ import { migratePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; migratePluginSettings("IloveSpam", "iLoveSpam"); export default definePlugin({ name: "ILoveSpam", - description: "Do not hide messages from 'likely spammers'", + description: t("iLoveSpam.description"), authors: [Devs.botato, Devs.Nyako], patches: [ { diff --git a/src/plugins/imageFilename/index.ts b/src/plugins/imageFilename/index.ts index 77717e5b5..8baf195c6 100644 --- a/src/plugins/imageFilename/index.ts +++ b/src/plugins/imageFilename/index.ts @@ -7,13 +7,14 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; +import { t } from "@utils/translation"; const ImageExtensionRe = /\.(png|jpg|jpeg|gif|webp|avif)$/i; const GifHostRegex = /^(.+?\.)?(tenor|giphy|imgur)\.com$/i; const settings = definePluginSettings({ showFullUrl: { - description: "Show the full URL of the image instead of just the file name. Always enabled for GIFs because they usually have no meaningful file name", + description: t("imageFilename.settings.showFullUrl"), type: OptionType.BOOLEAN, default: false, }, @@ -22,7 +23,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "ImageFilename", authors: [Devs.Ven], - description: "Display the file name of images & GIFs as a tooltip when hovering over them", + description: t("imageFilename.description"), settings, patches: [ diff --git a/src/plugins/imageLink/index.ts b/src/plugins/imageLink/index.ts index 08d3a0247..c50adc1a8 100644 --- a/src/plugins/imageLink/index.ts +++ b/src/plugins/imageLink/index.ts @@ -6,10 +6,11 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; export default definePlugin({ name: "ImageLink", - description: "Never hide image links in messages, even if it's the only content", + description: t("imageLink.description"), authors: [Devs.Kyuuhachi, Devs.Sqaaakoi], patches: [ diff --git a/src/plugins/implicitRelationships/index.ts b/src/plugins/implicitRelationships/index.ts index 9c681386c..7f1e7d926 100644 --- a/src/plugins/implicitRelationships/index.ts +++ b/src/plugins/implicitRelationships/index.ts @@ -20,6 +20,7 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { Logger } from "@utils/Logger"; import definePlugin, { OptionType } from "@utils/types"; +import { t } from "@utils/translation"; import { findStoreLazy } from "@webpack"; import { Constants, FluxDispatcher, GuildStore, RelationshipStore, SnowflakeUtils, UserStore } from "@webpack/common"; import { Settings } from "Vencord"; @@ -28,7 +29,7 @@ const UserAffinitiesStore = findStoreLazy("UserAffinitiesV2Store"); export default definePlugin({ name: "ImplicitRelationships", - description: "Shows your implicit relationships in the Friends tab.", + description: t("implicitRelationships.description"), authors: [Devs.Dolfies], patches: [ // Counts header @@ -36,7 +37,7 @@ export default definePlugin({ find: "#{intl::FRIENDS_ALL_HEADER}", replacement: { match: /toString\(\)\}\);case (\i\.\i)\.PENDING/, - replace: 'toString()});case $1.IMPLICIT:return "Implicit — "+arguments[1];case $1.BLOCKED' + replace: `toString()});case $1.IMPLICIT:return "${t("implicitRelationships.ui.implicitHeader").replace("{count}", '"+arguments[1]+"')}";case $1.BLOCKED` }, }, // No friends page @@ -52,7 +53,7 @@ export default definePlugin({ find: "#{intl::FRIENDS_SECTION_ONLINE}),className:", replacement: { match: /,{id:(\i\.\i)\.PENDING,show:.+?className:(\i\.\i)(?=\},\{id:)/, - replace: (rest, relationShipTypes, className) => `,{id:${relationShipTypes}.IMPLICIT,show:true,className:${className},content:"Implicit"}${rest}` + replace: (rest, relationShipTypes, className) => `,{id:${relationShipTypes}.IMPLICIT,show:true,className:${className},content:"${t("implicitRelationships.ui.implicitSection")}"}${rest}` } }, // Sections content @@ -110,7 +111,7 @@ export default definePlugin({ sortByAffinity: { type: OptionType.BOOLEAN, default: true, - description: "Whether to sort implicit relationships by their affinity to you.", + description: t("implicitRelationships.settings.sortByAffinity"), restartNeeded: true }, } diff --git a/src/plugins/noDeepLinks.web/index.ts b/src/plugins/noDeepLinks.web/index.ts index 019df659a..7e4b2389f 100644 --- a/src/plugins/noDeepLinks.web/index.ts +++ b/src/plugins/noDeepLinks.web/index.ts @@ -5,11 +5,12 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "DisableDeepLinks", - description: "Disables Discord's stupid deep linking feature which tries to force you to use their Desktop App", + description: t("noDeepLinks.description"), authors: [Devs.Ven], required: true, diff --git a/src/plugins/noSystemBadge.discordDesktop/index.ts b/src/plugins/noSystemBadge.discordDesktop/index.ts index 0fbb5332a..ae511aff6 100644 --- a/src/plugins/noSystemBadge.discordDesktop/index.ts +++ b/src/plugins/noSystemBadge.discordDesktop/index.ts @@ -17,11 +17,12 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; export default definePlugin({ name: "NoSystemBadge", - description: "Disables the taskbar and system tray unread count badge.", + description: t("noSystemBadge.description"), authors: [Devs.rushii], patches: [ { diff --git a/src/plugins/relationshipNotifier/index.ts b/src/plugins/relationshipNotifier/index.ts index d913dde48..08a3a001b 100644 --- a/src/plugins/relationshipNotifier/index.ts +++ b/src/plugins/relationshipNotifier/index.ts @@ -17,6 +17,7 @@ */ import { Devs } from "@utils/constants"; +import { t } from "@utils/translation"; import definePlugin from "@utils/types"; import { onChannelDelete, onGuildDelete, onRelationshipRemove, removeFriend, removeGroup, removeGuild } from "./functions"; @@ -25,7 +26,7 @@ import { syncAndRunChecks, syncFriends, syncGroups, syncGuilds } from "./utils"; export default definePlugin({ name: "RelationshipNotifier", - description: "Notifies you when a friend, group chat, or server removes you.", + description: t("relationshipNotifier.description"), authors: [Devs.nick], settings, diff --git a/src/plugins/relationshipNotifier/utils.ts b/src/plugins/relationshipNotifier/utils.ts index 24c7cdefc..d50b6f00c 100644 --- a/src/plugins/relationshipNotifier/utils.ts +++ b/src/plugins/relationshipNotifier/utils.ts @@ -20,6 +20,7 @@ import * as DataStore from "@api/DataStore"; import { popNotice, showNotice } from "@api/Notices"; import { showNotification } from "@api/Notifications"; import { getUniqueUsername, openUserProfile } from "@utils/discord"; +import { t } from "@utils/translation"; import { FluxStore } from "@vencord/discord-types"; import { ChannelType, RelationshipType } from "@vencord/discord-types/enums"; import { findStoreLazy } from "@webpack"; @@ -66,14 +67,14 @@ export async function syncAndRunChecks() { if (settings.store.groups && oldGroups?.size) { for (const [id, group] of oldGroups) { if (!groups.has(id)) - notify(`You are no longer in the group ${group.name}.`, group.iconURL); + notify(t("relationshipNotifier.offlineGroupRemoved", { name: group.name }), group.iconURL); } } if (settings.store.servers && oldGuilds?.size) { for (const [id, guild] of oldGuilds) { if (!guilds.has(id) && !GuildAvailabilityStore.isUnavailable(id)) - notify(`You are no longer in the server ${guild.name}.`, guild.iconURL); + notify(t("relationshipNotifier.offlineServerRemoved", { name: guild.name }), guild.iconURL); } } @@ -84,7 +85,7 @@ export async function syncAndRunChecks() { const user = await UserUtils.getUser(id).catch(() => void 0); if (user) notify( - `You are no longer friends with ${getUniqueUsername(user)}.`, + t("relationshipNotifier.offlineFriendRemoved", { username: getUniqueUsername(user) }), user.getAvatarURL(undefined, undefined, false), () => openUserProfile(user.id) ); @@ -101,7 +102,7 @@ export async function syncAndRunChecks() { const user = await UserUtils.getUser(id).catch(() => void 0); if (user) notify( - `Friend request from ${getUniqueUsername(user)} has been revoked.`, + t("relationshipNotifier.offlineFriendRequestRevoked", { username: getUniqueUsername(user) }), user.getAvatarURL(undefined, undefined, false), () => openUserProfile(user.id) ); @@ -115,7 +116,7 @@ export function notify(text: string, icon?: string, onClick?: () => void) { showNotice(text, "OK", () => popNotice()); showNotification({ - title: "Relationship Notifier", + title: t("relationshipNotifier.notificationTitle"), body: text, icon, onClick diff --git a/src/plugins/secretRingTone/index.ts b/src/plugins/secretRingTone/index.ts index f2913afd1..4288af379 100644 --- a/src/plugins/secretRingTone/index.ts +++ b/src/plugins/secretRingTone/index.ts @@ -7,11 +7,12 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; +import { t } from "@utils/translation"; const settings = definePluginSettings({ onlySnow: { type: OptionType.BOOLEAN, - description: "Only play the Snow Halation Theme", + description: t("secretRingTone.settings.onlySnow"), default: false, restartNeeded: true } @@ -19,7 +20,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "SecretRingToneEnabler", - description: "Always play the secret version of the discord ringtone (except during special ringtone events)", + description: t("secretRingTone.description"), authors: [Devs.AndrewDLO, Devs.FieryFlames, Devs.RamziAH], settings, patches: [ diff --git a/src/plugins/shikiCodeblocks.desktop/index.ts b/src/plugins/shikiCodeblocks.desktop/index.ts index ea333f655..7a1669142 100644 --- a/src/plugins/shikiCodeblocks.desktop/index.ts +++ b/src/plugins/shikiCodeblocks.desktop/index.ts @@ -21,6 +21,7 @@ import "./shiki.css"; import { enableStyle } from "@api/Styles"; import { Devs } from "@utils/constants"; import definePlugin, { ReporterTestable } from "@utils/types"; +import { t } from "@utils/translation"; import previewExampleText from "file://previewExample.tsx"; import { shiki } from "./api/shiki"; @@ -32,7 +33,7 @@ import { clearStyles } from "./utils/createStyle"; export default definePlugin({ name: "ShikiCodeblocks", - description: "Brings vscode-style codeblocks into Discord, powered by Shiki", + description: t("shikiCodeblocks.description"), authors: [Devs.Vap], reporterTestable: ReporterTestable.Patches, settings, diff --git a/src/plugins/shikiCodeblocks.desktop/settings.ts b/src/plugins/shikiCodeblocks.desktop/settings.ts index b4a0dc464..15f1970cb 100644 --- a/src/plugins/shikiCodeblocks.desktop/settings.ts +++ b/src/plugins/shikiCodeblocks.desktop/settings.ts @@ -21,6 +21,7 @@ import { disableStyle, enableStyle } from "@api/Styles"; import { parseUrl } from "@utils/misc"; import { wordsFromPascal, wordsToTitle } from "@utils/text"; import { OptionType } from "@utils/types"; +import { t } from "@utils/translation"; import { shiki } from "./api/shiki"; import { themes } from "./api/themes"; @@ -33,7 +34,7 @@ export type ShikiSettings = typeof settings.store; export const settings = definePluginSettings({ theme: { type: OptionType.SELECT, - description: "Default themes", + description: t("shikiCodeblocks.settings.theme"), options: themeNames.map(themeName => ({ label: wordsToTitle(wordsFromPascal(themeName)), value: themes[themeName], @@ -43,7 +44,7 @@ export const settings = definePluginSettings({ }, customTheme: { type: OptionType.STRING, - description: "A link to a custom vscode theme", + description: t("shikiCodeblocks.settings.customTheme"), placeholder: themes.MaterialCandy, onChange: value => { shiki.setTheme(value || settings.store.theme); @@ -51,42 +52,42 @@ export const settings = definePluginSettings({ }, tryHljs: { type: OptionType.SELECT, - description: "Use the more lightweight default Discord highlighter and theme.", + description: t("shikiCodeblocks.settings.tryHljs"), options: [ { - label: "Never", + label: t("shikiCodeblocks.settings.tryHljsOptions.never"), value: HljsSetting.Never, }, { - label: "Prefer Shiki instead of Highlight.js", + label: t("shikiCodeblocks.settings.tryHljsOptions.preferShiki"), value: HljsSetting.Secondary, default: true, }, { - label: "Prefer Highlight.js instead of Shiki", + label: t("shikiCodeblocks.settings.tryHljsOptions.preferHljs"), value: HljsSetting.Primary, }, { - label: "Always", + label: t("shikiCodeblocks.settings.tryHljsOptions.always"), value: HljsSetting.Always, }, ], }, useDevIcon: { type: OptionType.SELECT, - description: "How to show language icons on codeblocks", + description: t("shikiCodeblocks.settings.useDevIcon"), options: [ { - label: "Disabled", + label: t("shikiCodeblocks.settings.useDevIconOptions.disabled"), value: DeviconSetting.Disabled, }, { - label: "Colorless", + label: t("shikiCodeblocks.settings.useDevIconOptions.colorless"), value: DeviconSetting.Greyscale, default: true, }, { - label: "Colored", + label: t("shikiCodeblocks.settings.useDevIconOptions.colored"), value: DeviconSetting.Color, }, ], @@ -97,7 +98,7 @@ export const settings = definePluginSettings({ }, bgOpacity: { type: OptionType.SLIDER, - description: "Background opacity", + description: t("shikiCodeblocks.settings.bgOpacity"), markers: [0, 20, 40, 60, 80, 100], default: 100, stickToMarkers: false, diff --git a/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx b/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx index d09c14b6a..420b43e0e 100644 --- a/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx +++ b/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx @@ -103,9 +103,9 @@ const getForumLayoutName = (layout: number) => { const getVideoQualityModeName = (mode: number) => { switch (mode) { - case VideoQualityModes.AUTO: return t("showHiddenChannels.videoQualityModes.automatic"); - case VideoQualityModes.FULL: return t("showHiddenChannels.videoQualityModes.720p"); - default: return t("showHiddenChannels.videoQualityModes.automatic"); + case VideoQualityModes.AUTO: return t("showHiddenChannels.videoQuality.automatic"); + case VideoQualityModes.FULL: return t("showHiddenChannels.videoQuality.720p"); + default: return t("showHiddenChannels.videoQuality.automatic"); } }; @@ -195,7 +195,7 @@ function HiddenChannelLockScreen({ channel }: { channel: Channel; }) { {(!channel.isGuildVoice() && !channel.isGuildStageVoice()) && ( - {t("showHiddenChannels.cannotSeeMessages", { type: channel.isForumChannel() ? t("showHiddenChannels.types.posts") : t("showHiddenChannels.types.messages") })} + {t("showHiddenChannels.cannotSeeMessages", { type: channel.isForumChannel() ? t("showHiddenChannels.channelTypes.posts") : t("showHiddenChannels.channelTypes.messages") })} {channel.isForumChannel() && topic && topic.length > 0 && ` ${t("showHiddenChannels.seeGuidelines")}`} )} @@ -208,7 +208,7 @@ function HiddenChannelLockScreen({ channel }: { channel: Channel; }) { {lastMessageId && - {t("showHiddenChannels.lastMessageCreated", { type: channel.isForumChannel() ? t("showHiddenChannels.types.post") : t("showHiddenChannels.types.message") })} + {t("showHiddenChannels.lastMessageCreated", { type: channel.isForumChannel() ? t("showHiddenChannels.channelTypes.post") : t("showHiddenChannels.channelTypes.message") })} } @@ -242,7 +242,7 @@ function HiddenChannelLockScreen({ channel }: { channel: Channel; }) { } {(defaultAutoArchiveDuration ?? 0) > 0 && - {t("showHiddenChannels.archiveDuration", { type: channel.isForumChannel() ? t("showHiddenChannels.types.posts") : t("showHiddenChannels.types.threads"), duration: formatDuration(defaultAutoArchiveDuration!, "minutes") })} + {t("showHiddenChannels.archiveDuration", { type: channel.isForumChannel() ? t("showHiddenChannels.channelTypes.posts") : t("showHiddenChannels.channelTypes.threads"), duration: formatDuration(defaultAutoArchiveDuration!, "minutes") })} } {defaultForumLayout != null && diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index eb5409e87..05e789633 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -23,6 +23,7 @@ import ErrorBoundary from "@components/ErrorBoundary"; import { Devs, EquicordDevs } from "@utils/constants"; import { classNameFactory } from "@utils/css"; import { classes } from "@utils/misc"; +import { t } from "@utils/translation"; import definePlugin, { OptionType } from "@utils/types"; import type { Channel, Role } from "@vencord/discord-types"; import { ChannelStore, PermissionsBits, PermissionStore, Tooltip } from "@webpack/common"; @@ -48,28 +49,28 @@ const CONNECT = 1n << 20n; export const settings = definePluginSettings({ channelStyle: { - description: "The style used to display hidden channels.", + description: t("showHiddenChannels.settings.channelStyle.description"), type: OptionType.SELECT, options: [ - { label: "Classic", value: ChannelStyle.Classic, default: true }, - { label: "Muted", value: ChannelStyle.Muted }, - { label: "Show Unreads", value: ChannelStyle.Unread }, - { label: "Muted and Show Unreads", value: ChannelStyle.MutedUnread } + { label: t("showHiddenChannels.settings.channelStyle.classic"), value: ChannelStyle.Classic, default: true }, + { label: t("showHiddenChannels.settings.channelStyle.muted"), value: ChannelStyle.Muted }, + { label: t("showHiddenChannels.settings.channelStyle.showUnreads"), value: ChannelStyle.Unread }, + { label: t("showHiddenChannels.settings.channelStyle.mutedAndShowUnreads"), value: ChannelStyle.MutedUnread } ], restartNeeded: true }, showMode: { - description: "The mode used to display hidden channels.", + description: t("showHiddenChannels.settings.showMode.description"), type: OptionType.SELECT, options: [ - { label: "Lock Icon replacing channel icon", value: ShowMode.LockIcon, default: true }, - { label: "Eye icon on the right", value: ShowMode.EyeIconRight }, - { label: "Lock icon on the right", value: ShowMode.LockIconRight } + { label: t("showHiddenChannels.settings.showMode.lockIcon"), value: ShowMode.LockIcon, default: true }, + { label: t("showHiddenChannels.settings.showMode.eyeIconRight"), value: ShowMode.EyeIconRight }, + { label: t("showHiddenChannels.settings.showMode.lockIconRight"), value: ShowMode.LockIconRight } ], restartNeeded: true }, defaultAllowedUsersAndRolesDropdownState: { - description: "Whether the allowed users and roles dropdown on hidden channels should be open by default", + description: t("showHiddenChannels.settings.defaultAllowedUsersAndRolesDropdownState.description"), type: OptionType.BOOLEAN, default: true } @@ -81,7 +82,7 @@ function isUncategorized(objChannel: { channel: Channel; comparator: number; }) export default definePlugin({ name: "ShowHiddenChannels", - description: "Show channels that you do not have access to view.", + description: t("showHiddenChannels.description"), authors: [Devs.BigDuck, Devs.AverageReactEnjoyer, Devs.D3SOX, Devs.Ven, Devs.Nuckyz, Devs.Nickyux, Devs.dzshn, EquicordDevs.Oggetto], isModified: true, settings, @@ -575,7 +576,7 @@ export default definePlugin({ ), { noop: true }), EyeRightIcon: ErrorBoundary.wrap(() => ( - + {({ onMouseLeave, onMouseEnter }) => ( ( - + {({ onMouseLeave, onMouseEnter }) => ( ({ @@ -30,15 +31,15 @@ const opt = (description: string) => ({ } satisfies PluginSettingDef); const settings = definePluginSettings({ - showTimeouts: opt("Show member timeout icons in chat."), - showInvitesPaused: opt("Show the invites paused tooltip in the server list."), - showModView: opt("Show the member mod view context menu item in all servers.") + showTimeouts: opt(t("showHiddenThings.settings.showTimeouts")), + showInvitesPaused: opt(t("showHiddenThings.settings.showInvitesPaused")), + showModView: opt(t("showHiddenThings.settings.showModView")) }); export default definePlugin({ name: "ShowHiddenThings", tags: ["ShowTimeouts", "ShowInvitesPaused", "ShowModView", "DisableDiscoveryFilters"], - description: "Displays various hidden & moderator-only things regardless of permissions.", + description: t("showHiddenThings.description"), authors: [Devs.Dolfies], settings, diff --git a/src/plugins/spotifyCrack/index.ts b/src/plugins/spotifyCrack/index.ts index 505e53a12..f5068444e 100644 --- a/src/plugins/spotifyCrack/index.ts +++ b/src/plugins/spotifyCrack/index.ts @@ -19,16 +19,17 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; +import { t } from "@utils/translation"; const settings = definePluginSettings({ noSpotifyAutoPause: { - description: "Disable Spotify auto-pause", + description: t("spotifyCrack.settings.noSpotifyAutoPause"), type: OptionType.BOOLEAN, default: true, restartNeeded: true }, keepSpotifyActivityOnIdle: { - description: "Keep Spotify activity playing when idling", + description: t("spotifyCrack.settings.keepSpotifyActivityOnIdle"), type: OptionType.BOOLEAN, default: false, restartNeeded: true @@ -37,7 +38,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "SpotifyCrack", - description: "Free listen along, no auto-pausing in voice chat, and allows activity to continue playing when idling", + description: t("spotifyCrack.description"), authors: [Devs.Cyn, Devs.Nuckyz], settings, diff --git a/src/plugins/spotifyShareCommands/index.ts b/src/plugins/spotifyShareCommands/index.ts index d00d4a2ca..b05fc7c32 100644 --- a/src/plugins/spotifyShareCommands/index.ts +++ b/src/plugins/spotifyShareCommands/index.ts @@ -20,6 +20,7 @@ import { ApplicationCommandInputType, findOption, OptionalMessageOption, sendBot import { Devs } from "@utils/constants"; import { sendMessage } from "@utils/discord"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; import { Command } from "@vencord/discord-types"; import { findByPropsLazy } from "@webpack"; import { FluxDispatcher, MessageActions } from "@webpack/common"; @@ -60,21 +61,21 @@ const PendingReplyStore = findByPropsLazy("getPendingReply"); function makeCommand(name: string, formatUrl: (track: Track) => string): Command { return { name, - description: `Share your current Spotify ${name} in chat`, + description: t("spotifyShareCommands.commands.shareDescription", { name }), inputType: ApplicationCommandInputType.BUILT_IN, options: [OptionalMessageOption], execute(options, { channel }) { const track: Track | null = Spotify.getTrack(); if (!track) { return sendBotMessage(channel.id, { - content: "You're not listening to any music." + content: t("spotifyShareCommands.commands.notListening") }); } // local tracks have an id of null if (track.id == null) { return sendBotMessage(channel.id, { - content: "Failed to find the track on spotify." + content: t("spotifyShareCommands.commands.trackNotFound") }); } @@ -98,7 +99,7 @@ function makeCommand(name: string, formatUrl: (track: Track) => string): Command export default definePlugin({ name: "SpotifyShareCommands", - description: "Share your current Spotify track, album or artist via slash command (/track, /album, /artist)", + description: t("spotifyShareCommands.description"), authors: [Devs.katlyn], commands: [ makeCommand("track", track => `https://open.spotify.com/track/${track.id}`), diff --git a/src/plugins/startupTimings/index.tsx b/src/plugins/startupTimings/index.tsx index 3b92c5f04..b85792027 100644 --- a/src/plugins/startupTimings/index.tsx +++ b/src/plugins/startupTimings/index.tsx @@ -21,17 +21,18 @@ import SettingsPlugin from "@plugins/_core/settings"; import { Devs } from "@utils/constants"; import { removeFromArray } from "@utils/misc"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; import StartupTimingPage from "./StartupTimingPage"; export default definePlugin({ name: "StartupTimings", - description: "Adds Startup Timings to the Settings menu", + description: t("startupTimings.description"), authors: [Devs.Megu], start() { SettingsPlugin.customEntries.push({ key: "vencord_startup_timings", - title: "Startup Timings", + title: t("startupTimings.ui.title"), Component: StartupTimingPage, Icon: ClockIcon }); diff --git a/src/plugins/stickerPaste/index.ts b/src/plugins/stickerPaste/index.ts index 8a0082073..603325d21 100644 --- a/src/plugins/stickerPaste/index.ts +++ b/src/plugins/stickerPaste/index.ts @@ -6,10 +6,11 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; export default definePlugin({ name: "StickerPaste", - description: "Makes picking a sticker in the sticker picker insert it into the chatbox instead of instantly sending", + description: t("stickerPaste.description"), authors: [Devs.ImBanana], patches: [ diff --git a/src/plugins/streamerModeOnStream/index.ts b/src/plugins/streamerModeOnStream/index.ts index 873e1fc72..c4dd31060 100644 --- a/src/plugins/streamerModeOnStream/index.ts +++ b/src/plugins/streamerModeOnStream/index.ts @@ -18,6 +18,7 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; import { FluxDispatcher, UserStore } from "@webpack/common"; interface StreamEvent { @@ -36,7 +37,7 @@ function toggleStreamerMode({ streamKey }: StreamEvent, value: boolean) { export default definePlugin({ name: "StreamerModeOn", - description: "Automatically enables streamer mode when you start streaming in Discord", + description: t("streamerModeOnStream.description"), authors: [Devs.Kodarru], flux: { STREAM_CREATE: d => toggleStreamerMode(d, true), diff --git a/src/plugins/superReactionTweaks/index.ts b/src/plugins/superReactionTweaks/index.ts index 577a0c87a..a53ea74a8 100644 --- a/src/plugins/superReactionTweaks/index.ts +++ b/src/plugins/superReactionTweaks/index.ts @@ -7,22 +7,23 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; +import { t } from "@utils/translation"; import { OverridePremiumTypeStore } from "@webpack/common"; export const settings = definePluginSettings({ superReactByDefault: { type: OptionType.BOOLEAN, - description: "Reaction picker will default to Super Reactions", + description: t("superReactionTweaks.settings.superReactByDefault"), default: true, }, unlimitedSuperReactionPlaying: { type: OptionType.BOOLEAN, - description: "Remove the limit on Super Reactions playing at once", + description: t("superReactionTweaks.settings.unlimitedSuperReactionPlaying"), default: false, }, superReactionPlayingLimit: { - description: "Max Super Reactions to play at once. 0 to disable playing Super Reactions", + description: t("superReactionTweaks.settings.superReactionPlayingLimit"), type: OptionType.SLIDER, default: 20, markers: [0, 5, 10, 20, 40, 60, 80, 100], @@ -36,7 +37,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "SuperReactionTweaks", - description: "Customize the limit of Super Reactions playing at once, and super react by default", + description: t("superReactionTweaks.description"), authors: [Devs.FieryFlames, Devs.ant0n], patches: [ { diff --git a/src/plugins/themeAttributes/index.ts b/src/plugins/themeAttributes/index.ts index e71dec0ad..745916c79 100644 --- a/src/plugins/themeAttributes/index.ts +++ b/src/plugins/themeAttributes/index.ts @@ -7,12 +7,13 @@ import { Devs } from "@utils/constants"; import { Logger } from "@utils/Logger"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; import { Message } from "@vencord/discord-types"; import { UserStore } from "@webpack/common"; export default definePlugin({ name: "ThemeAttributes", - description: "Adds data attributes to various elements for theming purposes", + description: t("themeAttributes.description"), authors: [Devs.Ven, Devs.Board], patches: [ diff --git a/src/plugins/unindent/index.ts b/src/plugins/unindent/index.ts index 1a548a68e..7f3cbfdd4 100644 --- a/src/plugins/unindent/index.ts +++ b/src/plugins/unindent/index.ts @@ -19,10 +19,11 @@ import { MessageObject } from "@api/MessageEvents"; import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; export default definePlugin({ name: "Unindent", - description: "Trims leading indentation from codeblocks", + description: t("unindent.description"), authors: [Devs.Ven], patches: [ diff --git a/src/plugins/unlockedAvatarZoom/index.ts b/src/plugins/unlockedAvatarZoom/index.ts index dc8de74db..1e83bdf1d 100644 --- a/src/plugins/unlockedAvatarZoom/index.ts +++ b/src/plugins/unlockedAvatarZoom/index.ts @@ -7,11 +7,12 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin, { makeRange, OptionType } from "@utils/types"; +import { t } from "@utils/translation"; const settings = definePluginSettings({ zoomMultiplier: { type: OptionType.SLIDER, - description: "Zoom multiplier", + description: t("unlockedAvatarZoom.settings.zoomMultiplier"), markers: makeRange(2, 16), default: 4, }, @@ -19,7 +20,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "UnlockedAvatarZoom", - description: "Allows you to zoom in further in the image crop tool when changing your avatar", + description: t("unlockedAvatarZoom.description"), authors: [Devs.nakoyasha], settings, patches: [ diff --git a/src/plugins/userMessagesPronouns/index.ts b/src/plugins/userMessagesPronouns/index.ts index 56721e11f..f6d9d246f 100644 --- a/src/plugins/userMessagesPronouns/index.ts +++ b/src/plugins/userMessagesPronouns/index.ts @@ -19,6 +19,7 @@ import { migratePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; import { CompactPronounsChatComponentWrapper, PronounsChatComponentWrapper } from "./PronounsChatComponent"; import { settings } from "./settings"; @@ -27,7 +28,7 @@ migratePluginSettings("UserMessagesPronouns", "PronounDB"); export default definePlugin({ name: "UserMessagesPronouns", authors: [Devs.Tyman, Devs.TheKodeToad, Devs.Ven, Devs.Elvyra], - description: "Adds pronouns to chat user messages", + description: t("userMessagesPronouns.description"), settings, patches: [ diff --git a/src/plugins/userMessagesPronouns/settings.ts b/src/plugins/userMessagesPronouns/settings.ts index bbbd50852..eda59840b 100644 --- a/src/plugins/userMessagesPronouns/settings.ts +++ b/src/plugins/userMessagesPronouns/settings.ts @@ -18,6 +18,7 @@ import { definePluginSettings } from "@api/Settings"; import { OptionType } from "@utils/types"; +import { t } from "@utils/translation"; export const enum PronounsFormat { Lowercase = "LOWERCASE", @@ -27,22 +28,22 @@ export const enum PronounsFormat { export const settings = definePluginSettings({ pronounsFormat: { type: OptionType.SELECT, - description: "The format for pronouns to appear in chat", + description: t("userMessagesPronouns.settings.pronounsFormat"), options: [ { - label: "Lowercase", + label: t("userMessagesPronouns.settings.pronounsFormatOptions.lowercase"), value: PronounsFormat.Lowercase, default: true }, { - label: "Capitalized", + label: t("userMessagesPronouns.settings.pronounsFormatOptions.capitalized"), value: PronounsFormat.Capitalized } ] }, showSelf: { type: OptionType.BOOLEAN, - description: "Enable or disable showing pronouns for yourself", + description: t("userMessagesPronouns.settings.showSelf"), default: true } }); diff --git a/src/plugins/validReply/index.ts b/src/plugins/validReply/index.ts index 2ca072040..f647a1a02 100644 --- a/src/plugins/validReply/index.ts +++ b/src/plugins/validReply/index.ts @@ -6,6 +6,7 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; import { Channel, Message, User } from "@vencord/discord-types"; import { findByCodeLazy } from "@webpack"; import { FluxDispatcher, RestAPI } from "@webpack/common"; @@ -32,7 +33,7 @@ const createMessageRecord = findByCodeLazy(".createFromServer(", ".isBlockedForM export default definePlugin({ name: "ValidReply", - description: 'Fixes "Message could not be loaded" upon hovering over the reply', + description: t("validReply.description"), authors: [Devs.newwares], patches: [ { diff --git a/src/plugins/validUser/index.tsx b/src/plugins/validUser/index.tsx index 2ff829a12..50c08fbd4 100644 --- a/src/plugins/validUser/index.tsx +++ b/src/plugins/validUser/index.tsx @@ -22,6 +22,7 @@ import { isNonNullish } from "@utils/guards"; import { sleep } from "@utils/misc"; import { Queue } from "@utils/Queue"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; import { ProfileBadge } from "@vencord/discord-types"; import { Constants, FluxDispatcher, RestAPI, UserProfileStore, UserStore, useState } from "@webpack/common"; import { type ComponentType, type ReactNode } from "react"; @@ -176,7 +177,7 @@ function MentionWrapper({ data, UserMention, RoleMention, parse, props }: Mentio export default definePlugin({ name: "ValidUser", - description: "Fix mentions for unknown users showing up as '@unknown-user' (hover over a mention to fix it)", + description: t("validUser.description"), authors: [Devs.Ven, Devs.Dolfies], tags: ["MentionCacheFix"], diff --git a/src/plugins/vcDoubleClick/index.ts b/src/plugins/vcDoubleClick/index.ts index d9310f51f..9332c76ff 100644 --- a/src/plugins/vcDoubleClick/index.ts +++ b/src/plugins/vcDoubleClick/index.ts @@ -18,6 +18,7 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { t } from "@utils/translation"; import { ChannelRouter, ChannelStore, SelectedChannelStore } from "@webpack/common"; const timers = {} as Record Date: Sun, 15 Feb 2026 14:22:54 -0500 Subject: [PATCH 3/6] New translations vencord.json (Ukrainian) --- i18n/uk-UA/vencord.json | 88 ++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/i18n/uk-UA/vencord.json b/i18n/uk-UA/vencord.json index 88462ffa4..3dbe61f8b 100644 --- a/i18n/uk-UA/vencord.json +++ b/i18n/uk-UA/vencord.json @@ -207,65 +207,65 @@ }, "reviewDB": { "settings": { - "authorize": "Authorize with ReviewDB", + "authorize": "Авторизуватися в ReviewDB", "notifyReviews": { - "description": "Notify about new reviews on startup" + "description": "Повідомляти про нові відгуки при запуску" }, "showWarning": { - "description": "Display warning to be respectful at the top of the reviews list" + "description": "Показувати заклик до взаємоповаги вгорі списку відгуків" }, "hideTimestamps": { - "description": "Hide timestamps on reviews" + "description": "Приховати відмітки часу на відгуках" }, "hideBlockedUsers": { - "description": "Hide reviews from blocked users" + "description": "Приховати відгуки від заблокованих користувачів" }, - "manageBlockedUsers": "Manage Blocked Users", - "supportDevelopment": "Support ReviewDB development", - "website": "ReviewDB website", - "supportServer": "ReviewDB Support Server" + "manageBlockedUsers": "Керування заблокованими користувачами", + "supportDevelopment": "Підтримати розробку ReviewDB", + "website": "Сайт ReviewDB", + "supportServer": "Сервер підтримки ReviewDB" }, - "viewReviews": "View Reviews", - "newReviews": "You have new reviews on your profile!", - "appeal": "Appeal", - "ok": "Ok", - "areYouSure": "Are you sure?", - "confirmDelete": "Do you really want to delete this review?", - "delete": "Delete", - "nevermind": "Nevermind", - "mustBeLoggedInDelete": "You must be logged in to delete reviews.", - "confirmReport": "Do you really want to report this review?", - "report": "Report", - "mustBeLoggedInReport": "You must be logged in to report reviews.", - "confirmBlock": "Do you really want to block this user? They will be unable to leave further reviews on your profile. You can unblock users in the plugin settings.", - "block": "Block", - "mustBeLoggedInBlock": "You must be logged in to block users.", - "system": "System", - "blockedUser": "You have blocked this user", - "readMore": "Read more", - "unblockUser": "Unblock user", - "failedToFetchBlocks": "Failed to fetch blocks: {error}", - "noBlockedUsers": "No blocked users.", - "blockedUsers": "Blocked Users", - "notLoggedIn": "You are not logged into ReviewDB!" + "viewReviews": "Переглянути Відгуки", + "newReviews": "На вашому профілі з'явилися нові відгуки!", + "appeal": "Апеляція", + "ok": "Ок", + "areYouSure": "Ви впевнені?", + "confirmDelete": "Ви дійсно хочете видалити цей відгук?", + "delete": "Видалити", + "nevermind": "Скасувати", + "mustBeLoggedInDelete": "Для видалення відгуків вам потрібно авторизуватись.", + "confirmReport": "Ви справді хочете поскаржитися на цей відгук?", + "report": "Поскаржитися", + "mustBeLoggedInReport": "Для подання скарги на відгуки необхідно авторизуватися.", + "confirmBlock": "Ви дійсно хочете заблокувати цього користувача? Вони не зможуть залишати подальші відгуки на ваш профіль. Ви можете розблокувати користувачів в налаштуваннях плагіну.", + "block": "Заблокувати", + "mustBeLoggedInBlock": "Для блокування користувачів на відгуки необхідно авторизуватися.", + "system": "Системне", + "blockedUser": "Ви заблокували цього користувача", + "readMore": "Читати далі", + "unblockUser": "Розблокувати користувача", + "failedToFetchBlocks": "Не вдалося завантажити заблокованих користувачів: {error}", + "noBlockedUsers": "Немає заблокованих користувачів.", + "blockedUsers": "Заблоковані користувачі", + "notLoggedIn": "Ви не авторизовані в ReviewDB!" }, "translate": { "autoTranslateEnabled": { - "title": "Equicord Auto-Translate Enabled", - "body": "You just enabled Auto Translate! Any message <0>will automatically be translated before being sent." + "title": "Автопереклад Equicord Увімкнено", + "body": "Ви щойно увімкнули Автопереклад! Ваші повідомлення <0>автоматично перекладатимуться перед відправленням." }, - "disableAutoTranslate": "Disable Auto-Translate", - "gotIt": "Got it", - "dontShowAgain": "Don't show again", - "openTranslateModal": "Open Translate Modal", - "autoTranslateEnabledLabel": "Auto Translate Enabled", - "translate": "Translate", - "selectLanguage": "Select a language", - "autoTranslate": "Auto Translate", - "modalTitle": "Translate" + "disableAutoTranslate": "Вимкнути Автопереклад", + "gotIt": "Зрозуміло", + "dontShowAgain": "Не показувати знову", + "openTranslateModal": "Відкрити Вікно Перекладу", + "autoTranslateEnabledLabel": "Автопереклад увімкнено", + "translate": "Перекласти", + "selectLanguage": "Обрати мову", + "autoTranslate": "Автопереклад", + "modalTitle": "Переклад" }, "voiceMessages": { - "send": "Send Voice Message", + "send": "Надіслати голосове повідомлення", "missingPermissions": "(Missing Permissions)", "recordModal": "Record Voice Message", "uploadFile": "Upload File", From 5ea2db4c606b377e30e01d23ec1519c5765ab231 Mon Sep 17 00:00:00 2001 From: thororen <78185467+thororen1234@users.noreply.github.com> Date: Sun, 15 Feb 2026 14:22:55 -0500 Subject: [PATCH 4/6] New translations equicord.json (Spanish) --- i18n/es-ES/equicord.json | 188 +++++++++++++++++++-------------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/i18n/es-ES/equicord.json b/i18n/es-ES/equicord.json index 4422007aa..de3599754 100644 --- a/i18n/es-ES/equicord.json +++ b/i18n/es-ES/equicord.json @@ -79,10 +79,10 @@ "betterInvites": { "description": "See invites expiration date, view inviter profile and preview servers before joining by clicking the name", "ui": { - "expireTooltip": "This invite will {expiry}", + "expireTooltip": "Esta invitación va a {expiry}", "expireWill": "expire", "notExpire": "not expire", - "invitedYouTo": "{inviter} te invitó a {guild}" + "invitedYouTo": "{inviter} Te invitó a {guild}" } }, "bypassStatus": { @@ -193,7 +193,7 @@ } }, "blockKrisp": { - "description": "Prevent Krisp from loading" + "description": "Evitar que Krisp cargue" }, "bypassPinPrompt": { "description": "Bypass the pin prompt when using the pin functions" @@ -312,7 +312,7 @@ "description": "Quickly run actions through a searchable command palette", "settings": { "hotkey": "Hotkey used to open the command palette", - "visualStyle": "Palette appearance", + "visualStyle": "Aspecto de la paleta", "visualStyleOptions": { "classic": "Clásico", "polished": "Pulido" @@ -324,7 +324,7 @@ "ui": { "hotkeyTitle": "Command Palette Hotkey", "hotkeyDescription": "Hotkey used to open the command palette", - "pressAnyKey": "Press any key...", + "pressAnyKey": "Presiona cualquier tecla...", "reset": "Restablecer" } }, @@ -337,7 +337,7 @@ "onClick": "Only show trigger content on click instead of hover" }, "ui": { - "flaggedWords": "Flagged Words", + "flaggedWords": "Palabras marcadas", "placeholder": "Palabra" } }, @@ -347,7 +347,7 @@ "copyProfileColors": "Copy Profile Colors" }, "toast": { - "noColorsFound": "No profile colors found!", + "noColorsFound": "¡No se encontraron colores de perfil!", "copied": "Profile colors copied to clipboard!", "error": "Error copying profile colors!" } @@ -412,11 +412,11 @@ "description": "Custom timestamps on messages and tooltips", "settings": { "formats": "Customize the timestamp formats", - "calendarFormats": "Calendar formats", + "calendarFormats": "Formatos del calendario", "calendarFormatsDescription": "How to format the [calendar] value if used in the above timestamps." }, "about": { - "title": "How to use:", + "title": "Cómo usar:", "additional": "Additionally you can use these in your inputs:", "calendar": "enables dynamic date formatting such as \"Today\" or \"Yesterday\".", "relative": "gives you times such as \"4 hours ago\"." @@ -429,7 +429,7 @@ "colorInServers": "If name colors should be changed within servers" }, "contextMenu": { - "setColor": "Set Color" + "setColor": "Definir Color" } }, "disableCameras": { @@ -446,13 +446,13 @@ "settings": { "userOutput": "User drop output.", "userOutputOptions": { - "mention": "Mention user", - "id": "User ID" + "mention": "Mencionar usuario", + "id": "ID de Usuario" }, "channelOutput": "Channel drop output.", "channelOutputOptions": { "mention": "#channel mention", - "link": "Channel link" + "link": "Enlace del canal" }, "inviteExpireAfter": "Invite expiration.", "inviteExpireAfterOptions": { @@ -538,20 +538,20 @@ "jumpToMessage": "Jump To Message", "openUserProfile": "Open user profile", "copyContent": "Copiar Contenido", - "copyUserId": "Copy User ID", - "copyMessageId": "Copy Message ID", - "copyChannelId": "Copy Channel ID", - "copyServerId": "Copy Server ID", - "deleteLog": "Delete Log", + "copyUserId": "Copiar ID del Usuario", + "copyMessageId": "Copiar ID del mensaje", + "copyChannelId": "Copiar ID del canal", + "copyServerId": "Copiar ID del servidor", + "deleteLog": "Eliminar registro", "fromDms": "From {username}'s DMs", "fromGroupDm": "From {name} Group DM", "fromChannel": "From {channel} in {guild}" }, "buttons": { - "importing": "Importing...", - "importLogs": "Import Logs", - "exporting": "Exporting...", - "exportLogs": "Export Logs" + "importing": "Importando...", + "importLogs": "Importar Registros", + "exporting": "Exportando...", + "exportLogs": "Exportar Registros" } }, "friendCodes": { @@ -561,13 +561,13 @@ "webhookUrl": "Webhook URL to send friend code to" }, "panel": { - "title": "Friend Codes", + "title": "Códigos de Amigo", "currentCode": "Current Friend Code", - "copyCode": "Copy Code", + "copyCode": "Copiar código", "copied": "Copied!", - "sendToServer": "Send to Server", - "sent": "Sent!", - "refresh": "Refresh", + "sendToServer": "Enviar al Servidor", + "sent": "¡Enviado!", + "refresh": "Refrescar", "error": "Error: {error}" } }, @@ -586,7 +586,7 @@ }, "ui": { "recording": "Recording...", - "reset": "Reset", + "reset": "Reiniciar", "copiedColor": "Copied color to clipboard!" } }, @@ -603,10 +603,10 @@ }, "standing": { "allGood": "All good!", - "limited": "Limited", - "veryLimited": "Very limited", - "atRisk": "At risk", - "suspended": "Suspended" + "limited": "Limitado", + "veryLimited": "Muy limitado", + "atRisk": "En Riesgo", + "suspended": "Suspendido" }, "commands": { "refreshCommands": "Refresh Slash Commands", @@ -616,8 +616,8 @@ "alerts": { "supportWarningTitle": "Vencord Support Channel Warning", "supportWarningBody": "Before asking for help. Check updates and if this issue is actually caused by Equicord!", - "equicordSupport": "Equicord Support", - "okayContinue": "Okay continue" + "equicordSupport": "Soporte de Equicord", + "okayContinue": "Okay continuar" } }, "equicordToolbox": { @@ -626,15 +626,15 @@ "showPluginMenu": "Show the plugins menu in the toolbox" }, "ui": { - "tooltip": "Equicord Toolbox", + "tooltip": "Caja de herramientas de Equicord", "plugins": "Plugins", - "themes": "Themes", - "openNotificationLog": "Open Notification Log", - "openSettings": "Open Settings", - "enableQuickCss": "Enable QuickCSS", - "editQuickCss": "Edit QuickCSS", - "manageThemes": "Manage Themes", - "restartToApply": "Restart to apply the change" + "themes": "Temas", + "openNotificationLog": "Abrir el registro de notificaciones", + "openSettings": "Abrir Ajustes", + "enableQuickCss": "Habilitar QuickCSS", + "editQuickCss": "Editar QuickCSS", + "manageThemes": "Gestionar Temas", + "restartToApply": "Reiniciar para aplicar el cambio" } }, "equissant": { @@ -666,14 +666,14 @@ }, "ui": { "exportMessage": "Export Message", - "export": "Export", + "export": "Exportar", "contactsCopied": "Contacts copied to clipboard successfully.", "contactListUndefined": "Contact list is undefined. Click on the \"All\" tab before exporting." }, "notifications": { - "title": "Export Messages", + "title": "Exportar mensajes", "exportSuccess": "Message exported successfully as {filename}", - "exportFailed": "Failed to export message" + "exportFailed": "Error al exportar el mensaje" } }, "fastDeleteChannels": { @@ -702,7 +702,7 @@ "hideButtonIfNoReply": "Hides the button if there are no replies to the message" }, "ui": { - "jumpToReply": "Jump to Reply" + "jumpToReply": "Ir a la respuesta" }, "toasts": { "useBottomPanel": "Use the bottom panel to navigate between replies.", @@ -720,7 +720,7 @@ "leaveWhenUserLeaves": "Leave the voice channel when the user leaves. (That can cause you to sometimes enter infinite leave/join loop)" }, "ui": { - "followUser": "Follow User" + "followUser": "Seguir usuario" }, "info": "This Plugin is used to follow a Friend/Friends into voice chat(s)." }, @@ -1107,21 +1107,21 @@ "savedPasswords": "Saved Passwords (Seperated with a , )" }, "ui": { - "encryptMessage": "Encrypt Message", - "decryptMessage": "Decrypt Message", + "encryptMessage": "Encriptar Mensaje", + "decryptMessage": "Descifrar Mensaje", "hiddenMessageIndicator": "This message has a hidden message! (InvisibleChat)" } }, "inviteDefaults": { "description": "Allows you to edit the default values when creating server invites.", "settings": { - "inviteDuration": "Invite Duration", + "inviteDuration": "Duración de la invitación", "maxUses": "Invite Use Count", "temporaryMembership": "Temporary Membership" }, "options": { - "infinite": "Infinite", - "forever": "Forever" + "infinite": "Infinito", + "forever": "Permanente" } }, "jellyfinRichPresence": { @@ -1142,7 +1142,7 @@ "nameFormatOptions": { "seriesMovieName": "Series/Movie Name", "seriesEpisodeName": "Series - Episode/Track/Movie Name", - "custom": "Custom" + "custom": "Personalizado" }, "coverTypeOptions": { "seriesCover": "Series Cover", @@ -1154,14 +1154,14 @@ "fulltext": "Season 1 Episode 1" }, "overrideTypeOptions": { - "off": "Off", - "listening": "Listening", - "playing": "Playing", + "off": "Desactivado", + "listening": "Escuchando", + "playing": "Jugando", "streaming": "Streaming", - "watching": "Watching" + "watching": "Viendo" }, "howToGetApiKey": { - "title": "How to get an API key", + "title": "Cómo obtener una clave API", "description": "Auth token can be found by following these steps:", "userIdInfo": "You'll also need your User ID, which can be found in the url of your user profile page." }, @@ -1169,22 +1169,22 @@ "notConfigured": "JellyfinRPC is not configured." }, "privacyMode": { - "episodeHidden": "[Episode Hidden]", - "trackHidden": "[Track Hidden]", - "movieHidden": "[Movie Hidden]", - "titleHidden": "[Title Hidden]", - "seriesHidden": "[Series Hidden]", - "artistHidden": "[Artist Hidden]", - "albumHidden": "[Album Hidden]", + "episodeHidden": "[Episodio oculto]", + "trackHidden": "[Pista oculta]", + "movieHidden": "[Película oculta]", + "titleHidden": "[Título oculto]", + "seriesHidden": "[Serie oculta]", + "artistHidden": "[Artista oculta]", + "albumHidden": "[Álbum oculto]", "mediaHidden": "[Media Hidden]", - "watchingTvShow": "Watching a TV Show", - "watchingSomething": "Watching Something", - "listeningToMusic": "Listening to music" + "watchingTvShow": "Ver una serie de TV", + "watchingSomething": "Viendo algo", + "listeningToMusic": "Escuchando música" }, "state": { - "paused": "Paused", - "season": "Season {season}", - "episode": "Episode {episode}" + "paused": "Pausado", + "season": "Temporada {season}", + "episode": "Episodio {episode}" } }, "jumpscare": { @@ -1198,13 +1198,13 @@ "jumpTo": { "description": "Adds context menu options to jump to the start or bottom of a channel/DM.", "ui": { - "jumpToFirst": "Jump To First Message", - "jumpToLast": "Jump To Last Message", - "yourLastMessage": "Your Last Message", + "jumpToFirst": "Ir al primer mensaje", + "jumpToLast": "Ir al último mensaje", + "yourLastMessage": "Tu último mensaje", "usersLastMessage": "User's Last Message" }, "errors": { - "noMessagesFound": "No messages found from this user in this channel.", + "noMessagesFound": "No se han encontrado mensajes de este usuario en este canal.", "failedSearch": "Failed to search for messages.", "channelNotAvailable": "Channel information not available.", "failedJump": "Failed to jump to message. Check console for details." @@ -1217,7 +1217,7 @@ "allowMouseControl": "Allow the mouse to control the command palette." }, "ui": { - "recording": "Recording...", + "recording": "Grabando...", "recordKeybind": "Record keybind" }, "commands": { @@ -1225,7 +1225,7 @@ } }, "keyboardSounds": { - "description": "Adds OperaGX or osu! sound effects when typing on your keyboard.", + "description": "Añade efectos de sonido de OperaGX u osu! al escribir en el teclado.", "settings": { "volume": "Volume of the keyboard sounds.", "soundPack": "Sound pack to use." @@ -1240,12 +1240,12 @@ "settings": { "ignoreBots": "Ignore messages from bots", "amountToKeep": "Amount of messages to keep in the log", - "keywords": "Manage keywords" + "keywords": "Administrar palabras clave" }, "ui": { - "keywords": "Keywords", + "keywords": "Palabras clave", "clearAll": "Clear All", - "addId": "Add ID", + "addId": "Agregar ID", "addKeywordEntry": "Add Keyword Entry", "keywordEntry": "Keyword Entry {index}", "ignoreCase": "Ignore Case", @@ -1280,8 +1280,8 @@ "listenBrainzRPC": { "description": "Little plugin for ListenBrainz rich presence", "settings": { - "username": "ListenBrainz username", - "mbContact": "ListenBrainz contact", + "username": "Nombre de usuario ListenBrainz", + "mbContact": "Contacto ListenBrainz", "shareUsername": "Show link to ListenBrainz profile (may only be visible to other users)", "shareSong": "Show link to song on ListenBrainz (may only be visible to other users)", "hideWithSpotify": "Hide ListenBrainz presence if Spotify is running", @@ -1294,37 +1294,37 @@ "useLogo": "Show ListenBrainz logo on album art" }, "nameFormatOptions": { - "customStatus": "Use custom status name", - "artistFirst": "Use format 'artist - song'", - "songFirst": "Use format 'song - artist'", - "artistOnly": "Use artist name only", - "songOnly": "Use song name only", + "customStatus": "Usar nombre de estado personalizado", + "artistFirst": "Usar formato 'artista - canción'", + "songFirst": "Usar formato 'canción - artista'", + "artistOnly": "Usar solo el nombre del artista", + "songOnly": "Usar solo nombre de canción", "albumName": "Use album name (falls back to custom status text if song has no album)" }, "missingArtOptions": { "listenbrainzLogo": "Use large ListenBrainz logo", - "placeholder": "Use generic placeholder" + "placeholder": "Usar placeholder genérico" }, "about": { - "title": "About MusicBrainz API", + "title": "Acerca de la API de MusicBrainz ", "description": "The MusicBrainz API does not require an API key, but it does require a meaningful user-agent string. For most, an email address should suffice." }, "buttons": { - "profile": "ListenBrainz Profile", - "viewSong": "View Song" + "profile": "Perfil ListenBrainz", + "viewSong": "Ver canción" }, "defaults": { - "statusName": "some music" + "statusName": "Algo de música" } }, "loginWithQR": { "description": "Allows you to login to another device by scanning a login QR code, just like on mobile!", "settings": { - "scanQr": "Scan a QR code" + "scanQr": "Escanear código QR" }, "ui": { "enableAndRestart": "Enable the plugin and restart your client to scan a login QR code", - "scanQrCode": "Scan QR Code" + "scanQrCode": "Escanear código QR" } } } \ No newline at end of file From fa36210b44098187106d3cbc2f533d4aadded584 Mon Sep 17 00:00:00 2001 From: thororen <78185467+thororen1234@users.noreply.github.com> Date: Sun, 15 Feb 2026 14:22:56 -0500 Subject: [PATCH 5/6] New translations equicord.json (Arabic) --- i18n/ar-SA/equicord.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/i18n/ar-SA/equicord.json b/i18n/ar-SA/equicord.json index c08d5fc6f..554eb5187 100644 --- a/i18n/ar-SA/equicord.json +++ b/i18n/ar-SA/equicord.json @@ -99,7 +99,7 @@ "statusOptions": { "online": "متصل", "idle": "مشغول", - "dnd": "Do Not Disturb", + "dnd": "عدم الإزعاج", "invisible": "مخفي" }, "contextMenu": { @@ -135,9 +135,9 @@ "soundQuality": "Quality of sound to use" }, "quality": { - "high": "High", - "medium": "Medium", - "low": "Low", + "high": "مرتفع", + "medium": "متوسط", + "low": "منخفض", "lowest": "Lowest" } }, From ee82143fe5b3ec2b364e42337cb321fc4e17b4ed Mon Sep 17 00:00:00 2001 From: thororen <78185467+thororen1234@users.noreply.github.com> Date: Sun, 15 Feb 2026 14:22:57 -0500 Subject: [PATCH 6/6] New translations equicord.json (Portuguese, Brazilian) --- i18n/pt-BR/equicord.json | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/i18n/pt-BR/equicord.json b/i18n/pt-BR/equicord.json index d5d28c17f..5dafd553e 100644 --- a/i18n/pt-BR/equicord.json +++ b/i18n/pt-BR/equicord.json @@ -302,42 +302,42 @@ "never": "Nunca" }, "enableScreenshotKeybind": "Ativar o recurso de teclas de atalho para captura de tela", - "enableVoiceOnlyClips": "Enable voice-only clips (audio without video)", - "enableAdvancedSignals": "Enable advanced clip signals (auto-clip triggers)", - "ignorePlatformRestriction": "Allow Platform Restricted Clipping (may cause save errors)", - "clipsLink": "Change FPS and duration options in Clips settings!" + "enableVoiceOnlyClips": "Ativar clipes apenas de voz (áudio sem vídeo)", + "enableAdvancedSignals": "Ativar sinais de clipe avançados (gatilhos de auto-clipe)", + "ignorePlatformRestriction": "Permitir Clipping Restrito por Plataforma (pode causar erros ao salvar)", + "clipsLink": "Alterar as opções de FPS e duração nas configurações de Clipes!" } }, "commandPalette": { - "description": "Quickly run actions through a searchable command palette", + "description": "Executar ações rapidamente através de uma paleta de comandos pesquisável", "settings": { - "hotkey": "Hotkey used to open the command palette", - "visualStyle": "Palette appearance", + "hotkey": "Atalho usado para abrir a paleta de comandos", + "visualStyle": "Aparência da paleta", "visualStyleOptions": { - "classic": "Classic", - "polished": "Polished" + "classic": "Clássico", + "polished": "Polido" }, - "showTags": "Display tag chips for commands", - "enableTagFilter": "Show the tag filter bar", - "customCommands": "Manage custom command palette entries" + "showTags": "Exibir etiquetas de tags para comandos", + "enableTagFilter": "Mostrar a barra de filtro de tags", + "customCommands": "Gerenciar entradas personalizadas da paleta de comandos" }, "ui": { - "hotkeyTitle": "Command Palette Hotkey", - "hotkeyDescription": "Hotkey used to open the command palette", - "pressAnyKey": "Press any key...", - "reset": "Reset" + "hotkeyTitle": "Atalho da Paleta de Comandos", + "hotkeyDescription": "Atalho usado para abrir a paleta de comandos", + "pressAnyKey": "Pressione qualquer tecla...", + "reset": "Redefinir" } }, "components": { - "description": "Utility plugin for developers to test and preview Discord components" + "description": "Plugin utilitário para desenvolvedores testarem e visualizarem componentes do Discord" }, "contentWarning": { - "description": "Allows you to specify certain trigger words that will be blurred by default. Hovering/Clicking on the blurred content will reveal it.", + "description": "Permite especificar certas palavras de gatilho que serão desfocadas por padrão. Passar o Mouse/Clicar no conteúdo desfocado irá revelá-lo.", "settings": { - "onClick": "Only show trigger content on click instead of hover" + "onClick": "Mostrar conteúdo do gatilho apenas ao clicar em vez de ao passar o rato" }, "ui": { - "flaggedWords": "Flagged Words", + "flaggedWords": "Palavras sinalizadas", "placeholder": "Word" } },