From 12b71c9c77d9e1e97eeca602999936f9421b75fa Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Thu, 13 Jun 2024 10:21:49 -0300 Subject: [PATCH 01/37] Add initial i18n support * Create POTFILES * Mark strings for translation * Add build configuration for updating and compile translation files * Add initial pt_BR translation --- CMakeLists.txt | 5 + po/CMakeLists.txt | 37 + po/POTFILES | 32 + po/abaddon.pot | 1477 ++++++++++++++++ po/pt_BR.po | 1502 +++++++++++++++++ src/abaddon.cpp | 58 +- .../channellist/channellisttree.cpp | 67 +- src/components/chatinput.cpp | 13 +- src/components/chatinputindicator.cpp | 9 +- src/components/chatlist.cpp | 15 +- src/components/chatmessage.cpp | 103 +- src/components/chatwindow.cpp | 10 +- src/components/friendslist.cpp | 65 +- src/components/ratelimitindicator.cpp | 9 +- src/components/voiceinfobox.cpp | 18 +- src/dialogs/confirm.cpp | 8 +- src/dialogs/friendpicker.cpp | 6 +- src/dialogs/setstatus.cpp | 37 +- src/dialogs/textinput.cpp | 4 +- src/dialogs/token.cpp | 6 +- src/dialogs/verificationgate.cpp | 6 +- src/windows/guildsettings/auditlogpane.cpp | 534 +++--- src/windows/guildsettings/banspane.cpp | 14 +- src/windows/guildsettings/emojispane.cpp | 41 +- src/windows/guildsettings/infopane.cpp | 21 +- src/windows/guildsettings/invitespane.cpp | 23 +- src/windows/guildsettings/memberspane.cpp | 21 +- src/windows/guildsettings/rolespane.cpp | 23 +- src/windows/guildsettingswindow.cpp | 16 +- src/windows/mainwindow.cpp | 42 +- src/windows/pinnedwindow.cpp | 7 +- src/windows/profile/mutualguildspane.cpp | 5 +- src/windows/profile/userinfopane.cpp | 10 +- src/windows/profilewindow.cpp | 10 +- src/windows/threadswindow.cpp | 12 +- src/windows/voicesettingswindow.cpp | 52 +- src/windows/voicewindow.cpp | 41 +- 37 files changed, 3694 insertions(+), 665 deletions(-) create mode 100644 po/CMakeLists.txt create mode 100644 po/POTFILES create mode 100644 po/abaddon.pot create mode 100644 po/pt_BR.po diff --git a/CMakeLists.txt b/CMakeLists.txt index 99cc9ef3..abc7c76d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,7 @@ find_package(CURL) find_package(ZLIB REQUIRED) find_package(SQLite3 REQUIRED) find_package(gtkmm REQUIRED) +find_package(Intl REQUIRED) set(USE_TLS TRUE) set(USE_OPEN_SSL TRUE) @@ -56,6 +57,9 @@ target_include_directories(abaddon PUBLIC ${GTKMM_INCLUDE_DIRS}) target_include_directories(abaddon PUBLIC ${ZLIB_INCLUDE_DIRS}) target_include_directories(abaddon PUBLIC ${SQLite3_INCLUDE_DIRS}) target_include_directories(abaddon PUBLIC ${NLOHMANN_JSON_INCLUDE_DIRS}) +target_include_directories(abaddon PUBLIC ${INTL_INCLUDE_DIRS}) + +add_subdirectory(po) if (ENABLE_QRCODE_LOGIN) add_library(qrcodegen subprojects/qrcodegen/cpp/qrcodegen.hpp subprojects/qrcodegen/cpp/qrcodegen.cpp) @@ -119,6 +123,7 @@ target_link_libraries(abaddon ${CURL_LIBRARIES}) target_link_libraries(abaddon ${ZLIB_LIBRARY}) target_link_libraries(abaddon ${NLOHMANN_JSON_LIBRARIES}) target_link_libraries(abaddon ${CMAKE_DL_LIBS}) +target_link_libraries(abaddon ${INTL_LIBRARIES}) include(CheckAtomic) if (NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 00000000..90873b1f --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,37 @@ +find_program(MSGMERGE msgmerge REQUIRED) +find_program(MSGFMT msgfmt REQUIRED) + +set(POT_FILENAME ${CMAKE_CURRENT_SOURCE_DIR}/abaddon.pot) +set(MO_FILENAME abaddon.mo) +set(LOCALE_DIRECTORY ${PROJECT_BINARY_DIR}/locale) + +list(APPEND PO_NAMES pt_BR) + +foreach(PO_NAME IN LISTS PO_NAMES) + list(APPEND PO_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PO_NAME}.po) +endforeach() + +# Updates all the translation +foreach(PO_SOURCE PO_NAME IN ZIP_LISTS PO_SOURCES PO_NAMES) + add_custom_target("update-${PO_NAME}" DEPENDS ${PO_SOURCE}) + add_custom_command( + TARGET "update-${PO_NAME}" PRE_BUILD + COMMAND ${MSGMERGE} -U -N ${PO_SOURCE} ${POT_FILENAME} + DEPENDS ${POT_FILENAME} + ) + add_dependencies(abaddon "update-${PO_NAME}") +endforeach() + +# Compiles all the translation files onto locales directory +foreach(PO_SOURCE PO_NAME IN ZIP_LISTS PO_SOURCES PO_NAMES) + file(MAKE_DIRECTORY ${LOCALE_DIRECTORY}/${PO_NAME}/LC_MESSAGES/) + add_custom_command( + OUTPUT ${LOCALE_DIRECTORY}/${PO_NAME}/LC_MESSAGES/${MO_FILENAME} + COMMAND ${MSGFMT} --output-file=${LOCALE_DIRECTORY}/${PO_NAME}/LC_MESSAGES/${MO_FILENAME} + ${PO_SOURCE} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${PO_SOURCE} + ) + add_custom_target("compile-${PO_NAME}" DEPENDS ${LOCALE_DIRECTORY}/${PO_NAME}/LC_MESSAGES/${MO_FILENAME}) + add_dependencies(abaddon "compile-${PO_NAME}") +endforeach() \ No newline at end of file diff --git a/po/POTFILES b/po/POTFILES new file mode 100644 index 00000000..50ca8b24 --- /dev/null +++ b/po/POTFILES @@ -0,0 +1,32 @@ +src/abaddon.cpp +src/dialogs/confirm.cpp +src/dialogs/friendpicker.cpp +src/dialogs/setstatus.cpp +src/dialogs/textinput.cpp +src/dialogs/token.cpp +src/dialogs/verificationgate.cpp +src/components/chatinput.cpp +src/components/chatinputindicator.cpp +src/components/chatlist.cpp +src/components/chatmessage.cpp +src/components/chatwindow.cpp +src/components/friendslist.cpp +src/components/ratelimitindicator.cpp +src/components/voiceinfobox.cpp +src/components/channellist/channellisttree.cpp +src/windows/guildsettingswindow.cpp +src/windows/mainwindow.cpp +src/windows/pinnedwindow.cpp +src/windows/profilewindow.cpp +src/windows/threadswindow.cpp +src/windows/voicesettingswindow.cpp +src/windows/voicewindow.cpp +src/windows/profile/mutualguildspane.cpp +src/windows/profile/userinfopane.cpp +src/windows/guildsettings/auditlogpane.cpp +src/windows/guildsettings/banspane.cpp +src/windows/guildsettings/emojispane.cpp +src/windows/guildsettings/infopane.cpp +src/windows/guildsettings/invitespane.cpp +src/windows/guildsettings/memberspane.cpp +src/windows/guildsettings/rolespane.cpp \ No newline at end of file diff --git a/po/abaddon.pot b/po/abaddon.pot new file mode 100644 index 00000000..b609879e --- /dev/null +++ b/po/abaddon.pot @@ -0,0 +1,1477 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-13 09:57-0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/abaddon.cpp:215 +msgid "css failed parsing (" +msgstr "" + +#: src/abaddon.cpp:231 +msgid "The PNG pixbufloader wasn't detected. Abaddon may not work as a result." +msgstr "" + +#: src/abaddon.cpp:237 +msgid "" +"The GIF pixbufloader wasn't detected. Animations may not display as a result." +msgstr "" + +#: src/abaddon.cpp:252 +msgid "The settings file could not be opened!" +msgstr "" + +#: src/abaddon.cpp:258 +msgid "The emoji file couldn't be loaded!" +msgstr "" + +#: src/abaddon.cpp:264 +msgid "The Discord cache could not be created!" +msgstr "" + +#: src/abaddon.cpp:272 +msgid "The audio engine could not be initialized!" +msgstr "" + +#: src/abaddon.cpp:333 +msgid "Quit" +msgstr "" + +#: src/abaddon.cpp:468 +msgid "Discord rejected your token" +msgstr "" + +#: src/abaddon.cpp:473 +msgid "Lost connection with Discord's gateway. Try reconnecting (code " +msgstr "" + +#: src/abaddon.cpp:483 src/abaddon.cpp:926 +msgid "This thread is archived. Sending a message will unarchive it" +msgstr "" + +#: src/abaddon.cpp:626 +msgid "" +"Cookies could not be fetched. This may increase your chances of being " +"flagged by Discord's anti-spam" +msgstr "" + +#: src/abaddon.cpp:635 +msgid "" +"Build number could not be fetched. This may increase your chances of being " +"flagged by Discord's anti-spam" +msgstr "" + +#: src/abaddon.cpp:652 +msgid "Failed to accept the verification gate." +msgstr "" + +#: src/abaddon.cpp:677 +msgid "Insert Mention" +msgstr "" + +#: src/abaddon.cpp:678 +msgid "Ban" +msgstr "" + +#: src/abaddon.cpp:679 +msgid "Kick" +msgstr "" + +#: src/abaddon.cpp:680 src/components/chatlist.cpp:298 +#: src/windows/guildsettings/banspane.cpp:14 +#: src/windows/guildsettings/emojispane.cpp:19 +msgid "Copy ID" +msgstr "" + +#: src/abaddon.cpp:681 +msgid "Go to DM" +msgstr "" + +#: src/abaddon.cpp:682 src/windows/guildsettingswindow.cpp:66 +msgid "Roles" +msgstr "" + +#: src/abaddon.cpp:683 +msgid "View Profile" +msgstr "" + +#: src/abaddon.cpp:684 +msgid "Remove From Group" +msgstr "" + +#: src/abaddon.cpp:1002 +msgid "Are you sure you want to leave " +msgstr "" + +#: src/abaddon.cpp:1012 +msgid "Are you sure you want to kick " +msgstr "" + +#: src/abaddon.cpp:1022 +msgid "Are you sure you want to ban " +msgstr "" + +#: src/abaddon.cpp:1119 +msgid "css failed to load (" +msgstr "" + +#: src/dialogs/confirm.cpp:6 +msgid "Confirm" +msgstr "" + +#: src/dialogs/confirm.cpp:9 src/dialogs/friendpicker.cpp:15 +#: src/dialogs/setstatus.cpp:27 src/dialogs/textinput.cpp:12 +#: src/dialogs/token.cpp:16 src/components/friendslist.cpp:293 +msgid "Cancel" +msgstr "" + +#: src/dialogs/confirm.cpp:15 +msgid "Are you sure?" +msgstr "" + +#: src/dialogs/friendpicker.cpp:8 +msgid "Pick a friend" +msgstr "" + +#: src/dialogs/setstatus.cpp:24 src/windows/mainwindow.cpp:268 +msgid "Set Status" +msgstr "" + +#: src/dialogs/setstatus.cpp:35 src/dialogs/setstatus.cpp:39 +#: src/components/friendslist.cpp:27 +msgid "Online" +msgstr "" + +#: src/dialogs/setstatus.cpp:36 +msgid "Do Not Disturb" +msgstr "" + +#: src/dialogs/setstatus.cpp:37 +msgid "Away" +msgstr "" + +#: src/dialogs/setstatus.cpp:38 +msgid "Invisible" +msgstr "" + +#: src/dialogs/setstatus.cpp:41 +msgid "Playing" +msgstr "" + +#: src/dialogs/setstatus.cpp:42 +msgid "Streaming" +msgstr "" + +#: src/dialogs/setstatus.cpp:43 +msgid "Listening to" +msgstr "" + +#: src/dialogs/setstatus.cpp:44 +msgid "Watching" +msgstr "" + +#: src/dialogs/setstatus.cpp:45 src/dialogs/setstatus.cpp:47 +msgid "Custom" +msgstr "" + +#: src/dialogs/setstatus.cpp:46 +msgid "Competing in" +msgstr "" + +#: src/dialogs/setstatus.cpp:57 +msgid "How are you, {}?" +msgstr "" + +#: src/dialogs/setstatus.cpp:59 +msgid "Status" +msgstr "" + +#: src/dialogs/setstatus.cpp:61 +msgid "Activity" +msgstr "" + +#: src/dialogs/token.cpp:13 src/windows/mainwindow.cpp:262 +msgid "Set Token" +msgstr "" + +#: src/dialogs/verificationgate.cpp:8 +msgid "Verification Required" +msgstr "" + +#: src/dialogs/verificationgate.cpp:14 src/components/friendslist.cpp:258 +msgid "Accept" +msgstr "" + +#: src/components/chatinput.cpp:143 +msgid "Choose file" +msgstr "" + +#: src/components/chatinput.cpp:389 src/components/friendslist.cpp:287 +msgid "Remove" +msgstr "" + +#: src/components/chatinput.cpp:394 +msgid "Change Filename" +msgstr "" + +#: src/components/chatinput.cpp:396 +msgid "Enter new filename for attachment" +msgstr "" + +#: src/components/chatinput.cpp:396 +msgid "Enter filename" +msgstr "" + +#: src/components/chatinput.cpp:404 +msgid "Change Alt-Text" +msgstr "" + +#: src/components/chatinput.cpp:406 +msgid "Enter description (alt-text) for attachment" +msgstr "" + +#: src/components/chatinput.cpp:406 +msgid "Enter alt-text" +msgstr "" + +#: src/components/chatinputindicator.cpp:118 +msgid " is typing..." +msgstr "" + +#: src/components/chatinputindicator.cpp:120 +msgid " and " +msgstr "" + +#: src/components/chatinputindicator.cpp:120 +#: src/components/chatinputindicator.cpp:125 +msgid " are typing..." +msgstr "" + +#: src/components/chatinputindicator.cpp:125 +msgid "and " +msgstr "" + +#: src/components/chatinputindicator.cpp:127 +msgid "Several people are typing..." +msgstr "" + +#: src/components/chatlist.cpp:305 +msgid "Delete Message" +msgstr "" + +#: src/components/chatlist.cpp:312 +msgid "Edit Message" +msgstr "" + +#: src/components/chatlist.cpp:319 +msgid "Copy Content" +msgstr "" + +#: src/components/chatlist.cpp:328 +msgid "Reply To" +msgstr "" + +#: src/components/chatlist.cpp:335 +msgid "Unpin" +msgstr "" + +#: src/components/chatlist.cpp:341 +msgid "Pin" +msgstr "" + +#: src/components/chatmessage.cpp:17 +msgid "Copy Link" +msgstr "" + +#: src/components/chatmessage.cpp:148 +msgid "deleted" +msgstr "" + +#: src/components/chatmessage.cpp:150 +msgid "edited" +msgstr "" + +#: src/components/chatmessage.cpp:204 +msgid "boosted server" +msgstr "" + +#: src/components/chatmessage.cpp:207 +msgid "user joined" +msgstr "" + +#: src/components/chatmessage.cpp:210 +msgid "message pinned" +msgstr "" + +#: src/components/chatmessage.cpp:220 +msgid "used {} with {}" +msgstr "" + +#: src/components/chatmessage.cpp:235 +msgid "" +"{} added {}" +msgstr "" + +#: src/components/chatmessage.cpp:245 +msgid "" +"{} left" +msgstr "" + +#: src/components/chatmessage.cpp:247 +msgid "" +"{} removed {}" +msgstr "" + +#: src/components/chatmessage.cpp:254 +msgid "{} changed the name to {}" +msgstr "" + +#: src/components/chatmessage.cpp:259 +msgid "{} changed the channel icon" +msgstr "" + +#: src/components/chatmessage.cpp:267 +msgid "" +"{} just boosted the server {} times! {} has " +"achieved Level {}}!" +msgstr "" + +#: src/components/chatmessage.cpp:277 +msgid "" +"{} has added {} to this channel. Its most " +"important updates will show up here." +msgstr "" + +#: src/components/chatmessage.cpp:283 +msgid "started a call" +msgstr "" + +#: src/components/chatmessage.cpp:286 +msgid "" +"This server has been removed from Server Discovery because it no longer " +"passes all the requirements." +msgstr "" + +#: src/components/chatmessage.cpp:289 +msgid "" +"This server is eligible for Server Discovery again and has been " +"automatically relisted!" +msgstr "" + +#: src/components/chatmessage.cpp:292 +msgid "" +"This server has failed Discovery activity requirements for 1 week. If this " +"server fails for 4 weeks in a row, it will be automatically removed from " +"Discovery." +msgstr "" + +#: src/components/chatmessage.cpp:295 +msgid "" +"This server has failed Discovery activity requirements for 3 weeks in a row. " +"If this server fails for 1 more week, it will be removed from Discovery." +msgstr "" + +#: src/components/chatmessage.cpp:301 +msgid "{} started a thread: " +msgstr "" + +#: src/components/chatmessage.cpp:308 +msgid "{} started a thread: {}" +msgstr "" + +#: src/components/chatmessage.cpp:715 src/components/chatmessage.cpp:738 +#: src/windows/voicewindow.cpp:49 src/windows/guildsettings/auditlogpane.cpp:45 +msgid "Unknown User" +msgstr "" + +#: src/components/chatmessage.cpp:731 +msgid "{} used /{}" +msgstr "" + +#: src/components/chatmessage.cpp:742 +msgid "deleted message" +msgstr "" + +#: src/components/chatmessage.cpp:748 +msgid "attachment" +msgstr "" + +#: src/components/chatmessage.cpp:750 +msgid "embed" +msgstr "" + +#: src/components/chatmessage.cpp:770 +msgid "reply unavailable" +msgstr "" + +#: src/components/chatwindow.cpp:334 +msgid "Replying to {}" +msgstr "" + +#: src/components/chatwindow.cpp:336 +msgid "Replying..." +msgstr "" + +#: src/components/chatwindow.cpp:356 +msgid "Editing..." +msgstr "" + +#: src/components/friendslist.cpp:26 src/windows/mainwindow.cpp:290 +msgid "Friends" +msgstr "" + +#: src/components/friendslist.cpp:28 +msgid "Pending" +msgstr "" + +#: src/components/friendslist.cpp:29 +msgid "Blocked" +msgstr "" + +#: src/components/friendslist.cpp:114 +msgid "Failed to accept" +msgstr "" + +#: src/components/friendslist.cpp:129 +msgid "Are you sure you want to unblock {}?" +msgstr "" + +#: src/components/friendslist.cpp:132 +msgid "Are you sure you want to remove {}?" +msgstr "" + +#: src/components/friendslist.cpp:135 +msgid "Are you sure you want to ignore {}?" +msgstr "" + +#: src/components/friendslist.cpp:138 +msgid "Are you sure you want to cancel your request to {}?" +msgstr "" + +#: src/components/friendslist.cpp:146 +msgid "Failed to remove user" +msgstr "" + +#: src/components/friendslist.cpp:195 +msgid "Add a Friend" +msgstr "" + +#: src/components/friendslist.cpp:197 +msgid "Add" +msgstr "" + +#: src/components/friendslist.cpp:207 +msgid "Enter a Username#1234" +msgstr "" + +#: src/components/friendslist.cpp:220 +msgid "Invalid input" +msgstr "" + +#: src/components/friendslist.cpp:230 +msgid "Hang on..." +msgstr "" + +#: src/components/friendslist.cpp:235 +msgid "Success!" +msgstr "" + +#: src/components/friendslist.cpp:237 +msgid "Failed: {}" +msgstr "" + +#: src/components/friendslist.cpp:290 +msgid "Ignore" +msgstr "" + +#: src/components/friendslist.cpp:331 +msgid "Incoming Friend Request" +msgstr "" + +#: src/components/friendslist.cpp:334 +msgid "Outgoing Friend Request" +msgstr "" + +#: src/components/ratelimitindicator.cpp:88 +msgid "You may bypass slowmode." +msgstr "" + +#: src/components/ratelimitindicator.cpp:93 +msgid "{}s" +msgstr "" + +#: src/components/ratelimitindicator.cpp:96 +msgid "Slowmode is enabled. Members can send one message every {} seconds" +msgstr "" + +#: src/components/voiceinfobox.cpp:33 src/components/voiceinfobox.cpp:34 +msgid "You shouldn't see me" +msgstr "" + +#: src/components/voiceinfobox.cpp:49 +msgid "Connecting" +msgstr "" + +#: src/components/voiceinfobox.cpp:52 +msgid "Establishing connection" +msgstr "" + +#: src/components/voiceinfobox.cpp:55 +msgid "Connected" +msgstr "" + +#: src/components/voiceinfobox.cpp:59 +msgid "Disconnected" +msgstr "" + +#: src/components/voiceinfobox.cpp:62 src/components/voiceinfobox.cpp:118 +msgid "Unknown" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:19 +#: src/components/channellist/channellisttree.cpp:23 +#: src/components/channellist/channellisttree.cpp:24 +#: src/components/channellist/channellisttree.cpp:34 +#: src/components/channellist/channellisttree.cpp:40 +msgid "_Copy ID" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:20 +msgid "View _Settings" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:21 +#: src/components/channellist/channellisttree.cpp:41 +msgid "_Leave" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:22 +#: src/components/channellist/channellisttree.cpp:25 +#: src/components/channellist/channellisttree.cpp:44 +msgid "Mark as _Read" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:27 +#: src/components/channellist/channellisttree.cpp:28 +msgid "Open in New _Tab" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:31 +msgid "_Join" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:32 +msgid "_Disconnect" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:37 +msgid "Join _Voice" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:38 +msgid "_Disconnect Voice" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:42 +msgid "_Archive" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:43 +msgid "_Unarchive" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:229 +msgid "Are you sure you want to leave this group DM?" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:267 +msgid "Are you sure you want to leave this thread?" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:1184 +msgid "Direct Messages" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:1356 +msgid "Close" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:1356 +msgid "Leave" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:1410 +#: src/components/channellist/channellisttree.cpp:1424 +#: src/components/channellist/channellisttree.cpp:1466 +#: src/components/channellist/channellisttree.cpp:1491 +msgid "Unmute" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:1412 +#: src/components/channellist/channellisttree.cpp:1426 +#: src/components/channellist/channellisttree.cpp:1468 +#: src/components/channellist/channellisttree.cpp:1493 +#: src/windows/voicewindow.cpp:22 src/windows/voicewindow.cpp:93 +msgid "Mute" +msgstr "" + +#: src/windows/guildsettingswindow.cpp:64 +msgid "Info" +msgstr "" + +#: src/windows/guildsettingswindow.cpp:65 src/windows/mainwindow.cpp:298 +msgid "Members" +msgstr "" + +#: src/windows/guildsettingswindow.cpp:67 +msgid "Bans" +msgstr "" + +#: src/windows/guildsettingswindow.cpp:69 +msgid "Invites" +msgstr "" + +#: src/windows/guildsettingswindow.cpp:70 +msgid "Emojis" +msgstr "" + +#: src/windows/guildsettingswindow.cpp:72 +msgid "Audit Log" +msgstr "" + +#: src/windows/mainwindow.cpp:258 +msgid "Connect" +msgstr "" + +#: src/windows/mainwindow.cpp:260 +msgid "Disconnect" +msgstr "" + +#: src/windows/mainwindow.cpp:263 +msgid "Login with QR Code" +msgstr "" + +#: src/windows/mainwindow.cpp:266 +msgid "Not compiled with support" +msgstr "" + +#: src/windows/mainwindow.cpp:270 +msgid "Add user to DM" +msgstr "" + +#: src/windows/mainwindow.cpp:279 +msgid "File" +msgstr "" + +#: src/windows/mainwindow.cpp:281 +msgid "Reload CSS" +msgstr "" + +#: src/windows/mainwindow.cpp:282 +msgid "Clear file cache" +msgstr "" + +#: src/windows/mainwindow.cpp:283 +msgid "Dump ready message" +msgstr "" + +#: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:98 +msgid "View" +msgstr "" + +#: src/windows/mainwindow.cpp:291 +msgid "Pins" +msgstr "" + +#: src/windows/mainwindow.cpp:292 +msgid "Threads" +msgstr "" + +#: src/windows/mainwindow.cpp:293 +msgid "Mark Server as Read" +msgstr "" + +#: src/windows/mainwindow.cpp:295 +msgid "Channels" +msgstr "" + +#: src/windows/mainwindow.cpp:302 +msgid "Go Back" +msgstr "" + +#: src/windows/mainwindow.cpp:303 +msgid "Go Forward" +msgstr "" + +#: src/windows/pinnedwindow.cpp:18 +msgid "Pinned Messages" +msgstr "" + +#: src/windows/profilewindow.cpp:79 +msgid "User Info" +msgstr "" + +#: src/windows/profilewindow.cpp:80 +msgid "Mutual Servers" +msgstr "" + +#: src/windows/profilewindow.cpp:81 +msgid "Mutual Friends" +msgstr "" + +#: src/windows/profilewindow.cpp:112 +msgid "Originally known as {}" +msgstr "" + +#: src/windows/threadswindow.cpp:9 +msgid "Public" +msgstr "" + +#: src/windows/threadswindow.cpp:10 +msgid "Private" +msgstr "" + +#: src/windows/threadswindow.cpp:16 +msgid "#{} - Threads" +msgstr "" + +#: src/windows/threadswindow.cpp:32 +msgid "Active Threads" +msgstr "" + +#: src/windows/threadswindow.cpp:33 +msgid "Archived Threads" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:21 +#: src/windows/voicesettingswindow.cpp:53 +msgid "Voice" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:22 +#: src/windows/voicesettingswindow.cpp:54 +msgid "Music" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:23 +msgid "Restricted" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:25 +msgid "" +"Sets the coding mode for the Opus encoder\n" +"Voice - Optimize for voice quality\n" +"Music - Optimize for non-voice signals incl. music\n" +"Restricted - Optimize for non-voice, low latency. Not recommended" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:52 +msgid "Auto" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:56 +msgid "" +"Signal hint. Tells Opus what the current signal is\n" +"Auto - Let Opus figure it out\n" +"Voice - Tell Opus it's a voice signal\n" +"Music - Tell Opus it's a music signal" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:130 +msgid "Coding Mode" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:131 +msgid "Signal Hint" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:132 +msgid "Bitrate" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:238 +msgid "Gain" +msgstr "" + +#: src/windows/voicewindow.cpp:94 +msgid "Deafen" +msgstr "" + +#: src/windows/voicewindow.cpp:95 +msgid "Suppress Noise" +msgstr "" + +#: src/windows/voicewindow.cpp:96 +msgid "Mix Mono" +msgstr "" + +#: src/windows/voicewindow.cpp:99 +msgid "More _Settings" +msgstr "" + +#: src/windows/voicewindow.cpp:158 +msgid "" +"Voice Activation Detection method\n" +"Gate - Simple volume threshold. Slider changes threshold\n" +"RNNoise - Heavier on CPU. Slider changes probability threshold" +msgstr "" + +#: src/windows/voicewindow.cpp:161 +msgid "Gate" +msgstr "" + +#: src/windows/voicewindow.cpp:163 +msgid "RNNoise" +msgstr "" + +#: src/windows/voicewindow.cpp:237 +msgid "Threshold" +msgstr "" + +#: src/windows/voicewindow.cpp:247 +msgid "VAD Method" +msgstr "" + +#: src/windows/voicewindow.cpp:248 +msgid "Output Device" +msgstr "" + +#: src/windows/voicewindow.cpp:249 +msgid "Input Device" +msgstr "" + +#: src/windows/voicewindow.cpp:262 +msgid "Input Settings" +msgstr "" + +#: src/windows/profile/mutualguildspane.cpp:39 +msgid "Unknown Server" +msgstr "" + +#: src/windows/profile/userinfopane.cpp:145 +msgid "NOTE" +msgstr "" + +#: src/windows/profile/userinfopane.cpp:191 +msgid "ABOUT ME" +msgstr "" + +#: src/windows/profile/userinfopane.cpp:217 +msgid "Failed to set note" +msgstr "" + +#: src/windows/profile/userinfopane.cpp:239 +#: src/windows/guildsettings/memberspane.cpp:215 +msgid "Account created: " +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:56 +msgid "{} made changes to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:62 +msgid "Set the server icon" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:67 +msgid "Set the server name to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:70 +msgid "Set the server name" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:77 +msgid "{} created a voice channel #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:80 +msgid "{} created a text channel #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:88 +#: src/windows/guildsettings/auditlogpane.cpp:443 +msgid "Set the name to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:92 +#: src/windows/guildsettings/auditlogpane.cpp:129 +msgid "Marked the channel as NSFW" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:94 +#: src/windows/guildsettings/auditlogpane.cpp:131 +msgid "Unmarked the channel as NSFW" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:101 +msgid "{} made changes to #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:104 +msgid "{} made changes to <#{}>" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:114 +#: src/windows/guildsettings/auditlogpane.cpp:356 +#: src/windows/guildsettings/auditlogpane.cpp:468 +msgid "Changed the name from {} to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:118 +#: src/windows/guildsettings/auditlogpane.cpp:249 +#: src/windows/guildsettings/auditlogpane.cpp:327 +msgid "Changed the name to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:123 +msgid "Changed the topic to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:125 +msgid "Cleared the topic" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:136 +#: src/windows/guildsettings/auditlogpane.cpp:452 +#: src/windows/guildsettings/auditlogpane.cpp:476 +msgid "Disabled slowmode" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:138 +#: src/windows/guildsettings/auditlogpane.cpp:454 +#: src/windows/guildsettings/auditlogpane.cpp:478 +msgid "Set slowmode to {} seconds" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:144 +msgid "{} removed #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:150 +msgid "{} created channel overrides for #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:152 +msgid "{} created channel overrides for <#{}>" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:159 +msgid "{} updated channel overrides for #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:161 +msgid "{} updated channel overrides for <#{}>" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:168 +msgid "{} removed channel overrides for #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:170 +msgid "{} removed channel overrides for <#{}>" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:175 +msgid "{} kicked {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:178 +msgid "{} pruned {} members" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:179 +msgid "For {} days of inactivity" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:183 +msgid "{} banned {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:187 +msgid "{} removed the ban for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:191 +msgid "{} updated {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:196 +msgid "Deafened them" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:196 +msgid "Undeafened them" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:198 +msgid "Muted them" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:198 +msgid "Unmuted them" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:200 +msgid "Set their nickname to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:206 +msgid "{} updated roles for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:211 +msgid "Removed a role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:213 +msgid "Added a role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:221 +msgid "{} moved a user to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:224 +msgid "{} moved {} users to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:229 +msgid "{} disconnected {} users from voice" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:234 +msgid "{} added {} to the server" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:238 +msgid "{} created the role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:242 +msgid "{} updated the role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:253 +msgid "Removed the color" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:255 +msgid "Set the color to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:257 +msgid "Updated the permissions" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:259 +msgid "Mentionable" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:259 +msgid "Not mentionable" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:261 +msgid "Not hoisted" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:261 +msgid "Hoisted" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:267 +msgid "{} deleted the role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:271 +msgid "{} created an invite {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:277 +msgid "For channel {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:281 +msgid "Which has unlimited uses" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:283 +msgid "Which has {} uses" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:286 +msgid "With temporary on" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:288 +msgid "With temporary off" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:294 +msgid "{} deleted an invite {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:299 +msgid "{} created the webhook {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:306 +msgid "With channel #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:319 +msgid "{} updated the webhook {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:322 +msgid "{} updated a webhook" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:330 +msgid "Changed the avatar" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:334 +msgid "Changed the channel to #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:337 +msgid "Changed the channel" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:343 +msgid "{} deleted the webhook {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:348 +msgid "{} created the emoji {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:353 +msgid "{} updated the emoji {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:361 +msgid "{} deleted the emoji {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:370 +msgid "{} deleted {} messages in #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:374 +msgid "{} deleted {} messages" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:380 +msgid "{} pinned a message by {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:384 +msgid "{} unpinned a message by {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:388 +msgid "{} started the stage for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:396 +#: src/windows/guildsettings/auditlogpane.cpp:416 +msgid "Set the topic to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:401 +#: src/windows/guildsettings/auditlogpane.cpp:421 +msgid "Set the privacy level to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:408 +msgid "{} updated the stage for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:428 +msgid "{} ended the stage for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:434 +msgid "{} created a thread {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:446 +#: src/windows/guildsettings/auditlogpane.cpp:482 +msgid "Archived the thread" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:446 +#: src/windows/guildsettings/auditlogpane.cpp:482 +msgid "Unarchived the thread" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:448 +#: src/windows/guildsettings/auditlogpane.cpp:472 +msgid "Set auto archive duration to {} minutes" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:456 +#: src/windows/guildsettings/auditlogpane.cpp:480 +msgid "Locked the thread, restricting it to only be unarchived by moderators" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:456 +#: src/windows/guildsettings/auditlogpane.cpp:480 +msgid "Unlocked the thread, allowing it to be unarchived by non-moderators" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:462 +msgid "{} made changes to the thread " +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:486 +msgid "{} deleted the thread {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:490 +msgid "Unknown action" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:498 +msgid "Reason: {}" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:13 +msgid "Unban" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:32 +msgid "" +"You do not have permission to see bans. However, bans made while you are " +"connected will appear here" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:56 +msgid "User" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:57 +msgid "Reason" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:101 +msgid "Failed to unban user" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:18 +#: src/windows/guildsettings/invitespane.cpp:12 +msgid "Delete" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:20 +msgid "Copy Emoji URL" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:21 +msgid "Open in Browser" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:49 +#: src/windows/guildsettings/memberspane.cpp:65 +#: src/windows/guildsettings/rolespane.cpp:118 +msgid "Filter" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:69 +msgid "Emoji" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:77 +#: src/windows/guildsettings/emojispane.cpp:99 +msgid "Name" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:101 +msgid "Creator" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:102 +msgid "Is Animated?" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:133 +#: src/windows/guildsettings/emojispane.cpp:137 +#: src/windows/guildsettings/emojispane.cpp:139 +#: src/windows/guildsettings/emojispane.cpp:223 +#: src/windows/guildsettings/emojispane.cpp:231 +#: src/windows/guildsettings/invitespane.cpp:75 +msgid "Yes" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:133 +#: src/windows/guildsettings/emojispane.cpp:135 +#: src/windows/guildsettings/emojispane.cpp:137 +#: src/windows/guildsettings/invitespane.cpp:75 +msgid "No" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:187 +msgid "Failed to set emoji name" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:207 +msgid "Are you sure you want to delete {}?" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:210 +msgid "Failed to delete emoji" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:15 +msgid "Guild name" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:37 +msgid "Press enter or lose focus to submit" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:53 +msgid "Click to choose a file, right click to paste" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:109 +msgid "Failed to set guild name" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:123 +msgid "Failed to set guild icon" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:147 +msgid "Choose new guild icon" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:170 +msgid "Supported images" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:183 +msgid "All files" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:34 +msgid "Code" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:35 +msgid "Expires" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:36 +msgid "Created by" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:37 +msgid "Uses" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:38 +msgid "Max uses" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:39 +msgid "Grants temporary membership" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:64 +msgid "Never" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:71 +msgid "Unlimited" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:106 +msgid "Failed to delete invite" +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:21 +msgid "Some members may not be shown if the client is not aware of them" +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:179 +msgid "User is a bot" +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:214 +msgid "User ID: " +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:217 +msgid "Joined server: " +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:219 +msgid "Joined server: Unknown" +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:220 +msgid "Nickname: " +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:223 +msgid "Boosting since {}" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:71 +msgid "Failed to set role position" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:217 +msgid "Press enter to submit" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:236 +msgid "Failed to set role color" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:267 +msgid "General" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:277 +msgid "Text Channels" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:295 +msgid "Membership" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:303 +msgid "Advanced" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:305 +msgid "Voice Channels" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:319 +msgid "Events" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:412 +msgid "Failed to set role name" +msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 00000000..69fe84a4 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,1502 @@ +# Portuguese translations for PACKAGE package +# Traduções em português brasileiro para o pacote PACKAGE. +# Copyright (C) 2024 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Gabriel de Moura , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-13 09:57-0300\n" +"PO-Revision-Date: 2024-06-10 00:20-0300\n" +"Last-Translator: Gabriel de Moura \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: src/abaddon.cpp:215 +msgid "css failed parsing (" +msgstr "CSS falhou" + +#: src/abaddon.cpp:231 +msgid "The PNG pixbufloader wasn't detected. Abaddon may not work as a result." +msgstr "" +"A biblioteca pixbufloader para arquivos PNG não foi detectado. Abaddon pode " +"não funcionar como esperado." + +#: src/abaddon.cpp:237 +msgid "" +"The GIF pixbufloader wasn't detected. Animations may not display as a result." +msgstr "" +"A biblioteca pixbufloader para arquivos GIF não foi detectado. Animações " +"podem não funcionar corretamente." + +#: src/abaddon.cpp:252 +msgid "The settings file could not be opened!" +msgstr "Não foi possível carregar o arquivo de configurações!" + +#: src/abaddon.cpp:258 +msgid "The emoji file couldn't be loaded!" +msgstr "Não foi possível carregar o arquivo de emoji!" + +#: src/abaddon.cpp:264 +msgid "The Discord cache could not be created!" +msgstr "Não foi possível criar cache para o Discord!" + +#: src/abaddon.cpp:272 +msgid "The audio engine could not be initialized!" +msgstr "Não foi possível inicializar o motor de áudio!" + +#: src/abaddon.cpp:333 +msgid "Quit" +msgstr "Sair" + +#: src/abaddon.cpp:468 +msgid "Discord rejected your token" +msgstr "O Discord rejeitou o seu token de autenticação" + +#: src/abaddon.cpp:473 +msgid "Lost connection with Discord's gateway. Try reconnecting (code " +msgstr "Conexão com o gateway do discord perdida. Tente reconectar (código" + +#: src/abaddon.cpp:483 src/abaddon.cpp:926 +msgid "This thread is archived. Sending a message will unarchive it" +msgstr "Esta thread está arquivada. Mandar uma mensagem vai desarquivá-la" + +#: src/abaddon.cpp:626 +msgid "" +"Cookies could not be fetched. This may increase your chances of being " +"flagged by Discord's anti-spam" +msgstr "" +"Não foi possível obter cookies. Isto pode aumentar as chances de ser pego " +"pelo sistema anti-spam do Discord" + +#: src/abaddon.cpp:635 +msgid "" +"Build number could not be fetched. This may increase your chances of being " +"flagged by Discord's anti-spam" +msgstr "" +"Não foi possível obter o número de build. Isto pode aumentar as chances de " +"ser pego pelo sistema anti-spam do Discord" + +#: src/abaddon.cpp:652 +msgid "Failed to accept the verification gate." +msgstr "" + +#: src/abaddon.cpp:677 +msgid "Insert Mention" +msgstr "Inserir Menção" + +#: src/abaddon.cpp:678 +msgid "Ban" +msgstr "Banir" + +#: src/abaddon.cpp:679 +msgid "Kick" +msgstr "Expulsar" + +#: src/abaddon.cpp:680 src/components/chatlist.cpp:298 +#: src/windows/guildsettings/banspane.cpp:14 +#: src/windows/guildsettings/emojispane.cpp:19 +msgid "Copy ID" +msgstr "Copiar ID" + +#: src/abaddon.cpp:681 +msgid "Go to DM" +msgstr "Ir para DM" + +#: src/abaddon.cpp:682 src/windows/guildsettingswindow.cpp:66 +msgid "Roles" +msgstr "Cargos" + +#: src/abaddon.cpp:683 +msgid "View Profile" +msgstr "Ver Perfil" + +#: src/abaddon.cpp:684 +msgid "Remove From Group" +msgstr "Remover do Grupo" + +#: src/abaddon.cpp:1002 +msgid "Are you sure you want to leave " +msgstr "Você tem certeza de que quer sair " + +#: src/abaddon.cpp:1012 +msgid "Are you sure you want to kick " +msgstr "Você tem certeza de que quer expulsar " + +#: src/abaddon.cpp:1022 +msgid "Are you sure you want to ban " +msgstr "Você tem certeza de que quer banir " + +#: src/abaddon.cpp:1119 +msgid "css failed to load (" +msgstr "css falhou em carregar (" + +#: src/dialogs/confirm.cpp:6 +msgid "Confirm" +msgstr "Confirmar" + +#: src/dialogs/confirm.cpp:9 src/dialogs/friendpicker.cpp:15 +#: src/dialogs/setstatus.cpp:27 src/dialogs/textinput.cpp:12 +#: src/dialogs/token.cpp:16 src/components/friendslist.cpp:293 +msgid "Cancel" +msgstr "Cancelar" + +#: src/dialogs/confirm.cpp:15 +msgid "Are you sure?" +msgstr "Você tem certeza?" + +#: src/dialogs/friendpicker.cpp:8 +msgid "Pick a friend" +msgstr "Selecione um Amigo" + +#: src/dialogs/setstatus.cpp:24 src/windows/mainwindow.cpp:268 +msgid "Set Status" +msgstr "Definir Status" + +#: src/dialogs/setstatus.cpp:35 src/dialogs/setstatus.cpp:39 +#: src/components/friendslist.cpp:27 +msgid "Online" +msgstr "Online" + +#: src/dialogs/setstatus.cpp:36 +msgid "Do Not Disturb" +msgstr "Não Perturbe" + +#: src/dialogs/setstatus.cpp:37 +msgid "Away" +msgstr "Ocupado" + +#: src/dialogs/setstatus.cpp:38 +msgid "Invisible" +msgstr "Invisível" + +#: src/dialogs/setstatus.cpp:41 +msgid "Playing" +msgstr "Jogando" + +#: src/dialogs/setstatus.cpp:42 +msgid "Streaming" +msgstr "Transmitindo" + +#: src/dialogs/setstatus.cpp:43 +msgid "Listening to" +msgstr "Escutando" + +#: src/dialogs/setstatus.cpp:44 +msgid "Watching" +msgstr "Assitindo" + +#: src/dialogs/setstatus.cpp:45 src/dialogs/setstatus.cpp:47 +msgid "Custom" +msgstr "Customizado" + +#: src/dialogs/setstatus.cpp:46 +msgid "Competing in" +msgstr "Competindo em" + +#: src/dialogs/setstatus.cpp:57 +msgid "How are you, {}?" +msgstr "Como você está, {}?" + +#: src/dialogs/setstatus.cpp:59 +msgid "Status" +msgstr "Status" + +#: src/dialogs/setstatus.cpp:61 +msgid "Activity" +msgstr "Atividade" + +#: src/dialogs/token.cpp:13 src/windows/mainwindow.cpp:262 +msgid "Set Token" +msgstr "Definir Token" + +#: src/dialogs/verificationgate.cpp:8 +msgid "Verification Required" +msgstr "Verificação Necessária" + +#: src/dialogs/verificationgate.cpp:14 src/components/friendslist.cpp:258 +msgid "Accept" +msgstr "Aceitar" + +#: src/components/chatinput.cpp:143 +msgid "Choose file" +msgstr "Escolha um arquivo" + +#: src/components/chatinput.cpp:389 src/components/friendslist.cpp:287 +msgid "Remove" +msgstr "Remover" + +#: src/components/chatinput.cpp:394 +msgid "Change Filename" +msgstr "Alterar Nome do Arquivo" + +#: src/components/chatinput.cpp:396 +msgid "Enter new filename for attachment" +msgstr "Insira novo nome de arquivo para anexo" + +#: src/components/chatinput.cpp:396 +msgid "Enter filename" +msgstr "Inserir nome de arquivo" + +#: src/components/chatinput.cpp:404 +msgid "Change Alt-Text" +msgstr "Alterar texto alternativo" + +#: src/components/chatinput.cpp:406 +msgid "Enter description (alt-text) for attachment" +msgstr "Inserir descrição para o anexo" + +#: src/components/chatinput.cpp:406 +msgid "Enter alt-text" +msgstr "Inserir texto alternativo" + +#: src/components/chatinputindicator.cpp:118 +msgid " is typing..." +msgstr " está digitando..." + +#: src/components/chatinputindicator.cpp:120 +msgid " and " +msgstr " e " + +#: src/components/chatinputindicator.cpp:120 +#: src/components/chatinputindicator.cpp:125 +msgid " are typing..." +msgstr " estã digitando..." + +#: src/components/chatinputindicator.cpp:125 +msgid "and " +msgstr "e " + +#: src/components/chatinputindicator.cpp:127 +msgid "Several people are typing..." +msgstr "Várias pessoas estão digitando..." + +#: src/components/chatlist.cpp:305 +msgid "Delete Message" +msgstr "Deletar Mensagem" + +#: src/components/chatlist.cpp:312 +msgid "Edit Message" +msgstr "Editar Mensagem" + +#: src/components/chatlist.cpp:319 +msgid "Copy Content" +msgstr "Copiar Conteúdo" + +#: src/components/chatlist.cpp:328 +msgid "Reply To" +msgstr "Responder a" + +#: src/components/chatlist.cpp:335 +msgid "Unpin" +msgstr "Desafixar" + +#: src/components/chatlist.cpp:341 +msgid "Pin" +msgstr "Fixar" + +#: src/components/chatmessage.cpp:17 +msgid "Copy Link" +msgstr "Copiar Link" + +#: src/components/chatmessage.cpp:148 +msgid "deleted" +msgstr "deletado" + +#: src/components/chatmessage.cpp:150 +msgid "edited" +msgstr "editado" + +#: src/components/chatmessage.cpp:204 +msgid "boosted server" +msgstr "impulsionou servidor" + +#: src/components/chatmessage.cpp:207 +msgid "user joined" +msgstr "usuário entrou" + +#: src/components/chatmessage.cpp:210 +msgid "message pinned" +msgstr "mensagem fixada" + +#: src/components/chatmessage.cpp:220 +msgid "used {} with {}" +msgstr "usou {} com {}" + +#: src/components/chatmessage.cpp:235 +msgid "" +"{} added {}" +msgstr "" +"{} adicionou {}" + +#: src/components/chatmessage.cpp:245 +msgid "" +"{} left" +msgstr "" +"{} saiu" + +#: src/components/chatmessage.cpp:247 +msgid "" +"{} removed {}" +msgstr "" +"{} removeu {}" + +#: src/components/chatmessage.cpp:254 +msgid "{} changed the name to {}" +msgstr "{} alterou o nome para {}" + +#: src/components/chatmessage.cpp:259 +msgid "{} changed the channel icon" +msgstr "{} alterou o ícone do canal" + +#: src/components/chatmessage.cpp:267 +msgid "" +"{} just boosted the server {} times! {} has " +"achieved Level {}}!" +msgstr "" +"{} acabou de impulsionar o servidor {} " +"vezes! {} atingiu nível {}}!" + +#: src/components/chatmessage.cpp:277 +msgid "" +"{} has added {} to this channel. Its most " +"important updates will show up here." +msgstr "" +"{} adicionou {} a este canal. As " +"atualizações mais importantes aparecerão aqui" + +#: src/components/chatmessage.cpp:283 +msgid "started a call" +msgstr "iniciou uma chamada" + +#: src/components/chatmessage.cpp:286 +msgid "" +"This server has been removed from Server Discovery because it no longer " +"passes all the requirements." +msgstr "" + +#: src/components/chatmessage.cpp:289 +msgid "" +"This server is eligible for Server Discovery again and has been " +"automatically relisted!" +msgstr "" + +#: src/components/chatmessage.cpp:292 +msgid "" +"This server has failed Discovery activity requirements for 1 week. If this " +"server fails for 4 weeks in a row, it will be automatically removed from " +"Discovery." +msgstr "" + +#: src/components/chatmessage.cpp:295 +msgid "" +"This server has failed Discovery activity requirements for 3 weeks in a row. " +"If this server fails for 1 more week, it will be removed from Discovery." +msgstr "" + +#: src/components/chatmessage.cpp:301 +msgid "{} started a thread: " +msgstr "{} iniciou uma thread: " + +#: src/components/chatmessage.cpp:308 +msgid "{} started a thread: {}" +msgstr "{} iniciou uma thread: {}" + +#: src/components/chatmessage.cpp:715 src/components/chatmessage.cpp:738 +#: src/windows/voicewindow.cpp:49 src/windows/guildsettings/auditlogpane.cpp:45 +msgid "Unknown User" +msgstr "Usuário Desconhecido" + +#: src/components/chatmessage.cpp:731 +msgid "{} used /{}" +msgstr "{} usou /{}" + +#: src/components/chatmessage.cpp:742 +msgid "deleted message" +msgstr "mensagem apagada" + +#: src/components/chatmessage.cpp:748 +msgid "attachment" +msgstr "anexo" + +#: src/components/chatmessage.cpp:750 +msgid "embed" +msgstr "embutido" + +#: src/components/chatmessage.cpp:770 +msgid "reply unavailable" +msgstr "resposta indisponível" + +#: src/components/chatwindow.cpp:334 +msgid "Replying to {}" +msgstr "Respondendo a {}" + +#: src/components/chatwindow.cpp:336 +msgid "Replying..." +msgstr "Respondendo..." + +#: src/components/chatwindow.cpp:356 +msgid "Editing..." +msgstr "Editando..." + +#: src/components/friendslist.cpp:26 src/windows/mainwindow.cpp:290 +msgid "Friends" +msgstr "Amigos" + +#: src/components/friendslist.cpp:28 +msgid "Pending" +msgstr "Pendente" + +#: src/components/friendslist.cpp:29 +msgid "Blocked" +msgstr "Bloqueado" + +#: src/components/friendslist.cpp:114 +msgid "Failed to accept" +msgstr "Falhou em aceitar" + +#: src/components/friendslist.cpp:129 +msgid "Are you sure you want to unblock {}?" +msgstr "Você tem certeza de que quer desbloquear {}?" + +#: src/components/friendslist.cpp:132 +msgid "Are you sure you want to remove {}?" +msgstr "Você tem certeza de que quer remover {}?" + +#: src/components/friendslist.cpp:135 +msgid "Are you sure you want to ignore {}?" +msgstr "Você tem certeza de que quer ignorar {}?" + +#: src/components/friendslist.cpp:138 +msgid "Are you sure you want to cancel your request to {}?" +msgstr "Você tem certeza de que quer cancelar pedido de amizade para {}?" + +#: src/components/friendslist.cpp:146 +msgid "Failed to remove user" +msgstr "Falhou em remover usuário" + +#: src/components/friendslist.cpp:195 +msgid "Add a Friend" +msgstr "Adicionar um amigo" + +#: src/components/friendslist.cpp:197 +msgid "Add" +msgstr "Adicionar" + +#: src/components/friendslist.cpp:207 +msgid "Enter a Username#1234" +msgstr "Insira um NomeDeUsuário#1234" + +#: src/components/friendslist.cpp:220 +msgid "Invalid input" +msgstr "Entrad inválida" + +#: src/components/friendslist.cpp:230 +msgid "Hang on..." +msgstr "Um momento..." + +#: src/components/friendslist.cpp:235 +msgid "Success!" +msgstr "Sucesso!" + +#: src/components/friendslist.cpp:237 +msgid "Failed: {}" +msgstr "Falhou: {}" + +#: src/components/friendslist.cpp:290 +msgid "Ignore" +msgstr "Ignorar" + +#: src/components/friendslist.cpp:331 +msgid "Incoming Friend Request" +msgstr "Pedido de Amizade Pendente" + +#: src/components/friendslist.cpp:334 +msgid "Outgoing Friend Request" +msgstr "Pedido de Amizade Enviado" + +#: src/components/ratelimitindicator.cpp:88 +msgid "You may bypass slowmode." +msgstr "Você é imune ao modo lento" + +#: src/components/ratelimitindicator.cpp:93 +msgid "{}s" +msgstr "{}s" + +#: src/components/ratelimitindicator.cpp:96 +msgid "Slowmode is enabled. Members can send one message every {} seconds" +msgstr "" +"Modo lento está ativo. Membros podem enviar apenas uma mensagem a cada {} " +"segundos" + +#: src/components/voiceinfobox.cpp:33 src/components/voiceinfobox.cpp:34 +msgid "You shouldn't see me" +msgstr "Você não deveria me ver" + +#: src/components/voiceinfobox.cpp:49 +msgid "Connecting" +msgstr "Conectando" + +#: src/components/voiceinfobox.cpp:52 +msgid "Establishing connection" +msgstr "Estabelecendo conexão" + +#: src/components/voiceinfobox.cpp:55 +msgid "Connected" +msgstr "Conectado" + +#: src/components/voiceinfobox.cpp:59 +msgid "Disconnected" +msgstr "Desconectado" + +#: src/components/voiceinfobox.cpp:62 src/components/voiceinfobox.cpp:118 +msgid "Unknown" +msgstr "Desconhecido" + +#: src/components/channellist/channellisttree.cpp:19 +#: src/components/channellist/channellisttree.cpp:23 +#: src/components/channellist/channellisttree.cpp:24 +#: src/components/channellist/channellisttree.cpp:34 +#: src/components/channellist/channellisttree.cpp:40 +msgid "_Copy ID" +msgstr "_Copiar ID" + +#: src/components/channellist/channellisttree.cpp:20 +msgid "View _Settings" +msgstr "Ver _Configurações" + +#: src/components/channellist/channellisttree.cpp:21 +#: src/components/channellist/channellisttree.cpp:41 +msgid "_Leave" +msgstr "_Sair" + +#: src/components/channellist/channellisttree.cpp:22 +#: src/components/channellist/channellisttree.cpp:25 +#: src/components/channellist/channellisttree.cpp:44 +msgid "Mark as _Read" +msgstr "Marcar como _Lido" + +#: src/components/channellist/channellisttree.cpp:27 +#: src/components/channellist/channellisttree.cpp:28 +msgid "Open in New _Tab" +msgstr "Abrir em Nova _Aba" + +#: src/components/channellist/channellisttree.cpp:31 +msgid "_Join" +msgstr "_Entrar" + +#: src/components/channellist/channellisttree.cpp:32 +msgid "_Disconnect" +msgstr "_Desconectar" + +#: src/components/channellist/channellisttree.cpp:37 +msgid "Join _Voice" +msgstr "Entrar em _Voz" + +#: src/components/channellist/channellisttree.cpp:38 +msgid "_Disconnect Voice" +msgstr "_Desconectar da Voz" + +#: src/components/channellist/channellisttree.cpp:42 +msgid "_Archive" +msgstr "_Arquivar" + +#: src/components/channellist/channellisttree.cpp:43 +msgid "_Unarchive" +msgstr "_Desarquivar" + +#: src/components/channellist/channellisttree.cpp:229 +msgid "Are you sure you want to leave this group DM?" +msgstr "Você tem certeza de que quer sair deste grupo de DM?" + +#: src/components/channellist/channellisttree.cpp:267 +msgid "Are you sure you want to leave this thread?" +msgstr "Você tem certeza de que quer sair desta thread?" + +#: src/components/channellist/channellisttree.cpp:1184 +msgid "Direct Messages" +msgstr "Mensagems Diretas" + +#: src/components/channellist/channellisttree.cpp:1356 +msgid "Close" +msgstr "Fechar" + +#: src/components/channellist/channellisttree.cpp:1356 +msgid "Leave" +msgstr "Sair" + +#: src/components/channellist/channellisttree.cpp:1410 +#: src/components/channellist/channellisttree.cpp:1424 +#: src/components/channellist/channellisttree.cpp:1466 +#: src/components/channellist/channellisttree.cpp:1491 +msgid "Unmute" +msgstr "Desmutar" + +#: src/components/channellist/channellisttree.cpp:1412 +#: src/components/channellist/channellisttree.cpp:1426 +#: src/components/channellist/channellisttree.cpp:1468 +#: src/components/channellist/channellisttree.cpp:1493 +#: src/windows/voicewindow.cpp:22 src/windows/voicewindow.cpp:93 +msgid "Mute" +msgstr "Mutar" + +#: src/windows/guildsettingswindow.cpp:64 +msgid "Info" +msgstr "Informações" + +#: src/windows/guildsettingswindow.cpp:65 src/windows/mainwindow.cpp:298 +msgid "Members" +msgstr "Membros" + +#: src/windows/guildsettingswindow.cpp:67 +msgid "Bans" +msgstr "Banimentos" + +#: src/windows/guildsettingswindow.cpp:69 +msgid "Invites" +msgstr "Convites" + +#: src/windows/guildsettingswindow.cpp:70 +msgid "Emojis" +msgstr "Emojis" + +#: src/windows/guildsettingswindow.cpp:72 +msgid "Audit Log" +msgstr "Registros de Auditoria" + +#: src/windows/mainwindow.cpp:258 +msgid "Connect" +msgstr "Conectar" + +#: src/windows/mainwindow.cpp:260 +msgid "Disconnect" +msgstr "Desconectar" + +#: src/windows/mainwindow.cpp:263 +msgid "Login with QR Code" +msgstr "Fazer Log-in com código QR" + +#: src/windows/mainwindow.cpp:266 +msgid "Not compiled with support" +msgstr "Não suportado pela build atual" + +#: src/windows/mainwindow.cpp:270 +msgid "Add user to DM" +msgstr "Adicionar usuário a DM" + +#: src/windows/mainwindow.cpp:279 +msgid "File" +msgstr "Arquivo" + +#: src/windows/mainwindow.cpp:281 +msgid "Reload CSS" +msgstr "Recarregar CSS" + +#: src/windows/mainwindow.cpp:282 +msgid "Clear file cache" +msgstr "Limpar cache de arquivo" + +#: src/windows/mainwindow.cpp:283 +msgid "Dump ready message" +msgstr "" + +#: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:98 +msgid "View" +msgstr "Ver" + +#: src/windows/mainwindow.cpp:291 +msgid "Pins" +msgstr "Pinos" + +#: src/windows/mainwindow.cpp:292 +msgid "Threads" +msgstr "Threads" + +#: src/windows/mainwindow.cpp:293 +msgid "Mark Server as Read" +msgstr "Marcar Servidor como Lido" + +#: src/windows/mainwindow.cpp:295 +msgid "Channels" +msgstr "Canais" + +#: src/windows/mainwindow.cpp:302 +msgid "Go Back" +msgstr "Voltar" + +#: src/windows/mainwindow.cpp:303 +msgid "Go Forward" +msgstr "" + +#: src/windows/pinnedwindow.cpp:18 +msgid "Pinned Messages" +msgstr "Mensagens Fixadas" + +#: src/windows/profilewindow.cpp:79 +msgid "User Info" +msgstr "Informações do Usuário" + +#: src/windows/profilewindow.cpp:80 +msgid "Mutual Servers" +msgstr "Servidores Mútuos" + +#: src/windows/profilewindow.cpp:81 +msgid "Mutual Friends" +msgstr "Amigos Mútuos" + +#: src/windows/profilewindow.cpp:112 +msgid "Originally known as {}" +msgstr "Originalmente conhecido como {}" + +#: src/windows/threadswindow.cpp:9 +msgid "Public" +msgstr "Público" + +#: src/windows/threadswindow.cpp:10 +msgid "Private" +msgstr "Privado" + +#: src/windows/threadswindow.cpp:16 +msgid "#{} - Threads" +msgstr "#{} - Threads" + +#: src/windows/threadswindow.cpp:32 +msgid "Active Threads" +msgstr "Threads Ativas" + +#: src/windows/threadswindow.cpp:33 +msgid "Archived Threads" +msgstr "Threads Arquivadas" + +#: src/windows/voicesettingswindow.cpp:21 +#: src/windows/voicesettingswindow.cpp:53 +msgid "Voice" +msgstr "Voz" + +#: src/windows/voicesettingswindow.cpp:22 +#: src/windows/voicesettingswindow.cpp:54 +msgid "Music" +msgstr "Música" + +#: src/windows/voicesettingswindow.cpp:23 +msgid "Restricted" +msgstr "Restrito" + +#: src/windows/voicesettingswindow.cpp:25 +msgid "" +"Sets the coding mode for the Opus encoder\n" +"Voice - Optimize for voice quality\n" +"Music - Optimize for non-voice signals incl. music\n" +"Restricted - Optimize for non-voice, low latency. Not recommended" +msgstr "" +"Define o modo de codificação para codificador Opus\n" +"Voz - Otimizar para qualidade de voz\n" +"Música - Optimize for non-voice signals incl. music\n" +"Restrito - Optimize for non-voice, low latency. Not recommended" + +#: src/windows/voicesettingswindow.cpp:52 +msgid "Auto" +msgstr "Automático" + +#: src/windows/voicesettingswindow.cpp:56 +msgid "" +"Signal hint. Tells Opus what the current signal is\n" +"Auto - Let Opus figure it out\n" +"Voice - Tell Opus it's a voice signal\n" +"Music - Tell Opus it's a music signal" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:130 +msgid "Coding Mode" +msgstr "Modo de Codificação" + +#: src/windows/voicesettingswindow.cpp:131 +msgid "Signal Hint" +msgstr "" + +#: src/windows/voicesettingswindow.cpp:132 +msgid "Bitrate" +msgstr "Taxa de bits" + +#: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:238 +msgid "Gain" +msgstr "" + +#: src/windows/voicewindow.cpp:94 +msgid "Deafen" +msgstr "" + +#: src/windows/voicewindow.cpp:95 +msgid "Suppress Noise" +msgstr "Suprimir Ruído" + +#: src/windows/voicewindow.cpp:96 +msgid "Mix Mono" +msgstr "" + +#: src/windows/voicewindow.cpp:99 +msgid "More _Settings" +msgstr "Mais _Configurações" + +#: src/windows/voicewindow.cpp:158 +msgid "" +"Voice Activation Detection method\n" +"Gate - Simple volume threshold. Slider changes threshold\n" +"RNNoise - Heavier on CPU. Slider changes probability threshold" +msgstr "" + +#: src/windows/voicewindow.cpp:161 +msgid "Gate" +msgstr "" + +#: src/windows/voicewindow.cpp:163 +msgid "RNNoise" +msgstr "" + +#: src/windows/voicewindow.cpp:237 +msgid "Threshold" +msgstr "" + +#: src/windows/voicewindow.cpp:247 +msgid "VAD Method" +msgstr "" + +#: src/windows/voicewindow.cpp:248 +msgid "Output Device" +msgstr "Dispositivo de Saída" + +#: src/windows/voicewindow.cpp:249 +msgid "Input Device" +msgstr "Dispositivo de Entrada" + +#: src/windows/voicewindow.cpp:262 +msgid "Input Settings" +msgstr "Configurações de Entrada" + +#: src/windows/profile/mutualguildspane.cpp:39 +msgid "Unknown Server" +msgstr "Servidor Desconhecido" + +#: src/windows/profile/userinfopane.cpp:145 +msgid "NOTE" +msgstr "ANOTAÇÃO" + +#: src/windows/profile/userinfopane.cpp:191 +msgid "ABOUT ME" +msgstr "SOBRE MIM" + +#: src/windows/profile/userinfopane.cpp:217 +msgid "Failed to set note" +msgstr "Falhou em definir anotação" + +#: src/windows/profile/userinfopane.cpp:239 +#: src/windows/guildsettings/memberspane.cpp:215 +msgid "Account created: " +msgstr "Conta criada: " + +#: src/windows/guildsettings/auditlogpane.cpp:56 +msgid "{} made changes to {}" +msgstr "{} fez mudanças em {}" + +#: src/windows/guildsettings/auditlogpane.cpp:62 +msgid "Set the server icon" +msgstr "Definiu o ícone do servidor" + +#: src/windows/guildsettings/auditlogpane.cpp:67 +msgid "Set the server name to {}" +msgstr "Definiu o nome do servidor como {}" + +#: src/windows/guildsettings/auditlogpane.cpp:70 +msgid "Set the server name" +msgstr "Definiu o nome do servidor" + +#: src/windows/guildsettings/auditlogpane.cpp:77 +msgid "{} created a voice channel #{}" +msgstr "{} criou um canal de voz #{}" + +#: src/windows/guildsettings/auditlogpane.cpp:80 +msgid "{} created a text channel #{}" +msgstr "{} criou um canal de texto #{}" + +#: src/windows/guildsettings/auditlogpane.cpp:88 +#: src/windows/guildsettings/auditlogpane.cpp:443 +msgid "Set the name to {}" +msgstr "Mudou o nome para {}" + +#: src/windows/guildsettings/auditlogpane.cpp:92 +#: src/windows/guildsettings/auditlogpane.cpp:129 +msgid "Marked the channel as NSFW" +msgstr "Marcou o canal como NSFW" + +#: src/windows/guildsettings/auditlogpane.cpp:94 +#: src/windows/guildsettings/auditlogpane.cpp:131 +msgid "Unmarked the channel as NSFW" +msgstr "Desmarcou o canal como NSFW" + +#: src/windows/guildsettings/auditlogpane.cpp:101 +msgid "{} made changes to #{}" +msgstr "{} fez mudanças em #{}" + +#: src/windows/guildsettings/auditlogpane.cpp:104 +msgid "{} made changes to <#{}>" +msgstr "{} fez mudanças em <#{}>" + +#: src/windows/guildsettings/auditlogpane.cpp:114 +#: src/windows/guildsettings/auditlogpane.cpp:356 +#: src/windows/guildsettings/auditlogpane.cpp:468 +msgid "Changed the name from {} to {}" +msgstr "Alterou o nome de {} para {}" + +#: src/windows/guildsettings/auditlogpane.cpp:118 +#: src/windows/guildsettings/auditlogpane.cpp:249 +#: src/windows/guildsettings/auditlogpane.cpp:327 +msgid "Changed the name to {}" +msgstr "Alterou o nome para {}" + +#: src/windows/guildsettings/auditlogpane.cpp:123 +msgid "Changed the topic to {}" +msgstr "Mudou o tópico para {}" + +#: src/windows/guildsettings/auditlogpane.cpp:125 +msgid "Cleared the topic" +msgstr "Limpou o tópico" + +#: src/windows/guildsettings/auditlogpane.cpp:136 +#: src/windows/guildsettings/auditlogpane.cpp:452 +#: src/windows/guildsettings/auditlogpane.cpp:476 +msgid "Disabled slowmode" +msgstr "Desativou modo câmera lenta" + +#: src/windows/guildsettings/auditlogpane.cpp:138 +#: src/windows/guildsettings/auditlogpane.cpp:454 +#: src/windows/guildsettings/auditlogpane.cpp:478 +msgid "Set slowmode to {} seconds" +msgstr "Definiu o temporizador do câmera lenta para {} segundos" + +#: src/windows/guildsettings/auditlogpane.cpp:144 +msgid "{} removed #{}" +msgstr "{} removeu #{}" + +#: src/windows/guildsettings/auditlogpane.cpp:150 +msgid "{} created channel overrides for #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:152 +msgid "{} created channel overrides for <#{}>" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:159 +msgid "{} updated channel overrides for #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:161 +msgid "{} updated channel overrides for <#{}>" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:168 +msgid "{} removed channel overrides for #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:170 +msgid "{} removed channel overrides for <#{}>" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:175 +msgid "{} kicked {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:178 +msgid "{} pruned {} members" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:179 +msgid "For {} days of inactivity" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:183 +msgid "{} banned {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:187 +msgid "{} removed the ban for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:191 +msgid "{} updated {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:196 +msgid "Deafened them" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:196 +msgid "Undeafened them" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:198 +msgid "Muted them" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:198 +msgid "Unmuted them" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:200 +msgid "Set their nickname to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:206 +msgid "{} updated roles for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:211 +msgid "Removed a role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:213 +msgid "Added a role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:221 +msgid "{} moved a user to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:224 +msgid "{} moved {} users to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:229 +msgid "{} disconnected {} users from voice" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:234 +msgid "{} added {} to the server" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:238 +msgid "{} created the role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:242 +msgid "{} updated the role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:253 +msgid "Removed the color" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:255 +msgid "Set the color to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:257 +msgid "Updated the permissions" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:259 +msgid "Mentionable" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:259 +msgid "Not mentionable" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:261 +msgid "Not hoisted" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:261 +msgid "Hoisted" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:267 +msgid "{} deleted the role {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:271 +msgid "{} created an invite {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:277 +msgid "For channel {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:281 +msgid "Which has unlimited uses" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:283 +msgid "Which has {} uses" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:286 +msgid "With temporary on" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:288 +msgid "With temporary off" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:294 +msgid "{} deleted an invite {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:299 +msgid "{} created the webhook {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:306 +msgid "With channel #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:319 +msgid "{} updated the webhook {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:322 +msgid "{} updated a webhook" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:330 +msgid "Changed the avatar" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:334 +msgid "Changed the channel to #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:337 +msgid "Changed the channel" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:343 +msgid "{} deleted the webhook {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:348 +msgid "{} created the emoji {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:353 +msgid "{} updated the emoji {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:361 +msgid "{} deleted the emoji {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:370 +msgid "{} deleted {} messages in #{}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:374 +msgid "{} deleted {} messages" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:380 +msgid "{} pinned a message by {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:384 +msgid "{} unpinned a message by {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:388 +msgid "{} started the stage for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:396 +#: src/windows/guildsettings/auditlogpane.cpp:416 +msgid "Set the topic to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:401 +#: src/windows/guildsettings/auditlogpane.cpp:421 +msgid "Set the privacy level to {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:408 +msgid "{} updated the stage for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:428 +msgid "{} ended the stage for {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:434 +msgid "{} created a thread {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:446 +#: src/windows/guildsettings/auditlogpane.cpp:482 +msgid "Archived the thread" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:446 +#: src/windows/guildsettings/auditlogpane.cpp:482 +msgid "Unarchived the thread" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:448 +#: src/windows/guildsettings/auditlogpane.cpp:472 +msgid "Set auto archive duration to {} minutes" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:456 +#: src/windows/guildsettings/auditlogpane.cpp:480 +msgid "Locked the thread, restricting it to only be unarchived by moderators" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:456 +#: src/windows/guildsettings/auditlogpane.cpp:480 +msgid "Unlocked the thread, allowing it to be unarchived by non-moderators" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:462 +msgid "{} made changes to the thread " +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:486 +msgid "{} deleted the thread {}" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:490 +msgid "Unknown action" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:498 +msgid "Reason: {}" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:13 +msgid "Unban" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:32 +msgid "" +"You do not have permission to see bans. However, bans made while you are " +"connected will appear here" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:56 +msgid "User" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:57 +msgid "Reason" +msgstr "" + +#: src/windows/guildsettings/banspane.cpp:101 +msgid "Failed to unban user" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:18 +#: src/windows/guildsettings/invitespane.cpp:12 +msgid "Delete" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:20 +msgid "Copy Emoji URL" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:21 +msgid "Open in Browser" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:49 +#: src/windows/guildsettings/memberspane.cpp:65 +#: src/windows/guildsettings/rolespane.cpp:118 +msgid "Filter" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:69 +msgid "Emoji" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:77 +#: src/windows/guildsettings/emojispane.cpp:99 +msgid "Name" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:101 +msgid "Creator" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:102 +msgid "Is Animated?" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:133 +#: src/windows/guildsettings/emojispane.cpp:137 +#: src/windows/guildsettings/emojispane.cpp:139 +#: src/windows/guildsettings/emojispane.cpp:223 +#: src/windows/guildsettings/emojispane.cpp:231 +#: src/windows/guildsettings/invitespane.cpp:75 +msgid "Yes" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:133 +#: src/windows/guildsettings/emojispane.cpp:135 +#: src/windows/guildsettings/emojispane.cpp:137 +#: src/windows/guildsettings/invitespane.cpp:75 +msgid "No" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:187 +msgid "Failed to set emoji name" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:207 +msgid "Are you sure you want to delete {}?" +msgstr "" + +#: src/windows/guildsettings/emojispane.cpp:210 +msgid "Failed to delete emoji" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:15 +msgid "Guild name" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:37 +msgid "Press enter or lose focus to submit" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:53 +msgid "Click to choose a file, right click to paste" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:109 +msgid "Failed to set guild name" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:123 +msgid "Failed to set guild icon" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:147 +msgid "Choose new guild icon" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:170 +msgid "Supported images" +msgstr "" + +#: src/windows/guildsettings/infopane.cpp:183 +msgid "All files" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:34 +msgid "Code" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:35 +msgid "Expires" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:36 +msgid "Created by" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:37 +msgid "Uses" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:38 +msgid "Max uses" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:39 +msgid "Grants temporary membership" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:64 +msgid "Never" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:71 +msgid "Unlimited" +msgstr "" + +#: src/windows/guildsettings/invitespane.cpp:106 +msgid "Failed to delete invite" +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:21 +msgid "Some members may not be shown if the client is not aware of them" +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:179 +msgid "User is a bot" +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:214 +msgid "User ID: " +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:217 +msgid "Joined server: " +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:219 +msgid "Joined server: Unknown" +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:220 +msgid "Nickname: " +msgstr "" + +#: src/windows/guildsettings/memberspane.cpp:223 +msgid "Boosting since {}" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:71 +msgid "Failed to set role position" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:217 +msgid "Press enter to submit" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:236 +msgid "Failed to set role color" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:267 +msgid "General" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:277 +msgid "Text Channels" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:295 +msgid "Membership" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:303 +msgid "Advanced" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:305 +msgid "Voice Channels" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:319 +msgid "Events" +msgstr "" + +#: src/windows/guildsettings/rolespane.cpp:412 +msgid "Failed to set role name" +msgstr "" diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 7f4281d6..9581a36b 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -24,6 +24,7 @@ #include "notifications/notifications.hpp" #include "remoteauth/remoteauthdialog.hpp" #include "util.hpp" +#include #if defined(__APPLE__) #include @@ -211,7 +212,7 @@ int Abaddon::StartGTK() { m_css_provider = Gtk::CssProvider::create(); m_css_provider->signal_parsing_error().connect([](const Glib::RefPtr §ion, const Glib::Error &error) { - Gtk::MessageDialog dlg("css failed parsing (" + error.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("css failed parsing (") + error.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); }); @@ -227,13 +228,13 @@ int Abaddon::StartGTK() { } if (!png_found) { - Gtk::MessageDialog dlg("The PNG pixbufloader wasn't detected. Abaddon may not work as a result.", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("The PNG pixbufloader wasn't detected. Abaddon may not work as a result."), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } if (!gif_found) { - Gtk::MessageDialog dlg("The GIF pixbufloader wasn't detected. Animations may not display as a result.", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("The GIF pixbufloader wasn't detected. Animations may not display as a result."), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -248,19 +249,19 @@ int Abaddon::StartGTK() { #endif if (!m_settings.IsValid()) { - Gtk::MessageDialog dlg(*m_main_window, "The settings file could not be opened!", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, _("The settings file could not be opened!"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } if (!m_emojis.Load()) { - Gtk::MessageDialog dlg(*m_main_window, "The emoji file couldn't be loaded!", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, _("The emoji file couldn't be loaded!"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } if (!m_discord.IsStoreValid()) { - Gtk::MessageDialog dlg(*m_main_window, "The Discord cache could not be created!", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, _("The Discord cache could not be created!"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); return 1; @@ -268,7 +269,7 @@ int Abaddon::StartGTK() { #ifdef WITH_VOICE if (!m_audio.OK()) { - Gtk::MessageDialog dlg(*m_main_window, "The audio engine could not be initialized!", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, _("The audio engine could not be initialized!"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -329,7 +330,7 @@ int Abaddon::StartGTK() { m_tray->signal_popup_menu().connect(sigc::mem_fun(*this, &Abaddon::on_tray_popup_menu)); } m_tray_menu = Gtk::make_managed(); - m_tray_exit = Gtk::make_managed("Quit", false); + m_tray_exit = Gtk::make_managed(_("Quit"), false); m_tray_exit->signal_activate().connect(sigc::mem_fun(*this, &Abaddon::on_tray_menu_click)); @@ -464,12 +465,12 @@ void Abaddon::DiscordOnDisconnect(bool is_reconnecting, GatewayCloseCode close_c m_main_window->UpdateComponents(); if (close_code == GatewayCloseCode::AuthenticationFailed) { - Gtk::MessageDialog dlg(*m_main_window, "Discord rejected your token", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, _("Discord rejected your token"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } else if (close_code != GatewayCloseCode::Normal) { Gtk::MessageDialog dlg(*m_main_window, - "Lost connection with Discord's gateway. Try reconnecting (code " + std::to_string(static_cast(close_code)) + ")", + _("Lost connection with Discord's gateway. Try reconnecting (code ") + std::to_string(static_cast(close_code)) + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); @@ -479,7 +480,7 @@ void Abaddon::DiscordOnDisconnect(bool is_reconnecting, GatewayCloseCode close_c void Abaddon::DiscordOnThreadUpdate(const ThreadUpdateData &data) { if (data.Thread.ID == m_main_window->GetChatActiveChannel()) { if (data.Thread.ThreadMetadata->IsArchived) - m_main_window->GetChatWindow()->SetTopic("This thread is archived. Sending a message will unarchive it"); + m_main_window->GetChatWindow()->SetTopic(_("This thread is archived. Sending a message will unarchive it")); else m_main_window->GetChatWindow()->SetTopic(""); } @@ -622,7 +623,7 @@ void Abaddon::RunFirstTimeDiscordStartup() { m_discord.SetCookie(*cookie); } else { ConfirmDialog confirm(*m_main_window); - confirm.SetConfirmText("Cookies could not be fetched. This may increase your chances of being flagged by Discord's anti-spam"); + confirm.SetConfirmText(_("Cookies could not be fetched. This may increase your chances of being flagged by Discord's anti-spam")); confirm.SetAcceptOnly(true); confirm.run(); } @@ -631,7 +632,7 @@ void Abaddon::RunFirstTimeDiscordStartup() { m_discord.SetBuildNumber(*build_number); } else { ConfirmDialog confirm(*m_main_window); - confirm.SetConfirmText("Build number could not be fetched. This may increase your chances of being flagged by Discord's anti-spam"); + confirm.SetConfirmText(_("Build number could not be fetched. This may increase your chances of being flagged by Discord's anti-spam")); confirm.SetAcceptOnly(true); confirm.run(); } @@ -648,7 +649,7 @@ void Abaddon::ShowGuildVerificationGateDialog(Snowflake guild_id) { if (dlg.run() == Gtk::RESPONSE_OK) { const auto cb = [this](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg(*m_main_window, "Failed to accept the verification gate.", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, _("Failed to accept the verification gate."), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -673,14 +674,14 @@ void Abaddon::CheckMessagesForMembers(const ChannelData &chan, const std::vector void Abaddon::SetupUserMenu() { m_user_menu = Gtk::manage(new Gtk::Menu); - m_user_menu_insert_mention = Gtk::manage(new Gtk::MenuItem("Insert Mention")); - m_user_menu_ban = Gtk::manage(new Gtk::MenuItem("Ban")); - m_user_menu_kick = Gtk::manage(new Gtk::MenuItem("Kick")); - m_user_menu_copy_id = Gtk::manage(new Gtk::MenuItem("Copy ID")); - m_user_menu_open_dm = Gtk::manage(new Gtk::MenuItem("Go to DM")); - m_user_menu_roles = Gtk::manage(new Gtk::MenuItem("Roles")); - m_user_menu_info = Gtk::manage(new Gtk::MenuItem("View Profile")); - m_user_menu_remove_recipient = Gtk::manage(new Gtk::MenuItem("Remove From Group")); + m_user_menu_insert_mention = Gtk::manage(new Gtk::MenuItem(_("Insert Mention"))); + m_user_menu_ban = Gtk::manage(new Gtk::MenuItem(_("Ban"))); + m_user_menu_kick = Gtk::manage(new Gtk::MenuItem(_("Kick"))); + m_user_menu_copy_id = Gtk::manage(new Gtk::MenuItem(_("Copy ID"))); + m_user_menu_open_dm = Gtk::manage(new Gtk::MenuItem(_("Go to DM"))); + m_user_menu_roles = Gtk::manage(new Gtk::MenuItem(_("Roles"))); + m_user_menu_info = Gtk::manage(new Gtk::MenuItem(_("View Profile"))); + m_user_menu_remove_recipient = Gtk::manage(new Gtk::MenuItem(_("Remove From Group"))); m_user_menu_roles_submenu = Gtk::manage(new Gtk::Menu); m_user_menu_roles->set_submenu(*m_user_menu_roles_submenu); m_user_menu_insert_mention->signal_activate().connect(sigc::mem_fun(*this, &Abaddon::on_user_menu_insert_mention)); @@ -922,7 +923,7 @@ void Abaddon::ActionChannelOpened(Snowflake id, bool expand_to) { if (channel->IsThread()) { m_discord.SendThreadLazyLoad(id); if (channel->ThreadMetadata->IsArchived) - m_main_window->GetChatWindow()->SetTopic("This thread is archived. Sending a message will unarchive it"); + m_main_window->GetChatWindow()->SetTopic(_("This thread is archived. Sending a message will unarchive it")); } else if (channel->Type != ChannelType::DM && channel->Type != ChannelType::GROUP_DM && channel->GuildID.has_value()) { m_discord.SendLazyLoad(id); @@ -998,7 +999,7 @@ void Abaddon::ActionLeaveGuild(Snowflake id) { ConfirmDialog dlg(*m_main_window); const auto guild = m_discord.GetGuild(id); if (guild.has_value()) - dlg.SetConfirmText("Are you sure you want to leave " + guild->Name + "?"); + dlg.SetConfirmText(_("Are you sure you want to leave ") + guild->Name + "?"); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.LeaveGuild(id); @@ -1008,7 +1009,7 @@ void Abaddon::ActionKickMember(Snowflake user_id, Snowflake guild_id) { ConfirmDialog dlg(*m_main_window); const auto user = m_discord.GetUser(user_id); if (user.has_value()) - dlg.SetConfirmText("Are you sure you want to kick " + user->GetUsername() + "?"); + dlg.SetConfirmText(_("Are you sure you want to kick ") + user->GetUsername() + "?"); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.KickUser(user_id, guild_id); @@ -1018,7 +1019,7 @@ void Abaddon::ActionBanMember(Snowflake user_id, Snowflake guild_id) { ConfirmDialog dlg(*m_main_window); const auto user = m_discord.GetUser(user_id); if (user.has_value()) - dlg.SetConfirmText("Are you sure you want to ban " + user->GetUsername() + "?"); + dlg.SetConfirmText(_("Are you sure you want to ban ") + user->GetUsername() + "?"); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.BanUser(user_id, guild_id); @@ -1115,7 +1116,7 @@ void Abaddon::ActionReloadCSS() { m_css_provider->load_from_path(GetCSSPath("/" + GetSettings().MainCSS)); Gtk::StyleContext::add_provider_for_screen(Gdk::Screen::get_default(), m_css_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } catch (Glib::Error &e) { - Gtk::MessageDialog dlg(*m_main_window, "css failed to load (" + e.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, _("css failed to load (") + e.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -1171,6 +1172,9 @@ int main(int argc, char **argv) { } catch (...) {} } + bindtextdomain("abaddon", "./locale/"); + textdomain("abaddon"); + #if defined(_WIN32) && defined(_MSC_VER) TCHAR buf[2] { 0 }; GetEnvironmentVariableA("GTK_CSD", buf, sizeof(buf)); diff --git a/src/components/channellist/channellisttree.cpp b/src/components/channellist/channellisttree.cpp index ebbed589..8d782423 100644 --- a/src/components/channellist/channellisttree.cpp +++ b/src/components/channellist/channellisttree.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include "abaddon.hpp" @@ -15,32 +16,32 @@ ChannelListTree::ChannelListTree() , m_model(Gtk::TreeStore::create(m_columns)) , m_filter_model(Gtk::TreeModelFilter::create(m_model)) , m_sort_model(Gtk::TreeModelSort::create(m_filter_model)) - , m_menu_guild_copy_id("_Copy ID", true) - , m_menu_guild_settings("View _Settings", true) - , m_menu_guild_leave("_Leave", true) - , m_menu_guild_mark_as_read("Mark as _Read", true) - , m_menu_category_copy_id("_Copy ID", true) - , m_menu_channel_copy_id("_Copy ID", true) - , m_menu_channel_mark_as_read("Mark as _Read", true) + , m_menu_guild_copy_id(_("_Copy ID"), true) + , m_menu_guild_settings(_("View _Settings"), true) + , m_menu_guild_leave(_("_Leave"), true) + , m_menu_guild_mark_as_read(_("Mark as _Read"), true) + , m_menu_category_copy_id(_("_Copy ID"), true) + , m_menu_channel_copy_id(_("_Copy ID"), true) + , m_menu_channel_mark_as_read(_("Mark as _Read"), true) #ifdef WITH_LIBHANDY - , m_menu_channel_open_tab("Open in New _Tab", true) - , m_menu_dm_open_tab("Open in New _Tab", true) + , m_menu_channel_open_tab(_("Open in New _Tab"), true) + , m_menu_dm_open_tab(_("Open in New _Tab"), true) #endif #ifdef WITH_VOICE - , m_menu_voice_channel_join("_Join", true) - , m_menu_voice_channel_disconnect("_Disconnect", true) + , m_menu_voice_channel_join(_("_Join"), true) + , m_menu_voice_channel_disconnect(_("_Disconnect"), true) #endif - , m_menu_dm_copy_id("_Copy ID", true) + , m_menu_dm_copy_id(_("_Copy ID"), true) , m_menu_dm_close("") // changes depending on if group or not #ifdef WITH_VOICE - , m_menu_dm_join_voice("Join _Voice", true) - , m_menu_dm_disconnect_voice("_Disconnect Voice", true) + , m_menu_dm_join_voice(_("Join _Voice"), true) + , m_menu_dm_disconnect_voice(_("_Disconnect Voice"), true) #endif - , m_menu_thread_copy_id("_Copy ID", true) - , m_menu_thread_leave("_Leave", true) - , m_menu_thread_archive("_Archive", true) - , m_menu_thread_unarchive("_Unarchive", true) - , m_menu_thread_mark_as_read("Mark as _Read", true) { + , m_menu_thread_copy_id(_("_Copy ID"), true) + , m_menu_thread_leave(_("_Leave"), true) + , m_menu_thread_archive(_("_Archive"), true) + , m_menu_thread_unarchive(_("_Unarchive"), true) + , m_menu_thread_mark_as_read(_("Mark as _Read"), true) { get_style_context()->add_class("channel-list"); // Filter iters @@ -225,7 +226,7 @@ ChannelListTree::ChannelListTree() if (channel->Type == ChannelType::DM) discord.CloseDM(id); - else if (Abaddon::Get().ShowConfirm("Are you sure you want to leave this group DM?")) + else if (Abaddon::Get().ShowConfirm(_("Are you sure you want to leave this group DM?"))) Abaddon::Get().GetDiscordClient().CloseDM(id); }); m_menu_dm_toggle_mute.signal_activate().connect([this] { @@ -263,7 +264,7 @@ ChannelListTree::ChannelListTree() Gtk::Clipboard::get()->set_text(std::to_string((*m_model->get_iter(m_path_for_menu))[m_columns.m_id])); }); m_menu_thread_leave.signal_activate().connect([this] { - if (Abaddon::Get().ShowConfirm("Are you sure you want to leave this thread?")) + if (Abaddon::Get().ShowConfirm(_("Are you sure you want to leave this thread?"))) Abaddon::Get().GetDiscordClient().LeaveThread(static_cast((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]), "Context%20Menu", [](...) {}); }); m_menu_thread_archive.signal_activate().connect([this] { @@ -1180,7 +1181,7 @@ void ChannelListTree::AddPrivateChannels() { auto header_row = *m_model->append(); header_row[m_columns.m_type] = RenderType::DMHeader; header_row[m_columns.m_sort] = -1; - header_row[m_columns.m_name] = "Direct Messages"; + header_row[m_columns.m_name] = fmt::format("{}", _("Direct Messages")); m_dm_header = m_model->get_path(header_row); auto &discord = Abaddon::Get().GetDiscordClient(); @@ -1352,7 +1353,7 @@ bool ChannelListTree::OnButtonPressEvent(GdkEventButton *ev) { OnDMSubmenuPopup(); const auto channel = Abaddon::Get().GetDiscordClient().GetChannel(static_cast(row[m_columns.m_id])); if (channel.has_value()) { - m_menu_dm_close.set_label(channel->Type == ChannelType::DM ? "Close" : "Leave"); + m_menu_dm_close.set_label(channel->Type == ChannelType::DM ? _("Close") : _("Leave")); m_menu_dm_close.show(); } else m_menu_dm_close.hide(); @@ -1406,9 +1407,9 @@ void ChannelListTree::OnGuildSubmenuPopup() { const auto id = static_cast((*iter)[m_columns.m_id]); auto &discord = Abaddon::Get().GetDiscordClient(); if (discord.IsGuildMuted(id)) - m_menu_guild_toggle_mute.set_label("Unmute"); + m_menu_guild_toggle_mute.set_label(_("Unmute")); else - m_menu_guild_toggle_mute.set_label("Mute"); + m_menu_guild_toggle_mute.set_label(_("Mute")); const auto guild = discord.GetGuild(id); const auto self_id = discord.GetUserData().ID; @@ -1420,9 +1421,9 @@ void ChannelListTree::OnCategorySubmenuPopup() { if (!iter) return; const auto id = static_cast((*iter)[m_columns.m_id]); if (Abaddon::Get().GetDiscordClient().IsChannelMuted(id)) - m_menu_category_toggle_mute.set_label("Unmute"); + m_menu_category_toggle_mute.set_label(_("Unmute")); else - m_menu_category_toggle_mute.set_label("Mute"); + m_menu_category_toggle_mute.set_label(_("Mute")); } void ChannelListTree::OnChannelSubmenuPopup() { @@ -1435,9 +1436,9 @@ void ChannelListTree::OnChannelSubmenuPopup() { m_menu_channel_open_tab.set_sensitive(perms); #endif if (discord.IsChannelMuted(id)) - m_menu_channel_toggle_mute.set_label("Unmute"); + m_menu_channel_toggle_mute.set_label(("Unmute")); else - m_menu_channel_toggle_mute.set_label("Mute"); + m_menu_channel_toggle_mute.set_label(("Mute")); } #ifdef WITH_VOICE @@ -1462,9 +1463,9 @@ void ChannelListTree::OnDMSubmenuPopup() { const auto id = static_cast((*iter)[m_columns.m_id]); auto &discord = Abaddon::Get().GetDiscordClient(); if (discord.IsChannelMuted(id)) - m_menu_dm_toggle_mute.set_label("Unmute"); + m_menu_dm_toggle_mute.set_label(_("Unmute")); else - m_menu_dm_toggle_mute.set_label("Mute"); + m_menu_dm_toggle_mute.set_label(_("Mute")); #ifdef WITH_VOICE if (discord.IsVoiceConnected() || discord.IsVoiceConnecting()) { @@ -1487,9 +1488,9 @@ void ChannelListTree::OnThreadSubmenuPopup() { const auto id = static_cast((*iter)[m_columns.m_id]); if (discord.IsChannelMuted(id)) - m_menu_thread_toggle_mute.set_label("Unmute"); + m_menu_thread_toggle_mute.set_label(_("Unmute")); else - m_menu_thread_toggle_mute.set_label("Mute"); + m_menu_thread_toggle_mute.set_label(_("Mute")); auto channel = discord.GetChannel(id); if (!channel.has_value() || !channel->ThreadMetadata.has_value()) return; diff --git a/src/components/chatinput.cpp b/src/components/chatinput.cpp index 1fcf6288..46d16219 100644 --- a/src/components/chatinput.cpp +++ b/src/components/chatinput.cpp @@ -1,5 +1,6 @@ #include "chatinput.hpp" #include +#include #include #include #include "abaddon.hpp" @@ -139,7 +140,7 @@ ChatInputTextContainer::ChatInputTextContainer() { } void ChatInputTextContainer::ShowFileChooser() { - auto dlg = Gtk::FileChooserNative::create("Choose file", Gtk::FILE_CHOOSER_ACTION_OPEN); + auto dlg = Gtk::FileChooserNative::create(_("Choose file"), Gtk::FILE_CHOOSER_ACTION_OPEN); dlg->set_select_multiple(true); dlg->set_modal(true); @@ -385,14 +386,14 @@ void ChatInputAttachmentItem::SetFilenameFromFile() { } void ChatInputAttachmentItem::SetupMenu() { - m_menu_remove.set_label("Remove"); + m_menu_remove.set_label(_("Remove")); m_menu_remove.signal_activate().connect([this] { m_signal_item_removed.emit(); }); - m_menu_set_filename.set_label("Change Filename"); + m_menu_set_filename.set_label(_("Change Filename")); m_menu_set_filename.signal_activate().connect([this] { - const auto name = Abaddon::Get().ShowTextPrompt("Enter new filename for attachment", "Enter filename", m_filename); + const auto name = Abaddon::Get().ShowTextPrompt(_("Enter new filename for attachment"), _("Enter filename"), m_filename); if (name.has_value()) { m_filename = *name; m_label.set_text(m_filename); @@ -400,9 +401,9 @@ void ChatInputAttachmentItem::SetupMenu() { } }); - m_menu_set_alt_text.set_label("Change Alt-Text"); + m_menu_set_alt_text.set_label(_("Change Alt-Text")); m_menu_set_alt_text.signal_activate().connect([this]() { - const auto description = Abaddon::Get().ShowTextPrompt("Enter description (alt-text) for attachment", "Enter alt-text", m_description); + const auto description = Abaddon::Get().ShowTextPrompt(_("Enter description (alt-text) for attachment"), _("Enter alt-text"), m_description); if (description.has_value()) { m_description = *description; } diff --git a/src/components/chatinputindicator.cpp b/src/components/chatinputindicator.cpp index 51d21421..1e49c547 100644 --- a/src/components/chatinputindicator.cpp +++ b/src/components/chatinputindicator.cpp @@ -1,6 +1,7 @@ #include "chatinputindicator.hpp" #include #include +#include #include "abaddon.hpp" #include "util.hpp" @@ -114,15 +115,15 @@ void ChatInputIndicator::ComputeTypingString() { if (typers.empty()) { SetTypingString(""); } else if (typers.size() == 1) { - SetTypingString(typers[0].GetDisplayName(m_active_guild) + " is typing..."); + SetTypingString(typers[0].GetDisplayName(m_active_guild) + _(" is typing...")); } else if (typers.size() == 2) { - SetTypingString(typers[0].GetDisplayName(m_active_guild) + " and " + typers[1].GetDisplayName(m_active_guild) + " are typing..."); + SetTypingString(typers[0].GetDisplayName(m_active_guild) + _(" and ") + typers[1].GetDisplayName(m_active_guild) + _(" are typing...")); } else if (typers.size() > 2 && typers.size() <= MaxUsersInIndicator) { Glib::ustring str; for (size_t i = 0; i < typers.size() - 1; i++) str += typers[i].GetDisplayName(m_active_guild) + ", "; - SetTypingString(str + "and " + typers[typers.size() - 1].GetDisplayName(m_active_guild) + " are typing..."); + SetTypingString(str + _("and ") + typers[typers.size() - 1].GetDisplayName(m_active_guild) + _(" are typing...")); } else { // size() > MaxUsersInIndicator - SetTypingString("Several people are typing..."); + SetTypingString(_("Several people are typing...")); } } diff --git a/src/components/chatlist.cpp b/src/components/chatlist.cpp index 3e22d72a..073c6ae1 100644 --- a/src/components/chatlist.cpp +++ b/src/components/chatlist.cpp @@ -1,3 +1,4 @@ +#include #include "chatlist.hpp" #include "abaddon.hpp" #include "chatmessage.hpp" @@ -294,28 +295,28 @@ std::optional ChatList::GetLastSentEditableMessage() { } void ChatList::SetupMenu() { - m_menu_copy_id = Gtk::manage(new Gtk::MenuItem("Copy ID")); + m_menu_copy_id = Gtk::manage(new Gtk::MenuItem(_("Copy ID"))); m_menu_copy_id->signal_activate().connect([this] { Gtk::Clipboard::get()->set_text(std::to_string(m_menu_selected_message)); }); m_menu_copy_id->show(); m_menu.append(*m_menu_copy_id); - m_menu_delete_message = Gtk::manage(new Gtk::MenuItem("Delete Message")); + m_menu_delete_message = Gtk::manage(new Gtk::MenuItem(_("Delete Message"))); m_menu_delete_message->signal_activate().connect([this] { Abaddon::Get().GetDiscordClient().DeleteMessage(m_active_channel, m_menu_selected_message); }); m_menu_delete_message->show(); m_menu.append(*m_menu_delete_message); - m_menu_edit_message = Gtk::manage(new Gtk::MenuItem("Edit Message")); + m_menu_edit_message = Gtk::manage(new Gtk::MenuItem(_("Edit Message"))); m_menu_edit_message->signal_activate().connect([this] { m_signal_action_message_edit.emit(m_active_channel, m_menu_selected_message); }); m_menu_edit_message->show(); m_menu.append(*m_menu_edit_message); - m_menu_copy_content = Gtk::manage(new Gtk::MenuItem("Copy Content")); + m_menu_copy_content = Gtk::manage(new Gtk::MenuItem(_("Copy Content"))); m_menu_copy_content->signal_activate().connect([this] { const auto msg = Abaddon::Get().GetDiscordClient().GetMessage(m_menu_selected_message); if (msg.has_value()) @@ -324,20 +325,20 @@ void ChatList::SetupMenu() { m_menu_copy_content->show(); m_menu.append(*m_menu_copy_content); - m_menu_reply_to = Gtk::manage(new Gtk::MenuItem("Reply To")); + m_menu_reply_to = Gtk::manage(new Gtk::MenuItem(_("Reply To"))); m_menu_reply_to->signal_activate().connect([this] { m_signal_action_reply_to.emit(m_menu_selected_message); }); m_menu_reply_to->show(); m_menu.append(*m_menu_reply_to); - m_menu_unpin = Gtk::manage(new Gtk::MenuItem("Unpin")); + m_menu_unpin = Gtk::manage(new Gtk::MenuItem(_("Unpin"))); m_menu_unpin->signal_activate().connect([this] { Abaddon::Get().GetDiscordClient().Unpin(m_active_channel, m_menu_selected_message, [](...) {}); }); m_menu.append(*m_menu_unpin); - m_menu_pin = Gtk::manage(new Gtk::MenuItem("Pin")); + m_menu_pin = Gtk::manage(new Gtk::MenuItem(_("Pin"))); m_menu_pin->signal_activate().connect([this] { Abaddon::Get().GetDiscordClient().Pin(m_active_channel, m_menu_selected_message, [](...) {}); }); diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp index 8f2f5193..be93f8c1 100644 --- a/src/components/chatmessage.cpp +++ b/src/components/chatmessage.cpp @@ -1,5 +1,8 @@ +#include #include "chatmessage.hpp" #include +#include +#include #include #include "abaddon.hpp" #include "constants.hpp" @@ -11,7 +14,7 @@ ChatMessageItemContainer::ChatMessageItemContainer() : m_main(Gtk::ORIENTATION_VERTICAL) { add(m_main); - m_link_menu_copy = Gtk::manage(new Gtk::MenuItem("Copy Link")); + m_link_menu_copy = Gtk::manage(new Gtk::MenuItem(_("Copy Link"))); m_link_menu_copy->signal_activate().connect(sigc::mem_fun(*this, &ChatMessageItemContainer::on_link_menu_copy)); m_link_menu.append(*m_link_menu_copy); @@ -142,9 +145,9 @@ void ChatMessageItemContainer::UpdateAttributes() { } if (deleted) - m_attrib_label->set_markup("[deleted]"); + m_attrib_label->set_markup("[" + std::string { _("deleted") } + "]"); else if (edited) - m_attrib_label->set_markup("[edited]"); + m_attrib_label->set_markup("[" + std::string { _("edited") } + "]"); } void ChatMessageItemContainer::AddClickHandler(Gtk::Widget *widget, const std::string &url) { @@ -198,13 +201,13 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { ChatUtil::HandleEmojis(*tv); break; case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION: - b->insert_markup(s, "[boosted server]"); + b->insert_markup(s, "[" + std::string { _("boosted server") } + "]"); break; case MessageType::GUILD_MEMBER_JOIN: - b->insert_markup(s, "[user joined]"); + b->insert_markup(s, "[" + std::string { _("user joined") } + "]"); break; case MessageType::CHANNEL_PINNED_MESSAGE: - b->insert_markup(s, "[message pinned]"); + b->insert_markup(s, "[" + std::string { _("message pinned") } + "]"); break; case MessageType::APPLICATION_COMMAND: { if (data->Application.has_value()) { @@ -212,9 +215,10 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { Glib::MatchInfo match; Glib::ustring string = data->Content; if (regex->match(string, match)) { - const auto cmd = match.fetch(1); - const auto app = data->Application->Name; - b->insert_markup(s, "used " + cmd + " with " + app + ""); + const auto cmd = match.fetch(1).c_str(); + const auto app = data->Application->Name.c_str(); + std::string app_command_text = fmt::format(_("used {} with {}"), cmd, app); + b->insert_markup(s, app_command_text); } } else { b->insert(s, data->Content); @@ -226,64 +230,85 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { } break; case MessageType::RECIPIENT_ADD: { if (data->Mentions.empty()) break; - const auto &adder = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); - const auto &added = data->Mentions[0]; - b->insert_markup(s, "" + adder->GetUsername() + " added " + added.GetUsername() + ""); + const auto &adder_username = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID)->GetUsername().c_str(); + const auto &added_username = data->Mentions[0].GetUsername().c_str(); + std::string recipient_add_text = fmt::format(_("{} added {}"), adder_username, added_username); + b->insert_markup(s, recipient_add_text); } break; case MessageType::RECIPIENT_REMOVE: { if (data->Mentions.empty()) break; + const auto &adder = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); const auto &added = data->Mentions[0]; - if (adder->ID == added.ID) - b->insert_markup(s, "" + adder->GetUsername() + " left"); - else - b->insert_markup(s, "" + adder->GetUsername() + " removed " + added.GetUsername() + ""); + std::string recipient_remove; + if (adder->ID == added.ID) { + recipient_remove = fmt::format(_("{} left"), adder->GetUsername().c_str()); + } else { + recipient_remove = fmt::format(_("{} removed {}"), + adder->GetUsername().c_str(), added.GetUsername().c_str()); + } + b->insert_markup(s, recipient_remove); } break; case MessageType::CHANNEL_NAME_CHANGE: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); - b->insert_markup(s, "" + author->GetDisplayNameEscapedBold() + " changed the name to " + Glib::Markup::escape_text(data->Content) + ""); + std::string channel_name_change_text = fmt::format(_("{} changed the name to {}"), author->GetDisplayNameEscapedBold().c_str(), Glib::Markup::escape_text(data->Content).c_str()); + b->insert_markup(s, channel_name_change_text); } break; case MessageType::CHANNEL_ICON_CHANGE: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); - b->insert_markup(s, "" + author->GetDisplayNameEscapedBold() + " changed the channel icon"); + std::string channel_icon_change_text = fmt::format(_("{} changed the channel icon"), author->GetDisplayNameEscapedBold().c_str()); + b->insert_markup(s, channel_icon_change_text); } break; case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1: case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2: case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); const auto guild = Abaddon::Get().GetDiscordClient().GetGuild(*data->GuildID); - b->insert_markup(s, "" + author->GetDisplayNameEscapedBold() + " just boosted the server " + Glib::Markup::escape_text(data->Content) + " times! " + - Glib::Markup::escape_text(guild->Name) + " has achieved Level " + std::to_string(static_cast(data->Type) - 8) + "!"); // oo cheeky me !!! + std::string user_premium_guild_subscription_text = fmt::format(_("{} just boosted the server {} times! {} has achieved Level {}}!"), + author->GetDisplayNameEscapedBold().c_str(), + Glib::Markup::escape_text(data->Content).c_str(), + Glib::Markup::escape_text(guild->Name).c_str(), + (static_cast(data->Type) - 8)); + b->insert_markup(s, user_premium_guild_subscription_text); // oo cheeky me !!! } break; case MessageType::CHANNEL_FOLLOW_ADD: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); - b->insert_markup(s, "" + author->GetDisplayNameEscapedBold() + " has added " + Glib::Markup::escape_text(data->Content) + " to this channel. Its most important updates will show up here."); + std::string channel_follow_add_text = fmt::format( + _("{} has added {} to this channel. Its most important updates will show up here."), + author->GetDisplayNameEscapedBold().c_str(), + Glib::Markup::escape_text(data->Content).c_str()); + b->insert_markup(s, channel_follow_add_text); } break; case MessageType::CALL: { - b->insert_markup(s, "[started a call]"); + b->insert_markup(s, "[" + std::string{_("started a call")} + "]"); } break; case MessageType::GUILD_DISCOVERY_DISQUALIFIED: { - b->insert_markup(s, "This server has been removed from Server Discovery because it no longer passes all the requirements."); + b->insert_markup(s, "" + std::string{_("This server has been removed from Server Discovery because it no longer passes all the requirements.")} + ""); } break; case MessageType::GUILD_DISCOVERY_REQUALIFIED: { - b->insert_markup(s, "This server is eligible for Server Discovery again and has been automatically relisted!"); + b->insert_markup(s, ""+ std::string{_("This server is eligible for Server Discovery again and has been automatically relisted!")} + ""); } break; case MessageType::GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING: { - b->insert_markup(s, "This server has failed Discovery activity requirements for 1 week. If this server fails for 4 weeks in a row, it will be automatically removed from Discovery."); + b->insert_markup(s, "" + std::string{_("This server has failed Discovery activity requirements for 1 week. If this server fails for 4 weeks in a row, it will be automatically removed from Discovery.")} + ""); } break; case MessageType::GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING: { - b->insert_markup(s, "This server has failed Discovery activity requirements for 3 weeks in a row. If this server fails for 1 more week, it will be removed from Discovery."); + b->insert_markup(s, "" + std::string{_("This server has failed Discovery activity requirements for 3 weeks in a row. If this server fails for 1 more week, it will be removed from Discovery.")} + ""); } break; case MessageType::THREAD_CREATED: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); + std::string thread_created_text; if (data->MessageReference.has_value() && data->MessageReference->ChannelID.has_value()) { - auto iter = b->insert_markup(s, "" + author->GetDisplayNameEscapedBold() + " started a thread: "); + thread_created_text = fmt::format(_("{} started a thread: "), author->GetDisplayNameEscapedBold().c_str()); + auto iter = b->insert_markup(s, thread_created_text); auto tag = b->create_tag(); tag->property_weight() = Pango::WEIGHT_BOLD; m_channel_tagmap[tag] = *data->MessageReference->ChannelID; b->insert_with_tag(iter, data->Content, tag); } else { - b->insert_markup(s, "" + author->GetDisplayNameEscapedBold() + " started a thread: " + Glib::Markup::escape_text(data->Content) + ""); + thread_created_text = fmt::format(_("{} started a thread: {}"), + author->GetDisplayNameEscapedBold().c_str(), + Glib::Markup::escape_text(data->Content).c_str()); + b->insert_markup(s, thread_created_text); } } break; default: break; @@ -687,7 +712,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data) return author->GetDisplayNameEscapedBold(guild_id); } - return "Unknown User"; + return fmt::format("{}", _("Unknown User")); }; // if the message wasnt fetched from store it might have an un-fetched reference @@ -701,26 +726,28 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data) if (data.Interaction.has_value()) { if (data.GuildID.has_value()) { - lbl->set_markup(get_author_markup(data.Interaction->User.ID, *data.GuildID) + - " used /" + - Glib::Markup::escape_text(data.Interaction->Name) + - ""); + std::string interaction_user_from_guild_text = + fmt::format( + _("{} used /{}"), + get_author_markup(data.Interaction->User.ID, *data.GuildID).c_str(), + Glib::Markup::escape_text(data.Interaction->Name).c_str()); + lbl->set_markup(interaction_user_from_guild_text); } else if (const auto user = discord.GetUser(data.Interaction->User.ID); user.has_value()) { lbl->set_markup(user->GetDisplayNameEscapedBold()); } else { - lbl->set_markup("Unknown User"); + lbl->set_markup(fmt::format("{}", _("Unknown User"))); } } else if (referenced_message.has_value()) { if (referenced_message.value() == nullptr) { - lbl->set_markup("deleted message"); + lbl->set_markup(fmt::format("{}", _("deleted message"))); } else { const auto &referenced = *referenced_message.value(); Glib::ustring text; if (referenced.Content.empty()) { if (!referenced.Attachments.empty()) { - text = "attachment"; + text = fmt::format("{}", _("attachment")); } else if (!referenced.Embeds.empty()) { - text = "embed"; + text = fmt::format("{}", _("embed")); } } else { auto buf = Gtk::TextBuffer::create(); @@ -740,7 +767,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data) } } } else { - lbl->set_markup("reply unavailable"); + lbl->set_markup(fmt::format("{}", _("reply unavailable"))); } return box; diff --git a/src/components/chatwindow.cpp b/src/components/chatwindow.cpp index 6a44d84c..b1258e3e 100644 --- a/src/components/chatwindow.cpp +++ b/src/components/chatwindow.cpp @@ -1,4 +1,8 @@ #include "chatwindow.hpp" + +#include +#include + #include "abaddon.hpp" #include "chatinputindicator.hpp" #include "ratelimitindicator.hpp" @@ -327,9 +331,9 @@ void ChatWindow::StartReplying(Snowflake message_id) { m_is_replying = true; m_input->StartReplying(); if (author.has_value()) { - m_input_indicator->SetCustomMarkup("Replying to " + author->GetUsernameEscapedBold()); + m_input_indicator->SetCustomMarkup(fmt::format(_("Replying to {}"), author->GetUsernameEscapedBold().c_str())); } else { - m_input_indicator->SetCustomMarkup("Replying..."); + m_input_indicator->SetCustomMarkup(_("Replying...")); } } @@ -349,7 +353,7 @@ void ChatWindow::StartEditing(Snowflake message_id) { m_is_editing = true; m_editing_id = message_id; m_input->StartEditing(*message); - m_input_indicator->SetCustomMarkup("Editing..."); + m_input_indicator->SetCustomMarkup(_("Editing...")); } void ChatWindow::StopEditing() { diff --git a/src/components/friendslist.cpp b/src/components/friendslist.cpp index a1fab8db..c0d0745c 100644 --- a/src/components/friendslist.cpp +++ b/src/components/friendslist.cpp @@ -1,4 +1,6 @@ #include "friendslist.hpp" + +#include #include #include #include "abaddon.hpp" @@ -20,34 +22,37 @@ FriendsList::FriendsList() PopulateRelationships(); signal_map().connect(sigc::mem_fun(*this, &FriendsList::PopulateRelationships)); - constexpr static std::array strs = { - "Friends", - "Online", - "Pending", - "Blocked", + static std::array strs = { + _("Friends"), + _("Online"), + _("Pending"), + _("Blocked"), }; + // The counter assumes that strs won't be reordered whatsoever + int c = 0; for (const auto &x : strs) { auto *btn = Gtk::manage(new Gtk::RadioButton(m_group, x)); m_buttons.add(*btn); btn->show(); - btn->signal_toggled().connect([this, btn, str = x] { + btn->signal_toggled().connect([this, btn, c] { if (!btn->get_active()) return; - switch (str[0]) { // hehe - case 'F': + switch (c) { + case 0: m_filter_mode = FILTER_FRIENDS; break; - case 'O': + case 1: m_filter_mode = FILTER_ONLINE; break; - case 'P': + case 2: m_filter_mode = FILTER_PENDING; break; - case 'B': + case 3: m_filter_mode = FILTER_BLOCKED; break; } m_list.invalidate_filter(); }); + c++; } m_buttons.set_homogeneous(true); m_buttons.set_halign(Gtk::ALIGN_CENTER); @@ -106,7 +111,7 @@ void FriendsList::OnRelationshipRemove(Snowflake id, RelationshipType type) { void FriendsList::OnActionAccept(Snowflake id) { const auto cb = [this](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg(*dynamic_cast(get_toplevel()), "Failed to accept", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*dynamic_cast(get_toplevel()), _("Failed to accept"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -121,16 +126,16 @@ void FriendsList::OnActionRemove(Snowflake id) { Glib::ustring str; switch (*discord.GetRelationship(id)) { case RelationshipType::Blocked: - str = "Are you sure you want to unblock " + user->GetUsername() + "?"; + str = fmt::format(_("Are you sure you want to unblock {}?"), user->GetUsername().c_str()); break; case RelationshipType::Friend: - str = "Are you sure you want to remove " + user->GetUsername() + "?"; + str = fmt::format(_("Are you sure you want to remove {}?"), user->GetUsername().c_str()); break; case RelationshipType::PendingIncoming: - str = "Are you sure you want to ignore " + user->GetUsername() + "?"; + str = fmt::format(_("Are you sure you want to ignore {}?"), user->GetUsername().c_str()); break; case RelationshipType::PendingOutgoing: - str = "Are you sure you want to cancel your request to " + user->GetUsername() + "?"; + str = fmt::format(_("Are you sure you want to cancel your request to {}?"), user->GetUsername().c_str()); break; default: break; @@ -138,7 +143,7 @@ void FriendsList::OnActionRemove(Snowflake id) { if (Abaddon::Get().ShowConfirm(str, window)) { const auto cb = [window](DiscordError code) { if (code == DiscordError::NONE) return; - Gtk::MessageDialog dlg(*window, "Failed to remove user", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*window, _("Failed to remove user"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); }; @@ -187,9 +192,9 @@ bool FriendsList::ListFilterFunc(Gtk::ListBoxRow *row_) { FriendsListAddComponent::FriendsListAddComponent() : Gtk::Box(Gtk::ORIENTATION_VERTICAL) - , m_label("Add a Friend", Gtk::ALIGN_START) + , m_label(_("Add a Friend"), Gtk::ALIGN_START) , m_status("", Gtk::ALIGN_START) - , m_add("Add") + , m_add(_("Add")) , m_box(Gtk::ORIENTATION_HORIZONTAL) { m_box.add(m_entry); m_box.add(m_add); @@ -199,7 +204,7 @@ FriendsListAddComponent::FriendsListAddComponent() m_label.set_halign(Gtk::ALIGN_CENTER); - m_entry.set_placeholder_text("Enter a Username#1234"); + m_entry.set_placeholder_text(_("Enter a Username#1234")); m_entry.signal_key_press_event().connect(sigc::mem_fun(*this, &FriendsListAddComponent::OnKeyPress), false); add(m_label); @@ -212,7 +217,7 @@ void FriendsListAddComponent::Submit() { if (m_requesting) return; auto text = m_entry.get_text(); - m_label.set_text("Invalid input"); // cheeky !! + m_label.set_text(_("Invalid input")); // cheeky !! m_entry.set_text(""); const auto hashpos = text.find("#"); if (hashpos == Glib::ustring::npos) return; @@ -222,14 +227,14 @@ void FriendsListAddComponent::Submit() { if (discriminator.find_first_not_of("0123456789") != Glib::ustring::npos) return; m_requesting = true; - m_label.set_text("Hang on..."); + m_label.set_text(_("Hang on...")); const auto cb = [this](DiscordError code) { m_requesting = false; if (code == DiscordError::NONE) { - m_label.set_text("Success!"); + m_label.set_text(_("Success!")); } else { - m_label.set_text("Failed: "s + GetDiscordErrorDisplayString(code)); + m_label.set_text(fmt::format(_("Failed: {}"), GetDiscordErrorDisplayString(code))); } }; Abaddon::Get().GetDiscordClient().SendFriendRequest(username, @@ -250,7 +255,7 @@ FriendsListFriendRow::FriendsListFriendRow(RelationshipType type, const UserData , Type(type) , Name(data.GetUsername()) , Status(Abaddon::Get().GetDiscordClient().GetUserStatus(data.ID)) - , m_accept("Accept") { + , m_accept(_("Accept")) { auto *ev = Gtk::manage(new Gtk::EventBox); auto *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); auto *img = Gtk::manage(new LazyImage(32, 32, true)); @@ -279,13 +284,13 @@ FriendsListFriendRow::FriendsListFriendRow(RelationshipType type, const UserData switch (Type) { case RelationshipType::Blocked: case RelationshipType::Friend: - m_remove.set_label("Remove"); + m_remove.set_label(_("Remove")); break; case RelationshipType::PendingIncoming: - m_remove.set_label("Ignore"); + m_remove.set_label(_("Ignore")); break; case RelationshipType::PendingOutgoing: - m_remove.set_label("Cancel"); + m_remove.set_label(_("Cancel")); break; default: break; @@ -323,10 +328,10 @@ FriendsListFriendRow::FriendsListFriendRow(RelationshipType type, const UserData void FriendsListFriendRow::UpdatePresenceLabel() { switch (Type) { case RelationshipType::PendingIncoming: - m_status_lbl->set_text("Incoming Friend Request"); + m_status_lbl->set_text(_("Incoming Friend Request")); break; case RelationshipType::PendingOutgoing: - m_status_lbl->set_text("Outgoing Friend Request"); + m_status_lbl->set_text(_("Outgoing Friend Request")); break; default: m_status_lbl->set_text(GetPresenceDisplayString(Status)); diff --git a/src/components/ratelimitindicator.cpp b/src/components/ratelimitindicator.cpp index 1eff3059..a26f6443 100644 --- a/src/components/ratelimitindicator.cpp +++ b/src/components/ratelimitindicator.cpp @@ -2,6 +2,9 @@ #include +#include +#include + #include "abaddon.hpp" #include "util.hpp" @@ -82,15 +85,15 @@ bool RateLimitIndicator::UpdateIndicator() { auto &discord = Abaddon::Get().GetDiscordClient(); if (discord.HasAnyChannelPermission(discord.GetUserData().ID, m_active_channel, Permission::MANAGE_MESSAGES | Permission::MANAGE_CHANNELS)) { - m_label.set_text("You may bypass slowmode."); + m_label.set_text(_("You may bypass slowmode.")); set_has_tooltip(false); } else { const auto time_left = GetTimeLeft(); if (time_left > 0) - m_label.set_text(std::to_string(time_left) + "s"); + m_label.set_text(fmt::format(_("{}s"), std::to_string(time_left).c_str())); else m_label.set_text(""); - set_tooltip_text("Slowmode is enabled. Members can send one message every " + std::to_string(rate_limit) + " seconds."); + set_tooltip_text(fmt::format(_("Slowmode is enabled. Members can send one message every {} seconds"), std::to_string(rate_limit).c_str())); } } else { m_img.hide(); diff --git a/src/components/voiceinfobox.cpp b/src/components/voiceinfobox.cpp index b514cdca..057a56e4 100644 --- a/src/components/voiceinfobox.cpp +++ b/src/components/voiceinfobox.cpp @@ -2,6 +2,8 @@ // clang-format off +#include + #include "voiceinfobox.hpp" #include "abaddon.hpp" #include "util.hpp" @@ -28,8 +30,8 @@ VoiceInfoBox::VoiceInfoBox() m_location.get_style_context()->add_class("voice-info-location"); m_disconnect_img.get_style_context()->add_class("voice-info-disconnect-image"); - m_status.set_label("You shouldn't see me"); - m_location.set_label("You shouldn't see me"); + m_status.set_label(_("You shouldn't see me")); + m_location.set_label(_("You shouldn't see me")); Abaddon::Get().GetDiscordClient().signal_voice_requested_connect().connect([this](Snowflake channel_id) { show(); @@ -44,20 +46,20 @@ VoiceInfoBox::VoiceInfoBox() Glib::ustring label; switch (state) { case DiscordVoiceClient::State::ConnectingToWebsocket: - label = "Connecting"; + label = _("Connecting"); break; case DiscordVoiceClient::State::EstablishingConnection: - label = "Establishing connection"; + label = _("Establishing connection"); break; case DiscordVoiceClient::State::Connected: - label = "Connected"; + label = _("Connected"); break; case DiscordVoiceClient::State::DisconnectedByServer: case DiscordVoiceClient::State::DisconnectedByClient: - label = "Disconnected"; + label = _("Disconnected"); break; default: - label = "Unknown"; + label = _("Unknown"); break; } m_status.set_label(label); @@ -113,7 +115,7 @@ void VoiceInfoBox::UpdateLocation() { return; } - m_location.set_label("Unknown"); + m_location.set_label(_("Unknown")); } #endif diff --git a/src/dialogs/confirm.cpp b/src/dialogs/confirm.cpp index 8e606df9..84d7cb66 100644 --- a/src/dialogs/confirm.cpp +++ b/src/dialogs/confirm.cpp @@ -1,16 +1,18 @@ #include "confirm.hpp" +#include + ConfirmDialog::ConfirmDialog(Gtk::Window &parent) - : Gtk::Dialog("Confirm", parent, true) + : Gtk::Dialog(_("Confirm"), parent, true) , m_layout(Gtk::ORIENTATION_VERTICAL) , m_ok("OK") - , m_cancel("Cancel") + , m_cancel(_("Cancel")) , m_bbox(Gtk::ORIENTATION_HORIZONTAL) { set_default_size(300, 50); get_style_context()->add_class("app-window"); get_style_context()->add_class("app-popup"); - m_label.set_text("Are you sure?"); + m_label.set_text(_("Are you sure?")); m_ok.signal_clicked().connect([&]() { response(Gtk::RESPONSE_OK); diff --git a/src/dialogs/friendpicker.cpp b/src/dialogs/friendpicker.cpp index be597942..dba8fb9b 100644 --- a/src/dialogs/friendpicker.cpp +++ b/src/dialogs/friendpicker.cpp @@ -1,16 +1,18 @@ #include "friendpicker.hpp" +#include + #include "abaddon.hpp" FriendPickerDialog::FriendPickerDialog(Gtk::Window &parent) - : Gtk::Dialog("Pick a friend", parent, true) + : Gtk::Dialog(_("Pick a friend"), parent, true) , m_bbox(Gtk::ORIENTATION_HORIZONTAL) { set_default_size(300, 300); get_style_context()->add_class("app-window"); get_style_context()->add_class("app-popup"); m_ok_button = add_button("OK", Gtk::RESPONSE_OK); - m_cancel_button = add_button("Cancel", Gtk::RESPONSE_CANCEL); + m_cancel_button = add_button(_("Cancel"), Gtk::RESPONSE_CANCEL); m_ok_button->set_sensitive(false); diff --git a/src/dialogs/setstatus.cpp b/src/dialogs/setstatus.cpp index 8ca8ccff..9aa16cfd 100644 --- a/src/dialogs/setstatus.cpp +++ b/src/dialogs/setstatus.cpp @@ -1,5 +1,8 @@ #include "setstatus.hpp" +#include +#include + #include "abaddon.hpp" static const std::array feelings = { @@ -18,10 +21,10 @@ static const std::array feelings = { }; SetStatusDialog::SetStatusDialog(Gtk::Window &parent) - : Gtk::Dialog("Set Status", parent, true) + : Gtk::Dialog(_("Set Status"), parent, true) , m_layout(Gtk::ORIENTATION_VERTICAL) , m_ok("OK") - , m_cancel("Cancel") { + , m_cancel(_("Cancel")) { set_default_size(350, 200); get_style_context()->add_class("app-window"); get_style_context()->add_class("app-popup"); @@ -29,19 +32,19 @@ SetStatusDialog::SetStatusDialog(Gtk::Window &parent) m_text.set_placeholder_text("I feel " + Glib::ustring(feelings[rand() % feelings.size()]) + "!"); - m_status_combo.append("online", "Online"); - m_status_combo.append("dnd", "Do Not Disturb"); - m_status_combo.append("idle", "Away"); - m_status_combo.append("invisible", "Invisible"); - m_status_combo.set_active_text("Online"); + m_status_combo.append("online", _("Online")); + m_status_combo.append("dnd", _("Do Not Disturb")); + m_status_combo.append("idle", _("Away")); + m_status_combo.append("invisible", _("Invisible")); + m_status_combo.set_active_text(_("Online")); - m_type_combo.append("0", "Playing"); - m_type_combo.append("1", "Streaming"); - m_type_combo.append("2", "Listening to"); - m_type_combo.append("3", "Watching"); - m_type_combo.append("4", "Custom"); - m_type_combo.append("5", "Competing in"); - m_type_combo.set_active_text("Custom"); + m_type_combo.append("0", _("Playing")); + m_type_combo.append("1", _("Streaming")); + m_type_combo.append("2", _("Listening to")); + m_type_combo.append("3", _("Watching")); + m_type_combo.append("4", _("Custom")); + m_type_combo.append("5", _("Competing in")); + m_type_combo.set_active_text(_("Custom")); m_ok.signal_clicked().connect([this]() { response(Gtk::RESPONSE_OK); @@ -51,11 +54,11 @@ SetStatusDialog::SetStatusDialog(Gtk::Window &parent) response(Gtk::RESPONSE_CANCEL); }); - m_layout.pack_start(*Gtk::make_managed("How are you, " + Abaddon::Get().GetDiscordClient().GetUserData().GetDisplayName() + "?", Gtk::ALIGN_START)); + m_layout.pack_start(*Gtk::make_managed(fmt::format(_("How are you, {}?"), Abaddon::Get().GetDiscordClient().GetUserData().GetDisplayName().c_str()), Gtk::ALIGN_START)); m_layout.pack_start(m_text); - m_layout.pack_start(*Gtk::make_managed("Status", Gtk::ALIGN_START)); + m_layout.pack_start(*Gtk::make_managed(_("Status"), Gtk::ALIGN_START)); m_layout.pack_start(m_status_combo); - m_layout.pack_start(*Gtk::make_managed("Activity", Gtk::ALIGN_START)); + m_layout.pack_start(*Gtk::make_managed(_("Activity"), Gtk::ALIGN_START)); m_layout.pack_start(m_type_combo); get_content_area()->add(m_layout); diff --git a/src/dialogs/textinput.cpp b/src/dialogs/textinput.cpp index ae75f708..ec6bb14d 100644 --- a/src/dialogs/textinput.cpp +++ b/src/dialogs/textinput.cpp @@ -1,5 +1,7 @@ #include "textinput.hpp" +#include + TextInputDialog::TextInputDialog(const Glib::ustring &prompt, const Glib::ustring &title, const Glib::ustring &placeholder, Gtk::Window &parent) : Gtk::Dialog(title, parent, true) , m_label(prompt) { @@ -7,7 +9,7 @@ TextInputDialog::TextInputDialog(const Glib::ustring &prompt, const Glib::ustrin get_style_context()->add_class("app-popup"); auto ok = add_button("OK", Gtk::RESPONSE_OK); - auto cancel = add_button("Cancel", Gtk::RESPONSE_CANCEL); + auto cancel = add_button(_("Cancel"), Gtk::RESPONSE_CANCEL); get_content_area()->add(m_label); get_content_area()->add(m_entry); diff --git a/src/dialogs/token.cpp b/src/dialogs/token.cpp index 32fb7858..f99e712a 100644 --- a/src/dialogs/token.cpp +++ b/src/dialogs/token.cpp @@ -1,5 +1,7 @@ #include "token.hpp" +#include + std::string trim(const std::string &str) { const auto first = str.find_first_not_of(' '); if (first == std::string::npos) return str; @@ -8,10 +10,10 @@ std::string trim(const std::string &str) { } TokenDialog::TokenDialog(Gtk::Window &parent) - : Gtk::Dialog("Set Token", parent, true) + : Gtk::Dialog(_("Set Token"), parent, true) , m_layout(Gtk::ORIENTATION_VERTICAL) , m_ok("OK") - , m_cancel("Cancel") + , m_cancel(_("Cancel")) , m_bbox(Gtk::ORIENTATION_HORIZONTAL) { set_default_size(300, 50); get_style_context()->add_class("app-window"); diff --git a/src/dialogs/verificationgate.cpp b/src/dialogs/verificationgate.cpp index 9c9bcf9d..a3b66bfe 100644 --- a/src/dialogs/verificationgate.cpp +++ b/src/dialogs/verificationgate.cpp @@ -1,15 +1,17 @@ #include "verificationgate.hpp" +#include + #include "abaddon.hpp" VerificationGateDialog::VerificationGateDialog(Gtk::Window &parent, Snowflake guild_id) - : Gtk::Dialog("Verification Required", parent, true) + : Gtk::Dialog(_("Verification Required"), parent, true) , m_bbox(Gtk::ORIENTATION_HORIZONTAL) { set_default_size(300, 300); get_style_context()->add_class("app-window"); get_style_context()->add_class("app-popup"); - m_ok_button = add_button("Accept", Gtk::RESPONSE_OK); + m_ok_button = add_button(_("Accept"), Gtk::RESPONSE_OK); m_scroll_rules.set_vexpand(true); m_scroll_rules.set_hexpand(true); diff --git a/src/windows/guildsettings/auditlogpane.cpp b/src/windows/guildsettings/auditlogpane.cpp index 42e817eb..20120a48 100644 --- a/src/windows/guildsettings/auditlogpane.cpp +++ b/src/windows/guildsettings/auditlogpane.cpp @@ -1,5 +1,7 @@ #include "auditlogpane.hpp" +#include +#include #include #include "abaddon.hpp" @@ -40,7 +42,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { auto label = Gtk::manage(new Gtk::Label); label->set_ellipsize(Pango::ELLIPSIZE_END); - Glib::ustring user_markup = "Unknown User"; + Glib::ustring user_markup = fmt::format("{}", _("Unknown User")); if (entry.UserID.has_value()) { if (auto user = discord.GetUser(*entry.UserID); user.has_value()) user_markup = discord.GetUser(*entry.UserID)->GetUsernameEscapedBold(); @@ -51,309 +53,258 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { std::vector extra_markup; switch (entry.Type) { case AuditLogActionType::GUILD_UPDATE: { - markup = - user_markup + - " made changes to " + - Glib::Markup::escape_text(guild.Name) + - ""; + markup = fmt::format(_("{} made changes to {}"), + user_markup.c_str(), Glib::Markup::escape_text(guild.Name).c_str()); if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "icon_hash") { - extra_markup.emplace_back("Set the server icon"); + extra_markup.emplace_back(_("Set the server icon")); } else if (change.Key == "name") { auto new_name = change.NewValue; if (new_name.has_value()) - extra_markup.push_back("Set the server name to " + - Glib::Markup::escape_text(new_name->get()) + - ""); + extra_markup.push_back( + fmt::format(_("Set the server name to {}"), + Glib::Markup::escape_text(new_name->get()).c_str())); else - extra_markup.emplace_back("Set the server name"); + extra_markup.emplace_back(_("Set the server name")); } } } break; case AuditLogActionType::CHANNEL_CREATE: { const auto type = *entry.GetNewFromKey("type"); - markup = user_markup + - " created a " + (type == ChannelType::GUILD_VOICE ? "voice" : "text") + - " channel #" + - Glib::Markup::escape_text(*entry.GetNewFromKey("name")) + - ""; + if (type == ChannelType::GUILD_VOICE) { + markup = fmt::format(_("{} created a voice channel #{}"), + user_markup.c_str(), Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str()); + } else { + markup = fmt::format(_("{} created a text channel #{}"), + user_markup.c_str(), Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str()); + } + if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "name" && change.NewValue.has_value()) - extra_markup.push_back("Set the name to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); + extra_markup.push_back( + fmt::format(_("Set the name to {}"), + Glib::Markup::escape_text(change.NewValue->get()).c_str())); else if (change.Key == "nsfw" && change.NewValue.has_value()) - extra_markup.emplace_back((*change.NewValue ? "Marked" : "Unmarked") + - " the channel as NSFW"s); + if (*change.NewValue) { + extra_markup.emplace_back(_("Marked the channel as NSFW")); + } else { + extra_markup.emplace_back(_("Unmarked the channel as NSFW")); + } } - } break; case AuditLogActionType::CHANNEL_UPDATE: { const auto target_channel = discord.GetChannel(entry.TargetID); if (target_channel.has_value()) { - markup = user_markup + - " made changes to #" + - Glib::Markup::escape_text(*target_channel->Name) + - ""; + markup = fmt::format(_("{} made changes to #{}"), + user_markup.c_str(), Glib::Markup::escape_text(*target_channel->Name).c_str()); } else { - markup = user_markup + - " made changes to <#" + - entry.TargetID + - ">"; + markup = fmt::format(_("{} made changes to <#{}>"), + user_markup.c_str(), Glib::Markup::escape_text(*target_channel->Name).c_str()); } + if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "name" && change.NewValue.has_value()) { - if (change.OldValue.has_value()) - extra_markup.push_back("Changed the name from " + - Glib::Markup::escape_text(change.OldValue->get()) + - " to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); - else - extra_markup.push_back("Changed the name to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); + if (change.OldValue.has_value()) { + auto old_name = Glib::Markup::escape_text(change.OldValue->get()).c_str(); + auto new_name = Glib::Markup::escape_text(change.NewValue->get()).c_str(); + extra_markup.push_back(fmt::format(_("Changed the name from {} to {}"), + old_name, new_name)); + } else { + auto new_name = Glib::Markup::escape_text(change.NewValue->get()).c_str(); + extra_markup.push_back(fmt::format(_("Changed the name to {}"), new_name)); + } } else if (change.Key == "topic") { - if (change.NewValue.has_value()) - extra_markup.push_back("Changed the topic to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); - else - extra_markup.emplace_back("Cleared the topic"); + if (change.NewValue.has_value()) { + auto new_topic = Glib::Markup::escape_text(change.NewValue->get()).c_str(); + extra_markup.push_back(fmt::format(_("Changed the topic to {}"), new_topic)); + } else { + extra_markup.emplace_back(_("Cleared the topic")); + } } else if (change.Key == "nsfw" && change.NewValue.has_value()) { - extra_markup.emplace_back((*change.NewValue ? "Marked" : "Unmarked") + " the channel as NSFW"s); + if (*change.NewValue) { + extra_markup.emplace_back(_("Marked the channel as NSFW")); + } else { + extra_markup.emplace_back(_("Unmarked the channel as NSFW")); + } } else if (change.Key == "rate_limit_per_user" && change.NewValue.has_value()) { const int secs = change.NewValue->get(); if (secs == 0) - extra_markup.emplace_back("Disabled slowmode"); + extra_markup.emplace_back(_("Disabled slowmode")); else - extra_markup.emplace_back("Set slowmode to " + - std::to_string(secs) + " seconds"); + extra_markup.emplace_back(fmt::format(_("Set slowmode to {} seconds"), secs)); } } } break; case AuditLogActionType::CHANNEL_DELETE: { - markup = user_markup + - " removed #" + - Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + - ""; + auto deleted_channel_name = Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str(); + markup = fmt::format(_("{} removed #{}"), deleted_channel_name); } break; case AuditLogActionType::CHANNEL_OVERWRITE_CREATE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - markup = user_markup + - " created channel overrides for #" + - Glib::Markup::escape_text(*channel->Name) + ""; + auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); + markup = fmt::format(_("{} created channel overrides for #{}"), user_markup.c_str(), channel_name); } else { - markup = user_markup + - " created channel overrides for <#" + - entry.TargetID + ">"; + markup = fmt::format(_("{} created channel overrides for <#{}>"), entry.TargetID.c_str()); } } break; case AuditLogActionType::CHANNEL_OVERWRITE_UPDATE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - markup = user_markup + - " updated channel overrides for #" + - Glib::Markup::escape_text(*channel->Name) + ""; + auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); + markup = fmt::format(_("{} updated channel overrides for #{}"), user_markup.c_str(), channel_name); } else { - markup = user_markup + - " updated channel overrides for <#" + - entry.TargetID + ">"; + markup = fmt::format(_("{} updated channel overrides for <#{}>"), entry.TargetID.c_str()); } } break; case AuditLogActionType::CHANNEL_OVERWRITE_DELETE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - markup = user_markup + - " removed channel overrides for #" + - Glib::Markup::escape_text(*channel->Name) + ""; + auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); + markup = fmt::format(_("{} removed channel overrides for #{}"), user_markup.c_str(), channel_name); } else { - markup = user_markup + - " removed channel overrides for <#" + - entry.TargetID + ">"; + markup = fmt::format(_("{} removed channel overrides for <#{}>"), entry.TargetID.c_str()); } } break; case AuditLogActionType::MEMBER_KICK: { - const auto target_user = discord.GetUser(entry.TargetID); - markup = user_markup + - " kicked " + - target_user->GetUsernameEscaped() + - ""; + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); + markup = fmt::format(_("{} kicked {}"), user_markup.c_str(), target_user); } break; case AuditLogActionType::MEMBER_PRUNE: { - markup = user_markup + - " pruned " + - *entry.Options->MembersRemoved + - " members"; - extra_markup.emplace_back("For " + - *entry.Options->DeleteMemberDays + - " days of inactivity"); + markup = fmt::format(_("{} pruned {} members"), user_markup.c_str(), *entry.Options->MembersRemoved->c_str()); + extra_markup.emplace_back(fmt::format(_("For {} days of inactivity"), *entry.Options->DeleteMemberDays->c_str())); } break; case AuditLogActionType::MEMBER_BAN_ADD: { - const auto target_user = discord.GetUser(entry.TargetID); - markup = user_markup + - " banned " + - target_user->GetUsernameEscaped() + - ""; + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); + markup = fmt::format(_("{} banned {}"), user_markup.c_str(), target_user); } break; case AuditLogActionType::MEMBER_BAN_REMOVE: { - const auto target_user = discord.GetUser(entry.TargetID); - markup = user_markup + - " removed the ban for " + - target_user->GetUsernameEscaped() + - ""; + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); + markup = fmt::format(_("{} removed the ban for {}"), user_markup.c_str(), target_user); } break; case AuditLogActionType::MEMBER_UPDATE: { - const auto target_user = discord.GetUser(entry.TargetID); - markup = user_markup + - " updated " + - target_user->GetUsernameEscaped() + - ""; + const auto target_user = discord.GetUser(entry.TargetID)->GetUsername().c_str(); + markup = fmt::format(_("{} updated {}"), user_markup.c_str(), target_user); + if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "deaf" && change.NewValue.has_value()) - extra_markup.emplace_back((change.NewValue->get() ? "Deafened"s : "Undeafened"s) + - " them"); + extra_markup.emplace_back((change.NewValue->get() ? _("Deafened them") : _("Undeafened them"))); else if (change.Key == "mute" && change.NewValue.has_value()) - extra_markup.emplace_back((change.NewValue->get() ? "Muted"s : "Unmuted"s) + - " them"); + extra_markup.emplace_back((change.NewValue->get() ? _("Muted them") : _("Unmuted them"))); else if (change.Key == "nick" && change.NewValue.has_value()) - extra_markup.push_back("Set their nickname to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); + extra_markup.push_back(fmt::format(_("Set their nickname to {}"), + Glib::Markup::escape_text(change.NewValue->get()).c_str())); } } break; case AuditLogActionType::MEMBER_ROLE_UPDATE: { - const auto target_user = discord.GetUser(entry.TargetID); - markup = user_markup + - " updated roles for " + - target_user->GetUsernameEscaped() + ""; + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); + markup = fmt::format(_("{} updated roles for {}"), user_markup.c_str(), target_user); if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { + auto role_name = Glib::Markup::escape_text(change.NewValue.value()[0].at("name").get()).c_str(); if (change.Key == "$remove" && change.NewValue.has_value()) { - extra_markup.push_back("Removed a role " + - Glib::Markup::escape_text(change.NewValue.value()[0].at("name").get()) + - ""); + extra_markup.push_back(fmt::format(_("Removed a role {}"), role_name)); } else if (change.Key == "$add" && change.NewValue.has_value()) { - extra_markup.push_back("Added a role " + - Glib::Markup::escape_text(change.NewValue.value()[0].at("name").get()) + - ""); + extra_markup.push_back(fmt::format(_("Added a role {}"), role_name)); } } } break; case AuditLogActionType::MEMBER_MOVE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); - markup = user_markup + - " moved " + - *entry.Options->Count + - " user" + - (*entry.Options->Count == "1" ? ""s : "s"s) + - " to " + - Glib::Markup::escape_text(*channel->Name) + - ""; + + if (*entry.Options->Count == "1") { + markup = fmt::format(_("{} moved a user to {}"), + user_markup.c_str(), Glib::Markup::escape_text(*channel->Name).c_str()); + } else { + markup = fmt::format(_("{} moved {} users to {}"), + user_markup.c_str(), *entry.Options->Count->c_str(), Glib::Markup::escape_text(*channel->Name).c_str()); + } } break; case AuditLogActionType::MEMBER_DISCONNECT: { - markup = user_markup + - " disconnected " + - *entry.Options->Count + - " users from voice"; + markup = fmt::format(_("{} disconnected {} users from voice"), + user_markup.c_str(), *entry.Options->Count->c_str()); } break; case AuditLogActionType::BOT_ADD: { - const auto target_user = discord.GetUser(entry.TargetID); - markup = user_markup + - " added " + - target_user->GetUsernameEscaped() + - " to the server"; + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); + markup = fmt::format(_("{} added {} to the server"), user_markup.c_str(), target_user); } break; case AuditLogActionType::ROLE_CREATE: { - markup = user_markup + - " created the role " + - *entry.GetNewFromKey("name") + - ""; + auto role_name = *entry.GetNewFromKey("name")->c_str(); + markup = fmt::format(_("{} created the role {}"), user_markup.c_str(), role_name); } break; case AuditLogActionType::ROLE_UPDATE: { const auto role = discord.GetRole(entry.TargetID); - markup = user_markup + - " updated the role " + - (role.has_value() ? Glib::Markup::escape_text(role->Name) : Glib::ustring(entry.TargetID)) + - ""; + markup = fmt::format(_("{} updated the role {}"), + user_markup.c_str(), + (role.has_value() ? Glib::Markup::escape_text(role->Name) : Glib::ustring(entry.TargetID)).c_str()); if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "name" && change.NewValue.has_value()) { - extra_markup.push_back("Changed the name to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); + auto new_name = Glib::Markup::escape_text(change.NewValue->get()).c_str(); + extra_markup.push_back(fmt::format(_("Changed the name to {}"), new_name)); } else if (change.Key == "color" && change.NewValue.has_value()) { const auto col = change.NewValue->get(); if (col == 0) - extra_markup.emplace_back("Removed the color"); + extra_markup.emplace_back(_("Removed the color")); else - extra_markup.emplace_back("Set the color to " + - IntToCSSColor(col) + - ""); + extra_markup.emplace_back(fmt::format(_("Set the color to {}"), IntToCSSColor(col))); } else if (change.Key == "permissions") { - extra_markup.emplace_back("Updated the permissions"); + extra_markup.emplace_back(_("Updated the permissions")); } else if (change.Key == "mentionable" && change.NewValue.has_value()) { - extra_markup.emplace_back(change.NewValue->get() ? "Mentionable" : "Not mentionable"); + extra_markup.emplace_back(change.NewValue->get() ? _("Mentionable") : _("Not mentionable")); } else if (change.Key == "hoist" && change.NewValue.has_value()) { - extra_markup.emplace_back(change.NewValue->get() ? "Not hoisted" : "Hoisted"); + extra_markup.emplace_back(change.NewValue->get() ? _("Not hoisted") : _("Hoisted")); } } } break; case AuditLogActionType::ROLE_DELETE: { - markup = user_markup + - " deleted the role " + - *entry.GetOldFromKey("name") + - ""; + auto role_name = *entry.GetOldFromKey("name")->c_str(); + markup = fmt::format(_("{} deleted the role {}"), user_markup.c_str(), role_name); } break; case AuditLogActionType::INVITE_CREATE: { - const auto code = *entry.GetNewFromKey("code"); - markup = user_markup + - " created an invite " + code + ""; + auto code = *entry.GetNewFromKey("code")->c_str(); + markup = fmt::format(_("{} created an invite {}"), user_markup.c_str(), code); if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "channel_id" && change.NewValue.has_value()) { const auto channel = discord.GetChannel(change.NewValue->get()); if (!channel.has_value()) continue; - extra_markup.push_back("For channel #" + - Glib::Markup::escape_text(*channel->Name) + - ""); + extra_markup.push_back(fmt::format(_("For channel {}"), Glib::Markup::escape_text(*channel->Name).c_str())); } else if (change.Key == "max_uses" && change.NewValue.has_value()) { const auto uses = change.NewValue->get(); if (uses == 0) - extra_markup.emplace_back("Which has unlimited uses"); + extra_markup.emplace_back(_("Which has unlimited uses")); else - extra_markup.emplace_back("Which has " + std::to_string(uses) + " uses"); + extra_markup.emplace_back(fmt::format(_("Which has {} uses"), uses)); } else if (change.Key == "temporary" && change.NewValue.has_value()) { - extra_markup.emplace_back("With temporary "s + - (change.NewValue->get() ? "on" : "off") + - ""); + if (change.NewValue->get()) { + extra_markup.emplace_back(_("With temporary on")); + } else { + extra_markup.emplace_back(_("With temporary off")); + } } // no max_age cuz fuck time } } break; case AuditLogActionType::INVITE_DELETE: { - markup = user_markup + - " deleted an invite " + - *entry.GetOldFromKey("code") + - ""; + markup = fmt::format(_("{} deleted an invite {}"), + user_markup.c_str(), + *entry.GetOldFromKey("code")->c_str()); } break; case AuditLogActionType::WEBHOOK_CREATE: { - markup = user_markup + - " created the webhook " + - Glib::Markup::escape_text(*entry.GetNewFromKey("name")) + - ""; + markup = fmt::format(_("{} created the webhook {}"), + user_markup.c_str(), + Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str()); for (const auto &change : *entry.Changes) { if (change.Key == "channel_id" && change.NewValue.has_value()) { const auto channel = discord.GetChannel(change.NewValue->get()); if (channel.has_value()) { - extra_markup.push_back("With channel #" + - Glib::Markup::escape_text(*channel->Name) + - ""); + extra_markup.push_back(fmt::format(_("With channel #{}"), + Glib::Markup::escape_text(*channel->Name).c_str())); } } } @@ -365,248 +316,178 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { webhookptr = &webhook; } if (webhookptr != nullptr) { - markup = user_markup + - " updated the webhook " + - Glib::Markup::escape_text(webhookptr->Name) + - ""; + markup = fmt::format(_("{} updated the webhook {}"), + user_markup.c_str(), Glib::Markup::escape_text(webhookptr->Name).c_str()); } else { - markup = user_markup + - " updated a webhook"; + markup = fmt::format(_("{} updated a webhook"), user_markup.c_str()); } if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "name" && change.NewValue.has_value()) { - extra_markup.push_back("Changed the name to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); + extra_markup.push_back(fmt::format(_("Changed the name to {}"), + Glib::Markup::escape_text(change.NewValue->get()).c_str())); } else if (change.Key == "avatar_hash") { - extra_markup.emplace_back("Changed the avatar"); + extra_markup.emplace_back(_("Changed the avatar")); } else if (change.Key == "channel_id" && change.NewValue.has_value()) { const auto channel = discord.GetChannel(change.NewValue->get()); if (channel.has_value()) { - extra_markup.push_back("Changed the channel to #" + - Glib::Markup::escape_text(*channel->Name) + - ""); + extra_markup.push_back(fmt::format(_("Changed the channel to #{}"), + Glib::Markup::escape_text(*channel->Name).c_str())); } else { - extra_markup.emplace_back("Changed the channel"); + extra_markup.emplace_back(_("Changed the channel")); } } } } break; case AuditLogActionType::WEBHOOK_DELETE: { - markup = user_markup + - " deleted the webhook " + - Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + - ""; + markup = fmt::format(_("{} deleted the webhook {}"), + user_markup.c_str(), + Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str()); } break; case AuditLogActionType::EMOJI_CREATE: { - markup = user_markup + - " created the emoji " + - Glib::Markup::escape_text(*entry.GetNewFromKey("name")) + - ""; + markup = fmt::format(_("{} created the emoji {}"), + user_markup.c_str(), + Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str()); } break; case AuditLogActionType::EMOJI_UPDATE: { - markup = user_markup + - " updated the emoji " + - Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + - ""; - extra_markup.push_back("Changed the name from " + - Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + - " to " + - Glib::Markup::escape_text(*entry.GetNewFromKey("name")) + - ""); + markup = fmt::format(_("{} updated the emoji {}"), + user_markup.c_str(), + Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str()); + extra_markup.push_back(fmt::format(_("Changed the name from {} to {}"), + Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str(), + Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str())); } break; case AuditLogActionType::EMOJI_DELETE: { - markup = user_markup + - " deleted the emoji " + - Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + - ""; + markup = fmt::format(_("{} deleted the emoji {}"), + user_markup.c_str(), + Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str()); } break; + case AuditLogActionType::MESSAGE_BULK_DELETE: case AuditLogActionType::MESSAGE_DELETE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); const auto count = *entry.Options->Count; if (channel.has_value()) { - markup = user_markup + - " deleted " + count + " messages in #" + - Glib::Markup::escape_text(*channel->Name) + - ""; - } else { - markup = user_markup + - " deleted " + count + " messages"; - } - } break; - case AuditLogActionType::MESSAGE_BULK_DELETE: { - const auto channel = discord.GetChannel(entry.TargetID); - if (channel.has_value()) { - markup = user_markup + - " deleted " + - *entry.Options->Count + - " messages in #" + - Glib::Markup::escape_text(*channel->Name) + - ""; + markup = fmt::format(_("{} deleted {} messages in #{}"), + user_markup.c_str(), count.c_str(), + Glib::Markup::escape_text(*channel->Name).c_str()); } else { - markup = user_markup + - " deleted " + - *entry.Options->Count + - " messages"; + markup = fmt::format(_("{} deleted {} messages"), + user_markup.c_str(), count.c_str()); } } break; case AuditLogActionType::MESSAGE_PIN: { - const auto target_user = discord.GetUser(entry.TargetID); - markup = user_markup + - " pinned a message by " + - target_user->GetUsernameEscaped() + - ""; + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); + markup = fmt::format(_("{} pinned a message by {}"), user_markup.c_str(), target_user); } break; case AuditLogActionType::MESSAGE_UNPIN: { - const auto target_user = discord.GetUser(entry.TargetID); - markup = user_markup + - " unpinned a message by " + - target_user->GetUsernameEscaped() + - ""; + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); + markup = fmt::format(_("{} unpinned a message by {}"), user_markup.c_str(), target_user); } break; case AuditLogActionType::STAGE_INSTANCE_CREATE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); - if (channel.has_value()) { - markup = user_markup + - " started the stage for " + - Glib::Markup::escape_text(*channel->Name) + - ""; - } else { - markup = user_markup + - " started the stage for " + - std::to_string(*entry.Options->ChannelID) + - ""; - } + markup = fmt::format(_("{} started the stage for {}"), + user_markup.c_str(), + (channel.has_value() ? Glib::Markup::escape_text(*channel->Name).c_str() : std::to_string(*entry.Options->ChannelID).c_str())); if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "topic" && change.NewValue.has_value()) { extra_markup.push_back( - "Set the topic to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); + fmt::format(_("Set the topic to {}"), + Glib::Markup::escape_text(change.NewValue->get()).c_str())); } else if (change.Key == "privacy_level" && change.NewValue.has_value()) { Glib::ustring str = Glib::Markup::escape_text(GetStagePrivacyDisplayString(change.NewValue->get())); extra_markup.push_back( - "Set the privacy level to " + - str + - ""); + fmt::format(_("Set the privacy level to {}"), str.c_str())); } } } } break; case AuditLogActionType::STAGE_INSTANCE_UPDATE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); - if (channel.has_value()) { - markup = user_markup + - " updated the stage for " + - Glib::Markup::escape_text(*channel->Name) + - ""; - } else { - markup = user_markup + - " updated the stage for " + - std::to_string(*entry.Options->ChannelID) + - ""; - } + markup = fmt::format(_("{} updated the stage for {}"), + user_markup.c_str(), + (channel.has_value() ? Glib::Markup::escape_text(*channel->Name).c_str() : std::to_string(*entry.Options->ChannelID).c_str())); if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "topic" && change.NewValue.has_value()) { extra_markup.push_back( - "Set the topic to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); + fmt::format(_("Set the topic to {}"), + Glib::Markup::escape_text(change.NewValue->get()).c_str())); } else if (change.Key == "privacy_level" && change.NewValue.has_value()) { Glib::ustring str = Glib::Markup::escape_text(GetStagePrivacyDisplayString(change.NewValue->get())); extra_markup.push_back( - "Set the privacy level to " + - str + - ""); + fmt::format(_("Set the privacy level to {}"), str.c_str())); } } } } break; case AuditLogActionType::STAGE_INSTANCE_DELETE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); - if (channel.has_value()) { - markup = user_markup + - " ended the stage for " + - Glib::Markup::escape_text(*channel->Name) + - ""; - } else { - markup = user_markup + - " ended the stage for " + - std::to_string(*entry.Options->ChannelID) + - ""; - } + markup = fmt::format(_("{} ended the stage for {}"), + user_markup.c_str(), + (channel.has_value() ? Glib::Markup::escape_text(*channel->Name).c_str() : std::to_string(*entry.Options->ChannelID).c_str())); } break; case AuditLogActionType::THREAD_CREATE: { const auto channel = discord.GetChannel(entry.TargetID); - markup = user_markup + - " created a thread " + - (channel.has_value() - ? Glib::Markup::escape_text(*channel->Name) - : Glib::ustring(*entry.GetNewFromKey("name"))) + - ""; + markup = fmt::format(_("{} created a thread {}"), + user_markup.c_str(), + (channel.has_value() + ? Glib::Markup::escape_text(*channel->Name) + : Glib::ustring(*entry.GetNewFromKey("name"))) + .c_str()); if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "name") - extra_markup.push_back("Set the name to " + Glib::Markup::escape_text(change.NewValue->get()) + ""); + extra_markup.push_back(fmt::format(_("Set the name to {}"), + Glib::Markup::escape_text(change.NewValue->get()).c_str())); else if (change.Key == "archived") - extra_markup.emplace_back(change.NewValue->get() ? "Archived the thread" : "Unarchived the thread"); + extra_markup.emplace_back(change.NewValue->get() ? _("Archived the thread") : _("Unarchived the thread")); else if (change.Key == "auto_archive_duration") - extra_markup.emplace_back("Set auto archive duration to "s + std::to_string(change.NewValue->get()) + " minutes"s); + extra_markup.emplace_back(fmt::format(_("Set auto archive duration to {} minutes"), change.NewValue->get())); else if (change.Key == "rate_limit_per_user" && change.NewValue.has_value()) { const int secs = change.NewValue->get(); if (secs == 0) - extra_markup.emplace_back("Disabled slowmode"); + extra_markup.emplace_back(_("Disabled slowmode")); else - extra_markup.emplace_back("Set slowmode to " + - std::to_string(secs) + " seconds"); + extra_markup.emplace_back(fmt::format(_("Set slowmode to {} seconds"), secs)); } else if (change.Key == "locked") - extra_markup.emplace_back(change.NewValue->get() ? "Locked the thread, restricting it to only be unarchived by moderators" : "Unlocked the thread, allowing it to be unarchived by non-moderators"); + extra_markup.emplace_back(change.NewValue->get() ? _("Locked the thread, restricting it to only be unarchived by moderators") : _("Unlocked the thread, allowing it to be unarchived by non-moderators")); } } } break; case AuditLogActionType::THREAD_UPDATE: { const auto channel = discord.GetChannel(entry.TargetID); - markup = user_markup + - " made changes to the thread " + - (channel.has_value() - ? Glib::Markup::escape_text(*channel->Name) - : Glib::ustring(entry.TargetID)) + - ""; + markup = fmt::format(_("{} made changes to the thread "), (channel.has_value() + ? Glib::Markup::escape_text(*channel->Name) + : Glib::ustring(entry.TargetID)) + .c_str()); for (const auto &change : *entry.Changes) { if (change.Key == "name") - extra_markup.push_back( - "Changed the name from " + - Glib::Markup::escape_text(change.OldValue->get()) + - " to " + - Glib::Markup::escape_text(change.NewValue->get()) + - ""); + extra_markup.push_back(fmt::format(_("Changed the name from {} to {}"), + Glib::Markup::escape_text(change.OldValue->get()).c_str(), + Glib::Markup::escape_text(change.NewValue->get()).c_str())); else if (change.Key == "auto_archive_duration") - extra_markup.emplace_back("Set auto archive duration to "s + std::to_string(change.NewValue->get()) + " minutes"s); + extra_markup.emplace_back(fmt::format(_("Set auto archive duration to {} minutes"), change.NewValue->get())); else if (change.Key == "rate_limit_per_user" && change.NewValue.has_value()) { const int secs = change.NewValue->get(); if (secs == 0) - extra_markup.emplace_back("Disabled slowmode"); + extra_markup.emplace_back(_("Disabled slowmode")); else - extra_markup.emplace_back("Set slowmode to " + - std::to_string(secs) + - " seconds"); + extra_markup.emplace_back(fmt::format(_("Set slowmode to {} seconds"), secs)); } else if (change.Key == "locked") - extra_markup.emplace_back(change.NewValue->get() ? "Locked the thread, restricting it to only be unarchived by moderators" : "Unlocked the thread, allowing it to be unarchived by non-moderators"); + extra_markup.emplace_back(change.NewValue->get() ? _("Locked the thread, restricting it to only be unarchived by moderators") : _("Unlocked the thread, allowing it to be unarchived by non-moderators")); else if (change.Key == "archived") - extra_markup.emplace_back(change.NewValue->get() ? "Archived the thread" : "Unarchived the thread"); + extra_markup.emplace_back(change.NewValue->get() ? _("Archived the thread") : _("Unarchived the thread")); } } break; case AuditLogActionType::THREAD_DELETE: { - markup = user_markup + - " deleted the thread " + Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + ""; + markup = fmt::format(_("{} deleted the thread {}"), + user_markup.c_str(), Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str()); } break; default: - markup = "Unknown action"; + markup = fmt::format("{}", _("Unknown action")); break; } @@ -614,9 +495,8 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { expander->set_label_widget(*label); if (entry.Reason.has_value()) { - extra_markup.push_back("With reason " + - Glib::Markup::escape_text(*entry.Reason) + - ""); + extra_markup.push_back(fmt::format(_("Reason: {}"), + Glib::Markup::escape_text(*entry.Reason).c_str())); } expander->set_expanded(true); diff --git a/src/windows/guildsettings/banspane.cpp b/src/windows/guildsettings/banspane.cpp index 550114d0..3eff7ca6 100644 --- a/src/windows/guildsettings/banspane.cpp +++ b/src/windows/guildsettings/banspane.cpp @@ -1,5 +1,7 @@ #include "banspane.hpp" +#include +#include #include #include "abaddon.hpp" @@ -8,8 +10,8 @@ GuildSettingsBansPane::GuildSettingsBansPane(Snowflake id) : Gtk::Box(Gtk::ORIENTATION_VERTICAL) , GuildID(id) , m_model(Gtk::ListStore::create(m_columns)) - , m_menu_unban("Unban") - , m_menu_copy_id("Copy ID") { + , m_menu_unban(_("Unban")) + , m_menu_copy_id(_("Copy ID")) { signal_map().connect(sigc::mem_fun(*this, &GuildSettingsBansPane::OnMap)); set_name("guild-bans-pane"); set_hexpand(true); @@ -27,7 +29,7 @@ GuildSettingsBansPane::GuildSettingsBansPane(Snowflake id) for (const auto &ban : discord.GetBansInGuild(id)) OnGuildBanFetch(ban); - m_no_perms_note = Gtk::manage(new Gtk::Label("You do not have permission to see bans. However, bans made while you are connected will appear here")); + m_no_perms_note = Gtk::manage(new Gtk::Label(_("You do not have permission to see bans. However, bans made while you are connected will appear here"))); m_no_perms_note->set_single_line_mode(true); m_no_perms_note->set_ellipsize(Pango::ELLIPSIZE_END); m_no_perms_note->set_halign(Gtk::ALIGN_START); @@ -51,8 +53,8 @@ GuildSettingsBansPane::GuildSettingsBansPane(Snowflake id) m_view.set_enable_search(false); m_view.set_model(m_model); - m_view.append_column("User", m_columns.m_col_user); - m_view.append_column("Reason", m_columns.m_col_reason); + m_view.append_column(_("User"), m_columns.m_col_user); + m_view.append_column(_("Reason"), m_columns.m_col_reason); } void GuildSettingsBansPane::OnMap() { @@ -96,7 +98,7 @@ void GuildSettingsBansPane::OnMenuUnban() { Snowflake id = selected_row[m_columns.m_col_id]; auto cb = [](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg("Failed to unban user", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("Failed to unban user"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } diff --git a/src/windows/guildsettings/emojispane.cpp b/src/windows/guildsettings/emojispane.cpp index 00f39ea5..5fe2b8bc 100644 --- a/src/windows/guildsettings/emojispane.cpp +++ b/src/windows/guildsettings/emojispane.cpp @@ -1,5 +1,8 @@ #include "emojispane.hpp" +#include +#include + #include #include @@ -12,10 +15,10 @@ GuildSettingsEmojisPane::GuildSettingsEmojisPane(Snowflake guild_id) , GuildID(guild_id) , m_model(Gtk::ListStore::create(m_columns)) , m_filter(Gtk::TreeModelFilter::create(m_model)) - , m_menu_delete("Delete") - , m_menu_copy_id("Copy ID") - , m_menu_copy_emoji_url("Copy Emoji URL") - , m_menu_show_emoji("Open in Browser") { + , m_menu_delete(_("Delete")) + , m_menu_copy_id(_("Copy ID")) + , m_menu_copy_emoji_url(_("Copy Emoji URL")) + , m_menu_show_emoji(_("Open in Browser")) { signal_map().connect(sigc::mem_fun(*this, &GuildSettingsEmojisPane::OnMap)); set_name("guild-emojis-pane"); @@ -43,7 +46,7 @@ GuildSettingsEmojisPane::GuildSettingsEmojisPane(Snowflake guild_id) const bool can_manage = discord.HasGuildPermission(self_id, GuildID, Permission::MANAGE_GUILD_EXPRESSIONS); m_menu_delete.set_sensitive(can_manage); - m_search.set_placeholder_text("Filter"); + m_search.set_placeholder_text(_("Filter")); m_search.signal_changed().connect([this]() { m_filter->refilter(); }); @@ -63,7 +66,7 @@ GuildSettingsEmojisPane::GuildSettingsEmojisPane(Snowflake guild_id) m_view.set_enable_search(false); m_view.set_model(m_filter); - auto *column = Gtk::manage(new Gtk::TreeView::Column("Emoji")); + auto *column = Gtk::manage(new Gtk::TreeView::Column(_("Emoji"))); auto *renderer = Gtk::manage(new CellRendererPixbufAnimation); column->pack_start(*renderer); column->add_attribute(renderer->property_pixbuf(), m_columns.m_col_pixbuf); @@ -71,7 +74,7 @@ GuildSettingsEmojisPane::GuildSettingsEmojisPane(Snowflake guild_id) m_view.append_column(*column); if (can_manage) { - auto *column = Gtk::manage(new Gtk::TreeView::Column("Name")); + auto *column = Gtk::manage(new Gtk::TreeView::Column(_("Name"))); auto *renderer = Gtk::manage(new Gtk::CellRendererText); column->pack_start(*renderer); column->add_attribute(renderer->property_text(), m_columns.m_col_name); @@ -93,10 +96,10 @@ GuildSettingsEmojisPane::GuildSettingsEmojisPane(Snowflake guild_id) }); m_view.append_column(*column); } else - m_view.append_column("Name", m_columns.m_col_name); + m_view.append_column(_("Name"), m_columns.m_col_name); if (can_manage) - m_view.append_column("Creator", m_columns.m_col_creator); - m_view.append_column("Is Animated?", m_columns.m_col_animated); + m_view.append_column(_("Creator"), m_columns.m_col_creator); + m_view.append_column(_("Is Animated?"), m_columns.m_col_animated); for (const auto column : m_view.get_columns()) column->set_resizable(true); @@ -127,13 +130,13 @@ void GuildSettingsEmojisPane::AddEmojiRow(const EmojiData &emoji) { if (emoji.Creator.has_value()) row[m_columns.m_col_creator] = emoji.Creator->GetUsername(); if (emoji.IsAnimated.has_value()) - row[m_columns.m_col_animated] = *emoji.IsAnimated ? "Yes" : "No"; + row[m_columns.m_col_animated] = *emoji.IsAnimated ? _("Yes") : _("No"); else - row[m_columns.m_col_animated] = "No"; + row[m_columns.m_col_animated] = _("No"); if (emoji.IsAvailable.has_value()) - row[m_columns.m_col_available] = *emoji.IsAvailable ? "Yes" : "No"; + row[m_columns.m_col_available] = *emoji.IsAvailable ? _("Yes") : _("No"); else - row[m_columns.m_col_available] = "Yes"; + row[m_columns.m_col_available] = _("Yes"); if (Abaddon::Get().GetSettings().ShowAnimations && emoji.IsAnimated.has_value() && *emoji.IsAnimated) { const auto cb = [this, id = emoji.ID](const Glib::RefPtr &pb) { @@ -181,7 +184,7 @@ void GuildSettingsEmojisPane::OnFetchEmojis(std::vector emojis) { void GuildSettingsEmojisPane::OnEditName(Snowflake id, const std::string &name) { const auto cb = [](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg("Failed to set emoji name", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK); + Gtk::MessageDialog dlg(_("Failed to set emoji name"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -201,10 +204,10 @@ void GuildSettingsEmojisPane::OnMenuDelete() { const auto name = static_cast(selected_row[m_columns.m_col_name]); const auto id = static_cast(selected_row[m_columns.m_col_id]); if (auto *window = dynamic_cast(get_toplevel())) - if (Abaddon::Get().ShowConfirm("Are you sure you want to delete " + name + "?", window)) { + if (Abaddon::Get().ShowConfirm(fmt::format(_("Are you sure you want to delete {}?"), name.c_str()), window)) { const auto cb = [](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg("Failed to delete emoji", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK); + Gtk::MessageDialog dlg(_("Failed to delete emoji"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -217,7 +220,7 @@ void GuildSettingsEmojisPane::OnMenuDelete() { void GuildSettingsEmojisPane::OnMenuCopyEmojiURL() { if (auto selected_row = *m_view.get_selection()->get_selected()) { const auto id = static_cast(selected_row[m_columns.m_col_id]); - const bool is_animated = static_cast(selected_row[m_columns.m_col_animated]) == "Yes"; + const bool is_animated = static_cast(selected_row[m_columns.m_col_animated]) == _("Yes"); Gtk::Clipboard::get()->set_text(EmojiData::URLFromID(id, is_animated ? "gif" : "png", "256")); } } @@ -225,7 +228,7 @@ void GuildSettingsEmojisPane::OnMenuCopyEmojiURL() { void GuildSettingsEmojisPane::OnMenuShowEmoji() { if (auto selected_row = *m_view.get_selection()->get_selected()) { const auto id = static_cast(selected_row[m_columns.m_col_id]); - const bool is_animated = static_cast(selected_row[m_columns.m_col_animated]) == "Yes"; + const bool is_animated = static_cast(selected_row[m_columns.m_col_animated]) == _("Yes"); LaunchBrowser(EmojiData::URLFromID(id, is_animated ? "gif" : "png", "256")); } } diff --git a/src/windows/guildsettings/infopane.cpp b/src/windows/guildsettings/infopane.cpp index 45a87a40..10695b54 100644 --- a/src/windows/guildsettings/infopane.cpp +++ b/src/windows/guildsettings/infopane.cpp @@ -2,6 +2,8 @@ #include +#include + #include #include #include @@ -10,7 +12,7 @@ #include "util.hpp" GuildSettingsInfoPane::GuildSettingsInfoPane(Snowflake id) - : m_guild_name_label("Guild name") + : m_guild_name_label(_("Guild name")) , GuildID(id) { auto &discord = Abaddon::Get().GetDiscordClient(); const auto guild = *discord.GetGuild(id); @@ -32,7 +34,7 @@ GuildSettingsInfoPane::GuildSettingsInfoPane(Snowflake id) // clang-format off }, false); // clang-format on - m_guild_name.set_tooltip_text("Press enter or lose focus to submit"); + m_guild_name.set_tooltip_text(_("Press enter or lose focus to submit")); m_guild_name.show(); m_guild_name_label.show(); @@ -48,7 +50,7 @@ GuildSettingsInfoPane::GuildSettingsInfoPane(Snowflake id) m_guild_icon.set_margin_bottom(10); if (can_modify) { - m_guild_icon_ev.set_tooltip_text("Click to choose a file, right click to paste"); + m_guild_icon_ev.set_tooltip_text(_("Click to choose a file, right click to paste")); m_guild_icon_ev.signal_button_press_event().connect([this](GdkEventButton *event) -> bool { if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY) { @@ -104,7 +106,7 @@ void GuildSettingsInfoPane::UpdateGuildName() { auto cb = [this](DiscordError code) { if (code != DiscordError::NONE) { m_guild_name.set_text(Abaddon::Get().GetDiscordClient().GetGuild(GuildID)->Name); - Gtk::MessageDialog dlg("Failed to set guild name", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("Failed to set guild name"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -118,7 +120,7 @@ void GuildSettingsInfoPane::UpdateGuildIconFromData(const std::vector & auto cb = [](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg("Failed to set guild icon", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("Failed to set guild icon"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -142,7 +144,7 @@ void GuildSettingsInfoPane::UpdateGuildIconFromPixbuf(Glib::RefPtr } void GuildSettingsInfoPane::UpdateGuildIconPicker() { - auto dlg = Gtk::FileChooserNative::create("Choose new guild icon", Gtk::FILE_CHOOSER_ACTION_OPEN); + auto dlg = Gtk::FileChooserNative::create(_("Choose new guild icon"), Gtk::FILE_CHOOSER_ACTION_OPEN); dlg->set_modal(true); dlg->signal_response().connect([this, dlg](int response) { if (response == Gtk::RESPONSE_ACCEPT) { @@ -165,11 +167,12 @@ void GuildSettingsInfoPane::UpdateGuildIconPicker() { }); auto filter_images = Gtk::FileFilter::create(); + std::string supported_images_text = _("Supported images"); if (const auto guild = Abaddon::Get().GetDiscordClient().GetGuild(GuildID); guild.has_value() && guild->HasFeature("ANIMATED_ICON")) { - filter_images->set_name("Supported images (*.jpg, *.jpeg, *.png, *.gif)"); + filter_images->set_name(supported_images_text + " (*.jpg, *.jpeg, *.png, *.gif)"); filter_images->add_pattern("*.gif"); } else { - filter_images->set_name("Supported images (*.jpg, *.jpeg, *.png)"); + filter_images->set_name(supported_images_text + " (*.jpg, *.jpeg, *.png)"); } filter_images->add_pattern("*.jpg"); filter_images->add_pattern("*.jpeg"); @@ -177,7 +180,7 @@ void GuildSettingsInfoPane::UpdateGuildIconPicker() { dlg->add_filter(filter_images); auto filter_all = Gtk::FileFilter::create(); - filter_all->set_name("All files (*.*)"); + filter_all->set_name(std::string{_("All files")} + " (*.*)"); filter_all->add_pattern("*.*"); dlg->add_filter(filter_all); diff --git a/src/windows/guildsettings/invitespane.cpp b/src/windows/guildsettings/invitespane.cpp index 157f9134..408f25b4 100644 --- a/src/windows/guildsettings/invitespane.cpp +++ b/src/windows/guildsettings/invitespane.cpp @@ -1,5 +1,6 @@ #include "invitespane.hpp" +#include #include #include "abaddon.hpp" @@ -8,7 +9,7 @@ GuildSettingsInvitesPane::GuildSettingsInvitesPane(Snowflake id) : GuildID(id) , m_model(Gtk::ListStore::create(m_columns)) - , m_menu_delete("Delete") { + , m_menu_delete(_("Delete")) { signal_map().connect(sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnMap)); set_name("guild-invites-pane"); set_hexpand(true); @@ -30,12 +31,12 @@ GuildSettingsInvitesPane::GuildSettingsInvitesPane(Snowflake id) m_view.set_enable_search(false); m_view.set_model(m_model); - m_view.append_column("Code", m_columns.m_col_code); - m_view.append_column("Expires", m_columns.m_col_expires); - m_view.append_column("Created by", m_columns.m_col_inviter); - m_view.append_column("Uses", m_columns.m_col_uses); - m_view.append_column("Max uses", m_columns.m_col_max_uses); - m_view.append_column("Grants temporary membership", m_columns.m_col_temporary); + m_view.append_column(_("Code"), m_columns.m_col_code); + m_view.append_column(_("Expires"), m_columns.m_col_expires); + m_view.append_column(_("Created by"), m_columns.m_col_inviter); + m_view.append_column(_("Uses"), m_columns.m_col_uses); + m_view.append_column(_("Max uses"), m_columns.m_col_max_uses); + m_view.append_column(_("Grants temporary membership"), m_columns.m_col_temporary); for (const auto column : m_view.get_columns()) column->set_resizable(true); @@ -60,18 +61,18 @@ void GuildSettingsInvitesPane::AppendInvite(const InviteData &invite) { if (invite.MaxAge.has_value()) { if (*invite.MaxAge == 0) - row[m_columns.m_col_expires] = "Never"; + row[m_columns.m_col_expires] = _("Never"); else row[m_columns.m_col_expires] = FormatISO8601(*invite.CreatedAt, *invite.MaxAge); } row[m_columns.m_col_uses] = *invite.Uses; if (*invite.MaxUses == 0) - row[m_columns.m_col_max_uses] = "Unlimited"; + row[m_columns.m_col_max_uses] = _("Unlimited"); else row[m_columns.m_col_max_uses] = std::to_string(*invite.MaxUses); - row[m_columns.m_col_temporary] = *invite.IsTemporary ? "Yes" : "No"; + row[m_columns.m_col_temporary] = *invite.IsTemporary ? _("Yes") : _("No"); } void GuildSettingsInvitesPane::OnInviteFetch(const std::optional &invite) { @@ -102,7 +103,7 @@ void GuildSettingsInvitesPane::OnMenuDelete() { auto code = static_cast(selected_row[m_columns.m_col_code]); auto cb = [](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg("Failed to delete invite", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("Failed to delete invite"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } diff --git a/src/windows/guildsettings/memberspane.cpp b/src/windows/guildsettings/memberspane.cpp index a4acba1e..7835bf55 100644 --- a/src/windows/guildsettings/memberspane.cpp +++ b/src/windows/guildsettings/memberspane.cpp @@ -1,5 +1,8 @@ #include "memberspane.hpp" +#include +#include + #include "abaddon.hpp" #include "util.hpp" @@ -15,7 +18,7 @@ GuildSettingsMembersPane::GuildSettingsMembersPane(Snowflake id) m_member_list.signal_member_select().connect(sigc::mem_fun(m_member_info, &GuildSettingsMembersPaneInfo::SetUser)); - m_note.set_label("Some members may not be shown if the client is not aware of them"); + m_note.set_label(_("Some members may not be shown if the client is not aware of them")); m_note.set_single_line_mode(true); m_note.set_ellipsize(Pango::ELLIPSIZE_END); @@ -59,7 +62,7 @@ GuildSettingsMembersPaneMembers::GuildSettingsMembersPaneMembers(Snowflake id) m_signal_member_select.emit(selected->UserID); }); - m_search.set_placeholder_text("Filter"); + m_search.set_placeholder_text(_("Filter")); m_search.signal_changed().connect([this] { m_list.invalidate_filter(); }); @@ -173,7 +176,7 @@ GuildSettingsMembersPaneInfo::GuildSettingsMembersPaneInfo(Snowflake guild_id) lbl.show(); }; - m_bot.set_text("User is a bot"); + m_bot.set_text(_("User is a bot")); label(m_bot); label(m_id); @@ -208,16 +211,16 @@ void GuildSettingsMembersPaneInfo::SetUser(Snowflake user_id) { m_bot.set_visible(member.User->IsABot()); - m_id.set_text("User ID: " + std::to_string(user_id)); - m_created.set_text("Account created: " + user_id.GetLocalTimestamp()); + m_id.set_text(_("User ID: ") + std::to_string(user_id)); + m_created.set_text(_("Account created: ") + user_id.GetLocalTimestamp()); if (!member.JoinedAt.empty()) - m_joined.set_text("Joined server: " + FormatISO8601(member.JoinedAt)); + m_joined.set_text(_("Joined server: ") + FormatISO8601(member.JoinedAt)); else - m_joined.set_text("Joined server: Unknown"); - m_nickname.set_text("Nickname: " + member.Nickname); + m_joined.set_text(_("Joined server: Unknown")); + m_nickname.set_text(_("Nickname: ") + member.Nickname); m_nickname.set_visible(!member.Nickname.empty()); if (member.PremiumSince.has_value()) { - m_boosting.set_text("Boosting since " + FormatISO8601(*member.PremiumSince)); + m_boosting.set_text(fmt::format(_("Boosting since {}"), FormatISO8601(*member.PremiumSince))); m_boosting.show(); } else m_boosting.hide(); diff --git a/src/windows/guildsettings/rolespane.cpp b/src/windows/guildsettings/rolespane.cpp index fcb34bd6..193b9793 100644 --- a/src/windows/guildsettings/rolespane.cpp +++ b/src/windows/guildsettings/rolespane.cpp @@ -1,5 +1,6 @@ #include "rolespane.hpp" +#include #include #include "abaddon.hpp" @@ -67,7 +68,7 @@ GuildSettingsRolesPaneRoles::GuildSettingsRolesPaneRoles(Snowflake guild_id) if (!discord.CanModifyRole(GuildID, row->RoleID)) return false; const auto cb = [](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg("Failed to set role position", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("Failed to set role position"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER_ON_PARENT); dlg.run(); } @@ -114,7 +115,7 @@ GuildSettingsRolesPaneRoles::GuildSettingsRolesPaneRoles(Snowflake guild_id) return true; }); - m_search.set_placeholder_text("Filter"); + m_search.set_placeholder_text(_("Filter")); m_search.signal_changed().connect([this] { m_list.invalidate_filter(); }); @@ -213,7 +214,7 @@ GuildSettingsRolesPaneInfo::GuildSettingsRolesPaneInfo(Snowflake guild_id) }; m_role_name.signal_key_press_event().connect(cb, false); - m_role_name.set_tooltip_text("Press enter to submit"); + m_role_name.set_tooltip_text(_("Press enter to submit")); m_role_name.set_max_length(100); @@ -232,7 +233,7 @@ GuildSettingsRolesPaneInfo::GuildSettingsRolesPaneInfo(Snowflake guild_id) const auto cb = [this, &discord](DiscordError code) { if (code != DiscordError::NONE) { m_color_button.set_rgba(IntToRGBA(discord.GetRole(RoleID)->Color)); - Gtk::MessageDialog dlg("Failed to set role color", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("Failed to set role color"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER_ON_PARENT); dlg.run(); } @@ -263,7 +264,7 @@ GuildSettingsRolesPaneInfo::GuildSettingsRolesPaneInfo(Snowflake guild_id) // fuck you clang-format you suck // clang-format off - add_perms("General", RIGHT, { + add_perms(_("General"), RIGHT, { Permission::VIEW_CHANNEL, Permission::MANAGE_CHANNELS, Permission::MANAGE_ROLES, @@ -273,7 +274,7 @@ GuildSettingsRolesPaneInfo::GuildSettingsRolesPaneInfo(Snowflake guild_id) Permission::MANAGE_WEBHOOKS, Permission::MANAGE_GUILD }); - add_perms("Text Channels", LEFT, { + add_perms(_("Text Channels"), LEFT, { Permission::SEND_MESSAGES, Permission::SEND_MESSAGES_IN_THREADS, Permission::CREATE_PUBLIC_THREADS, @@ -291,7 +292,7 @@ GuildSettingsRolesPaneInfo::GuildSettingsRolesPaneInfo(Snowflake guild_id) Permission::USE_APPLICATION_COMMANDS, Permission::SEND_VOICE_MESSAGES, }); - add_perms("Membership", LEFT, { + add_perms(_("Membership"), LEFT, { Permission::CREATE_INSTANT_INVITE, Permission::CHANGE_NICKNAME, Permission::MANAGE_NICKNAMES, @@ -299,9 +300,9 @@ GuildSettingsRolesPaneInfo::GuildSettingsRolesPaneInfo(Snowflake guild_id) Permission::BAN_MEMBERS, Permission::MODERATE_MEMBERS }); - add_perms("Advanced", LEFT, { Permission::ADMINISTRATOR }); + add_perms(_("Advanced"), LEFT, { Permission::ADMINISTRATOR }); - add_perms("Voice Channels", RIGHT, { + add_perms(_("Voice Channels"), RIGHT, { Permission::CONNECT, Permission::SPEAK, Permission::STREAM, @@ -315,7 +316,7 @@ GuildSettingsRolesPaneInfo::GuildSettingsRolesPaneInfo(Snowflake guild_id) Permission::MOVE_MEMBERS, Permission::SET_VOICE_CHANNEL_STATUS }); - add_perms("Events", RIGHT, { + add_perms(_("Events"), RIGHT, { Permission::CREATE_EVENTS, Permission::MANAGE_EVENTS, }); @@ -408,7 +409,7 @@ void GuildSettingsRolesPaneInfo::UpdateRoleName() { const auto cb = [this, &discord](DiscordError code) { if (code != DiscordError::NONE) { m_role_name.set_text(discord.GetRole(RoleID)->Name); - Gtk::MessageDialog dlg("Failed to set role name", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("Failed to set role name"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER_ON_PARENT); dlg.run(); } diff --git a/src/windows/guildsettingswindow.cpp b/src/windows/guildsettingswindow.cpp index ce390e0f..9fdab566 100644 --- a/src/windows/guildsettingswindow.cpp +++ b/src/windows/guildsettingswindow.cpp @@ -1,5 +1,7 @@ #include "guildsettingswindow.hpp" +#include + #include "abaddon.hpp" GuildSettingsWindow::GuildSettingsWindow(Snowflake id) @@ -59,15 +61,15 @@ GuildSettingsWindow::GuildSettingsWindow(Snowflake id) const auto self_id = discord.GetUserData().ID; - m_stack.add(m_pane_info, "info", "Info"); - m_stack.add(m_pane_members, "members", "Members"); - m_stack.add(m_pane_roles, "roles", "Roles"); - m_stack.add(m_pane_bans, "bans", "Bans"); + m_stack.add(m_pane_info, "info", _("Info")); + m_stack.add(m_pane_members, "members", _("Members")); + m_stack.add(m_pane_roles, "roles", _("Roles")); + m_stack.add(m_pane_bans, "bans", _("Bans")); if (discord.HasGuildPermission(self_id, GuildID, Permission::MANAGE_GUILD)) - m_stack.add(m_pane_invites, "invites", "Invites"); - m_stack.add(m_pane_emojis, "emojis", "Emojis"); + m_stack.add(m_pane_invites, "invites", _("Invites")); + m_stack.add(m_pane_emojis, "emojis", _("Emojis")); if (discord.HasGuildPermission(self_id, GuildID, Permission::VIEW_AUDIT_LOG)) - m_stack.add(m_pane_audit_log, "audit-log", "Audit Log"); + m_stack.add(m_pane_audit_log, "audit-log", _("Audit Log")); m_stack.show(); m_main.add(m_switcher); diff --git a/src/windows/mainwindow.cpp b/src/windows/mainwindow.cpp index ee28d175..b7ea297b 100644 --- a/src/windows/mainwindow.cpp +++ b/src/windows/mainwindow.cpp @@ -1,5 +1,7 @@ #include "mainwindow.hpp" +#include + #include "abaddon.hpp" #include "util.hpp" @@ -253,19 +255,19 @@ MemberList *MainWindow::GetMemberList() { void MainWindow::SetupMenu() { m_menu_discord.set_label("Discord"); m_menu_discord.set_submenu(m_menu_discord_sub); - m_menu_discord_connect.set_label("Connect"); + m_menu_discord_connect.set_label(_("Connect")); m_menu_discord_connect.set_sensitive(false); - m_menu_discord_disconnect.set_label("Disconnect"); + m_menu_discord_disconnect.set_label(_("Disconnect")); m_menu_discord_disconnect.set_sensitive(false); - m_menu_discord_set_token.set_label("Set Token"); - m_menu_discord_login_qr.set_label("Login with QR Code"); + m_menu_discord_set_token.set_label(_("Set Token")); + m_menu_discord_login_qr.set_label(_("Login with QR Code")); #ifndef WITH_QRLOGIN m_menu_discord_login_qr.set_sensitive(false); - m_menu_discord_login_qr.set_tooltip_text("Not compiled with support"); + m_menu_discord_login_qr.set_tooltip_text(_("Not compiled with support")); #endif - m_menu_discord_set_status.set_label("Set Status"); + m_menu_discord_set_status.set_label(_("Set Status")); m_menu_discord_set_status.set_sensitive(false); - m_menu_discord_add_recipient.set_label("Add user to DM"); + m_menu_discord_add_recipient.set_label(_("Add user to DM")); m_menu_discord_sub.append(m_menu_discord_connect); m_menu_discord_sub.append(m_menu_discord_disconnect); m_menu_discord_sub.append(m_menu_discord_set_token); @@ -274,31 +276,31 @@ void MainWindow::SetupMenu() { m_menu_discord_sub.append(m_menu_discord_add_recipient); m_menu_discord.set_submenu(m_menu_discord_sub); - m_menu_file.set_label("File"); + m_menu_file.set_label(_("File")); m_menu_file.set_submenu(m_menu_file_sub); - m_menu_file_reload_css.set_label("Reload CSS"); - m_menu_file_clear_cache.set_label("Clear file cache"); - m_menu_file_dump_ready.set_label("Dump ready message"); + m_menu_file_reload_css.set_label(_("Reload CSS")); + m_menu_file_clear_cache.set_label(_("Clear file cache")); + m_menu_file_dump_ready.set_label(_("Dump ready message")); m_menu_file_sub.append(m_menu_file_reload_css); m_menu_file_sub.append(m_menu_file_clear_cache); m_menu_file_sub.append(m_menu_file_dump_ready); - m_menu_view.set_label("View"); + m_menu_view.set_label(_("View")); m_menu_view.set_submenu(m_menu_view_sub); - m_menu_view_friends.set_label("Friends"); - m_menu_view_pins.set_label("Pins"); - m_menu_view_threads.set_label("Threads"); - m_menu_view_mark_guild_as_read.set_label("Mark Server as Read"); + m_menu_view_friends.set_label(_("Friends")); + m_menu_view_pins.set_label(_("Pins")); + m_menu_view_threads.set_label(_("Threads")); + m_menu_view_mark_guild_as_read.set_label(_("Mark Server as Read")); m_menu_view_mark_guild_as_read.add_accelerator("activate", m_accels, GDK_KEY_Escape, Gdk::SHIFT_MASK, Gtk::ACCEL_VISIBLE); - m_menu_view_channels.set_label("Channels"); + m_menu_view_channels.set_label(_("Channels")); m_menu_view_channels.add_accelerator("activate", m_accels, GDK_KEY_L, Gdk::CONTROL_MASK, Gtk::ACCEL_VISIBLE); m_menu_view_channels.set_active(true); - m_menu_view_members.set_label("Members"); + m_menu_view_members.set_label(_("Members")); m_menu_view_members.add_accelerator("activate", m_accels, GDK_KEY_M, Gdk::CONTROL_MASK, Gtk::ACCEL_VISIBLE); m_menu_view_members.set_active(true); #ifdef WITH_LIBHANDY - m_menu_view_go_back.set_label("Go Back"); - m_menu_view_go_forward.set_label("Go Forward"); + m_menu_view_go_back.set_label(_("Go Back")); + m_menu_view_go_forward.set_label(_("Go Forward")); m_menu_view_go_back.add_accelerator("activate", m_accels, GDK_KEY_Left, Gdk::MOD1_MASK, Gtk::ACCEL_VISIBLE); m_menu_view_go_forward.add_accelerator("activate", m_accels, GDK_KEY_Right, Gdk::MOD1_MASK, Gtk::ACCEL_VISIBLE); #endif diff --git a/src/windows/pinnedwindow.cpp b/src/windows/pinnedwindow.cpp index 05435cbc..5ebf2901 100644 --- a/src/windows/pinnedwindow.cpp +++ b/src/windows/pinnedwindow.cpp @@ -1,5 +1,8 @@ #include "pinnedwindow.hpp" +#include +#include + #include "abaddon.hpp" PinnedWindow::PinnedWindow(const ChannelData &data) @@ -10,9 +13,9 @@ PinnedWindow::PinnedWindow(const ChannelData &data) set_name("pinned-messages"); set_default_size(450, 375); if (data.Name.has_value()) - set_title("#" + *data.Name + " - Pinned Messages"); + set_title(fmt::format("#{} - Pinned Messages", (*data.Name).c_str())); else - set_title("Pinned Messages"); + set_title(_("Pinned Messages")); set_position(Gtk::WIN_POS_CENTER); get_style_context()->add_class("app-window"); get_style_context()->add_class("app-popup"); diff --git a/src/windows/profile/mutualguildspane.cpp b/src/windows/profile/mutualguildspane.cpp index 86d66193..25face9c 100644 --- a/src/windows/profile/mutualguildspane.cpp +++ b/src/windows/profile/mutualguildspane.cpp @@ -1,5 +1,8 @@ #include "mutualguildspane.hpp" +#include +#include + #include "abaddon.hpp" MutualGuildItem::MutualGuildItem(const MutualGuildData &guild) @@ -33,7 +36,7 @@ MutualGuildItem::MutualGuildItem(const MutualGuildData &guild) m_name.set_markup("" + Glib::Markup::escape_text(data->Name) + ""); } else { m_icon.property_pixbuf() = Abaddon::Get().GetImageManager().GetPlaceholder(24); - m_name.set_markup("Unknown server"); + m_name.set_markup(fmt::format("{}", _("Unknown Server"))); } if (guild.Nick.has_value()) { diff --git a/src/windows/profile/userinfopane.cpp b/src/windows/profile/userinfopane.cpp index dc96e0fe..cc3ee7cc 100644 --- a/src/windows/profile/userinfopane.cpp +++ b/src/windows/profile/userinfopane.cpp @@ -2,6 +2,8 @@ #include +#include +#include #include #include "abaddon.hpp" @@ -140,7 +142,7 @@ NotesContainer::NotesContainer() m_label.get_style_context()->add_class("profile-notes-label"); m_note.get_style_context()->add_class("profile-notes-text"); - m_label.set_markup("NOTE"); + m_label.set_markup(fmt::format("{}", _("NOTE"))); m_label.set_halign(Gtk::ALIGN_START); m_note.set_wrap_mode(Gtk::WRAP_WORD_CHAR); @@ -186,7 +188,7 @@ NotesContainer::type_signal_update_note NotesContainer::signal_update_note() { BioContainer::BioContainer() : Gtk::Box(Gtk::ORIENTATION_VERTICAL) { - m_label.set_markup("ABOUT ME"); + m_label.set_markup(fmt::format("{}", _("ABOUT ME"))); m_label.set_halign(Gtk::ALIGN_START); m_bio.set_halign(Gtk::ALIGN_START); m_bio.set_line_wrap(true); @@ -212,7 +214,7 @@ ProfileUserInfoPane::ProfileUserInfoPane(Snowflake ID) m_note.signal_update_note().connect([this](const Glib::ustring ¬e) { auto cb = [](DiscordError code) { if (code != DiscordError::NONE) { - Gtk::MessageDialog dlg("Failed to set note", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(_("Failed to set note"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } @@ -234,7 +236,7 @@ ProfileUserInfoPane::ProfileUserInfoPane(Snowflake ID) m_created.set_halign(Gtk::ALIGN_START); m_created.set_margin_top(5); - m_created.set_text("Account created: " + ID.GetLocalTimestamp()); + m_created.set_text(_("Account created: ") + ID.GetLocalTimestamp()); m_conns.set_halign(Gtk::ALIGN_START); m_conns.set_hexpand(true); diff --git a/src/windows/profilewindow.cpp b/src/windows/profilewindow.cpp index 8c4b67f0..a6449d07 100644 --- a/src/windows/profilewindow.cpp +++ b/src/windows/profilewindow.cpp @@ -1,5 +1,7 @@ #include "profilewindow.hpp" +#include + #include "abaddon.hpp" #include "util.hpp" @@ -74,9 +76,9 @@ ProfileWindow::ProfileWindow(Snowflake user_id) m_switcher.set_halign(Gtk::ALIGN_START); m_switcher.set_hexpand(true); - m_stack.add(m_pane_info, "info", "User Info"); - m_stack.add(m_pane_guilds, "guilds", "Mutual Servers"); - m_stack.add(m_pane_friends, "friends", "Mutual Friends"); + m_stack.add(m_pane_info, "info", _("User Info")); + m_stack.add(m_pane_guilds, "guilds", _("Mutual Servers")); + m_stack.add(m_pane_friends, "friends", _("Mutual Friends")); m_badges.set_valign(Gtk::ALIGN_CENTER); m_badges_scroll.set_hexpand(true); @@ -107,7 +109,7 @@ void ProfileWindow::OnFetchProfile(const UserProfileData &data) { m_pane_guilds.SetMutualGuilds(data.MutualGuilds); if (data.LegacyUsername.has_value()) { - m_username.set_tooltip_text("Originally known as " + *data.LegacyUsername); + m_username.set_tooltip_text(fmt::format(_("Originally known as {}"), (*data.LegacyUsername).c_str())); } for (auto child : m_badges.get_children()) { diff --git a/src/windows/threadswindow.cpp b/src/windows/threadswindow.cpp index 81046d25..025efa92 100644 --- a/src/windows/threadswindow.cpp +++ b/src/windows/threadswindow.cpp @@ -1,17 +1,19 @@ #include "threadswindow.hpp" +#include + #include "abaddon.hpp" ThreadsWindow::ThreadsWindow(const ChannelData &channel) : m_channel_id(channel.ID) - , m_filter_public(m_group, "Public") - , m_filter_private(m_group, "Private") + , m_filter_public(m_group, _("Public")) + , m_filter_private(m_group, _("Private")) , m_box(Gtk::ORIENTATION_VERTICAL) , m_active(channel, sigc::mem_fun(*this, &ThreadsWindow::ListFilterFunc)) , m_archived(channel, sigc::mem_fun(*this, &ThreadsWindow::ListFilterFunc)) { set_name("threads-window"); set_default_size(450, 375); - set_title("#" + *channel.Name + " - Threads"); + set_title(fmt::format(_("#{} - Threads"), (*channel.Name).c_str())); set_position(Gtk::WIN_POS_CENTER); get_style_context()->add_class("app-window"); get_style_context()->add_class("app-popup"); @@ -27,8 +29,8 @@ ThreadsWindow::ThreadsWindow(const ChannelData &channel) m_switcher.set_halign(Gtk::ALIGN_CENTER); m_switcher.set_stack(m_stack); - m_stack.add(m_active, "active", "Active Threads"); - m_stack.add(m_archived, "archived", "Archived Threads"); + m_stack.add(m_active, "active", _("Active Threads")); + m_stack.add(m_archived, "archived", _("Archived Threads")); m_filter_buttons.set_homogeneous(true); m_filter_buttons.set_halign(Gtk::ALIGN_CENTER); diff --git a/src/windows/voicesettingswindow.cpp b/src/windows/voicesettingswindow.cpp index 90d07172..823c89a7 100644 --- a/src/windows/voicesettingswindow.cpp +++ b/src/windows/voicesettingswindow.cpp @@ -4,6 +4,8 @@ #include +#include + #include "abaddon.hpp" #include "audio/manager.hpp" #include "voicesettingswindow.hpp" @@ -16,45 +18,45 @@ VoiceSettingsWindow::VoiceSettingsWindow() get_style_context()->add_class("voice-settings-window"); set_default_size(300, 300); - m_encoding_mode.append("Voice"); - m_encoding_mode.append("Music"); - m_encoding_mode.append("Restricted"); + m_encoding_mode.append("voice", _("Voice")); + m_encoding_mode.append("music", _("Music")); + m_encoding_mode.append("restricted", _("Restricted")); m_encoding_mode.set_tooltip_text( - "Sets the coding mode for the Opus encoder\n" + _("Sets the coding mode for the Opus encoder\n" "Voice - Optimize for voice quality\n" "Music - Optimize for non-voice signals incl. music\n" - "Restricted - Optimize for non-voice, low latency. Not recommended"); + "Restricted - Optimize for non-voice, low latency. Not recommended")); const auto mode = Abaddon::Get().GetAudio().GetEncodingApplication(); if (mode == OPUS_APPLICATION_VOIP) { - m_encoding_mode.set_active(0); + m_encoding_mode.set_active_id("voice"); } else if (mode == OPUS_APPLICATION_AUDIO) { - m_encoding_mode.set_active(1); + m_encoding_mode.set_active_id("music"); } else if (mode == OPUS_APPLICATION_RESTRICTED_LOWDELAY) { - m_encoding_mode.set_active(2); + m_encoding_mode.set_active_id("restricted"); } m_encoding_mode.signal_changed().connect([this]() { - const auto mode = m_encoding_mode.get_active_text(); + const auto mode = m_encoding_mode.get_active_id(); auto &audio = Abaddon::Get().GetAudio(); - if (mode == "Voice") { + if (mode == "voice") { audio.SetEncodingApplication(OPUS_APPLICATION_VOIP); - } else if (mode == "Music") { + } else if (mode == "music") { spdlog::get("audio")->debug("music/audio"); audio.SetEncodingApplication(OPUS_APPLICATION_AUDIO); - } else if (mode == "Restricted") { + } else if (mode == "restricted") { audio.SetEncodingApplication(OPUS_APPLICATION_RESTRICTED_LOWDELAY); } }); - m_signal.append("Auto"); - m_signal.append("Voice"); - m_signal.append("Music"); + m_signal.append("auto", _("Auto")); + m_signal.append("voice", _("Voice")); + m_signal.append("music", _("Music")); m_signal.set_tooltip_text( - "Signal hint. Tells Opus what the current signal is\n" + _("Signal hint. Tells Opus what the current signal is\n" "Auto - Let Opus figure it out\n" "Voice - Tell Opus it's a voice signal\n" - "Music - Tell Opus it's a music signal"); + "Music - Tell Opus it's a music signal")); const auto signal = Abaddon::Get().GetAudio().GetSignalHint(); if (signal == OPUS_AUTO) { @@ -66,13 +68,13 @@ VoiceSettingsWindow::VoiceSettingsWindow() } m_signal.signal_changed().connect([this]() { - const auto signal = m_signal.get_active_text(); + const auto signal = m_signal.get_active_id(); auto &audio = Abaddon::Get().GetAudio(); - if (signal == "Auto") { + if (signal == "auto") { audio.SetSignalHint(OPUS_AUTO); - } else if (signal == "Voice") { + } else if (signal == "voice") { audio.SetSignalHint(OPUS_SIGNAL_VOICE); - } else if (signal == "Music") { + } else if (signal == "music") { audio.SetSignalHint(OPUS_SIGNAL_MUSIC); } }); @@ -125,10 +127,10 @@ VoiceSettingsWindow::VoiceSettingsWindow() auto *widgets = Gtk::make_managed(); layout->pack_start(*labels, false, true, 5); layout->pack_start(*widgets); - labels->pack_start(*Gtk::make_managed("Coding Mode", Gtk::ALIGN_END)); - labels->pack_start(*Gtk::make_managed("Signal Hint", Gtk::ALIGN_END)); - labels->pack_start(*Gtk::make_managed("Bitrate", Gtk::ALIGN_END)); - labels->pack_start(*Gtk::make_managed("Gain", Gtk::ALIGN_END)); + labels->pack_start(*Gtk::make_managed(_("Coding Mode"), Gtk::ALIGN_END)); + labels->pack_start(*Gtk::make_managed(_("Signal Hint"), Gtk::ALIGN_END)); + labels->pack_start(*Gtk::make_managed(_("Bitrate"), Gtk::ALIGN_END)); + labels->pack_start(*Gtk::make_managed(_("Gain"), Gtk::ALIGN_END)); widgets->pack_start(m_encoding_mode); widgets->pack_start(m_signal); widgets->pack_start(m_bitrate); diff --git a/src/windows/voicewindow.cpp b/src/windows/voicewindow.cpp index 18f4a416..72f3c47f 100644 --- a/src/windows/voicewindow.cpp +++ b/src/windows/voicewindow.cpp @@ -2,11 +2,14 @@ // clang-format off +#include "voicewindow.hpp" + +#include + #include "abaddon.hpp" #include "audio/manager.hpp" #include "components/lazyimage.hpp" #include "voicesettingswindow.hpp" -#include "voicewindow.hpp" // clang-format on @@ -16,7 +19,7 @@ class VoiceWindowUserListEntry : public Gtk::ListBoxRow { : m_main(Gtk::ORIENTATION_VERTICAL) , m_horz(Gtk::ORIENTATION_HORIZONTAL) , m_avatar(32, 32) - , m_mute("Mute") { + , m_mute(_("Mute")) { m_name.set_halign(Gtk::ALIGN_START); m_name.set_hexpand(true); m_mute.set_halign(Gtk::ALIGN_END); @@ -43,7 +46,7 @@ class VoiceWindowUserListEntry : public Gtk::ListBoxRow { m_name.set_text(user->GetUsername()); m_avatar.SetURL(user->GetAvatarURL("png", "32")); } else { - m_name.set_text("Unknown user"); + m_name.set_text(_("Unknown User")); } m_mute.signal_toggled().connect([this]() { @@ -87,13 +90,13 @@ class VoiceWindowUserListEntry : public Gtk::ListBoxRow { VoiceWindow::VoiceWindow(Snowflake channel_id) : m_main(Gtk::ORIENTATION_VERTICAL) , m_controls(Gtk::ORIENTATION_HORIZONTAL) - , m_mute("Mute") - , m_deafen("Deafen") - , m_noise_suppression("Suppress Noise") - , m_mix_mono("Mix Mono") + , m_mute(_("Mute")) + , m_deafen(_("Deafen")) + , m_noise_suppression(_("Suppress Noise")) + , m_mix_mono(_("Mix Mono")) , m_channel_id(channel_id) - , m_menu_view("View") - , m_menu_view_settings("More _Settings", true) { + , m_menu_view(_("View")) + , m_menu_view_settings(_("More _Settings"), true) { get_style_context()->add_class("app-window"); set_default_size(300, 300); @@ -152,12 +155,12 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) m_vad_combo.set_hexpand(true); m_vad_combo.set_halign(Gtk::ALIGN_FILL); m_vad_combo.set_tooltip_text( - "Voice Activation Detection method\n" + _("Voice Activation Detection method\n" "Gate - Simple volume threshold. Slider changes threshold\n" - "RNNoise - Heavier on CPU. Slider changes probability threshold"); - m_vad_combo.append("gate", "Gate"); + "RNNoise - Heavier on CPU. Slider changes probability threshold")); + m_vad_combo.append("gate", _("Gate")); #ifdef WITH_RNNOISE - m_vad_combo.append("rnnoise", "RNNoise"); + m_vad_combo.append("rnnoise", _("RNNoise")); #endif if (!m_vad_combo.set_active_id(Abaddon::Get().GetSettings().VAD)) { #ifdef WITH_RNNOISE @@ -231,8 +234,8 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) auto *sliders_sliders = Gtk::make_managed(); sliders_container->pack_start(*sliders_labels, false, true, 2); sliders_container->pack_start(*sliders_sliders); - sliders_labels->pack_start(*Gtk::make_managed("Threshold", Gtk::ALIGN_END)); - sliders_labels->pack_start(*Gtk::make_managed("Gain", Gtk::ALIGN_END)); + sliders_labels->pack_start(*Gtk::make_managed(_("Threshold"), Gtk::ALIGN_END)); + sliders_labels->pack_start(*Gtk::make_managed(_("Gain"), Gtk::ALIGN_END)); sliders_sliders->pack_start(m_vad_param); sliders_sliders->pack_start(m_capture_gain); @@ -241,9 +244,9 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) auto *combos_combos = Gtk::make_managed(); combos_container->pack_start(*combos_labels, false, true, 6); combos_container->pack_start(*combos_combos, Gtk::PACK_EXPAND_WIDGET, 6); - combos_labels->pack_start(*Gtk::make_managed("VAD Method", Gtk::ALIGN_END)); - combos_labels->pack_start(*Gtk::make_managed("Output Device", Gtk::ALIGN_END)); - combos_labels->pack_start(*Gtk::make_managed("Input Device", Gtk::ALIGN_END)); + combos_labels->pack_start(*Gtk::make_managed(_("VAD Method"), Gtk::ALIGN_END)); + combos_labels->pack_start(*Gtk::make_managed(_("Output Device"), Gtk::ALIGN_END)); + combos_labels->pack_start(*Gtk::make_managed(_("Input Device"), Gtk::ALIGN_END)); combos_combos->pack_start(m_vad_combo); combos_combos->pack_start(m_playback_combo); combos_combos->pack_start(m_capture_combo); @@ -256,7 +259,7 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) m_main.pack_start(m_menu_bar, false, true); m_main.pack_start(m_controls, false, true); m_main.pack_start(m_vad_value, false, true); - m_main.pack_start(*Gtk::make_managed("Input Settings"), false, true); + m_main.pack_start(*Gtk::make_managed(_("Input Settings")), false, true); m_main.pack_start(*sliders_container, false, true); m_main.pack_start(m_scroll); m_main.pack_start(*combos_container, false, true, 2); From 4e378575af51eb3721329824883fff4d12a30e12 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sat, 25 May 2024 00:09:08 -0400 Subject: [PATCH 02/37] add mention overlay to folders in classic --- .../channellist/classic/guildlist.cpp | 19 +++++++++++-- .../channellist/classic/mentionoverlay.cpp | 27 ++++++++++++++----- .../channellist/classic/mentionoverlay.hpp | 6 ++++- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/components/channellist/classic/guildlist.cpp b/src/components/channellist/classic/guildlist.cpp index 6bee4840..fdc15f91 100644 --- a/src/components/channellist/classic/guildlist.cpp +++ b/src/components/channellist/classic/guildlist.cpp @@ -103,7 +103,22 @@ static Gtk::Widget *AddMentionOverlay(Gtk::Widget *widget, Snowflake guild_id) { mention_overlay->signal_realize().connect([mention_overlay]() { mention_overlay->get_window()->set_pass_through(true); }); - overlay->show_all(); + mention_overlay->show(); + overlay->show(); + return overlay; +} + +static Gtk::Widget *AddMentionOverlay(Gtk::Widget *widget, const UserSettingsGuildFoldersEntry &folder) { + auto *overlay = Gtk::make_managed(); + overlay->add(*widget); + auto *mention_overlay = Gtk::make_managed(folder); + overlay->add_overlay(*mention_overlay); + overlay->set_overlay_pass_through(*mention_overlay, true); + mention_overlay->signal_realize().connect([mention_overlay]() { + mention_overlay->get_window()->set_pass_through(true); + }); + mention_overlay->show(); + overlay->show(); return overlay; } @@ -151,7 +166,7 @@ void GuildList::AddFolder(const UserSettingsGuildFoldersEntry &folder) { } folder_widget->show(); - add(*folder_widget); + add(*AddMentionOverlay(folder_widget, folder)); } void GuildList::Clear() { diff --git a/src/components/channellist/classic/mentionoverlay.cpp b/src/components/channellist/classic/mentionoverlay.cpp index c734ceda..9fdd6941 100644 --- a/src/components/channellist/classic/mentionoverlay.cpp +++ b/src/components/channellist/classic/mentionoverlay.cpp @@ -5,7 +5,16 @@ #include "abaddon.hpp" MentionOverlay::MentionOverlay(Snowflake guild_id) - : m_guild_id(guild_id) { + : m_guild_ids({ guild_id }) { + Init(); +} + +MentionOverlay::MentionOverlay(const UserSettingsGuildFoldersEntry &folder) + : m_guild_ids({ folder.GuildIDs.begin(), folder.GuildIDs.end() }) { + Init(); +} + +void MentionOverlay::Init() { m_font.set_family("sans 14"); m_layout = create_pango_layout("12"); m_layout->set_font_description(m_font); @@ -24,20 +33,24 @@ MentionOverlay::MentionOverlay(Snowflake guild_id) }); Abaddon::Get().GetDiscordClient().signal_message_create().connect([this](const Message &msg) { - if (msg.GuildID.has_value() && *msg.GuildID != m_guild_id) return; + if (msg.GuildID.has_value() && m_guild_ids.find(*msg.GuildID) == m_guild_ids.end()) return; if (!msg.DoesMentionEveryone && msg.Mentions.empty() && msg.MentionRoles.empty()) return; queue_draw(); }); } bool MentionOverlay::OnDraw(const Cairo::RefPtr &cr) { - int mentions; - Abaddon::Get().GetDiscordClient().GetUnreadStateForGuild(m_guild_id, mentions); - if (mentions == 0) return true; - m_layout->set_text(std::to_string(mentions)); + int total_mentions = 0; + for (auto guild_id : m_guild_ids) { + int mentions; + Abaddon::Get().GetDiscordClient().GetUnreadStateForGuild(guild_id, mentions); + total_mentions += mentions; + } + if (total_mentions == 0) return true; + m_layout->set_text(std::to_string(total_mentions)); const int width = get_allocated_width(); - const int height = get_allocated_height(); + const int height = std::min(get_allocated_height(), 48); // cope int lw, lh; m_layout->get_pixel_size(lw, lh); diff --git a/src/components/channellist/classic/mentionoverlay.hpp b/src/components/channellist/classic/mentionoverlay.hpp index 24eb7e20..ceb4f01c 100644 --- a/src/components/channellist/classic/mentionoverlay.hpp +++ b/src/components/channellist/classic/mentionoverlay.hpp @@ -4,15 +4,19 @@ #include #include "discord/snowflake.hpp" +#include "discord/usersettings.hpp" class MentionOverlay : public Gtk::DrawingArea { public: MentionOverlay(Snowflake guild_id); + MentionOverlay(const UserSettingsGuildFoldersEntry &folder); private: + void Init(); + bool OnDraw(const Cairo::RefPtr &cr); - Snowflake m_guild_id; + std::set m_guild_ids; Pango::FontDescription m_font; Glib::RefPtr m_layout; From caa598cf70b01e2e903ee6819693e2f5d75d3db0 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sat, 1 Jun 2024 02:12:46 -0400 Subject: [PATCH 03/37] add disconnect button to voice window as Per Special Request --- src/windows/voicewindow.cpp | 6 ++++++ src/windows/voicewindow.hpp | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/windows/voicewindow.cpp b/src/windows/voicewindow.cpp index 72f3c47f..9da12d4d 100644 --- a/src/windows/voicewindow.cpp +++ b/src/windows/voicewindow.cpp @@ -94,6 +94,7 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) , m_deafen(_("Deafen")) , m_noise_suppression(_("Suppress Noise")) , m_mix_mono(_("Mix Mono")) + , m_disconnect(_("Disconnect")) , m_channel_id(channel_id) , m_menu_view(_("View")) , m_menu_view_settings(_("More _Settings"), true) { @@ -188,6 +189,10 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) Abaddon::Get().GetAudio().SetMixMono(m_mix_mono.get_active()); }); + m_disconnect.signal_clicked().connect([this]() { + Abaddon::Get().GetDiscordClient().DisconnectFromVoice(); + }); + auto *playback_renderer = Gtk::make_managed(); m_playback_combo.set_valign(Gtk::ALIGN_END); m_playback_combo.set_hexpand(true); @@ -256,6 +261,7 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) m_controls.add(m_deafen); m_controls.add(m_noise_suppression); m_controls.add(m_mix_mono); + m_controls.pack_end(m_disconnect, false, true); m_main.pack_start(m_menu_bar, false, true); m_main.pack_start(m_controls, false, true); m_main.pack_start(m_vad_value, false, true); diff --git a/src/windows/voicewindow.hpp b/src/windows/voicewindow.hpp index 018934b2..fb640103 100644 --- a/src/windows/voicewindow.hpp +++ b/src/windows/voicewindow.hpp @@ -56,6 +56,8 @@ class VoiceWindow : public Gtk::Window { Gtk::CheckButton m_noise_suppression; Gtk::CheckButton m_mix_mono; + Gtk::Button m_disconnect; + Gtk::ComboBoxText m_vad_combo; Gtk::ComboBox m_playback_combo; Gtk::ComboBox m_capture_combo; From 93d97519841ebbc443b8eed1dc498508db23aa64 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sat, 1 Jun 2024 02:17:08 -0400 Subject: [PATCH 04/37] bump voice window height as Per Special Request --- src/windows/voicewindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windows/voicewindow.cpp b/src/windows/voicewindow.cpp index 9da12d4d..9a264d2e 100644 --- a/src/windows/voicewindow.cpp +++ b/src/windows/voicewindow.cpp @@ -100,7 +100,7 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) , m_menu_view_settings(_("More _Settings"), true) { get_style_context()->add_class("app-window"); - set_default_size(300, 300); + set_default_size(300, 400); auto &discord = Abaddon::Get().GetDiscordClient(); auto &audio = Abaddon::Get().GetAudio(); From 2c41072ace2e26522b98f054354737a158c24629 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sun, 2 Jun 2024 20:32:26 -0400 Subject: [PATCH 05/37] fix linking curl maybe somehow i guess --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index abc7c76d..2b8b8ee4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,7 +72,7 @@ endif () if (NOT (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")) target_precompile_headers(abaddon PRIVATE src/abaddon.hpp src/util.hpp) -endif() +endif () if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND @@ -119,12 +119,13 @@ target_link_libraries(abaddon spdlog::spdlog) target_link_libraries(abaddon ${SQLite3_LIBRARIES}) target_link_libraries(abaddon ${GTKMM_LIBRARIES}) -target_link_libraries(abaddon ${CURL_LIBRARIES}) target_link_libraries(abaddon ${ZLIB_LIBRARY}) target_link_libraries(abaddon ${NLOHMANN_JSON_LIBRARIES}) target_link_libraries(abaddon ${CMAKE_DL_LIBS}) target_link_libraries(abaddon ${INTL_LIBRARIES}) +target_link_libraries(abaddon CURL::libcurl) + include(CheckAtomic) if (NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) target_link_libraries(abaddon atomic) From 3c5b96050de7c7527780f2fe8e918c9a36f1cc42 Mon Sep 17 00:00:00 2001 From: chris <62446202+5xp@users.noreply.github.com> Date: Sat, 1 Jun 2024 15:46:42 -0500 Subject: [PATCH 06/37] Correct default setting for hideconsole in README (#303) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2fab190..b1d1a35b 100644 --- a/README.md +++ b/README.md @@ -347,7 +347,7 @@ For example, memory_db would be set by adding `memory_db = true` under the line | Setting | Type | Default | Description | |---------------|---------|---------|-------------------------| -| `hideconsole` | boolean | true | Hide console on startup | +| `hideconsole` | boolean | false | Hide console on startup | ### Environment variables From a5ae3384389cbc65014dbcfb85f23397681c2a81 Mon Sep 17 00:00:00 2001 From: Skeevert <45735359+Skeevert@users.noreply.github.com> Date: Mon, 3 Jun 2024 03:10:40 +0300 Subject: [PATCH 07/37] Refactoring: changed user flag enum to enum class (#299) --- src/discord/user.cpp | 60 +++++++++++++++++------------------ src/discord/user.hpp | 3 +- src/windows/profilewindow.cpp | 5 +-- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/discord/user.cpp b/src/discord/user.cpp index 8129273b..a5bb0aef 100644 --- a/src/discord/user.cpp +++ b/src/discord/user.cpp @@ -220,34 +220,34 @@ void UserData::update_from_json(const nlohmann::json &j) { } const char *UserData::GetFlagName(uint64_t flag) { - switch (flag) { - case DiscordEmployee: + switch (static_cast(flag)) { + case UserData::EFlags::DiscordEmployee: return "discordstaff"; - case PartneredServerOwner: + case UserData::EFlags::PartneredServerOwner: return "partneredowner"; - case HypeSquadEvents: + case UserData::EFlags::HypeSquadEvents: return "hypesquadevents"; - case BugHunterLevel1: + case UserData::EFlags::BugHunterLevel1: return "discordbughunter"; - case HouseBravery: + case UserData::EFlags::HouseBravery: return "hypesquadbravery"; - case HouseBrilliance: + case UserData::EFlags::HouseBrilliance: return "hypesquadbrilliance"; - case HouseBalance: + case UserData::EFlags::HouseBalance: return "hypesquadbalance"; - case EarlySupporter: + case UserData::EFlags::EarlySupporter: return "earlysupporter"; - case TeamUser: + case UserData::EFlags::TeamUser: return "teamuser"; - case System: + case UserData::EFlags::System: return "system"; - case BugHunterLevel2: + case UserData::EFlags::BugHunterLevel2: return "discordbughunter2"; - case VerifiedBot: + case UserData::EFlags::VerifiedBot: return "verifiedbot"; - case EarlyVerifiedBotDeveloper: + case UserData::EFlags::EarlyVerifiedBotDeveloper: return "earlyverifiedbotdeveloper"; - case CertifiedModerator: + case UserData::EFlags::CertifiedModerator: return "certifiedmoderator"; default: return "unknown"; @@ -255,34 +255,34 @@ const char *UserData::GetFlagName(uint64_t flag) { } const char *UserData::GetFlagReadableName(uint64_t flag) { - switch (flag) { - case DiscordEmployee: + switch (static_cast(flag)) { + case UserData::EFlags::DiscordEmployee: return "Discord Staff"; - case PartneredServerOwner: + case UserData::EFlags::PartneredServerOwner: return "Partnered Server Owner"; - case HypeSquadEvents: + case UserData::EFlags::HypeSquadEvents: return "HypeSquad Events"; - case BugHunterLevel1: + case UserData::EFlags::BugHunterLevel1: return "Discord Bug Hunter"; - case HouseBravery: + case UserData::EFlags::HouseBravery: return "HypeSquad Bravery"; - case HouseBrilliance: + case UserData::EFlags::HouseBrilliance: return "HypeSquad Brilliance"; - case HouseBalance: + case UserData::EFlags::HouseBalance: return "HypeSquad Balance"; - case EarlySupporter: + case UserData::EFlags::EarlySupporter: return "Early Supporter"; - case TeamUser: + case UserData::EFlags::TeamUser: return "Team User"; // ??? - case System: + case UserData::EFlags::System: return "System"; - case BugHunterLevel2: + case UserData::EFlags::BugHunterLevel2: return "Discord Bug Hunter Level 2"; - case VerifiedBot: + case UserData::EFlags::VerifiedBot: return "Verified Bot"; - case EarlyVerifiedBotDeveloper: + case UserData::EFlags::EarlyVerifiedBotDeveloper: return "Early Verified Bot Developer"; - case CertifiedModerator: + case UserData::EFlags::CertifiedModerator: return "Discord Certified Moderator"; default: return ""; diff --git a/src/discord/user.hpp b/src/discord/user.hpp index 3e356a45..6aee6bef 100644 --- a/src/discord/user.hpp +++ b/src/discord/user.hpp @@ -11,8 +11,7 @@ enum class EPremiumType { }; struct UserData { - // todo: enum class? (for consistencys sake) - enum { + enum class EFlags : uint64_t { DiscordEmployee = 1 << 0, PartneredServerOwner = 1 << 1, HypeSquadEvents = 1 << 2, diff --git a/src/windows/profilewindow.cpp b/src/windows/profilewindow.cpp index a6449d07..7445e3d4 100644 --- a/src/windows/profilewindow.cpp +++ b/src/windows/profilewindow.cpp @@ -3,6 +3,7 @@ #include #include "abaddon.hpp" +#include "discord/user.hpp" #include "util.hpp" ProfileWindow::ProfileWindow(Snowflake user_id) @@ -118,13 +119,13 @@ void ProfileWindow::OnFetchProfile(const UserProfileData &data) { if (!data.User.PublicFlags.has_value()) return; const auto x = *data.User.PublicFlags; - for (uint64_t i = 1; i <= UserData::MaxFlag; i <<= 1) { + for (uint64_t i = 1; i <= static_cast(UserData::EFlags::MaxFlag); i <<= 1) { if (!(x & i)) continue; const std::string name = UserData::GetFlagName(i); if (name == "unknown") continue; Glib::RefPtr pixbuf; try { - if (name == "verifiedbot") + if (i == static_cast(UserData::EFlags::VerifiedBot)) pixbuf = Gdk::Pixbuf::create_from_file(Abaddon::GetResPath("/checkmark.png"), 24, 24); else pixbuf = Gdk::Pixbuf::create_from_file(Abaddon::GetResPath("/" + name + ".png"), 24, 24); From 432dc84e99ccc894b96ac19fd952e5d192c9ed42 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Tue, 4 Jun 2024 21:36:55 -0400 Subject: [PATCH 08/37] ignore unread state from undisplayed channel types --- src/discord/discord.cpp | 18 ++++++++++++++++-- src/discord/discord.hpp | 2 ++ src/discord/store.cpp | 12 ++++++------ src/discord/store.hpp | 2 +- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp index 385d6b7e..f955f45f 100644 --- a/src/discord/discord.cpp +++ b/src/discord/discord.cpp @@ -351,7 +351,9 @@ void DiscordClient::GetArchivedPrivateThreads(Snowflake channel_id, const sigc:: } std::vector DiscordClient::GetChildChannelIDs(Snowflake parent_id) const { - return m_store.GetChannelIDsWithParentID(parent_id); + std::vector ids; + for (auto [id, type] : m_store.GetChannelIDsWithParentID(parent_id)) ids.push_back(id); + return ids; } std::optional DiscordClient::GetWebhookMessageData(Snowflake message_id) const { @@ -1371,7 +1373,8 @@ int DiscordClient::GetUnreadStateForChannel(Snowflake id) const noexcept { int DiscordClient::GetUnreadChannelsCountForCategory(Snowflake id) const noexcept { int result = 0; - for (Snowflake channel_id : m_store.GetChannelIDsWithParentID(id)) { + for (auto [channel_id, channel_type] : m_store.GetChannelIDsWithParentID(id)) { + if (!ShouldChannelTypeCountInUnread(channel_type)) continue; if (IsChannelMuted(channel_id)) continue; const auto iter = m_unread.find(channel_id); if (iter == m_unread.end()) continue; @@ -1393,6 +1396,9 @@ bool DiscordClient::GetUnreadStateForGuild(Snowflake id, int &total_mentions) co if (const auto iter = m_channel_muted_parent.find(channel_id); iter != m_channel_muted_parent.end()) continue; + const auto channel = GetChannel(channel_id); + if (channel.has_value() && !ShouldChannelTypeCountInUnread(channel->Type)) continue; + if (!has_any_unread && channel_unread > -1 && !IsChannelMuted(channel_id)) has_any_unread = true; } @@ -2753,6 +2759,14 @@ bool DiscordClient::CheckCode(const http::response_type &r, int expected) { return true; } +bool DiscordClient::ShouldChannelTypeCountInUnread(ChannelType type) { + return type != ChannelType::GUILD_VOICE && + type != ChannelType::GUILD_FORUM && + type != ChannelType::GUILD_MEDIA && + type != ChannelType::GUILD_STORE && + type != ChannelType::GUILD_DIRECTORY; +} + void DiscordClient::StoreMessageData(Message &msg) { const auto chan = m_store.GetChannel(msg.ChannelID); if (chan.has_value() && chan->GuildID.has_value()) diff --git a/src/discord/discord.hpp b/src/discord/discord.hpp index 9c2c0809..6b2853b0 100644 --- a/src/discord/discord.hpp +++ b/src/discord/discord.hpp @@ -321,6 +321,8 @@ class DiscordClient { void StoreMessageData(Message &msg); + static bool ShouldChannelTypeCountInUnread(ChannelType type); + void HandleReadyReadState(const ReadyEventData &data); void HandleReadyGuildSettings(const ReadyEventData &data); diff --git a/src/discord/store.cpp b/src/discord/store.cpp index bf630aa6..4de5d636 100644 --- a/src/discord/store.cpp +++ b/src/discord/store.cpp @@ -638,16 +638,16 @@ std::vector Store::GetActiveThreads(Snowflake channel_id) const { return ret; } -std::vector Store::GetChannelIDsWithParentID(Snowflake channel_id) const { +std::vector> Store::GetChannelIDsWithParentID(Snowflake channel_id) const { auto &s = m_stmt_get_chan_ids_parent; s->Bind(1, channel_id); - std::vector ret; + std::vector> ret; while (s->FetchOne()) { - Snowflake x; - s->Get(0, x); - ret.push_back(x); + auto &p = ret.emplace_back(); + s->Get(0, p.first); + s->Get(1, p.second); } s->Reset(); @@ -2315,7 +2315,7 @@ bool Store::CreateStatements() { } m_stmt_get_chan_ids_parent = std::make_unique(m_db, R"( - SELECT id FROM channels WHERE parent_id = ? + SELECT id, type FROM channels WHERE parent_id = ? )"); if (!m_stmt_get_chan_ids_parent->OK()) { fprintf(stderr, "failed to prepare get channel ids for parent statement: %s\n", m_db.ErrStr()); diff --git a/src/discord/store.hpp b/src/discord/store.hpp index 6157f09f..e53d5c75 100644 --- a/src/discord/store.hpp +++ b/src/discord/store.hpp @@ -50,7 +50,7 @@ class Store { std::vector GetMessagesBefore(Snowflake channel_id, Snowflake message_id, size_t limit) const; std::vector GetPinnedMessages(Snowflake channel_id) const; std::vector GetActiveThreads(Snowflake channel_id) const; // public - std::vector GetChannelIDsWithParentID(Snowflake channel_id) const; + std::vector> GetChannelIDsWithParentID(Snowflake channel_id) const; std::unordered_set GetMembersInGuild(Snowflake guild_id) const; // ^ not the same as GetUsersInGuild since users in a guild may include users who do not have retrieved member data From de55603a30f2c5603b7c8d8778334a9fe98f42d3 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Fri, 7 Jun 2024 00:27:44 -0400 Subject: [PATCH 09/37] add new dll (fixes #307) --- ci/msys-deps.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/msys-deps.txt b/ci/msys-deps.txt index d37418b4..56fc6762 100644 --- a/ci/msys-deps.txt +++ b/ci/msys-deps.txt @@ -40,6 +40,7 @@ /bin/libjpeg-8.dll /bin/liblzma-5.dll /bin/libnghttp2-14.dll +/bin/libnghttp3-9.dll /bin/libopus-0.dll /bin/libpango-1.0-0.dll /bin/libpangocairo-1.0-0.dll From 42c99af54ea2a8f20727f17f140de6a6dcb2426c Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Wed, 12 Jun 2024 22:00:02 -0400 Subject: [PATCH 10/37] build number shenanigans --- src/startup.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/startup.cpp b/src/startup.cpp index 4939c2f1..f2ed5cec 100644 --- a/src/startup.cpp +++ b/src/startup.cpp @@ -46,8 +46,8 @@ std::optional GetJavascriptFileFromAppPage(const Glib::ustring &c start_position += str.size(); } - if (matches.size() >= 7) { - return matches[matches.size() - 7]; + if (matches.size() >= 8) { + return matches[matches.size() - 8]; } return {}; From e0ef0c8afdb072aae5fc76b12bdef5b89da9c9c4 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Sat, 15 Jun 2024 16:52:51 -0300 Subject: [PATCH 11/37] Add locale folder resolution --- src/abaddon.cpp | 6 +++--- src/platform.cpp | 29 +++++++++++++++++++++++++++++ src/platform.hpp | 1 + 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 9581a36b..845a835f 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -1172,9 +1172,6 @@ int main(int argc, char **argv) { } catch (...) {} } - bindtextdomain("abaddon", "./locale/"); - textdomain("abaddon"); - #if defined(_WIN32) && defined(_MSC_VER) TCHAR buf[2] { 0 }; GetEnvironmentVariableA("GTK_CSD", buf, sizeof(buf)); @@ -1189,6 +1186,9 @@ int main(int argc, char **argv) { auto log_discord = spdlog::stdout_color_mt("discord"); auto log_ra = spdlog::stdout_color_mt("remote-auth"); + bindtextdomain("abaddon", Platform::FindLocaleFolder().c_str()); + textdomain("abaddon"); + Gtk::Main::init_gtkmm_internals(); // why??? return Abaddon::Get().StartGTK(); } diff --git a/src/platform.cpp b/src/platform.cpp index ce0ac746..15fdde2d 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -90,6 +90,10 @@ std::string Platform::FindStateCacheFolder() { return "."; } +std::string Platform::FindLocaleFolder() { + return "./locale/"; +} + #elif defined(__linux__) std::string Platform::FindResourceFolder() { static std::string found_path; @@ -157,6 +161,21 @@ std::string Platform::FindStateCacheFolder() { return "."; } +// !!! +std::string Platform::FindLocaleFolder() { + const auto home_env = std::getenv("HOME"); + if (home_env) { + if (std::filesystem::exists("/usr/share/locale/abaddon/")) { + return "/usr/share/locale/abaddon/"; + } else if (std::filesystem::exists(home_env + "/.local/share/abaddon/locale/"s)) { + return home_env + "/.local/share/abaddon/locale/"s; + } + } + + spdlog::get("discord")->warn("can't find locale folder!"); + return "./locale/"; +} + #elif defined(__APPLE__) #include #include @@ -221,6 +240,11 @@ std::string Platform::FindStateCacheFolder() { return home_path; } +std::string Platform::FindLocaleFolder() { + // TODO: Add thorough locale folder resolution code (Apple) + return "./locale/" +} + #else std::string Platform::FindResourceFolder() { @@ -240,4 +264,9 @@ std::string Platform::FindStateCacheFolder() { spdlog::get("discord")->warn("unknown OS, setting state cache folder to cwd"); return "."; } + +std::string Platform::FindLocaleFolder() { + spdlog::get("discord")->warn("unknown OS, setting locale folder to cwd"); + return "./locale/"; +} #endif diff --git a/src/platform.hpp b/src/platform.hpp index 8083a5a2..be2351b8 100644 --- a/src/platform.hpp +++ b/src/platform.hpp @@ -6,4 +6,5 @@ bool SetupFonts(); std::string FindResourceFolder(); std::string FindConfigFile(); std::string FindStateCacheFolder(); +std::string FindLocaleFolder(); } // namespace Platform From 75e6404338fb57433258c2ae8a6dbdb54d5d491f Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Sun, 16 Jun 2024 20:16:52 -0300 Subject: [PATCH 12/37] Enhance i18n support * Properly include * Format texts in abaddon.cpp * Update abaddon.pot * Update pt_BR.po --- po/abaddon.pot | 98 ++++++++-------- po/pt_BR.po | 128 ++++++++++++--------- src/abaddon.cpp | 15 +-- src/components/chatmessage.cpp | 3 +- src/components/chatwindow.cpp | 2 +- src/components/ratelimitindicator.cpp | 2 +- src/dialogs/setstatus.cpp | 2 +- src/windows/guildsettings/auditlogpane.cpp | 2 +- src/windows/guildsettings/banspane.cpp | 2 +- src/windows/guildsettings/emojispane.cpp | 2 +- src/windows/pinnedwindow.cpp | 2 +- src/windows/profile/mutualguildspane.cpp | 2 +- src/windows/profile/userinfopane.cpp | 2 +- 13 files changed, 140 insertions(+), 122 deletions(-) diff --git a/po/abaddon.pot b/po/abaddon.pot index b609879e..717d90ca 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-13 09:57-0300\n" +"POT-Creation-Date: 2024-06-16 20:01-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,115 +17,115 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/abaddon.cpp:215 -msgid "css failed parsing (" +#: src/abaddon.cpp:216 +msgid "css failed parsing ({})" msgstr "" -#: src/abaddon.cpp:231 +#: src/abaddon.cpp:232 msgid "The PNG pixbufloader wasn't detected. Abaddon may not work as a result." msgstr "" -#: src/abaddon.cpp:237 +#: src/abaddon.cpp:238 msgid "" "The GIF pixbufloader wasn't detected. Animations may not display as a result." msgstr "" -#: src/abaddon.cpp:252 +#: src/abaddon.cpp:253 msgid "The settings file could not be opened!" msgstr "" -#: src/abaddon.cpp:258 +#: src/abaddon.cpp:259 msgid "The emoji file couldn't be loaded!" msgstr "" -#: src/abaddon.cpp:264 +#: src/abaddon.cpp:265 msgid "The Discord cache could not be created!" msgstr "" -#: src/abaddon.cpp:272 +#: src/abaddon.cpp:273 msgid "The audio engine could not be initialized!" msgstr "" -#: src/abaddon.cpp:333 +#: src/abaddon.cpp:334 msgid "Quit" msgstr "" -#: src/abaddon.cpp:468 +#: src/abaddon.cpp:469 msgid "Discord rejected your token" msgstr "" -#: src/abaddon.cpp:473 -msgid "Lost connection with Discord's gateway. Try reconnecting (code " +#: src/abaddon.cpp:474 +msgid "Lost connection with Discord's gateway. Try reconnecting (code {})" msgstr "" -#: src/abaddon.cpp:483 src/abaddon.cpp:926 +#: src/abaddon.cpp:484 src/abaddon.cpp:927 msgid "This thread is archived. Sending a message will unarchive it" msgstr "" -#: src/abaddon.cpp:626 +#: src/abaddon.cpp:627 msgid "" "Cookies could not be fetched. This may increase your chances of being " "flagged by Discord's anti-spam" msgstr "" -#: src/abaddon.cpp:635 +#: src/abaddon.cpp:636 msgid "" "Build number could not be fetched. This may increase your chances of being " "flagged by Discord's anti-spam" msgstr "" -#: src/abaddon.cpp:652 +#: src/abaddon.cpp:653 msgid "Failed to accept the verification gate." msgstr "" -#: src/abaddon.cpp:677 +#: src/abaddon.cpp:678 msgid "Insert Mention" msgstr "" -#: src/abaddon.cpp:678 +#: src/abaddon.cpp:679 msgid "Ban" msgstr "" -#: src/abaddon.cpp:679 +#: src/abaddon.cpp:680 msgid "Kick" msgstr "" -#: src/abaddon.cpp:680 src/components/chatlist.cpp:298 +#: src/abaddon.cpp:681 src/components/chatlist.cpp:298 #: src/windows/guildsettings/banspane.cpp:14 #: src/windows/guildsettings/emojispane.cpp:19 msgid "Copy ID" msgstr "" -#: src/abaddon.cpp:681 +#: src/abaddon.cpp:682 msgid "Go to DM" msgstr "" -#: src/abaddon.cpp:682 src/windows/guildsettingswindow.cpp:66 +#: src/abaddon.cpp:683 src/windows/guildsettingswindow.cpp:66 msgid "Roles" msgstr "" -#: src/abaddon.cpp:683 +#: src/abaddon.cpp:684 msgid "View Profile" msgstr "" -#: src/abaddon.cpp:684 +#: src/abaddon.cpp:685 msgid "Remove From Group" msgstr "" -#: src/abaddon.cpp:1002 -msgid "Are you sure you want to leave " +#: src/abaddon.cpp:1003 +msgid "Are you sure you want to leave {}?" msgstr "" -#: src/abaddon.cpp:1012 -msgid "Are you sure you want to kick " +#: src/abaddon.cpp:1013 +msgid "Are you sure you want to kick {}?" msgstr "" -#: src/abaddon.cpp:1022 -msgid "Are you sure you want to ban " +#: src/abaddon.cpp:1023 +msgid "Are you sure you want to ban {}?" msgstr "" -#: src/abaddon.cpp:1119 -msgid "css failed to load (" +#: src/abaddon.cpp:1120 +msgid "css failed to load ({})" msgstr "" #: src/dialogs/confirm.cpp:6 @@ -658,7 +658,7 @@ msgstr "" msgid "Connect" msgstr "" -#: src/windows/mainwindow.cpp:260 +#: src/windows/mainwindow.cpp:260 src/windows/voicewindow.cpp:97 msgid "Disconnect" msgstr "" @@ -690,7 +690,7 @@ msgstr "" msgid "Dump ready message" msgstr "" -#: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:98 +#: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:99 msgid "View" msgstr "" @@ -722,19 +722,19 @@ msgstr "" msgid "Pinned Messages" msgstr "" -#: src/windows/profilewindow.cpp:79 +#: src/windows/profilewindow.cpp:80 msgid "User Info" msgstr "" -#: src/windows/profilewindow.cpp:80 +#: src/windows/profilewindow.cpp:81 msgid "Mutual Servers" msgstr "" -#: src/windows/profilewindow.cpp:81 +#: src/windows/profilewindow.cpp:82 msgid "Mutual Friends" msgstr "" -#: src/windows/profilewindow.cpp:112 +#: src/windows/profilewindow.cpp:113 msgid "Originally known as {}" msgstr "" @@ -804,7 +804,7 @@ msgstr "" msgid "Bitrate" msgstr "" -#: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:238 +#: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:243 msgid "Gain" msgstr "" @@ -820,42 +820,42 @@ msgstr "" msgid "Mix Mono" msgstr "" -#: src/windows/voicewindow.cpp:99 +#: src/windows/voicewindow.cpp:100 msgid "More _Settings" msgstr "" -#: src/windows/voicewindow.cpp:158 +#: src/windows/voicewindow.cpp:159 msgid "" "Voice Activation Detection method\n" "Gate - Simple volume threshold. Slider changes threshold\n" "RNNoise - Heavier on CPU. Slider changes probability threshold" msgstr "" -#: src/windows/voicewindow.cpp:161 +#: src/windows/voicewindow.cpp:162 msgid "Gate" msgstr "" -#: src/windows/voicewindow.cpp:163 +#: src/windows/voicewindow.cpp:164 msgid "RNNoise" msgstr "" -#: src/windows/voicewindow.cpp:237 +#: src/windows/voicewindow.cpp:242 msgid "Threshold" msgstr "" -#: src/windows/voicewindow.cpp:247 +#: src/windows/voicewindow.cpp:252 msgid "VAD Method" msgstr "" -#: src/windows/voicewindow.cpp:248 +#: src/windows/voicewindow.cpp:253 msgid "Output Device" msgstr "" -#: src/windows/voicewindow.cpp:249 +#: src/windows/voicewindow.cpp:254 msgid "Input Device" msgstr "" -#: src/windows/voicewindow.cpp:262 +#: src/windows/voicewindow.cpp:268 msgid "Input Settings" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index 69fe84a4..002d6ea8 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-13 09:57-0300\n" +"POT-Creation-Date: 2024-06-16 20:01-0300\n" "PO-Revision-Date: 2024-06-10 00:20-0300\n" "Last-Translator: Gabriel de Moura \n" "Language-Team: Brazilian Portuguese 1);\n" -#: src/abaddon.cpp:215 -msgid "css failed parsing (" -msgstr "CSS falhou" +#: src/abaddon.cpp:216 +msgid "css failed parsing ({})" +msgstr "" -#: src/abaddon.cpp:231 +#: src/abaddon.cpp:232 msgid "The PNG pixbufloader wasn't detected. Abaddon may not work as a result." msgstr "" "A biblioteca pixbufloader para arquivos PNG não foi detectado. Abaddon pode " "não funcionar como esperado." -#: src/abaddon.cpp:237 +#: src/abaddon.cpp:238 msgid "" "The GIF pixbufloader wasn't detected. Animations may not display as a result." msgstr "" "A biblioteca pixbufloader para arquivos GIF não foi detectado. Animações " "podem não funcionar corretamente." -#: src/abaddon.cpp:252 +#: src/abaddon.cpp:253 msgid "The settings file could not be opened!" msgstr "Não foi possível carregar o arquivo de configurações!" -#: src/abaddon.cpp:258 +#: src/abaddon.cpp:259 msgid "The emoji file couldn't be loaded!" msgstr "Não foi possível carregar o arquivo de emoji!" -#: src/abaddon.cpp:264 +#: src/abaddon.cpp:265 msgid "The Discord cache could not be created!" msgstr "Não foi possível criar cache para o Discord!" -#: src/abaddon.cpp:272 +#: src/abaddon.cpp:273 msgid "The audio engine could not be initialized!" msgstr "Não foi possível inicializar o motor de áudio!" -#: src/abaddon.cpp:333 +#: src/abaddon.cpp:334 msgid "Quit" msgstr "Sair" -#: src/abaddon.cpp:468 +#: src/abaddon.cpp:469 msgid "Discord rejected your token" msgstr "O Discord rejeitou o seu token de autenticação" -#: src/abaddon.cpp:473 -msgid "Lost connection with Discord's gateway. Try reconnecting (code " -msgstr "Conexão com o gateway do discord perdida. Tente reconectar (código" +#: src/abaddon.cpp:474 +msgid "Lost connection with Discord's gateway. Try reconnecting (code {})" +msgstr "" -#: src/abaddon.cpp:483 src/abaddon.cpp:926 +#: src/abaddon.cpp:484 src/abaddon.cpp:927 msgid "This thread is archived. Sending a message will unarchive it" msgstr "Esta thread está arquivada. Mandar uma mensagem vai desarquivá-la" -#: src/abaddon.cpp:626 +#: src/abaddon.cpp:627 msgid "" "Cookies could not be fetched. This may increase your chances of being " "flagged by Discord's anti-spam" @@ -76,7 +76,7 @@ msgstr "" "Não foi possível obter cookies. Isto pode aumentar as chances de ser pego " "pelo sistema anti-spam do Discord" -#: src/abaddon.cpp:635 +#: src/abaddon.cpp:636 msgid "" "Build number could not be fetched. This may increase your chances of being " "flagged by Discord's anti-spam" @@ -84,59 +84,59 @@ msgstr "" "Não foi possível obter o número de build. Isto pode aumentar as chances de " "ser pego pelo sistema anti-spam do Discord" -#: src/abaddon.cpp:652 +#: src/abaddon.cpp:653 msgid "Failed to accept the verification gate." msgstr "" -#: src/abaddon.cpp:677 +#: src/abaddon.cpp:678 msgid "Insert Mention" msgstr "Inserir Menção" -#: src/abaddon.cpp:678 +#: src/abaddon.cpp:679 msgid "Ban" msgstr "Banir" -#: src/abaddon.cpp:679 +#: src/abaddon.cpp:680 msgid "Kick" msgstr "Expulsar" -#: src/abaddon.cpp:680 src/components/chatlist.cpp:298 +#: src/abaddon.cpp:681 src/components/chatlist.cpp:298 #: src/windows/guildsettings/banspane.cpp:14 #: src/windows/guildsettings/emojispane.cpp:19 msgid "Copy ID" msgstr "Copiar ID" -#: src/abaddon.cpp:681 +#: src/abaddon.cpp:682 msgid "Go to DM" msgstr "Ir para DM" -#: src/abaddon.cpp:682 src/windows/guildsettingswindow.cpp:66 +#: src/abaddon.cpp:683 src/windows/guildsettingswindow.cpp:66 msgid "Roles" msgstr "Cargos" -#: src/abaddon.cpp:683 +#: src/abaddon.cpp:684 msgid "View Profile" msgstr "Ver Perfil" -#: src/abaddon.cpp:684 +#: src/abaddon.cpp:685 msgid "Remove From Group" msgstr "Remover do Grupo" -#: src/abaddon.cpp:1002 -msgid "Are you sure you want to leave " -msgstr "Você tem certeza de que quer sair " +#: src/abaddon.cpp:1003 +msgid "Are you sure you want to leave {}?" +msgstr "" -#: src/abaddon.cpp:1012 -msgid "Are you sure you want to kick " -msgstr "Você tem certeza de que quer expulsar " +#: src/abaddon.cpp:1013 +msgid "Are you sure you want to kick {}?" +msgstr "" -#: src/abaddon.cpp:1022 -msgid "Are you sure you want to ban " -msgstr "Você tem certeza de que quer banir " +#: src/abaddon.cpp:1023 +msgid "Are you sure you want to ban {}?" +msgstr "" -#: src/abaddon.cpp:1119 -msgid "css failed to load (" -msgstr "css falhou em carregar (" +#: src/abaddon.cpp:1120 +msgid "css failed to load ({})" +msgstr "" #: src/dialogs/confirm.cpp:6 msgid "Confirm" @@ -679,7 +679,7 @@ msgstr "Registros de Auditoria" msgid "Connect" msgstr "Conectar" -#: src/windows/mainwindow.cpp:260 +#: src/windows/mainwindow.cpp:260 src/windows/voicewindow.cpp:97 msgid "Disconnect" msgstr "Desconectar" @@ -711,7 +711,7 @@ msgstr "Limpar cache de arquivo" msgid "Dump ready message" msgstr "" -#: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:98 +#: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:99 msgid "View" msgstr "Ver" @@ -743,19 +743,19 @@ msgstr "" msgid "Pinned Messages" msgstr "Mensagens Fixadas" -#: src/windows/profilewindow.cpp:79 +#: src/windows/profilewindow.cpp:80 msgid "User Info" msgstr "Informações do Usuário" -#: src/windows/profilewindow.cpp:80 +#: src/windows/profilewindow.cpp:81 msgid "Mutual Servers" msgstr "Servidores Mútuos" -#: src/windows/profilewindow.cpp:81 +#: src/windows/profilewindow.cpp:82 msgid "Mutual Friends" msgstr "Amigos Mútuos" -#: src/windows/profilewindow.cpp:112 +#: src/windows/profilewindow.cpp:113 msgid "Originally known as {}" msgstr "Originalmente conhecido como {}" @@ -829,7 +829,7 @@ msgstr "" msgid "Bitrate" msgstr "Taxa de bits" -#: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:238 +#: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:243 msgid "Gain" msgstr "" @@ -845,42 +845,42 @@ msgstr "Suprimir Ruído" msgid "Mix Mono" msgstr "" -#: src/windows/voicewindow.cpp:99 +#: src/windows/voicewindow.cpp:100 msgid "More _Settings" msgstr "Mais _Configurações" -#: src/windows/voicewindow.cpp:158 +#: src/windows/voicewindow.cpp:159 msgid "" "Voice Activation Detection method\n" "Gate - Simple volume threshold. Slider changes threshold\n" "RNNoise - Heavier on CPU. Slider changes probability threshold" msgstr "" -#: src/windows/voicewindow.cpp:161 +#: src/windows/voicewindow.cpp:162 msgid "Gate" msgstr "" -#: src/windows/voicewindow.cpp:163 +#: src/windows/voicewindow.cpp:164 msgid "RNNoise" msgstr "" -#: src/windows/voicewindow.cpp:237 +#: src/windows/voicewindow.cpp:242 msgid "Threshold" msgstr "" -#: src/windows/voicewindow.cpp:247 +#: src/windows/voicewindow.cpp:252 msgid "VAD Method" msgstr "" -#: src/windows/voicewindow.cpp:248 +#: src/windows/voicewindow.cpp:253 msgid "Output Device" msgstr "Dispositivo de Saída" -#: src/windows/voicewindow.cpp:249 +#: src/windows/voicewindow.cpp:254 msgid "Input Device" msgstr "Dispositivo de Entrada" -#: src/windows/voicewindow.cpp:262 +#: src/windows/voicewindow.cpp:268 msgid "Input Settings" msgstr "Configurações de Entrada" @@ -1500,3 +1500,21 @@ msgstr "" #: src/windows/guildsettings/rolespane.cpp:412 msgid "Failed to set role name" msgstr "" + +#~ msgid "css failed parsing (" +#~ msgstr "CSS falhou" + +#~ msgid "Lost connection with Discord's gateway. Try reconnecting (code " +#~ msgstr "Conexão com o gateway do discord perdida. Tente reconectar (código" + +#~ msgid "Are you sure you want to leave " +#~ msgstr "Você tem certeza de que quer sair " + +#~ msgid "Are you sure you want to kick " +#~ msgstr "Você tem certeza de que quer expulsar " + +#~ msgid "Are you sure you want to ban " +#~ msgstr "Você tem certeza de que quer banir " + +#~ msgid "css failed to load (" +#~ msgstr "css falhou em carregar (" diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 845a835f..8ee00a32 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -5,7 +5,9 @@ #include #include #include +#include #include +#include #include "platform.hpp" #include "audio/manager.hpp" #include "discord/discord.hpp" @@ -24,7 +26,6 @@ #include "notifications/notifications.hpp" #include "remoteauth/remoteauthdialog.hpp" #include "util.hpp" -#include #if defined(__APPLE__) #include @@ -212,7 +213,7 @@ int Abaddon::StartGTK() { m_css_provider = Gtk::CssProvider::create(); m_css_provider->signal_parsing_error().connect([](const Glib::RefPtr §ion, const Glib::Error &error) { - Gtk::MessageDialog dlg(_("css failed parsing (") + error.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(fmt::format(_("css failed parsing ({})"), error.what().c_str()), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); }); @@ -470,7 +471,7 @@ void Abaddon::DiscordOnDisconnect(bool is_reconnecting, GatewayCloseCode close_c dlg.run(); } else if (close_code != GatewayCloseCode::Normal) { Gtk::MessageDialog dlg(*m_main_window, - _("Lost connection with Discord's gateway. Try reconnecting (code ") + std::to_string(static_cast(close_code)) + ")", + fmt::format(_("Lost connection with Discord's gateway. Try reconnecting (code {})"), static_cast(close_code)), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); @@ -999,7 +1000,7 @@ void Abaddon::ActionLeaveGuild(Snowflake id) { ConfirmDialog dlg(*m_main_window); const auto guild = m_discord.GetGuild(id); if (guild.has_value()) - dlg.SetConfirmText(_("Are you sure you want to leave ") + guild->Name + "?"); + dlg.SetConfirmText(fmt::format(_("Are you sure you want to leave {}?"), guild->Name.c_str())); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.LeaveGuild(id); @@ -1009,7 +1010,7 @@ void Abaddon::ActionKickMember(Snowflake user_id, Snowflake guild_id) { ConfirmDialog dlg(*m_main_window); const auto user = m_discord.GetUser(user_id); if (user.has_value()) - dlg.SetConfirmText(_("Are you sure you want to kick ") + user->GetUsername() + "?"); + dlg.SetConfirmText(fmt::format(_("Are you sure you want to kick {}?"), user->GetUsername().c_str())); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.KickUser(user_id, guild_id); @@ -1019,7 +1020,7 @@ void Abaddon::ActionBanMember(Snowflake user_id, Snowflake guild_id) { ConfirmDialog dlg(*m_main_window); const auto user = m_discord.GetUser(user_id); if (user.has_value()) - dlg.SetConfirmText(_("Are you sure you want to ban ") + user->GetUsername() + "?"); + dlg.SetConfirmText(fmt::format(_("Are you sure you want to ban {}?"), user->GetUsername().c_str())); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.BanUser(user_id, guild_id); @@ -1116,7 +1117,7 @@ void Abaddon::ActionReloadCSS() { m_css_provider->load_from_path(GetCSSPath("/" + GetSettings().MainCSS)); Gtk::StyleContext::add_provider_for_screen(Gdk::Screen::get_default(), m_css_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } catch (Glib::Error &e) { - Gtk::MessageDialog dlg(*m_main_window, _("css failed to load (") + e.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, fmt::format(_("css failed to load ({})"), e.what().c_str()), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp index be93f8c1..92dc32d0 100644 --- a/src/components/chatmessage.cpp +++ b/src/components/chatmessage.cpp @@ -1,8 +1,7 @@ -#include #include "chatmessage.hpp" #include +#include #include -#include #include #include "abaddon.hpp" #include "constants.hpp" diff --git a/src/components/chatwindow.cpp b/src/components/chatwindow.cpp index b1258e3e..89e5ab72 100644 --- a/src/components/chatwindow.cpp +++ b/src/components/chatwindow.cpp @@ -1,6 +1,6 @@ #include "chatwindow.hpp" -#include +#include #include #include "abaddon.hpp" diff --git a/src/components/ratelimitindicator.cpp b/src/components/ratelimitindicator.cpp index a26f6443..82d93b5e 100644 --- a/src/components/ratelimitindicator.cpp +++ b/src/components/ratelimitindicator.cpp @@ -2,7 +2,7 @@ #include -#include +#include #include #include "abaddon.hpp" diff --git a/src/dialogs/setstatus.cpp b/src/dialogs/setstatus.cpp index 9aa16cfd..8fcff51d 100644 --- a/src/dialogs/setstatus.cpp +++ b/src/dialogs/setstatus.cpp @@ -1,6 +1,6 @@ #include "setstatus.hpp" -#include +#include #include #include "abaddon.hpp" diff --git a/src/windows/guildsettings/auditlogpane.cpp b/src/windows/guildsettings/auditlogpane.cpp index 20120a48..88e1a852 100644 --- a/src/windows/guildsettings/auditlogpane.cpp +++ b/src/windows/guildsettings/auditlogpane.cpp @@ -1,7 +1,7 @@ #include "auditlogpane.hpp" +#include #include -#include #include #include "abaddon.hpp" diff --git a/src/windows/guildsettings/banspane.cpp b/src/windows/guildsettings/banspane.cpp index 3eff7ca6..a926d7a5 100644 --- a/src/windows/guildsettings/banspane.cpp +++ b/src/windows/guildsettings/banspane.cpp @@ -1,7 +1,7 @@ #include "banspane.hpp" #include -#include +#include #include #include "abaddon.hpp" diff --git a/src/windows/guildsettings/emojispane.cpp b/src/windows/guildsettings/emojispane.cpp index 5fe2b8bc..ce33b7ec 100644 --- a/src/windows/guildsettings/emojispane.cpp +++ b/src/windows/guildsettings/emojispane.cpp @@ -1,7 +1,7 @@ #include "emojispane.hpp" #include -#include +#include #include #include diff --git a/src/windows/pinnedwindow.cpp b/src/windows/pinnedwindow.cpp index 5ebf2901..db932e81 100644 --- a/src/windows/pinnedwindow.cpp +++ b/src/windows/pinnedwindow.cpp @@ -1,7 +1,7 @@ #include "pinnedwindow.hpp" +#include #include -#include #include "abaddon.hpp" diff --git a/src/windows/profile/mutualguildspane.cpp b/src/windows/profile/mutualguildspane.cpp index 25face9c..47511c1f 100644 --- a/src/windows/profile/mutualguildspane.cpp +++ b/src/windows/profile/mutualguildspane.cpp @@ -1,7 +1,7 @@ #include "mutualguildspane.hpp" #include -#include +#include #include "abaddon.hpp" diff --git a/src/windows/profile/userinfopane.cpp b/src/windows/profile/userinfopane.cpp index cc3ee7cc..0b3b46c8 100644 --- a/src/windows/profile/userinfopane.cpp +++ b/src/windows/profile/userinfopane.cpp @@ -2,8 +2,8 @@ #include +#include #include -#include #include #include "abaddon.hpp" From 7eb61b3f55717e2756f9f46ad3f9e8122ae9826c Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 17 Jun 2024 01:58:09 -0300 Subject: [PATCH 13/37] Fix build error and rendering issues on Windows --- CMakeLists.txt | 8 ++++++-- src/abaddon.cpp | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 92df6970..03c9ac50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,9 +122,13 @@ target_link_libraries(abaddon ${GTKMM_LIBRARIES}) target_link_libraries(abaddon ${ZLIB_LIBRARY}) target_link_libraries(abaddon ${NLOHMANN_JSON_LIBRARIES}) target_link_libraries(abaddon ${CMAKE_DL_LIBS}) -target_link_libraries(abaddon ${INTL_LIBRARIES}) -target_link_libraries(abaddon CURL::libcurl) +# Sincerely, there ought be a better solution +if (MINGW) + target_link_libraries(abaddon intl) +else() + target_link_libraries(abaddon ${INTL_LIBRARIES}) +endif() target_link_libraries(abaddon CURL::libcurl) diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 8ee00a32..cf054a34 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -1188,6 +1188,10 @@ int main(int argc, char **argv) { auto log_ra = spdlog::stdout_color_mt("remote-auth"); bindtextdomain("abaddon", Platform::FindLocaleFolder().c_str()); + + // Necessary for correct utf-8 text rendering + bind_textdomain_codeset("abaddon", "utf-8"); + textdomain("abaddon"); Gtk::Main::init_gtkmm_internals(); // why??? From c36df5e3a43b47b3f523cf5e5a7eb0c238146631 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 17 Jun 2024 10:01:52 -0300 Subject: [PATCH 14/37] More enhancements to i18n support * Mark startup.cpp strings for translation * Refactor chatinputindicator.cpp i18n * Update POTFILES * Update abaddon.pot --- po/POTFILES | 1 + po/abaddon.pot | 77 +++++++++++++-------------- src/components/chatinputindicator.cpp | 17 +++--- src/startup.cpp | 4 +- 4 files changed, 53 insertions(+), 46 deletions(-) diff --git a/po/POTFILES b/po/POTFILES index 50ca8b24..e453e733 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -1,4 +1,5 @@ src/abaddon.cpp +src/startup.cpp src/dialogs/confirm.cpp src/dialogs/friendpicker.cpp src/dialogs/setstatus.cpp diff --git a/po/abaddon.pot b/po/abaddon.pot index 717d90ca..82b0c1dd 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-16 20:01-0300\n" +"POT-Creation-Date: 2024-06-17 09:59-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -128,6 +128,10 @@ msgstr "" msgid "css failed to load ({})" msgstr "" +#: src/startup.cpp:14 +msgid "Getting connection info..." +msgstr "" + #: src/dialogs/confirm.cpp:6 msgid "Confirm" msgstr "" @@ -247,24 +251,19 @@ msgstr "" msgid "Enter alt-text" msgstr "" -#: src/components/chatinputindicator.cpp:118 -msgid " is typing..." +#: src/components/chatinputindicator.cpp:119 +msgid "{} is typing..." msgstr "" -#: src/components/chatinputindicator.cpp:120 -msgid " and " -msgstr "" - -#: src/components/chatinputindicator.cpp:120 -#: src/components/chatinputindicator.cpp:125 -msgid " are typing..." +#: src/components/chatinputindicator.cpp:121 +msgid "{} and {} are typing" msgstr "" #: src/components/chatinputindicator.cpp:125 -msgid "and " +msgid "{}, {}, {} and {} are typing..." msgstr "" -#: src/components/chatinputindicator.cpp:127 +#: src/components/chatinputindicator.cpp:132 msgid "Several people are typing..." msgstr "" @@ -292,130 +291,130 @@ msgstr "" msgid "Pin" msgstr "" -#: src/components/chatmessage.cpp:17 +#: src/components/chatmessage.cpp:16 msgid "Copy Link" msgstr "" -#: src/components/chatmessage.cpp:148 +#: src/components/chatmessage.cpp:147 msgid "deleted" msgstr "" -#: src/components/chatmessage.cpp:150 +#: src/components/chatmessage.cpp:149 msgid "edited" msgstr "" -#: src/components/chatmessage.cpp:204 +#: src/components/chatmessage.cpp:203 msgid "boosted server" msgstr "" -#: src/components/chatmessage.cpp:207 +#: src/components/chatmessage.cpp:206 msgid "user joined" msgstr "" -#: src/components/chatmessage.cpp:210 +#: src/components/chatmessage.cpp:209 msgid "message pinned" msgstr "" -#: src/components/chatmessage.cpp:220 +#: src/components/chatmessage.cpp:219 msgid "used {} with {}" msgstr "" -#: src/components/chatmessage.cpp:235 +#: src/components/chatmessage.cpp:234 msgid "" "{} added {}" msgstr "" -#: src/components/chatmessage.cpp:245 +#: src/components/chatmessage.cpp:244 msgid "" "{} left" msgstr "" -#: src/components/chatmessage.cpp:247 +#: src/components/chatmessage.cpp:246 msgid "" "{} removed {}" msgstr "" -#: src/components/chatmessage.cpp:254 +#: src/components/chatmessage.cpp:253 msgid "{} changed the name to {}" msgstr "" -#: src/components/chatmessage.cpp:259 +#: src/components/chatmessage.cpp:258 msgid "{} changed the channel icon" msgstr "" -#: src/components/chatmessage.cpp:267 +#: src/components/chatmessage.cpp:266 msgid "" "{} just boosted the server {} times! {} has " "achieved Level {}}!" msgstr "" -#: src/components/chatmessage.cpp:277 +#: src/components/chatmessage.cpp:276 msgid "" "{} has added {} to this channel. Its most " "important updates will show up here." msgstr "" -#: src/components/chatmessage.cpp:283 +#: src/components/chatmessage.cpp:282 msgid "started a call" msgstr "" -#: src/components/chatmessage.cpp:286 +#: src/components/chatmessage.cpp:285 msgid "" "This server has been removed from Server Discovery because it no longer " "passes all the requirements." msgstr "" -#: src/components/chatmessage.cpp:289 +#: src/components/chatmessage.cpp:288 msgid "" "This server is eligible for Server Discovery again and has been " "automatically relisted!" msgstr "" -#: src/components/chatmessage.cpp:292 +#: src/components/chatmessage.cpp:291 msgid "" "This server has failed Discovery activity requirements for 1 week. If this " "server fails for 4 weeks in a row, it will be automatically removed from " "Discovery." msgstr "" -#: src/components/chatmessage.cpp:295 +#: src/components/chatmessage.cpp:294 msgid "" "This server has failed Discovery activity requirements for 3 weeks in a row. " "If this server fails for 1 more week, it will be removed from Discovery." msgstr "" -#: src/components/chatmessage.cpp:301 +#: src/components/chatmessage.cpp:300 msgid "{} started a thread: " msgstr "" -#: src/components/chatmessage.cpp:308 +#: src/components/chatmessage.cpp:307 msgid "{} started a thread: {}" msgstr "" -#: src/components/chatmessage.cpp:715 src/components/chatmessage.cpp:738 +#: src/components/chatmessage.cpp:714 src/components/chatmessage.cpp:737 #: src/windows/voicewindow.cpp:49 src/windows/guildsettings/auditlogpane.cpp:45 msgid "Unknown User" msgstr "" -#: src/components/chatmessage.cpp:731 +#: src/components/chatmessage.cpp:730 msgid "{} used /{}" msgstr "" -#: src/components/chatmessage.cpp:742 +#: src/components/chatmessage.cpp:741 msgid "deleted message" msgstr "" -#: src/components/chatmessage.cpp:748 +#: src/components/chatmessage.cpp:747 msgid "attachment" msgstr "" -#: src/components/chatmessage.cpp:750 +#: src/components/chatmessage.cpp:749 msgid "embed" msgstr "" -#: src/components/chatmessage.cpp:770 +#: src/components/chatmessage.cpp:769 msgid "reply unavailable" msgstr "" diff --git a/src/components/chatinputindicator.cpp b/src/components/chatinputindicator.cpp index 1e49c547..69c16cdb 100644 --- a/src/components/chatinputindicator.cpp +++ b/src/components/chatinputindicator.cpp @@ -1,5 +1,6 @@ #include "chatinputindicator.hpp" #include +#include #include #include #include "abaddon.hpp" @@ -115,14 +116,18 @@ void ChatInputIndicator::ComputeTypingString() { if (typers.empty()) { SetTypingString(""); } else if (typers.size() == 1) { - SetTypingString(typers[0].GetDisplayName(m_active_guild) + _(" is typing...")); + SetTypingString(fmt::format(_("{} is typing..."), typers[0].GetDisplayName(m_active_guild).c_str())); } else if (typers.size() == 2) { - SetTypingString(typers[0].GetDisplayName(m_active_guild) + _(" and ") + typers[1].GetDisplayName(m_active_guild) + _(" are typing...")); + SetTypingString(fmt::format(_("{} and {} are typing"), + typers[0].GetDisplayName(m_active_guild).c_str(), + typers[1].GetDisplayName(m_active_guild).c_str())); } else if (typers.size() > 2 && typers.size() <= MaxUsersInIndicator) { - Glib::ustring str; - for (size_t i = 0; i < typers.size() - 1; i++) - str += typers[i].GetDisplayName(m_active_guild) + ", "; - SetTypingString(str + _("and ") + typers[typers.size() - 1].GetDisplayName(m_active_guild) + _(" are typing...")); + Glib::ustring str = fmt::format(_("{}, {}, {} and {} are typing..."), + typers[0].GetDisplayName(m_active_guild).c_str(), + typers[1].GetDisplayName(m_active_guild).c_str(), + typers[2].GetDisplayName(m_active_guild).c_str(), + typers[3].GetDisplayName(m_active_guild).c_str()); + SetTypingString(str); } else { // size() > MaxUsersInIndicator SetTypingString(_("Several people are typing...")); } diff --git a/src/startup.cpp b/src/startup.cpp index f2ed5cec..f1ac23ae 100644 --- a/src/startup.cpp +++ b/src/startup.cpp @@ -1,5 +1,7 @@ #include "startup.hpp" +#include + #include #include @@ -9,7 +11,7 @@ DiscordStartupDialog::DiscordStartupDialog(Gtk::Window &window) : Gtk::MessageDialog(window, "", false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_NONE, true) { m_dispatcher.connect(sigc::mem_fun(*this, &DiscordStartupDialog::DispatchCallback)); - property_text() = "Getting connection info..."; + property_text() = _("Getting connection info..."); RunAsync(); } From 3fdc5238be0b611e3c7c09bee94173f7bdc22c3c Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 17 Jun 2024 11:34:39 -0300 Subject: [PATCH 15/37] Fix formatting typos --- po/abaddon.pot | 28 +++++++++++----------- src/components/chatmessage.cpp | 2 +- src/windows/guildsettings/auditlogpane.cpp | 10 ++++---- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/po/abaddon.pot b/po/abaddon.pot index 82b0c1dd..d6b2171b 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-17 09:59-0300\n" +"POT-Creation-Date: 2024-06-17 11:30-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -347,7 +347,7 @@ msgstr "" #: src/components/chatmessage.cpp:266 msgid "" "{} just boosted the server {} times! {} has " -"achieved Level {}}!" +"achieved Level {}!" msgstr "" #: src/components/chatmessage.cpp:276 @@ -928,7 +928,7 @@ msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:114 #: src/windows/guildsettings/auditlogpane.cpp:356 -#: src/windows/guildsettings/auditlogpane.cpp:468 +#: src/windows/guildsettings/auditlogpane.cpp:470 msgid "Changed the name from {} to {}" msgstr "" @@ -948,13 +948,13 @@ msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:136 #: src/windows/guildsettings/auditlogpane.cpp:452 -#: src/windows/guildsettings/auditlogpane.cpp:476 +#: src/windows/guildsettings/auditlogpane.cpp:478 msgid "Disabled slowmode" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:138 #: src/windows/guildsettings/auditlogpane.cpp:454 -#: src/windows/guildsettings/auditlogpane.cpp:478 +#: src/windows/guildsettings/auditlogpane.cpp:480 msgid "Set slowmode to {} seconds" msgstr "" @@ -1213,43 +1213,43 @@ msgid "{} created a thread {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:446 -#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:484 msgid "Archived the thread" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:446 -#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:484 msgid "Unarchived the thread" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:448 -#: src/windows/guildsettings/auditlogpane.cpp:472 +#: src/windows/guildsettings/auditlogpane.cpp:474 msgid "Set auto archive duration to {} minutes" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:456 -#: src/windows/guildsettings/auditlogpane.cpp:480 +#: src/windows/guildsettings/auditlogpane.cpp:482 msgid "Locked the thread, restricting it to only be unarchived by moderators" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:456 -#: src/windows/guildsettings/auditlogpane.cpp:480 +#: src/windows/guildsettings/auditlogpane.cpp:482 msgid "Unlocked the thread, allowing it to be unarchived by non-moderators" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:462 -msgid "{} made changes to the thread " +msgid "{} made changes to the thread {}" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:486 +#: src/windows/guildsettings/auditlogpane.cpp:488 msgid "{} deleted the thread {}" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:490 +#: src/windows/guildsettings/auditlogpane.cpp:492 msgid "Unknown action" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:498 +#: src/windows/guildsettings/auditlogpane.cpp:500 msgid "Reason: {}" msgstr "" diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp index 92dc32d0..b7a51abf 100644 --- a/src/components/chatmessage.cpp +++ b/src/components/chatmessage.cpp @@ -263,7 +263,7 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); const auto guild = Abaddon::Get().GetDiscordClient().GetGuild(*data->GuildID); - std::string user_premium_guild_subscription_text = fmt::format(_("{} just boosted the server {} times! {} has achieved Level {}}!"), + std::string user_premium_guild_subscription_text = fmt::format(_("{} just boosted the server {} times! {} has achieved Level {}!"), author->GetDisplayNameEscapedBold().c_str(), Glib::Markup::escape_text(data->Content).c_str(), Glib::Markup::escape_text(guild->Name).c_str(), diff --git a/src/windows/guildsettings/auditlogpane.cpp b/src/windows/guildsettings/auditlogpane.cpp index 88e1a852..1a17deab 100644 --- a/src/windows/guildsettings/auditlogpane.cpp +++ b/src/windows/guildsettings/auditlogpane.cpp @@ -459,10 +459,12 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } break; case AuditLogActionType::THREAD_UPDATE: { const auto channel = discord.GetChannel(entry.TargetID); - markup = fmt::format(_("{} made changes to the thread "), (channel.has_value() - ? Glib::Markup::escape_text(*channel->Name) - : Glib::ustring(entry.TargetID)) - .c_str()); + markup = fmt::format(_("{} made changes to the thread {}"), + user_markup.c_str(), + (channel.has_value() + ? Glib::Markup::escape_text(*channel->Name) + : Glib::ustring(entry.TargetID)) + .c_str()); for (const auto &change : *entry.Changes) { if (change.Key == "name") extra_markup.push_back(fmt::format(_("Changed the name from {} to {}"), From b28d0868c07af4e13b1c0b74a69871b18e1b1c2b Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 17 Jun 2024 11:46:34 -0300 Subject: [PATCH 16/37] Add Brazilian Portuguese Translation --- po/pt_BR.po | 441 +++++++++++++++++++++++++++++----------------------- 1 file changed, 243 insertions(+), 198 deletions(-) diff --git a/po/pt_BR.po b/po/pt_BR.po index 002d6ea8..251b6866 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-16 20:01-0300\n" -"PO-Revision-Date: 2024-06-10 00:20-0300\n" +"POT-Creation-Date: 2024-06-17 11:30-0300\n" +"PO-Revision-Date: 2024-06-17 11:45-0300\n" "Last-Translator: Gabriel de Moura \n" "Language-Team: Brazilian Portuguese \n" @@ -21,7 +21,7 @@ msgstr "" #: src/abaddon.cpp:216 msgid "css failed parsing ({})" -msgstr "" +msgstr "CSS falhou em ser lido ({})" #: src/abaddon.cpp:232 msgid "The PNG pixbufloader wasn't detected. Abaddon may not work as a result." @@ -62,7 +62,7 @@ msgstr "O Discord rejeitou o seu token de autenticação" #: src/abaddon.cpp:474 msgid "Lost connection with Discord's gateway. Try reconnecting (code {})" -msgstr "" +msgstr "Conexão com o gateway do Discord perdida. Tente novamente (code {})" #: src/abaddon.cpp:484 src/abaddon.cpp:927 msgid "This thread is archived. Sending a message will unarchive it" @@ -86,7 +86,7 @@ msgstr "" #: src/abaddon.cpp:653 msgid "Failed to accept the verification gate." -msgstr "" +msgstr "Falha ao aceitar a porta de verificação." #: src/abaddon.cpp:678 msgid "Insert Mention" @@ -124,19 +124,23 @@ msgstr "Remover do Grupo" #: src/abaddon.cpp:1003 msgid "Are you sure you want to leave {}?" -msgstr "" +msgstr "Você tem certeza de que quer sair {}?" #: src/abaddon.cpp:1013 msgid "Are you sure you want to kick {}?" -msgstr "" +msgstr "Você tem certeza de que quer expulsar {}?" #: src/abaddon.cpp:1023 msgid "Are you sure you want to ban {}?" -msgstr "" +msgstr "Você tem certeza de que quer banir {}?" #: src/abaddon.cpp:1120 msgid "css failed to load ({})" -msgstr "" +msgstr "CSS falhou em ser carregado ({})" + +#: src/startup.cpp:14 +msgid "Getting connection info..." +msgstr "Obtendo informações sobre a conexão..." #: src/dialogs/confirm.cpp:6 msgid "Confirm" @@ -257,24 +261,19 @@ msgstr "Inserir descrição para o anexo" msgid "Enter alt-text" msgstr "Inserir texto alternativo" -#: src/components/chatinputindicator.cpp:118 -msgid " is typing..." -msgstr " está digitando..." +#: src/components/chatinputindicator.cpp:119 +msgid "{} is typing..." +msgstr "{} está digitando..." -#: src/components/chatinputindicator.cpp:120 -msgid " and " -msgstr " e " - -#: src/components/chatinputindicator.cpp:120 -#: src/components/chatinputindicator.cpp:125 -msgid " are typing..." -msgstr " estã digitando..." +#: src/components/chatinputindicator.cpp:121 +msgid "{} and {} are typing" +msgstr "{} e {} estão digitando" #: src/components/chatinputindicator.cpp:125 -msgid "and " -msgstr "e " +msgid "{}, {}, {} and {} are typing..." +msgstr "{}, {}, {} e {} estão digitando" -#: src/components/chatinputindicator.cpp:127 +#: src/components/chatinputindicator.cpp:132 msgid "Several people are typing..." msgstr "Várias pessoas estão digitando..." @@ -302,35 +301,35 @@ msgstr "Desafixar" msgid "Pin" msgstr "Fixar" -#: src/components/chatmessage.cpp:17 +#: src/components/chatmessage.cpp:16 msgid "Copy Link" msgstr "Copiar Link" -#: src/components/chatmessage.cpp:148 +#: src/components/chatmessage.cpp:147 msgid "deleted" msgstr "deletado" -#: src/components/chatmessage.cpp:150 +#: src/components/chatmessage.cpp:149 msgid "edited" msgstr "editado" -#: src/components/chatmessage.cpp:204 +#: src/components/chatmessage.cpp:203 msgid "boosted server" msgstr "impulsionou servidor" -#: src/components/chatmessage.cpp:207 +#: src/components/chatmessage.cpp:206 msgid "user joined" msgstr "usuário entrou" -#: src/components/chatmessage.cpp:210 +#: src/components/chatmessage.cpp:209 msgid "message pinned" msgstr "mensagem fixada" -#: src/components/chatmessage.cpp:220 +#: src/components/chatmessage.cpp:219 msgid "used {} with {}" msgstr "usou {} com {}" -#: src/components/chatmessage.cpp:235 +#: src/components/chatmessage.cpp:234 msgid "" "{} added {}" @@ -338,13 +337,13 @@ msgstr "" "{} adicionou {}" -#: src/components/chatmessage.cpp:245 +#: src/components/chatmessage.cpp:244 msgid "" "{} left" msgstr "" "{} saiu" -#: src/components/chatmessage.cpp:247 +#: src/components/chatmessage.cpp:246 msgid "" "{} removed {}" @@ -352,95 +351,104 @@ msgstr "" "{} removeu {}" -#: src/components/chatmessage.cpp:254 +#: src/components/chatmessage.cpp:253 msgid "{} changed the name to {}" msgstr "{} alterou o nome para {}" -#: src/components/chatmessage.cpp:259 +#: src/components/chatmessage.cpp:258 msgid "{} changed the channel icon" msgstr "{} alterou o ícone do canal" -#: src/components/chatmessage.cpp:267 +#: src/components/chatmessage.cpp:266 msgid "" "{} just boosted the server {} times! {} has " -"achieved Level {}}!" -msgstr "" -"{} acabou de impulsionar o servidor {} " -"vezes! {} atingiu nível {}}!" +"achieved Level {}!" +msgstr "{} acabou de impulsionar o servidor {} vezes! {} atingiu " +"Nível {}!" -#: src/components/chatmessage.cpp:277 +#: src/components/chatmessage.cpp:276 msgid "" "{} has added {} to this channel. Its most " "important updates will show up here." msgstr "" -"{} adicionou {} a este canal. As " -"atualizações mais importantes aparecerão aqui" +"{} acabou de impulsionar o servidor {} " +"vezes! {} atingiu nível {}}!" -#: src/components/chatmessage.cpp:283 +#: src/components/chatmessage.cpp:282 msgid "started a call" msgstr "iniciou uma chamada" -#: src/components/chatmessage.cpp:286 +#: src/components/chatmessage.cpp:285 msgid "" "This server has been removed from Server Discovery because it no longer " "passes all the requirements." msgstr "" +"Este servidor foi removido \"Server Discovery\" porque ele nãoatende mais a " +"todos os requisitos" -#: src/components/chatmessage.cpp:289 +#: src/components/chatmessage.cpp:288 msgid "" "This server is eligible for Server Discovery again and has been " "automatically relisted!" msgstr "" +"Este servidor é elegível para o \"Server Discovery\" novamente e " +"foi automaticamente recadastrado" -#: src/components/chatmessage.cpp:292 +#: src/components/chatmessage.cpp:291 msgid "" "This server has failed Discovery activity requirements for 1 week. If this " "server fails for 4 weeks in a row, it will be automatically removed from " "Discovery." msgstr "" +"Este servidor falhou em cumprir os requisitos do \"Discovery\" por 1 semana. " +"Se o servidor falhar por 4 semanas consecutivas, ele será automaticamente " +"removido do \"Server Discovery\"" -#: src/components/chatmessage.cpp:295 +#: src/components/chatmessage.cpp:294 msgid "" "This server has failed Discovery activity requirements for 3 weeks in a row. " "If this server fails for 1 more week, it will be removed from Discovery." msgstr "" +"Este servidor falhou em cumprir os requisitos do \"Discovery\" por 3 semanas " +"consecutivas. Se o servidor falhar por mais 1 semana, ele será " +"automaticamente removido do \"Server Discovery\"" -#: src/components/chatmessage.cpp:301 +#: src/components/chatmessage.cpp:300 msgid "{} started a thread: " msgstr "{} iniciou uma thread: " -#: src/components/chatmessage.cpp:308 +#: src/components/chatmessage.cpp:307 msgid "{} started a thread: {}" msgstr "{} iniciou uma thread: {}" -#: src/components/chatmessage.cpp:715 src/components/chatmessage.cpp:738 +#: src/components/chatmessage.cpp:714 src/components/chatmessage.cpp:737 #: src/windows/voicewindow.cpp:49 src/windows/guildsettings/auditlogpane.cpp:45 msgid "Unknown User" msgstr "Usuário Desconhecido" -#: src/components/chatmessage.cpp:731 +#: src/components/chatmessage.cpp:730 msgid "{} used /{}" msgstr "{} usou /{}" -#: src/components/chatmessage.cpp:742 +#: src/components/chatmessage.cpp:741 msgid "deleted message" msgstr "mensagem apagada" -#: src/components/chatmessage.cpp:748 +#: src/components/chatmessage.cpp:747 msgid "attachment" msgstr "anexo" -#: src/components/chatmessage.cpp:750 +#: src/components/chatmessage.cpp:749 msgid "embed" msgstr "embutido" -#: src/components/chatmessage.cpp:770 +#: src/components/chatmessage.cpp:769 msgid "reply unavailable" msgstr "resposta indisponível" #: src/components/chatwindow.cpp:334 msgid "Replying to {}" -msgstr "Respondendo a {}" +msgstr "Respondendo {}" #: src/components/chatwindow.cpp:336 msgid "Replying..." @@ -500,7 +508,7 @@ msgstr "Insira um NomeDeUsuário#1234" #: src/components/friendslist.cpp:220 msgid "Invalid input" -msgstr "Entrad inválida" +msgstr "Entrada inválida" #: src/components/friendslist.cpp:230 msgid "Hang on..." @@ -709,7 +717,7 @@ msgstr "Limpar cache de arquivo" #: src/windows/mainwindow.cpp:283 msgid "Dump ready message" -msgstr "" +msgstr "Descarregar mensagem de pronto" #: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:99 msgid "View" @@ -737,7 +745,7 @@ msgstr "Voltar" #: src/windows/mainwindow.cpp:303 msgid "Go Forward" -msgstr "" +msgstr "Avançar" #: src/windows/pinnedwindow.cpp:18 msgid "Pinned Messages" @@ -816,6 +824,10 @@ msgid "" "Voice - Tell Opus it's a voice signal\n" "Music - Tell Opus it's a music signal" msgstr "" +"Tipo de sinal. Informa Opus sobre o tipo de sinal\n" +"Automático - Opus descobre automaticamente\n" +"Voz - Indica a Opus que é um sinal de voz\n" +"Música - Indica a Opus que é um sinal de música" #: src/windows/voicesettingswindow.cpp:130 msgid "Coding Mode" @@ -823,7 +835,7 @@ msgstr "Modo de Codificação" #: src/windows/voicesettingswindow.cpp:131 msgid "Signal Hint" -msgstr "" +msgstr "Tipo de Sinal" #: src/windows/voicesettingswindow.cpp:132 msgid "Bitrate" @@ -831,11 +843,11 @@ msgstr "Taxa de bits" #: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:243 msgid "Gain" -msgstr "" +msgstr "Ganho" #: src/windows/voicewindow.cpp:94 msgid "Deafen" -msgstr "" +msgstr "Ensurdecer" #: src/windows/voicewindow.cpp:95 msgid "Suppress Noise" @@ -843,7 +855,7 @@ msgstr "Suprimir Ruído" #: src/windows/voicewindow.cpp:96 msgid "Mix Mono" -msgstr "" +msgstr "Mixagem Mono" #: src/windows/voicewindow.cpp:100 msgid "More _Settings" @@ -855,22 +867,26 @@ msgid "" "Gate - Simple volume threshold. Slider changes threshold\n" "RNNoise - Heavier on CPU. Slider changes probability threshold" msgstr "" +"Método de detecção de ativação de voz\n" +"Gate - Limite de volume simples. O controle deslizante altera o limite\n" +"RNNoise - Mais pesado na CPU. O controle deslizante altera o limite de " +"probabilidade" #: src/windows/voicewindow.cpp:162 msgid "Gate" -msgstr "" +msgstr "Gate" #: src/windows/voicewindow.cpp:164 msgid "RNNoise" -msgstr "" +msgstr "RNNoise" #: src/windows/voicewindow.cpp:242 msgid "Threshold" -msgstr "" +msgstr "Limite" #: src/windows/voicewindow.cpp:252 msgid "VAD Method" -msgstr "" +msgstr "Método VAD" #: src/windows/voicewindow.cpp:253 msgid "Output Device" @@ -954,7 +970,7 @@ msgstr "{} fez mudanças em <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:114 #: src/windows/guildsettings/auditlogpane.cpp:356 -#: src/windows/guildsettings/auditlogpane.cpp:468 +#: src/windows/guildsettings/auditlogpane.cpp:470 msgid "Changed the name from {} to {}" msgstr "Alterou o nome de {} para {}" @@ -974,13 +990,13 @@ msgstr "Limpou o tópico" #: src/windows/guildsettings/auditlogpane.cpp:136 #: src/windows/guildsettings/auditlogpane.cpp:452 -#: src/windows/guildsettings/auditlogpane.cpp:476 +#: src/windows/guildsettings/auditlogpane.cpp:478 msgid "Disabled slowmode" msgstr "Desativou modo câmera lenta" #: src/windows/guildsettings/auditlogpane.cpp:138 #: src/windows/guildsettings/auditlogpane.cpp:454 -#: src/windows/guildsettings/auditlogpane.cpp:478 +#: src/windows/guildsettings/auditlogpane.cpp:480 msgid "Set slowmode to {} seconds" msgstr "Definiu o temporizador do câmera lenta para {} segundos" @@ -990,352 +1006,357 @@ msgstr "{} removeu #{}" #: src/windows/guildsettings/auditlogpane.cpp:150 msgid "{} created channel overrides for #{}" -msgstr "" +msgstr "{} criou subsituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:152 msgid "{} created channel overrides for <#{}>" -msgstr "" +msgstr "{} criou subsituições de canal para <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:159 msgid "{} updated channel overrides for #{}" -msgstr "" +msgstr "{} atualizou as substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:161 msgid "{} updated channel overrides for <#{}>" -msgstr "" +msgstr "{} atualizou as substituições de canal para <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:168 msgid "{} removed channel overrides for #{}" -msgstr "" +msgstr "{} removeu as substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:170 msgid "{} removed channel overrides for <#{}>" -msgstr "" +msgstr "{} removeu as substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:175 msgid "{} kicked {}" -msgstr "" +msgstr "{} expulsou {}" #: src/windows/guildsettings/auditlogpane.cpp:178 msgid "{} pruned {} members" -msgstr "" +msgstr "{} podou {} membros" #: src/windows/guildsettings/auditlogpane.cpp:179 msgid "For {} days of inactivity" -msgstr "" +msgstr "Por {} dias de inatividade" #: src/windows/guildsettings/auditlogpane.cpp:183 msgid "{} banned {}" -msgstr "" +msgstr "{} baniu {}" #: src/windows/guildsettings/auditlogpane.cpp:187 msgid "{} removed the ban for {}" -msgstr "" +msgstr "{} removeu o banimento de {}" #: src/windows/guildsettings/auditlogpane.cpp:191 msgid "{} updated {}" -msgstr "" +msgstr "{} atualizou {}" #: src/windows/guildsettings/auditlogpane.cpp:196 msgid "Deafened them" -msgstr "" +msgstr "Desligou o áudio deles" #: src/windows/guildsettings/auditlogpane.cpp:196 msgid "Undeafened them" -msgstr "" +msgstr "Ativou o áudio deles" #: src/windows/guildsettings/auditlogpane.cpp:198 msgid "Muted them" -msgstr "" +msgstr "Mutou eles" #: src/windows/guildsettings/auditlogpane.cpp:198 msgid "Unmuted them" -msgstr "" +msgstr "Desmutou eles" #: src/windows/guildsettings/auditlogpane.cpp:200 msgid "Set their nickname to {}" -msgstr "" +msgstr "Definiu o apelido para {}" #: src/windows/guildsettings/auditlogpane.cpp:206 msgid "{} updated roles for {}" -msgstr "" +msgstr "{} atualizou os cargos de {}" #: src/windows/guildsettings/auditlogpane.cpp:211 msgid "Removed a role {}" -msgstr "" +msgstr "Removeu o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:213 msgid "Added a role {}" -msgstr "" +msgstr "Adicionou o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:221 msgid "{} moved a user to {}" -msgstr "" +msgstr "{} moveu um usuário para {}" #: src/windows/guildsettings/auditlogpane.cpp:224 msgid "{} moved {} users to {}" -msgstr "" +msgstr "{} moveu {} usuários para {}" #: src/windows/guildsettings/auditlogpane.cpp:229 msgid "{} disconnected {} users from voice" -msgstr "" +msgstr "{} desconectou {} usuários de canais de voz" #: src/windows/guildsettings/auditlogpane.cpp:234 msgid "{} added {} to the server" -msgstr "" +msgstr "{} adicionou {} ao servidor" #: src/windows/guildsettings/auditlogpane.cpp:238 msgid "{} created the role {}" -msgstr "" +msgstr "{} criou o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:242 msgid "{} updated the role {}" -msgstr "" +msgstr "{} atualizou o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:253 msgid "Removed the color" -msgstr "" +msgstr "Removeu a cor" #: src/windows/guildsettings/auditlogpane.cpp:255 msgid "Set the color to {}" -msgstr "" +msgstr "Definiu a cor para {}" #: src/windows/guildsettings/auditlogpane.cpp:257 msgid "Updated the permissions" -msgstr "" +msgstr "Atualizou as permissões" #: src/windows/guildsettings/auditlogpane.cpp:259 msgid "Mentionable" -msgstr "" +msgstr "Mencionável" #: src/windows/guildsettings/auditlogpane.cpp:259 msgid "Not mentionable" -msgstr "" +msgstr "Não mencionável" #: src/windows/guildsettings/auditlogpane.cpp:261 msgid "Not hoisted" -msgstr "" +msgstr "Não içado" #: src/windows/guildsettings/auditlogpane.cpp:261 msgid "Hoisted" -msgstr "" +msgstr "Içado" #: src/windows/guildsettings/auditlogpane.cpp:267 msgid "{} deleted the role {}" -msgstr "" +msgstr "{} deletou o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:271 msgid "{} created an invite {}" -msgstr "" +msgstr "{} criou um convite {}" #: src/windows/guildsettings/auditlogpane.cpp:277 msgid "For channel {}" -msgstr "" +msgstr "Para o canal {}" #: src/windows/guildsettings/auditlogpane.cpp:281 msgid "Which has unlimited uses" -msgstr "" +msgstr "O qual possui usos ilimitados" #: src/windows/guildsettings/auditlogpane.cpp:283 msgid "Which has {} uses" -msgstr "" +msgstr "O qual possui {} usos" #: src/windows/guildsettings/auditlogpane.cpp:286 msgid "With temporary on" -msgstr "" +msgstr "Com modo temporário ligado" #: src/windows/guildsettings/auditlogpane.cpp:288 msgid "With temporary off" -msgstr "" +msgstr "Com modo temporário desligado" #: src/windows/guildsettings/auditlogpane.cpp:294 msgid "{} deleted an invite {}" -msgstr "" +msgstr "{} apagou um convite {}" #: src/windows/guildsettings/auditlogpane.cpp:299 msgid "{} created the webhook {}" -msgstr "" +msgstr "{} criou um webhook {}" #: src/windows/guildsettings/auditlogpane.cpp:306 msgid "With channel #{}" -msgstr "" +msgstr "Com o canal #{}" #: src/windows/guildsettings/auditlogpane.cpp:319 msgid "{} updated the webhook {}" -msgstr "" +msgstr "{} atualizou o webhook {}" #: src/windows/guildsettings/auditlogpane.cpp:322 msgid "{} updated a webhook" -msgstr "" +msgstr "{} atualizou um webhook" #: src/windows/guildsettings/auditlogpane.cpp:330 msgid "Changed the avatar" -msgstr "" +msgstr "Mudou o avatar" #: src/windows/guildsettings/auditlogpane.cpp:334 msgid "Changed the channel to #{}" -msgstr "" +msgstr "Mudou o canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:337 msgid "Changed the channel" -msgstr "" +msgstr "Mudou o canal" #: src/windows/guildsettings/auditlogpane.cpp:343 msgid "{} deleted the webhook {}" -msgstr "" +msgstr "{} apagou o webhook {}" #: src/windows/guildsettings/auditlogpane.cpp:348 msgid "{} created the emoji {}" -msgstr "" +msgstr "{} criou o emoji {}" #: src/windows/guildsettings/auditlogpane.cpp:353 msgid "{} updated the emoji {}" -msgstr "" +msgstr "{} atualizou o emoji {}" #: src/windows/guildsettings/auditlogpane.cpp:361 msgid "{} deleted the emoji {}" -msgstr "" +msgstr "{} apagou o emoji {}" #: src/windows/guildsettings/auditlogpane.cpp:370 msgid "{} deleted {} messages in #{}" -msgstr "" +msgstr "{} apagou {} mensagens em #{}" #: src/windows/guildsettings/auditlogpane.cpp:374 msgid "{} deleted {} messages" -msgstr "" +msgstr "{} apagou {} mensagens" #: src/windows/guildsettings/auditlogpane.cpp:380 msgid "{} pinned a message by {}" -msgstr "" +msgstr "{} fixou uma mensagem de {}" #: src/windows/guildsettings/auditlogpane.cpp:384 msgid "{} unpinned a message by {}" -msgstr "" +msgstr "{} desafixar uma mensagem de {}" #: src/windows/guildsettings/auditlogpane.cpp:388 msgid "{} started the stage for {}" -msgstr "" +msgstr "{} iniciou o palco para {}" #: src/windows/guildsettings/auditlogpane.cpp:396 #: src/windows/guildsettings/auditlogpane.cpp:416 msgid "Set the topic to {}" -msgstr "" +msgstr "Definiu o tópico para {}" #: src/windows/guildsettings/auditlogpane.cpp:401 #: src/windows/guildsettings/auditlogpane.cpp:421 msgid "Set the privacy level to {}" -msgstr "" +msgstr "Definiu o nível de privacidade para {}" #: src/windows/guildsettings/auditlogpane.cpp:408 msgid "{} updated the stage for {}" -msgstr "" +msgstr "{} atualizou o palco para {}" #: src/windows/guildsettings/auditlogpane.cpp:428 msgid "{} ended the stage for {}" -msgstr "" +msgstr "{} encerrou o palco para {}" #: src/windows/guildsettings/auditlogpane.cpp:434 msgid "{} created a thread {}" -msgstr "" +msgstr "{} criou uma thread {}" #: src/windows/guildsettings/auditlogpane.cpp:446 -#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:484 msgid "Archived the thread" -msgstr "" +msgstr "Arquivou a thread" #: src/windows/guildsettings/auditlogpane.cpp:446 -#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:484 msgid "Unarchived the thread" -msgstr "" +msgstr "Desarquivou a thread" #: src/windows/guildsettings/auditlogpane.cpp:448 -#: src/windows/guildsettings/auditlogpane.cpp:472 +#: src/windows/guildsettings/auditlogpane.cpp:474 msgid "Set auto archive duration to {} minutes" msgstr "" +"Definiu o intervalo para o arquivamento automático para {} minutos" #: src/windows/guildsettings/auditlogpane.cpp:456 -#: src/windows/guildsettings/auditlogpane.cpp:480 +#: src/windows/guildsettings/auditlogpane.cpp:482 msgid "Locked the thread, restricting it to only be unarchived by moderators" msgstr "" +"Bloqueou a thread, restringindo-a a ser desarquivada apenas por moderadores" #: src/windows/guildsettings/auditlogpane.cpp:456 -#: src/windows/guildsettings/auditlogpane.cpp:480 +#: src/windows/guildsettings/auditlogpane.cpp:482 msgid "Unlocked the thread, allowing it to be unarchived by non-moderators" msgstr "" +"Desbloqueou a thread, permitindo-a ser desarquivada por não-moderadores " #: src/windows/guildsettings/auditlogpane.cpp:462 -msgid "{} made changes to the thread " -msgstr "" +msgid "{} made changes to the thread {}" +msgstr "{} fez mudanças na thread {}" -#: src/windows/guildsettings/auditlogpane.cpp:486 +#: src/windows/guildsettings/auditlogpane.cpp:488 msgid "{} deleted the thread {}" -msgstr "" +msgstr "{} apagou a thread {}" -#: src/windows/guildsettings/auditlogpane.cpp:490 +#: src/windows/guildsettings/auditlogpane.cpp:492 msgid "Unknown action" -msgstr "" +msgstr "Ação desconhecida" -#: src/windows/guildsettings/auditlogpane.cpp:498 +#: src/windows/guildsettings/auditlogpane.cpp:500 msgid "Reason: {}" -msgstr "" +msgstr "Motivo: {}" #: src/windows/guildsettings/banspane.cpp:13 msgid "Unban" -msgstr "" +msgstr "Desbanir" #: src/windows/guildsettings/banspane.cpp:32 msgid "" "You do not have permission to see bans. However, bans made while you are " "connected will appear here" msgstr "" +"Você não possui permissões para ver os banimentos. No entanto, banimentos " +"feitos enquanto você está conectado vão aparecer aqui" #: src/windows/guildsettings/banspane.cpp:56 msgid "User" -msgstr "" +msgstr "Usuário" #: src/windows/guildsettings/banspane.cpp:57 msgid "Reason" -msgstr "" +msgstr "Motivo" #: src/windows/guildsettings/banspane.cpp:101 msgid "Failed to unban user" -msgstr "" +msgstr "Falhou em desbanir usuário" #: src/windows/guildsettings/emojispane.cpp:18 #: src/windows/guildsettings/invitespane.cpp:12 msgid "Delete" -msgstr "" +msgstr "Apagar" #: src/windows/guildsettings/emojispane.cpp:20 msgid "Copy Emoji URL" -msgstr "" +msgstr "Copiar URL do emoji" #: src/windows/guildsettings/emojispane.cpp:21 msgid "Open in Browser" -msgstr "" +msgstr "Abrir no Navegador" #: src/windows/guildsettings/emojispane.cpp:49 #: src/windows/guildsettings/memberspane.cpp:65 #: src/windows/guildsettings/rolespane.cpp:118 msgid "Filter" -msgstr "" +msgstr "Filtro" #: src/windows/guildsettings/emojispane.cpp:69 msgid "Emoji" -msgstr "" +msgstr "Emoji" #: src/windows/guildsettings/emojispane.cpp:77 #: src/windows/guildsettings/emojispane.cpp:99 msgid "Name" -msgstr "" +msgstr "Nome" #: src/windows/guildsettings/emojispane.cpp:101 msgid "Creator" -msgstr "" +msgstr "Criador" #: src/windows/guildsettings/emojispane.cpp:102 msgid "Is Animated?" -msgstr "" +msgstr "É Animado?" #: src/windows/guildsettings/emojispane.cpp:133 #: src/windows/guildsettings/emojispane.cpp:137 @@ -1344,162 +1365,186 @@ msgstr "" #: src/windows/guildsettings/emojispane.cpp:231 #: src/windows/guildsettings/invitespane.cpp:75 msgid "Yes" -msgstr "" +msgstr "Sim" #: src/windows/guildsettings/emojispane.cpp:133 #: src/windows/guildsettings/emojispane.cpp:135 #: src/windows/guildsettings/emojispane.cpp:137 #: src/windows/guildsettings/invitespane.cpp:75 msgid "No" -msgstr "" +msgstr "Não" #: src/windows/guildsettings/emojispane.cpp:187 msgid "Failed to set emoji name" -msgstr "" +msgstr "Falhou em definir um nome para o emoji" #: src/windows/guildsettings/emojispane.cpp:207 msgid "Are you sure you want to delete {}?" -msgstr "" +msgstr "Você tem certeza de que quer deletar {}?" #: src/windows/guildsettings/emojispane.cpp:210 msgid "Failed to delete emoji" -msgstr "" +msgstr "Falhou em deletar emoji" #: src/windows/guildsettings/infopane.cpp:15 msgid "Guild name" -msgstr "" +msgstr "Nome do Servidor" #: src/windows/guildsettings/infopane.cpp:37 msgid "Press enter or lose focus to submit" -msgstr "" +msgstr "Pressione enter para desfocar ou enviar" #: src/windows/guildsettings/infopane.cpp:53 msgid "Click to choose a file, right click to paste" -msgstr "" +msgstr "Clique para escolher um arquivo, clique no botão direito para copiar" #: src/windows/guildsettings/infopane.cpp:109 msgid "Failed to set guild name" -msgstr "" +msgstr "Falhou em definir um nome de guilda" #: src/windows/guildsettings/infopane.cpp:123 msgid "Failed to set guild icon" -msgstr "" +msgstr "Falhou em definir um ícone de guilda" #: src/windows/guildsettings/infopane.cpp:147 msgid "Choose new guild icon" -msgstr "" +msgstr "Escolha um novo ícone de guilda" #: src/windows/guildsettings/infopane.cpp:170 msgid "Supported images" -msgstr "" +msgstr "Extensões de Imagens Suportadas" #: src/windows/guildsettings/infopane.cpp:183 msgid "All files" -msgstr "" +msgstr "Todos os Arquivos" #: src/windows/guildsettings/invitespane.cpp:34 msgid "Code" -msgstr "" +msgstr "Código" #: src/windows/guildsettings/invitespane.cpp:35 msgid "Expires" -msgstr "" +msgstr "Vence" #: src/windows/guildsettings/invitespane.cpp:36 msgid "Created by" -msgstr "" +msgstr "Criado por" #: src/windows/guildsettings/invitespane.cpp:37 msgid "Uses" -msgstr "" +msgstr "Usos" #: src/windows/guildsettings/invitespane.cpp:38 msgid "Max uses" -msgstr "" +msgstr "Número de usos máximo" #: src/windows/guildsettings/invitespane.cpp:39 msgid "Grants temporary membership" -msgstr "" +msgstr "Concede associação temporária" #: src/windows/guildsettings/invitespane.cpp:64 msgid "Never" -msgstr "" +msgstr "Nunca" #: src/windows/guildsettings/invitespane.cpp:71 msgid "Unlimited" -msgstr "" +msgstr "Ilimitado" #: src/windows/guildsettings/invitespane.cpp:106 msgid "Failed to delete invite" -msgstr "" +msgstr "Falhou em apagar convite" #: src/windows/guildsettings/memberspane.cpp:21 msgid "Some members may not be shown if the client is not aware of them" msgstr "" +"Alguns membros podem não ser listados se o cliente não estiver consciente da " +"existência deles" #: src/windows/guildsettings/memberspane.cpp:179 msgid "User is a bot" -msgstr "" +msgstr "Usuário é um robô" #: src/windows/guildsettings/memberspane.cpp:214 msgid "User ID: " -msgstr "" +msgstr "ID de Usuário" #: src/windows/guildsettings/memberspane.cpp:217 msgid "Joined server: " -msgstr "" +msgstr "Entrou no servidor: " #: src/windows/guildsettings/memberspane.cpp:219 msgid "Joined server: Unknown" -msgstr "" +msgstr "Entrou no servidor: ???" #: src/windows/guildsettings/memberspane.cpp:220 msgid "Nickname: " -msgstr "" +msgstr "Apelido: " #: src/windows/guildsettings/memberspane.cpp:223 msgid "Boosting since {}" -msgstr "" +msgstr "Impulsionando desde {}" #: src/windows/guildsettings/rolespane.cpp:71 msgid "Failed to set role position" -msgstr "" +msgstr "Falhou em definir posição do cargo" #: src/windows/guildsettings/rolespane.cpp:217 msgid "Press enter to submit" -msgstr "" +msgstr "Pressione enter para enviar" #: src/windows/guildsettings/rolespane.cpp:236 msgid "Failed to set role color" -msgstr "" +msgstr "Falhou em definir cor do cargo" #: src/windows/guildsettings/rolespane.cpp:267 msgid "General" -msgstr "" +msgstr "Geral" #: src/windows/guildsettings/rolespane.cpp:277 msgid "Text Channels" -msgstr "" +msgstr "Canais de Texto" #: src/windows/guildsettings/rolespane.cpp:295 msgid "Membership" -msgstr "" +msgstr "Associação" #: src/windows/guildsettings/rolespane.cpp:303 msgid "Advanced" -msgstr "" +msgstr "Avançado" #: src/windows/guildsettings/rolespane.cpp:305 msgid "Voice Channels" -msgstr "" +msgstr "Canais de Voz" #: src/windows/guildsettings/rolespane.cpp:319 msgid "Events" -msgstr "" +msgstr "Eventos" #: src/windows/guildsettings/rolespane.cpp:412 msgid "Failed to set role name" -msgstr "" +msgstr "Falhou em definir o nome de um cargo" + +#~ msgid "" +#~ "{} just boosted the server {} times! {} " +#~ "has achieved Level {}}!" +#~ msgstr "" +#~ "{} acabou de impulsionar o servidor {} " +#~ "vezes! {} atingiu nível {}}!" + +#~ msgid "{} made changes to the thread " +#~ msgstr "{} fez mudanças para a thread {}" + +#~ msgid " is typing..." +#~ msgstr " está digitando..." + +#~ msgid " and " +#~ msgstr " e " + +#~ msgid " are typing..." +#~ msgstr " estão digitando..." + +#~ msgid "and " +#~ msgstr "e " #~ msgid "css failed parsing (" #~ msgstr "CSS falhou" From 41f9d91e8af42f40d6dd1b7d7f83d6293694c867 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 17 Jun 2024 12:24:25 -0300 Subject: [PATCH 17/37] Update i18n support --- po/abaddon.pot | 49 +++++++++------- po/pt_BR.po | 58 ++++++++++--------- .../channellist/channellisttree.cpp | 1 + 3 files changed, 60 insertions(+), 48 deletions(-) diff --git a/po/abaddon.pot b/po/abaddon.pot index d6b2171b..3bb306ed 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-17 11:30-0300\n" +"POT-Creation-Date: 2024-06-17 12:21-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -545,8 +545,8 @@ msgstr "" #: src/components/channellist/channellisttree.cpp:19 #: src/components/channellist/channellisttree.cpp:23 #: src/components/channellist/channellisttree.cpp:24 -#: src/components/channellist/channellisttree.cpp:34 -#: src/components/channellist/channellisttree.cpp:40 +#: src/components/channellist/channellisttree.cpp:35 +#: src/components/channellist/channellisttree.cpp:42 msgid "_Copy ID" msgstr "" @@ -555,13 +555,14 @@ msgid "View _Settings" msgstr "" #: src/components/channellist/channellisttree.cpp:21 -#: src/components/channellist/channellisttree.cpp:41 +#: src/components/channellist/channellisttree.cpp:43 msgid "_Leave" msgstr "" #: src/components/channellist/channellisttree.cpp:22 #: src/components/channellist/channellisttree.cpp:25 -#: src/components/channellist/channellisttree.cpp:44 +#: src/components/channellist/channellisttree.cpp:33 +#: src/components/channellist/channellisttree.cpp:46 msgid "Mark as _Read" msgstr "" @@ -578,53 +579,57 @@ msgstr "" msgid "_Disconnect" msgstr "" -#: src/components/channellist/channellisttree.cpp:37 +#: src/components/channellist/channellisttree.cpp:34 +msgid "Open _Chat" +msgstr "" + +#: src/components/channellist/channellisttree.cpp:39 msgid "Join _Voice" msgstr "" -#: src/components/channellist/channellisttree.cpp:38 +#: src/components/channellist/channellisttree.cpp:40 msgid "_Disconnect Voice" msgstr "" -#: src/components/channellist/channellisttree.cpp:42 +#: src/components/channellist/channellisttree.cpp:44 msgid "_Archive" msgstr "" -#: src/components/channellist/channellisttree.cpp:43 +#: src/components/channellist/channellisttree.cpp:45 msgid "_Unarchive" msgstr "" -#: src/components/channellist/channellisttree.cpp:229 +#: src/components/channellist/channellisttree.cpp:242 msgid "Are you sure you want to leave this group DM?" msgstr "" -#: src/components/channellist/channellisttree.cpp:267 +#: src/components/channellist/channellisttree.cpp:280 msgid "Are you sure you want to leave this thread?" msgstr "" -#: src/components/channellist/channellisttree.cpp:1184 +#: src/components/channellist/channellisttree.cpp:1170 msgid "Direct Messages" msgstr "" -#: src/components/channellist/channellisttree.cpp:1356 +#: src/components/channellist/channellisttree.cpp:1338 msgid "Close" msgstr "" -#: src/components/channellist/channellisttree.cpp:1356 +#: src/components/channellist/channellisttree.cpp:1338 msgid "Leave" msgstr "" -#: src/components/channellist/channellisttree.cpp:1410 -#: src/components/channellist/channellisttree.cpp:1424 -#: src/components/channellist/channellisttree.cpp:1466 -#: src/components/channellist/channellisttree.cpp:1491 +#: src/components/channellist/channellisttree.cpp:1392 +#: src/components/channellist/channellisttree.cpp:1406 +#: src/components/channellist/channellisttree.cpp:1451 +#: src/components/channellist/channellisttree.cpp:1476 msgid "Unmute" msgstr "" -#: src/components/channellist/channellisttree.cpp:1412 -#: src/components/channellist/channellisttree.cpp:1426 -#: src/components/channellist/channellisttree.cpp:1468 -#: src/components/channellist/channellisttree.cpp:1493 +#: src/components/channellist/channellisttree.cpp:1394 +#: src/components/channellist/channellisttree.cpp:1408 +#: src/components/channellist/channellisttree.cpp:1453 +#: src/components/channellist/channellisttree.cpp:1478 #: src/windows/voicewindow.cpp:22 src/windows/voicewindow.cpp:93 msgid "Mute" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index 251b6866..5d54f9d7 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-17 11:30-0300\n" +"POT-Creation-Date: 2024-06-17 12:21-0300\n" "PO-Revision-Date: 2024-06-17 11:45-0300\n" "Last-Translator: Gabriel de Moura \n" "Language-Team: Brazilian Portuguese {} alterou o ícone do canal" msgid "" "{} just boosted the server {} times! {} has " "achieved Level {}!" -msgstr "{} acabou de impulsionar o servidor {} vezes! {} atingiu " -"Nível {}!" +msgstr "" +"{} acabou de impulsionar o servidor {} " +"vezes! {} atingiu Nível {}!" #: src/components/chatmessage.cpp:276 msgid "" @@ -391,8 +392,8 @@ msgid "" "This server is eligible for Server Discovery again and has been " "automatically relisted!" msgstr "" -"Este servidor é elegível para o \"Server Discovery\" novamente e " -"foi automaticamente recadastrado" +"Este servidor é elegível para o \"Server Discovery\" novamente e foi " +"automaticamente recadastrado" #: src/components/chatmessage.cpp:291 msgid "" @@ -575,8 +576,8 @@ msgstr "Desconhecido" #: src/components/channellist/channellisttree.cpp:19 #: src/components/channellist/channellisttree.cpp:23 #: src/components/channellist/channellisttree.cpp:24 -#: src/components/channellist/channellisttree.cpp:34 -#: src/components/channellist/channellisttree.cpp:40 +#: src/components/channellist/channellisttree.cpp:35 +#: src/components/channellist/channellisttree.cpp:42 msgid "_Copy ID" msgstr "_Copiar ID" @@ -585,13 +586,14 @@ msgid "View _Settings" msgstr "Ver _Configurações" #: src/components/channellist/channellisttree.cpp:21 -#: src/components/channellist/channellisttree.cpp:41 +#: src/components/channellist/channellisttree.cpp:43 msgid "_Leave" msgstr "_Sair" #: src/components/channellist/channellisttree.cpp:22 #: src/components/channellist/channellisttree.cpp:25 -#: src/components/channellist/channellisttree.cpp:44 +#: src/components/channellist/channellisttree.cpp:33 +#: src/components/channellist/channellisttree.cpp:46 msgid "Mark as _Read" msgstr "Marcar como _Lido" @@ -608,53 +610,57 @@ msgstr "_Entrar" msgid "_Disconnect" msgstr "_Desconectar" -#: src/components/channellist/channellisttree.cpp:37 +#: src/components/channellist/channellisttree.cpp:34 +msgid "Open _Chat" +msgstr "Abrir _Chat" + +#: src/components/channellist/channellisttree.cpp:39 msgid "Join _Voice" msgstr "Entrar em _Voz" -#: src/components/channellist/channellisttree.cpp:38 +#: src/components/channellist/channellisttree.cpp:40 msgid "_Disconnect Voice" msgstr "_Desconectar da Voz" -#: src/components/channellist/channellisttree.cpp:42 +#: src/components/channellist/channellisttree.cpp:44 msgid "_Archive" msgstr "_Arquivar" -#: src/components/channellist/channellisttree.cpp:43 +#: src/components/channellist/channellisttree.cpp:45 msgid "_Unarchive" msgstr "_Desarquivar" -#: src/components/channellist/channellisttree.cpp:229 +#: src/components/channellist/channellisttree.cpp:242 msgid "Are you sure you want to leave this group DM?" msgstr "Você tem certeza de que quer sair deste grupo de DM?" -#: src/components/channellist/channellisttree.cpp:267 +#: src/components/channellist/channellisttree.cpp:280 msgid "Are you sure you want to leave this thread?" msgstr "Você tem certeza de que quer sair desta thread?" -#: src/components/channellist/channellisttree.cpp:1184 +#: src/components/channellist/channellisttree.cpp:1170 msgid "Direct Messages" msgstr "Mensagems Diretas" -#: src/components/channellist/channellisttree.cpp:1356 +#: src/components/channellist/channellisttree.cpp:1338 msgid "Close" msgstr "Fechar" -#: src/components/channellist/channellisttree.cpp:1356 +#: src/components/channellist/channellisttree.cpp:1338 msgid "Leave" msgstr "Sair" -#: src/components/channellist/channellisttree.cpp:1410 -#: src/components/channellist/channellisttree.cpp:1424 -#: src/components/channellist/channellisttree.cpp:1466 -#: src/components/channellist/channellisttree.cpp:1491 +#: src/components/channellist/channellisttree.cpp:1392 +#: src/components/channellist/channellisttree.cpp:1406 +#: src/components/channellist/channellisttree.cpp:1451 +#: src/components/channellist/channellisttree.cpp:1476 msgid "Unmute" msgstr "Desmutar" -#: src/components/channellist/channellisttree.cpp:1412 -#: src/components/channellist/channellisttree.cpp:1426 -#: src/components/channellist/channellisttree.cpp:1468 -#: src/components/channellist/channellisttree.cpp:1493 +#: src/components/channellist/channellisttree.cpp:1394 +#: src/components/channellist/channellisttree.cpp:1408 +#: src/components/channellist/channellisttree.cpp:1453 +#: src/components/channellist/channellisttree.cpp:1478 #: src/windows/voicewindow.cpp:22 src/windows/voicewindow.cpp:93 msgid "Mute" msgstr "Mutar" diff --git a/src/components/channellist/channellisttree.cpp b/src/components/channellist/channellisttree.cpp index b2eab4b4..bceeb290 100644 --- a/src/components/channellist/channellisttree.cpp +++ b/src/components/channellist/channellisttree.cpp @@ -34,6 +34,7 @@ ChannelListTree::ChannelListTree() , m_menu_voice_open_chat(_("Open _Chat"), true) , m_menu_dm_copy_id(_("_Copy ID"), true) , m_menu_dm_close("") // changes depending on if group or not +#endif #ifdef WITH_VOICE , m_menu_dm_join_voice(_("Join _Voice"), true) , m_menu_dm_disconnect_voice(_("_Disconnect Voice"), true) From 5ca7f7fed045b5ed204d2f19439b551fb491ca90 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 17 Jun 2024 13:21:55 -0300 Subject: [PATCH 18/37] Mark permissions.cpp strings for translation * Update abaddon.pot * Update POTFILES * Update Brazilian Portuguese Translation --- po/POTFILES | 1 + po/abaddon.pot | 440 ++++++++++++++++++++++++++++++++++- po/pt_BR.po | 451 +++++++++++++++++++++++++++++++++++- src/discord/permissions.cpp | 210 +++++++++++++++++ src/discord/permissions.hpp | 211 +---------------- 5 files changed, 1103 insertions(+), 210 deletions(-) diff --git a/po/POTFILES b/po/POTFILES index e453e733..280afc0c 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -1,5 +1,6 @@ src/abaddon.cpp src/startup.cpp +src/discord/permissions.cpp src/dialogs/confirm.cpp src/dialogs/friendpicker.cpp src/dialogs/setstatus.cpp diff --git a/po/abaddon.pot b/po/abaddon.pot index 3bb306ed..d4292741 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-17 12:21-0300\n" +"POT-Creation-Date: 2024-06-17 13:07-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -132,6 +132,444 @@ msgstr "" msgid "Getting connection info..." msgstr "" +#: src/discord/permissions.cpp:16 +msgid "None" +msgstr "" + +#: src/discord/permissions.cpp:18 +msgid "Create Invite" +msgstr "" + +#: src/discord/permissions.cpp:20 +msgid "Kick Members" +msgstr "" + +#: src/discord/permissions.cpp:22 +msgid "Ban Members" +msgstr "" + +#: src/discord/permissions.cpp:24 +msgid "Administrator" +msgstr "" + +#: src/discord/permissions.cpp:26 +msgid "Manage Channels" +msgstr "" + +#: src/discord/permissions.cpp:28 +msgid "Manage Server" +msgstr "" + +#: src/discord/permissions.cpp:30 +msgid "Add Reactions" +msgstr "" + +#: src/discord/permissions.cpp:32 +msgid "View Audit Log" +msgstr "" + +#: src/discord/permissions.cpp:34 +msgid "Use Priority Speaker" +msgstr "" + +#: src/discord/permissions.cpp:36 +msgid "Video" +msgstr "" + +#: src/discord/permissions.cpp:38 +msgid "View Channels" +msgstr "" + +#: src/discord/permissions.cpp:40 +msgid "Send Messages" +msgstr "" + +#: src/discord/permissions.cpp:42 +msgid "Use TTS" +msgstr "" + +#: src/discord/permissions.cpp:44 +msgid "Manage Messages" +msgstr "" + +#: src/discord/permissions.cpp:46 +msgid "Embed Links" +msgstr "" + +#: src/discord/permissions.cpp:48 +msgid "Attach Files" +msgstr "" + +#: src/discord/permissions.cpp:50 +msgid "Read Message History" +msgstr "" + +#: src/discord/permissions.cpp:52 +msgid "Mention @everyone" +msgstr "" + +#: src/discord/permissions.cpp:54 +msgid "Use External Emojis" +msgstr "" + +#: src/discord/permissions.cpp:56 +msgid "View Server Insights" +msgstr "" + +#: src/discord/permissions.cpp:58 +msgid "Connect to Voice" +msgstr "" + +#: src/discord/permissions.cpp:60 +msgid "Speak in Voice" +msgstr "" + +#: src/discord/permissions.cpp:62 +msgid "Mute Members" +msgstr "" + +#: src/discord/permissions.cpp:64 +msgid "Deafen Members" +msgstr "" + +#: src/discord/permissions.cpp:66 +msgid "Move Members" +msgstr "" + +#: src/discord/permissions.cpp:68 +msgid "Use Voice Activation" +msgstr "" + +#: src/discord/permissions.cpp:70 +msgid "Change Nickname" +msgstr "" + +#: src/discord/permissions.cpp:72 +msgid "Manage Nicknames" +msgstr "" + +#: src/discord/permissions.cpp:74 +msgid "Manage Roles" +msgstr "" + +#: src/discord/permissions.cpp:76 +msgid "Manage Webhooks" +msgstr "" + +#: src/discord/permissions.cpp:78 +msgid "Manage Expressions" +msgstr "" + +#: src/discord/permissions.cpp:80 +msgid "Use Application Commands" +msgstr "" + +#: src/discord/permissions.cpp:82 +msgid "Manage Events" +msgstr "" + +#: src/discord/permissions.cpp:84 +msgid "Manage Threads" +msgstr "" + +#: src/discord/permissions.cpp:86 +msgid "Create Public Threads" +msgstr "" + +#: src/discord/permissions.cpp:88 +msgid "Create Private Threads" +msgstr "" + +#: src/discord/permissions.cpp:90 +msgid "Use External Stickers" +msgstr "" + +#: src/discord/permissions.cpp:92 +msgid "Send Messages In Threads" +msgstr "" + +#: src/discord/permissions.cpp:94 +msgid "Use Activities" +msgstr "" + +#: src/discord/permissions.cpp:96 +msgid "Timeout Members" +msgstr "" + +#: src/discord/permissions.cpp:100 +msgid "Use Soundboard" +msgstr "" + +#: src/discord/permissions.cpp:102 +msgid "Create Expressions" +msgstr "" + +#: src/discord/permissions.cpp:104 +msgid "Create Events" +msgstr "" + +#: src/discord/permissions.cpp:106 +msgid "Use External Sounds" +msgstr "" + +#: src/discord/permissions.cpp:108 +msgid "Send Voice Messages" +msgstr "" + +#: src/discord/permissions.cpp:112 +msgid "Set Voice Channel Status" +msgstr "" + +#: src/discord/permissions.cpp:114 +msgid "Unknown Permission" +msgstr "" + +#: src/discord/permissions.cpp:123 +msgid "Allows members to invite new people to this server." +msgstr "" + +#: src/discord/permissions.cpp:125 +msgid "" +"Allows members to remove other members from this server. Kicked members will " +"be able to rejoin if they have another invite." +msgstr "" + +#: src/discord/permissions.cpp:127 +msgid "Allows members to permanently ban other members from this server." +msgstr "" + +#: src/discord/permissions.cpp:129 +msgid "" +"Members with this permission will have every permission and will also bypass " +"all channel specific permissions or restrictions (for example, these members " +"would get access to all private channels). This is a dangerous permission to " +"grant." +msgstr "" + +#: src/discord/permissions.cpp:131 +msgid "Allows members to create, edit, or delete channels." +msgstr "" + +#: src/discord/permissions.cpp:133 +msgid "" +"Allows members to change this server's name, switch regions, and add bots to " +"this server." +msgstr "" + +#: src/discord/permissions.cpp:135 +msgid "" +"Allows members to add new emoji reactions to a message. If this permission " +"is disabled, members can still react using any existing reactions on a " +"message." +msgstr "" + +#: src/discord/permissions.cpp:137 +msgid "" +"Allows members to view a record of who made which changes in this server." +msgstr "" + +#: src/discord/permissions.cpp:139 +msgid "" +"Allows members to be more easily heard in voice channels. When activated, " +"the volume of others without this permission will be automatically lowered. " +"Priority Speaker is activated by using the Push to Talk (Priority) keybind." +msgstr "" + +#: src/discord/permissions.cpp:141 +msgid "" +"Allows members to share their video, screen share, or stream a game in this " +"server." +msgstr "" + +#: src/discord/permissions.cpp:143 +msgid "" +"Allows members to view channels by default (excluding private channels)." +msgstr "" + +#: src/discord/permissions.cpp:145 +msgid "Allows members to send messages in text channels." +msgstr "" + +#: src/discord/permissions.cpp:147 +msgid "" +"Allows members to send text-to-speech messages by starting a message with /" +"tts. These messages can be heard by anyone focused on this channel." +msgstr "" + +#: src/discord/permissions.cpp:149 +msgid "Allows members to delete messages by other members or pin any message." +msgstr "" + +#: src/discord/permissions.cpp:151 +msgid "" +"Allows links that members share to show embedded content in text channels." +msgstr "" + +#: src/discord/permissions.cpp:153 +msgid "Allows members to upload files or media in text channels." +msgstr "" + +#: src/discord/permissions.cpp:155 +msgid "" +"Allows members to read previous messages sent in channels. If this " +"permission is disabled, members only see messages sent when they are online " +"and focused on that channel." +msgstr "" + +#: src/discord/permissions.cpp:157 +msgid "" +"Allows members to use @everyone (everyone in the server) or @here (only " +"online members in that channel). They can also @mention all roles, even if " +"the role's \"Allow anyone to mention this role\" permission is disabled." +msgstr "" + +#: src/discord/permissions.cpp:159 +msgid "" +"Allows members to use emoji from other servers, if they're a Discord Nitro " +"member." +msgstr "" + +#: src/discord/permissions.cpp:161 +msgid "" +"Allows members to view Server Insights, which shows data on community " +"growth, engagement, and more." +msgstr "" + +#: src/discord/permissions.cpp:163 +msgid "Allows members to join voice channels and hear others." +msgstr "" + +#: src/discord/permissions.cpp:165 +msgid "" +"Allows members to talk in voice channels. If this permission is disabled, " +"members are default muted until somebody with the \"Mute Members\" " +"permission unmutes them." +msgstr "" + +#: src/discord/permissions.cpp:167 +msgid "Allows members to mute other members in voice channels for everyone." +msgstr "" + +#: src/discord/permissions.cpp:169 +msgid "" +"Allows members to deafen other members in voice channels, which means they " +"won't be able to speak or hear others." +msgstr "" + +#: src/discord/permissions.cpp:171 +msgid "" +"Allows members to move other members between voice channels that the member " +"with the permission has access to." +msgstr "" + +#: src/discord/permissions.cpp:173 +msgid "" +"Allows members to speak in voice channels by simply talking. If this " +"permission is disabled, members are required to use Push-to-talk. Good for " +"controlling background noise or noisy members." +msgstr "" + +#: src/discord/permissions.cpp:175 +msgid "" +"Allows members to change their own nickname, a custom name for just this " +"server." +msgstr "" + +#: src/discord/permissions.cpp:177 +msgid "Allows members to change the nicknames of other members." +msgstr "" + +#: src/discord/permissions.cpp:179 +msgid "" +"Allows members to create new roles and edit or delete roles lower than their " +"highest role. Also allows members to change permissions of individual " +"channels that they have access to." +msgstr "" + +#: src/discord/permissions.cpp:181 +msgid "" +"Allows members to create, edit, or delete webhooks, which can post messages " +"from other apps or sites into this server." +msgstr "" + +#: src/discord/permissions.cpp:183 +msgid "" +"Allows members to add or remove custom emoji, stickers, and sounds in this " +"server." +msgstr "" + +#: src/discord/permissions.cpp:185 +msgid "" +"Allows members to use commands from applications, including slash commands " +"and context menu commands." +msgstr "" + +#: src/discord/permissions.cpp:187 +msgid "Allows members to edit and cancel events." +msgstr "" + +#: src/discord/permissions.cpp:189 +msgid "" +"Allows members to rename, delete, close, and turn on slow mode for threads. " +"They can also view private threads." +msgstr "" + +#: src/discord/permissions.cpp:191 +msgid "Allows members to create threads that everyone in a channel can view." +msgstr "" + +#: src/discord/permissions.cpp:193 +msgid "Allows members to create invite-only threads." +msgstr "" + +#: src/discord/permissions.cpp:195 +msgid "" +"Allows members to use stickers from other servers, if they're a Discord " +"Nitro member." +msgstr "" + +#: src/discord/permissions.cpp:197 +msgid "Allows members to send messages in threads." +msgstr "" + +#: src/discord/permissions.cpp:199 +msgid "Allows members to use Activities in this server." +msgstr "" + +#: src/discord/permissions.cpp:201 +msgid "" +"When you put a user in timeout they will not be able to send messages in " +"chat, reply within threads, react to messages, or speak in voice or Stage " +"channels." +msgstr "" + +#: src/discord/permissions.cpp:205 +msgid "Allows members to send sounds from server soundboard." +msgstr "" + +#: src/discord/permissions.cpp:207 +msgid "" +"Allows members to add custom emoji, stickers, and sounds in this server." +msgstr "" + +#: src/discord/permissions.cpp:209 +msgid "Allows members to create events." +msgstr "" + +#: src/discord/permissions.cpp:211 +msgid "" +"Allows members to use sounds from other servers, if they're a Discord Nitro " +"member." +msgstr "" + +#: src/discord/permissions.cpp:213 +msgid "Allows members to send voice messages." +msgstr "" + +#: src/discord/permissions.cpp:217 +msgid "Allows members to create and edit voice channel status." +msgstr "" + #: src/dialogs/confirm.cpp:6 msgid "Confirm" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index 5d54f9d7..922a991a 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-17 12:21-0300\n" +"POT-Creation-Date: 2024-06-17 13:07-0300\n" "PO-Revision-Date: 2024-06-17 11:45-0300\n" "Last-Translator: Gabriel de Moura \n" "Language-Team: Brazilian Portuguese (std::stoull(tmp)); } + +const char *GetPermissionString(Permission perm) { + switch (perm) { + case Permission::NONE: + return _("None"); + case Permission::CREATE_INSTANT_INVITE: + return _("Create Invite"); + case Permission::KICK_MEMBERS: + return _("Kick Members"); + case Permission::BAN_MEMBERS: + return _("Ban Members"); + case Permission::ADMINISTRATOR: + return _("Administrator"); + case Permission::MANAGE_CHANNELS: + return _("Manage Channels"); + case Permission::MANAGE_GUILD: + return _("Manage Server"); + case Permission::ADD_REACTIONS: + return _("Add Reactions"); + case Permission::VIEW_AUDIT_LOG: + return _("View Audit Log"); + case Permission::PRIORITY_SPEAKER: + return _("Use Priority Speaker"); + case Permission::STREAM: + return _("Video"); + case Permission::VIEW_CHANNEL: + return _("View Channels"); + case Permission::SEND_MESSAGES: + return _("Send Messages"); + case Permission::SEND_TTS_MESSAGES: + return _("Use TTS"); + case Permission::MANAGE_MESSAGES: + return _("Manage Messages"); + case Permission::EMBED_LINKS: + return _("Embed Links"); + case Permission::ATTACH_FILES: + return _("Attach Files"); + case Permission::READ_MESSAGE_HISTORY: + return _("Read Message History"); + case Permission::MENTION_EVERYONE: + return _("Mention @everyone"); + case Permission::USE_EXTERNAL_EMOJIS: + return _("Use External Emojis"); + case Permission::VIEW_GUILD_INSIGHTS: + return _("View Server Insights"); + case Permission::CONNECT: + return _("Connect to Voice"); + case Permission::SPEAK: + return _("Speak in Voice"); + case Permission::MUTE_MEMBERS: + return _("Mute Members"); + case Permission::DEAFEN_MEMBERS: + return _("Deafen Members"); + case Permission::MOVE_MEMBERS: + return _("Move Members"); + case Permission::USE_VAD: + return _("Use Voice Activation"); + case Permission::CHANGE_NICKNAME: + return _("Change Nickname"); + case Permission::MANAGE_NICKNAMES: + return _("Manage Nicknames"); + case Permission::MANAGE_ROLES: + return _("Manage Roles"); + case Permission::MANAGE_WEBHOOKS: + return _("Manage Webhooks"); + case Permission::MANAGE_GUILD_EXPRESSIONS: + return _("Manage Expressions"); + case Permission::USE_APPLICATION_COMMANDS: + return _("Use Application Commands"); + case Permission::MANAGE_EVENTS: + return _("Manage Events"); + case Permission::MANAGE_THREADS: + return _("Manage Threads"); + case Permission::CREATE_PUBLIC_THREADS: + return _("Create Public Threads"); + case Permission::CREATE_PRIVATE_THREADS: + return _("Create Private Threads"); + case Permission::USE_EXTERNAL_STICKERS: + return _("Use External Stickers"); + case Permission::SEND_MESSAGES_IN_THREADS: + return _("Send Messages In Threads"); + case Permission::USE_EMBEDDED_ACTIVITIES: + return _("Use Activities"); + case Permission::MODERATE_MEMBERS: + return _("Timeout Members"); + // case Permission::VIEW_CREATOR_MONETIZATION_ANALYTICS: + // return ""; + case Permission::USE_SOUNDBOARD: + return _("Use Soundboard"); + case Permission::CREATE_GUILD_EXPRESSIONS: + return _("Create Expressions"); + case Permission::CREATE_EVENTS: + return _("Create Events"); + case Permission::USE_EXTERNAL_SOUNDS: + return _("Use External Sounds"); + case Permission::SEND_VOICE_MESSAGES: + return _("Send Voice Messages"); + // case Permission::USE_CLYDE_AI: + // return ""; + case Permission::SET_VOICE_CHANNEL_STATUS: + return _("Set Voice Channel Status"); + default: + return _("Unknown Permission"); + } +} + +const char *GetPermissionDescription(Permission perm) { + switch (perm) { + case Permission::NONE: + return ""; + case Permission::CREATE_INSTANT_INVITE: + return _("Allows members to invite new people to this server."); + case Permission::KICK_MEMBERS: + return _("Allows members to remove other members from this server. Kicked members will be able to rejoin if they have another invite."); + case Permission::BAN_MEMBERS: + return _("Allows members to permanently ban other members from this server."); + case Permission::ADMINISTRATOR: + return _("Members with this permission will have every permission and will also bypass all channel specific permissions or restrictions (for example, these members would get access to all private channels). This is a dangerous permission to grant."); + case Permission::MANAGE_CHANNELS: + return _("Allows members to create, edit, or delete channels."); + case Permission::MANAGE_GUILD: + return _("Allows members to change this server's name, switch regions, and add bots to this server."); + case Permission::ADD_REACTIONS: + return _("Allows members to add new emoji reactions to a message. If this permission is disabled, members can still react using any existing reactions on a message."); + case Permission::VIEW_AUDIT_LOG: + return _("Allows members to view a record of who made which changes in this server."); + case Permission::PRIORITY_SPEAKER: + return _("Allows members to be more easily heard in voice channels. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the Push to Talk (Priority) keybind."); + case Permission::STREAM: + return _("Allows members to share their video, screen share, or stream a game in this server."); + case Permission::VIEW_CHANNEL: + return _("Allows members to view channels by default (excluding private channels)."); + case Permission::SEND_MESSAGES: + return _("Allows members to send messages in text channels."); + case Permission::SEND_TTS_MESSAGES: + return _("Allows members to send text-to-speech messages by starting a message with /tts. These messages can be heard by anyone focused on this channel."); + case Permission::MANAGE_MESSAGES: + return _("Allows members to delete messages by other members or pin any message."); + case Permission::EMBED_LINKS: + return _("Allows links that members share to show embedded content in text channels."); + case Permission::ATTACH_FILES: + return _("Allows members to upload files or media in text channels."); + case Permission::READ_MESSAGE_HISTORY: + return _("Allows members to read previous messages sent in channels. If this permission is disabled, members only see messages sent when they are online and focused on that channel."); + case Permission::MENTION_EVERYONE: + return _("Allows members to use @everyone (everyone in the server) or @here (only online members in that channel). They can also @mention all roles, even if the role's \"Allow anyone to mention this role\" permission is disabled."); + case Permission::USE_EXTERNAL_EMOJIS: + return _("Allows members to use emoji from other servers, if they're a Discord Nitro member."); + case Permission::VIEW_GUILD_INSIGHTS: + return _("Allows members to view Server Insights, which shows data on community growth, engagement, and more."); + case Permission::CONNECT: + return _("Allows members to join voice channels and hear others."); + case Permission::SPEAK: + return _("Allows members to talk in voice channels. If this permission is disabled, members are default muted until somebody with the \"Mute Members\" permission unmutes them."); + case Permission::MUTE_MEMBERS: + return _("Allows members to mute other members in voice channels for everyone."); + case Permission::DEAFEN_MEMBERS: + return _("Allows members to deafen other members in voice channels, which means they won't be able to speak or hear others."); + case Permission::MOVE_MEMBERS: + return _("Allows members to move other members between voice channels that the member with the permission has access to."); + case Permission::USE_VAD: + return _("Allows members to speak in voice channels by simply talking. If this permission is disabled, members are required to use Push-to-talk. Good for controlling background noise or noisy members."); + case Permission::CHANGE_NICKNAME: + return _("Allows members to change their own nickname, a custom name for just this server."); + case Permission::MANAGE_NICKNAMES: + return _("Allows members to change the nicknames of other members."); + case Permission::MANAGE_ROLES: + return _("Allows members to create new roles and edit or delete roles lower than their highest role. Also allows members to change permissions of individual channels that they have access to."); + case Permission::MANAGE_WEBHOOKS: + return _("Allows members to create, edit, or delete webhooks, which can post messages from other apps or sites into this server."); + case Permission::MANAGE_GUILD_EXPRESSIONS: + return _("Allows members to add or remove custom emoji, stickers, and sounds in this server."); + case Permission::USE_APPLICATION_COMMANDS: + return _("Allows members to use commands from applications, including slash commands and context menu commands."); + case Permission::MANAGE_EVENTS: + return _("Allows members to edit and cancel events."); + case Permission::MANAGE_THREADS: + return _("Allows members to rename, delete, close, and turn on slow mode for threads. They can also view private threads."); + case Permission::CREATE_PUBLIC_THREADS: + return _("Allows members to create threads that everyone in a channel can view."); + case Permission::CREATE_PRIVATE_THREADS: + return _("Allows members to create invite-only threads."); + case Permission::USE_EXTERNAL_STICKERS: + return _("Allows members to use stickers from other servers, if they're a Discord Nitro member."); + case Permission::SEND_MESSAGES_IN_THREADS: + return _("Allows members to send messages in threads."); + case Permission::USE_EMBEDDED_ACTIVITIES: + return _("Allows members to use Activities in this server."); + case Permission::MODERATE_MEMBERS: + return _("When you put a user in timeout they will not be able to send messages in chat, reply within threads, react to messages, or speak in voice or Stage channels."); + // case Permission::VIEW_CREATOR_MONETIZATION_ANALYTICS: + // return ""; + case Permission::USE_SOUNDBOARD: + return _("Allows members to send sounds from server soundboard."); + case Permission::CREATE_GUILD_EXPRESSIONS: + return _("Allows members to add custom emoji, stickers, and sounds in this server."); + case Permission::CREATE_EVENTS: + return _("Allows members to create events."); + case Permission::USE_EXTERNAL_SOUNDS: + return _("Allows members to use sounds from other servers, if they're a Discord Nitro member."); + case Permission::SEND_VOICE_MESSAGES: + return _("Allows members to send voice messages."); + // case Permission::USE_CLYDE_AI: + // return ""; + case Permission::SET_VOICE_CHANNEL_STATUS: + return _("Allows members to create and edit voice channel status."); + default: + return ""; + } +} \ No newline at end of file diff --git a/src/discord/permissions.hpp b/src/discord/permissions.hpp index 0d2217f3..646857d9 100644 --- a/src/discord/permissions.hpp +++ b/src/discord/permissions.hpp @@ -1,5 +1,6 @@ #pragma once #include +#include #include "json.hpp" #include "misc/bitwise.hpp" #include "snowflake.hpp" @@ -79,212 +80,6 @@ struct PermissionOverwrite { friend void from_json(const nlohmann::json &j, PermissionOverwrite &m); }; -constexpr const char *GetPermissionString(Permission perm) { - switch (perm) { - case Permission::NONE: - return "None"; - case Permission::CREATE_INSTANT_INVITE: - return "Create Invite"; - case Permission::KICK_MEMBERS: - return "Kick Members"; - case Permission::BAN_MEMBERS: - return "Ban Members"; - case Permission::ADMINISTRATOR: - return "Administrator"; - case Permission::MANAGE_CHANNELS: - return "Manage Channels"; - case Permission::MANAGE_GUILD: - return "Manage Server"; - case Permission::ADD_REACTIONS: - return "Add Reactions"; - case Permission::VIEW_AUDIT_LOG: - return "View Audit Log"; - case Permission::PRIORITY_SPEAKER: - return "Use Priority Speaker"; - case Permission::STREAM: - return "Video"; - case Permission::VIEW_CHANNEL: - return "View Channels"; - case Permission::SEND_MESSAGES: - return "Send Messages"; - case Permission::SEND_TTS_MESSAGES: - return "Use TTS"; - case Permission::MANAGE_MESSAGES: - return "Manage Messages"; - case Permission::EMBED_LINKS: - return "Embed Links"; - case Permission::ATTACH_FILES: - return "Attach Files"; - case Permission::READ_MESSAGE_HISTORY: - return "Read Message History"; - case Permission::MENTION_EVERYONE: - return "Mention @everyone"; - case Permission::USE_EXTERNAL_EMOJIS: - return "Use External Emojis"; - case Permission::VIEW_GUILD_INSIGHTS: - return "View Server Insights"; - case Permission::CONNECT: - return "Connect to Voice"; - case Permission::SPEAK: - return "Speak in Voice"; - case Permission::MUTE_MEMBERS: - return "Mute Members"; - case Permission::DEAFEN_MEMBERS: - return "Deafen Members"; - case Permission::MOVE_MEMBERS: - return "Move Members"; - case Permission::USE_VAD: - return "Use Voice Activation"; - case Permission::CHANGE_NICKNAME: - return "Change Nickname"; - case Permission::MANAGE_NICKNAMES: - return "Manage Nicknames"; - case Permission::MANAGE_ROLES: - return "Manage Roles"; - case Permission::MANAGE_WEBHOOKS: - return "Manage Webhooks"; - case Permission::MANAGE_GUILD_EXPRESSIONS: - return "Manage Expressions"; - case Permission::USE_APPLICATION_COMMANDS: - return "Use Application Commands"; - case Permission::MANAGE_EVENTS: - return "Manage Events"; - case Permission::MANAGE_THREADS: - return "Manage Threads"; - case Permission::CREATE_PUBLIC_THREADS: - return "Create Public Threads"; - case Permission::CREATE_PRIVATE_THREADS: - return "Create Private Threads"; - case Permission::USE_EXTERNAL_STICKERS: - return "Use External Stickers"; - case Permission::SEND_MESSAGES_IN_THREADS: - return "Send Messages In Threads"; - case Permission::USE_EMBEDDED_ACTIVITIES: - return "Use Activities"; - case Permission::MODERATE_MEMBERS: - return "Timeout Members"; - // case Permission::VIEW_CREATOR_MONETIZATION_ANALYTICS: - // return ""; - case Permission::USE_SOUNDBOARD: - return "Use Soundboard"; - case Permission::CREATE_GUILD_EXPRESSIONS: - return "Create Expressions"; - case Permission::CREATE_EVENTS: - return "Create Events"; - case Permission::USE_EXTERNAL_SOUNDS: - return "Use External Sounds"; - case Permission::SEND_VOICE_MESSAGES: - return "Send Voice Messages"; - // case Permission::USE_CLYDE_AI: - // return ""; - case Permission::SET_VOICE_CHANNEL_STATUS: - return "Set Voice Channel Status"; - default: - return "Unknown Permission"; - } -} +const char *GetPermissionString(Permission perm); -constexpr const char *GetPermissionDescription(Permission perm) { - switch (perm) { - case Permission::NONE: - return ""; - case Permission::CREATE_INSTANT_INVITE: - return "Allows members to invite new people to this server."; - case Permission::KICK_MEMBERS: - return "Allows members to remove other members from this server. Kicked members will be able to rejoin if they have another invite."; - case Permission::BAN_MEMBERS: - return "Allows members to permanently ban other members from this server."; - case Permission::ADMINISTRATOR: - return "Members with this permission will have every permission and will also bypass all channel specific permissions or restrictions (for example, these members would get access to all private channels). This is a dangerous permission to grant."; - case Permission::MANAGE_CHANNELS: - return "Allows members to create, edit, or delete channels."; - case Permission::MANAGE_GUILD: - return "Allows members to change this server's name, switch regions, and add bots to this server."; - case Permission::ADD_REACTIONS: - return "Allows members to add new emoji reactions to a message. If this permission is disabled, members can still react using any existing reactions on a message."; - case Permission::VIEW_AUDIT_LOG: - return "Allows members to view a record of who made which changes in this server."; - case Permission::PRIORITY_SPEAKER: - return "Allows members to be more easily heard in voice channels. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the Push to Talk (Priority) keybind."; - case Permission::STREAM: - return "Allows members to share their video, screen share, or stream a game in this server."; - case Permission::VIEW_CHANNEL: - return "Allows members to view channels by default (excluding private channels)."; - case Permission::SEND_MESSAGES: - return "Allows members to send messages in text channels."; - case Permission::SEND_TTS_MESSAGES: - return "Allows members to send text-to-speech messages by starting a message with /tts. These messages can be heard by anyone focused on thsi channel."; - case Permission::MANAGE_MESSAGES: - return "Allows members to delete messages by other members or pin any message"; - case Permission::EMBED_LINKS: - return "Allows links that members share to show embedded content in text channels."; - case Permission::ATTACH_FILES: - return "Allows members to upload files or media in text channels."; - case Permission::READ_MESSAGE_HISTORY: - return "Allows members to read previous messages sent in channels. If this permission is disabled, members only see messages sent when they are online and focused on that channel."; - case Permission::MENTION_EVERYONE: - return "Allows members to use @everyone (everyone in the server) or @here (only online members in that channel). They can also @mention all roles, even if the role's \"Allow anyone to mention this role\" permission is disabled."; - case Permission::USE_EXTERNAL_EMOJIS: - return "Allows members to use emoji from other servers, if they're a Discord Nitro member"; - case Permission::VIEW_GUILD_INSIGHTS: - return "Allows members to view Server Insights, which shows data on community growth, engagement, and more."; - case Permission::CONNECT: - return "Allows members to join voice channels and hear others."; - case Permission::SPEAK: - return "Allows members to talk in voice channels. If this permission is disabled, members are default muted until somebody with the \"Mute Members\" permission un-mutes them."; - case Permission::MUTE_MEMBERS: - return "Allows members to mute other members in voice channels for everyone."; - case Permission::DEAFEN_MEMBERS: - return "Allows members to deafen other members in voice channels, which means they won't be able to speak or hear others."; - case Permission::MOVE_MEMBERS: - return "Allows members to move other members between voice channels that the member with the permission has access to."; - case Permission::USE_VAD: - return "Allows members to speak in voice channels by simply talking. If this permission is disabled, members are required to use Push-to-talk. Good for controlling background noise or noisy members."; - case Permission::CHANGE_NICKNAME: - return "Allows members to change their own nickname, a custom name for just this server."; - case Permission::MANAGE_NICKNAMES: - return "Allows members to change the nicknames of other members."; - case Permission::MANAGE_ROLES: - return "Allows members to create new roles and edit or delete roles lower than their highest role. Also allows members to change permissions of individual channels that they have access to."; - case Permission::MANAGE_WEBHOOKS: - return "Allows members to create, edit, or delete webhooks, which can post messages from other apps or sites into this server."; - case Permission::MANAGE_GUILD_EXPRESSIONS: - return "Allows members to add or remove custom emoji, stickers, and sounds in this server."; - case Permission::USE_APPLICATION_COMMANDS: - return "Allows members to use commands from applications, including slash commands and context menu commands."; - case Permission::MANAGE_EVENTS: - return "Allows members to edit and cancel events."; - case Permission::MANAGE_THREADS: - return "Allows members to rename, delete, close, and turn on slow mode for threads. They can also view private threads"; - case Permission::CREATE_PUBLIC_THREADS: - return "Allows members to create threads that everyone in a channel can view."; - case Permission::CREATE_PRIVATE_THREADS: - return "Allows members to create invite-only threads."; - case Permission::USE_EXTERNAL_STICKERS: - return "Allows members to use stickers from other servers, if they're a Discord Nitro member."; - case Permission::SEND_MESSAGES_IN_THREADS: - return "Allows members to send messages in threads."; - case Permission::USE_EMBEDDED_ACTIVITIES: - return "Allows members to use Activities in this server."; - case Permission::MODERATE_MEMBERS: - return "When you put a user in timeout they will not be able to send messages in chat, reply within threads, react to messages, or speak in voice or Stage channels."; - // case Permission::VIEW_CREATOR_MONETIZATION_ANALYTICS: - // return ""; - case Permission::USE_SOUNDBOARD: - return "Allows members to send sounds from server soundboard."; - case Permission::CREATE_GUILD_EXPRESSIONS: - return "Allows members to add custom emoji, stickers, and sounds in this server."; - case Permission::CREATE_EVENTS: - return "Allows members to create events."; - case Permission::USE_EXTERNAL_SOUNDS: - return "Allows members to use sounds from other servers, if they're a Discord Nitro member."; - case Permission::SEND_VOICE_MESSAGES: - return "Allows members to send voice messages."; - // case Permission::USE_CLYDE_AI: - // return ""; - case Permission::SET_VOICE_CHANNEL_STATUS: - return "Allows members to create and edit voice channel status."; - default: - return ""; - } -} +const char *GetPermissionDescription(Permission perm); From d6710e7f6bb01aeb1e8d8c4f7aaddc93ab2564d0 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 17 Jun 2024 14:22:19 -0300 Subject: [PATCH 19/37] Include locale directory --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cdfa8f30..f22c212f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,6 +84,7 @@ jobs: mkdir -p ${artifact_dir}/bin ${artifact_dir}/etc/ssl/certs ${artifact_dir}/lib ${artifact_dir}/share/glib-2.0/schemas cd build cp *.exe ../${artifact_dir}/bin + cp -r ./locale/ ../${artifact_dir}/bin cd .. cp /mingw64/etc/ssl/certs/ca-bundle.crt ${artifact_dir}/etc/ssl/certs cp -r /mingw64/lib/gdk-pixbuf-2.0 ${artifact_dir}/lib @@ -221,6 +222,7 @@ jobs: artifact_dir=${{ runner.workspace }}/artifactdir/abaddon-${{ matrix.buildtype }}-${GITHUB_SHA::7} mkdir -p "${artifact_dir}" cp "${{runner.workspace}}/build/abaddon" "${artifact_dir}/abaddon" + cp -r "${{runner.workspace}}/build/locale" "${artifact_dir}/locale" cp -r "${{ github.workspace }}/res/css" "${artifact_dir}/css" cp -r "${{ github.workspace }}/res/res" "${artifact_dir}/res" From 48a8f6ad8f60af02b5f9bd6f3c108f1686503573 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 24 Jun 2024 18:38:05 -0300 Subject: [PATCH 20/37] Include missing dependency on "linux" build job (silly me) --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f22c212f..d2c39660 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -200,6 +200,7 @@ jobs: cmake .. make sudo make install + sudo apt-get install gettext sudo apt-get install libgtkmm-3.0-dev sudo apt-get install libcurl4-gnutls-dev sudo apt-get install libopus-dev From d949a9e67dcde620e7122018566bbfee86152011 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Mon, 24 Jun 2024 19:58:19 -0300 Subject: [PATCH 21/37] Add Mac build workaround --- src/abaddon.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/abaddon.cpp b/src/abaddon.cpp index cf054a34..d9c223fc 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -1159,6 +1159,10 @@ int main(int argc, char **argv) { if (std::getenv("ABADDON_NO_FC") == nullptr) Platform::SetupFonts(); +// Mac building workaround +#ifdef setlocale +#undef setlocale +#endif char *systemLocale = std::setlocale(LC_ALL, ""); try { if (systemLocale != nullptr) { From ce848701270327831475229f13f77e2cb7e92be4 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Tue, 25 Jun 2024 22:47:20 -0300 Subject: [PATCH 22/37] guildsettings: Fix formattable error --- src/windows/guildsettings/memberspane.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windows/guildsettings/memberspane.cpp b/src/windows/guildsettings/memberspane.cpp index 7835bf55..e5b9ed85 100644 --- a/src/windows/guildsettings/memberspane.cpp +++ b/src/windows/guildsettings/memberspane.cpp @@ -220,7 +220,7 @@ void GuildSettingsMembersPaneInfo::SetUser(Snowflake user_id) { m_nickname.set_text(_("Nickname: ") + member.Nickname); m_nickname.set_visible(!member.Nickname.empty()); if (member.PremiumSince.has_value()) { - m_boosting.set_text(fmt::format(_("Boosting since {}"), FormatISO8601(*member.PremiumSince))); + m_boosting.set_text(fmt::format(_("Boosting since {}"), FormatISO8601(*member.PremiumSince).c_str())); m_boosting.show(); } else m_boosting.hide(); From 84d82fa47c61e6ed6971682a674810a0539f2003 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Tue, 25 Jun 2024 23:19:16 -0300 Subject: [PATCH 23/37] po: Add translation instructions --- po/TRANSLATING.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 po/TRANSLATING.md diff --git a/po/TRANSLATING.md b/po/TRANSLATING.md new file mode 100644 index 00000000..4f88632c --- /dev/null +++ b/po/TRANSLATING.md @@ -0,0 +1,46 @@ +# Working with translations + +Translators must first ensure that the tools coming with the gettext package are +installed. If that's not the case install it using your package manager. + +```sh +# On Debian/Ubuntu systems. Use your package manager +sudo apt install gettext +``` + +## Adding new translation files + +Adding new translation files is as easy as issuing a command. In the command +below, replace `LL_CC` for the country code you are translating the project to +and set an appropriate encoding to the country code. + +```sh +msginit -i po/abaddon.pot -o po/LL_CC.po --locale LL_CC[.ENCODING] +``` + +After that, you'll have to append the country code to `PO_NAMES` variable in +[CMakeLists.txt](CMakeLists.txt), build file responsible for compiling and +updating the translations. + +```cmake +# Insert the country code in alphabetical order. +# Replace LL_CC for the country code +list(APPEND PO_NAMES pt_BR LL_CC) +``` + +Then, compile the translation file by simply issuing the build command within +the build directory. Doing this won't only compile but it'll also update the .po +file in case there is any modification made to abaddon.pot. + +```sh +cmake --build build-dir/ +``` + +To ensure that everything is in place, run the program with `LANGUAGE` +environment variable set to the country code you are providing a translation +for: + +```sh +# This snippet assumes that the current directory is the build directory +LANGUAGE=pt_BR ./abaddon +``` From 522c254de4e4a74ab3e8f6cbb876a7ccdb1338f0 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Tue, 25 Jun 2024 23:29:50 -0300 Subject: [PATCH 24/37] Fix platform.cpp compile error on MacOS (silly me) --- src/platform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform.cpp b/src/platform.cpp index 164fdc36..ba450e8f 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -245,7 +245,7 @@ std::string Platform::FindStateCacheFolder() { std::string Platform::FindLocaleFolder() { // TODO: Add thorough locale folder resolution code (Apple) - return "./locale/" + return "./locale/"; } From 01a08794bd7bd6ba77c78546e28081e76b012cae Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Tue, 25 Jun 2024 23:43:34 -0300 Subject: [PATCH 25/37] ci: Add gettext dependency to MacOS build --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2c39660..14e3eacf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -145,6 +145,7 @@ jobs: - name: Fetch dependencies run: | brew install pkg-config + brew install gettext brew install gtkmm3 brew install nlohmann-json brew install jpeg From 7bbc89c7fa1be6331f57bf52bade7b0ddc819a5b Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Wed, 26 Jun 2024 00:13:16 -0300 Subject: [PATCH 26/37] MacOS failure to load libintl fix --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03c9ac50..026e0fc8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,10 +124,10 @@ target_link_libraries(abaddon ${NLOHMANN_JSON_LIBRARIES}) target_link_libraries(abaddon ${CMAKE_DL_LIBS}) # Sincerely, there ought be a better solution -if (MINGW) - target_link_libraries(abaddon intl) -else() +if (LINUX) target_link_libraries(abaddon ${INTL_LIBRARIES}) +else() + target_link_libraries(abaddon intl) endif() target_link_libraries(abaddon CURL::libcurl) From 612de7a2ba788583ba0851df855c872665ff1bc1 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Wed, 26 Jun 2024 09:44:29 -0300 Subject: [PATCH 27/37] Revert "ci: Add gettext dependency to MacOS build" This reverts commit 01a08794bd7bd6ba77c78546e28081e76b012cae. --- .github/workflows/ci.yml | 1 - CMakeLists.txt | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 14e3eacf..d2c39660 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -145,7 +145,6 @@ jobs: - name: Fetch dependencies run: | brew install pkg-config - brew install gettext brew install gtkmm3 brew install nlohmann-json brew install jpeg diff --git a/CMakeLists.txt b/CMakeLists.txt index 026e0fc8..03c9ac50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,10 +124,10 @@ target_link_libraries(abaddon ${NLOHMANN_JSON_LIBRARIES}) target_link_libraries(abaddon ${CMAKE_DL_LIBS}) # Sincerely, there ought be a better solution -if (LINUX) - target_link_libraries(abaddon ${INTL_LIBRARIES}) -else() +if (MINGW) target_link_libraries(abaddon intl) +else() + target_link_libraries(abaddon ${INTL_LIBRARIES}) endif() target_link_libraries(abaddon CURL::libcurl) From 069f75dca23e3703887e958446d38013d4990a2f Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Wed, 10 Jul 2024 19:44:46 -0300 Subject: [PATCH 28/37] Update i18n patch * Fix html typos * Update Brazilian Portuguese Translation --- po/abaddon.pot | 12 +- po/pt_BR.po | 205 ++++++++++++++------- src/windows/guildsettings/auditlogpane.cpp | 12 +- 3 files changed, 155 insertions(+), 74 deletions(-) diff --git a/po/abaddon.pot b/po/abaddon.pot index d4292741..cc278707 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -1406,27 +1406,27 @@ msgid "{} removed #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:150 -msgid "{} created channel overrides for #{}" +msgid "{} created channel overrides for #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:152 -msgid "{} created channel overrides for <#{}>" +msgid "{} created channel overrides for <#{}>" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:159 -msgid "{} updated channel overrides for #{}" +msgid "{} updated channel overrides for #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:161 -msgid "{} updated channel overrides for <#{}>" +msgid "{} updated channel overrides for <#{}>" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:168 -msgid "{} removed channel overrides for #{}" +msgid "{} removed channel overrides for #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:170 -msgid "{} removed channel overrides for <#{}>" +msgid "{} removed channel overrides for <#{}>" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:175 diff --git a/po/pt_BR.po b/po/pt_BR.po index 922a991a..daf86807 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -339,60 +339,110 @@ msgid "Allows members to invite new people to this server." msgstr "Permite que os membros convidem novas pessoas para este servidor." #: src/discord/permissions.cpp:125 -msgid "Allows members to remove other members from this server. Kicked members will be able to rejoin if they have another invite." -msgstr "Permite que os membros removam outros membros deste servidor. Membros expulsos poderão se juntar novamente se tiverem outro convite." +msgid "" +"Allows members to remove other members from this server. Kicked members will " +"be able to rejoin if they have another invite." +msgstr "" +"Permite que os membros removam outros membros deste servidor. Membros " +"expulsos poderão se juntar novamente se tiverem outro convite." #: src/discord/permissions.cpp:127 msgid "Allows members to permanently ban other members from this server." -msgstr "Permite que os membros banam permanentemente outros membros deste servidor." +msgstr "" +"Permite que os membros banam permanentemente outros membros deste servidor." #: src/discord/permissions.cpp:129 -msgid "Members with this permission will have every permission and will also bypass all channel specific permissions or restrictions (for example, these members would get access to all private channels). This is a dangerous permission to grant." -msgstr "Membros com esta permissão terão todas as permissões e também ignorarão todas as permissões ou restrições específicas de canal (por exemplo, esses membros terão acesso a todos os canais privados). Esta é uma permissão perigosa de conceder." +msgid "" +"Members with this permission will have every permission and will also bypass " +"all channel specific permissions or restrictions (for example, these members " +"would get access to all private channels). This is a dangerous permission to " +"grant." +msgstr "" +"Membros com esta permissão terão todas as permissões e também ignorarão " +"todas as permissões ou restrições específicas de canal (por exemplo, esses " +"membros terão acesso a todos os canais privados). Esta é uma permissão " +"perigosa de conceder." #: src/discord/permissions.cpp:131 msgid "Allows members to create, edit, or delete channels." msgstr "Permite que os membros criem, editem ou excluam canais." #: src/discord/permissions.cpp:133 -msgid "Allows members to change this server's name, switch regions, and add bots to this server." -msgstr "Permite que os membros mudem o nome deste servidor, alterem regiões e adicionem bots a este servidor." +msgid "" +"Allows members to change this server's name, switch regions, and add bots to " +"this server." +msgstr "" +"Permite que os membros mudem o nome deste servidor, alterem regiões e " +"adicionem bots a este servidor." #: src/discord/permissions.cpp:135 -msgid "Allows members to add new emoji reactions to a message. If this permission is disabled, members can still react using any existing reactions on a message." -msgstr "Permite que os membros adicionem novas reações de emoji a uma mensagem. Se esta permissão estiver desativada, os membros ainda poderão reagir usando qualquer reação existente em uma mensagem." +msgid "" +"Allows members to add new emoji reactions to a message. If this permission " +"is disabled, members can still react using any existing reactions on a " +"message." +msgstr "" +"Permite que os membros adicionem novas reações de emoji a uma mensagem. Se " +"esta permissão estiver desativada, os membros ainda poderão reagir usando " +"qualquer reação existente em uma mensagem." #: src/discord/permissions.cpp:137 -msgid "Allows members to view a record of who made which changes in this server." -msgstr "Permite que os membros vejam um registro de quem fez quais mudanças neste servidor." +msgid "" +"Allows members to view a record of who made which changes in this server." +msgstr "" +"Permite que os membros vejam um registro de quem fez quais mudanças neste " +"servidor." #: src/discord/permissions.cpp:139 -msgid "Allows members to be more easily heard in voice channels. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the Push to Talk (Priority) keybind." -msgstr "Permite que os membros sejam mais facilmente ouvidos em canais de voz. Quando ativado, o volume dos outros sem essa permissão será automaticamente reduzido. O Orador Prioritário é ativado usando a tecla de atalho Push to Talk (Prioridade)." +msgid "" +"Allows members to be more easily heard in voice channels. When activated, " +"the volume of others without this permission will be automatically lowered. " +"Priority Speaker is activated by using the Push to Talk (Priority) keybind." +msgstr "" +"Permite que os membros sejam mais facilmente ouvidos em canais de voz. " +"Quando ativado, o volume dos outros sem essa permissão será automaticamente " +"reduzido. O Orador Prioritário é ativado usando a tecla de atalho Push to " +"Talk (Prioridade)." #: src/discord/permissions.cpp:141 -msgid "Allows members to share their video, screen share, or stream a game in this server." -msgstr "Permite que os membros compartilhem seu vídeo, compartilhem a tela ou façam streaming de um jogo neste servidor." +msgid "" +"Allows members to share their video, screen share, or stream a game in this " +"server." +msgstr "" +"Permite que os membros compartilhem seu vídeo, compartilhem a tela ou façam " +"streaming de um jogo neste servidor." #: src/discord/permissions.cpp:143 -msgid "Allows members to view channels by default (excluding private channels)." -msgstr "Permite que os membros visualizem canais por padrão (excluindo canais privados)." +msgid "" +"Allows members to view channels by default (excluding private channels)." +msgstr "" +"Permite que os membros visualizem canais por padrão (excluindo canais " +"privados)." #: src/discord/permissions.cpp:145 msgid "Allows members to send messages in text channels." msgstr "Permite que os membros enviem mensagens em canais de texto." #: src/discord/permissions.cpp:147 -msgid "Allows members to send text-to-speech messages by starting a message with /tts. These messages can be heard by anyone focused on this channel." -msgstr "Permite que os membros enviem mensagens de texto para fala começando uma mensagem com /tts. Essas mensagens podem ser ouvidas por qualquer pessoa focada nesse canal." +msgid "" +"Allows members to send text-to-speech messages by starting a message with /" +"tts. These messages can be heard by anyone focused on this channel." +msgstr "" +"Permite que os membros enviem mensagens de texto para fala começando uma " +"mensagem com /tts. Essas mensagens podem ser ouvidas por qualquer pessoa " +"focada nesse canal." #: src/discord/permissions.cpp:149 msgid "Allows members to delete messages by other members or pin any message." -msgstr "Permite que os membros excluam mensagens de outros membros ou fixem qualquer mensagem." +msgstr "" +"Permite que os membros excluam mensagens de outros membros ou fixem qualquer " +"mensagem." #: src/discord/permissions.cpp:151 -msgid "Allows links that members share to show embedded content in text channels." -msgstr "Permite que os links compartilhados pelos membros mostrem conteúdo incorporado nos canais de texto." +msgid "" +"Allows links that members share to show embedded content in text channels." +msgstr "" +"Permite que os links compartilhados pelos membros mostrem conteúdo " +"incorporado nos canais de texto." #: src/discord/permissions.cpp:153 msgid "Allows members to upload files or media in text channels." @@ -416,21 +466,24 @@ msgid "" msgstr "" "Permite que os membros usem @everyone (todos no servidor) ou @here (apenas " "membros online naquele canal). Eles também podem mencionar todas as funções, " -"mesmo que a permissão \"Permitir que qualquer um mencione esta função\" esteja desativada." +"mesmo que a permissão \"Permitir que qualquer um mencione esta função\" " +"esteja desativada." #: src/discord/permissions.cpp:159 msgid "" "Allows members to use emoji from other servers, if they're a Discord Nitro " "member." msgstr "" -"Permite que os membros usem emojis de outros servidores, se forem membros do Discord Nitro." +"Permite que os membros usem emojis de outros servidores, se forem membros do " +"Discord Nitro." #: src/discord/permissions.cpp:161 msgid "" "Allows members to view Server Insights, which shows data on community " "growth, engagement, and more." msgstr "" -"Permite que os membros visualizem os Insights do Servidor, que mostram dados sobre o crescimento da comunidade, engajamento e mais." +"Permite que os membros visualizem os Insights do Servidor, que mostram dados " +"sobre o crescimento da comunidade, engajamento e mais." #: src/discord/permissions.cpp:163 msgid "Allows members to join voice channels and hear others." @@ -443,27 +496,29 @@ msgid "" "permission unmutes them." msgstr "" "Permite que os membros falem em canais de voz. Se esta permissão estiver " -"desativada, os membros serão silenciados por padrão até que alguém com a permissão de " -"\"Silenciar Membros\" os ative." +"desativada, os membros serão silenciados por padrão até que alguém com a " +"permissão de \"Silenciar Membros\" os ative." #: src/discord/permissions.cpp:167 msgid "Allows members to mute other members in voice channels for everyone." -msgstr "Permite que os membros silenciem outros membros em canais de voz para todos." +msgstr "" +"Permite que os membros silenciem outros membros em canais de voz para todos." #: src/discord/permissions.cpp:169 msgid "" "Allows members to deafen other members in voice channels, which means they " "won't be able to speak or hear others." msgstr "" -"Permite que os membros ensurdecam outros membros em canais de voz, o que significa que eles não " -"poderão falar ou ouvir os outros." +"Permite que os membros ensurdecam outros membros em canais de voz, o que " +"significa que eles não poderão falar ou ouvir os outros." #: src/discord/permissions.cpp:171 msgid "" "Allows members to move other members between voice channels that the member " "with the permission has access to." msgstr "" -"Permite que os membros movam outros membros entre canais de voz aos quais o membro com a permissão tem acesso." +"Permite que os membros movam outros membros entre canais de voz aos quais o " +"membro com a permissão tem acesso." #: src/discord/permissions.cpp:173 msgid "" @@ -472,14 +527,16 @@ msgid "" "controlling background noise or noisy members." msgstr "" "Permite que os membros falem em canais de voz simplesmente falando. Se esta " -"permissão estiver desativada, os membros precisam usar o Push-to-talk. Bom para " -"controlar o ruído de fundo ou membros barulhentos." +"permissão estiver desativada, os membros precisam usar o Push-to-talk. Bom " +"para controlar o ruído de fundo ou membros barulhentos." #: src/discord/permissions.cpp:175 msgid "" "Allows members to change their own nickname, a custom name for just this " "server." -msgstr "Permite que os membros mudem seus próprios apelidos, um nome personalizado apenas para este servidor." +msgstr "" +"Permite que os membros mudem seus próprios apelidos, um nome personalizado " +"apenas para este servidor." #: src/discord/permissions.cpp:177 msgid "Allows members to change the nicknames of other members." @@ -491,33 +548,33 @@ msgid "" "highest role. Also allows members to change permissions of individual " "channels that they have access to." msgstr "" -"Permite que os membros criem novas funções e editem ou excluam funções abaixo de sua " -"função mais alta. Também permite que os membros alterem permissões de canais individuais " -"que eles têm acesso." +"Permite que os membros criem novas funções e editem ou excluam funções " +"abaixo de sua função mais alta. Também permite que os membros alterem " +"permissões de canais individuais que eles têm acesso." #: src/discord/permissions.cpp:181 msgid "" "Allows members to create, edit, or delete webhooks, which can post messages " "from other apps or sites into this server." msgstr "" -"Permite que os membros criem, editem ou excluam webhooks, que podem postar mensagens " -"de outros aplicativos ou sites neste servidor." +"Permite que os membros criem, editem ou excluam webhooks, que podem postar " +"mensagens de outros aplicativos ou sites neste servidor." #: src/discord/permissions.cpp:183 msgid "" "Allows members to add or remove custom emoji, stickers, and sounds in this " "server." msgstr "" -"Permite que os membros adicionem ou removam emojis, figurinhas e sons personalizados neste " -"servidor." +"Permite que os membros adicionem ou removam emojis, figurinhas e sons " +"personalizados neste servidor." #: src/discord/permissions.cpp:185 msgid "" "Allows members to use commands from applications, including slash commands " "and context menu commands." msgstr "" -"Permite que os membros usem comandos de aplicativos, incluindo comandos de barra " -"e comandos do menu de contexto." +"Permite que os membros usem comandos de aplicativos, incluindo comandos de " +"barra e comandos do menu de contexto." #: src/discord/permissions.cpp:187 msgid "Allows members to edit and cancel events." @@ -528,12 +585,13 @@ msgid "" "Allows members to rename, delete, close, and turn on slow mode for threads. " "They can also view private threads." msgstr "" -"Permite que os membros renomeiem, excluam, fechem e ativem o modo lento para tópicos. " -"Também permite que vejam tópicos privados." +"Permite que os membros renomeiem, excluam, fechem e ativem o modo lento para " +"tópicos. Também permite que vejam tópicos privados." #: src/discord/permissions.cpp:191 msgid "Allows members to create threads that everyone in a channel can view." -msgstr "Permite que os membros criem tópicos que todos em um canal possam visualizar." +msgstr "" +"Permite que os membros criem tópicos que todos em um canal possam visualizar." #: src/discord/permissions.cpp:193 msgid "Allows members to create invite-only threads." @@ -544,7 +602,8 @@ msgid "" "Allows members to use stickers from other servers, if they're a Discord " "Nitro member." msgstr "" -"Permite que os membros usem figurinhas de outros servidores, se forem membros do Discord Nitro." +"Permite que os membros usem figurinhas de outros servidores, se forem " +"membros do Discord Nitro." #: src/discord/permissions.cpp:197 msgid "Allows members to send messages in threads." @@ -561,7 +620,8 @@ msgid "" "channels." msgstr "" "Quando você coloca um usuário em timeout, ele não poderá enviar mensagens no " -"chat, responder em tópicos, reagir a mensagens ou falar em canais de voz ou Stage." +"chat, responder em tópicos, reagir a mensagens ou falar em canais de voz ou " +"Stage." #: src/discord/permissions.cpp:205 msgid "Allows members to send sounds from server soundboard." @@ -570,7 +630,9 @@ msgstr "Permite que os membros enviem sons da mesa de som do servidor." #: src/discord/permissions.cpp:207 msgid "" "Allows members to add custom emoji, stickers, and sounds in this server." -msgstr "Permite que os membros adicionem emojis, figurinhas e sons personalizados neste servidor." +msgstr "" +"Permite que os membros adicionem emojis, figurinhas e sons personalizados " +"neste servidor." #: src/discord/permissions.cpp:209 msgid "Allows members to create events." @@ -581,7 +643,8 @@ msgid "" "Allows members to use sounds from other servers, if they're a Discord Nitro " "member." msgstr "" -"Permite que os membros usem sons de outros servidores, se forem membros do Discord Nitro." +"Permite que os membros usem sons de outros servidores, se forem membros do " +"Discord Nitro." #: src/discord/permissions.cpp:213 msgid "Allows members to send voice messages." @@ -1460,28 +1523,28 @@ msgid "{} removed #{}" msgstr "{} removeu #{}" #: src/windows/guildsettings/auditlogpane.cpp:150 -msgid "{} created channel overrides for #{}" -msgstr "{} criou subsituições de canal para #{}" +msgid "{} created channel overrides for #{}" +msgstr "{} criou substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:152 -msgid "{} created channel overrides for <#{}>" -msgstr "{} criou subsituições de canal para <#{}>" +msgid "{} created channel overrides for <#{}>" +msgstr "{} criou substituições de canal para <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:159 -msgid "{} updated channel overrides for #{}" -msgstr "{} atualizou as substituições de canal para #{}" +msgid "{} updated channel overrides for #{}" +msgstr "{} atualizou substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:161 -msgid "{} updated channel overrides for <#{}>" -msgstr "{} atualizou as substituições de canal para <#{}>" +msgid "{} updated channel overrides for <#{}>" +msgstr "{} atualizou substituições de canal para <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:168 -msgid "{} removed channel overrides for #{}" -msgstr "{} removeu as substituições de canal para #{}" +msgid "{} removed channel overrides for #{}" +msgstr "{} removeu substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:170 -msgid "{} removed channel overrides for <#{}>" -msgstr "{} removeu as substituições de canal para #{}" +msgid "{} removed channel overrides for <#{}>" +msgstr "{} removeu substituições de canal para <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:175 msgid "{} kicked {}" @@ -1979,6 +2042,24 @@ msgstr "Eventos" msgid "Failed to set role name" msgstr "Falhou em definir o nome de um cargo" +#~ msgid "{} created channel overrides for #{}" +#~ msgstr "{} criou subsituições de canal para #{}" + +#~ msgid "{} created channel overrides for <#{}>" +#~ msgstr "{} criou subsituições de canal para <#{}>" + +#~ msgid "{} updated channel overrides for #{}" +#~ msgstr "{} atualizou as substituições de canal para #{}" + +#~ msgid "{} updated channel overrides for <#{}>" +#~ msgstr "{} atualizou as substituições de canal para <#{}>" + +#~ msgid "{} removed channel overrides for #{}" +#~ msgstr "{} removeu as substituições de canal para #{}" + +#~ msgid "{} removed channel overrides for <#{}>" +#~ msgstr "{} removeu as substituições de canal para #{}" + #~ msgid "" #~ "{} just boosted the server {} times! {} " #~ "has achieved Level {}}!" diff --git a/src/windows/guildsettings/auditlogpane.cpp b/src/windows/guildsettings/auditlogpane.cpp index 1a17deab..4eb481f3 100644 --- a/src/windows/guildsettings/auditlogpane.cpp +++ b/src/windows/guildsettings/auditlogpane.cpp @@ -147,27 +147,27 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); - markup = fmt::format(_("{} created channel overrides for #{}"), user_markup.c_str(), channel_name); + markup = fmt::format(_("{} created channel overrides for #{}"), user_markup.c_str(), channel_name); } else { - markup = fmt::format(_("{} created channel overrides for <#{}>"), entry.TargetID.c_str()); + markup = fmt::format(_("{} created channel overrides for <#{}>"), entry.TargetID.c_str()); } } break; case AuditLogActionType::CHANNEL_OVERWRITE_UPDATE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); - markup = fmt::format(_("{} updated channel overrides for #{}"), user_markup.c_str(), channel_name); + markup = fmt::format(_("{} updated channel overrides for #{}"), user_markup.c_str(), channel_name); } else { - markup = fmt::format(_("{} updated channel overrides for <#{}>"), entry.TargetID.c_str()); + markup = fmt::format(_("{} updated channel overrides for <#{}>"), entry.TargetID.c_str()); } } break; case AuditLogActionType::CHANNEL_OVERWRITE_DELETE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); - markup = fmt::format(_("{} removed channel overrides for #{}"), user_markup.c_str(), channel_name); + markup = fmt::format(_("{} removed channel overrides for #{}"), user_markup.c_str(), channel_name); } else { - markup = fmt::format(_("{} removed channel overrides for <#{}>"), entry.TargetID.c_str()); + markup = fmt::format(_("{} removed channel overrides for <#{}>"), entry.TargetID.c_str()); } } break; case AuditLogActionType::MEMBER_KICK: { From 52bb66fb64bc56cbab961687cbcca963a1269f08 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Wed, 10 Jul 2024 21:08:15 -0300 Subject: [PATCH 29/37] Update i18n patch * Add i18n to the stages functionality * Update the Brazilian Portuguese Translation --- po/POTFILES | 4 +- po/abaddon.pot | 292 ++++++++++++----- po/pt_BR.po | 310 +++++++++++++----- .../channellist/channellisttree.cpp | 4 +- src/windows/voice/voicewindow.cpp | 57 ++-- 5 files changed, 470 insertions(+), 197 deletions(-) diff --git a/po/POTFILES b/po/POTFILES index 280afc0c..1f26836e 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -22,7 +22,6 @@ src/windows/pinnedwindow.cpp src/windows/profilewindow.cpp src/windows/threadswindow.cpp src/windows/voicesettingswindow.cpp -src/windows/voicewindow.cpp src/windows/profile/mutualguildspane.cpp src/windows/profile/userinfopane.cpp src/windows/guildsettings/auditlogpane.cpp @@ -31,4 +30,5 @@ src/windows/guildsettings/emojispane.cpp src/windows/guildsettings/infopane.cpp src/windows/guildsettings/invitespane.cpp src/windows/guildsettings/memberspane.cpp -src/windows/guildsettings/rolespane.cpp \ No newline at end of file +src/windows/guildsettings/rolespane.cpp +src/windows/voice/voicewindow.cpp \ No newline at end of file diff --git a/po/abaddon.pot b/po/abaddon.pot index cc278707..8d9ae256 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-17 13:07-0300\n" +"POT-Creation-Date: 2024-07-10 20:59-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,6 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: src/abaddon.cpp:216 +#, c++-format msgid "css failed parsing ({})" msgstr "" @@ -55,6 +56,7 @@ msgid "Discord rejected your token" msgstr "" #: src/abaddon.cpp:474 +#, c++-format msgid "Lost connection with Discord's gateway. Try reconnecting (code {})" msgstr "" @@ -113,18 +115,22 @@ msgid "Remove From Group" msgstr "" #: src/abaddon.cpp:1003 +#, c++-format msgid "Are you sure you want to leave {}?" msgstr "" #: src/abaddon.cpp:1013 +#, c++-format msgid "Are you sure you want to kick {}?" msgstr "" #: src/abaddon.cpp:1023 +#, c++-format msgid "Are you sure you want to ban {}?" msgstr "" #: src/abaddon.cpp:1120 +#, c++-format msgid "css failed to load ({})" msgstr "" @@ -634,6 +640,7 @@ msgid "Competing in" msgstr "" #: src/dialogs/setstatus.cpp:57 +#, c++-format msgid "How are you, {}?" msgstr "" @@ -654,6 +661,7 @@ msgid "Verification Required" msgstr "" #: src/dialogs/verificationgate.cpp:14 src/components/friendslist.cpp:258 +#: src/windows/voice/voicewindow.cpp:30 msgid "Accept" msgstr "" @@ -690,14 +698,17 @@ msgid "Enter alt-text" msgstr "" #: src/components/chatinputindicator.cpp:119 +#, c++-format msgid "{} is typing..." msgstr "" #: src/components/chatinputindicator.cpp:121 +#, c++-format msgid "{} and {} are typing" msgstr "" #: src/components/chatinputindicator.cpp:125 +#, c++-format msgid "{}, {}, {} and {} are typing..." msgstr "" @@ -754,41 +765,49 @@ msgid "message pinned" msgstr "" #: src/components/chatmessage.cpp:219 +#, c++-format msgid "used {} with {}" msgstr "" #: src/components/chatmessage.cpp:234 +#, c++-format msgid "" "{} added {}" msgstr "" #: src/components/chatmessage.cpp:244 +#, c++-format msgid "" "{} left" msgstr "" #: src/components/chatmessage.cpp:246 +#, c++-format msgid "" "{} removed {}" msgstr "" #: src/components/chatmessage.cpp:253 +#, c++-format msgid "{} changed the name to {}" msgstr "" #: src/components/chatmessage.cpp:258 +#, c++-format msgid "{} changed the channel icon" msgstr "" #: src/components/chatmessage.cpp:266 +#, c++-format msgid "" "{} just boosted the server {} times! {} has " "achieved Level {}!" msgstr "" #: src/components/chatmessage.cpp:276 +#, c++-format msgid "" "{} has added {} to this channel. Its most " "important updates will show up here." @@ -824,19 +843,22 @@ msgid "" msgstr "" #: src/components/chatmessage.cpp:300 +#, c++-format msgid "{} started a thread: " msgstr "" #: src/components/chatmessage.cpp:307 +#, c++-format msgid "{} started a thread: {}" msgstr "" #: src/components/chatmessage.cpp:714 src/components/chatmessage.cpp:737 -#: src/windows/voicewindow.cpp:49 src/windows/guildsettings/auditlogpane.cpp:45 +#: src/windows/guildsettings/auditlogpane.cpp:45 msgid "Unknown User" msgstr "" #: src/components/chatmessage.cpp:730 +#, c++-format msgid "{} used /{}" msgstr "" @@ -857,6 +879,7 @@ msgid "reply unavailable" msgstr "" #: src/components/chatwindow.cpp:334 +#, c++-format msgid "Replying to {}" msgstr "" @@ -885,18 +908,22 @@ msgid "Failed to accept" msgstr "" #: src/components/friendslist.cpp:129 +#, c++-format msgid "Are you sure you want to unblock {}?" msgstr "" #: src/components/friendslist.cpp:132 +#, c++-format msgid "Are you sure you want to remove {}?" msgstr "" #: src/components/friendslist.cpp:135 +#, c++-format msgid "Are you sure you want to ignore {}?" msgstr "" #: src/components/friendslist.cpp:138 +#, c++-format msgid "Are you sure you want to cancel your request to {}?" msgstr "" @@ -929,6 +956,7 @@ msgid "Success!" msgstr "" #: src/components/friendslist.cpp:237 +#, c++-format msgid "Failed: {}" msgstr "" @@ -949,10 +977,12 @@ msgid "You may bypass slowmode." msgstr "" #: src/components/ratelimitindicator.cpp:93 +#, c++-format msgid "{}s" msgstr "" #: src/components/ratelimitindicator.cpp:96 +#, c++-format msgid "Slowmode is enabled. Members can send one message every {} seconds" msgstr "" @@ -983,8 +1013,8 @@ msgstr "" #: src/components/channellist/channellisttree.cpp:19 #: src/components/channellist/channellisttree.cpp:23 #: src/components/channellist/channellisttree.cpp:24 -#: src/components/channellist/channellisttree.cpp:35 -#: src/components/channellist/channellisttree.cpp:42 +#: src/components/channellist/channellisttree.cpp:37 +#: src/components/channellist/channellisttree.cpp:44 msgid "_Copy ID" msgstr "" @@ -993,14 +1023,14 @@ msgid "View _Settings" msgstr "" #: src/components/channellist/channellisttree.cpp:21 -#: src/components/channellist/channellisttree.cpp:43 +#: src/components/channellist/channellisttree.cpp:45 msgid "_Leave" msgstr "" #: src/components/channellist/channellisttree.cpp:22 #: src/components/channellist/channellisttree.cpp:25 -#: src/components/channellist/channellisttree.cpp:33 -#: src/components/channellist/channellisttree.cpp:46 +#: src/components/channellist/channellisttree.cpp:35 +#: src/components/channellist/channellisttree.cpp:48 msgid "Mark as _Read" msgstr "" @@ -1010,65 +1040,67 @@ msgid "Open in New _Tab" msgstr "" #: src/components/channellist/channellisttree.cpp:31 +#: src/components/channellist/channellisttree.cpp:33 msgid "_Join" msgstr "" #: src/components/channellist/channellisttree.cpp:32 +#: src/components/channellist/channellisttree.cpp:34 msgid "_Disconnect" msgstr "" -#: src/components/channellist/channellisttree.cpp:34 +#: src/components/channellist/channellisttree.cpp:36 msgid "Open _Chat" msgstr "" -#: src/components/channellist/channellisttree.cpp:39 +#: src/components/channellist/channellisttree.cpp:41 msgid "Join _Voice" msgstr "" -#: src/components/channellist/channellisttree.cpp:40 +#: src/components/channellist/channellisttree.cpp:42 msgid "_Disconnect Voice" msgstr "" -#: src/components/channellist/channellisttree.cpp:44 +#: src/components/channellist/channellisttree.cpp:46 msgid "_Archive" msgstr "" -#: src/components/channellist/channellisttree.cpp:45 +#: src/components/channellist/channellisttree.cpp:47 msgid "_Unarchive" msgstr "" -#: src/components/channellist/channellisttree.cpp:242 +#: src/components/channellist/channellisttree.cpp:259 msgid "Are you sure you want to leave this group DM?" msgstr "" -#: src/components/channellist/channellisttree.cpp:280 +#: src/components/channellist/channellisttree.cpp:297 msgid "Are you sure you want to leave this thread?" msgstr "" -#: src/components/channellist/channellisttree.cpp:1170 +#: src/components/channellist/channellisttree.cpp:1199 msgid "Direct Messages" msgstr "" -#: src/components/channellist/channellisttree.cpp:1338 +#: src/components/channellist/channellisttree.cpp:1371 msgid "Close" msgstr "" -#: src/components/channellist/channellisttree.cpp:1338 +#: src/components/channellist/channellisttree.cpp:1371 msgid "Leave" msgstr "" -#: src/components/channellist/channellisttree.cpp:1392 -#: src/components/channellist/channellisttree.cpp:1406 -#: src/components/channellist/channellisttree.cpp:1451 -#: src/components/channellist/channellisttree.cpp:1476 +#: src/components/channellist/channellisttree.cpp:1425 +#: src/components/channellist/channellisttree.cpp:1439 +#: src/components/channellist/channellisttree.cpp:1503 +#: src/components/channellist/channellisttree.cpp:1528 msgid "Unmute" msgstr "" -#: src/components/channellist/channellisttree.cpp:1394 -#: src/components/channellist/channellisttree.cpp:1408 -#: src/components/channellist/channellisttree.cpp:1453 -#: src/components/channellist/channellisttree.cpp:1478 -#: src/windows/voicewindow.cpp:22 src/windows/voicewindow.cpp:93 +#: src/components/channellist/channellisttree.cpp:1427 +#: src/components/channellist/channellisttree.cpp:1441 +#: src/components/channellist/channellisttree.cpp:1505 +#: src/components/channellist/channellisttree.cpp:1530 +#: src/windows/voice/voicewindow.cpp:23 msgid "Mute" msgstr "" @@ -1100,7 +1132,7 @@ msgstr "" msgid "Connect" msgstr "" -#: src/windows/mainwindow.cpp:260 src/windows/voicewindow.cpp:97 +#: src/windows/mainwindow.cpp:260 src/windows/voice/voicewindow.cpp:28 msgid "Disconnect" msgstr "" @@ -1132,7 +1164,7 @@ msgstr "" msgid "Dump ready message" msgstr "" -#: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:99 +#: src/windows/mainwindow.cpp:288 src/windows/voice/voicewindow.cpp:33 msgid "View" msgstr "" @@ -1177,6 +1209,7 @@ msgid "Mutual Friends" msgstr "" #: src/windows/profilewindow.cpp:113 +#, c++-format msgid "Originally known as {}" msgstr "" @@ -1189,6 +1222,7 @@ msgid "Private" msgstr "" #: src/windows/threadswindow.cpp:16 +#, c++-format msgid "#{} - Threads" msgstr "" @@ -1246,61 +1280,11 @@ msgstr "" msgid "Bitrate" msgstr "" -#: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:243 +#: src/windows/voicesettingswindow.cpp:133 +#: src/windows/voice/voicewindow.cpp:182 msgid "Gain" msgstr "" -#: src/windows/voicewindow.cpp:94 -msgid "Deafen" -msgstr "" - -#: src/windows/voicewindow.cpp:95 -msgid "Suppress Noise" -msgstr "" - -#: src/windows/voicewindow.cpp:96 -msgid "Mix Mono" -msgstr "" - -#: src/windows/voicewindow.cpp:100 -msgid "More _Settings" -msgstr "" - -#: src/windows/voicewindow.cpp:159 -msgid "" -"Voice Activation Detection method\n" -"Gate - Simple volume threshold. Slider changes threshold\n" -"RNNoise - Heavier on CPU. Slider changes probability threshold" -msgstr "" - -#: src/windows/voicewindow.cpp:162 -msgid "Gate" -msgstr "" - -#: src/windows/voicewindow.cpp:164 -msgid "RNNoise" -msgstr "" - -#: src/windows/voicewindow.cpp:242 -msgid "Threshold" -msgstr "" - -#: src/windows/voicewindow.cpp:252 -msgid "VAD Method" -msgstr "" - -#: src/windows/voicewindow.cpp:253 -msgid "Output Device" -msgstr "" - -#: src/windows/voicewindow.cpp:254 -msgid "Input Device" -msgstr "" - -#: src/windows/voicewindow.cpp:268 -msgid "Input Settings" -msgstr "" - #: src/windows/profile/mutualguildspane.cpp:39 msgid "Unknown Server" msgstr "" @@ -1323,6 +1307,7 @@ msgid "Account created: " msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:56 +#, c++-format msgid "{} made changes to {}" msgstr "" @@ -1331,6 +1316,7 @@ msgid "Set the server icon" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:67 +#, c++-format msgid "Set the server name to {}" msgstr "" @@ -1339,15 +1325,18 @@ msgid "Set the server name" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:77 +#, c++-format msgid "{} created a voice channel #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:80 +#, c++-format msgid "{} created a text channel #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:88 #: src/windows/guildsettings/auditlogpane.cpp:443 +#, c++-format msgid "Set the name to {}" msgstr "" @@ -1362,26 +1351,31 @@ msgid "Unmarked the channel as NSFW" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:101 +#, c++-format msgid "{} made changes to #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:104 +#, c++-format msgid "{} made changes to <#{}>" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:114 #: src/windows/guildsettings/auditlogpane.cpp:356 #: src/windows/guildsettings/auditlogpane.cpp:470 +#, c++-format msgid "Changed the name from {} to {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:118 #: src/windows/guildsettings/auditlogpane.cpp:249 #: src/windows/guildsettings/auditlogpane.cpp:327 +#, c++-format msgid "Changed the name to {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:123 +#, c++-format msgid "Changed the topic to {}" msgstr "" @@ -1398,58 +1392,72 @@ msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:138 #: src/windows/guildsettings/auditlogpane.cpp:454 #: src/windows/guildsettings/auditlogpane.cpp:480 +#, c++-format msgid "Set slowmode to {} seconds" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:144 +#, c++-format msgid "{} removed #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:150 +#, c++-format msgid "{} created channel overrides for #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:152 +#, c++-format msgid "{} created channel overrides for <#{}>" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:159 +#, c++-format msgid "{} updated channel overrides for #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:161 +#, c++-format msgid "{} updated channel overrides for <#{}>" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:168 +#, c++-format msgid "{} removed channel overrides for #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:170 +#, c++-format msgid "{} removed channel overrides for <#{}>" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:175 +#, c++-format msgid "{} kicked {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:178 +#, c++-format msgid "{} pruned {} members" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:179 +#, c++-format msgid "For {} days of inactivity" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:183 +#, c++-format msgid "{} banned {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:187 +#, c++-format msgid "{} removed the ban for {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:191 +#, c++-format msgid "{} updated {}" msgstr "" @@ -1470,42 +1478,52 @@ msgid "Unmuted them" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:200 +#, c++-format msgid "Set their nickname to {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:206 +#, c++-format msgid "{} updated roles for {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:211 +#, c++-format msgid "Removed a role {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:213 +#, c++-format msgid "Added a role {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:221 +#, c++-format msgid "{} moved a user to {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:224 +#, c++-format msgid "{} moved {} users to {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:229 +#, c++-format msgid "{} disconnected {} users from voice" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:234 +#, c++-format msgid "{} added {} to the server" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:238 +#, c++-format msgid "{} created the role {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:242 +#, c++-format msgid "{} updated the role {}" msgstr "" @@ -1514,6 +1532,7 @@ msgid "Removed the color" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:255 +#, c++-format msgid "Set the color to {}" msgstr "" @@ -1538,14 +1557,17 @@ msgid "Hoisted" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:267 +#, c++-format msgid "{} deleted the role {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:271 +#, c++-format msgid "{} created an invite {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:277 +#, c++-format msgid "For channel {}" msgstr "" @@ -1554,6 +1576,7 @@ msgid "Which has unlimited uses" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:283 +#, c++-format msgid "Which has {} uses" msgstr "" @@ -1566,22 +1589,27 @@ msgid "With temporary off" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:294 +#, c++-format msgid "{} deleted an invite {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:299 +#, c++-format msgid "{} created the webhook {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:306 +#, c++-format msgid "With channel #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:319 +#, c++-format msgid "{} updated the webhook {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:322 +#, c++-format msgid "{} updated a webhook" msgstr "" @@ -1590,6 +1618,7 @@ msgid "Changed the avatar" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:334 +#, c++-format msgid "Changed the channel to #{}" msgstr "" @@ -1598,60 +1627,74 @@ msgid "Changed the channel" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:343 +#, c++-format msgid "{} deleted the webhook {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:348 +#, c++-format msgid "{} created the emoji {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:353 +#, c++-format msgid "{} updated the emoji {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:361 +#, c++-format msgid "{} deleted the emoji {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:370 +#, c++-format msgid "{} deleted {} messages in #{}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:374 +#, c++-format msgid "{} deleted {} messages" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:380 +#, c++-format msgid "{} pinned a message by {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:384 +#, c++-format msgid "{} unpinned a message by {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:388 +#, c++-format msgid "{} started the stage for {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:396 #: src/windows/guildsettings/auditlogpane.cpp:416 +#, c++-format msgid "Set the topic to {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:401 #: src/windows/guildsettings/auditlogpane.cpp:421 +#, c++-format msgid "Set the privacy level to {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:408 +#, c++-format msgid "{} updated the stage for {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:428 +#, c++-format msgid "{} ended the stage for {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:434 +#, c++-format msgid "{} created a thread {}" msgstr "" @@ -1667,6 +1710,7 @@ msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:448 #: src/windows/guildsettings/auditlogpane.cpp:474 +#, c++-format msgid "Set auto archive duration to {} minutes" msgstr "" @@ -1681,10 +1725,12 @@ msgid "Unlocked the thread, allowing it to be unarchived by non-moderators" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:462 +#, c++-format msgid "{} made changes to the thread {}" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:488 +#, c++-format msgid "{} deleted the thread {}" msgstr "" @@ -1693,6 +1739,7 @@ msgid "Unknown action" msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:500 +#, c++-format msgid "Reason: {}" msgstr "" @@ -1775,6 +1822,7 @@ msgid "Failed to set emoji name" msgstr "" #: src/windows/guildsettings/emojispane.cpp:207 +#, c++-format msgid "Are you sure you want to delete {}?" msgstr "" @@ -1875,6 +1923,7 @@ msgid "Nickname: " msgstr "" #: src/windows/guildsettings/memberspane.cpp:223 +#, c++-format msgid "Boosting since {}" msgstr "" @@ -1917,3 +1966,86 @@ msgstr "" #: src/windows/guildsettings/rolespane.cpp:412 msgid "Failed to set role name" msgstr "" + +#: src/windows/voice/voicewindow.cpp:24 +msgid "Deafen" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:25 +msgid "Suppress Noise" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:26 +msgid "Mix Mono" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:27 src/windows/voice/voicewindow.cpp:382 +msgid "Request to Speak" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:29 +msgid "You've been invited to speak" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:31 +msgid "Decline" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:34 +msgid "More _Settings" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:98 +msgid "" +"Voice Activation Detection method\n" +"Gate - Simple volume threshold. Slider changes threshold\n" +"RNNoise - Heavier on CPU. Slider changes probability threshold" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:181 +msgid "Threshold" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:191 +msgid "VAD Method" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:192 +msgid "Output Device" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:193 +msgid "Input Device" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:236 +msgid "Speakers" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:239 +msgid "Audience" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:260 +msgid "Input Settings" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:374 +msgid "Leave the Stage" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:376 +msgid "Speak on Stage" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:378 +msgid "Cancel Request" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:380 +msgid "Decline Invite" +msgstr "" + +#: src/windows/voice/voicewindow.cpp:387 +msgid "Topic: " +msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index daf86807..38c71fed 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-17 13:07-0300\n" +"POT-Creation-Date: 2024-07-10 20:59-0300\n" "PO-Revision-Date: 2024-06-17 11:45-0300\n" "Last-Translator: Gabriel de Moura \n" "Language-Team: Brazilian Portuguese 1);\n" #: src/abaddon.cpp:216 +#, c++-format msgid "css failed parsing ({})" msgstr "CSS falhou em ser lido ({})" @@ -61,6 +62,7 @@ msgid "Discord rejected your token" msgstr "O Discord rejeitou o seu token de autenticação" #: src/abaddon.cpp:474 +#, c++-format msgid "Lost connection with Discord's gateway. Try reconnecting (code {})" msgstr "Conexão com o gateway do Discord perdida. Tente novamente (code {})" @@ -123,18 +125,22 @@ msgid "Remove From Group" msgstr "Remover do Grupo" #: src/abaddon.cpp:1003 +#, c++-format msgid "Are you sure you want to leave {}?" msgstr "Você tem certeza de que quer sair {}?" #: src/abaddon.cpp:1013 +#, c++-format msgid "Are you sure you want to kick {}?" msgstr "Você tem certeza de que quer expulsar {}?" #: src/abaddon.cpp:1023 +#, c++-format msgid "Are you sure you want to ban {}?" msgstr "Você tem certeza de que quer banir {}?" #: src/abaddon.cpp:1120 +#, c++-format msgid "css failed to load ({})" msgstr "CSS falhou em ser carregado ({})" @@ -718,6 +724,7 @@ msgid "Competing in" msgstr "Competindo em" #: src/dialogs/setstatus.cpp:57 +#, c++-format msgid "How are you, {}?" msgstr "Como você está, {}?" @@ -738,6 +745,7 @@ msgid "Verification Required" msgstr "Verificação Necessária" #: src/dialogs/verificationgate.cpp:14 src/components/friendslist.cpp:258 +#: src/windows/voice/voicewindow.cpp:30 msgid "Accept" msgstr "Aceitar" @@ -774,14 +782,17 @@ msgid "Enter alt-text" msgstr "Inserir texto alternativo" #: src/components/chatinputindicator.cpp:119 +#, c++-format msgid "{} is typing..." msgstr "{} está digitando..." #: src/components/chatinputindicator.cpp:121 +#, c++-format msgid "{} and {} are typing" msgstr "{} e {} estão digitando" #: src/components/chatinputindicator.cpp:125 +#, c++-format msgid "{}, {}, {} and {} are typing..." msgstr "{}, {}, {} e {} estão digitando" @@ -838,10 +849,12 @@ msgid "message pinned" msgstr "mensagem fixada" #: src/components/chatmessage.cpp:219 +#, c++-format msgid "used {} with {}" msgstr "usou {} com {}" #: src/components/chatmessage.cpp:234 +#, c++-format msgid "" "{} added {}" @@ -850,12 +863,14 @@ msgstr "" "color='#eeeeee'>{}" #: src/components/chatmessage.cpp:244 +#, c++-format msgid "" "{} left" msgstr "" "{} saiu" #: src/components/chatmessage.cpp:246 +#, c++-format msgid "" "{} removed {}" @@ -864,14 +879,17 @@ msgstr "" "color='#eeeeee'>{}" #: src/components/chatmessage.cpp:253 +#, c++-format msgid "{} changed the name to {}" msgstr "{} alterou o nome para {}" #: src/components/chatmessage.cpp:258 +#, c++-format msgid "{} changed the channel icon" msgstr "{} alterou o ícone do canal" #: src/components/chatmessage.cpp:266 +#, c++-format msgid "" "{} just boosted the server {} times! {} has " "achieved Level {}!" @@ -880,12 +898,13 @@ msgstr "" "vezes! {} atingiu Nível {}!" #: src/components/chatmessage.cpp:276 +#, c++-format msgid "" "{} has added {} to this channel. Its most " "important updates will show up here." msgstr "" -"{} acabou de impulsionar o servidor {} " -"vezes! {} atingiu nível {}}!" +"{} adicionou {} para este canal" +"Suas atualizações mais importantes vão aparecer aqui." #: src/components/chatmessage.cpp:282 msgid "started a call" @@ -927,19 +946,22 @@ msgstr "" "automaticamente removido do \"Server Discovery\"" #: src/components/chatmessage.cpp:300 +#, c++-format msgid "{} started a thread: " msgstr "{} iniciou uma thread: " #: src/components/chatmessage.cpp:307 +#, c++-format msgid "{} started a thread: {}" msgstr "{} iniciou uma thread: {}" #: src/components/chatmessage.cpp:714 src/components/chatmessage.cpp:737 -#: src/windows/voicewindow.cpp:49 src/windows/guildsettings/auditlogpane.cpp:45 +#: src/windows/guildsettings/auditlogpane.cpp:45 msgid "Unknown User" msgstr "Usuário Desconhecido" #: src/components/chatmessage.cpp:730 +#, c++-format msgid "{} used /{}" msgstr "{} usou /{}" @@ -960,6 +982,7 @@ msgid "reply unavailable" msgstr "resposta indisponível" #: src/components/chatwindow.cpp:334 +#, c++-format msgid "Replying to {}" msgstr "Respondendo {}" @@ -988,18 +1011,22 @@ msgid "Failed to accept" msgstr "Falhou em aceitar" #: src/components/friendslist.cpp:129 +#, c++-format msgid "Are you sure you want to unblock {}?" msgstr "Você tem certeza de que quer desbloquear {}?" #: src/components/friendslist.cpp:132 +#, c++-format msgid "Are you sure you want to remove {}?" msgstr "Você tem certeza de que quer remover {}?" #: src/components/friendslist.cpp:135 +#, c++-format msgid "Are you sure you want to ignore {}?" msgstr "Você tem certeza de que quer ignorar {}?" #: src/components/friendslist.cpp:138 +#, c++-format msgid "Are you sure you want to cancel your request to {}?" msgstr "Você tem certeza de que quer cancelar pedido de amizade para {}?" @@ -1032,6 +1059,7 @@ msgid "Success!" msgstr "Sucesso!" #: src/components/friendslist.cpp:237 +#, c++-format msgid "Failed: {}" msgstr "Falhou: {}" @@ -1052,10 +1080,12 @@ msgid "You may bypass slowmode." msgstr "Você é imune ao modo lento" #: src/components/ratelimitindicator.cpp:93 +#, c++-format msgid "{}s" msgstr "{}s" #: src/components/ratelimitindicator.cpp:96 +#, c++-format msgid "Slowmode is enabled. Members can send one message every {} seconds" msgstr "" "Modo lento está ativo. Membros podem enviar apenas uma mensagem a cada {} " @@ -1088,8 +1118,8 @@ msgstr "Desconhecido" #: src/components/channellist/channellisttree.cpp:19 #: src/components/channellist/channellisttree.cpp:23 #: src/components/channellist/channellisttree.cpp:24 -#: src/components/channellist/channellisttree.cpp:35 -#: src/components/channellist/channellisttree.cpp:42 +#: src/components/channellist/channellisttree.cpp:37 +#: src/components/channellist/channellisttree.cpp:44 msgid "_Copy ID" msgstr "_Copiar ID" @@ -1098,14 +1128,14 @@ msgid "View _Settings" msgstr "Ver _Configurações" #: src/components/channellist/channellisttree.cpp:21 -#: src/components/channellist/channellisttree.cpp:43 +#: src/components/channellist/channellisttree.cpp:45 msgid "_Leave" msgstr "_Sair" #: src/components/channellist/channellisttree.cpp:22 #: src/components/channellist/channellisttree.cpp:25 -#: src/components/channellist/channellisttree.cpp:33 -#: src/components/channellist/channellisttree.cpp:46 +#: src/components/channellist/channellisttree.cpp:35 +#: src/components/channellist/channellisttree.cpp:48 msgid "Mark as _Read" msgstr "Marcar como _Lido" @@ -1115,65 +1145,67 @@ msgid "Open in New _Tab" msgstr "Abrir em Nova _Aba" #: src/components/channellist/channellisttree.cpp:31 +#: src/components/channellist/channellisttree.cpp:33 msgid "_Join" msgstr "_Entrar" #: src/components/channellist/channellisttree.cpp:32 +#: src/components/channellist/channellisttree.cpp:34 msgid "_Disconnect" msgstr "_Desconectar" -#: src/components/channellist/channellisttree.cpp:34 +#: src/components/channellist/channellisttree.cpp:36 msgid "Open _Chat" msgstr "Abrir _Chat" -#: src/components/channellist/channellisttree.cpp:39 +#: src/components/channellist/channellisttree.cpp:41 msgid "Join _Voice" msgstr "Entrar em _Voz" -#: src/components/channellist/channellisttree.cpp:40 +#: src/components/channellist/channellisttree.cpp:42 msgid "_Disconnect Voice" msgstr "_Desconectar da Voz" -#: src/components/channellist/channellisttree.cpp:44 +#: src/components/channellist/channellisttree.cpp:46 msgid "_Archive" msgstr "_Arquivar" -#: src/components/channellist/channellisttree.cpp:45 +#: src/components/channellist/channellisttree.cpp:47 msgid "_Unarchive" msgstr "_Desarquivar" -#: src/components/channellist/channellisttree.cpp:242 +#: src/components/channellist/channellisttree.cpp:259 msgid "Are you sure you want to leave this group DM?" msgstr "Você tem certeza de que quer sair deste grupo de DM?" -#: src/components/channellist/channellisttree.cpp:280 +#: src/components/channellist/channellisttree.cpp:297 msgid "Are you sure you want to leave this thread?" msgstr "Você tem certeza de que quer sair desta thread?" -#: src/components/channellist/channellisttree.cpp:1170 +#: src/components/channellist/channellisttree.cpp:1199 msgid "Direct Messages" msgstr "Mensagems Diretas" -#: src/components/channellist/channellisttree.cpp:1338 +#: src/components/channellist/channellisttree.cpp:1371 msgid "Close" msgstr "Fechar" -#: src/components/channellist/channellisttree.cpp:1338 +#: src/components/channellist/channellisttree.cpp:1371 msgid "Leave" msgstr "Sair" -#: src/components/channellist/channellisttree.cpp:1392 -#: src/components/channellist/channellisttree.cpp:1406 -#: src/components/channellist/channellisttree.cpp:1451 -#: src/components/channellist/channellisttree.cpp:1476 +#: src/components/channellist/channellisttree.cpp:1425 +#: src/components/channellist/channellisttree.cpp:1439 +#: src/components/channellist/channellisttree.cpp:1503 +#: src/components/channellist/channellisttree.cpp:1528 msgid "Unmute" msgstr "Desmutar" -#: src/components/channellist/channellisttree.cpp:1394 -#: src/components/channellist/channellisttree.cpp:1408 -#: src/components/channellist/channellisttree.cpp:1453 -#: src/components/channellist/channellisttree.cpp:1478 -#: src/windows/voicewindow.cpp:22 src/windows/voicewindow.cpp:93 +#: src/components/channellist/channellisttree.cpp:1427 +#: src/components/channellist/channellisttree.cpp:1441 +#: src/components/channellist/channellisttree.cpp:1505 +#: src/components/channellist/channellisttree.cpp:1530 +#: src/windows/voice/voicewindow.cpp:23 msgid "Mute" msgstr "Mutar" @@ -1205,7 +1237,7 @@ msgstr "Registros de Auditoria" msgid "Connect" msgstr "Conectar" -#: src/windows/mainwindow.cpp:260 src/windows/voicewindow.cpp:97 +#: src/windows/mainwindow.cpp:260 src/windows/voice/voicewindow.cpp:28 msgid "Disconnect" msgstr "Desconectar" @@ -1237,7 +1269,7 @@ msgstr "Limpar cache de arquivo" msgid "Dump ready message" msgstr "Descarregar mensagem de pronto" -#: src/windows/mainwindow.cpp:288 src/windows/voicewindow.cpp:99 +#: src/windows/mainwindow.cpp:288 src/windows/voice/voicewindow.cpp:33 msgid "View" msgstr "Ver" @@ -1282,6 +1314,7 @@ msgid "Mutual Friends" msgstr "Amigos Mútuos" #: src/windows/profilewindow.cpp:113 +#, c++-format msgid "Originally known as {}" msgstr "Originalmente conhecido como {}" @@ -1294,6 +1327,7 @@ msgid "Private" msgstr "Privado" #: src/windows/threadswindow.cpp:16 +#, c++-format msgid "#{} - Threads" msgstr "#{} - Threads" @@ -1359,65 +1393,11 @@ msgstr "Tipo de Sinal" msgid "Bitrate" msgstr "Taxa de bits" -#: src/windows/voicesettingswindow.cpp:133 src/windows/voicewindow.cpp:243 +#: src/windows/voicesettingswindow.cpp:133 +#: src/windows/voice/voicewindow.cpp:182 msgid "Gain" msgstr "Ganho" -#: src/windows/voicewindow.cpp:94 -msgid "Deafen" -msgstr "Ensurdecer" - -#: src/windows/voicewindow.cpp:95 -msgid "Suppress Noise" -msgstr "Suprimir Ruído" - -#: src/windows/voicewindow.cpp:96 -msgid "Mix Mono" -msgstr "Mixagem Mono" - -#: src/windows/voicewindow.cpp:100 -msgid "More _Settings" -msgstr "Mais _Configurações" - -#: src/windows/voicewindow.cpp:159 -msgid "" -"Voice Activation Detection method\n" -"Gate - Simple volume threshold. Slider changes threshold\n" -"RNNoise - Heavier on CPU. Slider changes probability threshold" -msgstr "" -"Método de detecção de ativação de voz\n" -"Gate - Limite de volume simples. O controle deslizante altera o limite\n" -"RNNoise - Mais pesado na CPU. O controle deslizante altera o limite de " -"probabilidade" - -#: src/windows/voicewindow.cpp:162 -msgid "Gate" -msgstr "Gate" - -#: src/windows/voicewindow.cpp:164 -msgid "RNNoise" -msgstr "RNNoise" - -#: src/windows/voicewindow.cpp:242 -msgid "Threshold" -msgstr "Limite" - -#: src/windows/voicewindow.cpp:252 -msgid "VAD Method" -msgstr "Método VAD" - -#: src/windows/voicewindow.cpp:253 -msgid "Output Device" -msgstr "Dispositivo de Saída" - -#: src/windows/voicewindow.cpp:254 -msgid "Input Device" -msgstr "Dispositivo de Entrada" - -#: src/windows/voicewindow.cpp:268 -msgid "Input Settings" -msgstr "Configurações de Entrada" - #: src/windows/profile/mutualguildspane.cpp:39 msgid "Unknown Server" msgstr "Servidor Desconhecido" @@ -1440,6 +1420,7 @@ msgid "Account created: " msgstr "Conta criada: " #: src/windows/guildsettings/auditlogpane.cpp:56 +#, c++-format msgid "{} made changes to {}" msgstr "{} fez mudanças em {}" @@ -1448,6 +1429,7 @@ msgid "Set the server icon" msgstr "Definiu o ícone do servidor" #: src/windows/guildsettings/auditlogpane.cpp:67 +#, c++-format msgid "Set the server name to {}" msgstr "Definiu o nome do servidor como {}" @@ -1456,15 +1438,18 @@ msgid "Set the server name" msgstr "Definiu o nome do servidor" #: src/windows/guildsettings/auditlogpane.cpp:77 +#, c++-format msgid "{} created a voice channel #{}" msgstr "{} criou um canal de voz #{}" #: src/windows/guildsettings/auditlogpane.cpp:80 +#, c++-format msgid "{} created a text channel #{}" msgstr "{} criou um canal de texto #{}" #: src/windows/guildsettings/auditlogpane.cpp:88 #: src/windows/guildsettings/auditlogpane.cpp:443 +#, c++-format msgid "Set the name to {}" msgstr "Mudou o nome para {}" @@ -1479,26 +1464,31 @@ msgid "Unmarked the channel as NSFW" msgstr "Desmarcou o canal como NSFW" #: src/windows/guildsettings/auditlogpane.cpp:101 +#, c++-format msgid "{} made changes to #{}" msgstr "{} fez mudanças em #{}" #: src/windows/guildsettings/auditlogpane.cpp:104 +#, c++-format msgid "{} made changes to <#{}>" msgstr "{} fez mudanças em <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:114 #: src/windows/guildsettings/auditlogpane.cpp:356 #: src/windows/guildsettings/auditlogpane.cpp:470 +#, c++-format msgid "Changed the name from {} to {}" msgstr "Alterou o nome de {} para {}" #: src/windows/guildsettings/auditlogpane.cpp:118 #: src/windows/guildsettings/auditlogpane.cpp:249 #: src/windows/guildsettings/auditlogpane.cpp:327 +#, c++-format msgid "Changed the name to {}" msgstr "Alterou o nome para {}" #: src/windows/guildsettings/auditlogpane.cpp:123 +#, c++-format msgid "Changed the topic to {}" msgstr "Mudou o tópico para {}" @@ -1515,58 +1505,72 @@ msgstr "Desativou modo câmera lenta" #: src/windows/guildsettings/auditlogpane.cpp:138 #: src/windows/guildsettings/auditlogpane.cpp:454 #: src/windows/guildsettings/auditlogpane.cpp:480 +#, c++-format msgid "Set slowmode to {} seconds" msgstr "Definiu o temporizador do câmera lenta para {} segundos" #: src/windows/guildsettings/auditlogpane.cpp:144 +#, c++-format msgid "{} removed #{}" msgstr "{} removeu #{}" #: src/windows/guildsettings/auditlogpane.cpp:150 +#, c++-format msgid "{} created channel overrides for #{}" msgstr "{} criou substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:152 +#, c++-format msgid "{} created channel overrides for <#{}>" msgstr "{} criou substituições de canal para <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:159 +#, c++-format msgid "{} updated channel overrides for #{}" msgstr "{} atualizou substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:161 +#, c++-format msgid "{} updated channel overrides for <#{}>" msgstr "{} atualizou substituições de canal para <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:168 +#, c++-format msgid "{} removed channel overrides for #{}" msgstr "{} removeu substituições de canal para #{}" #: src/windows/guildsettings/auditlogpane.cpp:170 +#, c++-format msgid "{} removed channel overrides for <#{}>" msgstr "{} removeu substituições de canal para <#{}>" #: src/windows/guildsettings/auditlogpane.cpp:175 +#, c++-format msgid "{} kicked {}" msgstr "{} expulsou {}" #: src/windows/guildsettings/auditlogpane.cpp:178 +#, c++-format msgid "{} pruned {} members" msgstr "{} podou {} membros" #: src/windows/guildsettings/auditlogpane.cpp:179 +#, c++-format msgid "For {} days of inactivity" msgstr "Por {} dias de inatividade" #: src/windows/guildsettings/auditlogpane.cpp:183 +#, c++-format msgid "{} banned {}" msgstr "{} baniu {}" #: src/windows/guildsettings/auditlogpane.cpp:187 +#, c++-format msgid "{} removed the ban for {}" msgstr "{} removeu o banimento de {}" #: src/windows/guildsettings/auditlogpane.cpp:191 +#, c++-format msgid "{} updated {}" msgstr "{} atualizou {}" @@ -1587,42 +1591,52 @@ msgid "Unmuted them" msgstr "Desmutou eles" #: src/windows/guildsettings/auditlogpane.cpp:200 +#, c++-format msgid "Set their nickname to {}" msgstr "Definiu o apelido para {}" #: src/windows/guildsettings/auditlogpane.cpp:206 +#, c++-format msgid "{} updated roles for {}" msgstr "{} atualizou os cargos de {}" #: src/windows/guildsettings/auditlogpane.cpp:211 +#, c++-format msgid "Removed a role {}" msgstr "Removeu o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:213 +#, c++-format msgid "Added a role {}" msgstr "Adicionou o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:221 +#, c++-format msgid "{} moved a user to {}" msgstr "{} moveu um usuário para {}" #: src/windows/guildsettings/auditlogpane.cpp:224 +#, c++-format msgid "{} moved {} users to {}" msgstr "{} moveu {} usuários para {}" #: src/windows/guildsettings/auditlogpane.cpp:229 +#, c++-format msgid "{} disconnected {} users from voice" msgstr "{} desconectou {} usuários de canais de voz" #: src/windows/guildsettings/auditlogpane.cpp:234 +#, c++-format msgid "{} added {} to the server" msgstr "{} adicionou {} ao servidor" #: src/windows/guildsettings/auditlogpane.cpp:238 +#, c++-format msgid "{} created the role {}" msgstr "{} criou o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:242 +#, c++-format msgid "{} updated the role {}" msgstr "{} atualizou o cargo {}" @@ -1631,6 +1645,7 @@ msgid "Removed the color" msgstr "Removeu a cor" #: src/windows/guildsettings/auditlogpane.cpp:255 +#, c++-format msgid "Set the color to {}" msgstr "Definiu a cor para {}" @@ -1655,14 +1670,17 @@ msgid "Hoisted" msgstr "Içado" #: src/windows/guildsettings/auditlogpane.cpp:267 +#, c++-format msgid "{} deleted the role {}" msgstr "{} deletou o cargo {}" #: src/windows/guildsettings/auditlogpane.cpp:271 +#, c++-format msgid "{} created an invite {}" msgstr "{} criou um convite {}" #: src/windows/guildsettings/auditlogpane.cpp:277 +#, c++-format msgid "For channel {}" msgstr "Para o canal {}" @@ -1671,6 +1689,7 @@ msgid "Which has unlimited uses" msgstr "O qual possui usos ilimitados" #: src/windows/guildsettings/auditlogpane.cpp:283 +#, c++-format msgid "Which has {} uses" msgstr "O qual possui {} usos" @@ -1683,22 +1702,27 @@ msgid "With temporary off" msgstr "Com modo temporário desligado" #: src/windows/guildsettings/auditlogpane.cpp:294 +#, c++-format msgid "{} deleted an invite {}" msgstr "{} apagou um convite {}" #: src/windows/guildsettings/auditlogpane.cpp:299 +#, c++-format msgid "{} created the webhook {}" msgstr "{} criou um webhook {}" #: src/windows/guildsettings/auditlogpane.cpp:306 +#, c++-format msgid "With channel #{}" msgstr "Com o canal #{}" #: src/windows/guildsettings/auditlogpane.cpp:319 +#, c++-format msgid "{} updated the webhook {}" msgstr "{} atualizou o webhook {}" #: src/windows/guildsettings/auditlogpane.cpp:322 +#, c++-format msgid "{} updated a webhook" msgstr "{} atualizou um webhook" @@ -1707,6 +1731,7 @@ msgid "Changed the avatar" msgstr "Mudou o avatar" #: src/windows/guildsettings/auditlogpane.cpp:334 +#, c++-format msgid "Changed the channel to #{}" msgstr "Mudou o canal para #{}" @@ -1715,60 +1740,74 @@ msgid "Changed the channel" msgstr "Mudou o canal" #: src/windows/guildsettings/auditlogpane.cpp:343 +#, c++-format msgid "{} deleted the webhook {}" msgstr "{} apagou o webhook {}" #: src/windows/guildsettings/auditlogpane.cpp:348 +#, c++-format msgid "{} created the emoji {}" msgstr "{} criou o emoji {}" #: src/windows/guildsettings/auditlogpane.cpp:353 +#, c++-format msgid "{} updated the emoji {}" msgstr "{} atualizou o emoji {}" #: src/windows/guildsettings/auditlogpane.cpp:361 +#, c++-format msgid "{} deleted the emoji {}" msgstr "{} apagou o emoji {}" #: src/windows/guildsettings/auditlogpane.cpp:370 +#, c++-format msgid "{} deleted {} messages in #{}" msgstr "{} apagou {} mensagens em #{}" #: src/windows/guildsettings/auditlogpane.cpp:374 +#, c++-format msgid "{} deleted {} messages" msgstr "{} apagou {} mensagens" #: src/windows/guildsettings/auditlogpane.cpp:380 +#, c++-format msgid "{} pinned a message by {}" msgstr "{} fixou uma mensagem de {}" #: src/windows/guildsettings/auditlogpane.cpp:384 +#, c++-format msgid "{} unpinned a message by {}" msgstr "{} desafixar uma mensagem de {}" #: src/windows/guildsettings/auditlogpane.cpp:388 +#, c++-format msgid "{} started the stage for {}" msgstr "{} iniciou o palco para {}" #: src/windows/guildsettings/auditlogpane.cpp:396 #: src/windows/guildsettings/auditlogpane.cpp:416 +#, c++-format msgid "Set the topic to {}" msgstr "Definiu o tópico para {}" #: src/windows/guildsettings/auditlogpane.cpp:401 #: src/windows/guildsettings/auditlogpane.cpp:421 +#, c++-format msgid "Set the privacy level to {}" msgstr "Definiu o nível de privacidade para {}" #: src/windows/guildsettings/auditlogpane.cpp:408 +#, c++-format msgid "{} updated the stage for {}" msgstr "{} atualizou o palco para {}" #: src/windows/guildsettings/auditlogpane.cpp:428 +#, c++-format msgid "{} ended the stage for {}" msgstr "{} encerrou o palco para {}" #: src/windows/guildsettings/auditlogpane.cpp:434 +#, c++-format msgid "{} created a thread {}" msgstr "{} criou uma thread {}" @@ -1784,6 +1823,7 @@ msgstr "Desarquivou a thread" #: src/windows/guildsettings/auditlogpane.cpp:448 #: src/windows/guildsettings/auditlogpane.cpp:474 +#, c++-format msgid "Set auto archive duration to {} minutes" msgstr "" "Definiu o intervalo para o arquivamento automático para {} minutos" @@ -1801,10 +1841,12 @@ msgstr "" "Desbloqueou a thread, permitindo-a ser desarquivada por não-moderadores " #: src/windows/guildsettings/auditlogpane.cpp:462 +#, c++-format msgid "{} made changes to the thread {}" msgstr "{} fez mudanças na thread {}" #: src/windows/guildsettings/auditlogpane.cpp:488 +#, c++-format msgid "{} deleted the thread {}" msgstr "{} apagou a thread {}" @@ -1813,6 +1855,7 @@ msgid "Unknown action" msgstr "Ação desconhecida" #: src/windows/guildsettings/auditlogpane.cpp:500 +#, c++-format msgid "Reason: {}" msgstr "Motivo: {}" @@ -1897,6 +1940,7 @@ msgid "Failed to set emoji name" msgstr "Falhou em definir um nome para o emoji" #: src/windows/guildsettings/emojispane.cpp:207 +#, c++-format msgid "Are you sure you want to delete {}?" msgstr "Você tem certeza de que quer deletar {}?" @@ -1999,6 +2043,7 @@ msgid "Nickname: " msgstr "Apelido: " #: src/windows/guildsettings/memberspane.cpp:223 +#, c++-format msgid "Boosting since {}" msgstr "Impulsionando desde {}" @@ -2042,6 +2087,99 @@ msgstr "Eventos" msgid "Failed to set role name" msgstr "Falhou em definir o nome de um cargo" +#: src/windows/voice/voicewindow.cpp:24 +msgid "Deafen" +msgstr "Ensurdecer" + +#: src/windows/voice/voicewindow.cpp:25 +msgid "Suppress Noise" +msgstr "Suprimir Ruído" + +#: src/windows/voice/voicewindow.cpp:26 +msgid "Mix Mono" +msgstr "Mixagem Mono" + +#: src/windows/voice/voicewindow.cpp:27 src/windows/voice/voicewindow.cpp:382 +msgid "Request to Speak" +msgstr "Pedir para Falar" + +#: src/windows/voice/voicewindow.cpp:29 +msgid "You've been invited to speak" +msgstr "Voce foi convidado para subir no palco" + +#: src/windows/voice/voicewindow.cpp:31 +msgid "Decline" +msgstr "Recusar" + +#: src/windows/voice/voicewindow.cpp:34 +msgid "More _Settings" +msgstr "Mais _Configurações" + +#: src/windows/voice/voicewindow.cpp:98 +msgid "" +"Voice Activation Detection method\n" +"Gate - Simple volume threshold. Slider changes threshold\n" +"RNNoise - Heavier on CPU. Slider changes probability threshold" +msgstr "" +"Método de detecção de ativação de voz\n" +"Gate - Limite de volume simples. O controle deslizante altera o limite\n" +"RNNoise - Mais pesado na CPU. O controle deslizante altera o limite de " +"probabilidade" + +#: src/windows/voice/voicewindow.cpp:181 +msgid "Threshold" +msgstr "Limite" + +#: src/windows/voice/voicewindow.cpp:191 +msgid "VAD Method" +msgstr "Método VAD" + +#: src/windows/voice/voicewindow.cpp:192 +msgid "Output Device" +msgstr "Dispositivo de Saída" + +#: src/windows/voice/voicewindow.cpp:193 +msgid "Input Device" +msgstr "Dispositivo de Entrada" + +#: src/windows/voice/voicewindow.cpp:236 +msgid "Speakers" +msgstr "Falantes" + +#: src/windows/voice/voicewindow.cpp:239 +msgid "Audience" +msgstr "Audiência" + +#: src/windows/voice/voicewindow.cpp:260 +msgid "Input Settings" +msgstr "Configurações de Entrada" + +#: src/windows/voice/voicewindow.cpp:374 +msgid "Leave the Stage" +msgstr "Sair do Palco" + +#: src/windows/voice/voicewindow.cpp:376 +msgid "Speak on Stage" +msgstr "Falar no Palco" + +#: src/windows/voice/voicewindow.cpp:378 +msgid "Cancel Request" +msgstr "Cancelar Pedido" + +#: src/windows/voice/voicewindow.cpp:380 +msgid "Decline Invite" +msgstr "Recusar Convite" + +#: src/windows/voice/voicewindow.cpp:387 +msgid "Topic: " +msgstr "Tópico: " + +#~ msgid "Gate" +#~ msgstr "Gate" + +#~ msgid "RNNoise" +#~ msgstr "RNNoise" + #~ msgid "{} created channel overrides for #{}" #~ msgstr "{} criou subsituições de canal para #{}" diff --git a/src/components/channellist/channellisttree.cpp b/src/components/channellist/channellisttree.cpp index c0d16989..f9708cff 100644 --- a/src/components/channellist/channellisttree.cpp +++ b/src/components/channellist/channellisttree.cpp @@ -30,8 +30,8 @@ ChannelListTree::ChannelListTree() #ifdef WITH_VOICE , m_menu_voice_channel_join(_("_Join"), true) , m_menu_voice_channel_disconnect(_("_Disconnect"), true) - , m_menu_voice_stage_join("_Join", true) - , m_menu_voice_stage_disconnect("_Disconnect", true) + , m_menu_voice_stage_join(_("_Join"), true) + , m_menu_voice_stage_disconnect(_("_Disconnect"), true) , m_menu_voice_channel_mark_as_read(_("Mark as _Read"), true) , m_menu_voice_open_chat(_("Open _Chat"), true) , m_menu_dm_copy_id(_("_Copy ID"), true) diff --git a/src/windows/voice/voicewindow.cpp b/src/windows/voice/voicewindow.cpp index e59705a2..9352cef7 100644 --- a/src/windows/voice/voicewindow.cpp +++ b/src/windows/voice/voicewindow.cpp @@ -5,6 +5,9 @@ #include "voicewindow.hpp" +#include +#include + #include "abaddon.hpp" #include "audio/manager.hpp" #include "components/lazyimage.hpp" @@ -17,18 +20,18 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) : m_main(Gtk::ORIENTATION_VERTICAL) , m_controls(Gtk::ORIENTATION_HORIZONTAL) - , m_mute("Mute") - , m_deafen("Deafen") - , m_noise_suppression("Suppress Noise") - , m_mix_mono("Mix Mono") - , m_stage_command("Request to Speak") - , m_disconnect("Disconnect") - , m_stage_invite_lbl("You've been invited to speak") - , m_stage_accept("Accept") - , m_stage_decline("Decline") + , m_mute(_("Mute")) + , m_deafen(_("Deafen")) + , m_noise_suppression(_("Suppress Noise")) + , m_mix_mono(_("Mix Mono")) + , m_stage_command(_("Request to Speak")) + , m_disconnect(_("Disconnect")) + , m_stage_invite_lbl(_("You've been invited to speak")) + , m_stage_accept(_("Accept")) + , m_stage_decline(_("Decline")) , m_channel_id(channel_id) - , m_menu_view("View") - , m_menu_view_settings("More _Settings", true) { + , m_menu_view(_("View")) + , m_menu_view_settings(_("More _Settings"), true) { get_style_context()->add_class("app-window"); set_default_size(300, 400); @@ -91,10 +94,10 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) m_vad_combo.set_valign(Gtk::ALIGN_END); m_vad_combo.set_hexpand(true); m_vad_combo.set_halign(Gtk::ALIGN_FILL); - m_vad_combo.set_tooltip_text( + m_vad_combo.set_tooltip_text(_( "Voice Activation Detection method\n" "Gate - Simple volume threshold. Slider changes threshold\n" - "RNNoise - Heavier on CPU. Slider changes probability threshold"); + "RNNoise - Heavier on CPU. Slider changes probability threshold")); m_vad_combo.append("gate", "Gate"); #ifdef WITH_RNNOISE m_vad_combo.append("rnnoise", "RNNoise"); @@ -175,8 +178,8 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) auto *sliders_sliders = Gtk::make_managed(); sliders_container->pack_start(*sliders_labels, false, true, 2); sliders_container->pack_start(*sliders_sliders); - sliders_labels->pack_start(*Gtk::make_managed("Threshold", Gtk::ALIGN_END)); - sliders_labels->pack_start(*Gtk::make_managed("Gain", Gtk::ALIGN_END)); + sliders_labels->pack_start(*Gtk::make_managed(_("Threshold"), Gtk::ALIGN_END)); + sliders_labels->pack_start(*Gtk::make_managed(_("Gain"), Gtk::ALIGN_END)); sliders_sliders->pack_start(m_vad_param); sliders_sliders->pack_start(m_capture_gain); @@ -185,9 +188,9 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) auto *combos_combos = Gtk::make_managed(); combos_container->pack_start(*combos_labels, false, true, 6); combos_container->pack_start(*combos_combos, Gtk::PACK_EXPAND_WIDGET, 6); - combos_labels->pack_start(*Gtk::make_managed("VAD Method", Gtk::ALIGN_END)); - combos_labels->pack_start(*Gtk::make_managed("Output Device", Gtk::ALIGN_END)); - combos_labels->pack_start(*Gtk::make_managed("Input Device", Gtk::ALIGN_END)); + combos_labels->pack_start(*Gtk::make_managed(_("VAD Method"), Gtk::ALIGN_END)); + combos_labels->pack_start(*Gtk::make_managed(_("Output Device"), Gtk::ALIGN_END)); + combos_labels->pack_start(*Gtk::make_managed(_("Input Device"), Gtk::ALIGN_END)); combos_combos->pack_start(m_vad_combo); combos_combos->pack_start(m_playback_combo); combos_combos->pack_start(m_capture_combo); @@ -230,10 +233,10 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) Abaddon::Get().GetDiscordClient().DeclineInviteToSpeak(m_channel_id, NOOP_CALLBACK); }); - m_speakers_label.set_markup("Speakers"); + m_speakers_label.set_markup(fmt::format("{}", _("Speakers"))); if (m_is_stage) m_listing.pack_start(m_speakers_label, false, true); m_listing.pack_start(m_speakers_list, false, true); - m_audience_label.set_markup("Audience"); + m_audience_label.set_markup(fmt::format("{}", _("Audience"))); if (m_is_stage) m_listing.pack_start(m_audience_label, false, true); if (m_is_stage) m_listing.pack_start(m_audience_list, false, true); m_scroll.add(m_listing); @@ -254,7 +257,7 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) m_main.pack_start(m_buttons, false, true); m_main.pack_start(m_stage_invite_box, false, true); m_main.pack_start(m_vad_value, false, true); - m_main.pack_start(*Gtk::make_managed("Input Settings"), false, true); + m_main.pack_start(*Gtk::make_managed(_("Input Settings")), false, true); m_main.pack_start(*sliders_container, false, true); m_main.pack_start(m_scroll); m_stage_topic_label.set_ellipsize(Pango::ELLIPSIZE_END); @@ -368,20 +371,20 @@ void VoiceWindow::UpdateStageCommand() { m_stage_invite_box.set_visible(is_invited_to_speak); if (is_speaker) { - m_stage_command.set_label("Leave the Stage"); + m_stage_command.set_label(_("Leave the Stage")); } else if (is_moderator) { - m_stage_command.set_label("Speak on Stage"); + m_stage_command.set_label(_("Speak on Stage")); } else if (m_has_requested_to_speak) { - m_stage_command.set_label("Cancel Request"); + m_stage_command.set_label(_("Cancel Request")); } else if (is_invited_to_speak) { - m_stage_command.set_label("Decline Invite"); + m_stage_command.set_label(_("Decline Invite")); } else { - m_stage_command.set_label("Request to Speak"); + m_stage_command.set_label(_("Request to Speak")); } } void VoiceWindow::UpdateStageTopicLabel(const std::string &topic) { - m_stage_topic_label.set_markup("Topic: " + topic); + m_stage_topic_label.set_markup(_("Topic: ") + topic); } void VoiceWindow::OnUserConnect(Snowflake user_id, Snowflake to_channel_id) { From 564d3e11b621d5130f21a6123f423f68ae694f82 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:42:51 -0400 Subject: [PATCH 30/37] remove duplicate submodule --- .gitmodules | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index e173bb4f..e0d062ad 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,9 +10,6 @@ [submodule "subprojects/keychain"] path = subprojects/keychain url = https://github.com/hrantzsch/keychain -[submodule "subprojects/miniaudio"] - path = subprojects/miniaudio - url = https://github.com/mackron/miniaudio [submodule "subprojects/rnnoise"] path = subprojects/rnnoise url = https://github.com/xiph/rnnoise From 71a72ecbd488cc245082eba9a373d14c4f9fa55a Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Sun, 22 Sep 2024 11:50:50 -0300 Subject: [PATCH 31/37] (chore): Utilise actions/upload@v4 due to deprecation --- .github/workflows/ci.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2c39660..9f685837 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,6 @@ name: Abaddon CI -on: [ push, pull_request ] +on: [push, pull_request] jobs: msys2: @@ -8,8 +8,8 @@ jobs: runs-on: windows-latest strategy: matrix: - buildtype: [ Debug, RelWithDebInfo, MinSizeRel ] - mindeps: [ false ] + buildtype: [Debug, RelWithDebInfo, MinSizeRel] + mindeps: [false] include: - buildtype: RelWithDebInfo mindeps: true @@ -123,7 +123,7 @@ jobs: if_false: "${{ matrix.buildtype }}" - name: Upload build (2) - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: build-windows-msys2-${{ steps.buildname.outputs.value }} path: build/artifactdir @@ -133,7 +133,7 @@ jobs: runs-on: macos-latest strategy: matrix: - buildtype: [ Debug, RelWithDebInfo ] + buildtype: [Debug, RelWithDebInfo] steps: - uses: actions/checkout@v1 with: @@ -168,7 +168,7 @@ jobs: cp -r "${{ github.workspace }}/res/res" "${artifact_dir}/res" - name: Upload build - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: build-macos-${{ matrix.buildtype }} path: build/artifactdir @@ -178,7 +178,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - buildtype: [ Debug, RelWithDebInfo, MinSizeRel ] + buildtype: [Debug, RelWithDebInfo, MinSizeRel] steps: - uses: actions/checkout@v1 with: @@ -228,7 +228,7 @@ jobs: cp -r "${{ github.workspace }}/res/res" "${artifact_dir}/res" - name: Upload build - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: build-linux-${{ matrix.buildtype }} path: ${{ runner.workspace }}/artifactdir From 3f68804fbef93dda1bbb92c7f8d95c872308907b Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Sun, 22 Sep 2024 13:48:40 -0300 Subject: [PATCH 32/37] fix build error due to const qualifier discarding --- src/discord/snowflake.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/discord/snowflake.hpp b/src/discord/snowflake.hpp index 68cb5ea0..2208f292 100644 --- a/src/discord/snowflake.hpp +++ b/src/discord/snowflake.hpp @@ -44,7 +44,7 @@ struct Snowflake { template<> struct fmt::formatter : fmt::formatter { - auto format(Snowflake id, format_context &ctx) -> decltype(ctx.out()) { + auto format(Snowflake id, format_context &ctx) const -> decltype(ctx.out()) { return format_to(ctx.out(), "[id: {}]", static_cast(id)); } }; From 47ffd82a8716842e8ed822560344209b8e1e033a Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Sun, 22 Sep 2024 20:20:49 -0300 Subject: [PATCH 33/37] (i18n): Link gettext with absolute path in APPLE systems --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03c9ac50..b0dabd1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,8 +126,8 @@ target_link_libraries(abaddon ${CMAKE_DL_LIBS}) # Sincerely, there ought be a better solution if (MINGW) target_link_libraries(abaddon intl) -else() - target_link_libraries(abaddon ${INTL_LIBRARIES}) +elseif(APPLE) + target_link_libraries(abaddon /opt/homebrew/lib/libintl.dylib) endif() target_link_libraries(abaddon CURL::libcurl) From b7f9e143e74caf4de82e95425388a0a00949ad31 Mon Sep 17 00:00:00 2001 From: smolblackcat Date: Sun, 22 Sep 2024 20:41:45 -0300 Subject: [PATCH 34/37] (i18n): Use Intl Cmake variables correctly --- CMakeLists.txt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b0dabd1f..1a49d793 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,7 +57,7 @@ target_include_directories(abaddon PUBLIC ${GTKMM_INCLUDE_DIRS}) target_include_directories(abaddon PUBLIC ${ZLIB_INCLUDE_DIRS}) target_include_directories(abaddon PUBLIC ${SQLite3_INCLUDE_DIRS}) target_include_directories(abaddon PUBLIC ${NLOHMANN_JSON_INCLUDE_DIRS}) -target_include_directories(abaddon PUBLIC ${INTL_INCLUDE_DIRS}) +target_include_directories(abaddon PUBLIC ${Intl_INCLUDE_DIRS}) add_subdirectory(po) @@ -123,11 +123,8 @@ target_link_libraries(abaddon ${ZLIB_LIBRARY}) target_link_libraries(abaddon ${NLOHMANN_JSON_LIBRARIES}) target_link_libraries(abaddon ${CMAKE_DL_LIBS}) -# Sincerely, there ought be a better solution -if (MINGW) - target_link_libraries(abaddon intl) -elseif(APPLE) - target_link_libraries(abaddon /opt/homebrew/lib/libintl.dylib) +if (MINGW OR APPLE) + target_link_libraries(abaddon ${Intl_LIBRARIES}) endif() target_link_libraries(abaddon CURL::libcurl) From 6b62812769144e42e6f7ee9692c3ce338eee0345 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Thu, 26 Sep 2024 21:35:14 -0300 Subject: [PATCH 35/37] (i18n): Replace fmt::format calls with Glib::ustring::compose * Fixes text rendering artifacts due to non-utf8 text * Update abaddon.pot --- po/abaddon.pot | 407 +++++++++------------ src/windows/guildsettings/auditlogpane.cpp | 369 ++++++++++--------- 2 files changed, 373 insertions(+), 403 deletions(-) diff --git a/po/abaddon.pot b/po/abaddon.pot index 8d9ae256..89611881 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-10 20:59-0300\n" +"POT-Creation-Date: 2024-09-26 21:32-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -853,7 +853,7 @@ msgid "{} started a thread: {}" msgstr "" #: src/components/chatmessage.cpp:714 src/components/chatmessage.cpp:737 -#: src/windows/guildsettings/auditlogpane.cpp:45 +#: src/windows/guildsettings/auditlogpane.cpp:44 msgid "Unknown User" msgstr "" @@ -1306,441 +1306,378 @@ msgstr "" msgid "Account created: " msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:56 -#, c++-format -msgid "{} made changes to {}" +#: src/windows/guildsettings/auditlogpane.cpp:55 +msgid "%1 made changes to %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:62 +#: src/windows/guildsettings/auditlogpane.cpp:61 msgid "Set the server icon" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:67 -#, c++-format -msgid "Set the server name to {}" +#: src/windows/guildsettings/auditlogpane.cpp:66 +msgid "Set the server name to %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:70 +#: src/windows/guildsettings/auditlogpane.cpp:69 msgid "Set the server name" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:77 -#, c++-format -msgid "{} created a voice channel #{}" +#: src/windows/guildsettings/auditlogpane.cpp:76 +msgid "%1 created a voice channel #%2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:80 -#, c++-format -msgid "{} created a text channel #{}" +#: src/windows/guildsettings/auditlogpane.cpp:79 +msgid "%1 created a text channel #%2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:88 -#: src/windows/guildsettings/auditlogpane.cpp:443 -#, c++-format -msgid "Set the name to {}" +#: src/windows/guildsettings/auditlogpane.cpp:87 +#: src/windows/guildsettings/auditlogpane.cpp:477 +msgid "Set the name to %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:92 -#: src/windows/guildsettings/auditlogpane.cpp:129 +#: src/windows/guildsettings/auditlogpane.cpp:91 +#: src/windows/guildsettings/auditlogpane.cpp:128 msgid "Marked the channel as NSFW" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:94 -#: src/windows/guildsettings/auditlogpane.cpp:131 +#: src/windows/guildsettings/auditlogpane.cpp:93 +#: src/windows/guildsettings/auditlogpane.cpp:130 msgid "Unmarked the channel as NSFW" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:101 -#, c++-format -msgid "{} made changes to #{}" +#: src/windows/guildsettings/auditlogpane.cpp:100 +msgid "%1 made changes to #%2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:104 -#, c++-format -msgid "{} made changes to <#{}>" +#: src/windows/guildsettings/auditlogpane.cpp:103 +msgid "%1 made changes to <#%2>" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:114 -#: src/windows/guildsettings/auditlogpane.cpp:356 -#: src/windows/guildsettings/auditlogpane.cpp:470 -#, c++-format -msgid "Changed the name from {} to {}" +#: src/windows/guildsettings/auditlogpane.cpp:113 +#: src/windows/guildsettings/auditlogpane.cpp:384 +#: src/windows/guildsettings/auditlogpane.cpp:503 +msgid "Changed the name from %1 to %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:118 -#: src/windows/guildsettings/auditlogpane.cpp:249 -#: src/windows/guildsettings/auditlogpane.cpp:327 -#, c++-format -msgid "Changed the name to {}" +#: src/windows/guildsettings/auditlogpane.cpp:117 +#: src/windows/guildsettings/auditlogpane.cpp:254 +#: src/windows/guildsettings/auditlogpane.cpp:346 +msgid "Changed the name to %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:123 -#, c++-format -msgid "Changed the topic to {}" +#: src/windows/guildsettings/auditlogpane.cpp:122 +msgid "Changed the topic to %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:125 +#: src/windows/guildsettings/auditlogpane.cpp:124 msgid "Cleared the topic" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:136 -#: src/windows/guildsettings/auditlogpane.cpp:452 -#: src/windows/guildsettings/auditlogpane.cpp:478 +#: src/windows/guildsettings/auditlogpane.cpp:135 +#: src/windows/guildsettings/auditlogpane.cpp:486 +#: src/windows/guildsettings/auditlogpane.cpp:511 msgid "Disabled slowmode" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:138 -#: src/windows/guildsettings/auditlogpane.cpp:454 -#: src/windows/guildsettings/auditlogpane.cpp:480 -#, c++-format -msgid "Set slowmode to {} seconds" +#: src/windows/guildsettings/auditlogpane.cpp:137 +#: src/windows/guildsettings/auditlogpane.cpp:488 +#: src/windows/guildsettings/auditlogpane.cpp:513 +msgid "Set slowmode to %1 seconds" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:144 -#, c++-format -msgid "{} removed #{}" +#: src/windows/guildsettings/auditlogpane.cpp:143 +msgid "%1 removed #%2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:150 -#, c++-format -msgid "{} created channel overrides for #{}" +#: src/windows/guildsettings/auditlogpane.cpp:149 +msgid "%1 created channel overrides for #%2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:152 -#, c++-format -msgid "{} created channel overrides for <#{}>" +#: src/windows/guildsettings/auditlogpane.cpp:151 +msgid "%1 created channel overrides for <#%2>" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:159 -#, c++-format -msgid "{} updated channel overrides for #{}" +#: src/windows/guildsettings/auditlogpane.cpp:158 +msgid "%1 updated channel overrides for #%2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:161 -#, c++-format -msgid "{} updated channel overrides for <#{}>" +#: src/windows/guildsettings/auditlogpane.cpp:160 +msgid "%1 updated channel overrides for <#%2>" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:168 -#, c++-format -msgid "{} removed channel overrides for #{}" +#: src/windows/guildsettings/auditlogpane.cpp:167 +msgid "%1 removed channel overrides for #%2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:170 -#, c++-format -msgid "{} removed channel overrides for <#{}>" +#: src/windows/guildsettings/auditlogpane.cpp:169 +msgid "%1 removed channel overrides for <#%2>" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:175 -#, c++-format -msgid "{} kicked {}" +#: src/windows/guildsettings/auditlogpane.cpp:174 +msgid "%1 kicked %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:178 -#, c++-format -msgid "{} pruned {} members" +#: src/windows/guildsettings/auditlogpane.cpp:177 +msgid "%1 pruned %2 members" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:179 -#, c++-format -msgid "For {} days of inactivity" +#: src/windows/guildsettings/auditlogpane.cpp:178 +msgid "For %1 days of inactivity" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:183 -#, c++-format -msgid "{} banned {}" +#: src/windows/guildsettings/auditlogpane.cpp:182 +msgid "%1 banned %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:187 -#, c++-format -msgid "{} removed the ban for {}" +#: src/windows/guildsettings/auditlogpane.cpp:186 +msgid "%1 removed the ban for %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:191 -#, c++-format -msgid "{} updated {}" +#: src/windows/guildsettings/auditlogpane.cpp:190 +msgid "%1 updated %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:196 +#: src/windows/guildsettings/auditlogpane.cpp:195 msgid "Deafened them" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:196 +#: src/windows/guildsettings/auditlogpane.cpp:195 msgid "Undeafened them" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:198 +#: src/windows/guildsettings/auditlogpane.cpp:197 msgid "Muted them" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:198 +#: src/windows/guildsettings/auditlogpane.cpp:197 msgid "Unmuted them" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:200 -#, c++-format -msgid "Set their nickname to {}" +#: src/windows/guildsettings/auditlogpane.cpp:199 +msgid "Set their nickname to %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:206 -#, c++-format -msgid "{} updated roles for {}" +#: src/windows/guildsettings/auditlogpane.cpp:205 +msgid "%1 updated roles for %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:211 -#, c++-format -msgid "Removed a role {}" +#: src/windows/guildsettings/auditlogpane.cpp:210 +msgid "Removed a role %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:213 -#, c++-format -msgid "Added a role {}" +#: src/windows/guildsettings/auditlogpane.cpp:212 +msgid "Added a role %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:221 -#, c++-format -msgid "{} moved a user to {}" +#: src/windows/guildsettings/auditlogpane.cpp:222 +msgid "%1 moved a user to %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:224 -#, c++-format -msgid "{} moved {} users to {}" +#: src/windows/guildsettings/auditlogpane.cpp:225 +msgid "%1 moved %2 users to %3" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:229 -#, c++-format -msgid "{} disconnected {} users from voice" +#: src/windows/guildsettings/auditlogpane.cpp:231 +msgid "%1 disconnected %2 users from voice" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:234 -#, c++-format -msgid "{} added {} to the server" +#: src/windows/guildsettings/auditlogpane.cpp:237 +msgid "%1 added %2 to the server" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:238 -#, c++-format -msgid "{} created the role {}" +#: src/windows/guildsettings/auditlogpane.cpp:242 +msgid "%1 created the role %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:242 -#, c++-format -msgid "{} updated the role {}" +#: src/windows/guildsettings/auditlogpane.cpp:247 +msgid "%1 updated the role %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:253 +#: src/windows/guildsettings/auditlogpane.cpp:258 msgid "Removed the color" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:255 -#, c++-format -msgid "Set the color to {}" +#: src/windows/guildsettings/auditlogpane.cpp:260 +msgid "Set the color to %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:257 +#: src/windows/guildsettings/auditlogpane.cpp:263 msgid "Updated the permissions" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:259 +#: src/windows/guildsettings/auditlogpane.cpp:265 msgid "Mentionable" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:259 +#: src/windows/guildsettings/auditlogpane.cpp:265 msgid "Not mentionable" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:261 +#: src/windows/guildsettings/auditlogpane.cpp:267 msgid "Not hoisted" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:261 +#: src/windows/guildsettings/auditlogpane.cpp:267 msgid "Hoisted" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:267 -#, c++-format -msgid "{} deleted the role {}" +#: src/windows/guildsettings/auditlogpane.cpp:275 +msgid "%1 deleted the role %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:271 -#, c++-format -msgid "{} created an invite {}" +#: src/windows/guildsettings/auditlogpane.cpp:280 +msgid "%1 created an invite %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:277 -#, c++-format -msgid "For channel {}" +#: src/windows/guildsettings/auditlogpane.cpp:286 +msgid "For channel %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:281 +#: src/windows/guildsettings/auditlogpane.cpp:291 msgid "Which has unlimited uses" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:283 -#, c++-format -msgid "Which has {} uses" +#: src/windows/guildsettings/auditlogpane.cpp:293 +msgid "Which has %1 uses" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:286 +#: src/windows/guildsettings/auditlogpane.cpp:297 msgid "With temporary on" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:288 +#: src/windows/guildsettings/auditlogpane.cpp:299 msgid "With temporary off" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:294 -#, c++-format -msgid "{} deleted an invite {}" +#: src/windows/guildsettings/auditlogpane.cpp:307 +msgid "%1 deleted an invite %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:299 -#, c++-format -msgid "{} created the webhook {}" +#: src/windows/guildsettings/auditlogpane.cpp:312 +msgid "%1 created the webhook %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:306 -#, c++-format -msgid "With channel #{}" +#: src/windows/guildsettings/auditlogpane.cpp:320 +msgid "With channel #%1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:319 -#, c++-format -msgid "{} updated the webhook {}" +#: src/windows/guildsettings/auditlogpane.cpp:335 +msgid "%1 updated the webhook %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:322 -#, c++-format -msgid "{} updated a webhook" +#: src/windows/guildsettings/auditlogpane.cpp:340 +msgid "%1 updated a webhook" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:330 +#: src/windows/guildsettings/auditlogpane.cpp:349 msgid "Changed the avatar" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:334 -#, c++-format -msgid "Changed the channel to #{}" +#: src/windows/guildsettings/auditlogpane.cpp:354 +msgid "Changed the channel to #%1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:337 +#: src/windows/guildsettings/auditlogpane.cpp:357 msgid "Changed the channel" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:343 -#, c++-format -msgid "{} deleted the webhook {}" +#: src/windows/guildsettings/auditlogpane.cpp:366 +msgid "%1 deleted the webhook %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:348 -#, c++-format -msgid "{} created the emoji {}" +#: src/windows/guildsettings/auditlogpane.cpp:373 +msgid "%1 created the emoji %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:353 -#, c++-format -msgid "{} updated the emoji {}" +#: src/windows/guildsettings/auditlogpane.cpp:380 +msgid "%1 updated the emoji %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:361 -#, c++-format -msgid "{} deleted the emoji {}" +#: src/windows/guildsettings/auditlogpane.cpp:391 +msgid "%1 deleted the emoji %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:370 -#, c++-format -msgid "{} deleted {} messages in #{}" +#: src/windows/guildsettings/auditlogpane.cpp:402 +msgid "%1 deleted %2 messages in #%3" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:374 -#, c++-format -msgid "{} deleted {} messages" +#: src/windows/guildsettings/auditlogpane.cpp:406 +msgid "%1 deleted %2 messages" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:380 -#, c++-format -msgid "{} pinned a message by {}" +#: src/windows/guildsettings/auditlogpane.cpp:414 +msgid "%1 pinned a message by %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:384 -#, c++-format -msgid "{} unpinned a message by {}" +#: src/windows/guildsettings/auditlogpane.cpp:420 +msgid "%1 unpinned a message by %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:388 -#, c++-format -msgid "{} started the stage for {}" +#: src/windows/guildsettings/auditlogpane.cpp:425 +msgid "%1 started the stage for %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:396 -#: src/windows/guildsettings/auditlogpane.cpp:416 -#, c++-format -msgid "Set the topic to {}" +#: src/windows/guildsettings/auditlogpane.cpp:433 +#: src/windows/guildsettings/auditlogpane.cpp:453 +msgid "Set the topic to %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:401 -#: src/windows/guildsettings/auditlogpane.cpp:421 -#, c++-format -msgid "Set the privacy level to {}" +#: src/windows/guildsettings/auditlogpane.cpp:438 +#: src/windows/guildsettings/auditlogpane.cpp:458 +msgid "Set the privacy level to %1" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:408 -#, c++-format -msgid "{} updated the stage for {}" +#: src/windows/guildsettings/auditlogpane.cpp:445 +msgid "%1 updated the stage for %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:428 -#, c++-format -msgid "{} ended the stage for {}" +#: src/windows/guildsettings/auditlogpane.cpp:465 +msgid "%1 ended the stage for %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:434 -#, c++-format -msgid "{} created a thread {}" +#: src/windows/guildsettings/auditlogpane.cpp:471 +msgid "%1 created a thread %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:446 -#: src/windows/guildsettings/auditlogpane.cpp:484 +#: src/windows/guildsettings/auditlogpane.cpp:480 +#: src/windows/guildsettings/auditlogpane.cpp:517 msgid "Archived the thread" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:446 -#: src/windows/guildsettings/auditlogpane.cpp:484 +#: src/windows/guildsettings/auditlogpane.cpp:480 +#: src/windows/guildsettings/auditlogpane.cpp:517 msgid "Unarchived the thread" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:448 -#: src/windows/guildsettings/auditlogpane.cpp:474 -#, c++-format -msgid "Set auto archive duration to {} minutes" +#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:507 +msgid "Set auto archive duration to %1 minutes" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:456 -#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:490 +#: src/windows/guildsettings/auditlogpane.cpp:515 msgid "Locked the thread, restricting it to only be unarchived by moderators" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:456 -#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:490 +#: src/windows/guildsettings/auditlogpane.cpp:515 msgid "Unlocked the thread, allowing it to be unarchived by non-moderators" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:462 -#, c++-format -msgid "{} made changes to the thread {}" +#: src/windows/guildsettings/auditlogpane.cpp:496 +msgid "%1 made changes to the thread %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:488 -#, c++-format -msgid "{} deleted the thread {}" +#: src/windows/guildsettings/auditlogpane.cpp:521 +msgid "%1 deleted the thread %2" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:492 +#: src/windows/guildsettings/auditlogpane.cpp:525 msgid "Unknown action" msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:500 -#, c++-format -msgid "Reason: {}" +#: src/windows/guildsettings/auditlogpane.cpp:533 +msgid "Reason: %1" msgstr "" #: src/windows/guildsettings/banspane.cpp:13 diff --git a/src/windows/guildsettings/auditlogpane.cpp b/src/windows/guildsettings/auditlogpane.cpp index 1d3b3c00..59fc0bde 100644 --- a/src/windows/guildsettings/auditlogpane.cpp +++ b/src/windows/guildsettings/auditlogpane.cpp @@ -1,6 +1,5 @@ #include "auditlogpane.hpp" -#include #include #include @@ -42,7 +41,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { auto label = Gtk::manage(new Gtk::Label); label->set_ellipsize(Pango::ELLIPSIZE_END); - Glib::ustring user_markup = fmt::format("{}", _("Unknown User")); + Glib::ustring user_markup = Glib::ustring::compose("%1", _("Unknown User")); if (entry.UserID.has_value()) { if (auto user = discord.GetUser(*entry.UserID); user.has_value()) user_markup = discord.GetUser(*entry.UserID)->GetUsernameEscapedBold(); @@ -53,8 +52,8 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { std::vector extra_markup; switch (entry.Type) { case AuditLogActionType::GUILD_UPDATE: { - markup = fmt::format(_("{} made changes to {}"), - user_markup.c_str(), Glib::Markup::escape_text(guild.Name).c_str()); + markup = Glib::ustring::compose(_("%1 made changes to %2"), + user_markup, Glib::Markup::escape_text(guild.Name)); if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { @@ -64,8 +63,8 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { auto new_name = change.NewValue; if (new_name.has_value()) extra_markup.push_back( - fmt::format(_("Set the server name to {}"), - Glib::Markup::escape_text(new_name->get()).c_str())); + Glib::ustring::compose(_("Set the server name to %1"), + Glib::Markup::escape_text(new_name->get()))); else extra_markup.emplace_back(_("Set the server name")); } @@ -74,19 +73,19 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { case AuditLogActionType::CHANNEL_CREATE: { const auto type = *entry.GetNewFromKey("type"); if (type == ChannelType::GUILD_VOICE) { - markup = fmt::format(_("{} created a voice channel #{}"), - user_markup.c_str(), Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str()); + markup = Glib::ustring::compose(_("%1 created a voice channel #%2"), + user_markup, Glib::Markup::escape_text(*entry.GetNewFromKey("name"))); } else { - markup = fmt::format(_("{} created a text channel #{}"), - user_markup.c_str(), Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str()); + markup = Glib::ustring::compose(_("%1 created a text channel #%2"), + user_markup, Glib::Markup::escape_text(*entry.GetNewFromKey("name"))); } if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "name" && change.NewValue.has_value()) extra_markup.push_back( - fmt::format(_("Set the name to {}"), - Glib::Markup::escape_text(change.NewValue->get()).c_str())); + Glib::ustring::compose(_("Set the name to %1"), + Glib::Markup::escape_text(change.NewValue->get()))); else if (change.Key == "nsfw" && change.NewValue.has_value()) if (*change.NewValue) { extra_markup.emplace_back(_("Marked the channel as NSFW")); @@ -98,29 +97,29 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { case AuditLogActionType::CHANNEL_UPDATE: { const auto target_channel = discord.GetChannel(entry.TargetID); if (target_channel.has_value()) { - markup = fmt::format(_("{} made changes to #{}"), - user_markup.c_str(), Glib::Markup::escape_text(*target_channel->Name).c_str()); + markup = Glib::ustring::compose(_("%1 made changes to #%2"), + user_markup, Glib::Markup::escape_text(*target_channel->Name)); } else { - markup = fmt::format(_("{} made changes to <#{}>"), - user_markup.c_str(), Glib::Markup::escape_text(*target_channel->Name).c_str()); + markup = Glib::ustring::compose(_("%1 made changes to <#%2>"), + user_markup, Glib::Markup::escape_text(*target_channel->Name)); } if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { if (change.Key == "name" && change.NewValue.has_value()) { if (change.OldValue.has_value()) { - auto old_name = Glib::Markup::escape_text(change.OldValue->get()).c_str(); - auto new_name = Glib::Markup::escape_text(change.NewValue->get()).c_str(); - extra_markup.push_back(fmt::format(_("Changed the name from {} to {}"), - old_name, new_name)); + auto old_name = Glib::Markup::escape_text(change.OldValue->get()); + auto new_name = Glib::Markup::escape_text(change.NewValue->get()); + extra_markup.push_back(Glib::ustring::compose(_("Changed the name from %1 to %2"), + old_name, new_name)); } else { - auto new_name = Glib::Markup::escape_text(change.NewValue->get()).c_str(); - extra_markup.push_back(fmt::format(_("Changed the name to {}"), new_name)); + auto new_name = Glib::Markup::escape_text(change.NewValue->get()); + extra_markup.push_back(Glib::ustring::compose(_("Changed the name to %1"), new_name)); } } else if (change.Key == "topic") { if (change.NewValue.has_value()) { - auto new_topic = Glib::Markup::escape_text(change.NewValue->get()).c_str(); - extra_markup.push_back(fmt::format(_("Changed the topic to {}"), new_topic)); + auto new_topic = Glib::Markup::escape_text(change.NewValue->get()); + extra_markup.push_back(Glib::ustring::compose(_("Changed the topic to %1"), new_topic)); } else { extra_markup.emplace_back(_("Cleared the topic")); } @@ -135,124 +134,131 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { if (secs == 0) extra_markup.emplace_back(_("Disabled slowmode")); else - extra_markup.emplace_back(fmt::format(_("Set slowmode to {} seconds"), secs)); + extra_markup.emplace_back(Glib::ustring::compose(_("Set slowmode to %1 seconds"), secs)); } } } break; case AuditLogActionType::CHANNEL_DELETE: { - auto deleted_channel_name = Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str(); - markup = fmt::format(_("{} removed #{}"), user_markup.c_str(), deleted_channel_name); + auto deleted_channel_name = Glib::Markup::escape_text(*entry.GetOldFromKey("name")); + markup = Glib::ustring::compose(_("%1 removed #%2"), user_markup, deleted_channel_name); } break; case AuditLogActionType::CHANNEL_OVERWRITE_CREATE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); - markup = fmt::format(_("{} created channel overrides for #{}"), user_markup.c_str(), channel_name); + auto channel_name = Glib::Markup::escape_text(*channel->Name); + markup = Glib::ustring::compose(_("%1 created channel overrides for #%2"), user_markup, channel_name); } else { - markup = fmt::format(_("{} created channel overrides for <#{}>"), entry.TargetID.c_str()); + markup = Glib::ustring::compose(_("%1 created channel overrides for <#%2>"), user_markup, entry.TargetID); } } break; case AuditLogActionType::CHANNEL_OVERWRITE_UPDATE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); - markup = fmt::format(_("{} updated channel overrides for #{}"), user_markup.c_str(), channel_name); + auto channel_name = Glib::Markup::escape_text(*channel->Name); + markup = Glib::ustring::compose(_("%1 updated channel overrides for #%2"), user_markup, channel_name); } else { - markup = fmt::format(_("{} updated channel overrides for <#{}>"), entry.TargetID.c_str()); + markup = Glib::ustring::compose(_("%1 updated channel overrides for <#%2>"), user_markup, entry.TargetID); } } break; case AuditLogActionType::CHANNEL_OVERWRITE_DELETE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - auto channel_name = Glib::Markup::escape_text(*channel->Name).c_str(); - markup = fmt::format(_("{} removed channel overrides for #{}"), user_markup.c_str(), channel_name); + auto channel_name = Glib::Markup::escape_text(*channel->Name); + markup = Glib::ustring::compose(_("%1 removed channel overrides for #%2"), user_markup, channel_name); } else { - markup = fmt::format(_("{} removed channel overrides for <#{}>"), entry.TargetID.c_str()); + markup = Glib::ustring::compose(_("%1 removed channel overrides for <#%2>"), user_markup, entry.TargetID); } } break; case AuditLogActionType::MEMBER_KICK: { - const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); - markup = fmt::format(_("{} kicked {}"), user_markup.c_str(), target_user); + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped(); + markup = Glib::ustring::compose(_("%1 kicked %2"), user_markup, target_user); } break; case AuditLogActionType::MEMBER_PRUNE: { - markup = fmt::format(_("{} pruned {} members"), user_markup.c_str(), *entry.Options->MembersRemoved->c_str()); - extra_markup.emplace_back(fmt::format(_("For {} days of inactivity"), *entry.Options->DeleteMemberDays->c_str())); + markup = Glib::ustring::compose(_("%1 pruned %2 members"), user_markup, *entry.Options->MembersRemoved); + extra_markup.emplace_back(Glib::ustring::compose(_("For %1 days of inactivity"), *entry.Options->DeleteMemberDays)); } break; case AuditLogActionType::MEMBER_BAN_ADD: { - const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); - markup = fmt::format(_("{} banned {}"), user_markup.c_str(), target_user); + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped(); + markup = Glib::ustring::compose(_("%1 banned %2"), user_markup, target_user); } break; case AuditLogActionType::MEMBER_BAN_REMOVE: { - const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); - markup = fmt::format(_("{} removed the ban for {}"), user_markup.c_str(), target_user); + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped(); + markup = Glib::ustring::compose(_("%1 removed the ban for %2"), user_markup, target_user); } break; case AuditLogActionType::MEMBER_UPDATE: { - const auto target_user = discord.GetUser(entry.TargetID)->GetUsername().c_str(); - markup = fmt::format(_("{} updated {}"), user_markup.c_str(), target_user); + const auto target_user = discord.GetUser(entry.TargetID)->GetUsername(); + markup = Glib::ustring::compose(_("%1 updated %2"), user_markup, target_user); - if (entry.Changes.has_value()) + if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "deaf" && change.NewValue.has_value()) - extra_markup.emplace_back((change.NewValue->get() ? _("Deafened them") : _("Undeafened them"))); + extra_markup.emplace_back(change.NewValue->get() ? _("Deafened them") : _("Undeafened them")); else if (change.Key == "mute" && change.NewValue.has_value()) - extra_markup.emplace_back((change.NewValue->get() ? _("Muted them") : _("Unmuted them"))); + extra_markup.emplace_back(change.NewValue->get() ? _("Muted them") : _("Unmuted them")); else if (change.Key == "nick" && change.NewValue.has_value()) - extra_markup.push_back(fmt::format(_("Set their nickname to {}"), - Glib::Markup::escape_text(change.NewValue->get()).c_str())); + extra_markup.push_back(Glib::ustring::compose(_("Set their nickname to %1"), Glib::Markup::escape_text(change.NewValue->get()))); } + } } break; case AuditLogActionType::MEMBER_ROLE_UPDATE: { - const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); - markup = fmt::format(_("{} updated roles for {}"), user_markup.c_str(), target_user); - if (entry.Changes.has_value()) + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped(); + markup = Glib::ustring::compose(_("%1 updated roles for %2"), user_markup, target_user); + if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { - auto role_name = Glib::Markup::escape_text(change.NewValue.value()[0].at("name").get()).c_str(); + auto role_name = Glib::Markup::escape_text(change.NewValue.value()[0].at("name").get()); if (change.Key == "$remove" && change.NewValue.has_value()) { - extra_markup.push_back(fmt::format(_("Removed a role {}"), role_name)); + extra_markup.push_back(Glib::ustring::compose(_("Removed a role %1"), role_name)); } else if (change.Key == "$add" && change.NewValue.has_value()) { - extra_markup.push_back(fmt::format(_("Added a role {}"), role_name)); + extra_markup.push_back(Glib::ustring::compose(_("Added a role %1"), role_name)); } } + } } break; + case AuditLogActionType::MEMBER_MOVE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); if (*entry.Options->Count == "1") { - markup = fmt::format(_("{} moved a user to {}"), - user_markup.c_str(), Glib::Markup::escape_text(*channel->Name).c_str()); + markup = Glib::ustring::compose(_("%1 moved a user to %2"), + user_markup, Glib::Markup::escape_text(*channel->Name)); } else { - markup = fmt::format(_("{} moved {} users to {}"), - user_markup.c_str(), *entry.Options->Count->c_str(), Glib::Markup::escape_text(*channel->Name).c_str()); + markup = Glib::ustring::compose(_("%1 moved %2 users to %3"), + user_markup, *entry.Options->Count, Glib::Markup::escape_text(*channel->Name)); } } break; + case AuditLogActionType::MEMBER_DISCONNECT: { - markup = fmt::format(_("{} disconnected {} users from voice"), - user_markup.c_str(), *entry.Options->Count->c_str()); + markup = Glib::ustring::compose(_("%1 disconnected %2 users from voice"), + user_markup, *entry.Options->Count); } break; + case AuditLogActionType::BOT_ADD: { - const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); - markup = fmt::format(_("{} added {} to the server"), user_markup.c_str(), target_user); + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped(); + markup = Glib::ustring::compose(_("%1 added %2 to the server"), user_markup, target_user); } break; + case AuditLogActionType::ROLE_CREATE: { - auto role_name = *entry.GetNewFromKey("name")->c_str(); - markup = fmt::format(_("{} created the role {}"), user_markup.c_str(), role_name); + auto role_name = *entry.GetNewFromKey("name"); + markup = Glib::ustring::compose(_("%1 created the role %2"), user_markup, role_name); } break; + case AuditLogActionType::ROLE_UPDATE: { const auto role = discord.GetRole(entry.TargetID); - markup = fmt::format(_("{} updated the role {}"), - user_markup.c_str(), - (role.has_value() ? Glib::Markup::escape_text(role->Name) : Glib::ustring(entry.TargetID)).c_str()); - if (entry.Changes.has_value()) + markup = Glib::ustring::compose(_("%1 updated the role %2"), + user_markup, + (role.has_value() ? Glib::Markup::escape_text(role->Name) : Glib::ustring(entry.TargetID))); + if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "name" && change.NewValue.has_value()) { - auto new_name = Glib::Markup::escape_text(change.NewValue->get()).c_str(); - extra_markup.push_back(fmt::format(_("Changed the name to {}"), new_name)); + auto new_name = Glib::Markup::escape_text(change.NewValue->get()); + extra_markup.push_back(Glib::ustring::compose(_("Changed the name to %1"), new_name)); } else if (change.Key == "color" && change.NewValue.has_value()) { const auto col = change.NewValue->get(); - if (col == 0) + if (col == 0) { extra_markup.emplace_back(_("Removed the color")); - else - extra_markup.emplace_back(fmt::format(_("Set the color to {}"), IntToCSSColor(col))); + } else { + extra_markup.emplace_back(Glib::ustring::compose(_("Set the color to %1"), IntToCSSColor(col))); + } } else if (change.Key == "permissions") { extra_markup.emplace_back(_("Updated the permissions")); } else if (change.Key == "mentionable" && change.NewValue.has_value()) { @@ -261,54 +267,63 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { extra_markup.emplace_back(change.NewValue->get() ? _("Not hoisted") : _("Hoisted")); } } + } } break; + case AuditLogActionType::ROLE_DELETE: { - auto role_name = *entry.GetOldFromKey("name")->c_str(); - markup = fmt::format(_("{} deleted the role {}"), user_markup.c_str(), role_name); + auto role_name = *entry.GetOldFromKey("name"); + markup = Glib::ustring::compose(_("%1 deleted the role %2"), user_markup, role_name); } break; + case AuditLogActionType::INVITE_CREATE: { - auto code = *entry.GetNewFromKey("code")->c_str(); - markup = fmt::format(_("{} created an invite {}"), user_markup.c_str(), code); - if (entry.Changes.has_value()) + auto code = *entry.GetNewFromKey("code"); + markup = Glib::ustring::compose(_("%1 created an invite %2"), user_markup, code); + if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "channel_id" && change.NewValue.has_value()) { const auto channel = discord.GetChannel(change.NewValue->get()); - if (!channel.has_value()) continue; - extra_markup.push_back(fmt::format(_("For channel {}"), Glib::Markup::escape_text(*channel->Name).c_str())); + if (channel.has_value()) { + extra_markup.push_back(Glib::ustring::compose(_("For channel %1"), Glib::Markup::escape_text(*channel->Name))); + } } else if (change.Key == "max_uses" && change.NewValue.has_value()) { const auto uses = change.NewValue->get(); - if (uses == 0) + if (uses == 0) { extra_markup.emplace_back(_("Which has unlimited uses")); - else - extra_markup.emplace_back(fmt::format(_("Which has {} uses"), uses)); + } else { + extra_markup.emplace_back(Glib::ustring::compose(_("Which has %1 uses"), uses)); + } } else if (change.Key == "temporary" && change.NewValue.has_value()) { if (change.NewValue->get()) { extra_markup.emplace_back(_("With temporary on")); } else { extra_markup.emplace_back(_("With temporary off")); } - } // no max_age cuz fuck time + } } + } } break; + case AuditLogActionType::INVITE_DELETE: { - markup = fmt::format(_("{} deleted an invite {}"), - user_markup.c_str(), - *entry.GetOldFromKey("code")->c_str()); + markup = Glib::ustring::compose(_("%1 deleted an invite %2"), user_markup, *entry.GetOldFromKey("code")); } break; + case AuditLogActionType::WEBHOOK_CREATE: { - markup = fmt::format(_("{} created the webhook {}"), - user_markup.c_str(), - Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str()); + markup = Glib::ustring::compose( + _("%1 created the webhook %2"), + user_markup, + Glib::Markup::escape_text(*entry.GetNewFromKey("name"))); for (const auto &change : *entry.Changes) { if (change.Key == "channel_id" && change.NewValue.has_value()) { const auto channel = discord.GetChannel(change.NewValue->get()); if (channel.has_value()) { - extra_markup.push_back(fmt::format(_("With channel #{}"), - Glib::Markup::escape_text(*channel->Name).c_str())); + extra_markup.push_back(Glib::ustring::compose( + _("With channel #%1"), + Glib::Markup::escape_text(*channel->Name))); } } } } break; + case AuditLogActionType::WEBHOOK_UPDATE: { const WebhookData *webhookptr = nullptr; for (const auto &webhook : data.Webhooks) { @@ -316,142 +331,161 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { webhookptr = &webhook; } if (webhookptr != nullptr) { - markup = fmt::format(_("{} updated the webhook {}"), - user_markup.c_str(), Glib::Markup::escape_text(webhookptr->Name).c_str()); + markup = Glib::ustring::compose( + _("%1 updated the webhook %2"), + user_markup, + Glib::Markup::escape_text(webhookptr->Name)); } else { - markup = fmt::format(_("{} updated a webhook"), user_markup.c_str()); + markup = Glib::ustring::compose( + _("%1 updated a webhook"), user_markup); } - if (entry.Changes.has_value()) + if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "name" && change.NewValue.has_value()) { - extra_markup.push_back(fmt::format(_("Changed the name to {}"), - Glib::Markup::escape_text(change.NewValue->get()).c_str())); + extra_markup.push_back(Glib::ustring::compose( + _("Changed the name to %1"), + Glib::Markup::escape_text(change.NewValue->get()))); } else if (change.Key == "avatar_hash") { extra_markup.emplace_back(_("Changed the avatar")); } else if (change.Key == "channel_id" && change.NewValue.has_value()) { const auto channel = discord.GetChannel(change.NewValue->get()); if (channel.has_value()) { - extra_markup.push_back(fmt::format(_("Changed the channel to #{}"), - Glib::Markup::escape_text(*channel->Name).c_str())); + extra_markup.push_back(Glib::ustring::compose( + _("Changed the channel to #%1"), + Glib::Markup::escape_text(*channel->Name))); } else { extra_markup.emplace_back(_("Changed the channel")); } } } + } } break; + case AuditLogActionType::WEBHOOK_DELETE: { - markup = fmt::format(_("{} deleted the webhook {}"), - user_markup.c_str(), - Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str()); + markup = Glib::ustring::compose( + _("%1 deleted the webhook %2"), + user_markup, + Glib::Markup::escape_text(*entry.GetOldFromKey("name"))); } break; + case AuditLogActionType::EMOJI_CREATE: { - markup = fmt::format(_("{} created the emoji {}"), - user_markup.c_str(), - Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str()); + markup = Glib::ustring::compose( + _("%1 created the emoji %2"), + user_markup, + Glib::Markup::escape_text(*entry.GetNewFromKey("name"))); } break; + case AuditLogActionType::EMOJI_UPDATE: { - markup = fmt::format(_("{} updated the emoji {}"), - user_markup.c_str(), - Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str()); - extra_markup.push_back(fmt::format(_("Changed the name from {} to {}"), - Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str(), - Glib::Markup::escape_text(*entry.GetNewFromKey("name")).c_str())); + markup = Glib::ustring::compose( + _("%1 updated the emoji %2"), + user_markup, + Glib::Markup::escape_text(*entry.GetOldFromKey("name"))); + extra_markup.push_back(Glib::ustring::compose( + _("Changed the name from %1 to %2"), + Glib::Markup::escape_text(*entry.GetOldFromKey("name")), + Glib::Markup::escape_text(*entry.GetNewFromKey("name")))); } break; + case AuditLogActionType::EMOJI_DELETE: { - markup = fmt::format(_("{} deleted the emoji {}"), - user_markup.c_str(), - Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str()); + markup = Glib::ustring::compose( + _("%1 deleted the emoji %2"), + user_markup, + Glib::Markup::escape_text(*entry.GetOldFromKey("name"))); } break; + case AuditLogActionType::MESSAGE_BULK_DELETE: case AuditLogActionType::MESSAGE_DELETE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); const auto count = *entry.Options->Count; if (channel.has_value()) { - markup = fmt::format(_("{} deleted {} messages in #{}"), - user_markup.c_str(), count.c_str(), - Glib::Markup::escape_text(*channel->Name).c_str()); + markup = Glib::ustring::compose( + _("%1 deleted %2 messages in #%3"), + user_markup, count, Glib::Markup::escape_text(*channel->Name)); } else { - markup = fmt::format(_("{} deleted {} messages"), - user_markup.c_str(), count.c_str()); + markup = Glib::ustring::compose( + _("%1 deleted %2 messages"), + user_markup, count); } } break; + case AuditLogActionType::MESSAGE_PIN: { - const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); - markup = fmt::format(_("{} pinned a message by {}"), user_markup.c_str(), target_user); + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped(); + markup = Glib::ustring::compose( + _("%1 pinned a message by %2"), user_markup, target_user); } break; + case AuditLogActionType::MESSAGE_UNPIN: { - const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped().c_str(); - markup = fmt::format(_("{} unpinned a message by {}"), user_markup.c_str(), target_user); + const auto target_user = discord.GetUser(entry.TargetID)->GetUsernameEscaped(); + markup = Glib::ustring::compose( + _("%1 unpinned a message by %2"), user_markup, target_user); } break; + case AuditLogActionType::STAGE_INSTANCE_CREATE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); - markup = fmt::format(_("{} started the stage for {}"), - user_markup.c_str(), - (channel.has_value() ? Glib::Markup::escape_text(*channel->Name).c_str() : std::to_string(*entry.Options->ChannelID).c_str())); + markup = Glib::ustring::compose(_("%1 started the stage for %2"), + user_markup, + (channel.has_value() ? Glib::Markup::escape_text(*channel->Name) : Glib::ustring { std::to_string(*entry.Options->ChannelID) })); if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "topic" && change.NewValue.has_value()) { extra_markup.push_back( - fmt::format(_("Set the topic to {}"), - Glib::Markup::escape_text(change.NewValue->get()).c_str())); + Glib::ustring::compose(_("Set the topic to %1"), + Glib::Markup::escape_text(change.NewValue->get()))); } else if (change.Key == "privacy_level" && change.NewValue.has_value()) { Glib::ustring str = Glib::Markup::escape_text(GetStagePrivacyDisplayString(change.NewValue->get())); extra_markup.push_back( - fmt::format(_("Set the privacy level to {}"), str.c_str())); + Glib::ustring::compose(_("Set the privacy level to %1"), str)); } } } } break; case AuditLogActionType::STAGE_INSTANCE_UPDATE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); - markup = fmt::format(_("{} updated the stage for {}"), - user_markup.c_str(), - (channel.has_value() ? Glib::Markup::escape_text(*channel->Name).c_str() : std::to_string(*entry.Options->ChannelID).c_str())); + markup = Glib::ustring::compose(_("%1 updated the stage for %2"), + user_markup, + (channel.has_value() ? Glib::Markup::escape_text(*channel->Name) : Glib::ustring { std::to_string(*entry.Options->ChannelID) })); if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "topic" && change.NewValue.has_value()) { extra_markup.push_back( - fmt::format(_("Set the topic to {}"), - Glib::Markup::escape_text(change.NewValue->get()).c_str())); + Glib::ustring::compose(_("Set the topic to %1"), + Glib::Markup::escape_text(change.NewValue->get()))); } else if (change.Key == "privacy_level" && change.NewValue.has_value()) { Glib::ustring str = Glib::Markup::escape_text(GetStagePrivacyDisplayString(change.NewValue->get())); extra_markup.push_back( - fmt::format(_("Set the privacy level to {}"), str.c_str())); + Glib::ustring::compose(_("Set the privacy level to %1"), str)); } } } } break; case AuditLogActionType::STAGE_INSTANCE_DELETE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); - markup = fmt::format(_("{} ended the stage for {}"), - user_markup.c_str(), - (channel.has_value() ? Glib::Markup::escape_text(*channel->Name).c_str() : std::to_string(*entry.Options->ChannelID).c_str())); + markup = Glib::ustring::compose(_("%1 ended the stage for %2"), + user_markup, + (channel.has_value() ? Glib::Markup::escape_text(*channel->Name) : Glib::ustring { std::to_string(*entry.Options->ChannelID) })); } break; case AuditLogActionType::THREAD_CREATE: { const auto channel = discord.GetChannel(entry.TargetID); - markup = fmt::format(_("{} created a thread {}"), - user_markup.c_str(), - (channel.has_value() - ? Glib::Markup::escape_text(*channel->Name) - : Glib::ustring(*entry.GetNewFromKey("name"))) - .c_str()); + markup = Glib::ustring::compose(_("%1 created a thread %2"), + user_markup.c_str(), + channel.has_value() ? Glib::Markup::escape_text(*channel->Name) : Glib::ustring(*entry.GetNewFromKey("name"))); if (entry.Changes.has_value()) { for (const auto &change : *entry.Changes) { if (change.Key == "name") - extra_markup.push_back(fmt::format(_("Set the name to {}"), - Glib::Markup::escape_text(change.NewValue->get()).c_str())); + extra_markup.push_back(Glib::ustring::compose(_("Set the name to %1"), + Glib::Markup::escape_text(change.NewValue->get()))); else if (change.Key == "archived") extra_markup.emplace_back(change.NewValue->get() ? _("Archived the thread") : _("Unarchived the thread")); else if (change.Key == "auto_archive_duration") - extra_markup.emplace_back(fmt::format(_("Set auto archive duration to {} minutes"), change.NewValue->get())); + extra_markup.emplace_back(Glib::ustring::compose(_("Set auto archive duration to %1 minutes"), change.NewValue->get())); else if (change.Key == "rate_limit_per_user" && change.NewValue.has_value()) { const int secs = change.NewValue->get(); if (secs == 0) extra_markup.emplace_back(_("Disabled slowmode")); else - extra_markup.emplace_back(fmt::format(_("Set slowmode to {} seconds"), secs)); + extra_markup.emplace_back(Glib::ustring::compose(_("Set slowmode to %1 seconds"), secs)); } else if (change.Key == "locked") extra_markup.emplace_back(change.NewValue->get() ? _("Locked the thread, restricting it to only be unarchived by moderators") : _("Unlocked the thread, allowing it to be unarchived by non-moderators")); } @@ -459,25 +493,24 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } break; case AuditLogActionType::THREAD_UPDATE: { const auto channel = discord.GetChannel(entry.TargetID); - markup = fmt::format(_("{} made changes to the thread {}"), - user_markup.c_str(), - (channel.has_value() - ? Glib::Markup::escape_text(*channel->Name) - : Glib::ustring(entry.TargetID)) - .c_str()); + markup = Glib::ustring::compose(_("%1 made changes to the thread %2"), + user_markup, + (channel.has_value() + ? Glib::Markup::escape_text(*channel->Name) + : Glib::ustring(entry.TargetID))); for (const auto &change : *entry.Changes) { if (change.Key == "name") - extra_markup.push_back(fmt::format(_("Changed the name from {} to {}"), - Glib::Markup::escape_text(change.OldValue->get()).c_str(), - Glib::Markup::escape_text(change.NewValue->get()).c_str())); + extra_markup.push_back(Glib::ustring::compose(_("Changed the name from %1 to %2"), + Glib::Markup::escape_text(change.OldValue->get()), + Glib::Markup::escape_text(change.NewValue->get()))); else if (change.Key == "auto_archive_duration") - extra_markup.emplace_back(fmt::format(_("Set auto archive duration to {} minutes"), change.NewValue->get())); + extra_markup.emplace_back(Glib::ustring::compose(_("Set auto archive duration to %1 minutes"), change.NewValue->get())); else if (change.Key == "rate_limit_per_user" && change.NewValue.has_value()) { const int secs = change.NewValue->get(); if (secs == 0) extra_markup.emplace_back(_("Disabled slowmode")); else - extra_markup.emplace_back(fmt::format(_("Set slowmode to {} seconds"), secs)); + extra_markup.emplace_back(Glib::ustring::compose(_("Set slowmode to %1 seconds"), secs)); } else if (change.Key == "locked") extra_markup.emplace_back(change.NewValue->get() ? _("Locked the thread, restricting it to only be unarchived by moderators") : _("Unlocked the thread, allowing it to be unarchived by non-moderators")); else if (change.Key == "archived") @@ -485,11 +518,11 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } } break; case AuditLogActionType::THREAD_DELETE: { - markup = fmt::format(_("{} deleted the thread {}"), - user_markup.c_str(), Glib::Markup::escape_text(*entry.GetOldFromKey("name")).c_str()); + markup = Glib::ustring::compose(_("%1 deleted the thread %2"), + user_markup, Glib::Markup::escape_text(*entry.GetOldFromKey("name"))); } break; default: - markup = fmt::format("{}", _("Unknown action")); + markup = Glib::ustring::compose("%1", _("Unknown action")); break; } @@ -497,8 +530,8 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { expander->set_label_widget(*label); if (entry.Reason.has_value()) { - extra_markup.push_back(fmt::format(_("Reason: {}"), - Glib::Markup::escape_text(*entry.Reason).c_str())); + extra_markup.push_back(Glib::ustring::compose(_("Reason: %1"), + Glib::Markup::escape_text(*entry.Reason))); } expander->set_expanded(true); From 43fba7ffa5afbf54f33fe609b053808c20d4b735 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Fri, 27 Sep 2024 18:10:30 -0300 Subject: [PATCH 36/37] (i18n): Replace more calls to fmt::format with Glib::ustring::compose * Update abaddon.pot * Update pt_BR.po --- po/abaddon.pot | 152 ++-- po/pt_BR.po | 963 +++++++++++++--------- src/windows/guildsettings/banspane.cpp | 1 - src/windows/guildsettings/emojispane.cpp | 3 +- src/windows/guildsettings/memberspane.cpp | 3 +- src/windows/pinnedwindow.cpp | 3 +- src/windows/profile/mutualguildspane.cpp | 3 +- src/windows/profile/userinfopane.cpp | 5 +- src/windows/profilewindow.cpp | 2 +- src/windows/threadswindow.cpp | 2 +- src/windows/voice/voicewindow.cpp | 5 +- 11 files changed, 670 insertions(+), 472 deletions(-) diff --git a/po/abaddon.pot b/po/abaddon.pot index 89611881..36047d04 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-26 21:32-0300\n" +"POT-Creation-Date: 2024-09-27 18:08-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -93,8 +93,8 @@ msgid "Kick" msgstr "" #: src/abaddon.cpp:681 src/components/chatlist.cpp:298 -#: src/windows/guildsettings/banspane.cpp:14 -#: src/windows/guildsettings/emojispane.cpp:19 +#: src/windows/guildsettings/banspane.cpp:13 +#: src/windows/guildsettings/emojispane.cpp:18 msgid "Copy ID" msgstr "" @@ -661,7 +661,7 @@ msgid "Verification Required" msgstr "" #: src/dialogs/verificationgate.cpp:14 src/components/friendslist.cpp:258 -#: src/windows/voice/voicewindow.cpp:30 +#: src/windows/voice/voicewindow.cpp:29 msgid "Accept" msgstr "" @@ -1100,7 +1100,7 @@ msgstr "" #: src/components/channellist/channellisttree.cpp:1441 #: src/components/channellist/channellisttree.cpp:1505 #: src/components/channellist/channellisttree.cpp:1530 -#: src/windows/voice/voicewindow.cpp:23 +#: src/windows/voice/voicewindow.cpp:22 msgid "Mute" msgstr "" @@ -1132,7 +1132,7 @@ msgstr "" msgid "Connect" msgstr "" -#: src/windows/mainwindow.cpp:260 src/windows/voice/voicewindow.cpp:28 +#: src/windows/mainwindow.cpp:260 src/windows/voice/voicewindow.cpp:27 msgid "Disconnect" msgstr "" @@ -1164,7 +1164,7 @@ msgstr "" msgid "Dump ready message" msgstr "" -#: src/windows/mainwindow.cpp:288 src/windows/voice/voicewindow.cpp:33 +#: src/windows/mainwindow.cpp:288 src/windows/voice/voicewindow.cpp:32 msgid "View" msgstr "" @@ -1192,7 +1192,11 @@ msgstr "" msgid "Go Forward" msgstr "" -#: src/windows/pinnedwindow.cpp:18 +#: src/windows/pinnedwindow.cpp:15 +msgid "#%1 - Pinned Messages" +msgstr "" + +#: src/windows/pinnedwindow.cpp:17 msgid "Pinned Messages" msgstr "" @@ -1209,8 +1213,7 @@ msgid "Mutual Friends" msgstr "" #: src/windows/profilewindow.cpp:113 -#, c++-format -msgid "Originally known as {}" +msgid "Originally known as %1" msgstr "" #: src/windows/threadswindow.cpp:9 @@ -1222,8 +1225,7 @@ msgid "Private" msgstr "" #: src/windows/threadswindow.cpp:16 -#, c++-format -msgid "#{} - Threads" +msgid "#%1 - Threads" msgstr "" #: src/windows/threadswindow.cpp:32 @@ -1281,28 +1283,28 @@ msgid "Bitrate" msgstr "" #: src/windows/voicesettingswindow.cpp:133 -#: src/windows/voice/voicewindow.cpp:182 +#: src/windows/voice/voicewindow.cpp:181 msgid "Gain" msgstr "" -#: src/windows/profile/mutualguildspane.cpp:39 +#: src/windows/profile/mutualguildspane.cpp:38 msgid "Unknown Server" msgstr "" -#: src/windows/profile/userinfopane.cpp:145 +#: src/windows/profile/userinfopane.cpp:144 msgid "NOTE" msgstr "" -#: src/windows/profile/userinfopane.cpp:191 +#: src/windows/profile/userinfopane.cpp:190 msgid "ABOUT ME" msgstr "" -#: src/windows/profile/userinfopane.cpp:217 +#: src/windows/profile/userinfopane.cpp:216 msgid "Failed to set note" msgstr "" -#: src/windows/profile/userinfopane.cpp:239 -#: src/windows/guildsettings/memberspane.cpp:215 +#: src/windows/profile/userinfopane.cpp:238 +#: src/windows/guildsettings/memberspane.cpp:214 msgid "Account created: " msgstr "" @@ -1680,90 +1682,89 @@ msgstr "" msgid "Reason: %1" msgstr "" -#: src/windows/guildsettings/banspane.cpp:13 +#: src/windows/guildsettings/banspane.cpp:12 msgid "Unban" msgstr "" -#: src/windows/guildsettings/banspane.cpp:32 +#: src/windows/guildsettings/banspane.cpp:31 msgid "" "You do not have permission to see bans. However, bans made while you are " "connected will appear here" msgstr "" -#: src/windows/guildsettings/banspane.cpp:56 +#: src/windows/guildsettings/banspane.cpp:55 msgid "User" msgstr "" -#: src/windows/guildsettings/banspane.cpp:57 +#: src/windows/guildsettings/banspane.cpp:56 msgid "Reason" msgstr "" -#: src/windows/guildsettings/banspane.cpp:101 +#: src/windows/guildsettings/banspane.cpp:100 msgid "Failed to unban user" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:18 +#: src/windows/guildsettings/emojispane.cpp:17 #: src/windows/guildsettings/invitespane.cpp:12 msgid "Delete" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:20 +#: src/windows/guildsettings/emojispane.cpp:19 msgid "Copy Emoji URL" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:21 +#: src/windows/guildsettings/emojispane.cpp:20 msgid "Open in Browser" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:49 -#: src/windows/guildsettings/memberspane.cpp:65 +#: src/windows/guildsettings/emojispane.cpp:48 +#: src/windows/guildsettings/memberspane.cpp:64 #: src/windows/guildsettings/rolespane.cpp:118 msgid "Filter" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:69 +#: src/windows/guildsettings/emojispane.cpp:68 msgid "Emoji" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:77 -#: src/windows/guildsettings/emojispane.cpp:99 +#: src/windows/guildsettings/emojispane.cpp:76 +#: src/windows/guildsettings/emojispane.cpp:98 msgid "Name" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:101 +#: src/windows/guildsettings/emojispane.cpp:100 msgid "Creator" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:102 +#: src/windows/guildsettings/emojispane.cpp:101 msgid "Is Animated?" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:133 -#: src/windows/guildsettings/emojispane.cpp:137 -#: src/windows/guildsettings/emojispane.cpp:139 -#: src/windows/guildsettings/emojispane.cpp:223 -#: src/windows/guildsettings/emojispane.cpp:231 +#: src/windows/guildsettings/emojispane.cpp:132 +#: src/windows/guildsettings/emojispane.cpp:136 +#: src/windows/guildsettings/emojispane.cpp:138 +#: src/windows/guildsettings/emojispane.cpp:222 +#: src/windows/guildsettings/emojispane.cpp:230 #: src/windows/guildsettings/invitespane.cpp:75 msgid "Yes" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:133 -#: src/windows/guildsettings/emojispane.cpp:135 -#: src/windows/guildsettings/emojispane.cpp:137 +#: src/windows/guildsettings/emojispane.cpp:132 +#: src/windows/guildsettings/emojispane.cpp:134 +#: src/windows/guildsettings/emojispane.cpp:136 #: src/windows/guildsettings/invitespane.cpp:75 msgid "No" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:187 +#: src/windows/guildsettings/emojispane.cpp:186 msgid "Failed to set emoji name" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:207 -#, c++-format -msgid "Are you sure you want to delete {}?" +#: src/windows/guildsettings/emojispane.cpp:206 +msgid "Are you sure you want to delete %1?" msgstr "" -#: src/windows/guildsettings/emojispane.cpp:210 +#: src/windows/guildsettings/emojispane.cpp:209 msgid "Failed to delete emoji" msgstr "" @@ -1835,33 +1836,32 @@ msgstr "" msgid "Failed to delete invite" msgstr "" -#: src/windows/guildsettings/memberspane.cpp:21 +#: src/windows/guildsettings/memberspane.cpp:20 msgid "Some members may not be shown if the client is not aware of them" msgstr "" -#: src/windows/guildsettings/memberspane.cpp:179 +#: src/windows/guildsettings/memberspane.cpp:178 msgid "User is a bot" msgstr "" -#: src/windows/guildsettings/memberspane.cpp:214 +#: src/windows/guildsettings/memberspane.cpp:213 msgid "User ID: " msgstr "" -#: src/windows/guildsettings/memberspane.cpp:217 +#: src/windows/guildsettings/memberspane.cpp:216 msgid "Joined server: " msgstr "" -#: src/windows/guildsettings/memberspane.cpp:219 +#: src/windows/guildsettings/memberspane.cpp:218 msgid "Joined server: Unknown" msgstr "" -#: src/windows/guildsettings/memberspane.cpp:220 +#: src/windows/guildsettings/memberspane.cpp:219 msgid "Nickname: " msgstr "" -#: src/windows/guildsettings/memberspane.cpp:223 -#, c++-format -msgid "Boosting since {}" +#: src/windows/guildsettings/memberspane.cpp:222 +msgid "Boosting since %1" msgstr "" #: src/windows/guildsettings/rolespane.cpp:71 @@ -1904,85 +1904,85 @@ msgstr "" msgid "Failed to set role name" msgstr "" -#: src/windows/voice/voicewindow.cpp:24 +#: src/windows/voice/voicewindow.cpp:23 msgid "Deafen" msgstr "" -#: src/windows/voice/voicewindow.cpp:25 +#: src/windows/voice/voicewindow.cpp:24 msgid "Suppress Noise" msgstr "" -#: src/windows/voice/voicewindow.cpp:26 +#: src/windows/voice/voicewindow.cpp:25 msgid "Mix Mono" msgstr "" -#: src/windows/voice/voicewindow.cpp:27 src/windows/voice/voicewindow.cpp:382 +#: src/windows/voice/voicewindow.cpp:26 src/windows/voice/voicewindow.cpp:381 msgid "Request to Speak" msgstr "" -#: src/windows/voice/voicewindow.cpp:29 +#: src/windows/voice/voicewindow.cpp:28 msgid "You've been invited to speak" msgstr "" -#: src/windows/voice/voicewindow.cpp:31 +#: src/windows/voice/voicewindow.cpp:30 msgid "Decline" msgstr "" -#: src/windows/voice/voicewindow.cpp:34 +#: src/windows/voice/voicewindow.cpp:33 msgid "More _Settings" msgstr "" -#: src/windows/voice/voicewindow.cpp:98 +#: src/windows/voice/voicewindow.cpp:97 msgid "" "Voice Activation Detection method\n" "Gate - Simple volume threshold. Slider changes threshold\n" "RNNoise - Heavier on CPU. Slider changes probability threshold" msgstr "" -#: src/windows/voice/voicewindow.cpp:181 +#: src/windows/voice/voicewindow.cpp:180 msgid "Threshold" msgstr "" -#: src/windows/voice/voicewindow.cpp:191 +#: src/windows/voice/voicewindow.cpp:190 msgid "VAD Method" msgstr "" -#: src/windows/voice/voicewindow.cpp:192 +#: src/windows/voice/voicewindow.cpp:191 msgid "Output Device" msgstr "" -#: src/windows/voice/voicewindow.cpp:193 +#: src/windows/voice/voicewindow.cpp:192 msgid "Input Device" msgstr "" -#: src/windows/voice/voicewindow.cpp:236 +#: src/windows/voice/voicewindow.cpp:235 msgid "Speakers" msgstr "" -#: src/windows/voice/voicewindow.cpp:239 +#: src/windows/voice/voicewindow.cpp:238 msgid "Audience" msgstr "" -#: src/windows/voice/voicewindow.cpp:260 +#: src/windows/voice/voicewindow.cpp:259 msgid "Input Settings" msgstr "" -#: src/windows/voice/voicewindow.cpp:374 +#: src/windows/voice/voicewindow.cpp:373 msgid "Leave the Stage" msgstr "" -#: src/windows/voice/voicewindow.cpp:376 +#: src/windows/voice/voicewindow.cpp:375 msgid "Speak on Stage" msgstr "" -#: src/windows/voice/voicewindow.cpp:378 +#: src/windows/voice/voicewindow.cpp:377 msgid "Cancel Request" msgstr "" -#: src/windows/voice/voicewindow.cpp:380 +#: src/windows/voice/voicewindow.cpp:379 msgid "Decline Invite" msgstr "" -#: src/windows/voice/voicewindow.cpp:387 +#: src/windows/voice/voicewindow.cpp:386 msgid "Topic: " msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index 38c71fed..2bf385a9 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-10 20:59-0300\n" +"POT-Creation-Date: 2024-09-27 18:08-0300\n" "PO-Revision-Date: 2024-06-17 11:45-0300\n" "Last-Translator: Gabriel de Moura \n" "Language-Team: Brazilian Portuguese {} has added {} to this channel. Its most " "important updates will show up here." msgstr "" -"{} adicionou {} para este canal" -"Suas atualizações mais importantes vão aparecer aqui." +"{} adicionou {} para este canalSuas " +"atualizações mais importantes vão aparecer aqui." #: src/components/chatmessage.cpp:282 msgid "started a call" @@ -956,7 +956,7 @@ msgid "{} started a thread: {}" msgstr "{} iniciou uma thread: {}" #: src/components/chatmessage.cpp:714 src/components/chatmessage.cpp:737 -#: src/windows/guildsettings/auditlogpane.cpp:45 +#: src/windows/guildsettings/auditlogpane.cpp:44 msgid "Unknown User" msgstr "Usuário Desconhecido" @@ -1205,7 +1205,7 @@ msgstr "Desmutar" #: src/components/channellist/channellisttree.cpp:1441 #: src/components/channellist/channellisttree.cpp:1505 #: src/components/channellist/channellisttree.cpp:1530 -#: src/windows/voice/voicewindow.cpp:23 +#: src/windows/voice/voicewindow.cpp:22 msgid "Mute" msgstr "Mutar" @@ -1237,7 +1237,7 @@ msgstr "Registros de Auditoria" msgid "Connect" msgstr "Conectar" -#: src/windows/mainwindow.cpp:260 src/windows/voice/voicewindow.cpp:28 +#: src/windows/mainwindow.cpp:260 src/windows/voice/voicewindow.cpp:27 msgid "Disconnect" msgstr "Desconectar" @@ -1269,7 +1269,7 @@ msgstr "Limpar cache de arquivo" msgid "Dump ready message" msgstr "Descarregar mensagem de pronto" -#: src/windows/mainwindow.cpp:288 src/windows/voice/voicewindow.cpp:33 +#: src/windows/mainwindow.cpp:288 src/windows/voice/voicewindow.cpp:32 msgid "View" msgstr "Ver" @@ -1297,7 +1297,11 @@ msgstr "Voltar" msgid "Go Forward" msgstr "Avançar" -#: src/windows/pinnedwindow.cpp:18 +#: src/windows/pinnedwindow.cpp:15 +msgid "#%1 - Pinned Messages" +msgstr "" + +#: src/windows/pinnedwindow.cpp:17 msgid "Pinned Messages" msgstr "Mensagens Fixadas" @@ -1314,9 +1318,8 @@ msgid "Mutual Friends" msgstr "Amigos Mútuos" #: src/windows/profilewindow.cpp:113 -#, c++-format -msgid "Originally known as {}" -msgstr "Originalmente conhecido como {}" +msgid "Originally known as %1" +msgstr "" #: src/windows/threadswindow.cpp:9 msgid "Public" @@ -1327,9 +1330,8 @@ msgid "Private" msgstr "Privado" #: src/windows/threadswindow.cpp:16 -#, c++-format -msgid "#{} - Threads" -msgstr "#{} - Threads" +msgid "#%1 - Threads" +msgstr "" #: src/windows/threadswindow.cpp:32 msgid "Active Threads" @@ -1394,476 +1396,412 @@ msgid "Bitrate" msgstr "Taxa de bits" #: src/windows/voicesettingswindow.cpp:133 -#: src/windows/voice/voicewindow.cpp:182 +#: src/windows/voice/voicewindow.cpp:181 msgid "Gain" msgstr "Ganho" -#: src/windows/profile/mutualguildspane.cpp:39 +#: src/windows/profile/mutualguildspane.cpp:38 msgid "Unknown Server" msgstr "Servidor Desconhecido" -#: src/windows/profile/userinfopane.cpp:145 +#: src/windows/profile/userinfopane.cpp:144 msgid "NOTE" msgstr "ANOTAÇÃO" -#: src/windows/profile/userinfopane.cpp:191 +#: src/windows/profile/userinfopane.cpp:190 msgid "ABOUT ME" msgstr "SOBRE MIM" -#: src/windows/profile/userinfopane.cpp:217 +#: src/windows/profile/userinfopane.cpp:216 msgid "Failed to set note" msgstr "Falhou em definir anotação" -#: src/windows/profile/userinfopane.cpp:239 -#: src/windows/guildsettings/memberspane.cpp:215 +#: src/windows/profile/userinfopane.cpp:238 +#: src/windows/guildsettings/memberspane.cpp:214 msgid "Account created: " msgstr "Conta criada: " -#: src/windows/guildsettings/auditlogpane.cpp:56 -#, c++-format -msgid "{} made changes to {}" -msgstr "{} fez mudanças em {}" +#: src/windows/guildsettings/auditlogpane.cpp:55 +msgid "%1 made changes to %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:62 +#: src/windows/guildsettings/auditlogpane.cpp:61 msgid "Set the server icon" msgstr "Definiu o ícone do servidor" -#: src/windows/guildsettings/auditlogpane.cpp:67 -#, c++-format -msgid "Set the server name to {}" -msgstr "Definiu o nome do servidor como {}" +#: src/windows/guildsettings/auditlogpane.cpp:66 +msgid "Set the server name to %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:70 +#: src/windows/guildsettings/auditlogpane.cpp:69 msgid "Set the server name" msgstr "Definiu o nome do servidor" -#: src/windows/guildsettings/auditlogpane.cpp:77 -#, c++-format -msgid "{} created a voice channel #{}" -msgstr "{} criou um canal de voz #{}" +#: src/windows/guildsettings/auditlogpane.cpp:76 +msgid "%1 created a voice channel #%2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:80 -#, c++-format -msgid "{} created a text channel #{}" -msgstr "{} criou um canal de texto #{}" +#: src/windows/guildsettings/auditlogpane.cpp:79 +msgid "%1 created a text channel #%2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:88 -#: src/windows/guildsettings/auditlogpane.cpp:443 -#, c++-format -msgid "Set the name to {}" -msgstr "Mudou o nome para {}" +#: src/windows/guildsettings/auditlogpane.cpp:87 +#: src/windows/guildsettings/auditlogpane.cpp:477 +msgid "Set the name to %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:92 -#: src/windows/guildsettings/auditlogpane.cpp:129 +#: src/windows/guildsettings/auditlogpane.cpp:91 +#: src/windows/guildsettings/auditlogpane.cpp:128 msgid "Marked the channel as NSFW" msgstr "Marcou o canal como NSFW" -#: src/windows/guildsettings/auditlogpane.cpp:94 -#: src/windows/guildsettings/auditlogpane.cpp:131 +#: src/windows/guildsettings/auditlogpane.cpp:93 +#: src/windows/guildsettings/auditlogpane.cpp:130 msgid "Unmarked the channel as NSFW" msgstr "Desmarcou o canal como NSFW" -#: src/windows/guildsettings/auditlogpane.cpp:101 -#, c++-format -msgid "{} made changes to #{}" -msgstr "{} fez mudanças em #{}" +#: src/windows/guildsettings/auditlogpane.cpp:100 +msgid "%1 made changes to #%2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:104 -#, c++-format -msgid "{} made changes to <#{}>" -msgstr "{} fez mudanças em <#{}>" +#: src/windows/guildsettings/auditlogpane.cpp:103 +msgid "%1 made changes to <#%2>" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:114 -#: src/windows/guildsettings/auditlogpane.cpp:356 -#: src/windows/guildsettings/auditlogpane.cpp:470 -#, c++-format -msgid "Changed the name from {} to {}" -msgstr "Alterou o nome de {} para {}" +#: src/windows/guildsettings/auditlogpane.cpp:113 +#: src/windows/guildsettings/auditlogpane.cpp:384 +#: src/windows/guildsettings/auditlogpane.cpp:503 +msgid "Changed the name from %1 to %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:118 -#: src/windows/guildsettings/auditlogpane.cpp:249 -#: src/windows/guildsettings/auditlogpane.cpp:327 -#, c++-format -msgid "Changed the name to {}" -msgstr "Alterou o nome para {}" +#: src/windows/guildsettings/auditlogpane.cpp:117 +#: src/windows/guildsettings/auditlogpane.cpp:254 +#: src/windows/guildsettings/auditlogpane.cpp:346 +msgid "Changed the name to %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:123 -#, c++-format -msgid "Changed the topic to {}" -msgstr "Mudou o tópico para {}" +#: src/windows/guildsettings/auditlogpane.cpp:122 +msgid "Changed the topic to %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:125 +#: src/windows/guildsettings/auditlogpane.cpp:124 msgid "Cleared the topic" msgstr "Limpou o tópico" -#: src/windows/guildsettings/auditlogpane.cpp:136 -#: src/windows/guildsettings/auditlogpane.cpp:452 -#: src/windows/guildsettings/auditlogpane.cpp:478 +#: src/windows/guildsettings/auditlogpane.cpp:135 +#: src/windows/guildsettings/auditlogpane.cpp:486 +#: src/windows/guildsettings/auditlogpane.cpp:511 msgid "Disabled slowmode" msgstr "Desativou modo câmera lenta" -#: src/windows/guildsettings/auditlogpane.cpp:138 -#: src/windows/guildsettings/auditlogpane.cpp:454 -#: src/windows/guildsettings/auditlogpane.cpp:480 -#, c++-format -msgid "Set slowmode to {} seconds" -msgstr "Definiu o temporizador do câmera lenta para {} segundos" +#: src/windows/guildsettings/auditlogpane.cpp:137 +#: src/windows/guildsettings/auditlogpane.cpp:488 +#: src/windows/guildsettings/auditlogpane.cpp:513 +msgid "Set slowmode to %1 seconds" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:144 -#, c++-format -msgid "{} removed #{}" -msgstr "{} removeu #{}" +#: src/windows/guildsettings/auditlogpane.cpp:143 +msgid "%1 removed #%2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:150 -#, c++-format -msgid "{} created channel overrides for #{}" -msgstr "{} criou substituições de canal para #{}" +#: src/windows/guildsettings/auditlogpane.cpp:149 +msgid "%1 created channel overrides for #%2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:152 -#, c++-format -msgid "{} created channel overrides for <#{}>" -msgstr "{} criou substituições de canal para <#{}>" +#: src/windows/guildsettings/auditlogpane.cpp:151 +msgid "%1 created channel overrides for <#%2>" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:159 -#, c++-format -msgid "{} updated channel overrides for #{}" -msgstr "{} atualizou substituições de canal para #{}" +#: src/windows/guildsettings/auditlogpane.cpp:158 +msgid "%1 updated channel overrides for #%2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:161 -#, c++-format -msgid "{} updated channel overrides for <#{}>" -msgstr "{} atualizou substituições de canal para <#{}>" +#: src/windows/guildsettings/auditlogpane.cpp:160 +msgid "%1 updated channel overrides for <#%2>" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:168 -#, c++-format -msgid "{} removed channel overrides for #{}" -msgstr "{} removeu substituições de canal para #{}" +#: src/windows/guildsettings/auditlogpane.cpp:167 +msgid "%1 removed channel overrides for #%2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:170 -#, c++-format -msgid "{} removed channel overrides for <#{}>" -msgstr "{} removeu substituições de canal para <#{}>" +#: src/windows/guildsettings/auditlogpane.cpp:169 +msgid "%1 removed channel overrides for <#%2>" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:175 -#, c++-format -msgid "{} kicked {}" -msgstr "{} expulsou {}" +#: src/windows/guildsettings/auditlogpane.cpp:174 +msgid "%1 kicked %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:178 -#, c++-format -msgid "{} pruned {} members" -msgstr "{} podou {} membros" +#: src/windows/guildsettings/auditlogpane.cpp:177 +msgid "%1 pruned %2 members" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:179 -#, c++-format -msgid "For {} days of inactivity" -msgstr "Por {} dias de inatividade" +#: src/windows/guildsettings/auditlogpane.cpp:178 +msgid "For %1 days of inactivity" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:183 -#, c++-format -msgid "{} banned {}" -msgstr "{} baniu {}" +#: src/windows/guildsettings/auditlogpane.cpp:182 +msgid "%1 banned %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:187 -#, c++-format -msgid "{} removed the ban for {}" -msgstr "{} removeu o banimento de {}" +#: src/windows/guildsettings/auditlogpane.cpp:186 +msgid "%1 removed the ban for %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:191 -#, c++-format -msgid "{} updated {}" -msgstr "{} atualizou {}" +#: src/windows/guildsettings/auditlogpane.cpp:190 +msgid "%1 updated %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:196 +#: src/windows/guildsettings/auditlogpane.cpp:195 msgid "Deafened them" msgstr "Desligou o áudio deles" -#: src/windows/guildsettings/auditlogpane.cpp:196 +#: src/windows/guildsettings/auditlogpane.cpp:195 msgid "Undeafened them" msgstr "Ativou o áudio deles" -#: src/windows/guildsettings/auditlogpane.cpp:198 +#: src/windows/guildsettings/auditlogpane.cpp:197 msgid "Muted them" msgstr "Mutou eles" -#: src/windows/guildsettings/auditlogpane.cpp:198 +#: src/windows/guildsettings/auditlogpane.cpp:197 msgid "Unmuted them" msgstr "Desmutou eles" -#: src/windows/guildsettings/auditlogpane.cpp:200 -#, c++-format -msgid "Set their nickname to {}" -msgstr "Definiu o apelido para {}" - -#: src/windows/guildsettings/auditlogpane.cpp:206 -#, c++-format -msgid "{} updated roles for {}" -msgstr "{} atualizou os cargos de {}" +#: src/windows/guildsettings/auditlogpane.cpp:199 +msgid "Set their nickname to %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:211 -#, c++-format -msgid "Removed a role {}" -msgstr "Removeu o cargo {}" +#: src/windows/guildsettings/auditlogpane.cpp:205 +msgid "%1 updated roles for %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:213 -#, c++-format -msgid "Added a role {}" -msgstr "Adicionou o cargo {}" +#: src/windows/guildsettings/auditlogpane.cpp:210 +msgid "Removed a role %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:221 -#, c++-format -msgid "{} moved a user to {}" -msgstr "{} moveu um usuário para {}" +#: src/windows/guildsettings/auditlogpane.cpp:212 +msgid "Added a role %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:224 -#, c++-format -msgid "{} moved {} users to {}" -msgstr "{} moveu {} usuários para {}" +#: src/windows/guildsettings/auditlogpane.cpp:222 +msgid "%1 moved a user to %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:229 -#, c++-format -msgid "{} disconnected {} users from voice" -msgstr "{} desconectou {} usuários de canais de voz" +#: src/windows/guildsettings/auditlogpane.cpp:225 +msgid "%1 moved %2 users to %3" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:234 -#, c++-format -msgid "{} added {} to the server" -msgstr "{} adicionou {} ao servidor" +#: src/windows/guildsettings/auditlogpane.cpp:231 +msgid "%1 disconnected %2 users from voice" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:238 -#, c++-format -msgid "{} created the role {}" -msgstr "{} criou o cargo {}" +#: src/windows/guildsettings/auditlogpane.cpp:237 +msgid "%1 added %2 to the server" +msgstr "" #: src/windows/guildsettings/auditlogpane.cpp:242 -#, c++-format -msgid "{} updated the role {}" -msgstr "{} atualizou o cargo {}" +msgid "%1 created the role %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:253 +#: src/windows/guildsettings/auditlogpane.cpp:247 +msgid "%1 updated the role %2" +msgstr "" + +#: src/windows/guildsettings/auditlogpane.cpp:258 msgid "Removed the color" msgstr "Removeu a cor" -#: src/windows/guildsettings/auditlogpane.cpp:255 -#, c++-format -msgid "Set the color to {}" -msgstr "Definiu a cor para {}" +#: src/windows/guildsettings/auditlogpane.cpp:260 +msgid "Set the color to %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:257 +#: src/windows/guildsettings/auditlogpane.cpp:263 msgid "Updated the permissions" msgstr "Atualizou as permissões" -#: src/windows/guildsettings/auditlogpane.cpp:259 +#: src/windows/guildsettings/auditlogpane.cpp:265 msgid "Mentionable" msgstr "Mencionável" -#: src/windows/guildsettings/auditlogpane.cpp:259 +#: src/windows/guildsettings/auditlogpane.cpp:265 msgid "Not mentionable" msgstr "Não mencionável" -#: src/windows/guildsettings/auditlogpane.cpp:261 +#: src/windows/guildsettings/auditlogpane.cpp:267 msgid "Not hoisted" msgstr "Não içado" -#: src/windows/guildsettings/auditlogpane.cpp:261 +#: src/windows/guildsettings/auditlogpane.cpp:267 msgid "Hoisted" msgstr "Içado" -#: src/windows/guildsettings/auditlogpane.cpp:267 -#, c++-format -msgid "{} deleted the role {}" -msgstr "{} deletou o cargo {}" +#: src/windows/guildsettings/auditlogpane.cpp:275 +msgid "%1 deleted the role %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:271 -#, c++-format -msgid "{} created an invite {}" -msgstr "{} criou um convite {}" +#: src/windows/guildsettings/auditlogpane.cpp:280 +msgid "%1 created an invite %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:277 -#, c++-format -msgid "For channel {}" -msgstr "Para o canal {}" +#: src/windows/guildsettings/auditlogpane.cpp:286 +msgid "For channel %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:281 +#: src/windows/guildsettings/auditlogpane.cpp:291 msgid "Which has unlimited uses" msgstr "O qual possui usos ilimitados" -#: src/windows/guildsettings/auditlogpane.cpp:283 -#, c++-format -msgid "Which has {} uses" -msgstr "O qual possui {} usos" +#: src/windows/guildsettings/auditlogpane.cpp:293 +msgid "Which has %1 uses" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:286 +#: src/windows/guildsettings/auditlogpane.cpp:297 msgid "With temporary on" msgstr "Com modo temporário ligado" -#: src/windows/guildsettings/auditlogpane.cpp:288 +#: src/windows/guildsettings/auditlogpane.cpp:299 msgid "With temporary off" msgstr "Com modo temporário desligado" -#: src/windows/guildsettings/auditlogpane.cpp:294 -#, c++-format -msgid "{} deleted an invite {}" -msgstr "{} apagou um convite {}" +#: src/windows/guildsettings/auditlogpane.cpp:307 +msgid "%1 deleted an invite %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:299 -#, c++-format -msgid "{} created the webhook {}" -msgstr "{} criou um webhook {}" +#: src/windows/guildsettings/auditlogpane.cpp:312 +msgid "%1 created the webhook %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:306 -#, c++-format -msgid "With channel #{}" -msgstr "Com o canal #{}" +#: src/windows/guildsettings/auditlogpane.cpp:320 +msgid "With channel #%1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:319 -#, c++-format -msgid "{} updated the webhook {}" -msgstr "{} atualizou o webhook {}" +#: src/windows/guildsettings/auditlogpane.cpp:335 +msgid "%1 updated the webhook %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:322 -#, c++-format -msgid "{} updated a webhook" -msgstr "{} atualizou um webhook" +#: src/windows/guildsettings/auditlogpane.cpp:340 +msgid "%1 updated a webhook" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:330 +#: src/windows/guildsettings/auditlogpane.cpp:349 msgid "Changed the avatar" msgstr "Mudou o avatar" -#: src/windows/guildsettings/auditlogpane.cpp:334 -#, c++-format -msgid "Changed the channel to #{}" -msgstr "Mudou o canal para #{}" +#: src/windows/guildsettings/auditlogpane.cpp:354 +msgid "Changed the channel to #%1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:337 +#: src/windows/guildsettings/auditlogpane.cpp:357 msgid "Changed the channel" msgstr "Mudou o canal" -#: src/windows/guildsettings/auditlogpane.cpp:343 -#, c++-format -msgid "{} deleted the webhook {}" -msgstr "{} apagou o webhook {}" +#: src/windows/guildsettings/auditlogpane.cpp:366 +msgid "%1 deleted the webhook %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:348 -#, c++-format -msgid "{} created the emoji {}" -msgstr "{} criou o emoji {}" +#: src/windows/guildsettings/auditlogpane.cpp:373 +msgid "%1 created the emoji %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:353 -#, c++-format -msgid "{} updated the emoji {}" -msgstr "{} atualizou o emoji {}" +#: src/windows/guildsettings/auditlogpane.cpp:380 +msgid "%1 updated the emoji %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:361 -#, c++-format -msgid "{} deleted the emoji {}" -msgstr "{} apagou o emoji {}" +#: src/windows/guildsettings/auditlogpane.cpp:391 +msgid "%1 deleted the emoji %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:370 -#, c++-format -msgid "{} deleted {} messages in #{}" -msgstr "{} apagou {} mensagens em #{}" +#: src/windows/guildsettings/auditlogpane.cpp:402 +msgid "%1 deleted %2 messages in #%3" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:374 -#, c++-format -msgid "{} deleted {} messages" -msgstr "{} apagou {} mensagens" +#: src/windows/guildsettings/auditlogpane.cpp:406 +msgid "%1 deleted %2 messages" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:380 -#, c++-format -msgid "{} pinned a message by {}" -msgstr "{} fixou uma mensagem de {}" +#: src/windows/guildsettings/auditlogpane.cpp:414 +msgid "%1 pinned a message by %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:384 -#, c++-format -msgid "{} unpinned a message by {}" -msgstr "{} desafixar uma mensagem de {}" +#: src/windows/guildsettings/auditlogpane.cpp:420 +msgid "%1 unpinned a message by %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:388 -#, c++-format -msgid "{} started the stage for {}" -msgstr "{} iniciou o palco para {}" +#: src/windows/guildsettings/auditlogpane.cpp:425 +msgid "%1 started the stage for %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:396 -#: src/windows/guildsettings/auditlogpane.cpp:416 -#, c++-format -msgid "Set the topic to {}" -msgstr "Definiu o tópico para {}" +#: src/windows/guildsettings/auditlogpane.cpp:433 +#: src/windows/guildsettings/auditlogpane.cpp:453 +msgid "Set the topic to %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:401 -#: src/windows/guildsettings/auditlogpane.cpp:421 -#, c++-format -msgid "Set the privacy level to {}" -msgstr "Definiu o nível de privacidade para {}" +#: src/windows/guildsettings/auditlogpane.cpp:438 +#: src/windows/guildsettings/auditlogpane.cpp:458 +msgid "Set the privacy level to %1" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:408 -#, c++-format -msgid "{} updated the stage for {}" -msgstr "{} atualizou o palco para {}" +#: src/windows/guildsettings/auditlogpane.cpp:445 +msgid "%1 updated the stage for %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:428 -#, c++-format -msgid "{} ended the stage for {}" -msgstr "{} encerrou o palco para {}" +#: src/windows/guildsettings/auditlogpane.cpp:465 +msgid "%1 ended the stage for %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:434 -#, c++-format -msgid "{} created a thread {}" -msgstr "{} criou uma thread {}" +#: src/windows/guildsettings/auditlogpane.cpp:471 +msgid "%1 created a thread %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:446 -#: src/windows/guildsettings/auditlogpane.cpp:484 +#: src/windows/guildsettings/auditlogpane.cpp:480 +#: src/windows/guildsettings/auditlogpane.cpp:517 msgid "Archived the thread" msgstr "Arquivou a thread" -#: src/windows/guildsettings/auditlogpane.cpp:446 -#: src/windows/guildsettings/auditlogpane.cpp:484 +#: src/windows/guildsettings/auditlogpane.cpp:480 +#: src/windows/guildsettings/auditlogpane.cpp:517 msgid "Unarchived the thread" msgstr "Desarquivou a thread" -#: src/windows/guildsettings/auditlogpane.cpp:448 -#: src/windows/guildsettings/auditlogpane.cpp:474 -#, c++-format -msgid "Set auto archive duration to {} minutes" +#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:507 +msgid "Set auto archive duration to %1 minutes" msgstr "" -"Definiu o intervalo para o arquivamento automático para {} minutos" -#: src/windows/guildsettings/auditlogpane.cpp:456 -#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:490 +#: src/windows/guildsettings/auditlogpane.cpp:515 msgid "Locked the thread, restricting it to only be unarchived by moderators" msgstr "" "Bloqueou a thread, restringindo-a a ser desarquivada apenas por moderadores" -#: src/windows/guildsettings/auditlogpane.cpp:456 -#: src/windows/guildsettings/auditlogpane.cpp:482 +#: src/windows/guildsettings/auditlogpane.cpp:490 +#: src/windows/guildsettings/auditlogpane.cpp:515 msgid "Unlocked the thread, allowing it to be unarchived by non-moderators" msgstr "" "Desbloqueou a thread, permitindo-a ser desarquivada por não-moderadores " -#: src/windows/guildsettings/auditlogpane.cpp:462 -#, c++-format -msgid "{} made changes to the thread {}" -msgstr "{} fez mudanças na thread {}" +#: src/windows/guildsettings/auditlogpane.cpp:496 +msgid "%1 made changes to the thread %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:488 -#, c++-format -msgid "{} deleted the thread {}" -msgstr "{} apagou a thread {}" +#: src/windows/guildsettings/auditlogpane.cpp:521 +msgid "%1 deleted the thread %2" +msgstr "" -#: src/windows/guildsettings/auditlogpane.cpp:492 +#: src/windows/guildsettings/auditlogpane.cpp:525 msgid "Unknown action" msgstr "Ação desconhecida" -#: src/windows/guildsettings/auditlogpane.cpp:500 -#, c++-format -msgid "Reason: {}" -msgstr "Motivo: {}" +#: src/windows/guildsettings/auditlogpane.cpp:533 +msgid "Reason: %1" +msgstr "" -#: src/windows/guildsettings/banspane.cpp:13 +#: src/windows/guildsettings/banspane.cpp:12 msgid "Unban" msgstr "Desbanir" -#: src/windows/guildsettings/banspane.cpp:32 +#: src/windows/guildsettings/banspane.cpp:31 msgid "" "You do not have permission to see bans. However, bans made while you are " "connected will appear here" @@ -1871,80 +1809,79 @@ msgstr "" "Você não possui permissões para ver os banimentos. No entanto, banimentos " "feitos enquanto você está conectado vão aparecer aqui" -#: src/windows/guildsettings/banspane.cpp:56 +#: src/windows/guildsettings/banspane.cpp:55 msgid "User" msgstr "Usuário" -#: src/windows/guildsettings/banspane.cpp:57 +#: src/windows/guildsettings/banspane.cpp:56 msgid "Reason" msgstr "Motivo" -#: src/windows/guildsettings/banspane.cpp:101 +#: src/windows/guildsettings/banspane.cpp:100 msgid "Failed to unban user" msgstr "Falhou em desbanir usuário" -#: src/windows/guildsettings/emojispane.cpp:18 +#: src/windows/guildsettings/emojispane.cpp:17 #: src/windows/guildsettings/invitespane.cpp:12 msgid "Delete" msgstr "Apagar" -#: src/windows/guildsettings/emojispane.cpp:20 +#: src/windows/guildsettings/emojispane.cpp:19 msgid "Copy Emoji URL" msgstr "Copiar URL do emoji" -#: src/windows/guildsettings/emojispane.cpp:21 +#: src/windows/guildsettings/emojispane.cpp:20 msgid "Open in Browser" msgstr "Abrir no Navegador" -#: src/windows/guildsettings/emojispane.cpp:49 -#: src/windows/guildsettings/memberspane.cpp:65 +#: src/windows/guildsettings/emojispane.cpp:48 +#: src/windows/guildsettings/memberspane.cpp:64 #: src/windows/guildsettings/rolespane.cpp:118 msgid "Filter" msgstr "Filtro" -#: src/windows/guildsettings/emojispane.cpp:69 +#: src/windows/guildsettings/emojispane.cpp:68 msgid "Emoji" msgstr "Emoji" -#: src/windows/guildsettings/emojispane.cpp:77 -#: src/windows/guildsettings/emojispane.cpp:99 +#: src/windows/guildsettings/emojispane.cpp:76 +#: src/windows/guildsettings/emojispane.cpp:98 msgid "Name" msgstr "Nome" -#: src/windows/guildsettings/emojispane.cpp:101 +#: src/windows/guildsettings/emojispane.cpp:100 msgid "Creator" msgstr "Criador" -#: src/windows/guildsettings/emojispane.cpp:102 +#: src/windows/guildsettings/emojispane.cpp:101 msgid "Is Animated?" msgstr "É Animado?" -#: src/windows/guildsettings/emojispane.cpp:133 -#: src/windows/guildsettings/emojispane.cpp:137 -#: src/windows/guildsettings/emojispane.cpp:139 -#: src/windows/guildsettings/emojispane.cpp:223 -#: src/windows/guildsettings/emojispane.cpp:231 +#: src/windows/guildsettings/emojispane.cpp:132 +#: src/windows/guildsettings/emojispane.cpp:136 +#: src/windows/guildsettings/emojispane.cpp:138 +#: src/windows/guildsettings/emojispane.cpp:222 +#: src/windows/guildsettings/emojispane.cpp:230 #: src/windows/guildsettings/invitespane.cpp:75 msgid "Yes" msgstr "Sim" -#: src/windows/guildsettings/emojispane.cpp:133 -#: src/windows/guildsettings/emojispane.cpp:135 -#: src/windows/guildsettings/emojispane.cpp:137 +#: src/windows/guildsettings/emojispane.cpp:132 +#: src/windows/guildsettings/emojispane.cpp:134 +#: src/windows/guildsettings/emojispane.cpp:136 #: src/windows/guildsettings/invitespane.cpp:75 msgid "No" msgstr "Não" -#: src/windows/guildsettings/emojispane.cpp:187 +#: src/windows/guildsettings/emojispane.cpp:186 msgid "Failed to set emoji name" msgstr "Falhou em definir um nome para o emoji" -#: src/windows/guildsettings/emojispane.cpp:207 -#, c++-format -msgid "Are you sure you want to delete {}?" -msgstr "Você tem certeza de que quer deletar {}?" +#: src/windows/guildsettings/emojispane.cpp:206 +msgid "Are you sure you want to delete %1?" +msgstr "" -#: src/windows/guildsettings/emojispane.cpp:210 +#: src/windows/guildsettings/emojispane.cpp:209 msgid "Failed to delete emoji" msgstr "Falhou em deletar emoji" @@ -2016,36 +1953,35 @@ msgstr "Ilimitado" msgid "Failed to delete invite" msgstr "Falhou em apagar convite" -#: src/windows/guildsettings/memberspane.cpp:21 +#: src/windows/guildsettings/memberspane.cpp:20 msgid "Some members may not be shown if the client is not aware of them" msgstr "" "Alguns membros podem não ser listados se o cliente não estiver consciente da " "existência deles" -#: src/windows/guildsettings/memberspane.cpp:179 +#: src/windows/guildsettings/memberspane.cpp:178 msgid "User is a bot" msgstr "Usuário é um robô" -#: src/windows/guildsettings/memberspane.cpp:214 +#: src/windows/guildsettings/memberspane.cpp:213 msgid "User ID: " msgstr "ID de Usuário" -#: src/windows/guildsettings/memberspane.cpp:217 +#: src/windows/guildsettings/memberspane.cpp:216 msgid "Joined server: " msgstr "Entrou no servidor: " -#: src/windows/guildsettings/memberspane.cpp:219 +#: src/windows/guildsettings/memberspane.cpp:218 msgid "Joined server: Unknown" msgstr "Entrou no servidor: ???" -#: src/windows/guildsettings/memberspane.cpp:220 +#: src/windows/guildsettings/memberspane.cpp:219 msgid "Nickname: " msgstr "Apelido: " -#: src/windows/guildsettings/memberspane.cpp:223 -#, c++-format -msgid "Boosting since {}" -msgstr "Impulsionando desde {}" +#: src/windows/guildsettings/memberspane.cpp:222 +msgid "Boosting since %1" +msgstr "" #: src/windows/guildsettings/rolespane.cpp:71 msgid "Failed to set role position" @@ -2087,35 +2023,35 @@ msgstr "Eventos" msgid "Failed to set role name" msgstr "Falhou em definir o nome de um cargo" -#: src/windows/voice/voicewindow.cpp:24 +#: src/windows/voice/voicewindow.cpp:23 msgid "Deafen" msgstr "Ensurdecer" -#: src/windows/voice/voicewindow.cpp:25 +#: src/windows/voice/voicewindow.cpp:24 msgid "Suppress Noise" msgstr "Suprimir Ruído" -#: src/windows/voice/voicewindow.cpp:26 +#: src/windows/voice/voicewindow.cpp:25 msgid "Mix Mono" msgstr "Mixagem Mono" -#: src/windows/voice/voicewindow.cpp:27 src/windows/voice/voicewindow.cpp:382 +#: src/windows/voice/voicewindow.cpp:26 src/windows/voice/voicewindow.cpp:381 msgid "Request to Speak" msgstr "Pedir para Falar" -#: src/windows/voice/voicewindow.cpp:29 +#: src/windows/voice/voicewindow.cpp:28 msgid "You've been invited to speak" msgstr "Voce foi convidado para subir no palco" -#: src/windows/voice/voicewindow.cpp:31 +#: src/windows/voice/voicewindow.cpp:30 msgid "Decline" msgstr "Recusar" -#: src/windows/voice/voicewindow.cpp:34 +#: src/windows/voice/voicewindow.cpp:33 msgid "More _Settings" msgstr "Mais _Configurações" -#: src/windows/voice/voicewindow.cpp:98 +#: src/windows/voice/voicewindow.cpp:97 msgid "" "Voice Activation Detection method\n" "Gate - Simple volume threshold. Slider changes threshold\n" @@ -2126,54 +2062,323 @@ msgstr "" "RNNoise - Mais pesado na CPU. O controle deslizante altera o limite de " "probabilidade" -#: src/windows/voice/voicewindow.cpp:181 +#: src/windows/voice/voicewindow.cpp:180 msgid "Threshold" msgstr "Limite" -#: src/windows/voice/voicewindow.cpp:191 +#: src/windows/voice/voicewindow.cpp:190 msgid "VAD Method" msgstr "Método VAD" -#: src/windows/voice/voicewindow.cpp:192 +#: src/windows/voice/voicewindow.cpp:191 msgid "Output Device" msgstr "Dispositivo de Saída" -#: src/windows/voice/voicewindow.cpp:193 +#: src/windows/voice/voicewindow.cpp:192 msgid "Input Device" msgstr "Dispositivo de Entrada" -#: src/windows/voice/voicewindow.cpp:236 +#: src/windows/voice/voicewindow.cpp:235 msgid "Speakers" msgstr "Falantes" -#: src/windows/voice/voicewindow.cpp:239 +#: src/windows/voice/voicewindow.cpp:238 msgid "Audience" msgstr "Audiência" -#: src/windows/voice/voicewindow.cpp:260 +#: src/windows/voice/voicewindow.cpp:259 msgid "Input Settings" msgstr "Configurações de Entrada" -#: src/windows/voice/voicewindow.cpp:374 +#: src/windows/voice/voicewindow.cpp:373 msgid "Leave the Stage" msgstr "Sair do Palco" -#: src/windows/voice/voicewindow.cpp:376 +#: src/windows/voice/voicewindow.cpp:375 msgid "Speak on Stage" msgstr "Falar no Palco" -#: src/windows/voice/voicewindow.cpp:378 +#: src/windows/voice/voicewindow.cpp:377 msgid "Cancel Request" msgstr "Cancelar Pedido" -#: src/windows/voice/voicewindow.cpp:380 +#: src/windows/voice/voicewindow.cpp:379 msgid "Decline Invite" msgstr "Recusar Convite" -#: src/windows/voice/voicewindow.cpp:387 +#: src/windows/voice/voicewindow.cpp:386 msgid "Topic: " msgstr "Tópico: " +#, c++-format +#~ msgid "Originally known as {}" +#~ msgstr "Originalmente conhecido como {}" + +#, c++-format +#~ msgid "#{} - Threads" +#~ msgstr "#{} - Threads" + +#, c++-format +#~ msgid "Are you sure you want to delete {}?" +#~ msgstr "Você tem certeza de que quer deletar {}?" + +#, c++-format +#~ msgid "Boosting since {}" +#~ msgstr "Impulsionando desde {}" + +#, c++-format +#~ msgid "{} made changes to {}" +#~ msgstr "{} fez mudanças em {}" + +#, c++-format +#~ msgid "Set the server name to {}" +#~ msgstr "Definiu o nome do servidor como {}" + +#, c++-format +#~ msgid "{} created a voice channel #{}" +#~ msgstr "{} criou um canal de voz #{}" + +#, c++-format +#~ msgid "{} created a text channel #{}" +#~ msgstr "{} criou um canal de texto #{}" + +#, c++-format +#~ msgid "Set the name to {}" +#~ msgstr "Mudou o nome para {}" + +#, c++-format +#~ msgid "{} made changes to #{}" +#~ msgstr "{} fez mudanças em #{}" + +#, c++-format +#~ msgid "{} made changes to <#{}>" +#~ msgstr "{} fez mudanças em <#{}>" + +#, c++-format +#~ msgid "Changed the name from {} to {}" +#~ msgstr "Alterou o nome de {} para {}" + +#, c++-format +#~ msgid "Changed the name to {}" +#~ msgstr "Alterou o nome para {}" + +#, c++-format +#~ msgid "Changed the topic to {}" +#~ msgstr "Mudou o tópico para {}" + +#, c++-format +#~ msgid "Set slowmode to {} seconds" +#~ msgstr "Definiu o temporizador do câmera lenta para {} segundos" + +#, c++-format +#~ msgid "{} removed #{}" +#~ msgstr "{} removeu #{}" + +#, c++-format +#~ msgid "{} created channel overrides for #{}" +#~ msgstr "{} criou substituições de canal para #{}" + +#, c++-format +#~ msgid "{} created channel overrides for <#{}>" +#~ msgstr "{} criou substituições de canal para <#{}>" + +#, c++-format +#~ msgid "{} updated channel overrides for #{}" +#~ msgstr "{} atualizou substituições de canal para #{}" + +#, c++-format +#~ msgid "{} updated channel overrides for <#{}>" +#~ msgstr "{} atualizou substituições de canal para <#{}>" + +#, c++-format +#~ msgid "{} removed channel overrides for #{}" +#~ msgstr "{} removeu substituições de canal para #{}" + +#, c++-format +#~ msgid "{} removed channel overrides for <#{}>" +#~ msgstr "{} removeu substituições de canal para <#{}>" + +#, c++-format +#~ msgid "{} kicked {}" +#~ msgstr "{} expulsou {}" + +#, c++-format +#~ msgid "{} pruned {} members" +#~ msgstr "{} podou {} membros" + +#, c++-format +#~ msgid "For {} days of inactivity" +#~ msgstr "Por {} dias de inatividade" + +#, c++-format +#~ msgid "{} banned {}" +#~ msgstr "{} baniu {}" + +#, c++-format +#~ msgid "{} removed the ban for {}" +#~ msgstr "{} removeu o banimento de {}" + +#, c++-format +#~ msgid "{} updated {}" +#~ msgstr "{} atualizou {}" + +#, c++-format +#~ msgid "Set their nickname to {}" +#~ msgstr "Definiu o apelido para {}" + +#, c++-format +#~ msgid "{} updated roles for {}" +#~ msgstr "{} atualizou os cargos de {}" + +#, c++-format +#~ msgid "Removed a role {}" +#~ msgstr "Removeu o cargo {}" + +#, c++-format +#~ msgid "Added a role {}" +#~ msgstr "Adicionou o cargo {}" + +#, c++-format +#~ msgid "{} moved a user to {}" +#~ msgstr "{} moveu um usuário para {}" + +#, c++-format +#~ msgid "{} moved {} users to {}" +#~ msgstr "{} moveu {} usuários para {}" + +#, c++-format +#~ msgid "{} disconnected {} users from voice" +#~ msgstr "{} desconectou {} usuários de canais de voz" + +#, c++-format +#~ msgid "{} added {} to the server" +#~ msgstr "{} adicionou {} ao servidor" + +#, c++-format +#~ msgid "{} created the role {}" +#~ msgstr "{} criou o cargo {}" + +#, c++-format +#~ msgid "{} updated the role {}" +#~ msgstr "{} atualizou o cargo {}" + +#, c++-format +#~ msgid "Set the color to {}" +#~ msgstr "Definiu a cor para {}" + +#, c++-format +#~ msgid "{} deleted the role {}" +#~ msgstr "{} deletou o cargo {}" + +#, c++-format +#~ msgid "{} created an invite {}" +#~ msgstr "{} criou um convite {}" + +#, c++-format +#~ msgid "For channel {}" +#~ msgstr "Para o canal {}" + +#, c++-format +#~ msgid "Which has {} uses" +#~ msgstr "O qual possui {} usos" + +#, c++-format +#~ msgid "{} deleted an invite {}" +#~ msgstr "{} apagou um convite {}" + +#, c++-format +#~ msgid "{} created the webhook {}" +#~ msgstr "{} criou um webhook {}" + +#, c++-format +#~ msgid "With channel #{}" +#~ msgstr "Com o canal #{}" + +#, c++-format +#~ msgid "{} updated the webhook {}" +#~ msgstr "{} atualizou o webhook {}" + +#, c++-format +#~ msgid "{} updated a webhook" +#~ msgstr "{} atualizou um webhook" + +#, c++-format +#~ msgid "Changed the channel to #{}" +#~ msgstr "Mudou o canal para #{}" + +#, c++-format +#~ msgid "{} deleted the webhook {}" +#~ msgstr "{} apagou o webhook {}" + +#, c++-format +#~ msgid "{} created the emoji {}" +#~ msgstr "{} criou o emoji {}" + +#, c++-format +#~ msgid "{} updated the emoji {}" +#~ msgstr "{} atualizou o emoji {}" + +#, c++-format +#~ msgid "{} deleted the emoji {}" +#~ msgstr "{} apagou o emoji {}" + +#, c++-format +#~ msgid "{} deleted {} messages in #{}" +#~ msgstr "{} apagou {} mensagens em #{}" + +#, c++-format +#~ msgid "{} deleted {} messages" +#~ msgstr "{} apagou {} mensagens" + +#, c++-format +#~ msgid "{} pinned a message by {}" +#~ msgstr "{} fixou uma mensagem de {}" + +#, c++-format +#~ msgid "{} unpinned a message by {}" +#~ msgstr "{} desafixar uma mensagem de {}" + +#, c++-format +#~ msgid "{} started the stage for {}" +#~ msgstr "{} iniciou o palco para {}" + +#, c++-format +#~ msgid "Set the topic to {}" +#~ msgstr "Definiu o tópico para {}" + +#, c++-format +#~ msgid "Set the privacy level to {}" +#~ msgstr "Definiu o nível de privacidade para {}" + +#, c++-format +#~ msgid "{} updated the stage for {}" +#~ msgstr "{} atualizou o palco para {}" + +#, c++-format +#~ msgid "{} ended the stage for {}" +#~ msgstr "{} encerrou o palco para {}" + +#, c++-format +#~ msgid "{} created a thread {}" +#~ msgstr "{} criou uma thread {}" + +#, c++-format +#~ msgid "Set auto archive duration to {} minutes" +#~ msgstr "" +#~ "Definiu o intervalo para o arquivamento automático para {} minutos" + +#, c++-format +#~ msgid "{} made changes to the thread {}" +#~ msgstr "{} fez mudanças na thread {}" + +#, c++-format +#~ msgid "{} deleted the thread {}" +#~ msgstr "{} apagou a thread {}" + +#, c++-format +#~ msgid "Reason: {}" +#~ msgstr "Motivo: {}" + #~ msgid "Gate" #~ msgstr "Gate" diff --git a/src/windows/guildsettings/banspane.cpp b/src/windows/guildsettings/banspane.cpp index a926d7a5..b3835c5c 100644 --- a/src/windows/guildsettings/banspane.cpp +++ b/src/windows/guildsettings/banspane.cpp @@ -1,7 +1,6 @@ #include "banspane.hpp" #include -#include #include #include "abaddon.hpp" diff --git a/src/windows/guildsettings/emojispane.cpp b/src/windows/guildsettings/emojispane.cpp index ce33b7ec..e39293fc 100644 --- a/src/windows/guildsettings/emojispane.cpp +++ b/src/windows/guildsettings/emojispane.cpp @@ -1,7 +1,6 @@ #include "emojispane.hpp" #include -#include #include #include @@ -204,7 +203,7 @@ void GuildSettingsEmojisPane::OnMenuDelete() { const auto name = static_cast(selected_row[m_columns.m_col_name]); const auto id = static_cast(selected_row[m_columns.m_col_id]); if (auto *window = dynamic_cast(get_toplevel())) - if (Abaddon::Get().ShowConfirm(fmt::format(_("Are you sure you want to delete {}?"), name.c_str()), window)) { + if (Abaddon::Get().ShowConfirm(Glib::ustring::compose(_("Are you sure you want to delete %1?"), name), window)) { const auto cb = [](DiscordError code) { if (code != DiscordError::NONE) { Gtk::MessageDialog dlg(_("Failed to delete emoji"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK); diff --git a/src/windows/guildsettings/memberspane.cpp b/src/windows/guildsettings/memberspane.cpp index e5b9ed85..00712d6a 100644 --- a/src/windows/guildsettings/memberspane.cpp +++ b/src/windows/guildsettings/memberspane.cpp @@ -1,7 +1,6 @@ #include "memberspane.hpp" #include -#include #include "abaddon.hpp" #include "util.hpp" @@ -220,7 +219,7 @@ void GuildSettingsMembersPaneInfo::SetUser(Snowflake user_id) { m_nickname.set_text(_("Nickname: ") + member.Nickname); m_nickname.set_visible(!member.Nickname.empty()); if (member.PremiumSince.has_value()) { - m_boosting.set_text(fmt::format(_("Boosting since {}"), FormatISO8601(*member.PremiumSince).c_str())); + m_boosting.set_text(Glib::ustring::compose(_("Boosting since %1"), FormatISO8601(*member.PremiumSince))); m_boosting.show(); } else m_boosting.hide(); diff --git a/src/windows/pinnedwindow.cpp b/src/windows/pinnedwindow.cpp index db932e81..eb81dbcf 100644 --- a/src/windows/pinnedwindow.cpp +++ b/src/windows/pinnedwindow.cpp @@ -1,6 +1,5 @@ #include "pinnedwindow.hpp" -#include #include #include "abaddon.hpp" @@ -13,7 +12,7 @@ PinnedWindow::PinnedWindow(const ChannelData &data) set_name("pinned-messages"); set_default_size(450, 375); if (data.Name.has_value()) - set_title(fmt::format("#{} - Pinned Messages", (*data.Name).c_str())); + set_title(Glib::ustring::compose(_("#%1 - Pinned Messages"), *data.Name)); else set_title(_("Pinned Messages")); set_position(Gtk::WIN_POS_CENTER); diff --git a/src/windows/profile/mutualguildspane.cpp b/src/windows/profile/mutualguildspane.cpp index 47511c1f..ad40a522 100644 --- a/src/windows/profile/mutualguildspane.cpp +++ b/src/windows/profile/mutualguildspane.cpp @@ -1,7 +1,6 @@ #include "mutualguildspane.hpp" #include -#include #include "abaddon.hpp" @@ -36,7 +35,7 @@ MutualGuildItem::MutualGuildItem(const MutualGuildData &guild) m_name.set_markup("" + Glib::Markup::escape_text(data->Name) + ""); } else { m_icon.property_pixbuf() = Abaddon::Get().GetImageManager().GetPlaceholder(24); - m_name.set_markup(fmt::format("{}", _("Unknown Server"))); + m_name.set_markup(Glib::ustring::compose("%1", _("Unknown Server"))); } if (guild.Nick.has_value()) { diff --git a/src/windows/profile/userinfopane.cpp b/src/windows/profile/userinfopane.cpp index 0b3b46c8..44c27778 100644 --- a/src/windows/profile/userinfopane.cpp +++ b/src/windows/profile/userinfopane.cpp @@ -2,7 +2,6 @@ #include -#include #include #include @@ -142,7 +141,7 @@ NotesContainer::NotesContainer() m_label.get_style_context()->add_class("profile-notes-label"); m_note.get_style_context()->add_class("profile-notes-text"); - m_label.set_markup(fmt::format("{}", _("NOTE"))); + m_label.set_markup(Glib::ustring::compose("%1", _("NOTE"))); m_label.set_halign(Gtk::ALIGN_START); m_note.set_wrap_mode(Gtk::WRAP_WORD_CHAR); @@ -188,7 +187,7 @@ NotesContainer::type_signal_update_note NotesContainer::signal_update_note() { BioContainer::BioContainer() : Gtk::Box(Gtk::ORIENTATION_VERTICAL) { - m_label.set_markup(fmt::format("{}", _("ABOUT ME"))); + m_label.set_markup(Glib::ustring::compose("%1", _("ABOUT ME"))); m_label.set_halign(Gtk::ALIGN_START); m_bio.set_halign(Gtk::ALIGN_START); m_bio.set_line_wrap(true); diff --git a/src/windows/profilewindow.cpp b/src/windows/profilewindow.cpp index 7445e3d4..15232daf 100644 --- a/src/windows/profilewindow.cpp +++ b/src/windows/profilewindow.cpp @@ -110,7 +110,7 @@ void ProfileWindow::OnFetchProfile(const UserProfileData &data) { m_pane_guilds.SetMutualGuilds(data.MutualGuilds); if (data.LegacyUsername.has_value()) { - m_username.set_tooltip_text(fmt::format(_("Originally known as {}"), (*data.LegacyUsername).c_str())); + m_username.set_tooltip_text(Glib::ustring::compose(_("Originally known as %1"), *data.LegacyUsername)); } for (auto child : m_badges.get_children()) { diff --git a/src/windows/threadswindow.cpp b/src/windows/threadswindow.cpp index 025efa92..b7c65568 100644 --- a/src/windows/threadswindow.cpp +++ b/src/windows/threadswindow.cpp @@ -13,7 +13,7 @@ ThreadsWindow::ThreadsWindow(const ChannelData &channel) , m_archived(channel, sigc::mem_fun(*this, &ThreadsWindow::ListFilterFunc)) { set_name("threads-window"); set_default_size(450, 375); - set_title(fmt::format(_("#{} - Threads"), (*channel.Name).c_str())); + set_title(Glib::ustring::compose(_("#%1 - Threads"), *channel.Name)); set_position(Gtk::WIN_POS_CENTER); get_style_context()->add_class("app-window"); get_style_context()->add_class("app-popup"); diff --git a/src/windows/voice/voicewindow.cpp b/src/windows/voice/voicewindow.cpp index 9352cef7..08e35ae0 100644 --- a/src/windows/voice/voicewindow.cpp +++ b/src/windows/voice/voicewindow.cpp @@ -5,7 +5,6 @@ #include "voicewindow.hpp" -#include #include #include "abaddon.hpp" @@ -233,10 +232,10 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) Abaddon::Get().GetDiscordClient().DeclineInviteToSpeak(m_channel_id, NOOP_CALLBACK); }); - m_speakers_label.set_markup(fmt::format("{}", _("Speakers"))); + m_speakers_label.set_markup(Glib::ustring::compose("%1", _("Speakers"))); if (m_is_stage) m_listing.pack_start(m_speakers_label, false, true); m_listing.pack_start(m_speakers_list, false, true); - m_audience_label.set_markup(fmt::format("{}", _("Audience"))); + m_audience_label.set_markup(Glib::ustring::compose("%1", _("Audience"))); if (m_is_stage) m_listing.pack_start(m_audience_label, false, true); if (m_is_stage) m_listing.pack_start(m_audience_list, false, true); m_scroll.add(m_listing); From 9bc6bb06357690500cf8c5abc256e4c3c5a19c05 Mon Sep 17 00:00:00 2001 From: smolBlackCat Date: Fri, 11 Oct 2024 12:25:40 -0300 Subject: [PATCH 37/37] (i18n): Replace calls to fmt::format with Glib::ustring::compose --- po/abaddon.pot | 248 ++++++++++++-------------- src/abaddon.cpp | 13 +- src/components/chatinputindicator.cpp | 19 +- src/components/chatmessage.cpp | 85 +++++---- src/components/chatwindow.cpp | 3 +- src/components/friendslist.cpp | 10 +- src/components/ratelimitindicator.cpp | 5 +- src/dialogs/setstatus.cpp | 3 +- 8 files changed, 177 insertions(+), 209 deletions(-) diff --git a/po/abaddon.pot b/po/abaddon.pot index 36047d04..075306a9 100644 --- a/po/abaddon.pot +++ b/po/abaddon.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-27 18:08-0300\n" +"POT-Creation-Date: 2024-10-11 12:21-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,121 +17,115 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/abaddon.cpp:216 -#, c++-format -msgid "css failed parsing ({})" +#: src/abaddon.cpp:215 +msgid "css failed parsing (%1)" msgstr "" -#: src/abaddon.cpp:232 +#: src/abaddon.cpp:231 msgid "The PNG pixbufloader wasn't detected. Abaddon may not work as a result." msgstr "" -#: src/abaddon.cpp:238 +#: src/abaddon.cpp:237 msgid "" "The GIF pixbufloader wasn't detected. Animations may not display as a result." msgstr "" -#: src/abaddon.cpp:253 +#: src/abaddon.cpp:252 msgid "The settings file could not be opened!" msgstr "" -#: src/abaddon.cpp:259 +#: src/abaddon.cpp:258 msgid "The emoji file couldn't be loaded!" msgstr "" -#: src/abaddon.cpp:265 +#: src/abaddon.cpp:264 msgid "The Discord cache could not be created!" msgstr "" -#: src/abaddon.cpp:273 +#: src/abaddon.cpp:272 msgid "The audio engine could not be initialized!" msgstr "" -#: src/abaddon.cpp:334 +#: src/abaddon.cpp:333 msgid "Quit" msgstr "" -#: src/abaddon.cpp:469 +#: src/abaddon.cpp:468 msgid "Discord rejected your token" msgstr "" -#: src/abaddon.cpp:474 -#, c++-format -msgid "Lost connection with Discord's gateway. Try reconnecting (code {})" +#: src/abaddon.cpp:473 +msgid "Lost connection with Discord's gateway. Try reconnecting (code %1)" msgstr "" -#: src/abaddon.cpp:484 src/abaddon.cpp:927 +#: src/abaddon.cpp:483 src/abaddon.cpp:926 msgid "This thread is archived. Sending a message will unarchive it" msgstr "" -#: src/abaddon.cpp:627 +#: src/abaddon.cpp:626 msgid "" "Cookies could not be fetched. This may increase your chances of being " "flagged by Discord's anti-spam" msgstr "" -#: src/abaddon.cpp:636 +#: src/abaddon.cpp:635 msgid "" "Build number could not be fetched. This may increase your chances of being " "flagged by Discord's anti-spam" msgstr "" -#: src/abaddon.cpp:653 +#: src/abaddon.cpp:652 msgid "Failed to accept the verification gate." msgstr "" -#: src/abaddon.cpp:678 +#: src/abaddon.cpp:677 msgid "Insert Mention" msgstr "" -#: src/abaddon.cpp:679 +#: src/abaddon.cpp:678 msgid "Ban" msgstr "" -#: src/abaddon.cpp:680 +#: src/abaddon.cpp:679 msgid "Kick" msgstr "" -#: src/abaddon.cpp:681 src/components/chatlist.cpp:298 +#: src/abaddon.cpp:680 src/components/chatlist.cpp:298 #: src/windows/guildsettings/banspane.cpp:13 #: src/windows/guildsettings/emojispane.cpp:18 msgid "Copy ID" msgstr "" -#: src/abaddon.cpp:682 +#: src/abaddon.cpp:681 msgid "Go to DM" msgstr "" -#: src/abaddon.cpp:683 src/windows/guildsettingswindow.cpp:66 +#: src/abaddon.cpp:682 src/windows/guildsettingswindow.cpp:66 msgid "Roles" msgstr "" -#: src/abaddon.cpp:684 +#: src/abaddon.cpp:683 msgid "View Profile" msgstr "" -#: src/abaddon.cpp:685 +#: src/abaddon.cpp:684 msgid "Remove From Group" msgstr "" -#: src/abaddon.cpp:1003 -#, c++-format -msgid "Are you sure you want to leave {}?" +#: src/abaddon.cpp:1002 +msgid "Are you sure you want to leave %1?" msgstr "" -#: src/abaddon.cpp:1013 -#, c++-format -msgid "Are you sure you want to kick {}?" +#: src/abaddon.cpp:1012 +msgid "Are you sure you want to kick %1?" msgstr "" -#: src/abaddon.cpp:1023 -#, c++-format -msgid "Are you sure you want to ban {}?" +#: src/abaddon.cpp:1022 +msgid "Are you sure you want to ban %1?" msgstr "" -#: src/abaddon.cpp:1120 -#, c++-format -msgid "css failed to load ({})" +#: src/abaddon.cpp:1119 +msgid "css failed to load (%1)" msgstr "" #: src/startup.cpp:14 @@ -581,7 +575,7 @@ msgid "Confirm" msgstr "" #: src/dialogs/confirm.cpp:9 src/dialogs/friendpicker.cpp:15 -#: src/dialogs/setstatus.cpp:27 src/dialogs/textinput.cpp:12 +#: src/dialogs/setstatus.cpp:26 src/dialogs/textinput.cpp:12 #: src/dialogs/token.cpp:16 src/components/friendslist.cpp:293 msgid "Cancel" msgstr "" @@ -594,61 +588,60 @@ msgstr "" msgid "Pick a friend" msgstr "" -#: src/dialogs/setstatus.cpp:24 src/windows/mainwindow.cpp:268 +#: src/dialogs/setstatus.cpp:23 src/windows/mainwindow.cpp:268 msgid "Set Status" msgstr "" -#: src/dialogs/setstatus.cpp:35 src/dialogs/setstatus.cpp:39 +#: src/dialogs/setstatus.cpp:34 src/dialogs/setstatus.cpp:38 #: src/components/friendslist.cpp:27 msgid "Online" msgstr "" -#: src/dialogs/setstatus.cpp:36 +#: src/dialogs/setstatus.cpp:35 msgid "Do Not Disturb" msgstr "" -#: src/dialogs/setstatus.cpp:37 +#: src/dialogs/setstatus.cpp:36 msgid "Away" msgstr "" -#: src/dialogs/setstatus.cpp:38 +#: src/dialogs/setstatus.cpp:37 msgid "Invisible" msgstr "" -#: src/dialogs/setstatus.cpp:41 +#: src/dialogs/setstatus.cpp:40 msgid "Playing" msgstr "" -#: src/dialogs/setstatus.cpp:42 +#: src/dialogs/setstatus.cpp:41 msgid "Streaming" msgstr "" -#: src/dialogs/setstatus.cpp:43 +#: src/dialogs/setstatus.cpp:42 msgid "Listening to" msgstr "" -#: src/dialogs/setstatus.cpp:44 +#: src/dialogs/setstatus.cpp:43 msgid "Watching" msgstr "" -#: src/dialogs/setstatus.cpp:45 src/dialogs/setstatus.cpp:47 +#: src/dialogs/setstatus.cpp:44 src/dialogs/setstatus.cpp:46 msgid "Custom" msgstr "" -#: src/dialogs/setstatus.cpp:46 +#: src/dialogs/setstatus.cpp:45 msgid "Competing in" msgstr "" -#: src/dialogs/setstatus.cpp:57 -#, c++-format -msgid "How are you, {}?" +#: src/dialogs/setstatus.cpp:56 +msgid "How are you, %1?" msgstr "" -#: src/dialogs/setstatus.cpp:59 +#: src/dialogs/setstatus.cpp:58 msgid "Status" msgstr "" -#: src/dialogs/setstatus.cpp:61 +#: src/dialogs/setstatus.cpp:60 msgid "Activity" msgstr "" @@ -698,21 +691,18 @@ msgid "Enter alt-text" msgstr "" #: src/components/chatinputindicator.cpp:119 -#, c++-format -msgid "{} is typing..." +msgid "%1 is typing..." msgstr "" #: src/components/chatinputindicator.cpp:121 -#, c++-format -msgid "{} and {} are typing" +msgid "%1 and %2 are typing" msgstr "" -#: src/components/chatinputindicator.cpp:125 -#, c++-format -msgid "{}, {}, {} and {} are typing..." +#: src/components/chatinputindicator.cpp:126 +msgid "%1, %2, %3 and %4 are typing..." msgstr "" -#: src/components/chatinputindicator.cpp:132 +#: src/components/chatinputindicator.cpp:133 msgid "Several people are typing..." msgstr "" @@ -740,154 +730,142 @@ msgstr "" msgid "Pin" msgstr "" -#: src/components/chatmessage.cpp:16 +#: src/components/chatmessage.cpp:15 msgid "Copy Link" msgstr "" -#: src/components/chatmessage.cpp:147 +#: src/components/chatmessage.cpp:146 msgid "deleted" msgstr "" -#: src/components/chatmessage.cpp:149 +#: src/components/chatmessage.cpp:148 msgid "edited" msgstr "" -#: src/components/chatmessage.cpp:203 +#: src/components/chatmessage.cpp:202 msgid "boosted server" msgstr "" -#: src/components/chatmessage.cpp:206 +#: src/components/chatmessage.cpp:205 msgid "user joined" msgstr "" -#: src/components/chatmessage.cpp:209 +#: src/components/chatmessage.cpp:208 msgid "message pinned" msgstr "" -#: src/components/chatmessage.cpp:219 -#, c++-format -msgid "used {} with {}" +#: src/components/chatmessage.cpp:218 +msgid "used %1 with %2" msgstr "" -#: src/components/chatmessage.cpp:234 -#, c++-format +#: src/components/chatmessage.cpp:233 msgid "" -"{} added {}" +"%1 added %2" msgstr "" -#: src/components/chatmessage.cpp:244 -#, c++-format +#: src/components/chatmessage.cpp:243 msgid "" -"{} left" +"%1 left" msgstr "" -#: src/components/chatmessage.cpp:246 -#, c++-format +#: src/components/chatmessage.cpp:245 msgid "" -"{} removed {}" +"%1 removed %2" msgstr "" -#: src/components/chatmessage.cpp:253 -#, c++-format -msgid "{} changed the name to {}" +#: src/components/chatmessage.cpp:252 +msgid "%1 changed the name to %2" msgstr "" -#: src/components/chatmessage.cpp:258 -#, c++-format -msgid "{} changed the channel icon" +#: src/components/chatmessage.cpp:257 +msgid "%1 changed the channel icon" msgstr "" -#: src/components/chatmessage.cpp:266 -#, c++-format +#: src/components/chatmessage.cpp:265 msgid "" -"{} just boosted the server {} times! {} has " -"achieved Level {}!" +"%1 just boosted the server %2 times! %3 has " +"achieved Level %4!" msgstr "" -#: src/components/chatmessage.cpp:276 -#, c++-format +#: src/components/chatmessage.cpp:275 msgid "" -"{} has added {} to this channel. Its most " +"%1 has added %2 to this channel. Its most " "important updates will show up here." msgstr "" -#: src/components/chatmessage.cpp:282 +#: src/components/chatmessage.cpp:281 msgid "started a call" msgstr "" -#: src/components/chatmessage.cpp:285 +#: src/components/chatmessage.cpp:284 msgid "" "This server has been removed from Server Discovery because it no longer " "passes all the requirements." msgstr "" -#: src/components/chatmessage.cpp:288 +#: src/components/chatmessage.cpp:287 msgid "" "This server is eligible for Server Discovery again and has been " "automatically relisted!" msgstr "" -#: src/components/chatmessage.cpp:291 +#: src/components/chatmessage.cpp:290 msgid "" "This server has failed Discovery activity requirements for 1 week. If this " "server fails for 4 weeks in a row, it will be automatically removed from " "Discovery." msgstr "" -#: src/components/chatmessage.cpp:294 +#: src/components/chatmessage.cpp:293 msgid "" "This server has failed Discovery activity requirements for 3 weeks in a row. " "If this server fails for 1 more week, it will be removed from Discovery." msgstr "" -#: src/components/chatmessage.cpp:300 -#, c++-format -msgid "{} started a thread: " +#: src/components/chatmessage.cpp:299 +msgid "%1 started a thread: " msgstr "" -#: src/components/chatmessage.cpp:307 -#, c++-format -msgid "{} started a thread: {}" +#: src/components/chatmessage.cpp:306 +msgid "%1 started a thread: %2" msgstr "" -#: src/components/chatmessage.cpp:714 src/components/chatmessage.cpp:737 +#: src/components/chatmessage.cpp:713 src/components/chatmessage.cpp:736 #: src/windows/guildsettings/auditlogpane.cpp:44 msgid "Unknown User" msgstr "" -#: src/components/chatmessage.cpp:730 -#, c++-format -msgid "{} used /{}" +#: src/components/chatmessage.cpp:729 +msgid "%1 used /%2" msgstr "" -#: src/components/chatmessage.cpp:741 +#: src/components/chatmessage.cpp:740 msgid "deleted message" msgstr "" -#: src/components/chatmessage.cpp:747 +#: src/components/chatmessage.cpp:746 msgid "attachment" msgstr "" -#: src/components/chatmessage.cpp:749 +#: src/components/chatmessage.cpp:748 msgid "embed" msgstr "" -#: src/components/chatmessage.cpp:769 +#: src/components/chatmessage.cpp:768 msgid "reply unavailable" msgstr "" -#: src/components/chatwindow.cpp:334 -#, c++-format -msgid "Replying to {}" +#: src/components/chatwindow.cpp:333 +msgid "Replying to %1" msgstr "" -#: src/components/chatwindow.cpp:336 +#: src/components/chatwindow.cpp:335 msgid "Replying..." msgstr "" -#: src/components/chatwindow.cpp:356 +#: src/components/chatwindow.cpp:355 msgid "Editing..." msgstr "" @@ -908,23 +886,19 @@ msgid "Failed to accept" msgstr "" #: src/components/friendslist.cpp:129 -#, c++-format -msgid "Are you sure you want to unblock {}?" +msgid "Are you sure you want to unblock %1?" msgstr "" #: src/components/friendslist.cpp:132 -#, c++-format -msgid "Are you sure you want to remove {}?" +msgid "Are you sure you want to remove %1?" msgstr "" #: src/components/friendslist.cpp:135 -#, c++-format -msgid "Are you sure you want to ignore {}?" +msgid "Are you sure you want to ignore %1?" msgstr "" #: src/components/friendslist.cpp:138 -#, c++-format -msgid "Are you sure you want to cancel your request to {}?" +msgid "Are you sure you want to cancel your request to %1?" msgstr "" #: src/components/friendslist.cpp:146 @@ -956,8 +930,7 @@ msgid "Success!" msgstr "" #: src/components/friendslist.cpp:237 -#, c++-format -msgid "Failed: {}" +msgid "Failed: %1" msgstr "" #: src/components/friendslist.cpp:290 @@ -972,18 +945,17 @@ msgstr "" msgid "Outgoing Friend Request" msgstr "" -#: src/components/ratelimitindicator.cpp:88 +#: src/components/ratelimitindicator.cpp:87 msgid "You may bypass slowmode." msgstr "" -#: src/components/ratelimitindicator.cpp:93 -#, c++-format -msgid "{}s" +#: src/components/ratelimitindicator.cpp:92 +#, c-format +msgid "%1s" msgstr "" -#: src/components/ratelimitindicator.cpp:96 -#, c++-format -msgid "Slowmode is enabled. Members can send one message every {} seconds" +#: src/components/ratelimitindicator.cpp:95 +msgid "Slowmode is enabled. Members can send one message every %1 seconds" msgstr "" #: src/components/voiceinfobox.cpp:33 src/components/voiceinfobox.cpp:34 diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 3f74569b..2dafd490 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include "platform.hpp" @@ -213,7 +212,7 @@ int Abaddon::StartGTK() { m_css_provider = Gtk::CssProvider::create(); m_css_provider->signal_parsing_error().connect([](const Glib::RefPtr §ion, const Glib::Error &error) { - Gtk::MessageDialog dlg(fmt::format(_("css failed parsing ({})"), error.what().c_str()), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(Glib::ustring::compose(_("css failed parsing (%1)"), error.what()), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); }); @@ -471,7 +470,7 @@ void Abaddon::DiscordOnDisconnect(bool is_reconnecting, GatewayCloseCode close_c dlg.run(); } else if (close_code != GatewayCloseCode::Normal) { Gtk::MessageDialog dlg(*m_main_window, - fmt::format(_("Lost connection with Discord's gateway. Try reconnecting (code {})"), static_cast(close_code)), + Glib::ustring::compose(_("Lost connection with Discord's gateway. Try reconnecting (code %1)"), static_cast(close_code)), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); @@ -1000,7 +999,7 @@ void Abaddon::ActionLeaveGuild(Snowflake id) { ConfirmDialog dlg(*m_main_window); const auto guild = m_discord.GetGuild(id); if (guild.has_value()) - dlg.SetConfirmText(fmt::format(_("Are you sure you want to leave {}?"), guild->Name.c_str())); + dlg.SetConfirmText(Glib::ustring::compose(_("Are you sure you want to leave %1?"), guild->Name)); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.LeaveGuild(id); @@ -1010,7 +1009,7 @@ void Abaddon::ActionKickMember(Snowflake user_id, Snowflake guild_id) { ConfirmDialog dlg(*m_main_window); const auto user = m_discord.GetUser(user_id); if (user.has_value()) - dlg.SetConfirmText(fmt::format(_("Are you sure you want to kick {}?"), user->GetUsername().c_str())); + dlg.SetConfirmText(Glib::ustring::compose(_("Are you sure you want to kick %1?"), user->GetUsername())); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.KickUser(user_id, guild_id); @@ -1020,7 +1019,7 @@ void Abaddon::ActionBanMember(Snowflake user_id, Snowflake guild_id) { ConfirmDialog dlg(*m_main_window); const auto user = m_discord.GetUser(user_id); if (user.has_value()) - dlg.SetConfirmText(fmt::format(_("Are you sure you want to ban {}?"), user->GetUsername().c_str())); + dlg.SetConfirmText(Glib::ustring::compose(_("Are you sure you want to ban %1?"), user->GetUsername())); auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) m_discord.BanUser(user_id, guild_id); @@ -1117,7 +1116,7 @@ void Abaddon::ActionReloadCSS() { m_css_provider->load_from_path(GetCSSPath("/" + GetSettings().MainCSS)); Gtk::StyleContext::add_provider_for_screen(Gdk::Screen::get_default(), m_css_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } catch (Glib::Error &e) { - Gtk::MessageDialog dlg(*m_main_window, fmt::format(_("css failed to load ({})"), e.what().c_str()), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + Gtk::MessageDialog dlg(*m_main_window, Glib::ustring::compose(_("css failed to load (%1)"), e.what()), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_position(Gtk::WIN_POS_CENTER); dlg.run(); } diff --git a/src/components/chatinputindicator.cpp b/src/components/chatinputindicator.cpp index 69c16cdb..3eb123b3 100644 --- a/src/components/chatinputindicator.cpp +++ b/src/components/chatinputindicator.cpp @@ -116,17 +116,18 @@ void ChatInputIndicator::ComputeTypingString() { if (typers.empty()) { SetTypingString(""); } else if (typers.size() == 1) { - SetTypingString(fmt::format(_("{} is typing..."), typers[0].GetDisplayName(m_active_guild).c_str())); + SetTypingString(Glib::ustring::compose(_("%1 is typing..."), typers[0].GetDisplayName(m_active_guild))); } else if (typers.size() == 2) { - SetTypingString(fmt::format(_("{} and {} are typing"), - typers[0].GetDisplayName(m_active_guild).c_str(), - typers[1].GetDisplayName(m_active_guild).c_str())); + SetTypingString(Glib::ustring::compose(_("%1 and %2 are typing"), + typers[0].GetDisplayName(m_active_guild), + typers[1].GetDisplayName(m_active_guild))); } else if (typers.size() > 2 && typers.size() <= MaxUsersInIndicator) { - Glib::ustring str = fmt::format(_("{}, {}, {} and {} are typing..."), - typers[0].GetDisplayName(m_active_guild).c_str(), - typers[1].GetDisplayName(m_active_guild).c_str(), - typers[2].GetDisplayName(m_active_guild).c_str(), - typers[3].GetDisplayName(m_active_guild).c_str()); + // FIXME: Just because this suffice the case where 4 are typing, does not necessarily mean that there are exactly 4 people typing + Glib::ustring str = Glib::ustring::compose(_("%1, %2, %3 and %4 are typing..."), + typers[0].GetDisplayName(m_active_guild), + typers[1].GetDisplayName(m_active_guild), + typers[2].GetDisplayName(m_active_guild), + typers[3].GetDisplayName(m_active_guild)); SetTypingString(str); } else { // size() > MaxUsersInIndicator SetTypingString(_("Several people are typing...")); diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp index b7a51abf..8f65abb9 100644 --- a/src/components/chatmessage.cpp +++ b/src/components/chatmessage.cpp @@ -1,6 +1,5 @@ #include "chatmessage.hpp" #include -#include #include #include #include "abaddon.hpp" @@ -214,9 +213,9 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { Glib::MatchInfo match; Glib::ustring string = data->Content; if (regex->match(string, match)) { - const auto cmd = match.fetch(1).c_str(); - const auto app = data->Application->Name.c_str(); - std::string app_command_text = fmt::format(_("used {} with {}"), cmd, app); + const auto cmd = match.fetch(1); + const auto app = data->Application->Name; + auto app_command_text = Glib::ustring::compose(_("used %1 with %2"), cmd, app); b->insert_markup(s, app_command_text); } } else { @@ -229,9 +228,9 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { } break; case MessageType::RECIPIENT_ADD: { if (data->Mentions.empty()) break; - const auto &adder_username = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID)->GetUsername().c_str(); - const auto &added_username = data->Mentions[0].GetUsername().c_str(); - std::string recipient_add_text = fmt::format(_("{} added {}"), adder_username, added_username); + const auto &adder_username = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID)->GetUsername(); + const auto &added_username = data->Mentions[0].GetUsername(); + auto recipient_add_text = Glib::ustring::compose(_("%1 added %2"), adder_username, added_username); b->insert_markup(s, recipient_add_text); } break; case MessageType::RECIPIENT_REMOVE: { @@ -239,23 +238,23 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { const auto &adder = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); const auto &added = data->Mentions[0]; - std::string recipient_remove; + Glib::ustring recipient_remove; if (adder->ID == added.ID) { - recipient_remove = fmt::format(_("{} left"), adder->GetUsername().c_str()); + recipient_remove = Glib::ustring::compose(_("%1 left"), adder->GetUsername()); } else { - recipient_remove = fmt::format(_("{} removed {}"), - adder->GetUsername().c_str(), added.GetUsername().c_str()); + recipient_remove = Glib::ustring::compose(_("%1 removed %2"), + adder->GetUsername(), added.GetUsername()); } b->insert_markup(s, recipient_remove); } break; case MessageType::CHANNEL_NAME_CHANGE: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); - std::string channel_name_change_text = fmt::format(_("{} changed the name to {}"), author->GetDisplayNameEscapedBold().c_str(), Glib::Markup::escape_text(data->Content).c_str()); + auto channel_name_change_text = Glib::ustring::compose(_("%1 changed the name to %2"), author->GetDisplayNameEscapedBold(), Glib::Markup::escape_text(data->Content)); b->insert_markup(s, channel_name_change_text); } break; case MessageType::CHANNEL_ICON_CHANGE: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); - std::string channel_icon_change_text = fmt::format(_("{} changed the channel icon"), author->GetDisplayNameEscapedBold().c_str()); + auto channel_icon_change_text = Glib::ustring::compose(_("%1 changed the channel icon"), author->GetDisplayNameEscapedBold()); b->insert_markup(s, channel_icon_change_text); } break; case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1: @@ -263,50 +262,50 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); const auto guild = Abaddon::Get().GetDiscordClient().GetGuild(*data->GuildID); - std::string user_premium_guild_subscription_text = fmt::format(_("{} just boosted the server {} times! {} has achieved Level {}!"), - author->GetDisplayNameEscapedBold().c_str(), - Glib::Markup::escape_text(data->Content).c_str(), - Glib::Markup::escape_text(guild->Name).c_str(), - (static_cast(data->Type) - 8)); + auto user_premium_guild_subscription_text = Glib::ustring::compose(_("%1 just boosted the server %2 times! %3 has achieved Level %4!"), + author->GetDisplayNameEscapedBold(), + Glib::Markup::escape_text(data->Content), + Glib::Markup::escape_text(guild->Name), + (static_cast(data->Type) - 8)); b->insert_markup(s, user_premium_guild_subscription_text); // oo cheeky me !!! } break; case MessageType::CHANNEL_FOLLOW_ADD: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); - std::string channel_follow_add_text = fmt::format( - _("{} has added {} to this channel. Its most important updates will show up here."), - author->GetDisplayNameEscapedBold().c_str(), - Glib::Markup::escape_text(data->Content).c_str()); + auto channel_follow_add_text = Glib::ustring::compose( + _("%1 has added %2 to this channel. Its most important updates will show up here."), + author->GetDisplayNameEscapedBold(), + Glib::Markup::escape_text(data->Content)); b->insert_markup(s, channel_follow_add_text); } break; case MessageType::CALL: { - b->insert_markup(s, "[" + std::string{_("started a call")} + "]"); + b->insert_markup(s, "[" + std::string { _("started a call") } + "]"); } break; case MessageType::GUILD_DISCOVERY_DISQUALIFIED: { - b->insert_markup(s, "" + std::string{_("This server has been removed from Server Discovery because it no longer passes all the requirements.")} + ""); + b->insert_markup(s, "" + std::string { _("This server has been removed from Server Discovery because it no longer passes all the requirements.") } + ""); } break; case MessageType::GUILD_DISCOVERY_REQUALIFIED: { - b->insert_markup(s, ""+ std::string{_("This server is eligible for Server Discovery again and has been automatically relisted!")} + ""); + b->insert_markup(s, "" + std::string { _("This server is eligible for Server Discovery again and has been automatically relisted!") } + ""); } break; case MessageType::GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING: { - b->insert_markup(s, "" + std::string{_("This server has failed Discovery activity requirements for 1 week. If this server fails for 4 weeks in a row, it will be automatically removed from Discovery.")} + ""); + b->insert_markup(s, "" + std::string { _("This server has failed Discovery activity requirements for 1 week. If this server fails for 4 weeks in a row, it will be automatically removed from Discovery.") } + ""); } break; case MessageType::GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING: { - b->insert_markup(s, "" + std::string{_("This server has failed Discovery activity requirements for 3 weeks in a row. If this server fails for 1 more week, it will be removed from Discovery.")} + ""); + b->insert_markup(s, "" + std::string { _("This server has failed Discovery activity requirements for 3 weeks in a row. If this server fails for 1 more week, it will be removed from Discovery.") } + ""); } break; case MessageType::THREAD_CREATED: { const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID); - std::string thread_created_text; + Glib::ustring thread_created_text; if (data->MessageReference.has_value() && data->MessageReference->ChannelID.has_value()) { - thread_created_text = fmt::format(_("{} started a thread: "), author->GetDisplayNameEscapedBold().c_str()); + thread_created_text = Glib::ustring::compose(_("%1 started a thread: "), author->GetDisplayNameEscapedBold()); auto iter = b->insert_markup(s, thread_created_text); auto tag = b->create_tag(); tag->property_weight() = Pango::WEIGHT_BOLD; m_channel_tagmap[tag] = *data->MessageReference->ChannelID; b->insert_with_tag(iter, data->Content, tag); } else { - thread_created_text = fmt::format(_("{} started a thread: {}"), - author->GetDisplayNameEscapedBold().c_str(), - Glib::Markup::escape_text(data->Content).c_str()); + thread_created_text = Glib::ustring::compose(_("%1 started a thread: %2"), + author->GetDisplayNameEscapedBold(), + Glib::Markup::escape_text(data->Content)); b->insert_markup(s, thread_created_text); } } break; @@ -711,7 +710,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data) return author->GetDisplayNameEscapedBold(guild_id); } - return fmt::format("{}", _("Unknown User")); + return Glib::ustring::compose("%1", _("Unknown User")); }; // if the message wasnt fetched from store it might have an un-fetched reference @@ -725,28 +724,28 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data) if (data.Interaction.has_value()) { if (data.GuildID.has_value()) { - std::string interaction_user_from_guild_text = - fmt::format( - _("{} used /{}"), - get_author_markup(data.Interaction->User.ID, *data.GuildID).c_str(), - Glib::Markup::escape_text(data.Interaction->Name).c_str()); + auto interaction_user_from_guild_text = + Glib::ustring::compose( + _("%1 used /%2"), + get_author_markup(data.Interaction->User.ID, *data.GuildID), + Glib::Markup::escape_text(data.Interaction->Name)); lbl->set_markup(interaction_user_from_guild_text); } else if (const auto user = discord.GetUser(data.Interaction->User.ID); user.has_value()) { lbl->set_markup(user->GetDisplayNameEscapedBold()); } else { - lbl->set_markup(fmt::format("{}", _("Unknown User"))); + lbl->set_markup(Glib::ustring::compose("%1", _("Unknown User"))); } } else if (referenced_message.has_value()) { if (referenced_message.value() == nullptr) { - lbl->set_markup(fmt::format("{}", _("deleted message"))); + lbl->set_markup(Glib::ustring::compose("%1", _("deleted message"))); } else { const auto &referenced = *referenced_message.value(); Glib::ustring text; if (referenced.Content.empty()) { if (!referenced.Attachments.empty()) { - text = fmt::format("{}", _("attachment")); + text = Glib::ustring::compose("%1", _("attachment")); } else if (!referenced.Embeds.empty()) { - text = fmt::format("{}", _("embed")); + text = Glib::ustring::compose("%1", _("embed")); } } else { auto buf = Gtk::TextBuffer::create(); @@ -766,7 +765,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data) } } } else { - lbl->set_markup(fmt::format("{}", _("reply unavailable"))); + lbl->set_markup(Glib::ustring::compose("%1", _("reply unavailable"))); } return box; diff --git a/src/components/chatwindow.cpp b/src/components/chatwindow.cpp index 89e5ab72..b6f94e4e 100644 --- a/src/components/chatwindow.cpp +++ b/src/components/chatwindow.cpp @@ -1,6 +1,5 @@ #include "chatwindow.hpp" -#include #include #include "abaddon.hpp" @@ -331,7 +330,7 @@ void ChatWindow::StartReplying(Snowflake message_id) { m_is_replying = true; m_input->StartReplying(); if (author.has_value()) { - m_input_indicator->SetCustomMarkup(fmt::format(_("Replying to {}"), author->GetUsernameEscapedBold().c_str())); + m_input_indicator->SetCustomMarkup(Glib::ustring::format(_("Replying to %1"), author->GetUsernameEscapedBold())); } else { m_input_indicator->SetCustomMarkup(_("Replying...")); } diff --git a/src/components/friendslist.cpp b/src/components/friendslist.cpp index c0d0745c..8f1a8753 100644 --- a/src/components/friendslist.cpp +++ b/src/components/friendslist.cpp @@ -126,16 +126,16 @@ void FriendsList::OnActionRemove(Snowflake id) { Glib::ustring str; switch (*discord.GetRelationship(id)) { case RelationshipType::Blocked: - str = fmt::format(_("Are you sure you want to unblock {}?"), user->GetUsername().c_str()); + str = Glib::ustring::compose(_("Are you sure you want to unblock %1?"), user->GetUsername()); break; case RelationshipType::Friend: - str = fmt::format(_("Are you sure you want to remove {}?"), user->GetUsername().c_str()); + str = Glib::ustring::compose(_("Are you sure you want to remove %1?"), user->GetUsername()); break; case RelationshipType::PendingIncoming: - str = fmt::format(_("Are you sure you want to ignore {}?"), user->GetUsername().c_str()); + str = Glib::ustring::compose(_("Are you sure you want to ignore %1?"), user->GetUsername()); break; case RelationshipType::PendingOutgoing: - str = fmt::format(_("Are you sure you want to cancel your request to {}?"), user->GetUsername().c_str()); + str = Glib::ustring::compose(_("Are you sure you want to cancel your request to %1?"), user->GetUsername()); break; default: break; @@ -234,7 +234,7 @@ void FriendsListAddComponent::Submit() { if (code == DiscordError::NONE) { m_label.set_text(_("Success!")); } else { - m_label.set_text(fmt::format(_("Failed: {}"), GetDiscordErrorDisplayString(code))); + m_label.set_text(Glib::ustring::compose(_("Failed: %1"), GetDiscordErrorDisplayString(code))); } }; Abaddon::Get().GetDiscordClient().SendFriendRequest(username, diff --git a/src/components/ratelimitindicator.cpp b/src/components/ratelimitindicator.cpp index 82d93b5e..bb9a4a1a 100644 --- a/src/components/ratelimitindicator.cpp +++ b/src/components/ratelimitindicator.cpp @@ -2,7 +2,6 @@ #include -#include #include #include "abaddon.hpp" @@ -90,10 +89,10 @@ bool RateLimitIndicator::UpdateIndicator() { } else { const auto time_left = GetTimeLeft(); if (time_left > 0) - m_label.set_text(fmt::format(_("{}s"), std::to_string(time_left).c_str())); + m_label.set_text(Glib::ustring::compose(_("%1s"), std::to_string(time_left))); else m_label.set_text(""); - set_tooltip_text(fmt::format(_("Slowmode is enabled. Members can send one message every {} seconds"), std::to_string(rate_limit).c_str())); + set_tooltip_text(Glib::ustring::compose(_("Slowmode is enabled. Members can send one message every %1 seconds"), std::to_string(rate_limit))); } } else { m_img.hide(); diff --git a/src/dialogs/setstatus.cpp b/src/dialogs/setstatus.cpp index 8fcff51d..2cb7f8bb 100644 --- a/src/dialogs/setstatus.cpp +++ b/src/dialogs/setstatus.cpp @@ -1,6 +1,5 @@ #include "setstatus.hpp" -#include #include #include "abaddon.hpp" @@ -54,7 +53,7 @@ SetStatusDialog::SetStatusDialog(Gtk::Window &parent) response(Gtk::RESPONSE_CANCEL); }); - m_layout.pack_start(*Gtk::make_managed(fmt::format(_("How are you, {}?"), Abaddon::Get().GetDiscordClient().GetUserData().GetDisplayName().c_str()), Gtk::ALIGN_START)); + m_layout.pack_start(*Gtk::make_managed(Glib::ustring::compose(_("How are you, %1?"), Abaddon::Get().GetDiscordClient().GetUserData().GetDisplayName()), Gtk::ALIGN_START)); m_layout.pack_start(m_text); m_layout.pack_start(*Gtk::make_managed(_("Status"), Gtk::ALIGN_START)); m_layout.pack_start(m_status_combo);