diff --git a/.gitignore b/.gitignore index f2747446..d0cda90b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,14 @@ src/modules/test/* +pending-rewrite/ +logs/* +notes/* +tmp/* +output/* +locales/domains + +.idea/* + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/locales/he_IL/LC_MESSAGES/Pomodoro.po b/locales/he_IL/LC_MESSAGES/Pomodoro.po index b44bcbcd..72df328d 100644 --- a/locales/he_IL/LC_MESSAGES/Pomodoro.po +++ b/locales/he_IL/LC_MESSAGES/Pomodoro.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -21,41 +21,46 @@ msgstr "" "Language: he_IL\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" -#: src/modules/pomodoro/timer.py:51 +#: src/modules/pomodoro/timer.py:52 msgctxt "timer|stage:break|name" msgid "BREAK" msgstr "הפסקה" -#: src/modules/pomodoro/timer.py:52 +#: src/modules/pomodoro/timer.py:53 msgctxt "timer|stage:focus|name" msgid "FOCUS" msgstr "פוקוס" -#: src/modules/pomodoro/timer.py:158 +#: src/modules/pomodoro/timer.py:160 #, possible-python-brace-format msgctxt "timer|webhook|name" msgid "{bot_name} Pomodoro" msgstr "{bot_name} פומודורו" -#: src/modules/pomodoro/timer.py:162 +#: src/modules/pomodoro/timer.py:164 msgctxt "timer|webhook|audit_reason" msgid "Pomodoro Notifications" msgstr "התראות פומודורו" -#: src/modules/pomodoro/timer.py:173 +#: src/modules/pomodoro/timer.py:175 msgctxt "timer|webhook|error:insufficient_permissions" msgid "" "I require the `MANAGE_WEBHOOKS` permission to send pomodoro notifications " "here!" msgstr "אני צריך את ההרשאה `MANAGE_WEBHOOKS` כדי לשלוח התראות פומודורו פה!" -#: src/modules/pomodoro/timer.py:232 +#: src/modules/pomodoro/timer.py:234 #, possible-python-brace-format msgctxt "timer|default_base_name" msgid "Timer {pattern}" msgstr "טיימר {pattern}" -#: src/modules/pomodoro/timer.py:406 +#: src/modules/pomodoro/timer.py:409 +msgctxt "timer|disconnect|audit_reason" +msgid "Disconnecting inactive member from timer." +msgstr "" + +#: src/modules/pomodoro/timer.py:421 #, possible-python-brace-format msgctxt "timer|kicked_message" msgid "" @@ -77,20 +82,28 @@ msgstr[3] "" "{mentions} הוסרו מ {channel} מאחר והם לא היו פעילים! זכרו ללחוץ על {tick} על" " מנת לרשום נוכחות בכל שלב." -#: src/modules/pomodoro/timer.py:499 +#: src/modules/pomodoro/timer.py:434 +#, possible-python-brace-format +msgctxt "timer|kick_failed" +msgid "" +"**Warning!** Timer {channel} is configured to disconnect on inactivity, but " +"I lack the 'Move Members' permission to do this!" +msgstr "" + +#: src/modules/pomodoro/timer.py:529 #, possible-python-brace-format msgctxt "timer|status|stage:focus|statusline" msgid "{channel} is now in **FOCUS**! Good luck, **BREAK** starts {timestamp}" msgstr "{channel} עכשיו בפוקוס! בהצלחה! ההפסקה תתחיל ב {timestamp}" -#: src/modules/pomodoro/timer.py:504 +#: src/modules/pomodoro/timer.py:534 #, possible-python-brace-format msgctxt "timer|status|stage:break|statusline" msgid "" "{channel} is now on **BREAK**! Take a rest, **FOCUS** starts {timestamp}" msgstr "{channel} עכשיו בהפסקה! הסשן יתחיל ב {timestamp}" -#: src/modules/pomodoro/timer.py:536 +#: src/modules/pomodoro/timer.py:566 #, possible-python-brace-format msgctxt "timer|status|warningline" msgid "" @@ -100,13 +113,13 @@ msgstr "" "**זהירות:** {mentions}, אל תשכחו ללחוץ על ה{tick} על מנת להימנע מלהתנתק בשלב" " הבא." -#: src/modules/pomodoro/timer.py:555 +#: src/modules/pomodoro/timer.py:585 #, possible-python-brace-format msgctxt "timer|status|stopped:auto" msgid "Timer stopped! Join {channel} to start the timer." msgstr "השעון נעצר! הצטרף אל {channel} על מנת להתחיל את השעון מחדש." -#: src/modules/pomodoro/timer.py:560 +#: src/modules/pomodoro/timer.py:590 msgctxt "timer|status|stopped:manual" msgid "Timer stopped! Press `Start` to restart the timer." msgstr "השעון נעצר! לחץ על \"התחל\" כדי להתחיל את השעון מחדש." @@ -131,7 +144,7 @@ msgctxt "dash:stats|dropdown|placeholder" msgid "Pomodoro Timer Panel" msgstr "תפריט טיימרים" -#: src/modules/pomodoro/cog.py:82 +#: src/modules/pomodoro/cog.py:116 msgctxt "cmd_check:ready|failed" msgid "" "I am currently restarting! The Pomodoro timers will be unavailable until I " @@ -140,132 +153,148 @@ msgstr "" "אני כרגע מתחיל מחדש, מצטער, עוד כמה דקות והטיימרים יחזרו מבטיחים! תודה על " "הסבלנות." -#: src/modules/pomodoro/cog.py:322 +#: src/modules/pomodoro/cog.py:401 msgctxt "cmd:timer" msgid "timer" -msgstr "" +msgstr "טיימר" -#: src/modules/pomodoro/cog.py:323 +#: src/modules/pomodoro/cog.py:402 msgctxt "cmd:timer|desc" msgid "Show your current (or selected) pomodoro timer." -msgstr "" +msgstr "הצג את החדר פומודורו טיימר הנוכחי." -#: src/modules/pomodoro/cog.py:326 +#: src/modules/pomodoro/cog.py:405 msgctxt "cmd:timer|param:channel" msgid "timer_channel" -msgstr "" +msgstr "ערוץ_טיימר" -#: src/modules/pomodoro/cog.py:331 +#: src/modules/pomodoro/cog.py:410 msgctxt "cmd:timer|param:channel|desc" msgid "Select a timer to display (by selecting the timer voice channel)" -msgstr "" +msgstr "בחר בטיימר להצגה (על ידי בחירה של ערוץ הקול שקשור לטיימר)" -#: src/modules/pomodoro/cog.py:353 src/modules/pomodoro/cog.py:423 +#: src/modules/pomodoro/cog.py:432 src/modules/pomodoro/cog.py:503 #, possible-python-brace-format msgctxt "cmd:timer|error:no_timers|desc" msgid "" "**This server has no timers set up!**\n" "Ask an admin to set up and configure a timer with {create_cmd} first, or rent a private room with {room_cmd} and create one yourself!" msgstr "" +"לשרת הזה אין טיימרים מוגדרים!\n" +"בקש מאדמין להפעיל את הטיימר באמצעות {create_cmd}, או שכור חדר פרטי עם {room_cmd} והכן אחד לעצמך!" -#: src/modules/pomodoro/cog.py:367 +#: src/modules/pomodoro/cog.py:446 #, possible-python-brace-format msgctxt "cmd:timer|error:no_channel|desc" msgid "" "**I don't know what timer to show you.**\n" "No channel selected and you are not in a voice channel! Use {timers_cmd} to list the available timers in this server." msgstr "" +"**אני לא יודע איזה טיימר להראות לך**\n" +"אין ערוצים שנבחרו ואתה לא בערוץ קול! הששתמש ב {timers_cmd} כדי לציג את כל הטיימרים בשרת." -#: src/modules/pomodoro/cog.py:380 +#: src/modules/pomodoro/cog.py:459 #, possible-python-brace-format msgctxt "cmd:timer|error:no_timer_in_channel" msgid "" "The channel {channel} is not a pomodoro timer room!\n" "Use {timers_cmd} to list the available timers in this server." msgstr "" +"הערוץ {channel} הוא לא חדר פומודורו!\n" +"השתמש ב {timers_cmd}  כדי להציג את הטיימרים שקיימים בשרת הזה." -#: src/modules/pomodoro/cog.py:396 +#: src/modules/pomodoro/cog.py:476 msgctxt "cmd:timers" msgid "timers" -msgstr "" +msgstr "טיימרים" -#: src/modules/pomodoro/cog.py:397 +#: src/modules/pomodoro/cog.py:477 msgctxt "cmd:timers|desc" msgid "List the available pomodoro timer rooms." -msgstr "" +msgstr "הצג את הטיימרי פומודורו הזמינים." -#: src/modules/pomodoro/cog.py:436 +#: src/modules/pomodoro/cog.py:516 #, possible-python-brace-format msgctxt "cmd:timer|error:no_visible_timers|desc" msgid "" "**There are no available pomodoro timers!**\n" "Ask an admin to set up a new timer with {create_cmd}, or rent a private room with {room_cmd} and create one yourself!" msgstr "" +"לשרת הזה אין טיימרים מוגדרים!\n" +"בקש מאדמין להפעיל את הטיימר באמצעות {create_cmd}, או שכור חדר פרטי עם {room_cmd} והכן אחד לעצמך!" -#: src/modules/pomodoro/cog.py:449 +#: src/modules/pomodoro/cog.py:529 #, possible-python-brace-format msgctxt "cmd:timers|embed:timer_list|title" msgid "Pomodoro Timer Rooms in **{guild}**" -msgstr "" +msgstr "טיימרי פומודורו בשרת **{guild}**" -#: src/modules/pomodoro/cog.py:458 +#: src/modules/pomodoro/cog.py:538 #, possible-python-brace-format msgctxt "cmd:timers|status:stopped_auto" msgid "" "`{pattern}` timer is stopped with no members!\n" "Join {channel} to restart it." msgstr "" +"`{pattern}` נעצר ללא משתמשים!\n" +"הצטרף אל {channel} על מנת לאפס אותו." -#: src/modules/pomodoro/cog.py:464 +#: src/modules/pomodoro/cog.py:544 #, possible-python-brace-format msgctxt "cmd:timers|status:stopped_manual" msgid "" "`{pattern}` timer is stopped with `{members}` members!\n" "Join {channel} and press `Start` to start it!" msgstr "" +"`{pattern}` נעצר עם `{members}` משתמשים!\n" +"הצטרף אל {channel} ולחץ \"התחל\" על מנת לאפס אותו." -#: src/modules/pomodoro/cog.py:471 +#: src/modules/pomodoro/cog.py:551 #, possible-python-brace-format msgctxt "cmd:timers|status:running_focus" msgid "" "`{pattern}` timer is running with `{members}` members!\n" "Currently **focusing**, with break starting {timestamp}" msgstr "" +"`{pattern}` טיימר רץ עם `{members}` משתמשים!\n" +"כרגע בפוקוס, עם הפסקה שתתחיל ב{timestamp}" -#: src/modules/pomodoro/cog.py:477 +#: src/modules/pomodoro/cog.py:557 #, possible-python-brace-format msgctxt "cmd:timers|status:running_break" msgid "" "`{pattern}` timer is running with `{members}` members!\n" "Currently **resting**, with focus starting {timestamp}" msgstr "" +"`{pattern}` טיימר רץ עם `{members}` משתמשים!\n" +"כרגע בהפסקה, עם פוקוס שיתחיל ב{timestamp}" -#: src/modules/pomodoro/cog.py:491 +#: src/modules/pomodoro/cog.py:571 msgctxt "cmd:pomodoro" msgid "pomodoro" -msgstr "" +msgstr "פומודורו" -#: src/modules/pomodoro/cog.py:492 +#: src/modules/pomodoro/cog.py:572 msgctxt "cmd:pomodoro|desc" msgid "Create and configure pomodoro timer rooms." -msgstr "" +msgstr "הגדר וצור חדרי פומודורו." -#: src/modules/pomodoro/cog.py:499 +#: src/modules/pomodoro/cog.py:579 msgctxt "cmd:pomodoro_create" msgid "create" msgstr "צור" -#: src/modules/pomodoro/cog.py:502 +#: src/modules/pomodoro/cog.py:582 msgctxt "cmd:pomodoro_create|desc" msgid "Create a new Pomodoro timer. Requires manage channel permissions." -msgstr "" +msgstr "צור שעון פומודורו חדש. הרשאות ניהול ערוץ נחוצות על מנת לעשות זאת." -#: src/modules/pomodoro/cog.py:506 +#: src/modules/pomodoro/cog.py:586 msgctxt "cmd:pomodoro_create|param:channel" msgid "timer_channel" msgstr "ערוץ_טיימר" -#: src/modules/pomodoro/cog.py:512 +#: src/modules/pomodoro/cog.py:592 msgctxt "cmd:pomodoro_create|param:channel|desc" msgid "" "Voice channel to create the timer in. (Defaults to your current channel, or " @@ -274,98 +303,104 @@ msgstr "" "הערוץ הקולי שתרצו ליצור בו טיימר. (ברירת מחדל היא הערוץ שאתם נמצאים בו " "כרגע.)" -#: src/modules/pomodoro/cog.py:557 +#: src/modules/pomodoro/cog.py:637 msgctxt "cmd:pomodoro_create|new_channel|error:your_insufficient_perms|title" msgid "Could not create pomodoro voice channel!" -msgstr "" +msgstr "לא הצלחתי ליצור ערוץ פומודורו!" -#: src/modules/pomodoro/cog.py:561 +#: src/modules/pomodoro/cog.py:641 msgctxt "cmd:pomodoro_create|new_channel|error:your_insufficient_perms" msgid "" "No `timer_channel` was provided, and you lack the 'Manage Channels` " "permission required to create a new timer room!" msgstr "" +"אין ערוץ טיימר שהוגדר, וגם חסרים לי הרשאות כדי ליצור אחד, אנא הוסף אותי לשרת" +" שוב עם ההרשאות הנכונות (`MANAGE_CHANNELS`)" -#: src/modules/pomodoro/cog.py:572 +#: src/modules/pomodoro/cog.py:652 msgctxt "cmd:pomodoro_create|new_channel|error:my_insufficient_perms|title" msgid "Could not create pomodoro voice channel!" -msgstr "" +msgstr "לא הצלחתי ליצור ערוץ פומודורו!" -#: src/modules/pomodoro/cog.py:576 +#: src/modules/pomodoro/cog.py:656 msgctxt "cmd:pomodoro_create|new_channel|error:my_insufficient_perms|desc" msgid "" "No `timer_channel` was provided, and I lack the 'Manage Channels' permission" " required to create a new voice channel." msgstr "" +"אין ערוץ טיימר שהוגדר, וגם חסרים לי הרשאות כדי ליצור אחד, אנא הוסף אותי לשרת" +" שוב עם ההרשאות הנכונות (`MANAGE_CHANNELS`)" -#: src/modules/pomodoro/cog.py:587 +#: src/modules/pomodoro/cog.py:667 msgctxt "cmd:pomodoro_create|new_channel|default_name" msgid "Timer" -msgstr "" +msgstr "טיימר" -#: src/modules/pomodoro/cog.py:591 +#: src/modules/pomodoro/cog.py:671 msgctxt "cmd:pomodoro_create|new_channel|audit_reason" msgid "Creating Pomodoro Voice Channel" -msgstr "" +msgstr "יוצר ערוץ פומודורו" -#: src/modules/pomodoro/cog.py:600 +#: src/modules/pomodoro/cog.py:680 msgctxt "cmd:pomodoro_create|new_channel|error:channel_create_failed|title" msgid "Could not create pomodoro voice channel!" -msgstr "" +msgstr "לא הצלחתי ליצור ערוץ פומודורו!" -#: src/modules/pomodoro/cog.py:604 +#: src/modules/pomodoro/cog.py:684 msgctxt "cmd:pomodoro_create|new_channel|error:channel_create_failed|desc" msgid "" "Failed to create a new pomodoro voice channel due to an unknown Discord " "communication error. Please try creating the channel manually and pass it to" " the `timer_channel` argument of this command." -msgstr "" +msgstr "נכשל ביצירת טיימר בעקבות שגיאה בצד של דיסקורד. אנא נסה שוב." -#: src/modules/pomodoro/cog.py:621 +#: src/modules/pomodoro/cog.py:701 #, possible-python-brace-format msgctxt "cmd:pomodoro_create|add_timer|error:timer_exists" msgid "A timer already exists in {channel}! Reconfigure it with {edit_cmd}." -msgstr "" +msgstr "טיימר כבר קיים בערוץ {channel}! השתמש ב {edit_cmd} כדי לערוך אותו." -#: src/modules/pomodoro/cog.py:635 +#: src/modules/pomodoro/cog.py:715 #, possible-python-brace-format msgctxt "cmd:pomodoro_create|add_timer|error:your_insufficient_perms" msgid "" "You must have the 'Manage Channel' permission in {channel} in order to add a" " timer there!" msgstr "" +"חייבת להיות לך ההרשאה 'Manage Channel' בערוץ {channel} על מנת להוסיף את " +"הטיימר לכאן!" -#: src/modules/pomodoro/cog.py:684 +#: src/modules/pomodoro/cog.py:764 msgctxt "cmd:pomodoro_create|response:success|content" msgid "Timer created successfully! Use the panel below to reconfigure." msgstr "הטיימר נבנה בהצלחה! השתמש בפאנל בתחתית כדי לשנות אותו." -#: src/modules/pomodoro/cog.py:690 +#: src/modules/pomodoro/cog.py:770 msgctxt "cmd:pomodoro_destroy" msgid "destroy" msgstr "השמד" -#: src/modules/pomodoro/cog.py:693 +#: src/modules/pomodoro/cog.py:773 msgctxt "cmd:pomodoro_destroy|desc" msgid "Remove a pomodoro timer from a voice channel." -msgstr "" +msgstr "הסר את הטיימר מערוץ קולי." -#: src/modules/pomodoro/cog.py:697 +#: src/modules/pomodoro/cog.py:777 msgctxt "cmd:pomodoro_destroy|param:channel" msgid "timer_channel" msgstr "ערוץ_טיימר" -#: src/modules/pomodoro/cog.py:700 +#: src/modules/pomodoro/cog.py:780 msgctxt "cmd:pomodoro_destroy|param:channel" msgid "Select a timer voice channel to remove the timer from." -msgstr "" +msgstr "בחר את הערוץ הקולי שתרצה להסיר את הטיימר ממנו." -#: src/modules/pomodoro/cog.py:718 +#: src/modules/pomodoro/cog.py:798 msgctxt "cmd:pomodoro_destroy|error:no_timer" msgid "This channel doesn't have an attached pomodoro timer!" msgstr "בערוץ הזה לא קיימים שום טיימרים!" -#: src/modules/pomodoro/cog.py:731 +#: src/modules/pomodoro/cog.py:811 msgctxt "cmd:pomodoro_destroy|error:insufficient_perms|owned" msgid "" "You need to be an administrator or own this channel to remove this timer!" @@ -373,46 +408,48 @@ msgstr "" "אתם צריכים הרשאות אדמין או להיות הבעלים של הערוץ הקולי הזה כדי למחוק את " "הטיימר הזה!" -#: src/modules/pomodoro/cog.py:740 +#: src/modules/pomodoro/cog.py:820 #, possible-python-brace-format msgctxt "cmd:pomodoro_destroy|error:insufficient_perms|notowned" msgid "" "You need to have the `Manage Channels` permission in {channel} to remove " "this timer!" msgstr "" +"חייבת להיות לך ההרשאה 'Manage Channel' בערוץ {channel} על מנת להסיר את " +"הטיימר מכאן!" -#: src/modules/pomodoro/cog.py:751 +#: src/modules/pomodoro/cog.py:831 #, possible-python-brace-format msgctxt "cmd:pomdoro_destroy|response:success|description" msgid "Timer successfully removed from {channel}." msgstr "הטיימר הוסר בהצלחה מ {channel}." -#: src/modules/pomodoro/cog.py:757 +#: src/modules/pomodoro/cog.py:837 msgctxt "cmd:pomodoro_edit" msgid "edit" msgstr "ערוך" -#: src/modules/pomodoro/cog.py:760 +#: src/modules/pomodoro/cog.py:840 msgctxt "cmd:pomodoro_edit|desc" msgid "Reconfigure a pomodoro timer." -msgstr "" +msgstr "הגדר את הטיימר מחדש." -#: src/modules/pomodoro/cog.py:764 +#: src/modules/pomodoro/cog.py:844 msgctxt "cmd:pomodoro_edit|param:channel" msgid "timer_channel" msgstr "ערוץ_טיימר" -#: src/modules/pomodoro/cog.py:770 +#: src/modules/pomodoro/cog.py:850 msgctxt "cmd:pomodoro_edit|param:channel|desc" msgid "Select a timer voice channel to reconfigure." -msgstr "" +msgstr "בחר את הערוץ הקולי שתרצה להגדיר מחדש את הטיימר." -#: src/modules/pomodoro/cog.py:811 +#: src/modules/pomodoro/cog.py:891 msgctxt "cmd:pomodoro_edit|error:no_timer" msgid "This channel doesn't have an attached pomodoro timer to edit!" msgstr "בערוץ הזה לא קיימים שום טיימרים!" -#: src/modules/pomodoro/cog.py:824 +#: src/modules/pomodoro/cog.py:904 msgctxt "cmd:pomodoro_edit|error:insufficient_perms|role:other" msgid "" "Insufficient permissions to modifiy this timer!\n" @@ -421,29 +458,29 @@ msgstr "" "הרשאות לא מספקות כדי לערוך את הטיימר!\n" "אתה צריך להיות סרבר אדמין, להיו תהבעלים של הערוץ או להיות בעל רול של ניהול טיימרים בשרת כדי לגשת לטיימר הזה." -#: src/modules/pomodoro/cog.py:845 +#: src/modules/pomodoro/cog.py:925 msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:admin" msgid "You need to be a guild admin to modify this option!" msgstr "אתה צריך להיות האדמין של השרת כדי לערוך את האופציה הזו!" -#: src/modules/pomodoro/cog.py:850 +#: src/modules/pomodoro/cog.py:930 msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:owner" msgid "You need to be a channel owner or guild admin to modify this option!" msgstr "" "אתה צרריך להיות הבעלים של הערוץ או האדמין של השרת כדי לערוך את האופציה הזו!" -#: src/modules/pomodoro/cog.py:855 +#: src/modules/pomodoro/cog.py:935 msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:manager" msgid "" "You need to be a guild admin or have the manager role to modify this option!" msgstr "אתה צריך להיות האדמין של השרת או להיות מנהל כדי לערוך את האופציה הזו!" -#: src/modules/pomodoro/cog.py:891 +#: src/modules/pomodoro/cog.py:971 msgctxt "cmd:configure_pomodoro" msgid "pomodoro" msgstr "פומודורו" -#: src/modules/pomodoro/cog.py:892 +#: src/modules/pomodoro/cog.py:972 msgctxt "cmd:configure_pomodoro|desc" msgid "Configure Pomodoro Timer System" msgstr "נהל את מערכת הטיימרים" @@ -524,7 +561,7 @@ msgstr "כמה סבבים לפני שאנתק משתמשים לא פעילים." #: src/modules/pomodoro/options.py:112 msgctxt "timerset:inactivity_length|desc" msgid "The inactivity threshold must be a positive whole number!" -msgstr "" +msgstr "המגבלה חייבת להיות מספר שלם חיובי!" #: src/modules/pomodoro/options.py:120 msgctxt "timerset:manager_role" @@ -595,7 +632,7 @@ msgctxt "timerset:channel_name_format|error:too_long" msgid "" "The provided name is too long! Channel names can be at most `100` " "characters." -msgstr "" +msgstr "השם שננתם לי ארוך מידי! השתמשו בפחות מ `100` תווים." #: src/modules/pomodoro/options.py:240 msgctxt "timerset:focus_length" @@ -764,7 +801,7 @@ msgstr "עצור" #: src/modules/pomodoro/ui/config.py:45 msgctxt "ui:timer_options|error:timer_destroyed" msgid "This timer no longer exists! Closing option menu." -msgstr "" +msgstr "הטיימר כבר לא קיים! אני סוגר את התפריט." #: src/modules/pomodoro/ui/config.py:68 msgctxt "ui:timer_options|button:edit|label" diff --git a/locales/he_IL/LC_MESSAGES/babel.po b/locales/he_IL/LC_MESSAGES/babel.po index f30732fc..dd64ed68 100644 --- a/locales/he_IL/LC_MESSAGES/babel.po +++ b/locales/he_IL/LC_MESSAGES/babel.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -89,7 +89,7 @@ msgctxt "cmd:userconfig_language|button:reset|label" msgid "Reset" msgstr "אפס" -#: src/babel/cog.py:251 +#: src/babel/cog.py:252 #, possible-python-brace-format msgctxt "acmpl:language|no_match" msgid "No supported languages matching {partial}" @@ -232,162 +232,172 @@ msgctxt "guildset:locale|response" msgid "You have set the guild language to {lang}." msgstr "קבעת שהשפה של השרת תהייה {lang}." -#: src/babel/enums.py:42 -msgctxt "localenames|locale:en-US" -msgid "American English" -msgstr "אנגלית אמריקאית" - #: src/babel/enums.py:43 -msgctxt "localenames|locale:en-GB" -msgid "British English" -msgstr "אנגלית בריטית" +msgctxt "localenames|locale:id" +msgid "Indonesian" +msgstr "Bahasa Indonesia" #: src/babel/enums.py:44 -msgctxt "localenames|locale:bg" -msgid "Bulgarian" -msgstr "בולגרית" - -#: src/babel/enums.py:45 -msgctxt "localenames|locale:zh-CN" -msgid "Chinese" -msgstr "סינית" - -#: src/babel/enums.py:46 -msgctxt "localenames|locale:zh-TW" -msgid "Taiwan Chinese" -msgstr "סינית טויאן" - -#: src/babel/enums.py:47 -msgctxt "localenames|locale:hr" -msgid "Croatian" -msgstr "קרואטית" - -#: src/babel/enums.py:48 -msgctxt "localenames|locale:cs" -msgid "Czech" -msgstr "צ'כית" - -#: src/babel/enums.py:49 msgctxt "localenames|locale:da" msgid "Danish" msgstr "דנית" -#: src/babel/enums.py:50 -msgctxt "localenames|locale:nl" -msgid "Dutch" -msgstr "הולנדית" - -#: src/babel/enums.py:51 -msgctxt "localenames|locale:fi" -msgid "Finnish" -msgstr "פינית" - -#: src/babel/enums.py:52 -msgctxt "localenames|locale:fr" -msgid "French" -msgstr "צרפתית" - -#: src/babel/enums.py:53 +#: src/babel/enums.py:45 msgctxt "localenames|locale:de" msgid "German" msgstr "גרמנית" -#: src/babel/enums.py:54 -msgctxt "localenames|locale:el" -msgid "Greek" -msgstr "יוונית" +#: src/babel/enums.py:46 +msgctxt "localenames|locale:en-GB" +msgid "English, UK" +msgstr "English, UK" -#: src/babel/enums.py:55 -msgctxt "localenames|locale:hi" -msgid "Hindi" -msgstr "הודית" +#: src/babel/enums.py:47 +msgctxt "localenames|locale:en-US" +msgid "English, US" +msgstr "English, US" -#: src/babel/enums.py:56 -msgctxt "localenames|locale:hu" -msgid "Hungarian" -msgstr "הונגרית" +#: src/babel/enums.py:48 +msgctxt "localenames|locale:es-ES" +msgid "Spanish" +msgstr "Español " -#: src/babel/enums.py:57 +#: src/babel/enums.py:49 +msgctxt "localenames|locale:fr" +msgid "French" +msgstr "צרפתית" + +#: src/babel/enums.py:50 +msgctxt "localenames|locale:hr" +msgid "Croatian" +msgstr "קרואטית" + +#: src/babel/enums.py:51 msgctxt "localenames|locale:it" msgid "Italian" msgstr "איטלקית" -#: src/babel/enums.py:58 -msgctxt "localenames|locale:ja" -msgid "Japanese" -msgstr "יפנית" - -#: src/babel/enums.py:59 -msgctxt "localenames|locale:ko" -msgid "Korean" -msgstr "קוראנית" - -#: src/babel/enums.py:60 +#: src/babel/enums.py:52 msgctxt "localenames|locale:lt" msgid "Lithuanian" msgstr "ליטאית" -#: src/babel/enums.py:61 +#: src/babel/enums.py:53 +msgctxt "localenames|locale:hu" +msgid "Hungarian" +msgstr "הונגרית" + +#: src/babel/enums.py:54 +msgctxt "localenames|locale:nl" +msgid "Dutch" +msgstr "הולנדית" + +#: src/babel/enums.py:55 msgctxt "localenames|locale:no" msgid "Norwegian" msgstr "נורווגית" -#: src/babel/enums.py:62 +#: src/babel/enums.py:56 msgctxt "localenames|locale:pl" msgid "Polish" msgstr "פוליש" -#: src/babel/enums.py:63 +#: src/babel/enums.py:57 msgctxt "localenames|locale:pt-BR" -msgid "Brazil Portuguese" -msgstr "פורטוגזית" +msgid "Portuguese, Brazilian" +msgstr "Português" -#: src/babel/enums.py:64 +#: src/babel/enums.py:58 msgctxt "localenames|locale:ro" -msgid "Romanian" -msgstr "רומנית" +msgid "Romanian, Romania" +msgstr "Romanian" -#: src/babel/enums.py:65 -msgctxt "localenames|locale:ru" -msgid "Russian" -msgstr "רוסית" +#: src/babel/enums.py:59 +msgctxt "localenames|locale:fi" +msgid "Finnish" +msgstr "פינית" -#: src/babel/enums.py:66 -msgctxt "localenames|locale:es-ES" -msgid "Spain Spanish" -msgstr "ספרדית" - -#: src/babel/enums.py:67 +#: src/babel/enums.py:60 msgctxt "localenames|locale:sv-SE" msgid "Swedish" msgstr "שוודית" -#: src/babel/enums.py:68 -msgctxt "localenames|locale:th" -msgid "Thai" -msgstr "תאילנדית" - -#: src/babel/enums.py:69 -msgctxt "localenames|locale:tr" -msgid "Turkish" -msgstr "טורקית" - -#: src/babel/enums.py:70 -msgctxt "localenames|locale:uk" -msgid "Ukrainian" -msgstr "אוקראינית" - -#: src/babel/enums.py:71 +#: src/babel/enums.py:61 msgctxt "localenames|locale:vi" msgid "Vietnamese" msgstr "ויאטנמית" +#: src/babel/enums.py:62 +msgctxt "localenames|locale:tr" +msgid "Turkish" +msgstr "טורקית" + +#: src/babel/enums.py:63 +msgctxt "localenames|locale:cs" +msgid "Czech" +msgstr "צ'כית" + +#: src/babel/enums.py:64 +msgctxt "localenames|locale:el" +msgid "Greek" +msgstr "יוונית" + +#: src/babel/enums.py:65 +msgctxt "localenames|locale:bg" +msgid "Bulgarian" +msgstr "בולגרית" + +#: src/babel/enums.py:66 +msgctxt "localenames|locale:ru" +msgid "Russian" +msgstr "רוסית" + +#: src/babel/enums.py:67 +msgctxt "localenames|locale:uk" +msgid "Ukrainian" +msgstr "אוקראינית" + +#: src/babel/enums.py:68 +msgctxt "localenames|locale:hi" +msgid "Hindi" +msgstr "הודית" + +#: src/babel/enums.py:69 +msgctxt "localenames|locale:th" +msgid "Thai" +msgstr "תאילנדית" + +#: src/babel/enums.py:70 +msgctxt "localenames|locale:zh-CN" +msgid "Chinese, China" +msgstr "中国" + +#: src/babel/enums.py:71 +msgctxt "localenames|locale:ja" +msgid "Japanese" +msgstr "יפנית" + #: src/babel/enums.py:72 +msgctxt "localenames|locale:zh-TW" +msgid "Chinese, Taiwan" +msgstr "中国 TaIwan" + +#: src/babel/enums.py:73 +msgctxt "localenames|locale:ko" +msgid "Korean" +msgstr "קוראנית" + +#: src/babel/enums.py:78 msgctxt "localenames|locale:he" msgid "Hebrew" msgstr "עברית" -#: src/babel/enums.py:73 -msgctxt "localenames|locale:he_IL" -msgid "Hebrew (Israel)" -msgstr "עברית (ישראל)" +#: src/babel/enums.py:79 +msgctxt "localenames|locale:he-IL" +msgid "Hebrew" +msgstr "עברית" + +#: src/babel/enums.py:80 +msgctxt "localenames|locale:test" +msgid "Test Language" +msgstr "Test Language" diff --git a/locales/he_IL/LC_MESSAGES/core_config.po b/locales/he_IL/LC_MESSAGES/core_config.po index c88f8631..b72099f5 100644 --- a/locales/he_IL/LC_MESSAGES/core_config.po +++ b/locales/he_IL/LC_MESSAGES/core_config.po @@ -5,6 +5,7 @@ # # Translators: # Interitio, 2023 +# Ari Horesh, 2023 # #, fuzzy msgid "" @@ -13,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-13 08:47+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" -"Last-Translator: Interitio, 2023\n" +"Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -29,4 +30,4 @@ msgstr "הגדר" #: src/core/config.py:29 msgctxt "group:configure|desc" msgid "View and adjust my configuration options." -msgstr "" +msgstr "בחר ושנה את ההגדרות." diff --git a/locales/he_IL/LC_MESSAGES/economy.po b/locales/he_IL/LC_MESSAGES/economy.po index 18674f71..8b2a001d 100644 --- a/locales/he_IL/LC_MESSAGES/economy.po +++ b/locales/he_IL/LC_MESSAGES/economy.po @@ -428,7 +428,7 @@ msgctxt "cmd:send|error:sending-to-self" msgid "" "What is this, tax evasion?\n" "(You can not send coins to yourself.)" -msgstr "" +msgstr "מה זה? הלבנת מס? (אתם לא יכולים לשלוח מטבעות לעצמכם)" #: src/modules/economy/cog.py:732 msgctxt "cmd:send|error:sending-to-leo" @@ -436,6 +436,8 @@ msgid "" "I appreciate it, but you need it more than I do!\n" "(You cannot send coins to bots.)" msgstr "" +"תודה רבה שאתה חושב עלינו, אבל אין צורך.\n" +"(אי אפשר לשלוח מטבעות לבוטים)" #: src/modules/economy/cog.py:742 #, possible-python-brace-format @@ -444,6 +446,8 @@ msgid "" "{target} appreciates the gesture, but said they don't have any use for {coin}.\n" "(You cannot send coins to bots.)" msgstr "" +"{target} מעריך את המחווה, אבל אין לא מה לעשות עם {coin}.\n" +"(אי אפשר לשלוח מטבעות לבוטים)" #: src/modules/economy/cog.py:770 #, possible-python-brace-format diff --git a/locales/he_IL/LC_MESSAGES/exec.po b/locales/he_IL/LC_MESSAGES/exec.po index cfaa3998..bb03cee6 100644 --- a/locales/he_IL/LC_MESSAGES/exec.po +++ b/locales/he_IL/LC_MESSAGES/exec.po @@ -80,11 +80,11 @@ msgstr "Reload a given LionBot extension. Launches an ExecUI." #: src/modules/sysadmin/exec_cog.py:388 msgid "Name of the extension to reload. See autocomplete for options." -msgstr "" +msgstr "Name of the extesion to reload. See autocomplete for options." #: src/modules/sysadmin/exec_cog.py:389 msgid "Whether to force an extension reload even if it doesn't exist." -msgstr "" +msgstr "Whether to force an extension reload even if it doesn't exist." #: src/modules/sysadmin/exec_cog.py:425 msgid "shutdown" diff --git a/locales/he_IL/LC_MESSAGES/lion-core.po b/locales/he_IL/LC_MESSAGES/lion-core.po index 40268b8e..e4d1674a 100644 --- a/locales/he_IL/LC_MESSAGES/lion-core.po +++ b/locales/he_IL/LC_MESSAGES/lion-core.po @@ -5,15 +5,16 @@ # # Translators: # Interitio, 2023 +# Ari Horesh, 2023 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-27 16:37+0300\n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" -"Last-Translator: Interitio, 2023\n" +"Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,38 +32,40 @@ msgctxt "settype:coin|parse|error:notinteger" msgid "The coin quantity must be a positive integer!" msgstr "כמות המטבעות חייבת להיות מספר שלם וחיובי!" -#: src/core/setting_types.py:54 +#: src/core/setting_types.py:55 +#, possible-python-brace-format msgctxt "settype:coin|parse|error:too_large" -msgid "Provided number of coins was too high!" -msgstr "המספר שניתן גבוה מידי!" +msgid "You cannot set this to more than {coin}**{max}**!" +msgstr "לא ניתן לבחור יותר מ{coin}**{max}**!" -#: src/core/setting_types.py:60 -msgctxt "settype:coin|parse|error:too_large" -msgid "Provided number of coins was too low!" -msgstr "המספר שניתן נמוך מידי!" +#: src/core/setting_types.py:63 +#, possible-python-brace-format +msgctxt "settype:coin|parse|error:too_small" +msgid "You cannot set this to less than {coin}**{min}**!" +msgstr "לא ניתן לבחור פחות מ{coin}**{min}**!" -#: src/core/setting_types.py:71 +#: src/core/setting_types.py:75 #, possible-python-brace-format msgctxt "settype:coin|formatted" msgid "{coin}**{amount}**" msgstr "{coin}**{amount}**" -#: src/core/setting_types.py:87 +#: src/core/setting_types.py:91 msgctxt "settype:message|accepts" msgid "JSON formatted raw message data" msgstr "מסמך נא בפורמט JSON " -#: src/core/setting_types.py:102 +#: src/core/setting_types.py:106 msgctxt "settype:message|download|error:not_json" msgid "The attached message data is not a JSON file!" msgstr "המסמך שהוספת הוא לא בפורמט JSON!" -#: src/core/setting_types.py:107 +#: src/core/setting_types.py:111 msgctxt "settype:message|download|error:size" msgid "The attached message data is too large!" msgstr "המסמך שהוספת גדול מידי!" -#: src/core/setting_types.py:116 +#: src/core/setting_types.py:120 msgctxt "settype:message|download|error:decoding" msgid "" "Could not decode the message data. Please ensure it is saved with the " @@ -70,7 +73,7 @@ msgid "" msgstr "" "לא הצלחתי לקרוא את המסמך שלך. אתה בטוח ששמרת אותו בתור `UTF-8` encoding?" -#: src/core/setting_types.py:173 +#: src/core/setting_types.py:177 #, possible-python-brace-format msgctxt "settype:message|error_suffix" msgid "" @@ -79,7 +82,7 @@ msgid "" msgstr "" "אתה יכול לראות, לערוץ ולתקן את הembed באמצעות [embed builder]({link})." -#: src/core/setting_types.py:185 +#: src/core/setting_types.py:189 #, possible-python-brace-format msgctxt "settype:message|error:invalid_json" msgid "" @@ -89,7 +92,7 @@ msgstr "" "המסמך שהוצמד אינו מסמך JSON\n" "`{error}`" -#: src/core/setting_types.py:193 +#: src/core/setting_types.py:197 msgctxt "settype:message|error:json_missing_keys" msgid "" "Message data must be a JSON object with at least one of the following " @@ -98,27 +101,27 @@ msgstr "" "המסמך חייב להיות JSON אם לפחות אחד מהאזורים הבאים: `content`, `embed`, " "`embeds`" -#: src/core/setting_types.py:202 +#: src/core/setting_types.py:206 msgctxt "settype:message|error:json_embed_type" msgid "`embed` field must be a valid JSON object." msgstr "הembed חייב להיות מסמך JSON" -#: src/core/setting_types.py:210 +#: src/core/setting_types.py:214 msgctxt "settype:message|error:json_embeds_type" msgid "`embeds` field must be a list." msgstr "הembed חייב להיות רשימה." -#: src/core/setting_types.py:217 +#: src/core/setting_types.py:221 msgctxt "settype:message|error:json_embed_embeds" msgid "Message data cannot include both `embed` and `embeds`." msgstr "תוכן ההודעה לא יכול להכיל `embed` וגם `embeds`." -#: src/core/setting_types.py:225 +#: src/core/setting_types.py:229 msgctxt "settype:message|error:json_content_type" msgid "`content` field must be a string." msgstr "האזור של התוכן חייב להכין טקסט." -#: src/core/setting_types.py:241 +#: src/core/setting_types.py:245 #, possible-python-brace-format msgctxt "ui:settype:message|error:embed_conversion" msgid "" @@ -128,7 +131,7 @@ msgstr "" "לא הצלחתי להבין את הembed\n" "**Error:** `{exception}`" -#: src/core/setting_types.py:269 +#: src/core/setting_types.py:273 msgctxt "settype:message|format:too_long" msgid "Too long to display! See Preview." msgstr "ארוך מידי כדי להראות! בדוק תצוגה מקדימה." diff --git a/locales/he_IL/LC_MESSAGES/member_admin.po b/locales/he_IL/LC_MESSAGES/member_admin.po index a8f10ff9..a2a4760e 100644 --- a/locales/he_IL/LC_MESSAGES/member_admin.po +++ b/locales/he_IL/LC_MESSAGES/member_admin.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -49,8 +49,8 @@ msgstr "הודעת חזרה לשרת" #: src/modules/member_admin/settingui.py:213 msgctxt "ui:memberadmin|embed|title" -msgid "Member Admin Configuration Panel" -msgstr "אדמין משתמשים לוח בקרה" +msgid "Greetings and Initial Roles Panel" +msgstr "לוח בקרה של \"ברוכים הבאים\" ורולים ראשונים" #: src/modules/member_admin/settingui.py:257 msgctxt "dash:member_admin|title" @@ -72,32 +72,32 @@ msgctxt "dash:member_admin|section:initial_roles|name" msgid "Initial Roles ({commands[configure welcome]})" msgstr "רולים ראשוניים ({commands[configure welcome]})" -#: src/modules/member_admin/cog.py:234 +#: src/modules/member_admin/cog.py:239 msgctxt "cmd:resetmember" msgid "resetmember" msgstr "אפס משתמש" -#: src/modules/member_admin/cog.py:237 +#: src/modules/member_admin/cog.py:242 msgctxt "cmd:resetmember|desc" msgid "Reset (server-associated) member data for the target member or user." msgstr "אפס נתוני שרת עבור משתמש ספציפי" -#: src/modules/member_admin/cog.py:241 +#: src/modules/member_admin/cog.py:246 msgctxt "cmd:resetmember|param:target" msgid "member_to_reset" msgstr "משתמשים_לאיפוס" -#: src/modules/member_admin/cog.py:242 +#: src/modules/member_admin/cog.py:247 msgctxt "cmd:resetmember|param:saved_roles" msgid "saved_roles" msgstr "רולים_שמורים" -#: src/modules/member_admin/cog.py:247 +#: src/modules/member_admin/cog.py:252 msgctxt "cmd:resetmember|param:target|desc" msgid "Choose the member (current or past) you want to reset." msgstr "בחר את המשתמש (עכשווי או בעבר) שאתה רוצה לאפס." -#: src/modules/member_admin/cog.py:251 +#: src/modules/member_admin/cog.py:256 msgctxt "cmd:resetmember|param:saved_roles|desc" msgid "" "Clear the saved roles for this member, so their past roles are not restored " @@ -106,7 +106,7 @@ msgstr "" "מחק את הרולים השמורים עבור המשתמש הזה, הרולים הקודמים שלהם לא ישוחזרו כשהוא " "יצטרך מחדש." -#: src/modules/member_admin/cog.py:278 +#: src/modules/member_admin/cog.py:283 #, possible-python-brace-format msgctxt "cmd:resetmember|reset:saved_roles|success" msgid "" @@ -116,17 +116,17 @@ msgstr "" "הרולים השמורים עבור {target} אופסו. הם לא יקבלו את הרולים שלהם שוב בחזרה " "לשרת." -#: src/modules/member_admin/cog.py:286 +#: src/modules/member_admin/cog.py:291 msgctxt "cmd:resetmember|error:nothing_to_do" msgid "No reset operation selected, nothing to do." msgstr "איפוס לא נבחר, אין לי מה לעשות." -#: src/modules/member_admin/cog.py:302 +#: src/modules/member_admin/cog.py:307 msgctxt "cmd:configure_welcome" msgid "welcome" msgstr "ברוכים הבאים" -#: src/modules/member_admin/cog.py:305 +#: src/modules/member_admin/cog.py:310 msgctxt "cmd:configure_welcome|desc" msgid "Configure new member greetings and roles." msgstr "הגדר רולים והודעת שלומות למשתמש חדש" diff --git a/locales/he_IL/LC_MESSAGES/meta.po b/locales/he_IL/LC_MESSAGES/meta.po index 02ef4f4b..9d92834e 100644 --- a/locales/he_IL/LC_MESSAGES/meta.po +++ b/locales/he_IL/LC_MESSAGES/meta.po @@ -113,6 +113,17 @@ msgid "" " `/economy balance`: Display and modify LionCoin balance for members and roles.\n" " " msgstr "" +"\n" +"השתמש ב {cmd_dashboard} כדי לראות תיאור מקוצר של כל ההגדרות של הערוץ ובכדי לקפוץ לתפריטים השונים. \n" +"\n" +"התפריטים נגישים גם על ידי הפקודות הישירות, לדוגמא `/configure`\n" +"\n" +"עוד פקודות חשובות יוכלו להימצא פה:\n" +" `/editshop`: כדי לשלוט בחנות צבעים של השרת.\n" +" `/ranks`: כדי להכין דרגות עבור אנשים בשרת.\n" +"`/timer admin`: כדי להכין טיימרים בשרת.\n" +" `/rolemenus`: כדי להכין הודעות שאנשים יוכלו ללחוץ עליהן ולקבל רולים שונים.\n" +"`/economy balance`: לשלוח במטבעות ובכלכלת השרת." #: src/modules/meta/help_sections.py:112 msgctxt "helptext|level:member|title" diff --git a/locales/he_IL/LC_MESSAGES/moderation.po b/locales/he_IL/LC_MESSAGES/moderation.po index 5ca88130..3a664c7b 100644 --- a/locales/he_IL/LC_MESSAGES/moderation.po +++ b/locales/he_IL/LC_MESSAGES/moderation.po @@ -5,6 +5,7 @@ # # Translators: # Interitio, 2023 +# Ari Horesh, 2023 # #, fuzzy msgid "" @@ -13,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-13 08:47+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" -"Last-Translator: Interitio, 2023\n" +"Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -249,6 +250,9 @@ msgid "" "Moderators cannot reconfigure most bot configuration, or perform operations " "they do not already have permission for in Discord." msgstr "" +"משתמשים עם הרול הזה יוכלו לגשת תפריטים השונים, ולבצע פעולות ניהול כמו להקים " +"טיימרים. מנהלים לא יכולים לשנות את ההגדרות הבסיסיות של הבוט עצמו. הם בגדול " +"יכולים לבצע פעולות שהם גם ככה יכולים לעשות בדיסקורד בתור המנהלים שלכם." #: src/modules/moderation/settings.py:137 msgctxt "guildset:mod_role|accepts" diff --git a/locales/he_IL/LC_MESSAGES/monthly-gui.po b/locales/he_IL/LC_MESSAGES/monthly-gui.po index d0d28e68..603f2714 100644 --- a/locales/he_IL/LC_MESSAGES/monthly-gui.po +++ b/locales/he_IL/LC_MESSAGES/monthly-gui.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -148,22 +148,40 @@ msgstr "ממוצע יומי" #: src/gui/cards/monthly.py:320 #, possible-python-brace-format -msgctxt "ui:monthlystats|stats:daily_average|value" +msgctxt "skin:monthlystats|mode:study|stats:daily_average|value" msgid "{count} hours" -msgstr "{count} שעות" +msgstr "" #: src/gui/cards/monthly.py:324 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:voice|stats:daily_average|value" +msgid "{count} hours" +msgstr "" + +#: src/gui/cards/monthly.py:328 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:text|stats:daily_average|value" +msgid "{count} msgs" +msgstr "" + +#: src/gui/cards/monthly.py:332 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:anki|stats:daily_average|value" +msgid "{count} cards" +msgstr "" + +#: src/gui/cards/monthly.py:342 msgctxt "ui:monthlystats|stats:days_active|key" msgid "Days Active:" msgstr "פעילות" -#: src/gui/cards/monthly.py:328 +#: src/gui/cards/monthly.py:346 #, possible-python-brace-format msgctxt "ui:monthlystats|stats:days_active|value" msgid "{count} days" msgstr "{count} ימים" -#: src/gui/cards/monthly.py:341 +#: src/gui/cards/monthly.py:359 #, possible-python-brace-format msgctxt "skin:monthlystats|footer" msgid "Monthly Statistics • As of {day} {month} • {name} {discrim}" diff --git a/locales/he_IL/LC_MESSAGES/ranks.po b/locales/he_IL/LC_MESSAGES/ranks.po index bd1b261b..c7292669 100644 --- a/locales/he_IL/LC_MESSAGES/ranks.po +++ b/locales/he_IL/LC_MESSAGES/ranks.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -37,17 +37,23 @@ msgctxt "cmd:configure_ranks|param:rank_type|choice:message" msgid "Message" msgstr "הודעה" -#: src/modules/ranks/cog.py:406 +#: src/modules/ranks/cog.py:495 msgctxt "event:rank_update|embed:notify" msgid "New Activity Rank Attained!" msgstr "הגעת לדרגה חדשה!" -#: src/modules/ranks/cog.py:516 +#: src/modules/ranks/cog.py:601 +msgctxt "rank_refresh|error:cannot_chunk|desc" +msgid "Could not retrieve member list from Discord. Please try again later." +msgstr "" +"לא הצלחתי לקבל את הרשימה של המשתמשים מדיסקורד, אנא נסה שוב מאוחר יותר." + +#: src/modules/ranks/cog.py:614 msgctxt "rank_refresh|error:roles_dne|desc" msgid "Some ranks have invalid or deleted roles! Please remove them first." msgstr "כמה דרגות לא זמינות או נמחקו! אנא מחק אותם קודם." -#: src/modules/ranks/cog.py:526 +#: src/modules/ranks/cog.py:624 #, possible-python-brace-format msgctxt "rank_refresh|error:unassignable_roles|desc" msgid "" @@ -57,18 +63,18 @@ msgstr "" "אין לי מספיק הרשאות כדי לתת את הרולים הבאים:\n" "{roles}" -#: src/modules/ranks/cog.py:596 +#: src/modules/ranks/cog.py:694 msgctxt "rank_refresh|remove_roles|audit" msgid "Removing invalid rank role." msgstr "מוחק דרגות לא זמינות." -#: src/modules/ranks/cog.py:610 +#: src/modules/ranks/cog.py:708 #, possible-python-brace-format msgctxt "rank_refresh|remove_roles|small_error" msgid "*Could not remove ranks from {member}*" msgstr "*לא הצלחתי למחוק את הדרגה מ{member}*" -#: src/modules/ranks/cog.py:617 +#: src/modules/ranks/cog.py:715 msgctxt "rank_refresh|remove_roles|error:too_many_issues" msgid "" "Too many issues occurred while removing ranks! Please check my permissions " @@ -77,18 +83,18 @@ msgstr "" "יותר מידי בעיות קרו כשניסיתי למחוק את הדרגות! אנא בדוק את ההרשאות שלי ונסה " "שוב בעוד כמה דקות." -#: src/modules/ranks/cog.py:631 +#: src/modules/ranks/cog.py:729 msgctxt "rank_refresh|add_roles|audit" msgid "Adding rank role from refresh" msgstr "מוסיף דרגות מאופציית הרענון" -#: src/modules/ranks/cog.py:645 +#: src/modules/ranks/cog.py:743 #, possible-python-brace-format msgctxt "rank_refresh|add_roles|small_error" msgid "*Could not add {role} to {member}*" msgstr "*לא הצלחתי להוסיף את {role} ל{member}*" -#: src/modules/ranks/cog.py:652 +#: src/modules/ranks/cog.py:750 msgctxt "rank_refresh|add_roles|error:too_many_issues" msgid "" "Too many issues occurred while adding ranks! Please check my permissions and" @@ -98,22 +104,22 @@ msgstr "" "שוב בעוד כמה דקות." #. ---------- Commands ---------- -#: src/modules/ranks/cog.py:677 +#: src/modules/ranks/cog.py:775 msgctxt "cmd:ranks" msgid "ranks" msgstr "דרגה" -#: src/modules/ranks/cog.py:709 +#: src/modules/ranks/cog.py:807 msgctxt "cmd:configure_ranks" msgid "ranks" msgstr "דרגות" -#: src/modules/ranks/cog.py:710 +#: src/modules/ranks/cog.py:808 msgctxt "cmd:configure_ranks|desc" msgid "Configure Activity Ranks" msgstr "הגדר דרגות פעילות" -#: src/modules/ranks/cog.py:770 +#: src/modules/ranks/cog.py:868 #, possible-python-brace-format msgctxt "" "cmd:configure_ranks|response:updated|setting:notification|withdm_withchannel" @@ -124,20 +130,20 @@ msgstr "" "כמשתמש יקבל דרגה אני אשלח את ההתראות בהודעה פרטית, אם לא הצלחתי, אשלח אותה " "אל {channel}" -#: src/modules/ranks/cog.py:776 +#: src/modules/ranks/cog.py:874 msgctxt "" "cmd:configure_ranks|response:updated|setting:notification|withdm_nochannel" msgid "Rank update notifications will be sent via **direct message**." msgstr "עדכון ההתראות ישלח ב**הודעה פרטית.**" -#: src/modules/ranks/cog.py:782 +#: src/modules/ranks/cog.py:880 #, possible-python-brace-format msgctxt "" "cmd:configure_ranks|response:updated|setting:notification|nodm_withchannel" msgid "Rank update notifications will be sent to {channel}." msgstr "התראות בנוגע לדרגות ישלחו אל {channel}." -#: src/modules/ranks/cog.py:787 +#: src/modules/ranks/cog.py:885 msgctxt "" "cmd:configure_ranks|response:updated|setting:notification|nodm_nochannel" msgid "Members will not be notified when their activity rank updates." @@ -368,7 +374,7 @@ msgctxt "guildset:dm_ranks|response:false" msgid "I will never direct message members upon rank advancement." msgstr "אני *לעולם לא* אשלח למשתמש הודעה פרטית שהוא עולה דרגה." -#: src/modules/ranks/ui/preview.py:74 +#: src/modules/ranks/ui/preview.py:75 msgctxt "ui:rank_preview|button:edit|error:role_deleted" msgid "" "The role underlying this rank no longer exists! Please select a new role " @@ -377,7 +383,7 @@ msgstr "" "הרול הקשור לדרגה הזו נמחק או כבר לא קיים! בבקשה תבחרו רול חדש כדי לשייך " "לדרגה הזו דרך התפריט רולים." -#: src/modules/ranks/ui/preview.py:81 +#: src/modules/ranks/ui/preview.py:82 msgctxt "ui:rank_preview|button:edit|error:role_not_assignable" msgid "" "I do not have permission to edit the underlying role! Please select a new " @@ -386,17 +392,17 @@ msgstr "" "אין לי מספיק הרשאות לערוך את הרול הזה! אנא בחרו רול מהתפריט אחרי שווידאתם " "שהרול שלי נמצא בחלק העליון של הרשימת רולים של השרת שלכם." -#: src/modules/ranks/ui/preview.py:90 +#: src/modules/ranks/ui/preview.py:91 msgctxt "ui:rank_preview|button:edit|error|title" msgid "Failed to edit rank!" msgstr "לא הצלחתי לערוך את הדרגה!" -#: src/modules/ranks/ui/preview.py:108 +#: src/modules/ranks/ui/preview.py:109 msgctxt "ui:rank_preview|button:edit|label" msgid "Edit" msgstr "ערוך" -#: src/modules/ranks/ui/preview.py:139 +#: src/modules/ranks/ui/preview.py:142 #, possible-python-brace-format msgctxt "ui:rank_preview|button:delete|response:success|description|with_role" msgid "" @@ -406,24 +412,24 @@ msgstr "" "מחקתם את הדרגה {mention}. לחץ על הכפתור בתחתית כדי למחוק את הרול שהיה קשור " "אליה." -#: src/modules/ranks/ui/preview.py:144 +#: src/modules/ranks/ui/preview.py:147 #, possible-python-brace-format msgctxt "ui:rank_preview|button:delete|response:success|description|no_role" msgid "You have deleted the rank {mention}." msgstr "מחקתם את הדרגה {mention}." -#: src/modules/ranks/ui/preview.py:150 +#: src/modules/ranks/ui/preview.py:153 msgctxt "ui:rank_preview|button:delete|response:success|title" msgid "Rank Deleted" msgstr "רול נמחק" -#: src/modules/ranks/ui/preview.py:160 +#: src/modules/ranks/ui/preview.py:163 msgctxt "" "ui:rank_preview|button:delete|response:success|button:delete_role|label" msgid "Delete Role" msgstr "מחק רול" -#: src/modules/ranks/ui/preview.py:176 +#: src/modules/ranks/ui/preview.py:179 #, possible-python-brace-format msgctxt "" "ui:rank_preview|button:delete|response:success|button:delete_role|response:errored|desc" @@ -434,46 +440,31 @@ msgstr "" "מחקתם את הדרגה **{name}**! לא הצלחתי למחוק את הרול הקשור אליו בעקבות שגיאה " "לא ידועה." -#: src/modules/ranks/ui/preview.py:182 +#: src/modules/ranks/ui/preview.py:185 #, possible-python-brace-format msgctxt "" "ui:rank_preview|button:delete|response:success|button:delete_role|response:success|desc" msgid "You have deleted the rank **{name}** along with the underlying role." msgstr "מחקתם את הדרגה **{name}** ביחד עם הרול שהיה קשור אליה." -#: src/modules/ranks/ui/preview.py:199 +#: src/modules/ranks/ui/preview.py:202 msgctxt "ui:rank_preview|button:delete|label" msgid "Delete Rank" msgstr "מחק דרגה" -#: src/modules/ranks/ui/preview.py:219 -#, possible-python-brace-format -msgctxt "ui:rank_preview|menu:roles|error:above_caller" -msgid "" -"You have insufficient permissions to assign {mention} as a rank role! You " -"may only manage roles below your top role." -msgstr "" -"אין לך מספיק הראשות כדי להוסיף את {mention} בתור דרגה! אתה יכול לנהל דרגות " -"רק אם הרולים שלך נמצאים מתחת לרול שאתה רוצה לנהל ברשימה של הרולים בדיסקורד." - -#: src/modules/ranks/ui/preview.py:225 -msgctxt "ui:rank_preview|menu:roles|error:above_caller|title" -msgid "Insufficient permissions!" -msgstr "אין לי או לך מספיק הראשות בשרת כדי לעשות את זה!" - -#: src/modules/ranks/ui/preview.py:241 +#: src/modules/ranks/ui/preview.py:232 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:is_default" msgid "The @everyone role cannot be removed, and cannot be a rank!" msgstr "הרול @everyone לא יכול להיות דרגה ולא יכול להמחק." -#: src/modules/ranks/ui/preview.py:246 +#: src/modules/ranks/ui/preview.py:237 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:is_managed" msgid "" "The role is managed by another application or integration, and cannot be a " "rank!" msgstr "הרול הזה מנוהל על ידי בוט אחר ואני לא יכול לגשת אליו." -#: src/modules/ranks/ui/preview.py:251 +#: src/modules/ranks/ui/preview.py:242 msgctxt "" "ui:rank_preview|menu:roles|error:not_assignable|suberror:no_permissions" msgid "" @@ -483,121 +474,121 @@ msgstr "" "אין לי את ההרשאה `MANAGE_ROLES` בשרת הזה. אנא הוסף אותי שוב עם ההרשאות " "הנכונות." -#: src/modules/ranks/ui/preview.py:256 +#: src/modules/ranks/ui/preview.py:247 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:above_me" msgid "" "This role is above my top role in the role hierarchy, so I cannot add or " "remove it!" msgstr "הרול הזה נמצא מעליי ברשימה של הרולים של השרת אז אין לי איך לגשת אליו." -#: src/modules/ranks/ui/preview.py:262 +#: src/modules/ranks/ui/preview.py:253 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:other" msgid "I am not able to manage the selected role, so it cannot be a rank!" msgstr "אני לא יכול לגשת לרול שבחרת, ולכן הוא לא יכול להיות דרגה בשרת." -#: src/modules/ranks/ui/preview.py:268 +#: src/modules/ranks/ui/preview.py:259 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|title" msgid "Could not update rank!" msgstr "לא הצלחתי לעדכן את הדרגה!" -#: src/modules/ranks/ui/preview.py:278 +#: src/modules/ranks/ui/preview.py:269 msgctxt "ui:rank_preview|menu:roles|placeholder" msgid "Update Rank Role" msgstr "עדכון רול דרגה" -#: src/modules/ranks/ui/preview.py:290 +#: src/modules/ranks/ui/preview.py:281 msgctxt "ui:rank_preview|embed|title" msgid "Rank Information" msgstr "מידע על דרגה" -#: src/modules/ranks/ui/preview.py:297 +#: src/modules/ranks/ui/preview.py:288 msgctxt "ui:rank_preview|embed|field:role|name" msgid "Role" msgstr "רול" -#: src/modules/ranks/ui/preview.py:304 +#: src/modules/ranks/ui/preview.py:295 msgctxt "ui:rank_preview|embed|field:required|name" msgid "Required" msgstr "נחוץ" -#: src/modules/ranks/ui/preview.py:311 +#: src/modules/ranks/ui/preview.py:302 msgctxt "ui:rank_preview|embed|field:reward|name" msgid "Reward" msgstr "פרס" -#: src/modules/ranks/ui/preview.py:320 +#: src/modules/ranks/ui/preview.py:311 msgctxt "ui:rank_preview|embed|field:message" msgid "Congratulatory Message" msgstr "הודעה מברכת" -#: src/modules/ranks/ui/refresh.py:125 +#: src/modules/ranks/ui/refresh.py:134 msgctxt "ui:refresh_ranks|embed|title:errored" msgid "Could not refresh the server ranks!" msgstr "לא הצלחתי לרענן את הדרגות בשרת הזה!" -#: src/modules/ranks/ui/refresh.py:133 +#: src/modules/ranks/ui/refresh.py:142 msgctxt "ui:refresh_ranks|embed|title:done" msgid "Rank refresh complete!" msgstr "הרענון דרגות הושלם בהצלחה!" -#: src/modules/ranks/ui/refresh.py:139 +#: src/modules/ranks/ui/refresh.py:148 msgctxt "ui:refresh_ranks|embed|title:working" msgid "Refreshing your server ranks, please wait." msgstr "מרענן את הדרגות למשתמשים בשרת, חכו בסבלנות." -#: src/modules/ranks/ui/refresh.py:157 +#: src/modules/ranks/ui/refresh.py:166 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:ranks" msgid "**Loading server ranks:** {emoji}" msgstr "**טוען דרגות:**{emoji}" -#: src/modules/ranks/ui/refresh.py:167 +#: src/modules/ranks/ui/refresh.py:176 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:members" msgid "**Loading server members:** {emoji}" msgstr "**טוען משתמשים:** {emoji}" -#: src/modules/ranks/ui/refresh.py:177 +#: src/modules/ranks/ui/refresh.py:186 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:roles" msgid "**Loading rank roles:** {emoji}" msgstr "**טוען רולים שקשורים לדרגות:** {emoji}" -#: src/modules/ranks/ui/refresh.py:187 +#: src/modules/ranks/ui/refresh.py:196 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:compute" msgid "**Computing correct ranks:** {emoji}" msgstr "**מחשב דרגות נכונות:**{emoji}" -#: src/modules/ranks/ui/refresh.py:198 +#: src/modules/ranks/ui/refresh.py:207 msgctxt "ui:refresh_ranks|embed|field:remove|name" msgid "Removing invalid rank roles from members" msgstr "מוחק דרגות לא זמינות ממשתמשים בשרת." -#: src/modules/ranks/ui/refresh.py:202 +#: src/modules/ranks/ui/refresh.py:211 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|field:remove|value" msgid "{progress} {done}/{total} removed" -msgstr "" +msgstr "{progress} {done}/{total} הוסר" -#: src/modules/ranks/ui/refresh.py:213 +#: src/modules/ranks/ui/refresh.py:222 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:remove" msgid "**Removed invalid ranks:** {done}/{target}" msgstr "**דרגות לא קשורות שנמחקו:** {done}/{target}" -#: src/modules/ranks/ui/refresh.py:221 +#: src/modules/ranks/ui/refresh.py:230 msgctxt "ui:refresh_ranks|embed|field:add|name" msgid "Giving members their rank roles" msgstr "נותן למשתמשים את הרולי דרגות שלהם" -#: src/modules/ranks/ui/refresh.py:225 +#: src/modules/ranks/ui/refresh.py:234 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|field:add|value" msgid "{progress} {done}/{total} given" -msgstr "" +msgstr "{progress} {done}/{total} ניתן" -#: src/modules/ranks/ui/refresh.py:236 +#: src/modules/ranks/ui/refresh.py:245 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:add" msgid "**Updated member ranks:** {done}/{target}" @@ -653,69 +644,54 @@ msgctxt "dash:rank|dropdown|placeholder" msgid "Activity Rank Panel" msgstr "תפריט דרגות פעילות" -#: src/modules/ranks/ui/overview.py:94 +#: src/modules/ranks/ui/overview.py:95 msgctxt "ui:rank_overview|button:auto|label" msgid "Auto Create" msgstr "צור באופן אוטומטי" -#: src/modules/ranks/ui/overview.py:109 +#: src/modules/ranks/ui/overview.py:110 msgctxt "ui:rank_overview|button:refresh|label" msgid "Refresh Member Ranks" msgstr "רענן דרגות משתמשים" -#: src/modules/ranks/ui/overview.py:121 +#: src/modules/ranks/ui/overview.py:122 msgctxt "ui:rank_overview|button:clear|confirm" msgid "Are you sure you want to **delete all activity ranks** in this server?" -msgstr "" +msgstr "אתה בטוח שאתה רוצה למחוק את **כל הפעילות של הדרגות** מהשרת הזה?" -#: src/modules/ranks/ui/overview.py:126 +#: src/modules/ranks/ui/overview.py:127 msgctxt "ui:rank_overview|button:clear|confirm|button:yes" msgid "Yes, clear ranks" -msgstr "" +msgstr "כן, נקה דרגות" -#: src/modules/ranks/ui/overview.py:132 +#: src/modules/ranks/ui/overview.py:133 msgctxt "ui:rank_overview|button:clear|confirm|button:no" msgid "Cancel" -msgstr "" +msgstr "בטל" -#: src/modules/ranks/ui/overview.py:148 +#: src/modules/ranks/ui/overview.py:149 msgctxt "ui:rank_overview|button:clear|label" msgid "Clear Ranks" msgstr "אפס דרגות" -#: src/modules/ranks/ui/overview.py:178 +#: src/modules/ranks/ui/overview.py:179 msgctxt "ui:rank_overview|button:create|label" msgid "Create Rank" msgstr "צור דרגה!" -#: src/modules/ranks/ui/overview.py:194 -#, possible-python-brace-format -msgctxt "ui:rank_overview|menu:roles|error:above_caller" -msgid "" -"You have insufficient permissions to assign {mention} as a rank role! You " -"may only manage roles below your top role." -msgstr "" -"אין לך מספיק הראשות כדי להוסיף את {mention} בתור דרגה! אתה יכול לנהל דרגות " -"רק אם הרולים שלך נמצאים מתחת לרול שאתה רוצה לנהל ברשימה של הרולים בדיסקורד." - -#: src/modules/ranks/ui/overview.py:200 -msgctxt "ui:rank_overview|menu:roles|error:above_caller|title" -msgid "Insufficient permissions!" -msgstr "אין לי או לך מספיק הראשות בשרת כדי לעשות את זה!" - -#: src/modules/ranks/ui/overview.py:233 +#: src/modules/ranks/ui/overview.py:222 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:is_default" msgid "The @everyone role cannot be removed, and cannot be a rank!" msgstr "הרול @everyone לא יכול להיות דרגה ולא יכול להמחק." -#: src/modules/ranks/ui/overview.py:238 +#: src/modules/ranks/ui/overview.py:227 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:is_managed" msgid "" "The role is managed by another application or integration, and cannot be a " "rank!" msgstr "הרול הזה מנוהל על ידי בוט אחר ואני לא יכול לגשת אליו." -#: src/modules/ranks/ui/overview.py:243 +#: src/modules/ranks/ui/overview.py:232 msgctxt "" "ui:rank_overview|menu:roles|error:not_assignable|suberror:no_permissions" msgid "" @@ -725,61 +701,34 @@ msgstr "" "אין לי את ההרשאה `MANAGE_ROLES` בשרת הזה. אנא הוסף אותי שוב עם ההרשאות " "הנכונות." -#: src/modules/ranks/ui/overview.py:248 +#: src/modules/ranks/ui/overview.py:237 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:above_me" msgid "" "This role is above my top role in the role hierarchy, so I cannot add or " "remove it!" msgstr "הרול הזה נמצא מעליי ברשימה של הרולים של השרת אז אין לי איך לגשת אליו." -#: src/modules/ranks/ui/overview.py:254 +#: src/modules/ranks/ui/overview.py:243 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:other" msgid "I am not able to manage the selected role, so it cannot be a rank!" msgstr "אני לא יכול לגשת לרול שבחרת, ולכן הוא לא יכול להיות דרגה בשרת." -#: src/modules/ranks/ui/overview.py:260 +#: src/modules/ranks/ui/overview.py:249 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|title" msgid "Could not create rank!" msgstr "לא הצלחתי ליצור דרגה!" -#: src/modules/ranks/ui/overview.py:284 +#: src/modules/ranks/ui/overview.py:273 msgctxt "ui:rank_overview|menu:roles|placeholder" msgid "Create from role" msgstr "צור מרול ספציפי" -#: src/modules/ranks/ui/overview.py:301 +#: src/modules/ranks/ui/overview.py:290 msgctxt "ui:rank_overview|menu:ranks|placeholder" msgid "View or edit rank" msgstr "צפה או ערוך דרגה" -#: src/modules/ranks/ui/overview.py:387 -msgctxt "ui:rank_overview|embed|field:note|name" -msgid "Note" -msgstr "" - -#: src/modules/ranks/ui/overview.py:393 -#, possible-python-brace-format -msgctxt "ui:rank_overview|embed|field:note|value:with_season" -msgid "Ranks are determined by activity since {timestamp}." -msgstr "" - -#: src/modules/ranks/ui/overview.py:400 -#, possible-python-brace-format -msgctxt "ui:rank_overview|embed|field:note|value:without_season" -msgid "" -"Ranks are determined by *all-time* statistics.\n" -"To reward ranks from a later time (e.g. to have monthly/quarterly/yearly ranks) set the `season_start` with {stats_cmd}" -msgstr "" - -#: src/modules/ranks/ui/overview.py:407 -msgctxt "ui:rank_overview|embed|field:note|value|voice_addendum" -msgid "" -"Also note that ranks will only be updated when a member leaves a tracked " -"voice channel! Use the **Refresh Member Ranks** button below to update all " -"members manually." -msgstr "" - -#: src/modules/ranks/ui/overview.py:415 +#: src/modules/ranks/ui/overview.py:376 msgctxt "ui:rank_overview|embed:noranks|desc" msgid "" "No activity ranks have been set up!\n" @@ -788,24 +737,55 @@ msgstr "" "דרגות לא הוגדרו עבור השרת הזה!\n" "לחץ על \"צור באופן אוטומטי\" על מנת ליצור דרגות סטנדרטיות, או בחר ברול ספציפי וצור אחד בעצמך!" -#: src/modules/ranks/ui/overview.py:423 +#: src/modules/ranks/ui/overview.py:384 #, possible-python-brace-format msgctxt "ui:rank_overview|embed|title|type:voice" msgid "Voice Ranks in {guild_name}" msgstr "דרגות פעילות בחדרי קול ב {guild_name}" -#: src/modules/ranks/ui/overview.py:428 +#: src/modules/ranks/ui/overview.py:389 #, possible-python-brace-format msgctxt "ui:rank_overview|embed|title|type:xp" msgid "XP ranks in {guild_name}" msgstr "דרגות לפי נקודות ניסיון ב {guild_name}" -#: src/modules/ranks/ui/overview.py:433 +#: src/modules/ranks/ui/overview.py:394 #, possible-python-brace-format msgctxt "ui:rank_overview|embed|title|type:message" msgid "Message ranks in {guild_name}" msgstr "דרגות לפי כמות הודעות ב {guild_name}" +#: src/modules/ranks/ui/overview.py:406 +msgctxt "ui:rank_overview|embed|field:note|name" +msgid "Note" +msgstr "פתקית" + +#: src/modules/ranks/ui/overview.py:412 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|field:note|value:with_season" +msgid "Ranks are determined by activity since {timestamp}." +msgstr "דרגות נקבעות על ידי פעילות מתאריך {timestamp}." + +#: src/modules/ranks/ui/overview.py:419 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|field:note|value:without_season" +msgid "" +"Ranks are determined by *all-time* statistics.\n" +"To reward ranks from a later time (e.g. to have monthly/quarterly/yearly ranks) set the `season_start` with {stats_cmd}" +msgstr "" +"דרגות יקבעו על ידי פעילות *מכל הזמנים*.\n" +"כדי לתת דרגה מזמן אחר (לדוגמא מחודש ספציפי או שנה וכו') השתמשו ב {stats_cmd} וקבעו את `התחלת_עונה` " + +#: src/modules/ranks/ui/overview.py:426 +msgctxt "ui:rank_overview|embed|field:note|value|voice_addendum" +msgid "" +"Also note that ranks will only be updated when a member leaves a tracked " +"voice channel! Use the **Refresh Member Ranks** button below to update all " +"members manually." +msgstr "" +"שימו לב גם שהדרגות יתעדכנו רק אחרי שמשתמש נכנס ויוצא מחדר קול. אם אתם רוצים " +"לעדכן את כל המשתמשים כבר מעכשיו, השתמשו ב\"רענן\"." + #: src/modules/ranks/ui/editor.py:33 msgctxt "ui:rank_editor|input:role_name|label" msgid "Role Name" diff --git a/locales/he_IL/LC_MESSAGES/reminders.po b/locales/he_IL/LC_MESSAGES/reminders.po index ef985a34..5ed5bc0b 100644 --- a/locales/he_IL/LC_MESSAGES/reminders.po +++ b/locales/he_IL/LC_MESSAGES/reminders.po @@ -26,18 +26,18 @@ msgstr "" #, possible-python-brace-format msgctxt "create_reminder|error:past" msgid "The provided reminder time {timestamp} is in the past!" -msgstr "" +msgstr "התאריך שהבאת לתזכיר {timestamp} הוא בעבר!" #: src/modules/reminders/cog.py:123 msgctxt "create_reminder|error:too_fast" msgid "" "You cannot set a repeating reminder with a period less than 10 minutes." -msgstr "" +msgstr "אתה לא יכול ליצור תזכיר עם אינטרבל של פחות מ10 דקות." #: src/modules/reminders/cog.py:133 msgctxt "create_reminder|error:too_many" msgid "Sorry, you have reached the maximum of `25` reminders." -msgstr "" +msgstr "סליחה, הגעת למגבלה של 25 תזכירים!" #: src/modules/reminders/cog.py:149 msgctxt "create_reminder|error:cannot_dm" @@ -45,6 +45,8 @@ msgid "" "I cannot direct message you! Do you have me blocked or direct messages " "closed?" msgstr "" +"אני לא יכול לשלוח לך הודעות פרטיות! חסמת אותי במקרה או שאולי ההודעות הפרטיות" +" שלך סגורות?" #: src/modules/reminders/cog.py:186 #, possible-python-brace-format @@ -53,6 +55,8 @@ msgid "" "Could not parse `{given}` as a valid reminder time. Try entering the time in" " the form `HH:MM` or `YYYY-MM-DD HH:MM`." msgstr "" +"לא הצלחתי להבין את `{given}` כזמן. נסה להשתמש בפורמט הנכון `HH:MM` או `YYYY-" +"MM-DD HH:MM`." #: src/modules/reminders/cog.py:329 msgctxt "cmd:reminders" @@ -62,7 +66,7 @@ msgstr "תזכירים" #: src/modules/reminders/cog.py:332 msgctxt "cmd:reminders|desc" msgid "View and set your reminders." -msgstr "" +msgstr "הצג וצור תזכירים." #: src/modules/reminders/cog.py:353 msgctxt "cmd:remindme" @@ -72,7 +76,7 @@ msgstr "הזכרלי" #: src/modules/reminders/cog.py:354 msgctxt "cmd:remindme|desc" msgid "View and set task reminders." -msgstr "" +msgstr "הצג וצור תזכירי מטלות." #: src/modules/reminders/cog.py:361 msgctxt "cmd:reminders_cancel" @@ -85,6 +89,7 @@ msgid "" "Cancel a single reminder. Use /reminders to clear or cancel multiple " "reminders." msgstr "" +"בטל תזכור בודד. השתמש בתפריט ב /reminders כדי לבטל כמה תזכירים בבת אחת." #: src/modules/reminders/cog.py:368 msgctxt "cmd:reminders_cancel|param:reminder" @@ -169,7 +174,7 @@ msgstr "באיזו תדירות שבה תרצה לקבל את התזכור הז #: src/modules/reminders/cog.py:533 msgctxt "cmd:remindme_at|error|title" msgid "Could not create reminder!" -msgstr "" +msgstr "לא הצלחתי ליצור את התזכיר!" #: src/modules/reminders/cog.py:564 #, possible-python-brace-format @@ -178,6 +183,8 @@ msgid "" "Cannot parse \"{partial}\" as a time. Try the format HH:MM or YYYY-MM-DD " "HH:MM" msgstr "" +"לא הצלחתי להבין את \"{partial}\" בתור זמן. השתמשו בפורמט HH:MM או YYYY-MM-DD" +" HH:MM" #: src/modules/reminders/cog.py:571 msgctxt "cmd:remindme_in" @@ -222,103 +229,105 @@ msgstr "עד מתי תרצו לקבל את התזכיר הזה? (e.g. 1 day, or #: src/modules/reminders/cog.py:619 msgctxt "cmd:remindme_in|error|title" msgid "Could not create reminder!" -msgstr "" +msgstr "לא הצלחתי ליצור את התזכיר!" #: src/modules/reminders/ui.py:47 msgctxt "ui:reminderlist|button:clear|confirm|title" msgid "Are You Sure?" -msgstr "" +msgstr "אתם בטוחים?" #: src/modules/reminders/ui.py:50 #, possible-python-brace-format msgctxt "ui:reminderlist|button:clear|confirm|desc" msgid "Are you sure you want to delete your `{count}` reminder?" msgid_plural "Are you sure you want to clear your `{count}` reminders?" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "אתם בטוחים שאתם רוצים לנקות את התזכור?" +msgstr[1] "אתם בטוחים שאתם רוצים לנקות שני תזכורים?" +msgstr[2] "אתם בטוחים שאתם רוצים לנקות `{count}` תזכורים?" +msgstr[3] "אתם בטוחים שאתם רוצים לנקות `{count}` תזכורים?" #: src/modules/reminders/ui.py:57 msgctxt "ui:reminderlist|button:clear|confirm|button:yes" msgid "Yes, clear my reminders" -msgstr "" +msgstr "כן, נקה את התזכירים שלי" #: src/modules/reminders/ui.py:68 msgctxt "ui:reminderlist|button:clear|success|desc" msgid "Your reminders have been cleared!" -msgstr "" +msgstr "התזכירים שלך נוקו!" #: src/modules/reminders/ui.py:77 msgctxt "ui:reminderlist|button:clear|confirm|button:cancel" msgid "Cancel" -msgstr "" +msgstr "בטל" #: src/modules/reminders/ui.py:89 msgctxt "ui:reminderlist|button:clear|label" msgid "Clear Reminders" -msgstr "" +msgstr "נקה תזכירים" #: src/modules/reminders/ui.py:110 msgctxt "ui:reminderlist|button:new|modal|field:time|label" msgid "When would you like to be reminded?" -msgstr "" +msgstr "מה תרצה שאזכיר לך?" #: src/modules/reminders/ui.py:120 msgctxt "ui:reminderlist|button:new|modal|field:repeat|label" msgid "How often should the reminder repeat?" -msgstr "" +msgstr "כל כמה זמן אני צריך להזכיר לך את זה?" #: src/modules/reminders/ui.py:124 msgctxt "ui:reminderlist|button:new|modal|field:repeat|placeholder" msgid "1 day 10 hours 5 minutes (Leave empty for no repeat.)" msgstr "" +"יום 1 10 שעות 5 דקות (באנגלית, השאר ריק אם אתה לא רוצה שהתזכיר יחזור על " +"עצמו)" #: src/modules/reminders/ui.py:133 msgctxt "ui:reminderlist|button:new|modal|field:content|label" msgid "What should I remind you?" -msgstr "" +msgstr "מה אני צריך להזכיר לך?" #: src/modules/reminders/ui.py:144 msgctxt "ui:reminderlist|button:new|modal|title" msgid "Set a Reminder" -msgstr "" +msgstr "צור תזכיר" #: src/modules/reminders/ui.py:157 #, possible-python-brace-format msgctxt "ui:reminderlist|button:new|modal|parse|error:interval" msgid "Cannot parse '{value}' as a duration." -msgstr "" +msgstr "לא הצלחתי להבין את `{value}` בתור אורך זמן." #: src/modules/reminders/ui.py:180 msgctxt "ui:reminderlist|button:new|label" msgid "New Reminder" -msgstr "" +msgstr "תזכיר חדש" #: src/modules/reminders/ui.py:208 msgctxt "ui:reminderlist|select:remove|placeholder" msgid "Select to cancel" -msgstr "" +msgstr "בחר כדי לבטל." #: src/modules/reminders/ui.py:264 msgctxt "ui:reminderlist|embed:list|author" msgid "Your reminders" -msgstr "" +msgstr "התזכירים שלך" #: src/modules/reminders/ui.py:270 msgctxt "ui:reminderlist|embed:list|footer" msgid "Click a reminder to jump back to the context!" -msgstr "" +msgstr "לחץ על תזכיר כדי לקפוץ לקונטקסט שלו!" #: src/modules/reminders/ui.py:277 msgctxt "ui:reminderlist|embed:no_reminders|title" msgid "You have no reminders set!" -msgstr "" +msgstr "אין לך תזכירים!" #: src/modules/reminders/ui.py:286 msgctxt "ui:reminderlist|embed|tips:name" msgid "Reminder Tips" -msgstr "" +msgstr "טיפים לקביעת תזכירים" #: src/modules/reminders/ui.py:290 #, possible-python-brace-format @@ -329,11 +338,15 @@ msgid "" "- Both commands support repeating reminders using the `every` parameter.\n" "- Remember to tell me your timezone with {timezone_cmd} if you haven't already!" msgstr "" +"- השתמש ב {at_cmd} כדי ליצור תזכיר בשעה ספציפית. \n" +"השתמש ב{in_cmd} כדי ליצור תזכיר בעוד זמן ספציפי.\n" +"- שתי הפקודות תומכות חזרה באינטרבל באמצעות שימוש ב `every`\n" +"- תזכרו לקבוע את אזור הזמן שלכם ב {timezone_cmd} וכמובן להשתמש באנגלית." #: src/modules/reminders/data.py:63 msgctxt "reminder_set|title" msgid "Reminder Set!" -msgstr "" +msgstr "תזכיר נקבע!" #: src/modules/reminders/data.py:67 #, possible-python-brace-format @@ -342,18 +355,20 @@ msgid "" "At {timestamp} I will remind you about:\n" "> {content}" msgstr "" +"כל {timestamp} אזכיר לך:\n" +"> {content}" #: src/modules/reminders/data.py:79 msgctxt "reminder_set|field:repeat|name" msgid "Repeats" -msgstr "" +msgstr "חזרות" #: src/modules/reminders/data.py:83 #, possible-python-brace-format msgctxt "reminder_set|field:repeat|value" msgid "" "This reminder will repeat every `{interval}` (after the first reminder)." -msgstr "" +msgstr "התזכיר יחזור כל `{interval}` אחרי הפעם הראשונה שתקבלו אותו." #: src/modules/reminders/data.py:94 msgctxt "reminder|embed" diff --git a/locales/he_IL/LC_MESSAGES/rolemenus.po b/locales/he_IL/LC_MESSAGES/rolemenus.po index b9c14084..f0e76ce4 100644 --- a/locales/he_IL/LC_MESSAGES/rolemenus.po +++ b/locales/he_IL/LC_MESSAGES/rolemenus.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -56,12 +56,12 @@ msgid "" "menus." msgstr "אין לי את ההרשאה `MANAGE_ROLES` כדי לערוך את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:300 +#: src/modules/rolemenus/cog.py:301 msgctxt "parse:message_link|suberror:message_dne" msgid "Could not find the linked message, has it been deleted?" msgstr "לא הצלחתי למצוא את ההודעה הקשורה, האם היא נמחקה במקרה?" -#: src/modules/rolemenus/cog.py:305 +#: src/modules/rolemenus/cog.py:306 #, possible-python-brace-format msgctxt "parse:message_link|suberror:no_perms" msgid "" @@ -70,20 +70,20 @@ msgid "" msgstr "" "אין לי מספיק הרשאות! אני צריך את ההרשאה `MESSAGE_HISTORY` בערוץ {channel}." -#: src/modules/rolemenus/cog.py:310 +#: src/modules/rolemenus/cog.py:311 #, possible-python-brace-format msgctxt "parse:message_link|suberror:channel_dne" msgid "The channel `{channelid}` could not be found in this server." msgstr "הערוץ `{channelid}` לא נמצא בשרת הזה." -#: src/modules/rolemenus/cog.py:315 +#: src/modules/rolemenus/cog.py:316 msgctxt "parse:message_link|suberror:malformed_link" msgid "" "Malformed message link. Please copy the link by right clicking the target " "message." msgstr "הלינק לא תקין. אנא העתק את הלינק הנכון." -#: src/modules/rolemenus/cog.py:322 +#: src/modules/rolemenus/cog.py:323 #, possible-python-brace-format msgctxt "parse:message_link|error" msgid "" @@ -93,138 +93,138 @@ msgstr "" "קיבלתי שגיאה, לא הצלחתי לא הבין את הלינק\n" "שגיאה: {error}" -#: src/modules/rolemenus/cog.py:434 +#: src/modules/rolemenus/cog.py:435 msgctxt "cmd:rolemenus" msgid "rolemenus" msgstr "תפריטירולים" -#: src/modules/rolemenus/cog.py:437 +#: src/modules/rolemenus/cog.py:438 msgctxt "cmd:rolemenus|desc" msgid "View and configure the role menus in this server." msgstr "הצג ונהל את התפריטי רולים של השרת הזה." -#: src/modules/rolemenus/cog.py:454 +#: src/modules/rolemenus/cog.py:455 msgctxt "cmd:rolemenus|error:author_perms" msgid "" "You need the `MANAGE_ROLES` permission in order to manage the server role " "menus." msgstr "אתה צריך את ההרשאה `MANAGE_ROLES` כדי לערוך את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:461 +#: src/modules/rolemenus/cog.py:462 msgctxt "cmd:rolemenus|error:my_perms" msgid "" "I lack the `MANAGE_ROLES` permission required to offer roles from role " "menus." msgstr "אין לי את ההרשאה `MANAGE_ROLES` כדי לערוך את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:496 +#: src/modules/rolemenus/cog.py:497 #, possible-python-brace-format msgctxt "acmpl:menus|choice:no_choices|name" msgid "No role menus matching '{partial}'" msgstr "אין תפריטים שמתאימים ל'{partial}'!" -#: src/modules/rolemenus/cog.py:515 +#: src/modules/rolemenus/cog.py:516 msgctxt "acmpl:menuroles|param:menu|keyname" msgid "menu" msgstr "תפריט" -#: src/modules/rolemenus/cog.py:521 +#: src/modules/rolemenus/cog.py:522 msgctxt "acmpl:menuroles|choice:no_menu|name" msgid "Please select a menu first" msgstr "אנא בחר תפריט קודם" -#: src/modules/rolemenus/cog.py:545 +#: src/modules/rolemenus/cog.py:546 #, possible-python-brace-format msgctxt "acmpl:menuroles|choice:invalid_menu|name" msgid "Menu '{name}' does not exist!" msgstr "התפריט '{name}' לא קיים!" -#: src/modules/rolemenus/cog.py:574 +#: src/modules/rolemenus/cog.py:575 #, possible-python-brace-format msgctxt "acmpl:menuroles|choice:no_matching|name" msgid "No roles in this menu matching '{partial}'" msgstr "אין רולים בתפריטים הללו שמתאימים ל'{partial}'!" -#: src/modules/rolemenus/cog.py:581 +#: src/modules/rolemenus/cog.py:582 msgctxt "group:rolemenu" msgid "rolemenu" msgstr "תפריטרולים" -#: src/modules/rolemenus/cog.py:584 +#: src/modules/rolemenus/cog.py:585 msgctxt "group:rolemenu|desc" msgid "Base command group for role menu configuration." msgstr "קבוצת פקודות בסיס לניהול הגדרות התפריטים." -#: src/modules/rolemenus/cog.py:593 +#: src/modules/rolemenus/cog.py:594 msgctxt "cmd:rolemenu_create" msgid "newmenu" msgstr "תפריטחדש" -#: src/modules/rolemenus/cog.py:596 +#: src/modules/rolemenus/cog.py:597 msgctxt "cmd:rolemenu_create|desc" msgid "Create a new role menu (optionally using an existing message)" msgstr "צור תפריט חדש (ניתן להשתמש גם בהודעה קיימת)" -#: src/modules/rolemenus/cog.py:610 +#: src/modules/rolemenus/cog.py:611 msgctxt "cmd:rolemenu_create|param:message" msgid "message_link" msgstr "קישור_הודעה" -#: src/modules/rolemenus/cog.py:611 +#: src/modules/rolemenus/cog.py:612 msgctxt "cmd:rolemenu_create|param:menu_style" msgid "menu_style" msgstr "סגנון_תפריט" -#: src/modules/rolemenus/cog.py:612 +#: src/modules/rolemenus/cog.py:613 msgctxt "cmd:rolemenu_create|param:remplate" msgid "template" msgstr "תבנית" -#: src/modules/rolemenus/cog.py:613 +#: src/modules/rolemenus/cog.py:614 msgctxt "cmd:rolemenu_create|param:rawmessage" msgid "custom_message" msgstr "הודעה_מותאמת_אישית" -#: src/modules/rolemenus/cog.py:623 +#: src/modules/rolemenus/cog.py:624 msgctxt "cmd:rolemenu_create|param:message|desc" msgid "Link to an existing message to turn it into a (reaction) role menu" msgstr "לינק להודעה שכבר קיימת כדי להפוך אותה להודעת תפריטים" -#: src/modules/rolemenus/cog.py:627 +#: src/modules/rolemenus/cog.py:628 msgctxt "cmd:rolemenu_create|param:menu_style" msgid "Selection style for this menu (using buttons, dropdowns, or reactions)" msgstr "סגנון בחירה לתפריט הזה (כפתורים, תפריט נופל או ריאקציות)" -#: src/modules/rolemenus/cog.py:631 +#: src/modules/rolemenus/cog.py:632 msgctxt "cmd:rolemenu_create|param:template" msgid "Template to use for the menu message body" msgstr "תבנית שבה אשתמש בגוף התפריט" -#: src/modules/rolemenus/cog.py:635 +#: src/modules/rolemenus/cog.py:636 msgctxt "cmd:rolemenu_create|param:rawmessage" msgid "Attach a custom menu message to use" msgstr "הוסף הודעה מותאמת אישית שאשתמש" -#: src/modules/rolemenus/cog.py:664 +#: src/modules/rolemenus/cog.py:665 msgctxt "cmd:rolemenu_create|error:author_perms" msgid "" "You need the `MANAGE_ROLES` permission in order to create new role menus." msgstr "אתה צריך את ההרשאה `MANAGE_ROLES` כדי לנהל את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:671 +#: src/modules/rolemenus/cog.py:672 msgctxt "cmd:rolemenu_create|error:my_perms" msgid "" "I lack the `MANAGE_ROLES` permission needed to offer roles from role menus." msgstr "אין לי את ההרשאה `MANAGE_ROLES` כדי לערוך את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:690 +#: src/modules/rolemenus/cog.py:691 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:message_exists" msgid "The message {link} already has a role menu! Use {edit_cmd} to edit it." msgstr "" "להודעה {link} כבר יש תפריט משויך אליו. תשתמשו ב {edit_cmd} כדי לערוך אותו." -#: src/modules/rolemenus/cog.py:711 +#: src/modules/rolemenus/cog.py:712 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:style_notmine" msgid "" @@ -234,7 +234,7 @@ msgstr "" "אני לא יכול ליצור תפריט בסגנון `{style}` על הודעה שאני לא שלחתי בעצמי (ככה " "דיסקורד עובד, אין לי איך לעקוף את זה)" -#: src/modules/rolemenus/cog.py:718 +#: src/modules/rolemenus/cog.py:719 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:rawmessage_notmine" msgid "" @@ -243,7 +243,7 @@ msgid "" msgstr "" "לא הצלחתי להכין תפריט על ההודעה {message} כי אני לא זה ששלח את ההודעה הזו!" -#: src/modules/rolemenus/cog.py:727 +#: src/modules/rolemenus/cog.py:728 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:template_notmine" msgid "" @@ -252,125 +252,153 @@ msgid "" msgstr "" "לא הצלחתי להכין תפריט על ההודעה {message} כי אני לא זה ששלח את ההודעה הזו!" -#: src/modules/rolemenus/cog.py:740 +#: src/modules/rolemenus/cog.py:741 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:name_exists" msgid "A rolemenu called `{name}` already exists! Use {edit_cmd} to edit it." msgstr "תפריט בשם `{name}` כבר קיים! תשתמשו ב{edit_cmd} כדי לערוך אותו." -#: src/modules/rolemenus/cog.py:788 +#: src/modules/rolemenus/cog.py:789 msgctxt "cmd:rolemenu_edit" msgid "editmenu" msgstr "ערוךתפריט" -#: src/modules/rolemenus/cog.py:791 +#: src/modules/rolemenus/cog.py:792 msgctxt "cmd:rolemenu_edit|desc" msgid "Edit an existing role menu." msgstr "ערוך תפריט קיים." -#: src/modules/rolemenus/cog.py:800 +#: src/modules/rolemenus/cog.py:801 msgctxt "cmd:rolemenu_edit|param:name" msgid "name" msgstr "שם" -#: src/modules/rolemenus/cog.py:801 +#: src/modules/rolemenus/cog.py:802 msgctxt "cmd:rolemenu_edit|param:new_name" msgid "new_name" msgstr "שם_חדש" -#: src/modules/rolemenus/cog.py:802 +#: src/modules/rolemenus/cog.py:803 msgctxt "cmd:rolemenu_edit|param:channel" msgid "new_channel" msgstr "ערוץ_חדש" -#: src/modules/rolemenus/cog.py:807 +#: src/modules/rolemenus/cog.py:808 msgctxt "cmd:rolemenu_edit|param:menu_style" msgid "menu_style" msgstr "סגנון_תפריט" -#: src/modules/rolemenus/cog.py:808 +#: src/modules/rolemenus/cog.py:809 msgctxt "cmd:rolemenu_edit|param:remplate" msgid "template" msgstr "תבנית" -#: src/modules/rolemenus/cog.py:809 +#: src/modules/rolemenus/cog.py:810 msgctxt "cmd:rolemenu_edit|param:rawmessage" msgid "custom_message" msgstr "הודעה_מותאמת_אישית" -#: src/modules/rolemenus/cog.py:814 +#: src/modules/rolemenus/cog.py:815 msgctxt "cmd:rolemenu_edit|param:name|desc" msgid "Name of the menu to edit" msgstr "השם של התפריט שמיועד לעריכה" -#: src/modules/rolemenus/cog.py:818 +#: src/modules/rolemenus/cog.py:819 msgctxt "cmd:rolemenu_edit|param:channel|desc" msgid "Server channel to move the menu to" msgstr "ערוץ בשרת שאליו אעביר את התפריט הזה" -#: src/modules/rolemenus/cog.py:827 +#: src/modules/rolemenus/cog.py:828 msgctxt "cmd:rolemenu_edit|param:menu_style" msgid "Selection style for this menu (using buttons, dropdowns, or reactions)" msgstr "סגנון בחירה לתפריט הזה (כפתורים, תפריט נופל או ריאקציות)" -#: src/modules/rolemenus/cog.py:831 +#: src/modules/rolemenus/cog.py:832 msgctxt "cmd:rolemenu_edit|param:template" msgid "Template to use for the menu message body" msgstr "תבנית שבה אשתמש בגוף התפריט" -#: src/modules/rolemenus/cog.py:835 +#: src/modules/rolemenus/cog.py:836 msgctxt "cmd:rolemenu_edit|param:rawmessage" msgid "Attach a custom menu message to use" msgstr "הוסף הודעה מותאמת אישית שאשתמש" -#: src/modules/rolemenus/cog.py:864 +#: src/modules/rolemenus/cog.py:865 msgctxt "cmd:rolemenu_edit|error:author_perms" msgid "You need the `MANAGE_ROLES` permission in order to edit role menus." msgstr "אתה צריך את ההרשאה `MANAGE_ROLES` כדי לנהל את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:871 +#: src/modules/rolemenus/cog.py:872 msgctxt "cmd:rolemenu_edit|error:my_perms" msgid "" "I lack the `MANAGE_ROLES` permission needed to offer roles from role menus." msgstr "אין לי את ההרשאה `MANAGE_ROLES` כדי לערוך את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:894 +#: src/modules/rolemenus/cog.py:895 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "לשרת הזה אין תפריט בשם `{name}`!" -#: src/modules/rolemenus/cog.py:914 +#: src/modules/rolemenus/cog.py:916 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|parse:new_name|error:name_exists" msgid "A role menu with the name **{new_name}** already exists!" msgstr "תפריט רולים עם השם **{new_name}** כבר קיים!" -#: src/modules/rolemenus/cog.py:951 +#: src/modules/rolemenus/cog.py:953 msgctxt "cmd:rolemenu_edit|parse:template|error:not_managed" msgid "" "Cannot set a template message for a role menu attached to a message I did " "not send." msgstr "אני לא יכול לגשת להודעה הזו, אני לא הייתי זה ששלח אותה." -#: src/modules/rolemenus/cog.py:962 +#: src/modules/rolemenus/cog.py:964 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|parse:template|success:template" msgid "Now using the `{name}` menu message template." msgstr "עכשיו אשתמש בתבנית בשם `{name}` " -#: src/modules/rolemenus/cog.py:969 +#: src/modules/rolemenus/cog.py:971 msgctxt "cmd:rolemenu_edit|parse:template|success:custom" msgid "Now using a custom menu message." msgstr "עכשיו אשתמש בהודעה מותאמת אישית לתפריט." -#: src/modules/rolemenus/cog.py:994 +#: src/modules/rolemenus/cog.py:981 +msgctxt "cmd:rolemenu_edit|parse:style|error:not_managed" +msgid "" +"Cannot change the style of a role menu attached to a message I did not send." +msgstr "" + +#: src/modules/rolemenus/cog.py:991 +msgctxt "cmd:rolemenu_edit|parse:style|error:too_many_reactions" +msgid "Too many roles! Reaction role menus can have at most `20` roles." +msgstr "" + +#: src/modules/rolemenus/cog.py:1001 +msgctxt "cmd:rolemenu_edit|parse:style|error:incomplete_emojis" +msgid "" +"Cannot switch to the reaction role style! Every role needs a distinct emoji " +"first." +msgstr "" + +#: src/modules/rolemenus/cog.py:1008 +msgctxt "cmd:rolemenu_edit|parse:style|success" +msgid "Updated role menu style." +msgstr "" + +#: src/modules/rolemenus/cog.py:1022 +msgctxt "cmd:rolemenu_edit|parse:custom_message|success" +msgid "Custom menu message updated." +msgstr "הודעת תפריט עודכנה." + +#: src/modules/rolemenus/cog.py:1037 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|repost|success" msgid "The role menu is now available at {message}" msgstr "התפריט עכשיו משוייך ל {message}" -#: src/modules/rolemenus/cog.py:1005 +#: src/modules/rolemenus/cog.py:1048 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|repost|error:forbidden" msgid "" @@ -380,7 +408,7 @@ msgstr "" "לא הצלחתי לעדכן את הערוץ! אין לי את ההרשאות `EMBED_LINKS` או `SEND_MESSAGES`" " בערוץ {channel}." -#: src/modules/rolemenus/cog.py:1010 +#: src/modules/rolemenus/cog.py:1053 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|repost|error:unknown" msgid "" @@ -390,40 +418,40 @@ msgstr "" "שגיאה לא ידועה התרחשה כשניסיתי לשלוח מחדש את התפריט לערוץ {channel}.\n" "השגיאה: `{exception}`" -#: src/modules/rolemenus/cog.py:1044 +#: src/modules/rolemenus/cog.py:1092 msgctxt "cmd:rolemenu_delete" msgid "delmenu" msgstr "מחקתפריט" -#: src/modules/rolemenus/cog.py:1047 +#: src/modules/rolemenus/cog.py:1095 msgctxt "cmd:rolemenu_delete|desc" msgid "Delete a role menu." msgstr "מחק את התפריט רולים." -#: src/modules/rolemenus/cog.py:1051 +#: src/modules/rolemenus/cog.py:1099 msgctxt "cmd:rolemenu_delete|param:name" msgid "menu" msgstr "תפריט" -#: src/modules/rolemenus/cog.py:1056 +#: src/modules/rolemenus/cog.py:1104 msgctxt "cmd:rolemenu_delete|param:name|desc" msgid "Name of the rolemenu to delete." msgstr "השם של התפריט שמיועד למחיקה" -#: src/modules/rolemenus/cog.py:1071 +#: src/modules/rolemenus/cog.py:1119 msgctxt "cmd:rolemenu_delete|error:author_perms" msgid "" "You need the `MANAGE_ROLES` permission in order to manage the server role " "menus." msgstr "אתה צריך את ההרשאה `MANAGE_ROLES` כדי לערוך את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:1094 +#: src/modules/rolemenus/cog.py:1142 #, possible-python-brace-format msgctxt "cmd:rolemenu_delete|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "לשרת הזה אין תפריט בשם `{name}`!" -#: src/modules/rolemenus/cog.py:1102 +#: src/modules/rolemenus/cog.py:1150 #, possible-python-brace-format msgctxt "cmd:rolemenu_delete|confirm|title" msgid "" @@ -431,249 +459,249 @@ msgid "" "reversible!" msgstr "אתם רוצים שאתם רוצים למחוק את התפריט **{name}**? לא תוכלו לחזור בכם." -#: src/modules/rolemenus/cog.py:1107 +#: src/modules/rolemenus/cog.py:1155 msgctxt "cmd:rolemenu_delete|confirm|button:yes" msgid "Yes, Delete Now" msgstr "כן, מחק עכשיו" -#: src/modules/rolemenus/cog.py:1112 +#: src/modules/rolemenus/cog.py:1160 msgctxt "cmd:rolemenu_delete|confirm|button:no" msgid "No, Cancel" msgstr "לא, בטל" -#: src/modules/rolemenus/cog.py:1137 +#: src/modules/rolemenus/cog.py:1185 #, possible-python-brace-format msgctxt "cmd:rolemenu_delete|success|desc" msgid "Successfully deleted the menu **{name}**" msgstr "מחקתי את התפריט **{name}** בהצלחה " -#: src/modules/rolemenus/cog.py:1145 +#: src/modules/rolemenus/cog.py:1193 msgctxt "cmd:rolemenu_addrole" msgid "addrole" msgstr "הוסףרול" -#: src/modules/rolemenus/cog.py:1148 +#: src/modules/rolemenus/cog.py:1196 msgctxt "cmd:rolemenu_addrole|desc" msgid "Add a new role to an existing role menu." msgstr "מוסיף רול חדש לתפריט קיים." -#: src/modules/rolemenus/cog.py:1153 +#: src/modules/rolemenus/cog.py:1201 msgctxt "cmd:rolemenu_addrole|param:menu" msgid "menu" msgstr "תפריט" -#: src/modules/rolemenus/cog.py:1156 +#: src/modules/rolemenus/cog.py:1204 msgctxt "cmd:rolemenu_addrole|param:role" msgid "role" msgstr "רול" -#: src/modules/rolemenus/cog.py:1167 +#: src/modules/rolemenus/cog.py:1215 msgctxt "cmd:rolemenu_addrole|param:menu|desc" msgid "Name of the menu to add a role to" msgstr "השם של התפריט שאליו אוסיף את הרול" -#: src/modules/rolemenus/cog.py:1171 +#: src/modules/rolemenus/cog.py:1219 msgctxt "cmd:rolemenu_addrole|param:role|desc" msgid "Role to add to the menu" msgstr "רול שאותו אוסיף לתפריט" -#: src/modules/rolemenus/cog.py:1179 +#: src/modules/rolemenus/cog.py:1227 msgctxt "cmd:rolemenu_addrole|param:duration|desc" msgid "Lifetime of the role after selection in minutes." msgstr "משך התוקף בדקות לרול שיתקבל לאחר בחירה" -#: src/modules/rolemenus/cog.py:1227 +#: src/modules/rolemenus/cog.py:1275 #, possible-python-brace-format msgctxt "cmd:rolemenu_addrole|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "לשרת הזה אין תפריט בשם `{name}`!" -#: src/modules/rolemenus/cog.py:1312 +#: src/modules/rolemenus/cog.py:1360 msgctxt "cmd:rolemenu_addrole|success:create|title" msgid "Added Menu Role" msgstr "רול שהוסף לתפריט" -#: src/modules/rolemenus/cog.py:1316 +#: src/modules/rolemenus/cog.py:1364 #, possible-python-brace-format msgctxt "cmd:rolemenu_addrole|success:create|desc" msgid "Add the role {role} to the menu **{menu}**." msgstr "הוסף את הרול {role} לתפריט **{menu}**." -#: src/modules/rolemenus/cog.py:1334 +#: src/modules/rolemenus/cog.py:1382 msgctxt "cmd:rolemenu_addrole|success:edit|title" msgid "Menu Role updated" msgstr "תפריט רולים עודכן" -#: src/modules/rolemenus/cog.py:1346 +#: src/modules/rolemenus/cog.py:1394 #, possible-python-brace-format msgctxt "cmd:rolemenu_addrole|error:role_exists" msgid "The role {role} is already selectable from the menu **{menu}**" msgstr "הרול {role} כבר ניתן לבחירה מהתפריט **{menu}**" -#: src/modules/rolemenus/cog.py:1364 +#: src/modules/rolemenus/cog.py:1412 msgctxt "cmd:rolemenu_addrole|success|error:reaction|name" msgid "Note" msgstr "פתקית" -#: src/modules/rolemenus/cog.py:1376 +#: src/modules/rolemenus/cog.py:1424 msgctxt "cmd:rolemenu_addrole|success|button:editor|label" msgid "Edit Menu" msgstr "ערוך תפריט" -#: src/modules/rolemenus/cog.py:1393 +#: src/modules/rolemenus/cog.py:1441 msgctxt "cmd:rolemenu_editrole" msgid "editrole" msgstr "ערוךרול" -#: src/modules/rolemenus/cog.py:1396 +#: src/modules/rolemenus/cog.py:1444 msgctxt "cmd:rolemenu_editrole|desc" msgid "Edit role options in an existing role menu." msgstr "ערוך הגדרות רול בתפריט רולים קיים." -#: src/modules/rolemenus/cog.py:1401 +#: src/modules/rolemenus/cog.py:1449 msgctxt "cmd:rolemenu_editrole|param:menu" msgid "menu" msgstr "תפריט" -#: src/modules/rolemenus/cog.py:1404 +#: src/modules/rolemenus/cog.py:1452 msgctxt "cmd:rolemenu_editrole|param:menu_role" msgid "menu_role" msgstr "תפריט_רולים" -#: src/modules/rolemenus/cog.py:1407 +#: src/modules/rolemenus/cog.py:1455 msgctxt "cmd:rolemenu_editrole|param:role" msgid "new_role" msgstr "רול_חדש" -#: src/modules/rolemenus/cog.py:1418 +#: src/modules/rolemenus/cog.py:1466 msgctxt "cmd:rolemenu_editrole|param:menu|desc" msgid "Name of the menu to edit the role for" msgstr "השם של התפריט שאליו אערוך את הרול" -#: src/modules/rolemenus/cog.py:1422 +#: src/modules/rolemenus/cog.py:1470 msgctxt "cmd:rolemenu_editrole|param:menu_role|desc" msgid "Label, name, or mention of the menu role to edit." msgstr "תאג, שם, או תיוג של התפריט שתרצו לערוך" -#: src/modules/rolemenus/cog.py:1426 +#: src/modules/rolemenus/cog.py:1474 msgctxt "cmd:rolemenu_editrole|param:role|desc" msgid "New server role this menu role should give." msgstr "רול שרת חדש שהתפריט רולים הזה יתן" -#: src/modules/rolemenus/cog.py:1434 +#: src/modules/rolemenus/cog.py:1482 msgctxt "cmd:rolemenu_editrole|param:duration|desc" msgid "Lifetime of the role after selection in minutes." msgstr "משך התוקף בדקות לרול שיתקבל לאחר בחירה" -#: src/modules/rolemenus/cog.py:1475 +#: src/modules/rolemenus/cog.py:1523 #, possible-python-brace-format msgctxt "cmd:rolemenu_editrole|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "לשרת הזה אין תפריט בשם `{name}`!" -#: src/modules/rolemenus/cog.py:1503 +#: src/modules/rolemenus/cog.py:1551 #, possible-python-brace-format msgctxt "cmd:rolemenu_editrole|error:role_not_found" msgid "The menu **{menu}** does not have the role **{name}**" msgstr "לתפריט **{menu}** אין את הרול **{name}**" -#: src/modules/rolemenus/cog.py:1569 +#: src/modules/rolemenus/cog.py:1617 msgctxt "cmd:rolemenu_editrole|success|title" msgid "Role menu role updated" msgstr "תפריט רולים עודכן" -#: src/modules/rolemenus/cog.py:1584 +#: src/modules/rolemenus/cog.py:1632 msgctxt "cmd:rolemenu_editrole|success|error:reaction|name" msgid "Warning!" msgstr "זהירות!" -#: src/modules/rolemenus/cog.py:1609 +#: src/modules/rolemenus/cog.py:1657 msgctxt "cmd:rolemenu_delrole" msgid "delrole" msgstr "מחקרול" -#: src/modules/rolemenus/cog.py:1612 +#: src/modules/rolemenus/cog.py:1660 msgctxt "cmd:rolemenu_delrole|desc" msgid "Remove a role from a role menu." msgstr "הסר את הרול מהתפריט רולים." -#: src/modules/rolemenus/cog.py:1616 +#: src/modules/rolemenus/cog.py:1664 msgctxt "cmd:rolemenu_delrole|param:menu" msgid "menu" msgstr "תפריט" -#: src/modules/rolemenus/cog.py:1617 +#: src/modules/rolemenus/cog.py:1665 msgctxt "cmd:rolemenu_delrole|param:menu_role" msgid "menu_role" msgstr "תפריט_רולים" -#: src/modules/rolemenus/cog.py:1622 +#: src/modules/rolemenus/cog.py:1670 msgctxt "cmd:rolemenu_delrole|param:menu|desc" msgid "Name of the menu to delete the role from." msgstr "השם של התפריט שממנו אמחק את הרול" -#: src/modules/rolemenus/cog.py:1626 +#: src/modules/rolemenus/cog.py:1674 msgctxt "cmd:rolemenu_delrole|param:menu_role|desc" msgid "Name, label, or mention of the role to delete." msgstr "תאג, שם, או תיוג של הרול שתרצו למחוק" -#: src/modules/rolemenus/cog.py:1644 +#: src/modules/rolemenus/cog.py:1692 msgctxt "cmd:rolemenu_delrole|error:author_perms" msgid "" "You need the `MANAGE_ROLES` permission in order to manage the server role " "menus." msgstr "אתה צריך את ההרשאה `MANAGE_ROLES` כדי לערוך את התפריטים של השרת הזה." -#: src/modules/rolemenus/cog.py:1668 +#: src/modules/rolemenus/cog.py:1716 #, possible-python-brace-format msgctxt "cmd:rolemenu_delrole|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "לשרת הזה אין תפריט בשם `{name}`!" -#: src/modules/rolemenus/cog.py:1696 +#: src/modules/rolemenus/cog.py:1744 #, possible-python-brace-format msgctxt "cmd:rolemenu_delrole|error:role_not_found" msgid "The menu **{menu}** does not have the role **{name}**" msgstr "לתפריט **{menu}** אין את הרול **{name}**" -#: src/modules/rolemenus/cog.py:1713 +#: src/modules/rolemenus/cog.py:1761 #, possible-python-brace-format msgctxt "cmd:rolemenu_delrole|success" msgid "The role **{name}** was successfully removed from the menu **{menu}**." msgstr "הרול **{name}** נמחק בהצלחה מהתפריט **{menu}**." -#: src/modules/rolemenus/roleoptions.py:54 +#: src/modules/rolemenus/roleoptions.py:57 msgctxt "roleset:role" msgid "role" msgstr "רול" -#: src/modules/rolemenus/roleoptions.py:57 +#: src/modules/rolemenus/roleoptions.py:60 msgctxt "roleset:role|desc" msgid "The role associated to this menu item." msgstr "הרול משויך לאייטם הזה מהתפריט." -#: src/modules/rolemenus/roleoptions.py:61 +#: src/modules/rolemenus/roleoptions.py:64 msgctxt "roleset:role|long_desc" msgid "The role given when this menu item is selected in the role menu." msgstr "הרול ניתן למשתמש כאשר האייטם התפריט נבחר על ידי לחיצה." -#: src/modules/rolemenus/roleoptions.py:74 +#: src/modules/rolemenus/roleoptions.py:77 #, possible-python-brace-format msgctxt "roleset:role|set_response:set" msgid "This menu item will now give the role {role}." msgstr "האייטם הזה עכשיו יתן את הרול {role}." -#: src/modules/rolemenus/roleoptions.py:82 +#: src/modules/rolemenus/roleoptions.py:88 msgctxt "roleset:label" msgid "label" msgstr "תגית" -#: src/modules/rolemenus/roleoptions.py:85 +#: src/modules/rolemenus/roleoptions.py:91 msgctxt "roleset:label|desc" msgid "A short button label for this role." msgstr "טקסט קצת עבור הכפתור של הרול הזה." -#: src/modules/rolemenus/roleoptions.py:90 +#: src/modules/rolemenus/roleoptions.py:96 msgctxt "roleset:label|long_desc" msgid "" "A short name for this role, to be displayed in button labels, dropdown " @@ -682,23 +710,23 @@ msgstr "" "שם קצר עבור הרול הזה, כדי להציג על הכפתור עצמו, תפריטים נופלים, ומקומות " "שונים. הברירת מחדל זה איך שקראתם לרול. " -#: src/modules/rolemenus/roleoptions.py:104 +#: src/modules/rolemenus/roleoptions.py:110 #, possible-python-brace-format msgctxt "roleset:role|set_response" msgid "This menu role is now called `{value}`." msgstr "השם של התפריט רולים הזה שונה ל`{value}`." -#: src/modules/rolemenus/roleoptions.py:112 +#: src/modules/rolemenus/roleoptions.py:118 msgctxt "roleset:emoji" msgid "emoji" msgstr "אמוג'י" -#: src/modules/rolemenus/roleoptions.py:115 +#: src/modules/rolemenus/roleoptions.py:121 msgctxt "roleset:emoji|desc" msgid "The emoji associated with this role." msgstr "האמוג'י שקשור לרול הזה" -#: src/modules/rolemenus/roleoptions.py:119 +#: src/modules/rolemenus/roleoptions.py:125 msgctxt "roleset:emoji|long_desc" msgid "" "The role emoji is used for the reaction (in reaction role menus), and " @@ -709,34 +737,34 @@ msgstr "" "ליד התאגית של הכפתור ובתפריטים נופלים. האמוג'י גם נראה לי הרול עצמו רוב " "הפעמים." -#: src/modules/rolemenus/roleoptions.py:157 +#: src/modules/rolemenus/roleoptions.py:165 #, possible-python-brace-format msgctxt "roleset:emoji|error:test_emoji" msgid "The selected emoji `{emoji}` is invalid or has been deleted." msgstr "האמוג'י שנבחר `{emoji}` שגוי או נמחק." -#: src/modules/rolemenus/roleoptions.py:168 +#: src/modules/rolemenus/roleoptions.py:176 #, possible-python-brace-format msgctxt "roleset:emoji|set_response:set" msgid "The menu role emoji is now {emoji}." msgstr "האמוג'י של הרול הוא עכשיו {emoji}." -#: src/modules/rolemenus/roleoptions.py:173 +#: src/modules/rolemenus/roleoptions.py:181 msgctxt "roleset:emoji|set_response:unset" msgid "The menu role emoji has been removed." msgstr "התפריט רול אמוג'י הוסר." -#: src/modules/rolemenus/roleoptions.py:181 +#: src/modules/rolemenus/roleoptions.py:189 msgctxt "roleset:description" msgid "description" msgstr "תיאור" -#: src/modules/rolemenus/roleoptions.py:184 +#: src/modules/rolemenus/roleoptions.py:192 msgctxt "roleset:description|desc" msgid "A longer description of this role." msgstr "תיאור ארוך יותר לרול הזה." -#: src/modules/rolemenus/roleoptions.py:189 +#: src/modules/rolemenus/roleoptions.py:197 msgctxt "roleset:description|long_desc" msgid "" "The description is displayed under the role label in dropdown style menus. " @@ -746,58 +774,68 @@ msgstr "" "התיאור נמצא מתחת לתאגית רול בתפריטים נופלים. ניתן להשתמש בזה גם כמפתח חלופי " "בריאקציות מותאמות אישית." -#: src/modules/rolemenus/roleoptions.py:205 +#: src/modules/rolemenus/roleoptions.py:213 msgctxt "roleset:description|set_response:set" msgid "The role description has been set." msgstr "התיאור רול נקבע." -#: src/modules/rolemenus/roleoptions.py:210 +#: src/modules/rolemenus/roleoptions.py:218 msgctxt "roleset:description|set_response:unset" msgid "The role description has been removed." msgstr "התיאור של הרול הוסר." -#: src/modules/rolemenus/roleoptions.py:218 +#: src/modules/rolemenus/roleoptions.py:226 msgctxt "roleset:price" msgid "price" msgstr "מחיר" -#: src/modules/rolemenus/roleoptions.py:221 -msgctxt "roleset:price|desc" -msgid "Price of the role, in LionCoins." -msgstr "המחיר של הרול במטבעות." - -#: src/modules/rolemenus/roleoptions.py:225 -msgctxt "roleset:price|long_desc" -msgid "How much the role costs when selected, in LionCoins." -msgstr "כמה הרול עולה כשלוחצים עליו במטבעות." - #: src/modules/rolemenus/roleoptions.py:229 +msgctxt "roleset:price|desc" +msgid "Price of the role, in LionCoins. May be negative." +msgstr "המחיר של הרול, במטבעות. יכול להיות מספר שלילי." + +#: src/modules/rolemenus/roleoptions.py:233 +msgctxt "roleset:price|long_desc" +msgid "" +"How many LionCoins should be deducted from a member's account when they equip this role through this menu.\n" +"The price may be negative, in which case the member will instead be rewarded coins when they equip the role." +msgstr "" +"כמה מטבעות יוסרו מהמשתמש כשהוא בוחר ברול. \n" +"המספר יכול להיות שלילי, במקרה כזה המשתמשים יקבלו מטבעות במקום." + +#: src/modules/rolemenus/roleoptions.py:240 msgctxt "roleset:price|accepts" -msgid "Amount of coins that the role costs." +msgid "Amount of coins that the role costs when equipped." msgstr "כמות מטבעות שהרול עולה." -#: src/modules/rolemenus/roleoptions.py:242 +#: src/modules/rolemenus/roleoptions.py:254 #, possible-python-brace-format -msgctxt "roleset:price|set_response:set" -msgid "This role will now cost {price} to equip." -msgstr "הרול יעלה למשתמש {price}." +msgctxt "roleset:price|set_response:positive" +msgid "Equipping this role will now cost {coin}**{price}**." +msgstr "ללבוש את הרול הזה יעלה עכשיו {coin}**{price}**." -#: src/modules/rolemenus/roleoptions.py:247 -msgctxt "roleset:price|set_response:unset" -msgid "This role will now be free to equip from this role menu." -msgstr "הרול עכשיו יהיה חינמי כדי לרכוש מהתפריט רולים." +#: src/modules/rolemenus/roleoptions.py:259 +msgctxt "roleset:price|set_response:zero" +msgid "Equipping this role is now free." +msgstr "ניתן עכשיו ללבוש את הרול הזה בחינם." -#: src/modules/rolemenus/roleoptions.py:255 +#: src/modules/rolemenus/roleoptions.py:264 +#, possible-python-brace-format +msgctxt "roleset:price|set_response:negative" +msgid "Equipping this role will now reward {coin}**{price}**." +msgstr "ללבוש את הרול הזה יתן למשתמש עכשיו {coin}**{price}**." + +#: src/modules/rolemenus/roleoptions.py:272 msgctxt "roleset:duration" msgid "duration" msgstr "משך זמן" -#: src/modules/rolemenus/roleoptions.py:258 +#: src/modules/rolemenus/roleoptions.py:275 msgctxt "roleset:duration|desc" msgid "Lifetime of the role after selection" msgstr "אורך חיים של הרול לאחר הרכישה" -#: src/modules/rolemenus/roleoptions.py:262 +#: src/modules/rolemenus/roleoptions.py:279 msgctxt "roleset:duration|long_desc" msgid "" "Allows creation of 'temporary roles' which expire a given time after being " @@ -806,18 +844,18 @@ msgstr "" "מאפשר את היצירה של \"רולים זמניים\" שפגים אחרי תקופת זמן ספציפים לאחר " "הרכישה. המטבעות לא יחזרו למשתמש אחרי שהרול תקף." -#: src/modules/rolemenus/roleoptions.py:267 +#: src/modules/rolemenus/roleoptions.py:284 msgctxt "roleset:duration|notset" msgid "Forever." msgstr "לנצח." -#: src/modules/rolemenus/roleoptions.py:280 +#: src/modules/rolemenus/roleoptions.py:297 #, possible-python-brace-format msgctxt "roleset:duration|set_response:set" msgid "This role will now expire after {duration}." msgstr "הרול הזה יפוג לאחר {duration}." -#: src/modules/rolemenus/roleoptions.py:285 +#: src/modules/rolemenus/roleoptions.py:302 msgctxt "roleset:duration|set_response:unset" msgid "This role will no longer expire after being selected." msgstr "הרול הזה כבר לא יפוג לאחר הרכישה." @@ -865,12 +903,12 @@ msgctxt "template:shop|desc" msgid "A single column display suitable for simple role shops" msgstr "עמדה בודדת - מתאימה לחנות פשוטה עם מספר רולים בודדים." -#: src/modules/rolemenus/rolemenu.py:280 +#: src/modules/rolemenus/rolemenu.py:294 msgctxt "rolemenu|menu_message|error|title" msgid "ROLE MENU DISPLAY ERROR" msgstr "שגיאת בהצגת תפריט רולים" -#: src/modules/rolemenus/rolemenu.py:284 +#: src/modules/rolemenus/rolemenu.py:298 #, possible-python-brace-format msgctxt "rolemenu|menu_message|error|desc" msgid "" @@ -880,7 +918,7 @@ msgstr "" "שגיאה קריטית התחוללה כשניסיתי להציג את התפריט הזה.\n" "שגיאה: `{error}`." -#: src/modules/rolemenus/rolemenu.py:336 +#: src/modules/rolemenus/rolemenu.py:350 #, possible-python-brace-format msgctxt "rolemenu|update_reactions|error" msgid "" @@ -890,66 +928,23 @@ msgstr "" "לא הצלחתי להוסיף את הריאקצית אמוג'י {emoji}, יכול להיות שאין לי גישה לאמוג'י הזה!\n" "ריאקציות יצתטרכו להיווסף על ידכם ידנית. " -#: src/modules/rolemenus/rolemenu.py:381 +#: src/modules/rolemenus/rolemenu.py:395 msgctxt "ui:rolemenu_dropdown|placeholder" msgid "Select Roles" msgstr "בחר רולים" -#: src/modules/rolemenus/rolemenu.py:472 -msgctxt "rolemenu|error:role_gone" -msgid "This role no longer exists!" -msgstr "הרול הזה כבר לא קיים." - -#: src/modules/rolemenus/rolemenu.py:482 -#, possible-python-brace-format -msgctxt "rolemenu|deselect|error:sticky" -msgid "**{role}** is a sticky role, you cannot remove it with this menu!" -msgstr "" -"**{role}** הוא רול דביק, זה אומר שאתם לא יכולים להסיר אותו עם התפריט הזה." - -#: src/modules/rolemenus/rolemenu.py:493 -msgctxt "rolemenu|deselect|error:perms" -msgid "I don't have enough permissions to remove this role from you!" -msgstr "אין לי מספיק הרשאות כדי להסיר את הרול הזה!" - -#: src/modules/rolemenus/rolemenu.py:500 -msgctxt "rolemenu|deselect|error:discord" -msgid "An unknown error occurred removing your role! Please try again later." -msgstr "" -"שגיאה לא ידועה התחוללה כשניסיתי להסיר את הרול ממך.\n" -"אנא נסה שוב במספר דקות." - -#: src/modules/rolemenus/rolemenu.py:529 -msgctxt "rolemenu|deslect|success|title" -msgid "Role removed" -msgstr "הרול הוסר" - -#: src/modules/rolemenus/rolemenu.py:535 -#, possible-python-brace-format -msgctxt "rolemenu|deselect|success:refund|desc" -msgid "You have removed **{role}**, and been refunded {coin} **{amount}**." -msgstr "הסרתם את הרול **{role}**, וקיבלתם את הכסף חזרה {coin} **{amount}**." - -#: src/modules/rolemenus/rolemenu.py:540 -#, possible-python-brace-format -msgctxt "rolemenu|deselect|success:norefund|desc" -msgid "You have unequipped **{role}**." -msgstr "הורדתם מעצמכם את הרול **{role}**." - -#: src/modules/rolemenus/rolemenu.py:554 -#, possible-python-brace-format -msgctxt "rolemenu|select|error:required_role" -msgid "You need to have the **{role}** role to use this!" -msgstr "אתם צריכים את הרול **{role}** כדי להשתמש בזה!" - -#: src/modules/rolemenus/rolemenu.py:568 +#: src/modules/rolemenus/rolemenu.py:506 #, possible-python-brace-format msgctxt "rolemenu|select|error:max_obtainable" -msgid "You already have the maximum of {obtainable} roles from this menu!" -msgstr "" -"כבר יש לכם את המספר המקסימלי ({obtainable}) שאתם יכולים לבחור מהתפריט הזה!" +msgid "You can own at most one role from this menu! You currently own:" +msgid_plural "" +"You can own at most **{count}** roles from this menu! You currently own:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: src/modules/rolemenus/rolemenu.py:582 +#: src/modules/rolemenus/rolemenu.py:523 #, possible-python-brace-format msgctxt "rolemenu|select|error:insufficient_funds" msgid "" @@ -958,12 +953,12 @@ msgid "" msgstr "" "הרול **{role}** עולה {coin}**{cost}**, אבל יש לכם רק {coin}**{balance}**!" -#: src/modules/rolemenus/rolemenu.py:598 +#: src/modules/rolemenus/rolemenu.py:539 msgctxt "rolemenu|select|error:perms" msgid "I don't have enough permissions to give you this role!" msgstr "אין לי מספיק הרשאות בכדי לתת לך את הרול הזה!" -#: src/modules/rolemenus/rolemenu.py:605 +#: src/modules/rolemenus/rolemenu.py:546 msgctxt "rolemenu|select|error:discord" msgid "" "An unknown error occurred while assigning your role! Please try again later." @@ -971,30 +966,84 @@ msgstr "" "שגיאה לא ידועה התחוללה כשניסיתי לתת לך את הרול.\n" "אנא נסה שוב במספר דקות." -#: src/modules/rolemenus/rolemenu.py:647 +#: src/modules/rolemenus/rolemenu.py:588 msgctxt "rolemenu|select|success|title" msgid "Role equipped" msgstr "הרול נלבש." -#: src/modules/rolemenus/rolemenu.py:653 +#: src/modules/rolemenus/rolemenu.py:594 #, possible-python-brace-format msgctxt "rolemenu|select|success:purchase|desc" msgid "You have purchased the role **{role}** for {coin}**{amount}**" msgstr "רכשת את הרול **{role}** עבור {coin}**{amount}**" -#: src/modules/rolemenus/rolemenu.py:658 +#: src/modules/rolemenus/rolemenu.py:599 #, possible-python-brace-format msgctxt "rolemenu|select|success:nopurchase|desc" -msgid "You have equipped the role **{role}**" -msgstr "לבשת על עצמך את הרול **{role}**" +msgid "You have equipped **{role}**" +msgstr "" -#: src/modules/rolemenus/rolemenu.py:664 +#: src/modules/rolemenus/rolemenu.py:605 #, possible-python-brace-format msgctxt "rolemenu|select|expires_at" msgid "The role will expire at {timestamp}." msgstr "הרול יפוג ב{timestamp}." -#: src/modules/rolemenus/rolemenu.py:717 +#: src/modules/rolemenus/rolemenu.py:627 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|error:sticky" +msgid "**{role}** is a sticky role, you cannot remove it with this menu!" +msgstr "" +"**{role}** הוא רול דביק, זה אומר שאתם לא יכולים להסיר אותו עם התפריט הזה." + +#: src/modules/rolemenus/rolemenu.py:638 +msgctxt "rolemenu|deselect|error:perms" +msgid "I don't have enough permissions to remove this role from you!" +msgstr "אין לי מספיק הרשאות כדי להסיר את הרול הזה!" + +#: src/modules/rolemenus/rolemenu.py:645 +msgctxt "rolemenu|deselect|error:discord" +msgid "An unknown error occurred removing your role! Please try again later." +msgstr "" +"שגיאה לא ידועה התחוללה כשניסיתי להסיר את הרול ממך.\n" +"אנא נסה שוב במספר דקות." + +#: src/modules/rolemenus/rolemenu.py:674 +msgctxt "rolemenu|deslect|success|title" +msgid "Role removed" +msgstr "הרול הוסר" + +#: src/modules/rolemenus/rolemenu.py:680 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:refund|desc" +msgid "You have removed **{role}**, and been refunded {coin} **{amount}**." +msgstr "הסרתם את הרול **{role}**, וקיבלתם את הכסף חזרה {coin} **{amount}**." + +#: src/modules/rolemenus/rolemenu.py:686 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:negrefund|desc" +msgid "You have removed **{role}**, and have lost {coin} **{amount}**." +msgstr "הסרתם את הרול **{role}**, ונלקחו ממכם {coin} **{amount}**." + +#: src/modules/rolemenus/rolemenu.py:691 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:norefund|desc" +msgid "You have unequipped **{role}**." +msgstr "הורדתם מעצמכם את הרול **{role}**." + +#: src/modules/rolemenus/rolemenu.py:713 +#, possible-python-brace-format +msgctxt "rolemenu|error:role_gone" +msgid "The role **{name}** no longer exists!" +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:726 +#, possible-python-brace-format +msgctxt "rolemenu|select|error:required_role" +msgid "You need to have the role **{role}** required to use this menu!" +msgstr "אתם צריכים את הרול **{role}** כדי להשתמש בזה!" + +#: src/modules/rolemenus/rolemenu.py:784 #, possible-python-brace-format msgctxt "rolemenu|content:reactions" msgid "[Click here]({jump_link}) to jump back." @@ -1261,62 +1310,62 @@ msgctxt "ui:menu_editor|button:bulk_edit|modal|title" msgid "Menu Options" msgstr "אפשריות תפריט" -#: src/modules/rolemenus/ui/menueditor.py:215 +#: src/modules/rolemenus/ui/menueditor.py:218 msgctxt "ui:menu_editor|button:bulk_edit|label" msgid "Bulk Edit" msgstr "עריכה בכמות גדולה" -#: src/modules/rolemenus/ui/menueditor.py:235 +#: src/modules/rolemenus/ui/menueditor.py:238 msgctxt "ui:menu_editor|button:sticky|label" msgid "Toggle Sticky" msgstr "הפעל מצב דביק" -#: src/modules/rolemenus/ui/menueditor.py:259 +#: src/modules/rolemenus/ui/menueditor.py:262 msgctxt "ui:menu_editor|button:refunds|label" msgid "Toggle Refunds" msgstr "אפשר החזרים" -#: src/modules/rolemenus/ui/menueditor.py:289 +#: src/modules/rolemenus/ui/menueditor.py:292 msgctxt "ui:menu_editor|menu:reqroles|placeholder" msgid "Select Required Role" msgstr "בחר רול נחוץ" -#: src/modules/rolemenus/ui/menueditor.py:308 +#: src/modules/rolemenus/ui/menueditor.py:311 msgctxt "ui:menu_editor|button:modify_roles|label" msgid "Modify Roles" msgstr "ערוך רולים" -#: src/modules/rolemenus/ui/menueditor.py:337 +#: src/modules/rolemenus/ui/menueditor.py:340 msgctxt "ui:menu_editor|role_editor|modal|title" msgid "Edit Menu Role" msgstr "ערוך תפריט רולים" -#: src/modules/rolemenus/ui/menueditor.py:411 +#: src/modules/rolemenus/ui/menueditor.py:416 msgctxt "ui:menu_editor|menu:add_roles|error:too_many_reactions" msgid "Too many roles! Reaction role menus cannot exceed `20` roles." msgstr "יותר מידי רולים! לא ניתן לעבור יותר מ20 רולים בתפריט." -#: src/modules/rolemenus/ui/menueditor.py:416 +#: src/modules/rolemenus/ui/menueditor.py:421 msgctxt "ui:menu_editor|menu:add_roles|error:too_many_roles" msgid "Too many roles! Role menus cannot have more than `25` roles." msgstr "יותר מידי רולים! לא ניתן לעבור יותר מ25 רולים בתפריט." -#: src/modules/rolemenus/ui/menueditor.py:455 +#: src/modules/rolemenus/ui/menueditor.py:460 msgctxt "ui:menu_editor|menu:add_roles|placeholder" msgid "Add Roles" msgstr "הוסף רולים" -#: src/modules/rolemenus/ui/menueditor.py:481 +#: src/modules/rolemenus/ui/menueditor.py:486 msgctxt "ui:menu_editor|menu:edit_roles|placeholder" msgid "Edit Roles" msgstr "ערוך רולים" -#: src/modules/rolemenus/ui/menueditor.py:514 +#: src/modules/rolemenus/ui/menueditor.py:524 msgctxt "ui:menu_editor|menu:del_role|placeholder" msgid "Remove Roles" msgstr "הסר רולים" -#: src/modules/rolemenus/ui/menueditor.py:538 +#: src/modules/rolemenus/ui/menueditor.py:548 msgctxt "ui:menu_editor|button:style|error:non-managed" msgid "" "Cannot change the style of a menu attached to a message I did not send! " @@ -1325,182 +1374,182 @@ msgstr "" "לא ניתן לשנות את הסטייל של התפריט המוצמד להודעה שלא אני שלחתי! שלח אותה שוב " "דרכי." -#: src/modules/rolemenus/ui/menueditor.py:551 +#: src/modules/rolemenus/ui/menueditor.py:561 msgctxt "ui:menu_editor|button:style|label" msgid "Menu Style" msgstr "סגנון תפריט" -#: src/modules/rolemenus/ui/menueditor.py:576 +#: src/modules/rolemenus/ui/menueditor.py:586 msgctxt "ui:menu_editor|menu:style|error:too_many_reactions" msgid "" "Too many roles! The Reaction style is limited to `20` roles (Discord " "limitation)." msgstr "יותר מידי רולים! הסגנון הזה מוגבל אל 20 רולים (מגבלה שדיסקורד שמו)" -#: src/modules/rolemenus/ui/menueditor.py:586 +#: src/modules/rolemenus/ui/menueditor.py:596 msgctxt "ui:menu_editor|menu:style|error:incomplete_emojis" msgid "" "Cannot switch to the Reaction Role Style! Every role needs to have a " "distinct emoji first." msgstr "לא ניתן להחליף אל הסגנון הזה! כל רול צריך להכיל אמוג'י ייחודי קודם." -#: src/modules/rolemenus/ui/menueditor.py:602 +#: src/modules/rolemenus/ui/menueditor.py:614 msgctxt "ui:menu_editor|menu:style|placeholder" msgid "Select Menu Style" msgstr "בחר סגנון תפריט" -#: src/modules/rolemenus/ui/menueditor.py:606 +#: src/modules/rolemenus/ui/menueditor.py:618 msgctxt "ui:menu_editor|menu:style|option:reaction|label" msgid "Reaction Roles" msgstr "רולים שמקבלים עם ריאקציות" -#: src/modules/rolemenus/ui/menueditor.py:609 +#: src/modules/rolemenus/ui/menueditor.py:621 msgctxt "ui:menu_editor|menu:style|option:reaction|desc" msgid "Roles are represented compactly as clickable reactions on a message." msgstr "" "רולים שמוצגים בצורה קומפקטית עם ריאקציות שניתן ללחוץ עליהם בהודעה עצמה." -#: src/modules/rolemenus/ui/menueditor.py:615 +#: src/modules/rolemenus/ui/menueditor.py:627 msgctxt "ui:menu_editor|menu:style|option:button|label" msgid "Button Menu" msgstr "תפריט עם כפתורים" -#: src/modules/rolemenus/ui/menueditor.py:618 +#: src/modules/rolemenus/ui/menueditor.py:630 msgctxt "ui:menu_editor|menu:style|option:button|desc" msgid "" "Roles are represented in 5 rows of 5 buttons, each with an emoji and label." msgstr "" "רולים שמוצגים בתור 5 שורות של 5 כפתורים, לכל אחד יש אמוג'י ותגית טקסט." -#: src/modules/rolemenus/ui/menueditor.py:624 +#: src/modules/rolemenus/ui/menueditor.py:636 msgctxt "ui:menu_editor|menu:style|option:dropdown|label" msgid "Dropdown Menu" msgstr "תפריט נפתח" -#: src/modules/rolemenus/ui/menueditor.py:627 +#: src/modules/rolemenus/ui/menueditor.py:639 msgctxt "ui:menu_editor|menu:style|option:dropdown|desc" msgid "Roles are selectable from a dropdown menu below the message." msgstr "רולים ניתנים לבחירה על ידי תפריט נופל מתחת להודעה." -#: src/modules/rolemenus/ui/menueditor.py:697 +#: src/modules/rolemenus/ui/menueditor.py:709 msgctxt "ui:menu_editor|menu:template|placeholder" msgid "Select Message Template" msgstr "בחר תבנית הודעה" -#: src/modules/rolemenus/ui/menueditor.py:707 +#: src/modules/rolemenus/ui/menueditor.py:719 msgctxt "ui:menu_editor|menu:template|option:custom|label" msgid "Custom Message" msgstr "הודעה בעריכה אישית" -#: src/modules/rolemenus/ui/menueditor.py:712 +#: src/modules/rolemenus/ui/menueditor.py:724 msgctxt "ui:menu_editor|menu:template|option:custom|description" msgid "Entirely custom menu message (opens an interactive editor)." msgstr "בנה הודעה מותאמת אישית מ0 (יפתח את ההעורך הודעות שלנו)" -#: src/modules/rolemenus/ui/menueditor.py:729 +#: src/modules/rolemenus/ui/menueditor.py:741 msgctxt "ui:menu_editor|button:delete|confirm|title" msgid "Are you sure you want to delete this menu? This is not reversible!" msgstr "אתם בטוחים שאתם רוצים למחוק את התפריט? לא ניתן לשחזר את הצעד הזה." -#: src/modules/rolemenus/ui/menueditor.py:734 +#: src/modules/rolemenus/ui/menueditor.py:746 msgctxt "ui:menu_editor|button:delete|confirm|button:yes" msgid "Yes, Delete Now" msgstr "כן, מחק עכשיו" -#: src/modules/rolemenus/ui/menueditor.py:739 +#: src/modules/rolemenus/ui/menueditor.py:751 msgctxt "ui:menu_editor|button:delete|confirm|button:no" msgid "No, Go Back" msgstr "לא, חזור אחורה" -#: src/modules/rolemenus/ui/menueditor.py:756 +#: src/modules/rolemenus/ui/menueditor.py:768 msgctxt "ui:menu_editor|button:delete|label" msgid "Delete Menu" msgstr "מחק תפריט" -#: src/modules/rolemenus/ui/menueditor.py:813 +#: src/modules/rolemenus/ui/menueditor.py:825 msgctxt "ui:menu_editor|button:edit_msg|label" msgid "Edit Message" msgstr "ערוך הודעה" -#: src/modules/rolemenus/ui/menueditor.py:844 +#: src/modules/rolemenus/ui/menueditor.py:851 msgctxt "ui:menu_editor|button:preview|label" msgid "Preview" msgstr "תצוגה מקדימה" -#: src/modules/rolemenus/ui/menueditor.py:860 +#: src/modules/rolemenus/ui/menueditor.py:867 msgctxt "ui:menu_editor|button:repost|widget:repost|menu:channel|placeholder" msgid "Select New Channel" msgstr "בחר ערוץ חדש" -#: src/modules/rolemenus/ui/menueditor.py:878 +#: src/modules/rolemenus/ui/menueditor.py:885 msgctxt "ui:menu_editor|button:repost|widget:repost|error:perms|title" msgid "Insufficient Permissions!" msgstr "אין לי או לך מספיק הראשות בשרת כדי לעשות את זה!" -#: src/modules/rolemenus/ui/menueditor.py:882 +#: src/modules/rolemenus/ui/menueditor.py:889 msgctxt "ui:menu_editor|button:repost|eidget:repost|error:perms|desc" msgid "" "I lack the `EMBED_LINKS` or `SEND_MESSAGES` permission in this channel." msgstr "אין לי את ההרשאות `EMBED_LINKS` או `SEND_MESSAGES` בערוץ הזה." -#: src/modules/rolemenus/ui/menueditor.py:895 +#: src/modules/rolemenus/ui/menueditor.py:902 #, possible-python-brace-format msgctxt "ui:menu_editor|button:repost|widget:repost|error:post_failed" msgid "" -"An error ocurred while posting to {channel}. Do I have sufficient " -"permissions?" +"An unknown error ocurred while posting to {channel}!\n" +"**Error:** `{exception}`" msgstr "" -"שגיאה התרחשה כשניסיתי לשלוח הודעה לערוץ {channel}. אתם בטוחים שיש לי הרשאות" -" מספקות?" +"שגיאה לא ידועה התרחשה כשניסיתי לשלוח לערוץ {channel}.\n" +"השגיאה: `{exception}`" -#: src/modules/rolemenus/ui/menueditor.py:907 +#: src/modules/rolemenus/ui/menueditor.py:915 msgctxt "ui:menu_editor|button:repost|widget:repost|success|title" msgid "Role Menu Moved" msgstr "תפריט רולים הוזז" -#: src/modules/rolemenus/ui/menueditor.py:913 +#: src/modules/rolemenus/ui/menueditor.py:921 #, possible-python-brace-format msgctxt "ui:menu_editor|button:repost|widget:repost|success|desc:general" msgid "The role menu `{name}` is now available at {message_link}." msgstr "התפריט רולים `{name}` עכשיו זמין בלינק {message_link}." -#: src/modules/rolemenus/ui/menueditor.py:927 +#: src/modules/rolemenus/ui/menueditor.py:935 msgctxt "ui:menu_editor|button:repost|widget:repost|success|desc:reactions" msgid "Please check the message reactions are correct." msgstr "אנא בדקו אם הריאקציות שקשורות להודעה הזו נכונות." -#: src/modules/rolemenus/ui/menueditor.py:940 +#: src/modules/rolemenus/ui/menueditor.py:948 msgctxt "ui:menu_editor|button:repost|widget:repost|title" msgid "Repost Role Menu" msgstr "פרסם תפריט רולים מחדש" -#: src/modules/rolemenus/ui/menueditor.py:944 +#: src/modules/rolemenus/ui/menueditor.py:952 msgctxt "ui:menu_editor|button:repost|widget:repost|description" msgid "Please select the channel to which you want to resend this menu." msgstr "אנא בחרו את הערוץ שבו תרצו לשלוח את התפריט הזה מחדש." -#: src/modules/rolemenus/ui/menueditor.py:959 +#: src/modules/rolemenus/ui/menueditor.py:967 msgctxt "ui:menu_editor|button:repost|label:repost" msgid "Repost" msgstr "פרסם מחדש" -#: src/modules/rolemenus/ui/menueditor.py:964 +#: src/modules/rolemenus/ui/menueditor.py:972 msgctxt "ui:menu_editor|button:repost|label:post" msgid "Post" msgstr "פרסם" -#: src/modules/rolemenus/ui/menueditor.py:974 +#: src/modules/rolemenus/ui/menueditor.py:982 msgctxt "ui:menu_editor|embed|title" msgid "Role Menu Editor" msgstr "עורך תפריט רולים" -#: src/modules/rolemenus/ui/menueditor.py:983 +#: src/modules/rolemenus/ui/menueditor.py:991 #, possible-python-brace-format msgctxt "ui:menu_editor|embed|description|jump_text:attached" msgid "Members may use this menu from {jump_url}" msgstr "משתמשים יוכלו להשתמש בתפריט הזה ב {jump_url}" -#: src/modules/rolemenus/ui/menueditor.py:988 +#: src/modules/rolemenus/ui/menueditor.py:996 msgctxt "ui:menu_editor|embed|description|jump_text:unattached" msgid "" "This menu is not currently active!\n" @@ -1509,12 +1558,12 @@ msgstr "" "התפריט לא פעיל כרגע!\n" "תהפוך אותו לפעיל על ידי לחיצה על \"פרסם\" למטה." -#: src/modules/rolemenus/ui/menueditor.py:1002 +#: src/modules/rolemenus/ui/menueditor.py:1010 msgctxt "ui:menu_editor|embed|field:tips|name" msgid "Command Tips" msgstr "טיפים לפקודות" -#: src/modules/rolemenus/ui/menueditor.py:1006 +#: src/modules/rolemenus/ui/menueditor.py:1014 #, possible-python-brace-format msgctxt "ui:menu_editor|embed|field:tips|value" msgid "" @@ -1528,12 +1577,12 @@ msgstr "" "{addrole} כדי להוסיף רולים חדשים (מומלץ עבור רולים שיש להם אמוג'י)\n" "{editrole} כדי לערוך את האופציות של הרולים" -#: src/modules/rolemenus/ui/menueditor.py:1046 +#: src/modules/rolemenus/ui/menueditor.py:1054 msgctxt "ui:menu_editor|error:invald_emoji|title" msgid "Invalid emoji encountered." msgstr "נתקלתי באמוג'י לא תקין." -#: src/modules/rolemenus/ui/menueditor.py:1050 +#: src/modules/rolemenus/ui/menueditor.py:1058 #, possible-python-brace-format msgctxt "ui:menu_editor|error:invalid_emoji|desc" msgid "" diff --git a/locales/he_IL/LC_MESSAGES/rooms.po b/locales/he_IL/LC_MESSAGES/rooms.po index 1c407b9d..2b57784e 100644 --- a/locales/he_IL/LC_MESSAGES/rooms.po +++ b/locales/he_IL/LC_MESSAGES/rooms.po @@ -99,7 +99,7 @@ msgstr "צור טיימר לחדר" #, possible-python-brace-format msgctxt "ui:room_status|button:timer|timer_created" msgid "Timer created successfully! Use {edit_cmd} to configure further." -msgstr "" +msgstr "הטיימר נבנה בהצלחה! השתמש ב{edit_cmd} כדי לשנות אותו." #: src/modules/rooms/roomui.py:254 msgctxt "ui:room_status|button:timer|label:edit_timer" diff --git a/locales/he_IL/LC_MESSAGES/schedule.po b/locales/he_IL/LC_MESSAGES/schedule.po index 97892ec6..abec5149 100644 --- a/locales/he_IL/LC_MESSAGES/schedule.po +++ b/locales/he_IL/LC_MESSAGES/schedule.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -22,25 +22,25 @@ msgstr "" "Language: he_IL\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" -#: src/modules/schedule/cog.py:429 +#: src/modules/schedule/cog.py:493 msgctxt "create_booking|error:no_lobby" msgid "" "This server has not set a `session_lobby`, so the scheduled session system " "is disabled!" msgstr "השרת הזה לא קבע לובי למידה, ולכן מערכת הלו\"זים מבוטלת." -#: src/modules/schedule/cog.py:441 +#: src/modules/schedule/cog.py:505 msgctxt "create_booking|error:no_member" msgid "An unknown Discord error occurred. Please try again in a few minutes." msgstr "שגיאה לא ידועה התחוללה. אנא נסה שוב במספר דקות." -#: src/modules/schedule/cog.py:449 +#: src/modules/schedule/cog.py:513 msgctxt "create_booking|error:blacklisted" msgid "" "You have been blacklisted from the scheduled session system in this server." msgstr "נכנסת לרשימה השחורה של מערכת הלו\"זים בשרת הזה." -#: src/modules/schedule/cog.py:460 +#: src/modules/schedule/cog.py:524 #, possible-python-brace-format msgctxt "create_booking|error:insufficient_balance" msgid "" @@ -62,22 +62,42 @@ msgstr[3] "" "קביעת `{count}` סשנים יעלו {coin}**{required}**, אבל יש לך רק " "{coin}**{balance}**." -#: src/modules/schedule/cog.py:474 +#: src/modules/schedule/cog.py:538 msgctxt "create_booking|error:already_booked" msgid "One or more requested timeslots are already booked!" msgstr "סשן אחד או יותר כבר נקבע קודם!" -#: src/modules/schedule/cog.py:677 +#: src/modules/schedule/cog.py:741 msgctxt "cmd:schedule" msgid "schedule" msgstr "הירשם בלו\"ז" -#: src/modules/schedule/cog.py:680 +#: src/modules/schedule/cog.py:744 msgctxt "cmd:schedule|desc" msgid "View and manage your scheduled session." msgstr "צפה או נהל את הסשנים שקבעת בלו\"ז." -#: src/modules/schedule/cog.py:708 +#: src/modules/schedule/cog.py:749 +msgctxt "cmd:schedule|param:cancel" +msgid "cancel" +msgstr "" + +#: src/modules/schedule/cog.py:752 +msgctxt "cmd:schedule|param:book" +msgid "book" +msgstr "" + +#: src/modules/schedule/cog.py:758 +msgctxt "cmd:schedule|param:cancel|desc" +msgid "Select a booked timeslot to cancel." +msgstr "" + +#: src/modules/schedule/cog.py:762 +msgctxt "cmd:schedule|param:book|desc" +msgid "Select a timeslot to schedule. (Times shown in your set timezone.)" +msgstr "" + +#: src/modules/schedule/cog.py:792 #, possible-python-brace-format msgctxt "cmd:schedule|cancel_booking|error:parse_slot" msgid "" @@ -85,25 +105,25 @@ msgid "" "from the autocomplete options." msgstr "לוח הזמנים `{provided}` לא נקבע. אנא בחר סשן לביטול מהאופציות." -#: src/modules/schedule/cog.py:716 +#: src/modules/schedule/cog.py:800 #, possible-python-brace-format msgctxt "cmd:schedule|cancel_booking|error:not_booked" msgid "Could not cancel {time} booking because it is not booked!" msgstr "לא הצלחתי לבטל את {time} כי לעולם לא קבעת את הסשן הזה." -#: src/modules/schedule/cog.py:725 +#: src/modules/schedule/cog.py:809 #, possible-python-brace-format msgctxt "cmd:schedule|cancel_booking|error:too_soon" msgid "Cannot cancel {time} booking because it is running or starting soon!" msgstr "לא הצלחתי לבטל את {time} כי הוא כבר התחיל או מתחיל ממש בקרוב!" -#: src/modules/schedule/cog.py:738 +#: src/modules/schedule/cog.py:822 #, possible-python-brace-format msgctxt "cmd:schedule|cancel_booking|success" msgid "Successfully cancelled your booking at {time}." msgstr "ביטלתי בהצלחה את הסשן שלך ב {time}." -#: src/modules/schedule/cog.py:751 +#: src/modules/schedule/cog.py:835 #, possible-python-brace-format msgctxt "cmd:schedule|create_booking|error:parse_slot" msgid "" @@ -111,45 +131,100 @@ msgid "" "from the autocomplete options." msgstr "לוח הזמנים `{provided}` לא נקבע. אנא בחר סשן לביטול מהאופציות." -#: src/modules/schedule/cog.py:759 +#: src/modules/schedule/cog.py:843 #, possible-python-brace-format msgctxt "cmd:schedule|create_booking|error:already_booked" msgid "You have already booked a scheduled session for {time}." msgstr "כבר קבעת בלו\"ז ב {time}." -#: src/modules/schedule/cog.py:768 +#: src/modules/schedule/cog.py:852 #, possible-python-brace-format msgctxt "cmd:schedule|create_booking|error:too_soon" msgid "Cannot book session at {time} because it is running or starting soon!" msgstr "לא הצלחתי לקבוע את {time} כי הוא כבר התחיל או מתחיל ממש בקרוב!" -#: src/modules/schedule/cog.py:780 +#: src/modules/schedule/cog.py:864 #, possible-python-brace-format msgctxt "cmd:schedule|create_booking|success" msgid "You have successfully scheduled a session at {time}." msgstr "קבעת בלו\"ז ב {time} בהצלחה." -#: src/modules/schedule/cog.py:847 +#: src/modules/schedule/cog.py:909 +msgctxt "cmd:schedule|acmpl:book|error:not_in_guild" +msgid "You need to be in a server to book sessions!" +msgstr "" + +#: src/modules/schedule/cog.py:922 +msgctxt "cmd:schedule|acmpl:book|error:blacklisted" +msgid "Cannot Book -- Blacklisted" +msgstr "" + +#: src/modules/schedule/cog.py:943 +#, possible-python-brace-format +msgctxt "cmd:schedule|acmpl:book|timezone_info" +msgid "" +"Using timezone '{timezone}' where it is '{now}'. Change with '/my timezone'" +msgstr "" + +#: src/modules/schedule/cog.py:956 src/modules/schedule/cog.py:1014 +#, possible-python-brace-format +msgctxt "cmd:schedule|acmpl:book|format" +msgid "{start} - {end} ({until})" +msgstr "" + +#: src/modules/schedule/cog.py:980 +#, possible-python-brace-format +msgctxt "cmd:schedule|acmpl:book|no_matching" +msgid "No bookable sessions matching '{partial}'" +msgstr "" + +#: src/modules/schedule/cog.py:1003 +msgctxt "cmd:schedule|acmpl:cancel|error:empty_schedule" +msgid "You do not have any upcoming sessions to cancel!" +msgstr "" + +#: src/modules/schedule/cog.py:1036 +#, possible-python-brace-format +msgctxt "cmd:schedule|acmpl:cancel|error:no_matching" +msgid "No cancellable sessions matching '{partial}'" +msgstr "" + +#: src/modules/schedule/cog.py:1081 msgctxt "cmd:configure_schedule" msgid "schedule" msgstr "הירשם בלו\"ז" -#: src/modules/schedule/cog.py:850 +#: src/modules/schedule/cog.py:1084 msgctxt "cmd:configure_schedule|desc" msgid "Configure Scheduled Session system" msgstr "תפריט הגדרות מערכת הלו\"זים" -#: src/modules/schedule/settings.py:36 +#: src/modules/schedule/lib.py:86 src/modules/schedule/ui/scheduleui.py:333 +#, possible-python-brace-format +msgctxt "ui:schedule|format_until|positive" +msgid "in <1 hour" +msgid_plural "in {number} hours" +msgstr[0] "בעוד שעה" +msgstr[1] "העוד שעתיים" +msgstr[2] "בעוד {number} שעות" +msgstr[3] "בעוד {number} שעות" + +#: src/modules/schedule/lib.py:93 src/modules/schedule/ui/scheduleui.py:340 +msgctxt "ui:schedule|format_until|now" +msgid "right now!" +msgstr "כרגע!" + +#: src/modules/schedule/settings.py:68 msgctxt "guildset:session_lobby" msgid "session_lobby" msgstr "לובי_סשנים" -#: src/modules/schedule/settings.py:39 +#: src/modules/schedule/settings.py:71 msgctxt "guildset:session_lobby|desc" msgid "Channel to post scheduled session announcement and status to." msgstr "הערוץ שבו אשלח התראות והכרזות של מערכת הלו\"זים" -#: src/modules/schedule/settings.py:43 +#: src/modules/schedule/settings.py:75 msgctxt "guildset:session_lobby|long_desc" msgid "" "Channel in which to announce scheduled sessions and post their status. I must have the `MANAGE_WEBHOOKS` permission in this channel.\n" @@ -158,46 +233,46 @@ msgstr "" "הערוץ שבו אכריז על מערכת הלוזים והססטוס שלהם. אני צריך את ההרשאה " "`MANAGE_WEBHOOKS` בערוץ כדי לעשות את זה. " -#: src/modules/schedule/settings.py:49 +#: src/modules/schedule/settings.py:81 msgctxt "guildset:session_lobby|accepts" msgid "Name or id of the session lobby channel." msgstr "שם או מספר מזהה של חדר הלובי של הסשנים." -#: src/modules/schedule/settings.py:63 +#: src/modules/schedule/settings.py:95 #, possible-python-brace-format msgctxt "guildset:session_lobby|set_response|set" msgid "Scheduled sessions will now be announced in {channel}" msgstr "עדכונים של מערכת הסשנים יהיו מוכרזים ב {channel}" -#: src/modules/schedule/settings.py:68 +#: src/modules/schedule/settings.py:100 msgctxt "guildset:session_lobby|set_response|unset" msgid "" "The schedule session lobby has been unset. Shutting down scheduled session " "system." msgstr "הלובי של מערכת הסשנים הוסר, מכבה את מערכת הסשנים." -#: src/modules/schedule/settings.py:78 +#: src/modules/schedule/settings.py:110 msgctxt "guildset:session_lobby|formatted|unset" msgid "`Not Set` (The scheduled session system is disabled.)" msgstr "`לא נקבע` (מערכת הלו\"זים מבוטלת)" -#: src/modules/schedule/settings.py:83 +#: src/modules/schedule/settings.py:115 #, possible-python-brace-format msgctxt "guildset:session_lobby|formatted|set" msgid "<#{channelid}>" msgstr "<#{channelid}>" -#: src/modules/schedule/settings.py:92 +#: src/modules/schedule/settings.py:124 msgctxt "guildset:session_room" msgid "session_room" msgstr "חדר_סשנים" -#: src/modules/schedule/settings.py:95 +#: src/modules/schedule/settings.py:127 msgctxt "guildset:session_room|desc" msgid "Special voice channel open to scheduled session members." msgstr "ערוץ קול מיוחד שאפשר רק לאנשים שקבעו סשן." -#: src/modules/schedule/settings.py:99 +#: src/modules/schedule/settings.py:131 msgctxt "guildset:session_room|long_desc" msgid "" "If set, this voice channel serves as a dedicated room for scheduled session " @@ -216,33 +291,33 @@ msgstr "" "`VIEW_CHANNEL` כדי לעשות את זה, והרול שלי צריך להיות הכי גבוה בהיררכיה של " "הרולים." -#: src/modules/schedule/settings.py:109 +#: src/modules/schedule/settings.py:141 msgctxt "guildset:session_room|accepts" msgid "Name or id of the session room voice channel." msgstr "שם או מספר מזהה של חדר הקול של הסשנים." -#: src/modules/schedule/settings.py:123 +#: src/modules/schedule/settings.py:155 #, possible-python-brace-format msgctxt "guildset:session_room|set_response|set" msgid "Schedule session members will now be given access to {channel}" msgstr "משתמשים במערכת הסשנים יקבלו הרשאה אל {channel}" -#: src/modules/schedule/settings.py:128 +#: src/modules/schedule/settings.py:160 msgctxt "guildset:session_room|set_response|unset" msgid "The dedicated schedule session room has been removed." msgstr "החדר קולי של מערכת הסשנים הוסר." -#: src/modules/schedule/settings.py:135 +#: src/modules/schedule/settings.py:167 msgctxt "guildset:session_channels" msgid "session_channels" msgstr "חדרי_סשנים" -#: src/modules/schedule/settings.py:138 +#: src/modules/schedule/settings.py:170 msgctxt "guildset:session_channels|desc" msgid "Voice channels in which to track activity for scheduled sessions." msgstr "חדרי קול שבהם אעקוב אחרי פעילות במערכת הסשנים." -#: src/modules/schedule/settings.py:142 +#: src/modules/schedule/settings.py:174 msgctxt "guildset:session_channels|long_desc" msgid "" "Only activity in these channels (and in `session_room` if set) will count " @@ -253,12 +328,12 @@ msgstr "" "רק פעילות בערוצים האלו תחשב בתור נוכחות במערכת הלו\"זים. אם בחרתם בקטגוריה, " "כל הערוצים מתחת לקטגוריה הזו יבחרו." -#: src/modules/schedule/settings.py:149 +#: src/modules/schedule/settings.py:181 msgctxt "guildset:session_channels|accepts" msgid "Comma separated list of session channel names or ids." msgstr "רשימה מופרדת עם פסיקים של הערוצים המוגדרים כערוצי סשנים." -#: src/modules/schedule/settings.py:166 +#: src/modules/schedule/settings.py:198 #, possible-python-brace-format msgctxt "guildset:session_channels|set_response|set" msgid "" @@ -266,64 +341,64 @@ msgid "" "attendance: {channels}" msgstr "פעילות בסשנים הבאים עכשיו יחשבו כנוכחות במערכת הסשנים: {channels}" -#: src/modules/schedule/settings.py:171 +#: src/modules/schedule/settings.py:203 msgctxt "guildset:session_channels|set_response|unset" msgid "" "Activity in all (tracked) voice channels will now count towards session " "attendance." msgstr "פעילו בכל ערוצי הקול יחשבו בתור נוכחות במערכת הסשנים." -#: src/modules/schedule/settings.py:181 +#: src/modules/schedule/settings.py:213 msgctxt "guildset:session_channels|formatted|unset" msgid "All Channels (excluding `untracked_channels`)" msgstr "כל הערוצים (ללא הערוצים שלא נעקבים)" -#: src/modules/schedule/settings.py:211 +#: src/modules/schedule/settings.py:243 msgctxt "guildset:schedule_cost" msgid "schedule_cost" msgstr "מחיר_סשן" -#: src/modules/schedule/settings.py:214 +#: src/modules/schedule/settings.py:246 msgctxt "guildset:schedule_cost|desc" msgid "Booking cost for each scheduled session." msgstr "מחיר לקביעת כל סשן בלו\"ז." -#: src/modules/schedule/settings.py:218 +#: src/modules/schedule/settings.py:250 msgctxt "guildset:schedule_cost|long_desc" msgid "" "Members will be charged this many LionCoins for each scheduled session they " "book." msgstr "משתמשים יצטרכו לשלם את כמות המטבעות הזו כדי לקבוע סשן בלו\"ז." -#: src/modules/schedule/settings.py:222 +#: src/modules/schedule/settings.py:254 msgctxt "guildset:schedule_cost|accepts" msgid "Price of each session booking (non-negative integer)." msgstr "מחיר של כל סשן (מספר שלם חיובי)." -#: src/modules/schedule/settings.py:234 +#: src/modules/schedule/settings.py:266 #, possible-python-brace-format msgctxt "guildset:schedule_cost|set_response" msgid "" "Schedule session bookings will now cost {coin} **{amount}** per timeslot." msgstr "קביעת סשן יעלה עכשיו {coin}**{amount}** כל פגישה." -#: src/modules/schedule/settings.py:247 +#: src/modules/schedule/settings.py:279 #, possible-python-brace-format msgctxt "guildset:schedule_cost|formatted" msgid "{coin}**{amount}** per booking." msgstr "{coin}**{amount}** עבור כל סשן." -#: src/modules/schedule/settings.py:256 +#: src/modules/schedule/settings.py:288 msgctxt "guildset:attendance_reward" msgid "attendance_reward" msgstr "פרס_נוכחות" -#: src/modules/schedule/settings.py:259 +#: src/modules/schedule/settings.py:291 msgctxt "guildset:attendance_reward|desc" msgid "Reward for attending a booked scheduled session." msgstr "פרס עבור נוכחות במערכת הלו\"זים." -#: src/modules/schedule/settings.py:263 +#: src/modules/schedule/settings.py:295 msgctxt "guildset:attendance_reward|long_desc" msgid "" "When a member successfully attends a scheduled session they booked, they " @@ -331,12 +406,12 @@ msgid "" "`schedule_cost` setting." msgstr "כאשר מישהו נכח בהצלחה במערכת הלו\"זים הוא יקבל פרס של מטבעות." -#: src/modules/schedule/settings.py:269 +#: src/modules/schedule/settings.py:301 msgctxt "guildset:attendance_reward|accepts" msgid "Number of coins to reward session attendance." msgstr "מספר מטבעות שמשתמש יקבל בעקבות נוכחות מוצלחת בחדר הלו\"זים." -#: src/modules/schedule/settings.py:281 +#: src/modules/schedule/settings.py:313 #, possible-python-brace-format msgctxt "guildset:attendance_reward|set_response" msgid "" @@ -344,23 +419,23 @@ msgid "" "session." msgstr "משתמשים יקבלו {coin}**{amount}** כשהם משתתפים בסשן." -#: src/modules/schedule/settings.py:291 +#: src/modules/schedule/settings.py:323 #, possible-python-brace-format msgctxt "guildset:attendance_reward|formatted" msgid "{coin}**{amount}** upon attendance." msgstr "{coin}**{amount}** עבור נוכחות מוצלחת." -#: src/modules/schedule/settings.py:300 +#: src/modules/schedule/settings.py:332 msgctxt "guildset:attendance_bonus" msgid "group_attendance_bonus" msgstr "פרס_נוכחות_קבוצתית" -#: src/modules/schedule/settings.py:303 +#: src/modules/schedule/settings.py:335 msgctxt "guildset:attendance_bonus|desc" msgid "Bonus reward given when all members attend a scheduled session." msgstr "בונוס ינתן לכל המשתמשים כאשר כל מי שקבע את הסשן נכח בהצלחה." -#: src/modules/schedule/settings.py:307 +#: src/modules/schedule/settings.py:339 msgctxt "guildset:attendance_bonus|long_desc" msgid "" "When all members who have booked a session successfully attend the session, " @@ -369,12 +444,12 @@ msgstr "" "כאשר כל המשתמשים שקבעו את הסשן הצטרפו לסשן בהצלחה, אני אתן בונוס לכולם בנוסף" " לפרס שמגיע להם על נוכחות." -#: src/modules/schedule/settings.py:312 +#: src/modules/schedule/settings.py:344 msgctxt "guildset:attendance_bonus|accepts" msgid "Bonus coins rewarded when everyone attends a session." msgstr "בונוס שכולם יקבלו שכולם משתתפים בסשן." -#: src/modules/schedule/settings.py:324 +#: src/modules/schedule/settings.py:356 #, possible-python-brace-format msgctxt "guildset:attendance_bonus|set_response" msgid "" @@ -382,23 +457,23 @@ msgid "" "everyone attends." msgstr "משתתפים יקבלו בונוס של {coin}**{amount}**  אם כל מי שקבע השתתף בסשן." -#: src/modules/schedule/settings.py:334 +#: src/modules/schedule/settings.py:366 #, possible-python-brace-format msgctxt "guildset:attendance_bonus|formatted" msgid "{coin}**{amount}** bonus when all booked members attend." msgstr "{coin}**{amount}** בונוס כאשר כל מי שקבע את הסשן הצטרף." -#: src/modules/schedule/settings.py:343 +#: src/modules/schedule/settings.py:375 msgctxt "guildset:min_attendance" msgid "min_attendance" msgstr "נוכחות_מינימלית" -#: src/modules/schedule/settings.py:346 +#: src/modules/schedule/settings.py:378 msgctxt "guildset:min_attendance|desc" msgid "Minimum attendance before reward eligability." msgstr "זמן מינימלי לפני שאחשיב את הנוכחות כמוצלחת." -#: src/modules/schedule/settings.py:350 +#: src/modules/schedule/settings.py:382 msgctxt "guildset:min_attendance|long_desc" msgid "" "Scheduled session members will need to attend the session for at least this " @@ -408,12 +483,12 @@ msgstr "" "משתמשים יצטרכו להישאר בחדר לתקופת זמן הזו לפני שאחשיב את הנוכחות שלהם " "שמוצלחת. " -#: src/modules/schedule/settings.py:355 +#: src/modules/schedule/settings.py:387 msgctxt "guildset:min_attendance|accepts" msgid "Number of minutes (1-60) before attendance is counted." msgstr "מספר הדקות (1-60) לפני שאחשיב נוכחות בחדר כמוצלחת." -#: src/modules/schedule/settings.py:369 +#: src/modules/schedule/settings.py:401 #, possible-python-brace-format msgctxt "guildset:min_attendance|set_response" msgid "" @@ -421,30 +496,30 @@ msgid "" "least **`{amount}`** minutes." msgstr "הסשן יחושב כשמוצלח אחרי **`{amount}`** דקות." -#: src/modules/schedule/settings.py:379 +#: src/modules/schedule/settings.py:411 #, possible-python-brace-format msgctxt "guildset:min_attendance|formatted" msgid "**`{amount}`** minutes" msgstr "**`{amount}`** דקות" -#: src/modules/schedule/settings.py:400 +#: src/modules/schedule/settings.py:432 msgctxt "guildset:min_attendance|parse|error" msgid "" "Minimum attendance must be an integer number of minutes between `1` and " "`60`." msgstr "מספר הדקות חייב להיות מספר שלם בין 1 ל60" -#: src/modules/schedule/settings.py:410 +#: src/modules/schedule/settings.py:443 msgctxt "guildset:schedule_blacklist_role" msgid "schedule_blacklist_role" msgstr "סשנים_רשימה_שחורה" -#: src/modules/schedule/settings.py:413 +#: src/modules/schedule/settings.py:446 msgctxt "guildset:schedule_blacklist_role|desc" msgid "Role which disables scheduled session booking." msgstr "רולים שחוסמים מפני קביעה לחדר לוז\"ים" -#: src/modules/schedule/settings.py:417 +#: src/modules/schedule/settings.py:450 msgctxt "guildset:schedule_blacklist_role|long_desc" msgid "" "Members with this role will not be allowed to book scheduled sessions in " @@ -458,44 +533,44 @@ msgstr "" "אנשים שמעצבנים אנשים אחרים על ידי קביעה של סשנים והברזה חוזרת ונשנת. הם לא " "יוכלו להשתמש בפונקציה הזו של הבוט בשרת הזה." -#: src/modules/schedule/settings.py:425 +#: src/modules/schedule/settings.py:458 msgctxt "guildset:schedule_blacklist_role|accepts" msgid "Blacklist role name or id." msgstr "רול או מספר זהות של רשימה שחורה." -#: src/modules/schedule/settings.py:438 +#: src/modules/schedule/settings.py:471 #, possible-python-brace-format msgctxt "guildset:schedule_blacklist_role|set_response|set" msgid "Members with {role} will be unable to book scheduled sessions." msgstr "משתמשים עם הרול הזה {role} לא יוכלו לקבוע פגישות לוז\"ים יותר." -#: src/modules/schedule/settings.py:443 +#: src/modules/schedule/settings.py:476 msgctxt "guildset:schedule_blacklist_role|set_response|unset" msgid "The schedule blacklist role has been unset." msgstr "הרשימה השחורה של מערכת הסשנים נמחקה." -#: src/modules/schedule/settings.py:453 +#: src/modules/schedule/settings.py:486 #, possible-python-brace-format msgctxt "guildset:schedule_blacklist_role|formatted|set" msgid "{role} members will not be able to book scheduled sessions." msgstr "{role} לא יוכלו להשתמש במערכת הלו\"זים." -#: src/modules/schedule/settings.py:458 +#: src/modules/schedule/settings.py:491 msgctxt "guildset:schedule_blacklist_role|formatted|unset" msgid "Not Set" msgstr "לא נקבע." -#: src/modules/schedule/settings.py:467 +#: src/modules/schedule/settings.py:500 msgctxt "guildset:schedule_blacklist_after" msgid "schedule_blacklist_after" msgstr "סשן_רשימהשחורה_לאחרכמהזמן" -#: src/modules/schedule/settings.py:470 +#: src/modules/schedule/settings.py:503 msgctxt "guildset:schedule_blacklist_after|desc" msgid "Number of missed sessions within 24h before blacklisting." msgstr "מספר הסשנים שהוברזו ב24 לפני שאכניס אותם לרשימה השחורה." -#: src/modules/schedule/settings.py:474 +#: src/modules/schedule/settings.py:507 msgctxt "guildset:schedule_blacklist_after|long_desc" msgid "" "Members who miss more than this number of booked sessions in a single 24 " @@ -507,13 +582,13 @@ msgstr "" " ולא יוכלו להצטרף לחדר סשנים. סימו לב שחייבות להיות לי הרשאות נכונות כדי " "שאצליח לתת את הרול הזה לאנשים." -#: src/modules/schedule/settings.py:481 +#: src/modules/schedule/settings.py:514 msgctxt "guildset:schedule_blacklist_after|accepts" msgid "A number of missed sessions (1-24) before blacklisting." msgstr "" "מספר הסשנים שהוברזו (בין 1 ל24) האחרונות לפני שאכניס אותם לרשימה השחורה." -#: src/modules/schedule/settings.py:496 +#: src/modules/schedule/settings.py:529 #, possible-python-brace-format msgctxt "guildset:schedule_blacklist_after|set_response|set" msgid "" @@ -523,14 +598,14 @@ msgstr "" "משתמשים יכנסו לרשימה השחורה לאחר **`{amount}`** סשנים שהם הבריזו מהם ב24 " "שעות." -#: src/modules/schedule/settings.py:501 +#: src/modules/schedule/settings.py:534 msgctxt "guildset:schedule_blacklist_after|set_response|unset" msgid "" "Members will not be automatically blacklisted from booking scheduled " "sessions." msgstr "משתמשים לא יכנסו לרשימה השחורה אוטומטית." -#: src/modules/schedule/settings.py:511 +#: src/modules/schedule/settings.py:544 #, possible-python-brace-format msgctxt "guildset:schedule_blacklist_after|formatted|set" msgid "Blacklist after **`{amount}`** missed sessions within `24h`." @@ -538,12 +613,12 @@ msgstr "" "משתמשים יכנסו לרשימה השחורה לאחר **`{amount}`** סשנים שהם הבריזו מהם ב24 " "שעות." -#: src/modules/schedule/settings.py:516 +#: src/modules/schedule/settings.py:549 msgctxt "guildset:schedule_blacklist_after|formatted|unset" msgid "Do not automatically blacklist." msgstr "אל תכניס לרשימה השחורה אוטומטית." -#: src/modules/schedule/settings.py:528 +#: src/modules/schedule/settings.py:561 msgctxt "guildset:schedule_blacklist_role|parse|error" msgid "Blacklist threshold must be a number between `1` and `24`." msgstr "המספר של הרשימה השחורה חייב להיות מספר בין 1 ל24." @@ -710,21 +785,6 @@ msgctxt "ui:schedule|menu:slots|option|day:tomorrow" msgid "Tomorrow" msgstr "מחר" -#: src/modules/schedule/ui/scheduleui.py:333 -#, possible-python-brace-format -msgctxt "ui:schedule|format_until|positive" -msgid "in <1 hour" -msgid_plural "in {number} hours" -msgstr[0] "בעוד שעה" -msgstr[1] "העוד שעתיים" -msgstr[2] "בעוד {number} שעות" -msgstr[3] "בעוד {number} שעות" - -#: src/modules/schedule/ui/scheduleui.py:340 -msgctxt "ui:schedule|format_until|now" -msgid "right now!" -msgstr "כרגע!" - #: src/modules/schedule/ui/scheduleui.py:362 msgctxt "ui:schedule|menu:cancel|error:current_slot" msgid "" @@ -864,47 +924,147 @@ msgctxt "ui:sessionui|button:schedule|label" msgid "Open Schedule" msgstr "פתח יומן" -#: src/modules/schedule/ui/sessionui.py:87 +#: src/modules/schedule/ui/sessionui.py:64 +msgctxt "ui:sessionui|button:help|label" +msgid "How to Attend" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:92 msgctxt "ui:session|button:book|error:starting_soon" msgid "Too late! This session has started or is starting shortly." msgstr "מאוחר מידי! הסשן כבר התחיל או מתחיל מידי." -#: src/modules/schedule/ui/sessionui.py:94 +#: src/modules/schedule/ui/sessionui.py:99 msgctxt "ui:session|button:book|error:already_booked" msgid "You are already a member of this session!" msgstr "אתה כבר רשום לסשן הזה!" -#: src/modules/schedule/ui/sessionui.py:101 +#: src/modules/schedule/ui/sessionui.py:106 msgctxt "ui:session|button:book|success" msgid "Successfully booked this session." msgstr "קבעתי את הסשן בהצלחה!" -#: src/modules/schedule/ui/sessionui.py:115 +#: src/modules/schedule/ui/sessionui.py:120 msgctxt "ui:session|button:book|error|title" msgid "Could not book session" msgstr "לא ניתן לקבוע סשן." -#: src/modules/schedule/ui/sessionui.py:133 +#: src/modules/schedule/ui/sessionui.py:138 msgctxt "ui:session|button:cancel|error:starting_soon" msgid "Too late! This session has started or is starting shortly." msgstr "מאוחר מידי! הסשן כבר התחיל או מתחיל מידי." -#: src/modules/schedule/ui/sessionui.py:140 +#: src/modules/schedule/ui/sessionui.py:145 msgctxt "ui:session|button:cancel|error:not_booked" msgid "You are not a member of this session!" msgstr "אתה לא חבר בסשן הזה!" -#: src/modules/schedule/ui/sessionui.py:150 +#: src/modules/schedule/ui/sessionui.py:155 msgctxt "ui:session|button:cancel|success" msgid "Successfully cancelled this session." msgstr "ביטלתי את הסשן בהצלחה!" -#: src/modules/schedule/ui/sessionui.py:164 +#: src/modules/schedule/ui/sessionui.py:169 msgctxt "ui:session|button:cancel|error|title" msgid "Could not cancel session" msgstr "לא הצלחתי לבטל את הסשן" -#: src/modules/schedule/core/session.py:196 +#: src/modules/schedule/ui/sessionui.py:202 +msgctxt "ui:session|button:help|embed:unbooked|title" +msgid "You have not booked this session!" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:206 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:unbooked|description" +msgid "" +"You need to book this scheduled session before you can attend it! Press the " +"**{book_label}** button to book the session." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:215 +msgctxt "ui:session|button:help|embed:help|title" +msgid "How to attend your scheduled session" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:224 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|minimum_attendance" +msgid "at least one minute" +msgid_plural "at least `{duration}` minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: src/modules/schedule/ui/sessionui.py:237 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|room_line:category" +msgid "" +"The exclusive scheduled session category **{category}** will also be open to" +" you during your scheduled session." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:243 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|room_line:voice" +msgid "" +"The exclusive scheduled session room {room} will also be open to you during " +"your scheduled session." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:262 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|attend_line:only_room_category" +msgid "" +"To attend your scheduled session, join a voice channel in **{room}** for " +"**{minimum}** between {start} and {end}." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:272 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|attend_line:only_room_channel" +msgid "" +"To attend your scheduled session, join {room} for **{minimum}** between " +"{start} and {end}." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:282 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|attend_line:with_channels" +msgid "" +"To attend your scheduled session, join a valid session voice channel for " +"**{minimum}** between {start} and {end}." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:292 +msgctxt "ui:session|button:help|embed:help|field:channels|name" +msgid "Valid session channels" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:300 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|attend_line:all_channels" +msgid "" +"To attend your scheduled session, join any tracked voice channel for " +"**{minimum}** between {start} and {end}." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:308 +msgctxt "ui:session|button:help|embed:help|field:rewards|name" +msgid "Rewards" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:312 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|field:rewards|value" +msgid "" +"Everyone who attends the session will be rewarded with {coin}**{reward}**.\n" +"If *everyone* successfully attends, you will also be awarded a bonus of {coin}**{bonus}**.\n" +"Anyone who does *not* attend their booked session will have the rest of their schedule cancelled **without refund**, so beware!" +msgstr "" + +#: src/modules/schedule/core/session.py:197 msgctxt "session|error:lobby_webhook_perms" msgid "" "Insufficient permissions to create a webhook in this channel. I require the " @@ -913,7 +1073,7 @@ msgstr "" "אין לי מספיק הרשות לשלוח התראות בערוץ הזה, אני צריך את ההרשאה " "`MANAGE_WEBHOOKS` " -#: src/modules/schedule/core/session.py:274 +#: src/modules/schedule/core/session.py:281 #, possible-python-brace-format msgctxt "session|prepare|error:room_permissions" msgid "" @@ -924,7 +1084,17 @@ msgstr "" "לא הצלחתי להכין את החדר {room} לסשן הבא! אני צריך את ההראשות " "`MANAGE_CHANNEL`, `MANAGE_ROLES`, `CONNECT` וגם `VIEW_CHANNEL`" -#: src/modules/schedule/core/session.py:317 +#: src/modules/schedule/core/session.py:325 +msgctxt "session|open|update_perms|audit_reason" +msgid "Opening configured scheduled session room." +msgstr "" + +#: src/modules/schedule/core/session.py:347 +msgctxt "session|open|clean_room|audit_reason" +msgid "Removing extra member from scheduled session room." +msgstr "" + +#: src/modules/schedule/core/session.py:354 #, possible-python-brace-format msgctxt "session|open|error:room_permissions" msgid "" @@ -935,13 +1105,47 @@ msgstr "" "לא הצלחתי להכין את החדר {room} לסשן הבא! אני צריך את ההראשות " "`MANAGE_CHANNEL`, `MANAGE_ROLES`, `CONNECT` וגם `VIEW_CHANNEL`" -#: src/modules/schedule/core/session.py:358 +#: src/modules/schedule/core/session.py:411 +#, possible-python-brace-format +msgctxt "session|notify|dm|join_line:room_category" +msgid "" +"Please attend your session by joining a voice channel under **{room}**!" +msgstr "" + +#: src/modules/schedule/core/session.py:416 +#, possible-python-brace-format +msgctxt "session|notify|dm|join_line:room_voice" +msgid "Please attend your session by joining {room}" +msgstr "" + +#: src/modules/schedule/core/session.py:421 +msgctxt "session|notify|dm|join_line:all_channels" +msgid "Please attend your session by joining a tracked voice channel!" +msgstr "" + +#: src/modules/schedule/core/session.py:443 +msgctxt "session|notify|dm|join_line:channels" +msgid "Please attend your session by joining one of the following:" +msgstr "" + +#: src/modules/schedule/core/session.py:453 +msgctxt "session|notify|dm|title" +msgid "Your Scheduled Session has started!" +msgstr "" + +#: src/modules/schedule/core/session.py:457 +#, possible-python-brace-format +msgctxt "session|notify|dm|description" +msgid "Your scheduled session in {dest} has now begun!" +msgstr "" + +#: src/modules/schedule/core/session.py:482 #, possible-python-brace-format msgctxt "session|status|title" msgid "Session {start} - {end}" msgstr "סשן {start} - {end}" -#: src/modules/schedule/core/session.py:369 +#: src/modules/schedule/core/session.py:493 msgctxt "session|status|desc:cancelled" msgid "" "I cancelled this scheduled session because I was unavailable. All members " @@ -950,44 +1154,44 @@ msgstr "" "ביטלתי את הסשן הזה מאחר ולא הייתי זמין, כל המשתמשים שקבעו בזמן הזה קיבלו " "החזר כספי." -#: src/modules/schedule/core/session.py:376 +#: src/modules/schedule/core/session.py:500 msgctxt "session|status|desc:no_members" msgid "*No members scheduled this session.*" msgstr "*שום משתמש לא קבע לסשן הזה*" -#: src/modules/schedule/core/session.py:382 +#: src/modules/schedule/core/session.py:506 #, possible-python-brace-format msgctxt "session|status:preparing|desc:has_members" msgid "Starting {start}" msgstr "מתחיל {start}" -#: src/modules/schedule/core/session.py:385 +#: src/modules/schedule/core/session.py:509 msgctxt "session|status:preparing|field:members" msgid "Members" msgstr "משתמשים" -#: src/modules/schedule/core/session.py:392 +#: src/modules/schedule/core/session.py:516 #, possible-python-brace-format msgctxt "session|status:running|desc:has_members" msgid "Finishing {start}" msgstr "מסיים {start}" -#: src/modules/schedule/core/session.py:426 +#: src/modules/schedule/core/session.py:550 msgctxt "session|status:running|field:waiting" msgid "Waiting For" msgstr "מחכה ל:" -#: src/modules/schedule/core/session.py:432 +#: src/modules/schedule/core/session.py:556 msgctxt "session|status:running|field:attending" msgid "Attending" msgstr "נוכח" -#: src/modules/schedule/core/session.py:438 +#: src/modules/schedule/core/session.py:562 msgctxt "session|status:running|field:attended" msgid "Attended" msgstr "נוכח" -#: src/modules/schedule/core/session.py:463 +#: src/modules/schedule/core/session.py:587 #, possible-python-brace-format msgctxt "session|status:finished|desc:everyone_att" msgid "" @@ -995,7 +1199,7 @@ msgid "" "**{reward} + {bonus}**!" msgstr "כולם נכחו בסשן הזה! כל המשתמשים קיבלו {coin} **{reward} + {bonus}**!" -#: src/modules/schedule/core/session.py:474 +#: src/modules/schedule/core/session.py:598 #, possible-python-brace-format msgctxt "session|status:finished|desc:some_att" msgid "" @@ -1005,7 +1209,7 @@ msgstr "" "כל מי שנכח קיבל {coin} **{reward}**! חלק מהמשתשמים לא נכחו ולכן לא יכלתי לתת לכולם בונוס של {coin} **{bonus}**.\n" "אנשים שלא נוכחים מונעים מחבריהם לקבל בונוס! מי שלא נכח, כל הסשנים העתידיים שלו בוטלו ללא החזר כספי." -#: src/modules/schedule/core/session.py:486 +#: src/modules/schedule/core/session.py:610 msgctxt "session|status:finished|desc:some_att" msgid "" "No-one attended this session! No-one received rewards.\n" @@ -1014,12 +1218,22 @@ msgstr "" "אף אחד לא נכח בסשן הזה! אף אחד לא קיבל פרס.\n" "כל מי שלא נכח יבוטלו לו כל הסשנים העתידיים ללא החזר כספי." -#: src/modules/schedule/core/session.py:492 +#: src/modules/schedule/core/session.py:616 msgctxt "session|status:finished|field:attended" msgid "Attended" msgstr "נוכח" -#: src/modules/schedule/core/session.py:497 +#: src/modules/schedule/core/session.py:621 msgctxt "session|status:finished|field:missing" msgid "Missing" msgstr "חסר" + +#: src/modules/schedule/core/timeslot.py:487 +msgctxt "session|closing|audit_reason" +msgid "Removing previous scheduled session member permissions." +msgstr "" + +#: src/modules/schedule/core/timeslot.py:506 +msgctxt "session|closing|disconnecting|audit_reason" +msgid "Disconnecting previous scheduled session members." +msgstr "" diff --git a/locales/he_IL/LC_MESSAGES/settings_base.po b/locales/he_IL/LC_MESSAGES/settings_base.po index d3a7071c..0e964289 100644 --- a/locales/he_IL/LC_MESSAGES/settings_base.po +++ b/locales/he_IL/LC_MESSAGES/settings_base.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -27,23 +27,28 @@ msgctxt "setting|formatted|notset" msgid "Not Set" msgstr "לא נקבע." -#: src/settings/ui.py:338 +#: src/settings/ui.py:320 +msgctxt "setting|embed_field|too_long" +msgid "Too long to display here!" +msgstr "" + +#: src/settings/ui.py:354 #, possible-python-brace-format msgctxt "setting|summary_embed|title" msgid "Configuration options for `{name}`" msgstr "הגדרות של `{name}`." -#: src/settings/ui.py:350 +#: src/settings/ui.py:366 msgctxt "setting|summary_table|field:currently|key" msgid "Currently" msgstr "כרגע" -#: src/settings/ui.py:357 +#: src/settings/ui.py:373 msgctxt "setting|summary_table|field:default|key" msgid "By Default" msgstr "כברירת מחדל" -#: src/settings/ui.py:364 +#: src/settings/ui.py:380 msgctxt "setting|summary_table|field:set|key" msgid "Set Using" msgstr "בחר באמצעות" @@ -91,91 +96,91 @@ msgctxt "settype:role|accepts" msgid "A role name or id" msgstr "שם רול או מספר הזהות שלו" -#: src/settings/setting_types.py:427 +#: src/settings/setting_types.py:430 #, possible-python-brace-format msgctxt "settype:role|parse|error:not_found" msgid "Role `{string}` could not be found in this guild!" msgstr "הרול `{string}` לא נמצא בשרת הזה." -#: src/settings/setting_types.py:492 +#: src/settings/setting_types.py:495 msgctxt "settype:bool|accepts" msgid "Enabled/Disabled" msgstr "הפעל/כבה" -#: src/settings/setting_types.py:497 +#: src/settings/setting_types.py:500 msgctxt "settype:bool|parse:truthy_values" msgid "enabled|yes|true|on|enable|1" msgstr "מופעל/כן/נכון/דלוק/הפעל/1" -#: src/settings/setting_types.py:501 +#: src/settings/setting_types.py:504 msgctxt "settype:bool|parse:falsey_values" msgid "disabled|no|false|off|disable|0" msgstr "כבוי/לא/לאנכון/כבוי/מנוטרל/0" -#: src/settings/setting_types.py:506 +#: src/settings/setting_types.py:509 msgctxt "settype:bool|output:true" msgid "On" msgstr "דלוק" -#: src/settings/setting_types.py:507 +#: src/settings/setting_types.py:510 msgctxt "settype:bool|output:false" msgid "Off" msgstr "כבוי" -#: src/settings/setting_types.py:508 +#: src/settings/setting_types.py:511 msgctxt "settype:bool|output:none" msgid "Not Set" msgstr "לא נקבע." -#: src/settings/setting_types.py:619 +#: src/settings/setting_types.py:622 msgctxt "settype:integer|accepts" msgid "An integer" msgstr "מספר שלם" -#: src/settings/setting_types.py:682 +#: src/settings/setting_types.py:685 msgctxt "settype:emoji|desc" msgid "Unicode or custom emoji" msgstr "אוניקוד לאמוג'י " -#: src/settings/setting_types.py:754 +#: src/settings/setting_types.py:757 msgctxt "settype:guildid|accepts" msgid "Any Snowflake ID" msgstr "Any Snowflake ID" -#: src/settings/setting_types.py:823 +#: src/settings/setting_types.py:826 msgctxt "settype:timezone|accepts" msgid "A timezone name from the 'tz database' (e.g. 'Europe/London')" msgstr "אזור זמן מהארכיון של \"tz\" (לדוגמא 'Europe/London')" -#: src/settings/setting_types.py:893 +#: src/settings/setting_types.py:896 msgctxt "settype:timezone|summary_table|field:supported|key" msgid "Supported" msgstr "נתמך" -#: src/settings/setting_types.py:897 +#: src/settings/setting_types.py:900 #, possible-python-brace-format msgctxt "settype:timezone|summary_table|field:supported|value" msgid "Any timezone from the [tz database]({link})." msgstr "כל אזור זמן מפה [tz database]({link})." -#: src/settings/setting_types.py:914 +#: src/settings/setting_types.py:917 #, possible-python-brace-format msgctxt "set_type:timezone|acmpl|no_matching" msgid "No timezones matching '{input}'!" msgstr "אין אזורי זמן שמתאימים ל'{input}'!" -#: src/settings/setting_types.py:927 +#: src/settings/setting_types.py:930 #, possible-python-brace-format msgctxt "set_type:timezone|acmpl|choice" msgid "{tz} (Currently {now})" msgstr "{tz} (כרגע {now})" -#: src/settings/setting_types.py:957 +#: src/settings/setting_types.py:960 msgctxt "settype:timestamp|accepts" msgid "A timestamp in the form YYYY-MM-DD HH:MM" msgstr "אנא השתמשו בYYYY-MM-DD HH:MM" -#: src/settings/setting_types.py:986 +#: src/settings/setting_types.py:989 #, possible-python-brace-format msgctxt "settype:timestamp|parse|error:invalid" msgid "" @@ -185,43 +190,43 @@ msgstr "" "לא הצלחתי להבין את `{provided}`, אנא השתמש בפורמט `YYYY-MM-DD HH:MM` " "format." -#: src/settings/setting_types.py:1017 +#: src/settings/setting_types.py:1020 msgctxt "settype:raw|accepts" msgid "Anything" msgstr "כל אופציה" -#: src/settings/setting_types.py:1070 +#: src/settings/setting_types.py:1073 msgctxt "settype:enum|accepts" msgid "A valid option." msgstr "אופציה שעובדת." -#: src/settings/setting_types.py:1120 +#: src/settings/setting_types.py:1123 #, possible-python-brace-format msgctxt "settype:enum|parse|error:not_found" msgid "`{provided}` is not a valid option!" msgstr "`{provided}` אינו אופציה שעובדת!" -#: src/settings/setting_types.py:1168 +#: src/settings/setting_types.py:1171 msgctxt "settype:duration|accepts" msgid "A number of days, hours, minutes, and seconds, e.g. `2d 4h 10s`." msgstr "מספר ימים, שעות, דקות ושניות באנגלית, לדוגמא: `2d 4h 10s`." -#: src/settings/setting_types.py:1349 +#: src/settings/setting_types.py:1352 msgctxt "settype:channel_list|accepts" msgid "Comma separated list of channel ids." msgstr "תעודת זהות של ערוצים מופרדים באמצעות פסיק." -#: src/settings/setting_types.py:1360 +#: src/settings/setting_types.py:1363 msgctxt "settype:role_list|accepts" msgid "Comma separated list of role ids." msgstr "תעודת זהות של רולים מופרדים באמצעות פסיק." -#: src/settings/setting_types.py:1376 +#: src/settings/setting_types.py:1379 msgctxt "settype:stringlist|accepts" msgid "Comma separated strings." msgstr "טקסטים מופרדים באמצעות פסיק." -#: src/settings/setting_types.py:1387 +#: src/settings/setting_types.py:1390 msgctxt "settype:guildidlist|accepts" msgid "Comma separated list of guild ids." msgstr "תעודת זהות של שרתים מופרדים באמצעות פסיק." diff --git a/locales/he_IL/LC_MESSAGES/shop.po b/locales/he_IL/LC_MESSAGES/shop.po index 1c3cda64..de68141b 100644 --- a/locales/he_IL/LC_MESSAGES/shop.po +++ b/locales/he_IL/LC_MESSAGES/shop.po @@ -30,12 +30,12 @@ msgstr "ערוךחנות" #: src/modules/shop/cog.py:117 msgctxt "cmd:shop" msgid "shop" -msgstr "" +msgstr "חנות" #: src/modules/shop/cog.py:118 msgctxt "cmd:shop|desc" msgid "Purchase coloures, roles, and other goodies with LionCoins." -msgstr "" +msgstr "קנו צבעים, רולים, ודברים שונים באמצעות מטבעות!" #: src/modules/shop/cog.py:124 msgctxt "cmd:shop_open" @@ -611,12 +611,12 @@ msgstr "חנות רולי צבעים" #, possible-python-brace-format msgctxt "ui:colourstore|embed|footer:paged" msgid "Page {current}/{total}" -msgstr "" +msgstr "עמוד {current}/{total}" #: src/modules/shop/shops/colours.py:1264 msgctxt "ui:colourstore|embed|field:warning|name" msgid "Note!" -msgstr "" +msgstr "פתקית!" #: src/modules/shop/shops/colours.py:1268 #, possible-python-brace-format @@ -624,4 +624,4 @@ msgctxt "ui:colourstore|embed|field:warning|value" msgid "" "Purchasing a new colour role will *replace* your currently colour {current} " "without refund!" -msgstr "" +msgstr "קנייה של צבע חדש *תחליף* את הצבע הנוכחי שלך {current} ללא החזר כספי!" diff --git a/locales/he_IL/LC_MESSAGES/statistics.po b/locales/he_IL/LC_MESSAGES/statistics.po index 2061073c..dfaa5513 100644 --- a/locales/he_IL/LC_MESSAGES/statistics.po +++ b/locales/he_IL/LC_MESSAGES/statistics.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -22,58 +22,58 @@ msgstr "" "Language: he_IL\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" -#: src/modules/statistics/cog.py:42 +#: src/modules/statistics/cog.py:43 msgctxt "cmd:me" msgid "me" msgstr "אני" -#: src/modules/statistics/cog.py:45 +#: src/modules/statistics/cog.py:46 msgctxt "cmd:me|desc" msgid "Display your personal profile and summary statistics." msgstr "הצג את הפרופיל האישי שלך וסיכום סטטיסטיקות הפעילות שלך." -#: src/modules/statistics/cog.py:55 +#: src/modules/statistics/cog.py:56 msgctxt "cmd:stats" msgid "stats" msgstr "סטטיסטיקות" -#: src/modules/statistics/cog.py:58 +#: src/modules/statistics/cog.py:59 msgctxt "cmd:stats|desc" msgid "Weekly and monthly statistics for your recent activity." msgstr "סטטיסטיקות שבועיות וחודשיות של הפעילות האחרונה שלך." -#: src/modules/statistics/cog.py:71 +#: src/modules/statistics/cog.py:72 msgctxt "cmd:leaderboard" msgid "leaderboard" msgstr "לוח השגים" -#: src/modules/statistics/cog.py:74 +#: src/modules/statistics/cog.py:75 msgctxt "cmd:leaderboard|desc" msgid "Server leaderboard." msgstr "לוח השגים של השרת" -#: src/modules/statistics/cog.py:89 +#: src/modules/statistics/cog.py:90 #, possible-python-brace-format msgctxt "cmd:leaderboard|chunking|desc" msgid "Requesting server member list from Discord, please wait {loading}" -msgstr "" +msgstr "מבקש רשימת חברים מדיסקורד, אנא המתן {loading}" -#: src/modules/statistics/cog.py:108 +#: src/modules/statistics/cog.py:113 msgctxt "cmd:configure_statistics" msgid "statistics" msgstr "סטטיסטיקות" -#: src/modules/statistics/cog.py:109 +#: src/modules/statistics/cog.py:114 msgctxt "cmd:configure_statistics|desc" msgid "Statistics configuration panel" msgstr "תפריט הגדרות סטטיסטיקת פעילות" -#: src/modules/statistics/cog.py:112 +#: src/modules/statistics/cog.py:117 msgctxt "cmd:configure_statistics|param:season_start" msgid "season_start" msgstr "התחלת_סשן" -#: src/modules/statistics/cog.py:117 +#: src/modules/statistics/cog.py:122 msgctxt "cmd:configure_statistics|param:season_start|desc" msgid "" "Time from which to start counting activity for rank badges and season " @@ -167,6 +167,8 @@ msgid "" "Activity ranks will be determined based on tracked activity since this time, and the leaderboard will display activity since this time by default. Unset to disable seasons and use all-time statistics instead.\n" "Provided dates and times are assumed to be in the guild `timezone`, so set this first!" msgstr "" +"דרגות יקבעו על בסיס פעילות מהזמן הזה, ולוח השיאים יוצג מהזמן הזה. הסר על מנת לבטל \"עונות\" ולהשתמש בלוח שיאים מכל הזמנים במקום.\n" +"התאריכים שניתנים מושפעים מאזור הזמן שקבעתם בהגדרות שרת שלכם, אז תהיו בטוחים ששינית את אזור הזמן קודם!" #: src/modules/statistics/settings.py:102 msgctxt "guildset:season_start|accepts" @@ -191,6 +193,8 @@ msgid "" "The leaderboard season and activity ranks will now count from {timestamp}. Member ranks will update when they are next active.\n" "Use {rank_cmd} and press **Refresh Member Ranks** to refresh all ranks immediately." msgstr "" +"לוח השיאים עכשיו יציג את הסטטיסטיקות של של העונה שקבעת שתתחיל מ{timestamp}. הדרגות של האנשים יעודכנו בפעם הבאה שהם יהיו פעילים.\n" +"השתמשו ב {rank_cmd} אם אתם רוצים לעדכן אותם באופן מיידי." #: src/modules/statistics/settings.py:147 #, possible-python-brace-format @@ -199,6 +203,8 @@ msgid "" "The leaderboard and activity ranks will now count all-time statistics. Member ranks will update when they are next active.\n" "Use {rank_cmd} and press **Refresh Member Ranks** to refresh all ranks immediately." msgstr "" +"לוח השיאים עכשיו יציג את הסטטיסטיקות של של המכל הזמנים עד הפעם הבאה שתפעילו את הופציה הזה. הדרגות של האנשים יעודכנו בפעם הבאה שהם יהיו פעילים.\n" +"השתמשו ב {rank_cmd} אם אתם רוצים לעדכן אותם באופן מיידי." #: src/modules/statistics/settings.py:159 msgctxt "guildset:unranked_roles" @@ -632,101 +638,110 @@ msgstr "" "עכשיו תוכל לראות סטטיסטיקות מכל השרתים שבהם אתה נמצא! (וגם אני). לחץ שוב על " "מנת לראות סטטיסטיקות רק מהשרת הזה." -#: src/modules/statistics/ui/leaderboard.py:250 +#: src/modules/statistics/ui/leaderboard.py:253 msgctxt "ui:leaderboard|menu:stats|placeholder" msgid "Select Activity Type" msgstr "בחר סוג פעילות" -#: src/modules/statistics/ui/leaderboard.py:259 +#: src/modules/statistics/ui/leaderboard.py:262 msgctxt "ui:leaderboard|menu:stats|item:voice" msgid "Voice Activity" msgstr "פעילות חדרי קול" -#: src/modules/statistics/ui/leaderboard.py:270 +#: src/modules/statistics/ui/leaderboard.py:273 msgctxt "ui:leaderboard|menu:stats|item:study" msgid "Study Statistics" msgstr "סטטיסטיקת למידה" -#: src/modules/statistics/ui/leaderboard.py:281 +#: src/modules/statistics/ui/leaderboard.py:284 msgctxt "ui:leaderboard|menu:stats|item:message" msgid "Message Activity" msgstr "פעילות הודעות" -#: src/modules/statistics/ui/leaderboard.py:292 +#: src/modules/statistics/ui/leaderboard.py:295 msgctxt "ui:leaderboard|menu;stats|item:anki" msgid "Anki Cards Reviewed" msgstr "קלפי אנקי שהושלמו" -#: src/modules/statistics/ui/leaderboard.py:346 +#: src/modules/statistics/ui/leaderboard.py:349 msgctxt "ui:leaderboard|button:season|label" msgid "This Season" msgstr "בעונה הזו" -#: src/modules/statistics/ui/leaderboard.py:350 +#: src/modules/statistics/ui/leaderboard.py:353 msgctxt "ui:leaderboard|button:day|label" msgid "Today" msgstr "היום" -#: src/modules/statistics/ui/leaderboard.py:354 +#: src/modules/statistics/ui/leaderboard.py:357 msgctxt "ui:leaderboard|button:week|label" msgid "This Week" msgstr "בשבוע הזה" -#: src/modules/statistics/ui/leaderboard.py:358 +#: src/modules/statistics/ui/leaderboard.py:361 msgctxt "ui:leaderboard|button:month|label" msgid "This Month" msgstr "בחודש הנוכחי" -#: src/modules/statistics/ui/leaderboard.py:362 +#: src/modules/statistics/ui/leaderboard.py:365 msgctxt "ui:leaderboard|button:alltime|label" msgid "All Time" msgstr "כל הזמנים" -#: src/modules/statistics/ui/leaderboard.py:366 +#: src/modules/statistics/ui/leaderboard.py:369 msgctxt "ui:leaderboard|button:jump|label" msgid "Jump" msgstr "קפוץ" -#: src/modules/statistics/ui/leaderboard.py:381 +#: src/modules/statistics/ui/leaderboard.py:384 msgctxt "ui:leaderboard|button:jump|input:title" msgid "Jump to page" msgstr "קפוץ אל עמוד" -#: src/modules/statistics/ui/leaderboard.py:385 +#: src/modules/statistics/ui/leaderboard.py:388 msgctxt "ui:leaderboard|button:jump|input:question" msgid "Page number to jump to" msgstr "מספר עמוד לקפוץ אליו" -#: src/modules/statistics/ui/leaderboard.py:396 +#: src/modules/statistics/ui/leaderboard.py:399 msgctxt "ui:leaderboard|button:jump|error:invalid_page" msgid "Invalid page number, please try again!" msgstr "מספר עמוד לא נכון, אנא נסה שוב!" -#: src/modules/statistics/ui/leaderboard.py:442 +#: src/modules/statistics/ui/leaderboard.py:443 +msgctxt "ui:leaderboard|chunk_warning" +msgid "" +"**Note:** Could not retrieve member list from Discord, so some members may " +"be missing. Try again in a minute!" +msgstr "" +"שימו לב: לא הצלחתי להשיג רשימה עדכנית של המשתמשים מדיסקורד, אז כמה משתמשים " +"יהיו חסרים. אנא נסו שוב עוד דקה!" + +#: src/modules/statistics/ui/leaderboard.py:450 #, possible-python-brace-format msgctxt "ui:leaderboard|since" msgid "Counting statistics since {timestamp}" -msgstr "" - -#: src/modules/statistics/ui/leaderboard.py:453 -#, possible-python-brace-format -msgctxt "ui:leaderboard|mode:voice|message:empty|desc" -msgid "There has been no voice activity since {timestamp}" -msgstr "" - -#: src/modules/statistics/ui/leaderboard.py:458 -#, possible-python-brace-format -msgctxt "ui:leaderboard|mode:text|message:empty|desc" -msgid "There has been no message activity since {timestamp}" -msgstr "" +msgstr "סופר סטטיסטיקות מ {timestamp}" #: src/modules/statistics/ui/leaderboard.py:463 #, possible-python-brace-format +msgctxt "ui:leaderboard|mode:voice|message:empty|desc" +msgid "There has been no voice activity since {timestamp}" +msgstr "לא הייתה פעילות קולית מאז {timestamp}" + +#: src/modules/statistics/ui/leaderboard.py:468 +#, possible-python-brace-format +msgctxt "ui:leaderboard|mode:text|message:empty|desc" +msgid "There has been no message activity since {timestamp}" +msgstr "לא הייתה פעילות הודעות מאז {timestamp}" + +#: src/modules/statistics/ui/leaderboard.py:473 +#, possible-python-brace-format msgctxt "ui:leaderboard|mode:anki|message:empty|desc" msgid "There have been no Anki cards reviewed since {timestamp}" -msgstr "" +msgstr "לא היו שום קלפי אנקי שבוצעו מאז {timestamp}" -#: src/modules/statistics/ui/leaderboard.py:472 +#: src/modules/statistics/ui/leaderboard.py:482 msgctxt "ui:leaderboard|message:empty|title" msgid "Leaderboard Empty!" msgstr "לוח ההישגים ריק!" diff --git a/locales/he_IL/LC_MESSAGES/tasklist.po b/locales/he_IL/LC_MESSAGES/tasklist.po index 35808e7f..898304bc 100644 --- a/locales/he_IL/LC_MESSAGES/tasklist.po +++ b/locales/he_IL/LC_MESSAGES/tasklist.po @@ -60,7 +60,7 @@ msgstr "בחודש הנוכחי" #: src/modules/tasklist/cog.py:205 msgctxt "summon_tasklist|error:insufficient_perms|title" msgid "Uh-Oh, I cannot do that here!" -msgstr "" +msgstr "אוי לא! אני לא יכול לעשות את זה פה." #: src/modules/tasklist/cog.py:209 msgctxt "summon_tasklist|error:insufficient_perms|desc" @@ -69,6 +69,9 @@ msgid "" "`EMBED_LINKS` or `SEND_MESSAGES` permission here! If you believe this is " "unintentional, please contact a server administrator." msgstr "" +"הערוץ הזה מוגדר בתור ערוץ רשימת מטלות, אבל אין לי את ההרשאה `EMBED_LINKS` או" +" `SEND_MESSAGES` , אז אני לא יכול לשלוח פה כלום! תבדקו בבקשה את ההגדרות של " +"הערוץ הזה." #: src/modules/tasklist/cog.py:258 msgctxt "cmd:tasklist" @@ -98,7 +101,7 @@ msgstr "רשימת המטלות ריקה! אין מטלות מתאימות." #: src/modules/tasklist/cog.py:330 msgctxt "argtype:taskid|match:all" msgid "All tasks" -msgstr "" +msgstr "כל המטלות" #: src/modules/tasklist/cog.py:348 #, possible-python-brace-format @@ -339,7 +342,7 @@ msgctxt "cmd:tasks_remove|param:taskidstr|desc" msgid "" "List of task numbers or ranges to remove (e.g. 1, 2, 5-7, 8.1-3, 9-), or `-`" " to remove all." -msgstr "" +msgstr "טווח של רשימת מטלות להסרה (לדוגמא 1-15, 8.1.1.1-20 וכו')." #: src/modules/tasklist/cog.py:722 msgctxt "cmd:tasks_remove|param:created_before|desc" @@ -368,12 +371,12 @@ msgstr "האם למחוק סאב-מטלות מאותה המטלה שנמחקה." #, possible-python-brace-format msgctxt "cmd:tasks_remove_cmd|error:no_matching" msgid "No tasks on your tasklist match `{input}`" -msgstr "" +msgstr "שום מטלה ברשימה שלך תואמת ל `{input}`" #: src/modules/tasklist/cog.py:790 msgctxt "cmd:tasks_remove_cmd|error:no_matching" msgid "No tasks on your tasklist matching all the given conditions!" -msgstr "" +msgstr "שום מטלה ברשימה שלך מתאימה לתנאים שהצגת." #: src/modules/tasklist/cog.py:803 #, possible-python-brace-format @@ -410,7 +413,7 @@ msgctxt "cmd:tasks_tick|param:taskidstr|desc" msgid "" "List of task numbers or ranges to tick (e.g. 1, 2, 5-7, 8.1-3, 9-) or '-' to" " tick all." -msgstr "" +msgstr "טווח של רשימת מטלות להשלמה (לדוגמא 1-15, 8.1.1.1-20 וכו')." #: src/modules/tasklist/cog.py:835 msgctxt "cmd:tasks_tick|param:cascade|desc" @@ -452,7 +455,7 @@ msgctxt "cmd:tasks_untick|param:taskidstr|desc" msgid "" "List of task numbers or ranges to untick (e.g. 1, 2, 5-7, 8.1-3, 9-) or '-' " "to untick all." -msgstr "" +msgstr "טווח של רשימת מטלות להסרת ההשלמה (לדוגמא 1-15, 8.1.1.1-20 וכו')." #: src/modules/tasklist/cog.py:911 msgctxt "cmd:tasks_untick|param:cascade|desc" diff --git a/locales/he_IL/LC_MESSAGES/test.po b/locales/he_IL/LC_MESSAGES/test.po index e74786b6..3675b7d9 100644 --- a/locales/he_IL/LC_MESSAGES/test.po +++ b/locales/he_IL/LC_MESSAGES/test.po @@ -60,7 +60,7 @@ msgstr "נכשל" #: src/modules/test/test.py:143 msgid "failui" -msgstr "" +msgstr "failui" #: src/modules/test/test.py:150 msgid "pager" diff --git a/locales/he_IL/LC_MESSAGES/utils.po b/locales/he_IL/LC_MESSAGES/utils.po index dcfae8b5..ea8d10c7 100644 --- a/locales/he_IL/LC_MESSAGES/utils.po +++ b/locales/he_IL/LC_MESSAGES/utils.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: 2023-08-28 13:43+0000\n" "Last-Translator: Ari Horesh, 2023\n" "Language-Team: Hebrew (Israel) (https://app.transifex.com/leobot/teams/174919/he_IL/)\n" @@ -108,34 +108,34 @@ msgctxt "cmd:page_select|acmpl|error:no_pager" msgid "No active pagers in this channel!" msgstr "אין פייגר שמקשיב לערוץ הזה" -#: src/utils/transformers.py:43 +#: src/utils/transformers.py:45 #, possible-python-brace-format msgctxt "utils:parse_dur|error" msgid "Cannot parse `{value}` as a duration." msgstr "לא הצלחתי להבין את `{value}` בתור ערך זמן." -#: src/utils/transformers.py:68 +#: src/utils/transformers.py:71 #, possible-python-brace-format msgctxt "util:Duration|acmpl|error" msgid "Cannot extract duration from \"{partial}\"" msgstr "לא הצלחתי להבין את \"{partial}\"" -#: src/utils/lib.py:670 +#: src/utils/lib.py:679 msgctxt "util:parse_dur|regex:day" msgid "(?P\\d+)\\s*(?:(d)|(day))" msgstr "(?P\\d+)\\s*(?:(d)|(day))" -#: src/utils/lib.py:677 +#: src/utils/lib.py:686 msgctxt "util:parse_dur|regex:hour" msgid "(?P\\d+)\\s*(?:(h)|(hour))" msgstr "(?P\\d+)\\s*(?:(h)|(hour))" -#: src/utils/lib.py:684 +#: src/utils/lib.py:693 msgctxt "util:parse_dur|regex:minute" msgid "(?P\\d+)\\s*(?:(m)|(min))" msgstr "(?P\\d+)\\s*(?:(m)|(min))" -#: src/utils/lib.py:691 +#: src/utils/lib.py:700 msgctxt "util:parse_dur|regex:second" msgid "(?P\\d+)\\s*(?:(s)|(sec))" msgstr "(?P\\d+)\\s*(?:(s)|(sec))" @@ -284,238 +284,248 @@ msgctxt "ui:msg_editor|button:add_embed|label" msgid "Add Embed" msgstr "הוסף embed" -#: src/utils/ui/msgeditor.py:192 +#: src/utils/ui/msgeditor.py:190 +msgctxt "ui:msg_editor|button:rm_embed|sample_content" +msgid "Content Placeholder" +msgstr "" + +#: src/utils/ui/msgeditor.py:199 +msgctxt "ui:msg_editor|button:rm_embed|label" +msgid "Remove Embed" +msgstr "" + +#: src/utils/ui/msgeditor.py:217 msgctxt "ui:msg_editor|modal:body|field:content|label" msgid "Message Content" msgstr "תוכן הודעה" -#: src/utils/ui/msgeditor.py:203 +#: src/utils/ui/msgeditor.py:228 msgctxt "ui:msg_editor|modal:body|field:desc|label" msgid "Embed Description" msgstr "תיאור embed" -#: src/utils/ui/msgeditor.py:214 +#: src/utils/ui/msgeditor.py:239 msgctxt "ui:msg_editor|modal:body|field:title|label" msgid "Embed Title" msgstr "כותרת embed" -#: src/utils/ui/msgeditor.py:225 +#: src/utils/ui/msgeditor.py:250 msgctxt "ui:msg_editor|modal:body|field:colour|label" msgid "Embed Colour" msgstr "צבע embed" -#: src/utils/ui/msgeditor.py:240 +#: src/utils/ui/msgeditor.py:265 msgctxt "ui:msg_editor|modal:body|title" msgid "Message Body Editor" msgstr "עורך תוכן הודעה" -#: src/utils/ui/msgeditor.py:265 +#: src/utils/ui/msgeditor.py:290 msgctxt "ui:msg_editor|button:body|error:invalid_colour" msgid "" "Invalid colour format! Please enter colours as hex codes, e.g. `#E67E22`" msgstr "צבע לא נכון! הכנס hex `#E67E22` לדוגמא" -#: src/utils/ui/msgeditor.py:285 +#: src/utils/ui/msgeditor.py:310 msgctxt "ui:msg_editor|button:body|label" msgid "Body" msgstr "גוף" -#: src/utils/ui/msgeditor.py:302 +#: src/utils/ui/msgeditor.py:327 msgctxt "ui:msg_editor|modal:author|field:name|label" msgid "Author Name" msgstr "שם כותב" -#: src/utils/ui/msgeditor.py:313 +#: src/utils/ui/msgeditor.py:338 msgctxt "ui:msg_editor|modal:author|field:link|label" msgid "Author URL" msgstr "לינק לכותב" -#: src/utils/ui/msgeditor.py:323 +#: src/utils/ui/msgeditor.py:348 msgctxt "ui:msg_editor|modal:author|field:image|label" msgid "Author Image URL" msgstr "תמונה של הכותב" -#: src/utils/ui/msgeditor.py:334 +#: src/utils/ui/msgeditor.py:359 msgctxt "ui:msg_editor|modal:author|title" msgid "Embed Author Editor" msgstr "עורך כותב" -#: src/utils/ui/msgeditor.py:360 +#: src/utils/ui/msgeditor.py:385 msgctxt "ui:msg_editor|button:author|label" msgid "Author" msgstr "כותב" -#: src/utils/ui/msgeditor.py:377 +#: src/utils/ui/msgeditor.py:402 msgctxt "ui:msg_editor|modal:footer|field:text|label" msgid "Footer Text" msgstr "טקסט פוטר" -#: src/utils/ui/msgeditor.py:388 +#: src/utils/ui/msgeditor.py:413 msgctxt "ui:msg_editor|modal:footer|field:image|label" msgid "Footer Image URL" msgstr "לינק תמונה פוטר" -#: src/utils/ui/msgeditor.py:398 +#: src/utils/ui/msgeditor.py:423 msgctxt "ui:msg_editor|modal:footer|field:timestamp|label" msgid "Embed Timestamp (in ISO format)" msgstr "נקודת זמן (ISO format)" -#: src/utils/ui/msgeditor.py:410 +#: src/utils/ui/msgeditor.py:435 msgctxt "ui:msg_editor|modal:footer|title" msgid "Embed Footer Editor" msgstr "עורך כותב פוטר" -#: src/utils/ui/msgeditor.py:429 +#: src/utils/ui/msgeditor.py:454 msgctxt "ui:msg_editor|button:footer|error:invalid_timestamp" msgid "Invalid timestamp! Please enter the timestamp in ISO format." msgstr "אנא הכנס נקודת זמן בISO" -#: src/utils/ui/msgeditor.py:449 +#: src/utils/ui/msgeditor.py:474 msgctxt "ui:msg_editor|button:footer|label" msgid "Footer" msgstr "פוטר" -#: src/utils/ui/msgeditor.py:467 +#: src/utils/ui/msgeditor.py:492 msgctxt "ui:msg_editor|modal:images|field:thumb|label" msgid "Thumbnail Image URL" msgstr "לינק לתמונה" -#: src/utils/ui/msgeditor.py:477 +#: src/utils/ui/msgeditor.py:502 msgctxt "ui:msg_editor|modal:images|field:image|label" msgid "Embed Image URL" msgstr "לינק תמונה בembed" -#: src/utils/ui/msgeditor.py:487 +#: src/utils/ui/msgeditor.py:512 msgctxt "ui:msg_editor|modal:images|title" msgid "Embed images Editor" msgstr "עורך תמונה" -#: src/utils/ui/msgeditor.py:517 +#: src/utils/ui/msgeditor.py:542 msgctxt "ui:msg_editor|button:images|label" msgid "Images" msgstr "תמונות" -#: src/utils/ui/msgeditor.py:535 +#: src/utils/ui/msgeditor.py:560 msgctxt "ui:msg_editor|modal:add_field|field:position|label" msgid "Field number to insert at" msgstr "מספר אזור להכניס ב" -#: src/utils/ui/msgeditor.py:545 +#: src/utils/ui/msgeditor.py:570 msgctxt "ui:msg_editor|modal:add_field|field:name|label" msgid "Field name" msgstr "שם" -#: src/utils/ui/msgeditor.py:555 +#: src/utils/ui/msgeditor.py:580 msgctxt "ui:msg_editor|modal:add_field|field:value|label" msgid "Field value" msgstr "ערך" -#: src/utils/ui/msgeditor.py:565 +#: src/utils/ui/msgeditor.py:590 msgctxt "ui:msg_editor|modal:add_field|field:inline|label" msgid "Whether the field is inline" msgstr "האם התוכן בInline" -#: src/utils/ui/msgeditor.py:569 +#: src/utils/ui/msgeditor.py:594 msgctxt "ui:msg_editor|modal:add_field|field:inline|placeholder" msgid "True/False" msgstr "כן/לא" -#: src/utils/ui/msgeditor.py:582 +#: src/utils/ui/msgeditor.py:607 msgctxt "ui:msg_editor|modal:add_field|title" msgid "Add Embed Field" msgstr "הוסף תוכן embed" -#: src/utils/ui/msgeditor.py:602 +#: src/utils/ui/msgeditor.py:627 msgctxt "ui:msg_editor|modal:add_field|error:position_not_int" msgid "The field position must be an integer!" msgstr "המיקום של האזור חייב להיות מספר שלם!" -#: src/utils/ui/msgeditor.py:621 +#: src/utils/ui/msgeditor.py:646 msgctxt "ui:msg_editor|button:add_field|label" msgid "Add Field" msgstr "הוסף אזור" -#: src/utils/ui/msgeditor.py:637 +#: src/utils/ui/msgeditor.py:662 msgctxt "ui:msg_editor|format_field|name_placeholder" msgid "-" msgstr "-" -#: src/utils/ui/msgeditor.py:666 +#: src/utils/ui/msgeditor.py:691 msgctxt "ui:msg_editor|modal:edit_field|field:name|label" msgid "Field name" msgstr "שם" -#: src/utils/ui/msgeditor.py:677 +#: src/utils/ui/msgeditor.py:702 msgctxt "ui:msg_editor|modal:edit_field|field:value|label" msgid "Field value" msgstr "ערך" -#: src/utils/ui/msgeditor.py:688 +#: src/utils/ui/msgeditor.py:713 msgctxt "ui:msg_editor|modal:edit_field|field:inline|label" msgid "Whether the field is inline" msgstr "האם התוכן בInline" -#: src/utils/ui/msgeditor.py:692 +#: src/utils/ui/msgeditor.py:717 msgctxt "ui:msg_editor|modal:edit_field|field:inline|placeholder" msgid "True/False" msgstr "כן/לא" -#: src/utils/ui/msgeditor.py:704 +#: src/utils/ui/msgeditor.py:729 msgctxt "ui:msg_editor|modal:edit_field|title" msgid "Edit Embed Field" msgstr "ערוך תוכן embed" -#: src/utils/ui/msgeditor.py:733 +#: src/utils/ui/msgeditor.py:758 msgctxt "ui:msg_editor|menu:edit_field|placeholder" msgid "Edit Embed Field" msgstr "ערוך תוכן embed" -#: src/utils/ui/msgeditor.py:772 +#: src/utils/ui/msgeditor.py:797 msgctxt "ui:msg_deleteor|menu:delete_field|placeholder" msgid "Remove Embed Field" msgstr "הסר תוכן embed" -#: src/utils/ui/msgeditor.py:808 +#: src/utils/ui/msgeditor.py:833 msgctxt "ui:msg_editor|button:save|label" msgid "Save" msgstr "שמור" -#: src/utils/ui/msgeditor.py:833 +#: src/utils/ui/msgeditor.py:858 msgctxt "ui:msg_editor|button:download|label" msgid "Download" msgstr "הורד" -#: src/utils/ui/msgeditor.py:852 +#: src/utils/ui/msgeditor.py:877 msgctxt "ui:msg_editor|button:undo|label" msgid "Undo" msgstr "חזרו" -#: src/utils/ui/msgeditor.py:872 +#: src/utils/ui/msgeditor.py:897 msgctxt "ui:msg_editor|button:redo|label" msgid "Redo" msgstr "שחזר" -#: src/utils/ui/msgeditor.py:891 +#: src/utils/ui/msgeditor.py:916 msgctxt "ui:msg_editor|button:quit|confirm" msgid "You have unsaved changes! Are you sure you want to quit?" msgstr "יש לך שינויים שלא שמרת, אתה בטוח שאתה רוצה לעזוב עכשיו?" -#: src/utils/ui/msgeditor.py:896 +#: src/utils/ui/msgeditor.py:921 msgctxt "ui:msg_editor|button:quit|confirm|button:yes" msgid "Yes, Quit Now" msgstr "כן, עזוב עכשיו" -#: src/utils/ui/msgeditor.py:902 +#: src/utils/ui/msgeditor.py:927 msgctxt "ui:msg_editor|button:quit|confirm|button:no" msgid "No, Go Back" msgstr "לא, חזור אחורה" -#: src/utils/ui/msgeditor.py:996 +#: src/utils/ui/msgeditor.py:1025 msgctxt "ui:msg_editor|timeout_warning|title" msgid "Warning!" msgstr "זהירות!" -#: src/utils/ui/msgeditor.py:1000 +#: src/utils/ui/msgeditor.py:1029 #, possible-python-brace-format msgctxt "ui:msg_editor|timeout_warning|desc" msgid "" @@ -523,7 +533,7 @@ msgid "" "editing." msgstr "התפריט יפוג ב {timestamp}. לחץ \"המשך\" למטה כדי להמשיך לערוך." -#: src/utils/ui/msgeditor.py:1009 +#: src/utils/ui/msgeditor.py:1038 msgctxt "ui:msg_editor|timeout_warning|continue" msgid "Continue" msgstr "המשך" diff --git a/locales/pt_BR/LC_MESSAGES/Pomodoro.po b/locales/pt_BR/LC_MESSAGES/Pomodoro.po new file mode 100644 index 00000000..b4291e53 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/Pomodoro.po @@ -0,0 +1,976 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/pomodoro/timer.py:52 +msgctxt "timer|stage:break|name" +msgid "BREAK" +msgstr "PAUSA" + +#: src/modules/pomodoro/timer.py:53 +msgctxt "timer|stage:focus|name" +msgid "FOCUS" +msgstr "FOCO" + +#: src/modules/pomodoro/timer.py:160 +#, possible-python-brace-format +msgctxt "timer|webhook|name" +msgid "{bot_name} Pomodoro" +msgstr "{bot_name} Pomodoro" + +#: src/modules/pomodoro/timer.py:164 +msgctxt "timer|webhook|audit_reason" +msgid "Pomodoro Notifications" +msgstr "Notificações do Pomodoro" + +#: src/modules/pomodoro/timer.py:175 +msgctxt "timer|webhook|error:insufficient_permissions" +msgid "" +"I require the `MANAGE_WEBHOOKS` permission to send pomodoro notifications " +"here!" +msgstr "" +"Eu preciso de permissão ˋMANAGE_WEBHOOKSˋ para enviar notificações do " +"pomodoro aqui!" + +#: src/modules/pomodoro/timer.py:234 +#, possible-python-brace-format +msgctxt "timer|default_base_name" +msgid "Timer {pattern}" +msgstr "Temporizador {pattern}" + +#: src/modules/pomodoro/timer.py:408 +#, possible-python-brace-format +msgctxt "timer|kicked_message" +msgid "" +"{mentions} was removed from {channel} because they were inactive! Remember " +"to press {tick} to register your presence every stage." +msgid_plural "" +"{mentions} were removed from {channel} because they were inactive! Remember " +"to press {tick} to register your presence every stage." +msgstr[0] "" +"{mentions} foi removida de {channel} pois elas estavam inativas! Se lembre " +"de clickar {tick} para registrar sua presença em todos os ciclos." +msgstr[1] "" +"{mentions} foram removidas de {channel} pois elas estavam inativas! Se " +"lembre de clickar {tick} para registrar sua presença em todos os ciclos." +msgstr[2] "" +"{mentions} foram removidas de {channel} pois elas estavam inativas! Se " +"lembre de apertar {tick} para registrar sua presença em todos os ciclos." + +#: src/modules/pomodoro/timer.py:501 +#, possible-python-brace-format +msgctxt "timer|status|stage:focus|statusline" +msgid "{channel} is now in **FOCUS**! Good luck, **BREAK** starts {timestamp}" +msgstr "" +"{channel} agora esta em **FOCO**! Boa sorte, **PAUSA** começa em {timestamp}" + +#: src/modules/pomodoro/timer.py:506 +#, possible-python-brace-format +msgctxt "timer|status|stage:break|statusline" +msgid "" +"{channel} is now on **BREAK**! Take a rest, **FOCUS** starts {timestamp}" +msgstr "" +"{channel} está agora em **PAUSA**! Tire um descanso, o **FOCO** começa em " +"{timestamp}" + +#: src/modules/pomodoro/timer.py:538 +#, possible-python-brace-format +msgctxt "timer|status|warningline" +msgid "" +"**Warning:** {mentions}, please press {tick} to avoid being removed on the " +"next stage." +msgstr "" +"**Atenção:** {mentions}, por favor, aperte {tick} para evitar ser removido " +"no próximo estágio." + +#: src/modules/pomodoro/timer.py:557 +#, possible-python-brace-format +msgctxt "timer|status|stopped:auto" +msgid "Timer stopped! Join {channel} to start the timer." +msgstr "Temporizador parado! Entre {channel} para iniciar o timer." + +#: src/modules/pomodoro/timer.py:562 +msgctxt "timer|status|stopped:manual" +msgid "Timer stopped! Press `Start` to restart the timer." +msgstr "Temporizador parado! Pressione ˋStartˋ para reiniciar o temporizador." + +#: src/modules/pomodoro/settingui.py:39 +msgctxt "ui:timer_config|menu:channels|placeholder" +msgid "Select Pomodoro Notification Channel" +msgstr "Selecione o Canal de Notificações do Pomodoro" + +#: src/modules/pomodoro/settingui.py:47 +msgctxt "ui:timer_config|embed|title" +msgid "Timer Configuration Panel" +msgstr "Painel de Configurações do Pomodoro" + +#: src/modules/pomodoro/settingui.py:81 +msgctxt "dash:pomodoro|title" +msgid "Pomodoro Configuration ({commands[configure pomodoro]})" +msgstr "Configurações do Pomodoro ({commands[configure pomodoro]})" + +#: src/modules/pomodoro/settingui.py:85 +msgctxt "dash:stats|dropdown|placeholder" +msgid "Pomodoro Timer Panel" +msgstr "Painel do Temporizador Pomodoro" + +#: src/modules/pomodoro/cog.py:96 +msgctxt "cmd_check:ready|failed" +msgid "" +"I am currently restarting! The Pomodoro timers will be unavailable until I " +"have restarted. Thank you for your patience!" +msgstr "" +"Eu estou reiniciando! O temporizador Pomodoro estará inacessível enquanto eu" +" reinicio. Agradeço por sua paciência!" + +#: src/modules/pomodoro/cog.py:336 +msgctxt "cmd:timer" +msgid "timer" +msgstr "temporizador" + +#: src/modules/pomodoro/cog.py:337 +msgctxt "cmd:timer|desc" +msgid "Show your current (or selected) pomodoro timer." +msgstr "Mostra o seu temporizador Pomodoro atual (ou o selecionado)." + +#: src/modules/pomodoro/cog.py:340 +msgctxt "cmd:timer|param:channel" +msgid "timer_channel" +msgstr "temporizador_canal" + +#: src/modules/pomodoro/cog.py:345 +msgctxt "cmd:timer|param:channel|desc" +msgid "Select a timer to display (by selecting the timer voice channel)" +msgstr "" +"Selecione um temporizador a mostrar (selecionando a sala correspondente a " +"ele)." + +#: src/modules/pomodoro/cog.py:367 src/modules/pomodoro/cog.py:438 +#, possible-python-brace-format +msgctxt "cmd:timer|error:no_timers|desc" +msgid "" +"**This server has no timers set up!**\n" +"Ask an admin to set up and configure a timer with {create_cmd} first, or rent a private room with {room_cmd} and create one yourself!" +msgstr "" +"**Este servidor não tem nenhum temporizador Pomodoro configurado!**\n" +"Peça que um administrador crie um, e configure usando {create_cmd}. Ou você pode alugar uma sala usando {room_cmd} e criar o seu próprio temporizador! " + +#: src/modules/pomodoro/cog.py:381 +#, possible-python-brace-format +msgctxt "cmd:timer|error:no_channel|desc" +msgid "" +"**I don't know what timer to show you.**\n" +"No channel selected and you are not in a voice channel! Use {timers_cmd} to list the available timers in this server." +msgstr "" +"**Eu não sei qual temporizador devo monstrar a você.**\n" +"Você não selecionou nenhum temporizador, e também não está em um canal que tenha um. Use {timers_cmd} para ver a lista de temporizadores disponíveis no servidor." + +#: src/modules/pomodoro/cog.py:394 +#, possible-python-brace-format +msgctxt "cmd:timer|error:no_timer_in_channel" +msgid "" +"The channel {channel} is not a pomodoro timer room!\n" +"Use {timers_cmd} to list the available timers in this server." +msgstr "" +"O canal {channel} não é um canal usado com o temporizador pomodoro.\n" +"Use {timers_cmd} para visualizar a lista de temporizadores disponíveis no servidor." + +#: src/modules/pomodoro/cog.py:411 +msgctxt "cmd:timers" +msgid "timers" +msgstr "temporizadores" + +#: src/modules/pomodoro/cog.py:412 +msgctxt "cmd:timers|desc" +msgid "List the available pomodoro timer rooms." +msgstr "Mostra a lista salas com temporizadores pomodoro." + +#: src/modules/pomodoro/cog.py:451 +#, possible-python-brace-format +msgctxt "cmd:timer|error:no_visible_timers|desc" +msgid "" +"**There are no available pomodoro timers!**\n" +"Ask an admin to set up a new timer with {create_cmd}, or rent a private room with {room_cmd} and create one yourself!" +msgstr "" +"**Não há temporizadores pomodoro disponíveis!**\n" +"Peça que um administrador crie e configure um novo temporizador através de {create_cmd}, ou alugue uma sala particular com {room_cmd}, e crie o seu próprio!" + +#: src/modules/pomodoro/cog.py:464 +#, possible-python-brace-format +msgctxt "cmd:timers|embed:timer_list|title" +msgid "Pomodoro Timer Rooms in **{guild}**" +msgstr "Salas de Temporizadores Pomodoro em **{guild}**" + +#: src/modules/pomodoro/cog.py:473 +#, possible-python-brace-format +msgctxt "cmd:timers|status:stopped_auto" +msgid "" +"`{pattern}` timer is stopped with no members!\n" +"Join {channel} to restart it." +msgstr "" +"Temporizador ˋ{pattern}ˋ está parado por falta de membros!\n" +"Entre em {channel} para recomeçá-lo." + +#: src/modules/pomodoro/cog.py:479 +#, possible-python-brace-format +msgctxt "cmd:timers|status:stopped_manual" +msgid "" +"`{pattern}` timer is stopped with `{members}` members!\n" +"Join {channel} and press `Start` to start it!" +msgstr "" +"Temporizador ˋ{pattern}ˋ está parado, com ˋ{members}ˋ membros!\n" +"Entre em {channel} e clique em ˋIniciarˋ para começá-lo!" + +#: src/modules/pomodoro/cog.py:486 +#, possible-python-brace-format +msgctxt "cmd:timers|status:running_focus" +msgid "" +"`{pattern}` timer is running with `{members}` members!\n" +"Currently **focusing**, with break starting {timestamp}" +msgstr "" +"Temporizador ˋ{pattern}ˋ está ativo, com ˋ{members}ˋ membros!\n" +"Agora, no estágio **Foco**. A pausa começa em {timestamp}" + +#: src/modules/pomodoro/cog.py:492 +#, possible-python-brace-format +msgctxt "cmd:timers|status:running_break" +msgid "" +"`{pattern}` timer is running with `{members}` members!\n" +"Currently **resting**, with focus starting {timestamp}" +msgstr "" +"Temporizador ˋ{pattern}ˋ está ativo, com ˋ{members}ˋ membros!\n" +"Agora, no estágio **Pausa**. O estágio de Foco começa em {timestamp}" + +#: src/modules/pomodoro/cog.py:506 +msgctxt "cmd:pomodoro" +msgid "pomodoro" +msgstr "pomodoro" + +#: src/modules/pomodoro/cog.py:507 +msgctxt "cmd:pomodoro|desc" +msgid "Create and configure pomodoro timer rooms." +msgstr "Crie e configure salas com temporizadores pomodoro." + +#: src/modules/pomodoro/cog.py:514 +msgctxt "cmd:pomodoro_create" +msgid "create" +msgstr "criar" + +#: src/modules/pomodoro/cog.py:517 +msgctxt "cmd:pomodoro_create|desc" +msgid "Create a new Pomodoro timer. Requires manage channel permissions." +msgstr "" +"Crie um novo Temporizador Pomodoro. É necessário ter permissão de gerenciar " +"canais." + +#: src/modules/pomodoro/cog.py:521 +msgctxt "cmd:pomodoro_create|param:channel" +msgid "timer_channel" +msgstr "canal_do_temporizador" + +#: src/modules/pomodoro/cog.py:527 +msgctxt "cmd:pomodoro_create|param:channel|desc" +msgid "" +"Voice channel to create the timer in. (Defaults to your current channel, or " +"makes a new one.)" +msgstr "" +"Canal de voz em que será criado o temporizador. (Por padrão, será seu canal " +"atual, ou escolha um outro)" + +#: src/modules/pomodoro/cog.py:572 +msgctxt "cmd:pomodoro_create|new_channel|error:your_insufficient_perms|title" +msgid "Could not create pomodoro voice channel!" +msgstr "Não pude criar o canal de voz dedicado ao Pomodoro!" + +#: src/modules/pomodoro/cog.py:576 +msgctxt "cmd:pomodoro_create|new_channel|error:your_insufficient_perms" +msgid "" +"No `timer_channel` was provided, and you lack the 'Manage Channels` " +"permission required to create a new timer room!" +msgstr "" +"Nenhum ˋtemporizador_canalˋ foi indicado, e me falta permissão de 'Gerenciar" +" Canais', necessária para que eu possa criar uma sala para o temporizador." + +#: src/modules/pomodoro/cog.py:587 +msgctxt "cmd:pomodoro_create|new_channel|error:my_insufficient_perms|title" +msgid "Could not create pomodoro voice channel!" +msgstr "Não pude criar um canal de voz para o Pomodoro!" + +#: src/modules/pomodoro/cog.py:591 +msgctxt "cmd:pomodoro_create|new_channel|error:my_insufficient_perms|desc" +msgid "" +"No `timer_channel` was provided, and I lack the 'Manage Channels' permission" +" required to create a new voice channel." +msgstr "" +"Nenhum ˋtemporizador_canalˋ foi indicado, e me falta permissão de 'Gerenciar" +" Canais', necessária para que eu possa criar um novo canal de voz." + +#: src/modules/pomodoro/cog.py:602 +msgctxt "cmd:pomodoro_create|new_channel|default_name" +msgid "Timer" +msgstr "Temporizador" + +#: src/modules/pomodoro/cog.py:606 +msgctxt "cmd:pomodoro_create|new_channel|audit_reason" +msgid "Creating Pomodoro Voice Channel" +msgstr "Criando um Canal de Voz com Temporizador Pomodoro" + +#: src/modules/pomodoro/cog.py:615 +msgctxt "cmd:pomodoro_create|new_channel|error:channel_create_failed|title" +msgid "Could not create pomodoro voice channel!" +msgstr "Não pude criar o canal de voz com o temporizador pomodoro!" + +#: src/modules/pomodoro/cog.py:619 +msgctxt "cmd:pomodoro_create|new_channel|error:channel_create_failed|desc" +msgid "" +"Failed to create a new pomodoro voice channel due to an unknown Discord " +"communication error. Please try creating the channel manually and pass it to" +" the `timer_channel` argument of this command." +msgstr "" +"Falha desconhecida, ao criar um novo canal com Temporizador Pomodoro. Por " +"favor, tente criar o canal manualmente, e o atribua ao Pomodoro atravéz do " +"item ˋtemporizador_canalˋ deste comando. " + +#: src/modules/pomodoro/cog.py:636 +#, possible-python-brace-format +msgctxt "cmd:pomodoro_create|add_timer|error:timer_exists" +msgid "A timer already exists in {channel}! Reconfigure it with {edit_cmd}." +msgstr "" +"Já há um temporizador em {channel}! Edite suas configurações através de " +"{edit_cmd}." + +#: src/modules/pomodoro/cog.py:650 +#, possible-python-brace-format +msgctxt "cmd:pomodoro_create|add_timer|error:your_insufficient_perms" +msgid "" +"You must have the 'Manage Channel' permission in {channel} in order to add a" +" timer there!" +msgstr "" +"Você precisa ter permissão de 'Gerenciar Canal' em {channel} para que possa " +"adicionar um temporizador lá." + +#: src/modules/pomodoro/cog.py:699 +msgctxt "cmd:pomodoro_create|response:success|content" +msgid "Timer created successfully! Use the panel below to reconfigure." +msgstr "" +"Temporizador criado com sucesso! Use o painel abaixo para reconfigurá-lo." + +#: src/modules/pomodoro/cog.py:705 +msgctxt "cmd:pomodoro_destroy" +msgid "destroy" +msgstr "desativar" + +#: src/modules/pomodoro/cog.py:708 +msgctxt "cmd:pomodoro_destroy|desc" +msgid "Remove a pomodoro timer from a voice channel." +msgstr "Remova um Temporizador Pomodoro de um canal de voz." + +#: src/modules/pomodoro/cog.py:712 +msgctxt "cmd:pomodoro_destroy|param:channel" +msgid "timer_channel" +msgstr "canal_do_temporizador" + +#: src/modules/pomodoro/cog.py:715 +msgctxt "cmd:pomodoro_destroy|param:channel" +msgid "Select a timer voice channel to remove the timer from." +msgstr "" +"Selecione um canal com Temporizador Pomodoro para remover o cronômetro dele." + +#: src/modules/pomodoro/cog.py:733 +msgctxt "cmd:pomodoro_destroy|error:no_timer" +msgid "This channel doesn't have an attached pomodoro timer!" +msgstr "Este canal não tem um temporizador Pomodoro." + +#: src/modules/pomodoro/cog.py:746 +msgctxt "cmd:pomodoro_destroy|error:insufficient_perms|owned" +msgid "" +"You need to be an administrator or own this channel to remove this timer!" +msgstr "" +"Você precisa ser um administrador, ou dono do seu próprio canal, para " +"remover este temporizador." + +#: src/modules/pomodoro/cog.py:755 +#, possible-python-brace-format +msgctxt "cmd:pomodoro_destroy|error:insufficient_perms|notowned" +msgid "" +"You need to have the `Manage Channels` permission in {channel} to remove " +"this timer!" +msgstr "" +"Você precisa ter permissão de 'Gerenciar Canais' em {channel} para remover o" +" temporizador." + +#: src/modules/pomodoro/cog.py:766 +#, possible-python-brace-format +msgctxt "cmd:pomdoro_destroy|response:success|description" +msgid "Timer successfully removed from {channel}." +msgstr "O temporizador foi removido de {channel} com sucesso." + +#: src/modules/pomodoro/cog.py:772 +msgctxt "cmd:pomodoro_edit" +msgid "edit" +msgstr "editar" + +#: src/modules/pomodoro/cog.py:775 +msgctxt "cmd:pomodoro_edit|desc" +msgid "Reconfigure a pomodoro timer." +msgstr "Edite a configuração de um Temporizador Pomodoro." + +#: src/modules/pomodoro/cog.py:779 +msgctxt "cmd:pomodoro_edit|param:channel" +msgid "timer_channel" +msgstr "canal_do_temporizador" + +#: src/modules/pomodoro/cog.py:785 +msgctxt "cmd:pomodoro_edit|param:channel|desc" +msgid "Select a timer voice channel to reconfigure." +msgstr "" +"Selecione um canal de voz com Temporizador Pomodoro para editar a " +"configuração." + +#: src/modules/pomodoro/cog.py:826 +msgctxt "cmd:pomodoro_edit|error:no_timer" +msgid "This channel doesn't have an attached pomodoro timer to edit!" +msgstr "Este canal não possui um temporizador Pomodoro para ser editado!" + +#: src/modules/pomodoro/cog.py:839 +msgctxt "cmd:pomodoro_edit|error:insufficient_perms|role:other" +msgid "" +"Insufficient permissions to modifiy this timer!\n" +"You need to be a server administrator, own this channel, or have the timer manager role." +msgstr "" +"Você não possui permissões suficientes para modificar este temporizador!\n" +"Você precisa ser um administrador do servidor, dono deste canal, ou ter um cargo que gerencie temporizadores." + +#: src/modules/pomodoro/cog.py:860 +msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:admin" +msgid "You need to be a guild admin to modify this option!" +msgstr "" +"Você precisa ser um administrador do servidor para modificar esta opção." + +#: src/modules/pomodoro/cog.py:865 +msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:owner" +msgid "You need to be a channel owner or guild admin to modify this option!" +msgstr "" +"Você precisa ser o dono de canal ou administrador do servidor para modificar" +" esta opção!" + +#: src/modules/pomodoro/cog.py:870 +msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:manager" +msgid "" +"You need to be a guild admin or have the manager role to modify this option!" +msgstr "" +"Você precisa ser um administrador do servidor ou ter um cargo que te permita" +" modificar esta opção!" + +#: src/modules/pomodoro/cog.py:906 +msgctxt "cmd:configure_pomodoro" +msgid "pomodoro" +msgstr "pomodoro" + +#: src/modules/pomodoro/cog.py:907 +msgctxt "cmd:configure_pomodoro|desc" +msgid "Configure Pomodoro Timer System" +msgstr "Configure o Sistema de Temporizador Pomodoro" + +#: src/modules/pomodoro/lib.py:19 +#, possible-python-brace-format +msgctxt "formatstring:channel_name|key:remaining" +msgid "{remaining}" +msgstr "{remaining}" + +#: src/modules/pomodoro/lib.py:20 +#, possible-python-brace-format +msgctxt "formatstring:channel_name|key:stage" +msgid "{stage}" +msgstr "{stage}" + +#: src/modules/pomodoro/lib.py:21 +#, possible-python-brace-format +msgctxt "formatstring:channel_name|key:members" +msgid "{members}" +msgstr "{members}" + +#: src/modules/pomodoro/lib.py:22 +#, possible-python-brace-format +msgctxt "formatstring:channel_name|key:name" +msgid "{name}" +msgstr "{name}" + +#: src/modules/pomodoro/lib.py:23 +#, possible-python-brace-format +msgctxt "formatstring:channel_name|key:pattern" +msgid "{pattern}" +msgstr "{pattern}" + +#: src/modules/pomodoro/options.py:33 +msgctxt "timerset:voice_channel" +msgid "channel" +msgstr "canal" + +#: src/modules/pomodoro/options.py:36 +msgctxt "timerset:voice_channel|desc" +msgid "Channel in which to track timer members and send alerts." +msgstr "" +"Canal em que os membros do temporizador serão monitorados e alertados." + +#: src/modules/pomodoro/options.py:48 +msgctxt "timerset:notification_channel" +msgid "notification_channel" +msgstr "canal_de_notificação" + +#: src/modules/pomodoro/options.py:51 +msgctxt "timerset:notification_channel|desc" +msgid "Channel to which to send timer status cards and notifications." +msgstr "" +"Canal para onde será enviado o painel do temporizador, e também as " +"notificações dos ciclos." + +#: src/modules/pomodoro/options.py:73 +#, possible-python-brace-format +msgctxt "timerset:notification_channel|format:notset" +msgid "Not Set (Using {channel})" +msgstr "Não configurado (Usando {channel})" + +#: src/modules/pomodoro/options.py:83 +msgctxt "timerset:inactivity_threshold|inactivity_threshold" +msgid "inactivity_threshold" +msgstr "tolerância_de_inatividade" + +#: src/modules/pomodoro/options.py:86 +msgctxt "timerset:inactivity_threshold|desc" +msgid "" +"Number of inactive focus+break stages before a member is removed from the " +"timer." +msgstr "" +"Número de ciclos Foco+Pausa que um membro pode deixar de marcar presença sem" +" que seja retirado do canal." + +#: src/modules/pomodoro/options.py:90 +msgctxt "timerset:inactivity_threshold|desc" +msgid "How many timer cycles before kicking inactive members." +msgstr "" +"Quantidade de ciclos do temporizador antes de retirar um membro que não " +"esteja marcando presença. " + +#: src/modules/pomodoro/options.py:112 +msgctxt "timerset:inactivity_length|desc" +msgid "The inactivity threshold must be a positive whole number!" +msgstr "A tolerância de inatividade precisa ser um número positivo e inteiro!" + +#: src/modules/pomodoro/options.py:120 +msgctxt "timerset:manager_role" +msgid "manager_role" +msgstr "cargo_gerenciador" + +#: src/modules/pomodoro/options.py:123 +msgctxt "timerset:manager_role|desc" +msgid "Role allowed to start, stop, and edit the focus/break lengths." +msgstr "" +"Cargo autorizado a começar, parar, e editar os intervalos do temporizador " +"pomodoro." + +#: src/modules/pomodoro/options.py:137 +msgctxt "timerset:manager_role|format:notset" +msgid "Not Set (Only Admins may start/stop or edit pattern)" +msgstr "" +"Não Configurado (Apenas Administradores poderão iniciar/pausar ou editar o " +"padrão)" + +#: src/modules/pomodoro/options.py:147 +msgctxt "timerset:voice_alerts" +msgid "voice_alerts" +msgstr "alertas_sonoros" + +#: src/modules/pomodoro/options.py:150 +msgctxt "timerset:voice_alerts|desc" +msgid "Whether to join the voice channel and announce focus and break stages." +msgstr "" +"Se devo entrar no canal do temporizador para emitir um alerta sonoro das " +"mudanças de estágio entre foco, e pausa." + +#: src/modules/pomodoro/options.py:162 +msgctxt "timerset:base_name" +msgid "name" +msgstr "nome" + +#: src/modules/pomodoro/options.py:165 +msgctxt "timerset:base_name|desc" +msgid "Timer name, as shown on the timer card." +msgstr "Título que será mostrado no painel do temporizador." + +#: src/modules/pomodoro/options.py:169 +msgctxt "timerset:base_name|accepts" +msgid "Any short name, shown on the timer card." +msgstr "Um nome curto, a ser visto no painel de exibição do temporizador. " + +#: src/modules/pomodoro/options.py:184 +msgctxt "timerset:channel_name_format" +msgid "channel_name" +msgstr "nome_do_canal" + +#: src/modules/pomodoro/options.py:187 +#, possible-python-brace-format +msgctxt "timerset:channel_name_format|desc" +msgid "" +"Auto-updating voice channel name, accepting {remaining}, {name}, {pattern}, " +"and {stage} keys." +msgstr "" +"Configuração de atualização automática do nome do canal. Use o nome do canal" +" intercalado com as chaves {remaining}, {name}, {pattern} e {stage} para " +"formar o nome adequado. " + +#: src/modules/pomodoro/options.py:191 +#, possible-python-brace-format +msgctxt "timerset:channel_name|accepts" +msgid "" +"Timer channel name, with keys {remaining}, {name}, {pattern}, and {stage}." +msgstr "" +"Nome do canal do temporizador. Adicione as chaves {remaining}, {name}, " +"{pattern} e {stage} para personalizar." + +#: src/modules/pomodoro/options.py:221 +msgctxt "timerset:channel_name_format|error:too_long" +msgid "" +"The provided name is too long! Channel names can be at most `100` " +"characters." +msgstr "" +"O nome indicado é muito comprido! Os nomes de canais podem ter, no máximo, " +"ˋ100ˋ caracteres." + +#: src/modules/pomodoro/options.py:240 +msgctxt "timerset:focus_length" +msgid "focus_length" +msgstr "duração_foco" + +#: src/modules/pomodoro/options.py:243 +msgctxt "timerset:focus_length|desc" +msgid "Length of the focus stage of the timer in minutes." +msgstr "Duração, em minutos, do estágio de ˋFocoˋ do temporizador." + +#: src/modules/pomodoro/options.py:248 +msgctxt "timerset:focus_length|accepts" +msgid "A positive integer number of minutes." +msgstr "Um número positivo e inteiro, em minutos." + +#: src/modules/pomodoro/options.py:273 +msgctxt "timerset:focus_length|desc" +msgid "Please enter a positive number of minutes." +msgstr "Por favor, preencha um número positivo de minutos. " + +#: src/modules/pomodoro/options.py:281 +msgctxt "timerset:break_length" +msgid "break_length" +msgstr "duração_pausa" + +#: src/modules/pomodoro/options.py:284 +msgctxt "timerset:break_length|desc" +msgid "Length of the break stage of the timer in minutes." +msgstr "Duração, em minutos, do estágio de ˋPausaˋ do temporizador." + +#: src/modules/pomodoro/options.py:289 +msgctxt "timerset:break_length|accepts" +msgid "A positive integer number of minutes." +msgstr "Um número positivo e inteiro, em minutos." + +#: src/modules/pomodoro/options.py:314 +msgctxt "timerset:break_length|desc" +msgid "Please enter a positive number of minutes." +msgstr "Por favor, preencha um número positivo de minutos." + +#: src/modules/pomodoro/settings.py:19 +msgctxt "guildset:pomodoro_channel" +msgid "pomodoro_channel" +msgstr "canal_pomodoro" + +#: src/modules/pomodoro/settings.py:22 +msgctxt "guildset:pomodoro_channel|desc" +msgid "Default central notification channel for pomodoro timers." +msgstr "Canal padrão de notificações do temporizador pomodoro." + +#: src/modules/pomodoro/settings.py:26 +msgctxt "guildset:pomodoro_channel|long_desc" +msgid "" +"Pomodoro timers which do not have a custom notification channel set will " +"send timer notifications in this channel. If this setting is not set, " +"pomodoro notifications will default to the timer voice channel itself." +msgstr "" +"Temporizadores pomodoro, sem um canal próprio para as notificações, irão " +"enviar as notificações neste canal. Se não estiver configurado, o " +"temporizador pomodoro irá enviar as notificações no próprio canal em que o " +"temporizador está." + +#: src/modules/pomodoro/settings.py:33 +msgctxt "guildset:pomodoro_channel|formatted|notset" +msgid "Not Set (Will use timer voice channel.)" +msgstr "Não Configurado (Irá usar o canal em que está o temporizador)." + +#: src/modules/pomodoro/settings.py:37 +msgctxt "guildset:pomodoro_channel|accepts" +msgid "Timer notification channel name or id." +msgstr "Nome ou ID do canal para enviar as notificações do temporizador." + +#: src/modules/pomodoro/settings.py:51 +#, possible-python-brace-format +msgctxt "guildset:pomodoro_channel|set_response|set" +msgid "Pomodoro timer notifications will now default to {channel}" +msgstr "" +"As notificações do Pomodoro irão, a partir de agora, ser enviadas para " +"{channel}." + +#: src/modules/pomodoro/settings.py:56 +msgctxt "guildset:pomodoro_channel|set_response|unset" +msgid "Pomodoro timer notifications will now default to their voice channel." +msgstr "" +"As notificações do Pomodoro irão, a partir de agora, ser enviada para o " +"próprio canal em que está o temporizador." + +#: src/modules/pomodoro/settings.py:66 +#, possible-python-brace-format +msgctxt "guildset:pomdoro_channel|set_using" +msgid "{cmd} or channel selector below." +msgstr "{cmd} ou seletor de canais abaixo. " + +#: src/modules/pomodoro/ui/edit.py:63 +msgctxt "modal:timer_editor|title" +msgid "Timer Option Editor" +msgstr "Editor das Opções do Temporizador" + +#: src/modules/pomodoro/ui/status.py:61 +msgctxt "ui:timer_status|button:present|ack" +msgid "" +"Thank you for marking your presence.\n" +"Good luck and stay productive!" +msgstr "" +"Obrigado por marcar sua presença.\n" +"Boa sorte, e se mantenha produtivo." + +#: src/modules/pomodoro/ui/status.py:72 +#, possible-python-brace-format +msgctxt "ui:timer_status|button:present|error:not_in_timer" +msgid "" +"You are not in this timer! Join the timer channel by pressing {channel}." +msgstr "" +"Você não faz parte deste temporizador! Você pode entrar nele pressionando " +"aqui {channel}." + +#: src/modules/pomodoro/ui/status.py:82 +msgctxt "ui:timer_status|button:present|label" +msgid "Present" +msgstr "Presente" + +#: src/modules/pomodoro/ui/status.py:106 +msgctxt "ui:timer_status|button:edit|error:no_permissions" +msgid "" +"Configuring this timer requires `MANAGE_CHANNEL` permissions on the timer " +"channel, or the configured manager role!" +msgstr "" +"Para configurar este temporizador, é necessário ter permissão de " +"ˋGERENCIAR_CANALˋ no canal do temporizador, ou estar configurado nesse " +"sistema como autorizado a isto. " + +#: src/modules/pomodoro/ui/status.py:119 +msgctxt "ui:timer_status|button:edit|label" +msgid "Options" +msgstr "Opções" + +#: src/modules/pomodoro/ui/status.py:138 +msgctxt "ui:timer_status|button:start|error:already_running" +msgid "Cannot start a timer that is already running!" +msgstr "Não posso começar um temporizador que já está rodando!" + +#: src/modules/pomodoro/ui/status.py:154 +msgctxt "ui:timer_status|button:start|error:not_manager|title" +msgid "Insufficient permissions!" +msgstr "Premissões insuficientes!" + +#: src/modules/pomodoro/ui/status.py:158 +msgctxt "ui:timer_status|button:start|error:not_manager|desc" +msgid "" +"Starting this timer requires `MANAGE_CHANNEL` permissions on the timer " +"channel, or the configured `manager_role`!" +msgstr "" +"Para iniciar este temporizador, é necessário ter permissão de " +"ˋGERENCIAR_CANALˋ no canal do temporizador, ou estar configurado neste " +"sistema como autorizado a isto." + +#: src/modules/pomodoro/ui/status.py:168 +msgctxt "ui:timer_status|button:start|label" +msgid "Start" +msgstr "Iniciar" + +#: src/modules/pomodoro/ui/status.py:190 +msgctxt "ui:timer_status|button:stop|error:not_manager|title" +msgid "Insufficient permissions!" +msgstr "Permissões insuficientes!" + +#: src/modules/pomodoro/ui/status.py:194 +msgctxt "ui:timer_status|button:stop|error:not_manager|desc" +msgid "" +"Stopping this timer requires `MANAGE_CHANNEL` permissions on the timer " +"channel, or the configured `manager_role`!" +msgstr "" +"Para Pausar o temporizador, é necessário permissão de ˋGERENCIAR_CANALˋ no " +"canal do temporizador, ou estar configurado neste sistema como autorizado a " +"isto. " + +#: src/modules/pomodoro/ui/status.py:204 +msgctxt "ui:timer_status|button:stop|label" +msgid "Stop" +msgstr "Parar" + +#: src/modules/pomodoro/ui/config.py:45 +msgctxt "ui:timer_options|error:timer_destroyed" +msgid "This timer no longer exists! Closing option menu." +msgstr "Este temporizador não existe! Fechando menu de opção." + +#: src/modules/pomodoro/ui/config.py:68 +msgctxt "ui:timer_options|button:edit|label" +msgid "Edit" +msgstr "Editar" + +#: src/modules/pomodoro/ui/config.py:84 +msgctxt "ui:timer_options|button:voice_alerts|label" +msgid "Voice Alerts" +msgstr "Alertas Sonoros" + +#: src/modules/pomodoro/ui/config.py:105 +msgctxt "ui:timer_options|button:delete|success|title" +msgid "Timer Deleted" +msgstr "Temporizador Deletado" + +#: src/modules/pomodoro/ui/config.py:109 +#, possible-python-brace-format +msgctxt "ui:timer_options|button:delete|success|description" +msgid "The timer in {channel} has been removed." +msgstr "O temporizador em {channel} foi removido." + +#: src/modules/pomodoro/ui/config.py:117 +msgctxt "ui:timer_options|button:delete|label" +msgid "Delete" +msgstr "Deletar" + +#: src/modules/pomodoro/ui/config.py:136 +msgctxt "ui:timer_options|menu:voice_channel|placeholder" +msgid "Set Voice Channel" +msgstr "Configurar Canal de Voz" + +#: src/modules/pomodoro/ui/config.py:159 +msgctxt "ui:timer_options|menu:notification_channel|placeholder" +msgid "Set Notification Channel" +msgstr "Configurar Canal de Notificações" + +#: src/modules/pomodoro/ui/config.py:174 +msgctxt "ui:timer_options|menu:manager_role|placeholder" +msgid "Set Manager Role" +msgstr "Configurar Cargo de Gerenciador" + +#: src/modules/pomodoro/ui/config.py:183 +#, possible-python-brace-format +msgctxt "ui:timer_options|embed|title" +msgid "Timer Control Panel for {channel}" +msgstr "Painel de Controle do Temporizador em {channel}" + +#: src/modules/pomodoro/ui/config.py:190 +msgctxt "ui:timer_options|embed|footer" +msgid "Hover over the option names to view descriptions." +msgstr "Passe o mouse sobre o nome para ver as descrições." + +#: src/modules/pomodoro/ui/config.py:202 +msgctxt "ui:timer_options|embed|field:pattern|name" +msgid "Pattern" +msgstr "Padrão" + +#: src/modules/pomodoro/ui/config.py:205 +#, possible-python-brace-format +msgctxt "ui:timer_options|embed|field:pattern|value" +msgid "" +"**`{focus_len} minutes`** focus\n" +"**`{break_len} minutes`** break" +msgstr "" +"**ˋ{focus_len} minutosˋ** Foco\n" +"**ˋ{break_len} minutosˋ** Pausa" + +#: src/modules/pomodoro/ui/config.py:216 +msgctxt "ui:timer_options|embed|field:channel_name|name" +msgid "Channel Name Preview" +msgstr "Prévia do Nome do Canal" + +#: src/modules/pomodoro/ui/config.py:220 +#, possible-python-brace-format +msgctxt "ui:timer_options|embed|field:channel_name|value" +msgid "" +"**`{name}`**\n" +"(The actual channel name may not match due to ratelimits.)" +msgstr "" +"**ˋ{name}ˋ**\n" +"(O nome do canal atual talvez não corresponda exatamente devido a limites de taxa)." + +#: src/modules/pomodoro/ui/config.py:230 +msgctxt "ui:timer_options|embed|field:issues|name" +msgid "Issues" +msgstr "Problemas" + +#: src/modules/pomodoro/ui/config.py:248 +msgctxt "ui:timer_options|issue:no_voice_channel" +msgid "The configured voice channel does not exist! Please update it below." +msgstr "O canal de voz configurado não existe! Por favor atualize ele abaixo." + +#: src/modules/pomodoro/ui/config.py:259 +#, possible-python-brace-format +msgctxt "ui:timer_options|issue:cannot_speak" +msgid "" +"Voice alerts are on, but I don't have speaking permissions in {channel}" +msgstr "" +"Os alertas de voz estão ativados, mas eu não tenho permissão para falar em " +"{channel}. " + +#: src/modules/pomodoro/ui/config.py:266 +#, possible-python-brace-format +msgctxt "ui:timer_options|issue:cannot_change_name" +msgid "" +"I cannot update the name of {channel}! (Needs `MANAGE_CHANNELS` permission)" +msgstr "" +"Eu não posso atualizar o nome do {channel}! (É preciso permissão de " +"ˋGERENCIAR_CANAISˋ)" + +#: src/modules/pomodoro/ui/config.py:277 +msgctxt "ui:timer_options|issue:notif_channel_dne" +msgid "Configured notification channel does not exist!" +msgstr "O canal de notificações configurado não existe!" + +#: src/modules/pomodoro/ui/config.py:286 +#, possible-python-brace-format +msgctxt "ui:timer_options|issue:notif_channel_write" +msgid "" +"I cannot attach files (`ATTACH_FILES`) or send embeds (`EMBED_LINKS`) in " +"{channel}" +msgstr "" +"Eu não pude anexar os arquivos (ˋANEXAR_ARQUIVOSˋ), ou enviar as integrações" +" (ˋINSERIR_LINKSˋ) em {channel}" + +#: src/modules/pomodoro/ui/config.py:294 +#, possible-python-brace-format +msgctxt "ui:timer_options|issues:cannot_make_webhooks" +msgid "" +"I cannot create the notification webhook (`MANAGE_WEBHOOKS`) in {channel}" +msgstr "" +"Eu não posso criar a notificação por Webhook (ˋINSERIR_LINKSˋ) em {channel}." diff --git a/locales/pt_BR/LC_MESSAGES/babel.po b/locales/pt_BR/LC_MESSAGES/babel.po new file mode 100644 index 00000000..f560d88f --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/babel.po @@ -0,0 +1,408 @@ +# 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. +# +# Translators: +# Interitio, 2023 +# Aline Souki, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/babel/settingui.py:40 +msgctxt "ui:locale_config|button:force|label" +msgid "Toggle Force" +msgstr "Forçar alteração" + +#: src/babel/settingui.py:49 +msgctxt "ui:locale_config|embed|title" +msgid "Language Configuration Panel" +msgstr "Painel de Configuração de Idioma" + +#: src/babel/settingui.py:83 +msgctxt "dash:locale|title" +msgid "Server Language Configuration ({commands[configure language]})" +msgstr "Configuração de Idioma do Servidor ({commands[configure language]})" + +#: src/babel/settingui.py:87 +msgctxt "dash:locale|dropdown|placeholder" +msgid "Server Language Panel" +msgstr "Painel de Idioma do Servidor" + +#: src/babel/cog.py:99 +msgctxt "cmd:configure_language" +msgid "language" +msgstr "idioma" + +#: src/babel/cog.py:101 +msgctxt "cmd:configure_language|desc" +msgid "Configure the default language I will use in this server." +msgstr "Configurar o idioma padrão que usarei neste servidor." + +#: src/babel/cog.py:147 +#, possible-python-brace-format +msgctxt "cmd:configure_language|error" +msgid "" +"You cannot enable `{force_setting}` without having a configured language!" +msgstr "" +"Você não pode habilitar `{force_setting}` sem ter um idioma configurado!" + +#: src/babel/cog.py:167 +msgctxt "cmd:configure_language|success" +msgid "Language settings updated!" +msgstr "Configurações de idioma atualizadas!" + +#: src/babel/cog.py:183 +msgctxt "cmd:userconfig_language" +msgid "language" +msgstr "idioma" + +#: src/babel/cog.py:186 +msgctxt "cmd:userconfig_language|desc" +msgid "Set your preferred interaction language." +msgstr "Defina o seu idioma de interação preferido." + +#: src/babel/cog.py:190 +msgctxt "cmd:userconfig_language|param:language" +msgid "language" +msgstr "idioma" + +#: src/babel/cog.py:195 +msgctxt "cmd:userconfig_language|param:language|desc" +msgid "Which language do you want me to respond in?" +msgstr "Em qual idioma você deseja que eu responda?" + +#: src/babel/cog.py:211 +msgctxt "cmd:userconfig_language|button:reset|label" +msgid "Reset" +msgstr "Redefinir" + +#: src/babel/cog.py:252 +#, possible-python-brace-format +msgctxt "acmpl:language|no_match" +msgid "No supported languages matching {partial}" +msgstr "Nenhum idioma suportado correspondente a {partial}" + +#: src/babel/utils.py:9 +msgctxt "utils|months" +msgid "" +"January,February,March,April,May,June,July,August,September,October,November,December" +msgstr "" +"Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro" + +#: src/babel/utils.py:14 +msgctxt "utils|short_months" +msgid "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec" +msgstr "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez" + +#: src/babel/settings.py:23 +msgctxt "settype:locale|accepts" +msgid "Enter a supported language (e.g. 'en-GB')." +msgstr "Digite um idioma compatível (por exemplo, 'pt-BR')." + +#: src/babel/settings.py:34 +msgctxt "settype:locale|summary_table|field:supported|key" +msgid "Supported" +msgstr "Suportado" + +#: src/babel/settings.py:44 +msgctxt "settype:locale|formatted:unset" +msgid "Unset" +msgstr "Não definido" + +#: src/babel/settings.py:60 +#, possible-python-brace-format +msgctxt "settype:locale|error" +msgid "Sorry, we do not support the language `{lang}` at this time!" +msgstr "Desculpe, no momento não oferecemos suporte para o idioma `{lang}`!" + +#: src/babel/settings.py:75 +msgctxt "userset:locale" +msgid "language" +msgstr "idioma" + +#: src/babel/settings.py:76 +msgctxt "userset:locale|desc" +msgid "Your preferred language for interacting with me." +msgstr "O seu idioma preferido para interagir comigo." + +#: src/babel/settings.py:79 +msgctxt "userset:locale|long_desc" +msgid "" +"The language you would prefer me to respond to commands and interactions in." +" Servers may be configured to override this with their own language." +msgstr "" +"O idioma no qual você prefere que eu responda a comandos e interações. Os " +"servidores podem ser configurados para substituir essa configuração pelo seu" +" próprio idioma." + +#: src/babel/settings.py:90 +msgctxt "userset:locale|response" +msgid "You have unset your language." +msgstr "Você removeu o seu idioma." + +#: src/babel/settings.py:92 +#, possible-python-brace-format +msgctxt "userset:locale|response" +msgid "You have set your language to {lang}." +msgstr "Você definiu o seu idioma como {lang}." + +#: src/babel/settings.py:110 +msgctxt "guildset:force_locale" +msgid "force_language" +msgstr "obrigar_idioma" + +#: src/babel/settings.py:112 +msgctxt "guildset:force_locale|desc" +msgid "" +"Whether to force all members to use the configured guild language when " +"interacting with me." +msgstr "" +"Defina se deseja obrigar todos os membros a usar o idioma configurado do " +"servidor ao interagir comigo." + +#: src/babel/settings.py:115 +msgctxt "guildset:force_locale|long_desc" +msgid "" +"When enabled, commands in this guild will always use the configured guild " +"language, regardless of the member's personally configured language." +msgstr "" +"Quando ativado, os comandos neste servidor sempre utilizarão o idioma " +"configurado do servidor, independentemente do idioma pessoal configurado " +"pelo membro." + +#: src/babel/settings.py:119 +msgctxt "guildset:force_locale|output" +msgid "Enabled (members will be forced to use the server language)" +msgstr "Ativado (membros serão obrigados a usar o idioma do servidor)" + +#: src/babel/settings.py:120 +msgctxt "guildset:force_locale|output" +msgid "Disabled (members may set their own language)" +msgstr "Desativado (membros podem definir seu próprio idioma)" + +#: src/babel/settings.py:134 +msgctxt "guildset:force_locale|response" +msgid "I will always use the set language in this server." +msgstr "Sempre vou usar o idioma configurado neste servidor." + +#: src/babel/settings.py:139 +msgctxt "guildset:force_locale|response" +msgid "I will now allow the members to set their own language here." +msgstr "Agora eu vou permitir que membros definam seu próprio idioma aqui." + +#: src/babel/settings.py:156 +msgctxt "guildset:locale" +msgid "language" +msgstr "idioma" + +#: src/babel/settings.py:157 +msgctxt "guildset:locale|desc" +msgid "Your preferred language for interacting with me." +msgstr "Sua opção de idioma para interagir comigo." + +#: src/babel/settings.py:160 +msgctxt "guildset:locale|long_desc" +msgid "" +"The default language to use for responses and interactions in this server. " +"Member's own configured language will override this for their commands " +"unless `force_language` is enabled." +msgstr "" +"O idioma padrão para usar nas respostas e interações neste servidor. A " +"configuração de idioma do membro vai se sobrepor ao idioma padrão nos " +"comandos que ele/ela usar, a não ser que `force_language` esteja ativado." + +#: src/babel/settings.py:172 +msgctxt "guildset:locale|response" +msgid "You have unset the guild language." +msgstr "Você desfez a configuração de idioma da comunidade." + +#: src/babel/settings.py:174 +#, possible-python-brace-format +msgctxt "guildset:locale|response" +msgid "You have set the guild language to {lang}." +msgstr "Você definiu o idioma da comunidade para {lang}." + +#: src/babel/enums.py:43 +msgctxt "localenames|locale:id" +msgid "Indonesian" +msgstr "Indonesian" + +#: src/babel/enums.py:44 +msgctxt "localenames|locale:da" +msgid "Danish" +msgstr "Dinamarquês" + +#: src/babel/enums.py:45 +msgctxt "localenames|locale:de" +msgid "German" +msgstr "Alemão" + +#: src/babel/enums.py:46 +msgctxt "localenames|locale:en-GB" +msgid "English, UK" +msgstr "English, UK" + +#: src/babel/enums.py:47 +msgctxt "localenames|locale:en-US" +msgid "English, US" +msgstr "English, US" + +#: src/babel/enums.py:48 +msgctxt "localenames|locale:es-ES" +msgid "Spanish" +msgstr "Spanish" + +#: src/babel/enums.py:49 +msgctxt "localenames|locale:fr" +msgid "French" +msgstr "Francês" + +#: src/babel/enums.py:50 +msgctxt "localenames|locale:hr" +msgid "Croatian" +msgstr "Croata" + +#: src/babel/enums.py:51 +msgctxt "localenames|locale:it" +msgid "Italian" +msgstr "Italiano" + +#: src/babel/enums.py:52 +msgctxt "localenames|locale:lt" +msgid "Lithuanian" +msgstr "Lituano" + +#: src/babel/enums.py:53 +msgctxt "localenames|locale:hu" +msgid "Hungarian" +msgstr "Húngaro" + +#: src/babel/enums.py:54 +msgctxt "localenames|locale:nl" +msgid "Dutch" +msgstr "Holandês" + +#: src/babel/enums.py:55 +msgctxt "localenames|locale:no" +msgid "Norwegian" +msgstr "Norueguês" + +#: src/babel/enums.py:56 +msgctxt "localenames|locale:pl" +msgid "Polish" +msgstr "Polonês" + +#: src/babel/enums.py:57 +msgctxt "localenames|locale:pt-BR" +msgid "Portuguese, Brazilian" +msgstr "Portugues, Brasileiro" + +#: src/babel/enums.py:58 +msgctxt "localenames|locale:ro" +msgid "Romanian, Romania" +msgstr "Romanian, Romania" + +#: src/babel/enums.py:59 +msgctxt "localenames|locale:fi" +msgid "Finnish" +msgstr "Finlandês" + +#: src/babel/enums.py:60 +msgctxt "localenames|locale:sv-SE" +msgid "Swedish" +msgstr "Sueco" + +#: src/babel/enums.py:61 +msgctxt "localenames|locale:vi" +msgid "Vietnamese" +msgstr "Vietnamita" + +#: src/babel/enums.py:62 +msgctxt "localenames|locale:tr" +msgid "Turkish" +msgstr "Turco" + +#: src/babel/enums.py:63 +msgctxt "localenames|locale:cs" +msgid "Czech" +msgstr "Tcheco" + +#: src/babel/enums.py:64 +msgctxt "localenames|locale:el" +msgid "Greek" +msgstr "Grego" + +#: src/babel/enums.py:65 +msgctxt "localenames|locale:bg" +msgid "Bulgarian" +msgstr "Búlgaro" + +#: src/babel/enums.py:66 +msgctxt "localenames|locale:ru" +msgid "Russian" +msgstr "Russo" + +#: src/babel/enums.py:67 +msgctxt "localenames|locale:uk" +msgid "Ukrainian" +msgstr "Ucraniano" + +#: src/babel/enums.py:68 +msgctxt "localenames|locale:hi" +msgid "Hindi" +msgstr "Hindi" + +#: src/babel/enums.py:69 +msgctxt "localenames|locale:th" +msgid "Thai" +msgstr "Tailandês" + +#: src/babel/enums.py:70 +msgctxt "localenames|locale:zh-CN" +msgid "Chinese, China" +msgstr "Chinese, China" + +#: src/babel/enums.py:71 +msgctxt "localenames|locale:ja" +msgid "Japanese" +msgstr "Japonês" + +#: src/babel/enums.py:72 +msgctxt "localenames|locale:zh-TW" +msgid "Chinese, Taiwan" +msgstr "Chinese, Taiwan" + +#: src/babel/enums.py:73 +msgctxt "localenames|locale:ko" +msgid "Korean" +msgstr "Coreano" + +#: src/babel/enums.py:78 +msgctxt "localenames|locale:he" +msgid "Hebrew" +msgstr "Hebreu" + +#: src/babel/enums.py:79 +msgctxt "localenames|locale:he-IL" +msgid "Hebrew" +msgstr "Hebrew" + +#: src/babel/enums.py:80 +msgctxt "localenames|locale:test" +msgid "Test Language" +msgstr "Testar Idioma" diff --git a/locales/pt_BR/LC_MESSAGES/base.po b/locales/pt_BR/LC_MESSAGES/base.po new file mode 100644 index 00000000..73545e26 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/base.po @@ -0,0 +1,39 @@ +# 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. +# +# Translators: +# Tatiana Tenuto, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-22 13:17+0200\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: bot/modules/sysadmin/exec_cog.py:70 +msgid "You cannot use this interface!" +msgstr "Você não pode usar essa interface!" + +#: bot/modules/sysadmin/exec_cog.py:252 bot/modules/sysadmin/exec_cog.py:254 +msgid "async" +msgstr "async" + +#: bot/modules/sysadmin/exec_cog.py:253 bot/modules/sysadmin/exec_cog.py:255 +msgid "Execute arbitrary code with Exec" +msgstr "Executar código arbitrário com Exec" + +#: bot/modules/sysadmin/exec_cog.py:265 +msgid "eval" +msgstr "eval" diff --git a/locales/pt_BR/LC_MESSAGES/config.po b/locales/pt_BR/LC_MESSAGES/config.po new file mode 100644 index 00000000..48a8e8e3 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/config.po @@ -0,0 +1,92 @@ +# 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. +# +# Translators: +# Interitio, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/config/general.py:41 +msgctxt "guildset:timezone" +msgid "timezone" +msgstr "fuso horário" + +#: src/modules/config/general.py:44 +msgctxt "guildset:timezone|desc" +msgid "Guild timezone for statistics display." +msgstr "Fuso horário da comunidade para exibição das estatísticas." + +#: src/modules/config/general.py:48 +msgctxt "guildset:timezone|long_desc" +msgid "" +"Guild-wide timezone. Used to determine start of the day for the " +"leaderboards, and as the default statistics timezone for members who have " +"not set one." +msgstr "" +"Fuso horário para a comunidade inteira. Usado para definir o início do dia " +"para as classificações e como fuso horário padrão para estatísticas no caso " +"de membros que não tenham um fuso configurado." + +#: src/modules/config/general.py:62 +#, possible-python-brace-format +msgctxt "guildset:timezone|response" +msgid "The guild timezone has been set to `{timezone}`." +msgstr "O fuso horário da comunidade foi definido como `{timezone}`." + +#: src/modules/config/general.py:94 +msgctxt "cmd:configure_general" +msgid "general" +msgstr "geral" + +#: src/modules/config/general.py:95 +msgctxt "cmd:configure_general|desc" +msgid "General configuration panel" +msgstr "Painel de configuração geral" + +#: src/modules/config/general.py:129 +msgctxt "cmd:configure_general|parse_failure:timezone" +msgid "Could not set the timezone!" +msgstr "Não foi possível configurar o fuso horário!" + +#: src/modules/config/general.py:150 +msgctxt "cmd:configure_general|success" +msgid "Settings Updated!" +msgstr "Configurações atualizadas!" + +#: src/modules/config/general.py:165 +msgctxt "cmd:configure_general|panel|title" +msgid "General Configuration Panel" +msgstr "Painel de Configuração Geral" + +#: src/modules/config/dashboard.py:98 +#, possible-python-brace-format +msgctxt "ui:dashboard|title" +msgid "Guild Dashboard (Page {page}/{total})" +msgstr "Painel do Servidor (Página {page}/{total})" + +#: src/modules/config/dashboard.py:109 +msgctxt "ui:dashboard|footer" +msgid "Hover over setting names for a brief description" +msgstr "" +"Posicione o mouse sobre as configurações para uma breve descrição da função." + +#: src/modules/config/dashboard.py:172 +msgctxt "ui:dashboard|menu:config|placeholder" +msgid "Open Configuration Panel" +msgstr "Abrir Painel de Configuração" diff --git a/locales/pt_BR/LC_MESSAGES/core_config.po b/locales/pt_BR/LC_MESSAGES/core_config.po new file mode 100644 index 00000000..02b44b21 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/core_config.po @@ -0,0 +1,33 @@ +# 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. +# +# Translators: +# Interitio, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/core/config.py:28 +msgctxt "group:configure" +msgid "configure" +msgstr "configurar" + +#: src/core/config.py:29 +msgctxt "group:configure|desc" +msgid "View and adjust my configuration options." +msgstr "Ver e ajustar minhas opções de configuração." diff --git a/locales/pt_BR/LC_MESSAGES/economy.po b/locales/pt_BR/LC_MESSAGES/economy.po new file mode 100644 index 00000000..874eab4b --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/economy.po @@ -0,0 +1,594 @@ +# 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. +# +# Translators: +# Tatiana Tenuto, 2023 +# Aline Souki, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/economy/settingui.py:33 +msgctxt "ui:economy_config|embed|title" +msgid "Economy Configuration Panel" +msgstr "Painel de Configuração do Sistema Financeiro" + +#: src/modules/economy/settingui.py:68 +msgctxt "dash:economy|title" +msgid "Economy Configuration ({commands[configure economy]})" +msgstr "Configuração do Sistema Financeiro ({commands[configure economy]})" + +#: src/modules/economy/settingui.py:72 +msgctxt "dash:economy|dropdown|placeholder" +msgid "Economy Panel" +msgstr "Painel do Financeiro" + +#. ----- Economy group commands ----- +#: src/modules/economy/cog.py:86 +msgctxt "cmd:economy" +msgid "economy" +msgstr "financeiro" + +#: src/modules/economy/cog.py:92 +msgctxt "cmd:economy_balance" +msgid "balance" +msgstr "saldo" + +#: src/modules/economy/cog.py:95 +msgctxt "cmd:economy_balance|desc" +msgid "Display or modify LionCoin balance for members and roles." +msgstr "Exiba ou modifique o saldo de LionCoin para membros e cargos." + +#: src/modules/economy/cog.py:99 +msgctxt "cmd:economy_balance|param:target" +msgid "target" +msgstr "selecionar" + +#: src/modules/economy/cog.py:100 +msgctxt "cmd:economy_balance|param:add" +msgid "add" +msgstr "adicionar" + +#: src/modules/economy/cog.py:101 +msgctxt "cmd:economy_balance|param:set" +msgid "set" +msgstr "definir" + +#: src/modules/economy/cog.py:106 +msgctxt "cmd:economy_balance|param:target|desc" +msgid "" +"Target user or role to view or update. Use @everyone to update the entire " +"guild." +msgstr "" +"Selecione um usuário ou cargo para visualizar ou atualizar. Use @todos para " +"atualizar a comunidade inteira." + +#: src/modules/economy/cog.py:110 +msgctxt "cmd:economy_balance|param:add|desc" +msgid "" +"Number of LionCoins to add to the target member's balance. May be negative " +"to remove." +msgstr "" +"Quantidade de LionCoins a ser adicionada ao saldo do membro selecionado. " +"Pode ser negativo para subtrair do saldo." + +#: src/modules/economy/cog.py:114 +msgctxt "cmd:economy_balance|param:set|set" +msgid "New balance to set the target's balance to." +msgstr "Novo saldo a ser definido para o selecionado." + +#: src/modules/economy/cog.py:152 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|error:no_target" +msgid "" +"There are no valid members in {role.mention}! It has a total of `0` LC." +msgstr "Não há membros válidos em {role.mention}! O total é de `0` LC." + +#: src/modules/economy/cog.py:163 +msgctxt "cmd:economy_balance|error:target_is_bot" +msgid "Bots cannot have coin balances!" +msgstr "Bots não podem ter saldos de moedas!" + +#: src/modules/economy/cog.py:174 +msgctxt "cmd:economy_balance|error:args" +msgid "You cannot simultaneously `set` and `add` member balances!" +msgstr "" +"Você não pode `definir` e `adicionar` saldos de membro simultaneamente!" + +#: src/modules/economy/cog.py:223 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:success|affected" +msgid "One user was affected." +msgid_plural "**{count}** users were affected." +msgstr[0] "Um usuário foi afetado." +msgstr[1] "**{count}** usuários foram afetados." +msgstr[2] "**{count}** usuários foram afetados." + +#: src/modules/economy/cog.py:229 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|confirm|affected" +msgid "One user will be affected." +msgid_plural "**{count}** users will be affected." +msgstr[0] "Um usuário será afetado." +msgstr[1] "**{count}** usuários serão afetados." +msgstr[2] "**{count}** usuários serão afetados." + +#: src/modules/economy/cog.py:236 +msgctxt "cmd:economy_balance|confirm|button:confirm" +msgid "Yes, adjust balances" +msgstr "Sim, ajuste os saldos" + +#: src/modules/economy/cog.py:240 +msgctxt "cmd:economy_balance|confirm|button:cancel" +msgid "No, cancel" +msgstr "Não, cancelar" + +#: src/modules/economy/cog.py:247 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:success_set|desc" +msgid "" +"All members of **{guild_name}** have had their balance set to " +"{coin_emoji}**{amount}**." +msgstr "" +"Todos os membros de **{guild_name}** tiveram seu saldo definido para " +"{coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:256 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|confirm_set|desc" +msgid "" +"Are you sure you want to set everyone's balance to {coin_emoji}**{amount}**?" +msgstr "" +"Tem certeza que deseja ajustar o saldo de todos para " +"{coin_emoji}**{amount}**?" + +#: src/modules/economy/cog.py:264 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:success_set|desc" +msgid "" +"All members of {role_mention} have had their balance set to " +"{coin_emoji}**{amount}**." +msgstr "" +"Todos os membros {role_mention} tiveram seus saldos definidos para " +"{coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:273 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|confirm_set|desc" +msgid "" +"Are you sure you want to set the balance of everyone with {role_mention} to " +"{coin_emoji}**{amount}**?" +msgstr "" +"Você tem certeza que quer definir o saldo de todos com o cargo " +"{role_mention} para {coin_emoji}**{amount}**?" + +#: src/modules/economy/cog.py:290 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:success_set|desc" +msgid "{user_mention} now has a balance of {coin_emoji}**{amount}**." +msgstr "{user_mention} agora tem o saldo de {coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:306 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:success_add|desc" +msgid "" +"All members of **{guild_name}** have been given {coin_emoji}**{amount}**." +msgstr "" +"Todos os membros de **{guild_name}** receberam {coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:315 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|confirm_add|desc" +msgid "Are you sure you want to add **{amount}** to everyone's balance?" +msgstr "" +"Você tem certeza que deseja adicionar **{amount}** para o saldo de todo " +"mundo?" + +#: src/modules/economy/cog.py:323 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:success_add|desc" +msgid "" +"All members of {role_mention} have been given {coin_emoji}**{amount}**." +msgstr "" +"Todos os membros de {role_mention} receberam {coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:332 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|confirm_add|desc" +msgid "" +"Are you sure you want to add {coin_emoji}**{amount}** to everyone in " +"{role_mention}?" +msgstr "" +"Você tem certeza que quer adicionar {coin_emoji}**{amount}** para todos em " +"{role_mention}?" + +#: src/modules/economy/cog.py:354 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:success_add|desc" +msgid "" +"{user_mention} was given {coin_emoji}**{amount}**, and now has a balance of " +"{coin_emoji}**{new_amount}**." +msgstr "" +"{user_mention} recebeu {coin_emoji}**{amount}**, e agora tem um saldo de " +"{coin_emoji}**{new_amount}**." + +#: src/modules/economy/cog.py:365 +msgctxt "cmd:economy_balance|embed:success|title" +msgid "Account successfully updated." +msgid_plural "Accounts successfully updated." +msgstr[0] "A conta foi atualizada com sucesso!" +msgstr[1] "As contas foram atualizadas com sucesso!" +msgstr[2] "As contas foram atualizadas com sucesso!" + +#: src/modules/economy/cog.py:409 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:role_lb|author" +msgid "Balance sheet for {name}" +msgstr "Extrato de saldos de {name}" + +#: src/modules/economy/cog.py:415 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:role_lb|header" +msgid "This server has a total balance of {coin_emoji}**{total}**." +msgstr "Este servidor tem um saldo total de {coin_emoji}**{total}**." + +#: src/modules/economy/cog.py:423 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:role_lb|header" +msgid "" +"{role_mention} has `{count}` members with non-zero balance, with a total " +"balance of {coin_emoji}**{total}**." +msgstr "" +"{role_mention} tem ˋ{count}ˋ membros com saldo diferente de zero, com um " +"saldo total de {coin_emoji}**{total}**." + +#: src/modules/economy/cog.py:435 +msgctxt "cmd:economy_balance|embed:role_lb|row_format" +msgid "`[{pos:>{numwidth}}]` | `{coins:>{coinwidth}} LC` | {mention}" +msgstr "`[{pos:>{numwidth}}]` | `{coins:>{coinwidth}} LC` | {mention}" + +#: src/modules/economy/cog.py:463 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:role_lb|footer" +msgid "Page {page}/{total}" +msgstr "Página {page}/{total}" + +#: src/modules/economy/cog.py:473 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:role_lb|header" +msgid "This server has a total balance of {coin_emoji}**0**." +msgstr "Este servidor tem o saldo total de {coin_emoji}**0**." + +#: src/modules/economy/cog.py:480 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:role_lb|header" +msgid "The role {role_mention} has a total balance of {coin_emoji}**0**." +msgstr "O cargo {role_mention} tem o saldo total de {coin_emoji}**0**." + +#: src/modules/economy/cog.py:500 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:single|desc" +msgid "{mention} currently owns {coin_emoji} {coins}." +msgstr "{mention} possui atualmente {coins_emoji} {coins}." + +#: src/modules/economy/cog.py:510 +#, possible-python-brace-format +msgctxt "cmd:economy_balance|embed:single|author" +msgid "Balance statement for {user}" +msgstr "Extrato de saldo para {user}" + +#: src/modules/economy/cog.py:519 +msgctxt "cmd:economy_reset" +msgid "reset" +msgstr "resetar" + +#: src/modules/economy/cog.py:522 +msgctxt "cmd:economy_reset|desc" +msgid "" +"Reset the coin balance for a target user or role. (See also \"economy " +"balance\".)" +msgstr "" +"Resetar o saldo de moedas de um determinado cargo, ou usuário. (Veja também " +"o \"balanço do financeiro\")." + +#: src/modules/economy/cog.py:526 +msgctxt "cmd:economy_reset|param:target" +msgid "target" +msgstr "alvo" + +#: src/modules/economy/cog.py:531 +msgctxt "cmd:economy_reset|param:target|desc" +msgid "" +"Target user or role to view or update. Use @everyone to reset the entire " +"guild." +msgstr "" +"Usuário alvo, ou cargo, para ver ou alterar. Use @everyone para resetar " +"todos os membros." + +#: src/modules/economy/cog.py:558 +#, possible-python-brace-format +msgctxt "cmd:economy_reset|confirm:reset_guild|desc" +msgid "" +"Are you sure you want to reset the coin balance for everyone in **{guild_name}**?\n" +"*This is not reversible!*" +msgstr "" +"Você tem certeza que deseja resetar o saldo de moedas de todos de **{guild_name}**?\n" +"*Isto não será reversível!*" + +#: src/modules/economy/cog.py:566 +msgctxt "cmd:economy_reset|confirm:reset_guild|button:confirm" +msgid "Yes, reset the economy" +msgstr "Sim, resetar o sistema de saldos." + +#: src/modules/economy/cog.py:570 +msgctxt "cmd:economy_reset|confirm:reset_guild|button:cancel" +msgid "Cancel reset" +msgstr "Cancelar a ação de resetar." + +#: src/modules/economy/cog.py:586 +#, possible-python-brace-format +msgctxt "cmd:economy_reset|embed:success_guild|desc" +msgid "" +"Everyone in **{guild_name}** has had their balance reset to " +"{coin_emoji}**{amount}**." +msgstr "" +"Todos em **{guild_name}** tiveram seu saldo atualizado para " +"{coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:603 +#, possible-python-brace-format +msgctxt "cmd:economy_reset|error:no_target|desc" +msgid "The role {mention} has no members to reset!" +msgstr "O cargo {mention} não possui membros para resetar." + +#: src/modules/economy/cog.py:613 +#, possible-python-brace-format +msgctxt "cmd:economy_reset|confirm:reset_role|desc" +msgid "" +"Are you sure you want to reset the balance for everyone in {mention}?\n" +"**{count}** members will be affected." +msgstr "" +"Você tem certeza que quer resetar o saldo de todo mundo em {mention}?\n" +"**{count}** membros serão afetados por isto." + +#: src/modules/economy/cog.py:622 +msgctxt "cmd:economy_reset|confirm:reset_role|button:confirm" +msgid "Yes, complete economy reset" +msgstr "Sim, restar completamente o sistema financeiro." + +#: src/modules/economy/cog.py:626 +msgctxt "cmd:economy_reset|confirm:reset_role|button:cancel" +msgid "Cancel" +msgstr "Cancelar" + +#: src/modules/economy/cog.py:643 +#, possible-python-brace-format +msgctxt "cmd:economy_reset|embed:success_role|desc" +msgid "" +"Everyone in {role_mention} has had their coin balance reset to " +"{coin_emoji}**{amount}**." +msgstr "" +"Todos em {role_mention} tiveram seus saldos atualizados para " +"{coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:665 +#, possible-python-brace-format +msgctxt "cmd:economy_reset|embed:success_user|desc" +msgid "{mention}'s balance has been reset to {coin_emoji}**{amount}**." +msgstr "O saldo de {mention} foi atualizado para {coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:675 +msgctxt "cmd:send" +msgid "send" +msgstr "enviar" + +#: src/modules/economy/cog.py:678 +msgctxt "cmd:send|desc" +msgid "Gift the target user a certain number of LionCoins." +msgstr "Presenteie um determinado usuário com um certo valor em LionCoins." + +#: src/modules/economy/cog.py:682 +msgctxt "cmd:send|param:target" +msgid "target" +msgstr "alvo" + +#: src/modules/economy/cog.py:683 +msgctxt "cmd:send|param:amount" +msgid "amount" +msgstr "quantidade" + +#: src/modules/economy/cog.py:684 +msgctxt "cmd:send|param:note" +msgid "note" +msgstr "nota" + +#: src/modules/economy/cog.py:687 +msgctxt "cmd:send|param:target|desc" +msgid "User to send the gift to" +msgstr "Usuário que será presenteado" + +#: src/modules/economy/cog.py:688 +msgctxt "cmd:send|param:amount|desc" +msgid "Number of coins to send" +msgstr "Número de moedas a enviar" + +#: src/modules/economy/cog.py:689 +msgctxt "cmd:send|param:note|desc" +msgid "Optional note to add to the gift." +msgstr "Bilhete opicional para enviar juntamente com o presente." + +#: src/modules/economy/cog.py:713 +msgctxt "cmd:send|error:not_allowed" +msgid "Sorry, this server has disabled LionCoin transfers!" +msgstr "" +"Desculpe, este servidor desabilitou o sistema de tansferências de LionCoins!" + +#: src/modules/economy/cog.py:722 +msgctxt "cmd:send|error:sending-to-self" +msgid "" +"What is this, tax evasion?\n" +"(You can not send coins to yourself.)" +msgstr "" +"O que é isto? Tentativa de sonegação de impostos? Vou chamar uma Seita de Auditores!\n" +"(Você não pode enviar moedas para você mesmo.)" + +#: src/modules/economy/cog.py:732 +msgctxt "cmd:send|error:sending-to-leo" +msgid "" +"I appreciate it, but you need it more than I do!\n" +"(You cannot send coins to bots.)" +msgstr "" +"Eu adoraria ser agraciado, mas você precisa disto mais do que eu!\n" +"(Você não pode enviar moedas aos bots.)" + +#: src/modules/economy/cog.py:742 +#, possible-python-brace-format +msgctxt "cmd:send|error:sending-to-bot" +msgid "" +"{target} appreciates the gesture, but said they don't have any use for {coin}.\n" +"(You cannot send coins to bots.)" +msgstr "" +"{target} agradece a gentileza, mas recusou. Deve estar com moedas sobrando e não precisa de {coin}.\n" +"(Você não pode enviar moedas para os bots) " + +#: src/modules/economy/cog.py:770 +#, possible-python-brace-format +msgctxt "cmd:send|error:insufficient" +msgid "" +"You do not have enough lioncoins to do this!\n" +"`Current Balance:` {coin_emoji}{balance}" +msgstr "" +"Você não tem LionCoins suficientes para fazer isto!\n" +"ˋSaldo Atual:ˋ {coin_emoji}{balance}" + +#: src/modules/economy/cog.py:791 +#, possible-python-brace-format +msgctxt "cmd:send|embed:gift|title" +msgid "{user} sent you a gift!" +msgstr "{user} te enviou um presente!" + +#: src/modules/economy/cog.py:795 +#, possible-python-brace-format +msgctxt "cmd:send|embed:gift|desc" +msgid "{mention} sent you {coin_emoji}**{amount}**." +msgstr "{mention} te enviou {coin_emoji}**{amount}**." + +#: src/modules/economy/cog.py:820 +#, possible-python-brace-format +msgctxt "cmd:send|embed:ack|desc" +msgid "" +"**{coin_emoji}{amount}** has been deducted from your balance and sent to " +"{mention}!" +msgstr "" +"**{coin_emoji}{amount}** foi retirado do seu saldo e enviado a {mention}!" + +#: src/modules/economy/cog.py:830 +msgctxt "cmd:send|embed:ack|desc|error:unreachable" +msgid "" +"Unfortunately, I was not able to message the recipient. Perhaps they have me" +" blocked?" +msgstr "" +"Infelizmente, eu não estou habilitado para receber mensagens. Será que eles " +"me bloquearam?" + +#: src/modules/economy/cog.py:842 +msgctxt "cmd:configure_economy" +msgid "economy" +msgstr "financeiro" + +#: src/modules/economy/cog.py:845 +msgctxt "cmd:configure_economy|desc" +msgid "Configure LionCoin Economy" +msgstr "Configure o Sistema Financeiro de LionCoin" + +#: src/modules/economy/settings.py:35 +msgctxt "guildset:coins_per_xp" +msgid "coins_per_100xp" +msgstr "moedas_cada_100xp" + +#: src/modules/economy/settings.py:38 +msgctxt "guildset:coins_per_xp|desc" +msgid "How many LionCoins to reward members per 100 XP they earn." +msgstr "Quantas LionCoins recompensar a cada 100 XP que eles ganharem. " + +#: src/modules/economy/settings.py:42 +msgctxt "guildset:coins_per_xp|long_desc" +msgid "" +"Members will be rewarded with this many LionCoins for every 100 XP they " +"earn." +msgstr "" +"Os membros serão recompensados com esta quantidade de LionCoins para cada " +"100 XP que ganharem." + +#: src/modules/economy/settings.py:46 +msgctxt "guildset:coins_per_xp|long_desc" +msgid "The number of coins to reward per 100 XP." +msgstr "O número de moedas a recompensar por 100 xp." + +#: src/modules/economy/settings.py:59 +#, possible-python-brace-format +msgctxt "guildset:coins_per_xp|set_response" +msgid "" +"For every **100** XP they earn, members will now be given " +"{coin}**{amount}**." +msgstr "" +"Para cada **100** XP acumuladas, os membros irão ser pagos " +"{coin}**{amount}**." + +#: src/modules/economy/settings.py:70 +msgctxt "guildset:allow_transfers" +msgid "allow_transfers" +msgstr "permitir_transferências" + +#: src/modules/economy/settings.py:73 +msgctxt "guildset:allow_transfers|desc" +msgid "Whether to allow members to transfer LionCoins to each other." +msgstr "Se permitir aos membros transferir LionCoins entre eles." + +#: src/modules/economy/settings.py:77 +msgctxt "guildset:allow_transfers|long_desc" +msgid "" +"If disabled, members will not be able to transfer LionCoins to each other." +msgstr "" +"Caso desabilitado, os membros não estarão permitidos a transferir LionCoins " +"entre eles." + +#: src/modules/economy/settings.py:85 +msgctxt "guildset:allow_transfers|outputs:true" +msgid "Enabled (Coin transfers allowed.)" +msgstr "Habilitado (Transferência de moedas permitida)." + +#: src/modules/economy/settings.py:86 +msgctxt "guildset:allow_transfers|outputs:false" +msgid "Disabled (Coin transfers not allowed.)" +msgstr "Desabilitado (Transferência de moedas não permitida)." + +#: src/modules/economy/settings.py:102 +#, possible-python-brace-format +msgctxt "guildset:allow_transfers|set_response|set:true" +msgid "Members will now be able to use {send_cmd} to transfer {coin}" +msgstr "" +"Membros estarão permitidos a usar {send_cmd} para transferência de {coin}" + +#: src/modules/economy/settings.py:107 +#, possible-python-brace-format +msgctxt "guildset:allow_transfers|set_response|set:false" +msgid "Members will not be able to use {send_cmd} to transfer {coin}" +msgstr "" +"Membros não estarão permitidos a usar {send_cmd} para transferência de " +"{coin}" diff --git a/locales/pt_BR/LC_MESSAGES/exec.po b/locales/pt_BR/LC_MESSAGES/exec.po new file mode 100644 index 00000000..8991a096 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/exec.po @@ -0,0 +1,100 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/sysadmin/exec_cog.py:269 +msgctxt "ward:sys_admin|failed" +msgid "You must be a bot owner to do this!" +msgstr "Você precisa ser o dono do bot para fazer isto!" + +#: src/modules/sysadmin/exec_cog.py:274 +msgid "async" +msgstr "async" + +#: src/modules/sysadmin/exec_cog.py:275 +msgid "Execute arbitrary code with Exec" +msgstr "Execute códigos arbitrários com Exec" + +#: src/modules/sysadmin/exec_cog.py:337 +msgctxt "command" +msgid "eval" +msgstr "eval" + +#: src/modules/sysadmin/exec_cog.py:338 +msgctxt "command:eval" +msgid "Execute arbitrary code with Eval" +msgstr "Execute códigos arbitrários com Eval" + +#: src/modules/sysadmin/exec_cog.py:341 +msgctxt "command:eval|param:string" +msgid "Code to evaluate." +msgstr "Código a avaliar." + +#: src/modules/sysadmin/exec_cog.py:348 +msgctxt "command" +msgid "asyncall" +msgstr "asyncall" + +#: src/modules/sysadmin/exec_cog.py:349 +msgctxt "command:asyncall|desc" +msgid "Execute arbitrary code on all shards." +msgstr "Executar código arbitrário em todos fragmentos." + +#: src/modules/sysadmin/exec_cog.py:352 +msgctxt "command:asyncall|param:string" +msgid "Cross-shard code to execute. Cannot reference ctx!" +msgstr "Código Cross-Shard a executar. Não pode referenciar ctx!" + +#: src/modules/sysadmin/exec_cog.py:353 +msgctxt "command:asyncall|param:target" +msgid "Target shard app name, see autocomplete for options." +msgstr "" +"Nome do fragmento alvo do app. Escolha uma opção no auto-preenchimento." + +#: src/modules/sysadmin/exec_cog.py:396 +msgid "reload" +msgstr "recarregar" + +#: src/modules/sysadmin/exec_cog.py:397 +msgid "Reload a given LionBot extension. Launches an ExecUI." +msgstr "" +"O LionBot recebeu uma extenção através de \"recarregar\". Lançar um ExecUI." + +#: src/modules/sysadmin/exec_cog.py:400 +msgid "Name of the extension to reload. See autocomplete for options." +msgstr "" +"Nome da extensão para recarregar. Veja as opções que aparecem no auto-" +"preenchimento." + +#: src/modules/sysadmin/exec_cog.py:401 +msgid "Whether to force an extension reload even if it doesn't exist." +msgstr "" +"Se devo insistir em recarregar uma extensão, mesmo que ela não esteja " +"existente." + +#: src/modules/sysadmin/exec_cog.py:437 +msgid "shutdown" +msgstr "desligar" + +#: src/modules/sysadmin/exec_cog.py:438 +msgid "Shutdown (or restart) the client." +msgstr "Desligar (ou reiniciar) o client." diff --git a/locales/pt_BR/LC_MESSAGES/goals-gui.po b/locales/pt_BR/LC_MESSAGES/goals-gui.po new file mode 100644 index 00000000..06fbe2f7 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/goals-gui.po @@ -0,0 +1,108 @@ +# 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. +# +# Translators: +# Interitio, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/gui/cards/goals.py:95 +msgctxt "skin:goals|goal:tasks|name" +msgid "TASKS DONE" +msgstr "TAREFAS CONCLUÍDAS" + +#: src/gui/cards/goals.py:99 +msgctxt "skin:goals|goal:tasks|goal" +msgid "GOAL: " +msgstr "META:" + +#: src/gui/cards/goals.py:125 +msgctxt "skin:goals|goal:attendance|name" +msgid "" +"ATTENDANCE\n" +"RATE" +msgstr "" +"COMPARECIMENTO\n" +"MÉDIA" + +#: src/gui/cards/goals.py:139 +msgctxt "skin:goals|mode:study|goal:middle|above" +msgid "STUDIED" +msgstr "ESTUDADAS" + +#: src/gui/cards/goals.py:143 +msgctxt "skin:goals|mode:study|goal:middle|below" +msgid "HOURS" +msgstr "HORAS" + +#: src/gui/cards/goals.py:147 +msgctxt "skin:goals|mode:voice|goal:middle|above" +msgid "CHATTED" +msgstr "CONVERSADAS" + +#: src/gui/cards/goals.py:151 +msgctxt "skin:goals|mode:voice|goal:middle|below" +msgid "HOURS" +msgstr "HORAS" + +#: src/gui/cards/goals.py:155 +msgctxt "skin:goals|mode:text|goal:middle|above" +msgid "SENT" +msgstr "ENVIADAS" + +#: src/gui/cards/goals.py:159 +msgctxt "skin:goals|mode:text|goal:middle|below" +msgid "MESSAGES" +msgstr "MENSAGENS" + +#: src/gui/cards/goals.py:163 +msgctxt "skin:goals|mode:anki|goal:middle|above" +msgid "REVIEWED" +msgstr "REVISADOS" + +#: src/gui/cards/goals.py:167 +msgctxt "skin:goals|mode:anki|goal:middle|below" +msgid "CARDS" +msgstr "CARTÕES" + +#: src/gui/cards/goals.py:228 +#, possible-python-brace-format +msgctxt "skin:goals|footer" +msgid "As of {day} {month} • {name}" +msgstr "A partir de {day} {month} • {name}" + +#: src/gui/cards/goals.py:240 +msgctxt "ui:goals|weekly|title" +msgid "WEEKLY STATISTICS" +msgstr "ESTATÍSTICAS SEMANAIS" + +#: src/gui/cards/goals.py:244 +msgctxt "ui:goals|weekly|task_header" +msgid "GOALS OF THE WEEK" +msgstr "METAS DA SEMANA" + +#: src/gui/cards/goals.py:254 +msgctxt "ui:goals|monthly|title" +msgid "MONTHLY STATISTICS" +msgstr "ESTATÍSTICAS MENSAIS" + +#: src/gui/cards/goals.py:258 +msgctxt "ui:goals|monthly|task_header" +msgid "GOALS OF THE MONTH" +msgstr "METAS DO MÊS" diff --git a/locales/pt_BR/LC_MESSAGES/leaderboard-gui.po b/locales/pt_BR/LC_MESSAGES/leaderboard-gui.po new file mode 100644 index 00000000..7ae4e615 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/leaderboard-gui.po @@ -0,0 +1,95 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/gui/cards/leaderboard.py:69 +msgctxt "skin:leaderboard|mode:study|header_text" +msgid "STUDY TIME LEADERBOARD" +msgstr "CLASSIFICAÇÃO TEMPO DE ESTUDOS" + +#: src/gui/cards/leaderboard.py:73 +msgctxt "skin:leaderboard|mode:text|header_text" +msgid "MESSAGE LEADERBOARD" +msgstr "CLASSIFICAÇÃO DE CONVERSAÇÃO" + +#: src/gui/cards/leaderboard.py:77 +msgctxt "skin:leaderboard|mode:voice|header_text" +msgid "VOICE LEADERBOARD" +msgstr "CLASSIFICAÇÃO CANAIS DE VOZ" + +#: src/gui/cards/leaderboard.py:81 +msgctxt "skin:leaderboard|mode:anki|header_text" +msgid "ANKI REVIEW LEADERBOARD" +msgstr "CLASSIFICAÇÃO ATIVIDADES ANKI" + +#: src/gui/cards/leaderboard.py:99 +msgctxt "skin:leaderboard|field:subheader_text" +msgid "SERVER: " +msgstr "SERVIDOR:" + +#: src/gui/cards/leaderboard.py:129 +#, possible-python-brace-format +msgctxt "skin:leaderboard|mode:study|top_hours_text" +msgid "{amount} hours" +msgstr "{amount} horas" + +#: src/gui/cards/leaderboard.py:133 +#, possible-python-brace-format +msgctxt "skin:leaderboard|mode:text|top_hours_text" +msgid "{amount} XP" +msgstr "{amount} XP" + +#: src/gui/cards/leaderboard.py:137 +#, possible-python-brace-format +msgctxt "skin:leaderboard|mode:voice|top_hours_text" +msgid "{amount} hours" +msgstr "{amount} horas" + +#: src/gui/cards/leaderboard.py:141 +#, possible-python-brace-format +msgctxt "skin:leaderboard|mode:anki|top_hours_text" +msgid "{amount} cards" +msgstr "{amount} cartões" + +#: src/gui/cards/leaderboard.py:168 +#, possible-python-brace-format +msgctxt "skin:leaderboard|mode:study|entry_hours_text" +msgid "{HH:02d}:{MM:02d}" +msgstr "{HH:02d}:{MM:02d}" + +#: src/gui/cards/leaderboard.py:172 +#, possible-python-brace-format +msgctxt "skin:leaderboard|mode:text|entry_hours_text" +msgid "{amount} XP" +msgstr "{amount} XP" + +#: src/gui/cards/leaderboard.py:176 +#, possible-python-brace-format +msgctxt "skin:leaderboard|mode:voice|entry_hours_text" +msgid "{HH:02d}:{MM:02d}" +msgstr "{HH:02d}:{MM:02d}" + +#: src/gui/cards/leaderboard.py:180 +#, possible-python-brace-format +msgctxt "skin:leaderboard|mode:anki|entry_hours_text" +msgid "{amount} cards" +msgstr "{amount} cartões" diff --git a/locales/pt_BR/LC_MESSAGES/lion-core.po b/locales/pt_BR/LC_MESSAGES/lion-core.po new file mode 100644 index 00000000..00978efb --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/lion-core.po @@ -0,0 +1,139 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/core/setting_types.py:31 +msgctxt "settype:coin|accepts" +msgid "A positive integral number of coins." +msgstr "Um número inteiro e positivo de moedas." + +#: src/core/setting_types.py:47 +msgctxt "settype:coin|parse|error:notinteger" +msgid "The coin quantity must be a positive integer!" +msgstr "O número de moedas precisa ser inteiro e positivo!" + +#: src/core/setting_types.py:55 +#, possible-python-brace-format +msgctxt "settype:coin|parse|error:too_large" +msgid "You cannot set this to more than {coin}**{max}**!" +msgstr "Você não pode cobrar mais do que {coin}**{max}**!" + +#: src/core/setting_types.py:63 +#, possible-python-brace-format +msgctxt "settype:coin|parse|error:too_small" +msgid "You cannot set this to less than {coin}**{min}**!" +msgstr "Você não pode cobrar menos do que {coin}**{min}**!" + +#: src/core/setting_types.py:75 +#, possible-python-brace-format +msgctxt "settype:coin|formatted" +msgid "{coin}**{amount}**" +msgstr "{coin}**{amount}**" + +#: src/core/setting_types.py:91 +msgctxt "settype:message|accepts" +msgid "JSON formatted raw message data" +msgstr "Dados das mensagens formatados como JSON" + +#: src/core/setting_types.py:106 +msgctxt "settype:message|download|error:not_json" +msgid "The attached message data is not a JSON file!" +msgstr "A mensagem anexada não é um dado JSON!" + +#: src/core/setting_types.py:111 +msgctxt "settype:message|download|error:size" +msgid "The attached message data is too large!" +msgstr "A mensagem anexada é muito grande!" + +#: src/core/setting_types.py:120 +msgctxt "settype:message|download|error:decoding" +msgid "" +"Could not decode the message data. Please ensure it is saved with the " +"`UTF-8` encoding." +msgstr "" +"Não consegui descompilar os dados da mensagem. Por favor, confirme que está " +"codificada como ˋUTF-8ˋ." + +#: src/core/setting_types.py:177 +#, possible-python-brace-format +msgctxt "settype:message|error_suffix" +msgid "" +"You can view, test, and fix your embed using the online [embed " +"builder]({link})." +msgstr "" +"Você pode ver, testar e corrigir sua incorporação usando o sistema online " +"[embed builder]({link})." + +#: src/core/setting_types.py:189 +#, possible-python-brace-format +msgctxt "settype:message|error:invalid_json" +msgid "" +"The provided message data was not a valid JSON document!\n" +"`{error}`" +msgstr "" +"Os dados informados não são um documento JSON válido.\n" +"ˋ{error}ˋ" + +#: src/core/setting_types.py:197 +msgctxt "settype:message|error:json_missing_keys" +msgid "" +"Message data must be a JSON object with at least one of the following " +"fields: `content`, `embed`, `embeds`" +msgstr "" +"Os dados da mensagem precisam ser um objeto JSON com pelo menos os seguintes" +" campos: ˋconteúdoˋ, ˋintegraçãoˋ, ˋintegraçõesˋ." + +#: src/core/setting_types.py:206 +msgctxt "settype:message|error:json_embed_type" +msgid "`embed` field must be a valid JSON object." +msgstr "O campo ˋintegraçõesˋ precisa ser um objeto JSON válido." + +#: src/core/setting_types.py:214 +msgctxt "settype:message|error:json_embeds_type" +msgid "`embeds` field must be a list." +msgstr "Os campos ˋintegraçõesˋ precisam ser uma lista." + +#: src/core/setting_types.py:221 +msgctxt "settype:message|error:json_embed_embeds" +msgid "Message data cannot include both `embed` and `embeds`." +msgstr "" +"Os dados de mensagem não podem incluir ambos ˋintegraçãoˋ e ˋintegraçõesˋ." + +#: src/core/setting_types.py:229 +msgctxt "settype:message|error:json_content_type" +msgid "`content` field must be a string." +msgstr "O campo ˋconteúdoˋ precisa ser do tipo string." + +#: src/core/setting_types.py:245 +#, possible-python-brace-format +msgctxt "ui:settype:message|error:embed_conversion" +msgid "" +"Could not parse the message embed data.\n" +"**Error:** `{exception}`" +msgstr "" +"Não pude analisar os dados incorporados da mensagem.\n" +"**Erro:** ˋ{exception}ˋ" + +#: src/core/setting_types.py:273 +msgctxt "settype:message|format:too_long" +msgid "Too long to display! See Preview." +msgstr "Muito longo para mostrar! Veja uma prévia." diff --git a/locales/pt_BR/LC_MESSAGES/member_admin.po b/locales/pt_BR/LC_MESSAGES/member_admin.po new file mode 100644 index 00000000..3eaa208a --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/member_admin.po @@ -0,0 +1,455 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/member_admin/settingui.py:57 +msgctxt "ui:memberadmin|menu:greetch|placeholder" +msgid "Select Greeting Channel" +msgstr "Selecione o Canal de Saudações" + +#: src/modules/member_admin/settingui.py:86 +msgctxt "ui:memberadmin|menu:autoroles|placeholder" +msgid "Select Autoroles" +msgstr "Selecione os Cargos Automáticos" + +#: src/modules/member_admin/settingui.py:115 +msgctxt "ui:memberadmin|menu:bot_autoroles|placeholder" +msgid "Select Bot Autoroles" +msgstr "Selecione os Cargos Automáticos de Bot" + +#: src/modules/member_admin/settingui.py:156 +msgctxt "ui:member_admin|button:greet_msg|label" +msgid "Greeting Msg" +msgstr "Mensagem de Saudação" + +#: src/modules/member_admin/settingui.py:205 +msgctxt "ui:memberadmin|button:return_msg|label" +msgid "Returning Msg" +msgstr "Mensagem Retornando" + +#: src/modules/member_admin/settingui.py:213 +msgctxt "ui:memberadmin|embed|title" +msgid "Greetings and Initial Roles Panel" +msgstr "Painel de Saudações e Cargos Iniciais" + +#: src/modules/member_admin/settingui.py:257 +msgctxt "dash:member_admin|title" +msgid "Greetings and Initial Roles ({commands[configure welcome]})" +msgstr "Cargos Iniciais de Saudação ({commands[configure welcome]})" + +#: src/modules/member_admin/settingui.py:261 +msgctxt "dash:member_admin|dropdown|placeholder" +msgid "Greetings and Initial Roles Panel" +msgstr "Painel de Boas Vindas com Cargos Iniciais " + +#: src/modules/member_admin/settingui.py:281 +msgctxt "dash:member_admin|section:greeting_messages|name" +msgid "Greeting Messages ({commands[configure welcome]})" +msgstr "Mensagens de Saudação ({commands[configure welcome]})" + +#: src/modules/member_admin/settingui.py:292 +msgctxt "dash:member_admin|section:initial_roles|name" +msgid "Initial Roles ({commands[configure welcome]})" +msgstr "Cargos Iniciais ({commands[configure welcome]})" + +#: src/modules/member_admin/cog.py:239 +msgctxt "cmd:resetmember" +msgid "resetmember" +msgstr "ResetarMembro" + +#: src/modules/member_admin/cog.py:242 +msgctxt "cmd:resetmember|desc" +msgid "Reset (server-associated) member data for the target member or user." +msgstr "" +"Resetar dados (associados a este servidor) de membro para determinado " +"usuário ou membro." + +#: src/modules/member_admin/cog.py:246 +msgctxt "cmd:resetmember|param:target" +msgid "member_to_reset" +msgstr "membro_a_resetar" + +#: src/modules/member_admin/cog.py:247 +msgctxt "cmd:resetmember|param:saved_roles" +msgid "saved_roles" +msgstr "cargos_salvos" + +#: src/modules/member_admin/cog.py:252 +msgctxt "cmd:resetmember|param:target|desc" +msgid "Choose the member (current or past) you want to reset." +msgstr "Escolha o membro(atual ou passado) que você quer resetar." + +#: src/modules/member_admin/cog.py:256 +msgctxt "cmd:resetmember|param:saved_roles|desc" +msgid "" +"Clear the saved roles for this member, so their past roles are not restored " +"on rejoin." +msgstr "" +"Limpar os cargos salvos deste membro, então os cargos passados não serão " +"restaurados novamente caso retorne." + +#: src/modules/member_admin/cog.py:283 +#, possible-python-brace-format +msgctxt "cmd:resetmember|reset:saved_roles|success" +msgid "" +"The saved roles for {target} have been reset. They will not regain their " +"roles if they rejoin." +msgstr "" +"Os cargos salvos de {target} foram resetados. Eles não irão recuperar os " +"cargos caso retornem." + +#: src/modules/member_admin/cog.py:291 +msgctxt "cmd:resetmember|error:nothing_to_do" +msgid "No reset operation selected, nothing to do." +msgstr "Nenhuma operação de resetar foi selecionada. Não tenho o que fazer." + +#: src/modules/member_admin/cog.py:307 +msgctxt "cmd:configure_welcome" +msgid "welcome" +msgstr "bem vindo" + +#: src/modules/member_admin/cog.py:310 +msgctxt "cmd:configure_welcome|desc" +msgid "Configure new member greetings and roles." +msgstr "Configure as saudações e cargos do novo membro." + +#: src/modules/member_admin/settings.py:20 +msgctxt "guildset:greeting_message|formatkey:mention" +msgid "Mention the new member." +msgstr "Mencione o novo membro." + +#: src/modules/member_admin/settings.py:22 +msgctxt "guildset:greeting_message|formatkey:user_name" +msgid "Display name of the new member." +msgstr "Mostrar o nome do novo membro." + +#: src/modules/member_admin/settings.py:24 +msgctxt "guildset:greeting_message|formatkey:user_avatar" +msgid "Avatar url of the new member." +msgstr "Link do avatar do novo membro." + +#: src/modules/member_admin/settings.py:26 +msgctxt "guildset:greeting_message|formatkey:guild_name" +msgid "Name of this server." +msgstr "Nome deste servidor." + +#: src/modules/member_admin/settings.py:28 +msgctxt "guildset:greeting_message|formatkey:guild_icon" +msgid "Server icon url." +msgstr "Link do ícone do servidor." + +#: src/modules/member_admin/settings.py:30 +msgctxt "guildset:greeting_message|formatkey:studying_count" +msgid "Number of current voice channel members." +msgstr "Número atual de membros de canais de voz." + +#: src/modules/member_admin/settings.py:32 +msgctxt "guildset:greeting_message|formatkey:member_count" +msgid "Number of members in the server." +msgstr "Número de membros neste servidor." + +#: src/modules/member_admin/settings.py:40 +msgctxt "guildset:greeting_channel" +msgid "welcome_channel" +msgstr "canal_de_boas_vindas" + +#: src/modules/member_admin/settings.py:43 +msgctxt "guildset:greeting_channel|desc" +msgid "Channel in which to welcome new members to the server." +msgstr "Canal em que será recebido o novo membro no servidor." + +#: src/modules/member_admin/settings.py:47 +msgctxt "guildset:greeting_channel|long_desc" +msgid "" +"New members will be sent the configured `welcome_message` in this channel, " +"and returning members will be sent the configured `returning_message`. Unset" +" to send these message via direct message." +msgstr "" +"Novos membros irão receber a ˋmensagem_de_boas_vindasˋ neste canal. Membros " +"que estão voltando após um tempo fora, receberão ˋmensagem_de_retornoˋ. " +"Desative para que a mensagem seja enviada por Mensagem Direta. " + +#: src/modules/member_admin/settings.py:53 +msgctxt "guildset:greeting_channel|accepts" +msgid "Name or id of the greeting channel, or 0 for DM." +msgstr "Nome ou ID do canal de boas vindas. Ou 0 para Mensagens Diretas." + +#: src/modules/member_admin/settings.py:67 +msgctxt "guildset:greeting_channel|set_response:unset" +msgid "Welcome messages will now be sent via direct message." +msgstr "Mensagens de boas vindas serão enviadas por Mensagem Direta." + +#: src/modules/member_admin/settings.py:72 +#, possible-python-brace-format +msgctxt "guildset:greeting_channel|set_response:set" +msgid "Welcome messages will now be sent to {channel}" +msgstr "Mensagens de boas vindas serão enviadas para {channel}" + +#: src/modules/member_admin/settings.py:84 +msgctxt "guildset:greeting_channel|formmatted:unset" +msgid "Direct Message" +msgstr "Mensagem Direta" + +#: src/modules/member_admin/settings.py:91 +msgctxt "guildset:greeting_message" +msgid "welcome_message" +msgstr "mensagem_de_boas_vindas" + +#: src/modules/member_admin/settings.py:95 +msgctxt "guildset:greeting_message|desc" +msgid "Custom message used to greet new members when they join the server." +msgstr "" +"Mensagem personalizada usada para saudar novos membros quando eles entram no" +" servidor." + +#: src/modules/member_admin/settings.py:99 +msgctxt "guildset:greeting_message|long_desc" +msgid "" +"When set, this message will be sent to the `welcome_channel` when a *new* " +"member joins the server. If not set, no message will be sent." +msgstr "" +"Quando configurada, esta mensagem será enviada ao ˋcanal_de_boas_vindasˋ " +"sempre que um *novo* membro entrar no servidor. Se não configurado, nenhuma " +"mensagem será enviada." + +#: src/modules/member_admin/settings.py:104 +msgctxt "guildset:greeting_message|accepts" +msgid "JSON formatted greeting message data" +msgstr "Mensagem de boas vindas formatada como dados JSON" + +#: src/modules/member_admin/settings.py:108 +msgctxt "guildset:greeting_message|default" +msgid "" +"\n" +" {\n" +" \"embed\": {\n" +" \"title\": \"Welcome {user_name}!\",\n" +" \"thumbnail\": {\"url\": \"{user_avatar}\"},\n" +" \"description\": \"Welcome to **{guild_name}**!\",\n" +" \"footer\": {\n" +" \"text\": \"You are the {member_count}th member!\"\n" +" },\n" +" \"color\": 15695665\n" +" }\n" +" }\n" +" " +msgstr "" +"\n" +" {\n" +" \"embed\": {\n" +" \"title\": \"Bem Vindo, {user_name}!\",\n" +" \"thumbnail\": {\"url\": \"{user_avatar}\"},\n" +" \"description\": \"Bem vindo ao **{guild_name}**!\",\n" +" \"footer\": {\n" +" \"text\": \"Você é o {member_count} membro!\"\n" +" },\n" +" \"color\": 15695665\n" +" }\n" +" }\n" +" " + +#: src/modules/member_admin/settings.py:136 +msgctxt "guildset:greeting_message|set_response:unset" +msgid "Welcome message unset! New members will not be greeted." +msgstr "" +"Mensagem de boas vindas desabilitada! Novos membros não receberão saudações." + +#: src/modules/member_admin/settings.py:141 +msgctxt "guildset:greeting_message|set_response:set" +msgid "The welcome message has been updated." +msgstr "A mensagem de boas vindas foi atualizada." + +#: src/modules/member_admin/settings.py:153 +msgctxt "guildset:greeting_message|formmatted:unset" +msgid "Not set, members will not be welcomed." +msgstr "Não configurado. Membros não receberão boas vindas." + +#: src/modules/member_admin/settings.py:200 +msgctxt "guildset:greeting_message|embed_field|formatkeys|explanation" +msgid "The following placeholders will be substituted with their values." +msgstr "Os seguintes espaços serão substituídos por seus valores." + +#: src/modules/member_admin/settings.py:203 +msgctxt "guildset:greeting_message|embed_field|formatkeys|name" +msgid "Placeholders" +msgstr "Espaços reservados" + +#: src/modules/member_admin/settings.py:213 +msgctxt "guildset:returning_message" +msgid "returning_message" +msgstr "mensagem_de_retorno" + +#: src/modules/member_admin/settings.py:217 +msgctxt "guildset:returning_message|desc" +msgid "" +"Custom message used to greet returning members when they rejoin the server." +msgstr "" +"Mensagem personalizada de boas vindas usada quando um membro que saiu voltar" +" a entrar no servidor." + +#: src/modules/member_admin/settings.py:221 +msgctxt "guildset:returning_message|long_desc" +msgid "" +"When set, this message will be sent to the `welcome_channel` when a member " +"*returns* to the server. If not set, no message will be sent." +msgstr "" +"Quando configurada, esta mensagem será enviada para o ˋcanal_de_boas_vindasˋ" +" assim que um membro *voltar a entrar* no servidor. Se não for configurada, " +"nenhuma mensagem será enviada." + +#: src/modules/member_admin/settings.py:226 +msgctxt "guildset:returning_message|accepts" +msgid "JSON formatted returning message data" +msgstr "Mensagem de retorno em formato de dados JSON." + +#: src/modules/member_admin/settings.py:230 +msgctxt "guildset:returning_message|default" +msgid "" +"\n" +" {\n" +" \"embed\": {\n" +" \"title\": \"Welcome Back {user_name}!\",\n" +" \"thumbnail\": {\"url\": \"{User_avatar}\"},\n" +" \"description\": \"Welcome back to **{guild_name}**!\\nYou were last seen .\",\n" +" \"color\": 15695665\n" +" }\n" +" }\n" +" " +msgstr "" +"\n" +" {\n" +" \"embed\": {\n" +" \"title\": \"Bem vindo de volta {user_name}!\",\n" +" \"thumbnail\": {\"url\": \"{User_avatar}\"},\n" +" \"description\": \"Bem vindo de novo ao **{guild_name}**!\\n Você estava desaparecido desde .\",\n" +" \"color\": 15695665\n" +" }\n" +" }\n" +" " + +#: src/modules/member_admin/settings.py:247 +msgctxt "guildset:returning_message|formatkey:last_time" +msgid "Unix timestamp of the last time the member was seen in the server." +msgstr "Data/hora que o membro havia sido visto pela última vez." + +#: src/modules/member_admin/settings.py:258 +msgctxt "guildset:returning_message|set_response:unset" +msgid "Returning member greeting unset! Will use `welcome_message` if set." +msgstr "" +"Mensagem para saudar membros que retornam não foi configurada! Usaremos " +"ˋmensagem_de_boas_vindasˋ se configurada. " + +#: src/modules/member_admin/settings.py:263 +msgctxt "guildset:greeting_message|set_response:set" +msgid "The returning member greeting has been updated." +msgstr "" +"A mensagem de saudação ao membro que estiver retornarnando foi atualizada." + +#: src/modules/member_admin/settings.py:275 +msgctxt "guildset:greeting_message|formmatted:unset" +msgid "Not set, will use the `welcome_message` if set." +msgstr "" +"Não foi configurada. Usarei a ˋmensagem_de_boas_vindasˋ se esta estiver." + +#: src/modules/member_admin/settings.py:325 +msgctxt "guildset:returning_message|embed_field|formatkeys|explanation" +msgid "In *addition* to the placeholders supported by `welcome_message`" +msgstr "" +"Em *adição* aos espaços reservados, suportados pela ˋmensagem_de_boasvindasˋ" + +#: src/modules/member_admin/settings.py:328 +msgctxt "guildset:returning_message|embed_field|formatkeys|" +msgid "Placeholders" +msgstr "Espaços reservados" + +#: src/modules/member_admin/settings.py:339 +msgctxt "guildset:autoroles" +msgid "autoroles" +msgstr "cargos_automáticos" + +#: src/modules/member_admin/settings.py:343 +msgctxt "guildset:autoroles|desc" +msgid "Roles given to new members when they join the server." +msgstr "" +"Cargos a serem designados aos novos membros quando entrarem no servidor." + +#: src/modules/member_admin/settings.py:347 +msgctxt "guildset:autoroles|long_desc" +msgid "" +"These roles will be given when a member joins the server. If " +"`role_persistence` is enabled, these roles will *not* be given to a " +"returning member." +msgstr "" +"Estes cargos serão dados aos novos membros que entrarem ao servidor. Caso " +"ˋcargo_persistenteˋ esteja ativado, estes cargos *não* serão dados para um " +"membro que retorne ao servidor." + +#: src/modules/member_admin/settings.py:361 +msgctxt "guildset:bot_autoroles" +msgid "bot_autoroles" +msgstr "cargos_automáticos_bots" + +#: src/modules/member_admin/settings.py:365 +msgctxt "guildset:bot_autoroles|desc" +msgid "Roles given to new bots when they join the server." +msgstr "Cargos dados aos novos bots quando entrarem ao servidor." + +#: src/modules/member_admin/settings.py:369 +msgctxt "guildset:bot_autoroles|long_desc" +msgid "These roles will be given when a bot joins the server." +msgstr "Estes cargos serão dados quando um bot entrar no servidor." + +#: src/modules/member_admin/settings.py:382 +msgctxt "guildset:role_persistence" +msgid "role_persistence" +msgstr "cargo_persistente" + +#: src/modules/member_admin/settings.py:385 +msgctxt "guildset:role_persistence|desc" +msgid "Whether member roles should be restored on rejoin." +msgstr "" +"Definir se os cargos de um membro devem ser restaurados em seu retorno. " + +#: src/modules/member_admin/settings.py:389 +msgctxt "guildset:role_persistence|long_desc" +msgid "" +"If enabled, member roles will be stored when they leave the server, and then" +" restored when they rejoin (instead of giving `autoroles`). Note that this " +"may conflict with other bots who manage join roles." +msgstr "" +"Caso habilitado, os cargos dos membros serão salvos quando eles deixarem o " +"servidor, e restaurados em seu retorno (ao invés de receberem os " +"cargos_automáticos). Perceba que talvez isto entre em confilto com outros " +"bots que também configurem cargos de boas vindas." + +#: src/modules/member_admin/settings.py:405 +msgctxt "guildset:role_persistence|set_response:off" +msgid "Roles will not be restored when members rejoin." +msgstr "" +"Os cargos não serão restaurados no retorno de antigos membros ao servidor." + +#: src/modules/member_admin/settings.py:410 +msgctxt "guildset:greeting_message|set_response:on" +msgid "Roles will now be restored when members rejoin." +msgstr "" +"A partir de agora. os cargos serão restaurados quando um membro antigo " +"retorna ao servidor. " diff --git a/locales/pt_BR/LC_MESSAGES/meta.po b/locales/pt_BR/LC_MESSAGES/meta.po new file mode 100644 index 00000000..75d2f96e --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/meta.po @@ -0,0 +1,145 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/meta/cog.py:23 +msgctxt "cmd:help" +msgid "help" +msgstr "ajuda" + +#: src/modules/meta/cog.py:26 +msgctxt "cmd:help|desc" +msgid "See a brief summary of my commands and features." +msgstr "Veja um breve sumário dos meus comandos e ferramentas." + +#: src/modules/meta/help_sections.py:40 +#, possible-python-brace-format +msgctxt "helptext|level:member|mode:study" +msgid "" +"\n" +" {config_emoji} Personal Configuration\n" +" *View or adjust personal settings with the {cmd_my} command.*\n" +" {cmd_my_timezone}: Timezone used to display your stats and set reminders.\n" +" {cmd_my_language}: Your preferred language for commands and interactions.\n" +"\n" +"\n" +" {stats_emoji} Statistics\n" +" *Study in voice channels to earn activity ranks and compete on the leaderboard!*\n" +" {cmd_me}: View your personal study profile and set your profile tags.\n" +" {cmd_stats}: View study statistics for the current and past weeks or months.\n" +" {cmd_ranks}: See the list of activity ranks.\n" +" {cmd_leaderboard}: Compete with other members on the server leaderboards.\n" +"\n" +"\n" +" {coin} Economy\n" +" *Earn coins through studying, then spend them on some well deserved rewards!*\n" +" {cmd_send}: Send your {coin} to another member.\n" +" {cmd_shop}: Purchase server roles with your {coin}.\n" +" {cmd_room}: Rent a private voice channel for you and your friends.\n" +"\n" +"\n" +" {utility_emoji} Utilities\n" +" *Some other utilities to help you stay productive while studying!*\n" +" {cmd_reminders}: Ask me to remind you about that important task!\n" +" {cmd_tasklist}: Create tasks and feel the satisfaction of checking them off.\n" +" {cmd_timers}: Stay productive using the classic *pomodoro technique*!\n" +" {cmd_schedule}: Schedule a shared study session and keep yourself accountable!\n" +" " +msgstr "" +"\n" +" {config_emoji} Configurações Pessoais\n" +" *Veja ou edite as configurações utilizando o comando {cmd_my}.*\n" +" {cmd_my_timezone}: Fuso Horário utilizado para suas estatísticas, lembretes e Check-Inˋs.\n" +" {cmd_my_language}: Sua preferência de idioma para interagir e comandar o LyonBot.\n" +"\n" +"\n" +" {stats_emoji} Estatísticas\n" +" *Estude em um canal de voz para progredir no status de atividades e participar do Rank deste servidor*\n" +" {cmd_me}: Veja seu perfil pessoal de estudos e configure suas etiquetas de perfil.\n" +" {cmd_stats}: Veja as suas estatísticas e históricos de estudos semanais ou mensais.\n" +" {cmd_ranks}: Veja a lista do Ranking de Atividades..\n" +" {cmd_leaderboard}: Participe, com outros usuários, da Lista de Classificação do servidor.\n" +"\n" +"\n" +" {coin} Financeiro\n" +" *Ganhe moedas através dos estudos, e então gaste-as com recompensas merecidas!*\n" +" {cmd_send}: Envie algumas {coin} para outro membro.\n" +" {cmd_shop}: Compre um cargo colorido com algumas {coin}.\n" +" {cmd_room}: Faça o aluguel de uma sala privada para poder ter privacidade com seus amigos.\n" +"\n" +"\n" +" {utility_emoji} Utilidades\n" +" *Algumas outras ferramentas para manter você produtivo enquanto estuda!*\n" +" {cmd_reminders}: Me peça para te lembrar sobre algo, e eu o farei!\n" +" {cmd_tasklist}: Crie uma lista de afazeres e tenha a satisfação de riscá-los quando completar.\n" +" {cmd_timers}: Se mantenha produtivo com a clássica *Técnica Pomodoro*!\n" +" {cmd_schedule}: Faça o agendamento de horários de estudos, e se comprometa a chegar a tempo de fazer os seus Check-ins." + +#: src/modules/meta/help_sections.py:73 +#, possible-python-brace-format +msgctxt "helptext|page:admin" +msgid "" +"\n" +" Use {cmd_dashboard} to see an overview of the server configuration, and quickly jump to the feature configuration panels to modify settings.\n" +"\n" +" Configuration panels are also accessible directly through the `/configure` commands and most features may be configured through these commands.\n" +"\n" +" Other relevant commands for guild configuration below:\n" +" `/editshop`: Add/Edit/Remove colour roles from the {coin} shop.\n" +" `/ranks`: Add/Edit/Refresh/Remove activity ranks.\n" +" `/pomodoro`: Add/Edit/Remove Pomodoro timers in voice channels.\n" +" `/rolemenus`: Allow members to equip roles from customisable messages.\n" +" `/economy balance`: Display and modify LionCoin balance for members and roles.\n" +" " +msgstr "" +"\n" +" Use {cmd_dashboard} para ver um panorama geral das configurações do servidor, e ir direto ao painel de configuração uma funcionalidade que você queira.\n" +"\n" +" Os Paineis de Configuração também são facilmente acessados através do comando `/configurar` assim como a maioria das funcionalidades também podem, através destes comandos.\n" +"\n" +" Outros comandos relevantes para a configuração da comunidade, são os seguintes:\n" +" `/editarloja`: Adiciona/Edita/Remove cargos coloridos através de {coin} da loja.\n" +" `/niveis`: Adiciona/Edita/Atualiza/Remove níveis de atividade.\n" +" `/pomodoro`: Adiciona/Edita/Remove Temporizadores Pomodoro de canais de voz.\n" +" `/menucargo`: Autoriza os membros a adicionar cargos personalizados através por mensagens.\n" +" `/financeiro saldo`: Modifica ou mostra o saldo de LionCoins dos membros e cargos.\n" +" " + +#: src/modules/meta/help_sections.py:112 +msgctxt "helptext|level:member|title" +msgid "Command Summary (for members)" +msgstr "Sumário de Comando (para membros)" + +#: src/modules/meta/help_sections.py:140 +msgctxt "helptext|level:admin|title" +msgid "Command Summary (for server admins)" +msgstr "Sumário de Comando (para Administradores do servidor)" + +#: src/modules/meta/helpui.py:47 +msgctxt "ui:help|button:member_page|label" +msgid "Member Page" +msgstr "Página do Membro" + +#: src/modules/meta/helpui.py:59 +msgctxt "ui:help|button:admin_page|label" +msgid "Admin Page" +msgstr "Página do Administrador" diff --git a/locales/pt_BR/LC_MESSAGES/moderation.po b/locales/pt_BR/LC_MESSAGES/moderation.po new file mode 100644 index 00000000..b4cd2e50 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/moderation.po @@ -0,0 +1,283 @@ +# 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. +# +# Translators: +# Aline Souki, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/moderation/settingui.py:53 +msgctxt "ui:moderation_config|menu:ticket_log|placeholder" +msgid "Select Ticket Log" +msgstr "Selecione o Registro de Logs" + +#: src/modules/moderation/settingui.py:78 +msgctxt "ui:moderation_config|menu:alert_channel|placeholder" +msgid "Select Alert Channel" +msgstr "Selecione o Canal de Alertas" + +#: src/modules/moderation/settingui.py:103 +msgctxt "ui:moderation_config|menu:modrole|placeholder" +msgid "Select Moderator Role" +msgstr "Selecione o cargo de Moderador" + +#: src/modules/moderation/settingui.py:111 +msgctxt "ui:moderation_config|embed|title" +msgid "Moderation Configuration Panel" +msgstr "Painel de Configuração da Moderação" + +#: src/modules/moderation/settingui.py:150 +msgctxt "dash:moderation|title" +msgid "Moderation Settings ({commands[configure moderation]})" +msgstr "Configurações de Moderação ({commands[configure moderation]})" + +#: src/modules/moderation/settingui.py:154 +msgctxt "dash:moderation|dropdown|placeholder" +msgid "Moderation Panel" +msgstr "Painel de Moderação" + +#: src/modules/moderation/cog.py:136 +msgctxt "cmd:configure_moderation" +msgid "moderation" +msgstr "moderação" + +#: src/modules/moderation/cog.py:139 +msgctxt "cmd:configure_moderation|desc" +msgid "Configure general moderation settings." +msgstr "Configurações gerais de moderação." + +#: src/modules/moderation/ticket.py:147 +#, possible-python-brace-format +msgctxt "ticket|title:auto" +msgid "Ticket #{ticketid} | {state} | {type}[Auto] | {name}" +msgstr "Ticket #{ticketid} | {state} | {type}[Auto] | {name}" + +#: src/modules/moderation/ticket.py:152 +#, possible-python-brace-format +msgctxt "ticket|title:manual" +msgid "Ticket #{ticketid} | {state} | {type} | {name}" +msgstr "Registro #{ticketid} | {state} | {type} | {name}" + +#: src/modules/moderation/ticket.py:168 +msgctxt "ticket|field:target|name" +msgid "Target" +msgstr "Alvo" + +#: src/modules/moderation/ticket.py:173 +msgctxt "ticket|field:moderator|name" +msgid "Moderator" +msgstr "Moderador" + +#: src/modules/moderation/ticket.py:180 +msgctxt "ticket|field:expiry|mode:expiring|name" +msgid "Expires At" +msgstr "Expira em" + +#: src/modules/moderation/ticket.py:183 +#, possible-python-brace-format +msgctxt "ticket|field:expiry|mode:expiring|value" +msgid "" +"{timestamp}\n" +"Duration: `{duration}`" +msgstr "" +"{timestamp}\n" +"Duração: `{duration}`" + +#: src/modules/moderation/ticket.py:191 +msgctxt "ticket|field:expiry|mode:expired|name" +msgid "Expired" +msgstr "Expirado" + +#: src/modules/moderation/ticket.py:194 +#, possible-python-brace-format +msgctxt "ticket|field:expiry|mode:expired|value" +msgid "{timestamp}" +msgstr "{timestamp}" + +#: src/modules/moderation/ticket.py:201 +msgctxt "ticket|field:expiry|mode:open|name" +msgid "Expiry" +msgstr "Fim" + +#: src/modules/moderation/ticket.py:204 +#, possible-python-brace-format +msgctxt "ticket|field:expiry|mode:open|value" +msgid "{timestamp}" +msgstr "{timestamp}" + +#: src/modules/moderation/ticket.py:212 +msgctxt "ticket|field:context|name" +msgid "Context" +msgstr "Contexto" + +#: src/modules/moderation/ticket.py:219 +msgctxt "ticket|field:notes|name" +msgid "Notes" +msgstr "Notas" + +#: src/modules/moderation/ticket.py:226 +msgctxt "ticket|field:pardoned|name" +msgid "Pardoned" +msgstr "Perdoado" + +#: src/modules/moderation/ticket.py:229 +#, possible-python-brace-format +msgctxt "ticket|field:pardoned|value" +msgid "" +"Pardoned by <&{moderator}> at {timestamp}.\n" +"{reason}" +msgstr "" +"Perdoado por <&{moderator}> em {timestamp}.\n" +"{reason}" + +#: src/modules/moderation/settings.py:20 +msgctxt "guildset:ticket_log" +msgid "ticket_log" +msgstr "registro_de_logs" + +#: src/modules/moderation/settings.py:23 +msgctxt "guildset:ticket_log|desc" +msgid "Private moderation log to send tickets and moderation events." +msgstr "" +"Lugar privado, da moderação, para onde enviar registro de tickets e eventos " +"da moderação." + +#: src/modules/moderation/settings.py:27 +msgctxt "guildset:ticket_log|long_desc" +msgid "" +"Warnings, notes, video blacklists, and other moderation events will be " +"posted as numbered tickets with context to this log." +msgstr "" +"Avisos, notas, inscritos na lista negra, e outros eventos da moderação serão" +" postados em tíckets numerados de acordo com o contexto deste registro." + +#: src/modules/moderation/settings.py:32 +msgctxt "guildset:ticket_log|accepts" +msgid "Ticket channel name or id." +msgstr "Nome, ou ID, do canal de tickets." + +#: src/modules/moderation/settings.py:46 +#, possible-python-brace-format +msgctxt "guildset:ticket_log|set_response:set" +msgid "Moderation tickets will be sent to {channel}" +msgstr "Tickets de moderação serão enviados para {channel}" + +#: src/modules/moderation/settings.py:51 +msgctxt "guildset:ticket_log|set_response:unset" +msgid "Moderation tickets will not be logged to a channel." +msgstr "Os tickets de moderação não serão registrados em um canal." + +#: src/modules/moderation/settings.py:63 +msgctxt "guildset:ticket_log|formatted:unset" +msgid "Not Set." +msgstr "Não configurado." + +#: src/modules/moderation/settings.py:70 +msgctxt "guildset:alert_channel" +msgid "alert_channel" +msgstr "canal_alertas" + +#: src/modules/moderation/settings.py:73 +msgctxt "guildset:alert_channel|desc" +msgid "Moderation notification channel for members with DMs disabled." +msgstr "" +"Canal para o envio de notificações e avisos a membros com mensagem direta " +"desabilitada." + +#: src/modules/moderation/settings.py:77 +msgctxt "guildset:alert_channel|long_desc" +msgid "" +"When I need to send a member a moderation-related notification (e.g. asking " +"them to enable their video in a video channel) from this server, I will try " +"to send it via direct messages. If this fails, I will instead mention the " +"user in this channel." +msgstr "" +"Quando for preciso enviar uma mensagem de alerta a um membro deste servidor " +"(ex. pedindo a ele que habilite o vídeo em um canal de vídeo), eu tentarei " +"enviar por mensagem direta. Caso esta mensagem direta falhe, eu irei " +"mencionar o usuário neste canal." + +#: src/modules/moderation/settings.py:84 +msgctxt "guildset:alert_channel|accepts" +msgid "Alert channel name or id." +msgstr "Nome, ou ID, do canal de alertas." + +#: src/modules/moderation/settings.py:99 +#, possible-python-brace-format +msgctxt "guildset:alert_channel|set_response:set" +msgid "Moderation alerts will be sent to {channel}" +msgstr "Alertas de moderação serão enviados para {channel}" + +#: src/modules/moderation/settings.py:104 +msgctxt "guildset:alert_channel|set_response:unset" +msgid "Moderation alerts will be ignored if the member cannot be reached." +msgstr "" +"Alertas de moderação serão ignorados, caso o membro não puder ser contatado." + +#: src/modules/moderation/settings.py:116 +msgctxt "guildset:alert_channel|formatted:unset" +msgid "Not Set (Only alert via direct message.)" +msgstr "Não configurado (somente alertar via mensagem direta)" + +#: src/modules/moderation/settings.py:123 +msgctxt "guildset:mod_role" +msgid "mod_role" +msgstr "cargo_moderador" + +#: src/modules/moderation/settings.py:126 +msgctxt "guildset:mod_role|desc" +msgid "" +"Guild role permitted to view configuration and perform moderation tasks." +msgstr "" +"Cargos com permissão para administrar comunidade, ver a configuração e " +"realizar tarefas de moderação." + +#: src/modules/moderation/settings.py:130 +msgctxt "guildset:mod_role|long_desc" +msgid "" +"Members with the set role will be able to access my configuration panels, " +"and perform some moderation tasks, such as setting up pomodoro timers. " +"Moderators cannot reconfigure most bot configuration, or perform operations " +"they do not already have permission for in Discord." +msgstr "" +"Membros com o cargo configurado estarão autorizados a acessar meus painéis " +"de configuração, e realizar algumas tarefas, como criar Temporizadores " +"Pomodoro. Os moderadores não podem reconfigurar todos os comandos do bot, ou" +" o fazer algo que não entre as permissões do seu cargo no Discord." + +#: src/modules/moderation/settings.py:137 +msgctxt "guildset:mod_role|accepts" +msgid "Moderation role name or id." +msgstr "Nome, ou ID, do cargo de moderador." + +#: src/modules/moderation/settings.py:151 +#, possible-python-brace-format +msgctxt "guildset:mod_role|set_response:set" +msgid "Members with the {role} will be considered moderators." +msgstr "Membros com o cargo {role} serão considerados moderadores." + +#: src/modules/moderation/settings.py:156 +msgctxt "guildset:mod_role|set_response:unset" +msgid "No members will be given moderation privileges." +msgstr "Nenhum membro ganhará privilégios de moderação." + +#: src/modules/moderation/settings.py:168 +msgctxt "guildset:mod_role|formatted:unset" +msgid "Not Set." +msgstr "Não Configurado." diff --git a/locales/pt_BR/LC_MESSAGES/monthly-gui.po b/locales/pt_BR/LC_MESSAGES/monthly-gui.po new file mode 100644 index 00000000..08cc5ac3 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/monthly-gui.po @@ -0,0 +1,170 @@ +# 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. +# +# Translators: +# Aline Souki, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/gui/cards/monthly.py:40 +msgctxt "skin:monthlystats|mode:study|title" +msgid "STUDY HOURS" +msgstr "HORAS DE ESTUDO" + +#: src/gui/cards/monthly.py:44 +msgctxt "skin:monthlystats|mode:voice|title" +msgid "VOICE CHANNEL ACTIVITY" +msgstr "ATIVIDADE EM CANAL DE VOZ" + +#: src/gui/cards/monthly.py:48 +msgctxt "skin:monthlystats|mode:text|title" +msgid "MESSAGE ACTIVITY" +msgstr "ATIVIDADE EM CONVERSAS" + +#: src/gui/cards/monthly.py:52 +msgctxt "skin::monthlystats|mode:anki|title" +msgid "CARDS REVIEWED" +msgstr "CARTÕES REVISADOS" + +#: src/gui/cards/monthly.py:119 +#, possible-python-brace-format +msgctxt "ui:monthlystats|mode:study|bar_value" +msgid "{value} H" +msgstr "{value} H" + +#: src/gui/cards/monthly.py:123 +#, possible-python-brace-format +msgctxt "ui:monthlystats|mode:voice|bar_value" +msgid "{value} H" +msgstr "{value} H" + +#: src/gui/cards/monthly.py:127 +#, possible-python-brace-format +msgctxt "ui:monthlystats|mode:text|bar_value" +msgid "{value} M" +msgstr "{value} M" + +#: src/gui/cards/monthly.py:131 +#, possible-python-brace-format +msgctxt "ui:monthlystats|mode:anki|bar_value" +msgid "{value} C" +msgstr "{value} C" + +#: src/gui/cards/monthly.py:153 +msgctxt "skin:monthlystats|weekdays" +msgid "M,T,W,T,F,S,S" +msgstr "S,T,Q,Q,S,S,D" + +#: src/gui/cards/monthly.py:163 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:study|summary:this_month" +msgid "THIS MONTH: {amount} HOURS" +msgstr "ESTE MÊS: {amount} HORAS" + +#: src/gui/cards/monthly.py:167 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:voice|summary:this_month" +msgid "THIS MONTH: {amount} HOURS" +msgstr "ESTE MÊS: {amount} HORAS" + +#: src/gui/cards/monthly.py:171 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:text|summary:this_month" +msgid "THIS MONTH: {amount} MESSAGES" +msgstr "ESTE MÊS: {amount} MENSAGENS" + +#: src/gui/cards/monthly.py:175 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:text|summary:this_month" +msgid "THIS MONTH: {amount} CARDS" +msgstr "ESTE MÊS: {amount} CARTÕES" + +#: src/gui/cards/monthly.py:197 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:study|summary:last_month" +msgid "LAST MONTH: {amount} HOURS" +msgstr "MÊS PASSADO: {amount} HORAS" + +#: src/gui/cards/monthly.py:201 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:voice|summary:last_month" +msgid "LAST MONTH: {amount} HOURS" +msgstr "MÊS PASSADO: {amount} HORAS" + +#: src/gui/cards/monthly.py:205 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:text|summary:last_month" +msgid "LAST MONTH: {amount} MESSAGES" +msgstr "MÊS PASSADO: {amount} MENSAGENS" + +#: src/gui/cards/monthly.py:209 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:text|summary:last_month" +msgid "LAST MONTH: {amount} CARDS" +msgstr "MÊS PASSADO: {amount} CARTÕES" + +#: src/gui/cards/monthly.py:300 +msgctxt "ui:monthlystats|stats:current_streak|key" +msgid "Current Streak:" +msgstr "Sequência atual:" + +#: src/gui/cards/monthly.py:304 +#, possible-python-brace-format +msgctxt "ui:monthlystats|stats:current_streak|value" +msgid "{count} days" +msgstr "{count} dias" + +#: src/gui/cards/monthly.py:308 +msgctxt "ui:monthlystats|stats:longest_streak|key" +msgid "Longest Streak:" +msgstr "Maior sequência:" + +#: src/gui/cards/monthly.py:312 +#, possible-python-brace-format +msgctxt "ui:monthlystats|stats:longest_streak|value" +msgid "{count} days" +msgstr "{count} dias" + +#: src/gui/cards/monthly.py:316 +msgctxt "ui:monthlystats|stats:daily_average|key" +msgid "Daily Average:" +msgstr "Média Diária:" + +#: src/gui/cards/monthly.py:320 +#, possible-python-brace-format +msgctxt "ui:monthlystats|stats:daily_average|value" +msgid "{count} hours" +msgstr "{count} horas" + +#: src/gui/cards/monthly.py:324 +msgctxt "ui:monthlystats|stats:days_active|key" +msgid "Days Active:" +msgstr "Dias Ativos:" + +#: src/gui/cards/monthly.py:328 +#, possible-python-brace-format +msgctxt "ui:monthlystats|stats:days_active|value" +msgid "{count} days" +msgstr "{count} dias" + +#: src/gui/cards/monthly.py:341 +#, possible-python-brace-format +msgctxt "skin:monthlystats|footer" +msgid "Monthly Statistics • As of {day} {month} • {name} {discrim}" +msgstr "Estatísticas Mensais • A partir de {day} {month} • {name} {discrim}" diff --git a/locales/pt_BR/LC_MESSAGES/profile-gui.po b/locales/pt_BR/LC_MESSAGES/profile-gui.po new file mode 100644 index 00000000..678dd6b6 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/profile-gui.po @@ -0,0 +1,53 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/gui/cards/profile.py:79 +msgctxt "skin:profile|header:profile" +msgid "PROFILE" +msgstr "PERFIL" + +#: src/gui/cards/profile.py:83 +msgctxt "skin:profile|header:achievements" +msgid "ACHIEVEMENTS" +msgstr "CONQUISTAS" + +#: src/gui/cards/profile.py:134 +msgctxt "skin:profile|field:rank_unranked_text" +msgid "UNRANKED" +msgstr "NÃO_RANKEADO" + +#: src/gui/cards/profile.py:138 +#, possible-python-brace-format +msgctxt "skin:profile|field:rank_nextrank_text" +msgid "NEXT RANK: {name} {rangestr}" +msgstr "PRÓXIMO NÍVEL: {name} {rangestr}" + +#: src/gui/cards/profile.py:142 +msgctxt "skin:profile|field:rank_noranks_text" +msgid "NO RANKS AVAILABLE" +msgstr "NÃO HÁ RANKS DISPONÍVEIS" + +#: src/gui/cards/profile.py:146 +msgctxt "skin:profile|field:rank_maxrank_text" +msgid "YOU HAVE REACHED THE MAXIMUM RANK" +msgstr "VOCÊ ATINGIU O NÍVEL MÁXIMO" diff --git a/locales/pt_BR/LC_MESSAGES/ranks.po b/locales/pt_BR/LC_MESSAGES/ranks.po new file mode 100644 index 00000000..b1452979 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/ranks.po @@ -0,0 +1,968 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/ranks/cog.py:76 +msgctxt "cmd:configure_ranks|param:rank_type|choice:voice" +msgid "Voice" +msgstr "Em Canal de Voz" + +#: src/modules/ranks/cog.py:77 +msgctxt "cmd:configure_ranks|param:rank_type|choice:xp" +msgid "XP" +msgstr "XP" + +#: src/modules/ranks/cog.py:78 +msgctxt "cmd:configure_ranks|param:rank_type|choice:message" +msgid "Message" +msgstr "Conversa" + +#: src/modules/ranks/cog.py:495 +msgctxt "event:rank_update|embed:notify" +msgid "New Activity Rank Attained!" +msgstr "Novo Nível de Classificação Alcançado!" + +#: src/modules/ranks/cog.py:601 +msgctxt "rank_refresh|error:cannot_chunk|desc" +msgid "Could not retrieve member list from Discord. Please try again later." +msgstr "" +"Não pude recuperar a lista de membros do Discord. Por favor, tente novamente" +" mais tarde." + +#: src/modules/ranks/cog.py:614 +msgctxt "rank_refresh|error:roles_dne|desc" +msgid "Some ranks have invalid or deleted roles! Please remove them first." +msgstr "" +"Algumas classificações estão com cargos inválidos ou deletados. Por favor, " +"remova-os primeiro." + +#: src/modules/ranks/cog.py:624 +#, possible-python-brace-format +msgctxt "rank_refresh|error:unassignable_roles|desc" +msgid "" +"I have insufficient permissions to assign the following role(s):\n" +"{roles}" +msgstr "" +"E não tenho permissões suficientes para designar os seguintes cargo(s):\n" +"{roles}" + +#: src/modules/ranks/cog.py:694 +msgctxt "rank_refresh|remove_roles|audit" +msgid "Removing invalid rank role." +msgstr "Removendo o cargo de nível inválido." + +#: src/modules/ranks/cog.py:708 +#, possible-python-brace-format +msgctxt "rank_refresh|remove_roles|small_error" +msgid "*Could not remove ranks from {member}*" +msgstr "*Não consegui remover os Níveis de Classificação de {member}*" + +#: src/modules/ranks/cog.py:715 +msgctxt "rank_refresh|remove_roles|error:too_many_issues" +msgid "" +"Too many issues occurred while removing ranks! Please check my permissions " +"and try again in a few minutes." +msgstr "" +"Muitos problemas ocorreram enquanto eu removia as níveis! Por favor, " +"verifique se tenho permissões suficientes e tente novamente em alguns " +"minutos." + +#: src/modules/ranks/cog.py:729 +msgctxt "rank_refresh|add_roles|audit" +msgid "Adding rank role from refresh" +msgstr "Atribuindo os cargos de acordo com a classificação" + +#: src/modules/ranks/cog.py:743 +#, possible-python-brace-format +msgctxt "rank_refresh|add_roles|small_error" +msgid "*Could not add {role} to {member}*" +msgstr "*Não pude adicionar {role} ao {member}*" + +#: src/modules/ranks/cog.py:750 +msgctxt "rank_refresh|add_roles|error:too_many_issues" +msgid "" +"Too many issues occurred while adding ranks! Please check my permissions and" +" try again in a few minutes." +msgstr "" +"Muitos problemas ocorreram enquanto eu adicionava os níveis! Por favor, " +"verifique minhas permissões e tente novamente em alguns minutos." + +#. ---------- Commands ---------- +#: src/modules/ranks/cog.py:775 +msgctxt "cmd:ranks" +msgid "ranks" +msgstr "níveis" + +#: src/modules/ranks/cog.py:807 +msgctxt "cmd:configure_ranks" +msgid "ranks" +msgstr "níveis" + +#: src/modules/ranks/cog.py:808 +msgctxt "cmd:configure_ranks|desc" +msgid "Configure Activity Ranks" +msgstr "Configure os Níveis de Atividade" + +#: src/modules/ranks/cog.py:868 +#, possible-python-brace-format +msgctxt "" +"cmd:configure_ranks|response:updated|setting:notification|withdm_withchannel" +msgid "" +"Rank update notifications will be sent via **direct message** when possible," +" otherwise to {channel}" +msgstr "" +"As atualizações de níveis de classificação serão enviados por " +"**mensagem_direta** quando possível, ou em outro caso {channel}." + +#: src/modules/ranks/cog.py:874 +msgctxt "" +"cmd:configure_ranks|response:updated|setting:notification|withdm_nochannel" +msgid "Rank update notifications will be sent via **direct message**." +msgstr "" +"As atualizações da classificação será enviada por **mensagem_direta**." + +#: src/modules/ranks/cog.py:880 +#, possible-python-brace-format +msgctxt "" +"cmd:configure_ranks|response:updated|setting:notification|nodm_withchannel" +msgid "Rank update notifications will be sent to {channel}." +msgstr "" +"Atualização dos níveis das categorias serão enviadas para o {channel}." + +#: src/modules/ranks/cog.py:885 +msgctxt "" +"cmd:configure_ranks|response:updated|setting:notification|nodm_nochannel" +msgid "Members will not be notified when their activity rank updates." +msgstr "" +"Os membros não serão notificados quando for atualizada a sua classificação." + +#: src/modules/ranks/utils.py:13 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:role_name" +msgid "{role_name}" +msgstr "{role_name}" + +#: src/modules/ranks/utils.py:14 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:guild_name" +msgid "{guild_name}" +msgstr "{guild_name}" + +#: src/modules/ranks/utils.py:15 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:user_name" +msgid "{user_name}" +msgstr "{user_name}" + +#: src/modules/ranks/utils.py:16 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:role_id" +msgid "{role_id}" +msgstr "{role_id}" + +#: src/modules/ranks/utils.py:17 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:guild_id" +msgid "{guild_id}" +msgstr "{guild_id}" + +#: src/modules/ranks/utils.py:18 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:user_id" +msgid "{user_id}" +msgstr "{user_id}" + +#: src/modules/ranks/utils.py:19 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:role_mention" +msgid "{role_mention}" +msgstr "{role_mention}" + +#: src/modules/ranks/utils.py:20 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:user_mention" +msgid "{user_mention}" +msgstr "{user_mention}" + +#: src/modules/ranks/utils.py:21 +#, possible-python-brace-format +msgctxt "formatstring:rank_message|key:requires" +msgid "{rank_requires}" +msgstr "{rank_requires}" + +#: src/modules/ranks/settings.py:26 +msgctxt "guildset:rank_type|output:voice" +msgid "`Voice`" +msgstr "ˋVozˋ" + +#: src/modules/ranks/settings.py:27 +msgctxt "guildset:rank_type|output:xp" +msgid "`Exp`" +msgstr "ˋExpˋ" + +#: src/modules/ranks/settings.py:28 +msgctxt "guildset:rank_type|output:message" +msgid "`Messages`" +msgstr "ˋMensagensˋ" + +#: src/modules/ranks/settings.py:31 +msgctxt "guildset:rank_type|input_format:voice" +msgid "Voice" +msgstr "Voz" + +#: src/modules/ranks/settings.py:32 +msgctxt "guildset:rank_type|input_format:xp" +msgid "Exp" +msgstr "Exp" + +#: src/modules/ranks/settings.py:33 +msgctxt "guildset:rank_type|input_format:message" +msgid "Messages" +msgstr "Mensagens" + +#: src/modules/ranks/settings.py:36 +msgctxt "guildset:rank_type|input_pattern:voice" +msgid "voice|study" +msgstr "voz|estudos" + +#: src/modules/ranks/settings.py:37 +msgctxt "guildset:rank_type|input_pattern:voice" +msgid "text|message|messages" +msgstr "texto|mensagem|mensagens" + +#: src/modules/ranks/settings.py:38 +msgctxt "guildset:rank_type|input_pattern:xp" +msgid "xp|exp|experience" +msgstr "xp|exp|experiência" + +#: src/modules/ranks/settings.py:45 +msgctxt "guildset:rank_type" +msgid "rank_type" +msgstr "tipo_de_rank" + +#: src/modules/ranks/settings.py:48 +msgctxt "guildset:rank_type|desc" +msgid "" +"The type of statistic (messages | xp | voice hours) used to determine " +"activity ranks." +msgstr "" +"O tipo de estatística (mensagens | xp | horas em chamada) que será usada " +"para determinar o ranking de atividades." + +#: src/modules/ranks/settings.py:52 +msgctxt "guildset:rank_type|long_desc" +msgid "" +"Which statistic is used to reward activity ranks.\n" +"`Voice` is the number of hours active in tracked voice channels, `Exp` is a measure of message activity, and `Message` is a simple count of messages sent." +msgstr "" +"Qual tipo de estatística é utilizada para recompensar os níveis de atividade.\n" +"ˋVozˋ é o número de horas ativas em um canal de voz habilitado a contabilizar. ˋExpˋ é uma pontuação de experiência, obtida por uma ponderação entre as atividades com mensagens. ˋMensagemˋ é uma sintagem símples do número de mensagens enviadas." + +#: src/modules/ranks/settings.py:59 +msgctxt "guildset:rank_type|accepts" +msgid "Voice/Exp/Messages" +msgstr "Voz/Exp/Mensagens" + +#: src/modules/ranks/settings.py:71 +msgctxt "guildset:rank_type|set_response|type:voice" +msgid "Members will be awarded activity ranks based on `Voice Activity`." +msgstr "" +"Os membros serão recompensados com base nos níveis de ˋAtividade de Vozˋ." + +#: src/modules/ranks/settings.py:76 +msgctxt "guildset:rank_type|set_response|type:messages" +msgid "Members will be awarded activity ranks based on `Messages Sent`." +msgstr "Os membros acumularão com base nos níveis de ˋMensagens Enviadasˋ." + +#: src/modules/ranks/settings.py:81 +msgctxt "guildset:rank_type|set_response|type:xp" +msgid "Members will be awarded activity ranks based on `Message XP Earned`." +msgstr "" +"Os membros acumularão com base nos níveis de ˋExp de Mensagens Acumuladosˋ." + +#: src/modules/ranks/settings.py:91 +#, possible-python-brace-format +msgctxt "guildset:rank_channel|set_using" +msgid "{cmd} or option menu below." +msgstr "{cmd} ou escolha uma opção no menu abaixo." + +#: src/modules/ranks/settings.py:103 +msgctxt "guildset:rank_channel" +msgid "rank_channel" +msgstr "canal_do_rank" + +#: src/modules/ranks/settings.py:106 +msgctxt "guildset:rank_channel|desc" +msgid "The channel in which to send rank update notifications." +msgstr "" +"Canal para enviar as atualizações dos níveis classificatórios do rank." + +#: src/modules/ranks/settings.py:110 +msgctxt "guildset:rank_channel|long_desc" +msgid "" +"Whenever a user advances a rank, a congratulatory message will be sent in " +"this channel, if set. If `dm_ranks` is enabled, this channel will only be " +"used when the user has opted not to receive DM notifications, or is " +"otherwise unreachable." +msgstr "" +"Assim que um usuário subir de nível classificatório, receberá os parabéns " +"pela conquista através de uma mensagem enviada para este canal. Se estiver " +"configurado ˋmd_niveisˋ como habilitado, este canal somente servirá quando o" +" usuário optou por não receber mensagem direta de não amigos." + +#: src/modules/ranks/settings.py:116 +msgctxt "guildset:rank_channel|accepts" +msgid "Rank notification channel name or id." +msgstr "Nome, ou ID, do canal de notificação dos níveis classificatórios." + +#: src/modules/ranks/settings.py:128 +#, possible-python-brace-format +msgctxt "guildset:rank_channel|set_response|set" +msgid "Rank update messages will be sent to {channel}." +msgstr "Atualizações de classificação serão enviadas para {channel}." + +#: src/modules/ranks/settings.py:133 +msgctxt "guildset:rank_channel|set_response|unset" +msgid "" +"Rank update messages will be ignored or sent via DM (if `dm_ranks` is " +"enabled)." +msgstr "" +"Atualizações de classificação serão ignoradas ou enviadas por Mensagem " +"Direta (se ˋmd_niveisˋ estiver habilitado)" + +#: src/modules/ranks/settings.py:143 +#, possible-python-brace-format +msgctxt "guildset:rank_channel|set_using" +msgid "{cmd} or channel selector below." +msgstr "{cmd} ou selecione o canal listado abaixo." + +#: src/modules/ranks/settings.py:153 +msgctxt "guildset:dm_ranks" +msgid "dm_ranks" +msgstr "md_niveis" + +#: src/modules/ranks/settings.py:156 +msgctxt "guildset:dm_ranks|desc" +msgid "" +"Whether to send rank advancement notifications through direct messages." +msgstr "" +"Se devo enviar a progressão nos níveis classificatórios através de mensagens" +" diretas." + +#: src/modules/ranks/settings.py:160 +msgctxt "guildset:dm_ranks|long_desc" +msgid "" +"If enabled, congratulatory messages for rank advancement will be direct " +"messaged to the user, instead of being sent to the configured " +"`rank_channel`." +msgstr "" +"Se habilitado, mensagens de comemoração pela conquista de um novo nível " +"classificatório serão enviadas por mensagem direta ao usuário. Ao invés de " +"serem enviadas ao ˋcanal_do_rankˋ." + +#: src/modules/ranks/settings.py:174 +msgctxt "guildset:dm_ranks|response:true" +msgid "I will direct message members upon rank advancement." +msgstr "" +"Eu irei enviar mensagens diretas aos membros sobre atualização dos seus " +"níveis classificatórios." + +#: src/modules/ranks/settings.py:179 +msgctxt "guildset:dm_ranks|response:false" +msgid "I will never direct message members upon rank advancement." +msgstr "" +"Eu não enviarei mensagens diretamente aos membros sobre atualização dos seus" +" níveis classificatórios." + +#: src/modules/ranks/ui/preview.py:75 +msgctxt "ui:rank_preview|button:edit|error:role_deleted" +msgid "" +"The role underlying this rank no longer exists! Please select a new role " +"from the role menu." +msgstr "" +"O cargo sublinhado, não é um cargo existente. Por favor, selecione um novo " +"cargo através do menu de cargos." + +#: src/modules/ranks/ui/preview.py:82 +msgctxt "ui:rank_preview|button:edit|error:role_not_assignable" +msgid "" +"I do not have permission to edit the underlying role! Please select a new " +"role from the role menu, or ensure my top role is above the selected role." +msgstr "" +"Eu não tenho permissão suificiente para editar o cargo sublinhado. Por " +"favor, selecione um novo cargo, através do menu de cargos, ou garanta que " +"meu cargo seja mais elevado do que aqueles que irei designar." + +#: src/modules/ranks/ui/preview.py:91 +msgctxt "ui:rank_preview|button:edit|error|title" +msgid "Failed to edit rank!" +msgstr "Ocorreu uma falha ao editar os cargos." + +#: src/modules/ranks/ui/preview.py:109 +msgctxt "ui:rank_preview|button:edit|label" +msgid "Edit" +msgstr "Editar" + +#: src/modules/ranks/ui/preview.py:142 +#, possible-python-brace-format +msgctxt "ui:rank_preview|button:delete|response:success|description|with_role" +msgid "" +"You have deleted the rank {mention}. Press the button below to also delete " +"the role." +msgstr "" +"Você deletou o nível {mention}. Clique no botão abaixo para também apagar o " +"cargo." + +#: src/modules/ranks/ui/preview.py:147 +#, possible-python-brace-format +msgctxt "ui:rank_preview|button:delete|response:success|description|no_role" +msgid "You have deleted the rank {mention}." +msgstr "Você deletou o nível {mention}." + +#: src/modules/ranks/ui/preview.py:153 +msgctxt "ui:rank_preview|button:delete|response:success|title" +msgid "Rank Deleted" +msgstr "Nível Deletado" + +#: src/modules/ranks/ui/preview.py:163 +msgctxt "" +"ui:rank_preview|button:delete|response:success|button:delete_role|label" +msgid "Delete Role" +msgstr "Deletar Cargo" + +#: src/modules/ranks/ui/preview.py:179 +#, possible-python-brace-format +msgctxt "" +"ui:rank_preview|button:delete|response:success|button:delete_role|response:errored|desc" +msgid "" +"You have deleted the rank **{name}**! Could not delete the role due to an " +"unknown error." +msgstr "" +"Você deletou o nível **{name}**! Não pude deletar o cargo devido a um erro " +"desconhecido." + +#: src/modules/ranks/ui/preview.py:185 +#, possible-python-brace-format +msgctxt "" +"ui:rank_preview|button:delete|response:success|button:delete_role|response:success|desc" +msgid "You have deleted the rank **{name}** along with the underlying role." +msgstr "Você deletou o nível **{name}** juntamente com o cargo sublinhado." + +#: src/modules/ranks/ui/preview.py:202 +msgctxt "ui:rank_preview|button:delete|label" +msgid "Delete Rank" +msgstr "Deletar Nível" + +#: src/modules/ranks/ui/preview.py:232 +msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:is_default" +msgid "The @everyone role cannot be removed, and cannot be a rank!" +msgstr "" +"O cargo @everyone não pode ser removido, e nem pode ser considerado um " +"nível." + +#: src/modules/ranks/ui/preview.py:237 +msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:is_managed" +msgid "" +"The role is managed by another application or integration, and cannot be a " +"rank!" +msgstr "" +"O cargo é gerenciado por uma outra aplicação, ou integração, e não pode ser " +"de um nível!" + +#: src/modules/ranks/ui/preview.py:242 +msgctxt "" +"ui:rank_preview|menu:roles|error:not_assignable|suberror:no_permissions" +msgid "" +"I do not have the `MANAGE_ROLES` permission in this server, so I cannot " +"manage ranks!" +msgstr "" +"Eu não tenho a permissão para ˋGERENCIAR_CARGOSˋ neste servidor, então eu " +"não posso gerenciar os níveis." + +#: src/modules/ranks/ui/preview.py:247 +msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:above_me" +msgid "" +"This role is above my top role in the role hierarchy, so I cannot add or " +"remove it!" +msgstr "" +"Este é um cargo acima do meu cargo mais elevado, então eu não posso " +"adiciona-lo ou removê-lo." + +#: src/modules/ranks/ui/preview.py:253 +msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:other" +msgid "I am not able to manage the selected role, so it cannot be a rank!" +msgstr "" +"Eu não posso gerenciar este cargo, então não posso colocá-lo como nível." + +#: src/modules/ranks/ui/preview.py:259 +msgctxt "ui:rank_preview|menu:roles|error:not_assignable|title" +msgid "Could not update rank!" +msgstr "Não pude atualizar as classificações." + +#: src/modules/ranks/ui/preview.py:269 +msgctxt "ui:rank_preview|menu:roles|placeholder" +msgid "Update Rank Role" +msgstr "Atualizar Cargos de Nível" + +#: src/modules/ranks/ui/preview.py:281 +msgctxt "ui:rank_preview|embed|title" +msgid "Rank Information" +msgstr "Informação das Cassificações" + +#: src/modules/ranks/ui/preview.py:288 +msgctxt "ui:rank_preview|embed|field:role|name" +msgid "Role" +msgstr "Cargo" + +#: src/modules/ranks/ui/preview.py:295 +msgctxt "ui:rank_preview|embed|field:required|name" +msgid "Required" +msgstr "Necessário" + +#: src/modules/ranks/ui/preview.py:302 +msgctxt "ui:rank_preview|embed|field:reward|name" +msgid "Reward" +msgstr "Recompensa" + +#: src/modules/ranks/ui/preview.py:311 +msgctxt "ui:rank_preview|embed|field:message" +msgid "Congratulatory Message" +msgstr "Mensagem de Comemoração" + +#: src/modules/ranks/ui/refresh.py:134 +msgctxt "ui:refresh_ranks|embed|title:errored" +msgid "Could not refresh the server ranks!" +msgstr "Não pude atualizar os níveis classificatórios do servidor." + +#: src/modules/ranks/ui/refresh.py:142 +msgctxt "ui:refresh_ranks|embed|title:done" +msgid "Rank refresh complete!" +msgstr "Atualização dos níveis classificatórios foi feita!" + +#: src/modules/ranks/ui/refresh.py:148 +msgctxt "ui:refresh_ranks|embed|title:working" +msgid "Refreshing your server ranks, please wait." +msgstr "Atualizando os níveis classificatórios, aguarde um momento." + +#: src/modules/ranks/ui/refresh.py:166 +#, possible-python-brace-format +msgctxt "ui:refresh_ranks|embed|line:ranks" +msgid "**Loading server ranks:** {emoji}" +msgstr "**Atualizando níveis de classificação:** {emoji}" + +#: src/modules/ranks/ui/refresh.py:176 +#, possible-python-brace-format +msgctxt "ui:refresh_ranks|embed|line:members" +msgid "**Loading server members:** {emoji}" +msgstr "**Atualizando membros do servidor:** {emoji}" + +#: src/modules/ranks/ui/refresh.py:186 +#, possible-python-brace-format +msgctxt "ui:refresh_ranks|embed|line:roles" +msgid "**Loading rank roles:** {emoji}" +msgstr "**Atualizando cargos de nível:** {emoji}" + +#: src/modules/ranks/ui/refresh.py:196 +#, possible-python-brace-format +msgctxt "ui:refresh_ranks|embed|line:compute" +msgid "**Computing correct ranks:** {emoji}" +msgstr "**Calculando os níveis adequados:** {emoji}" + +#: src/modules/ranks/ui/refresh.py:207 +msgctxt "ui:refresh_ranks|embed|field:remove|name" +msgid "Removing invalid rank roles from members" +msgstr "Removendo os cargos de níveis inexistentes dos membros." + +#: src/modules/ranks/ui/refresh.py:211 +#, possible-python-brace-format +msgctxt "ui:refresh_ranks|embed|field:remove|value" +msgid "{progress} {done}/{total} removed" +msgstr "{progress} {done}/{total} removidos" + +#: src/modules/ranks/ui/refresh.py:222 +#, possible-python-brace-format +msgctxt "ui:refresh_ranks|embed|line:remove" +msgid "**Removed invalid ranks:** {done}/{target}" +msgstr "**Cargos inválidos removidos:** {done}/{target}" + +#: src/modules/ranks/ui/refresh.py:230 +msgctxt "ui:refresh_ranks|embed|field:add|name" +msgid "Giving members their rank roles" +msgstr "" +"Atribuindo os cargos de acordo com os níveis de classificação dos membros." + +#: src/modules/ranks/ui/refresh.py:234 +#, possible-python-brace-format +msgctxt "ui:refresh_ranks|embed|field:add|value" +msgid "{progress} {done}/{total} given" +msgstr "{progress} {done}/{total} dados" + +#: src/modules/ranks/ui/refresh.py:245 +#, possible-python-brace-format +msgctxt "ui:refresh_ranks|embed|line:add" +msgid "**Updated member ranks:** {done}/{target}" +msgstr "**Níveis dos membros atualizados:** {done}/{target}" + +#: src/modules/ranks/ui/config.py:42 +msgctxt "ui:rankconfigui|check|not_permitted" +msgid "You have insufficient server permissions to use this UI!" +msgstr "Você não tem permissões suficientes no servidor para usar isto!" + +#: src/modules/ranks/ui/config.py:64 +msgctxt "ui:rank_config|button:overview|label" +msgid "Edit Ranks" +msgstr "Editar Níveis" + +#: src/modules/ranks/ui/config.py:82 +msgctxt "ui:rank_config|menu:types|placeholder" +msgid "Select Statistic Type" +msgstr "Selecione o Tipo de Estatística" + +#: src/modules/ranks/ui/config.py:90 +msgctxt "ui:rank_config|menu:types|option:voice" +msgid "Voice Activity" +msgstr "Atividade em Canal de Voz" + +#: src/modules/ranks/ui/config.py:98 +msgctxt "ui:rank_config|menu:types|option:xp" +msgid "XP Earned" +msgstr "EXP Acumulada" + +#: src/modules/ranks/ui/config.py:106 +msgctxt "ui:rank_config|menu:types|option:messages" +msgid "Messages Sent" +msgstr "Mensagens Enviadas" + +#: src/modules/ranks/ui/config.py:126 +msgctxt "ui:rank_config|menu:channels|placeholder" +msgid "Select Rank Notification Channel" +msgstr "Selecione o Canal de Notificações dos Níveis de Classificação" + +#: src/modules/ranks/ui/config.py:134 +msgctxt "ui:rank_config|embed|title" +msgid "Ranks Configuration Panel" +msgstr "Painel de Configuração dos Níveis de Classificação" + +#: src/modules/ranks/ui/config.py:171 +msgctxt "dash:rank|title" +msgid "Rank Configuration ({commands[configure ranks]})" +msgstr "" +"Configuração dos Níveis de Classificação ({commands[configure ranks]})" + +#: src/modules/ranks/ui/config.py:175 +msgctxt "dash:rank|dropdown|placeholder" +msgid "Activity Rank Panel" +msgstr "Painel de Classificação dos Membros" + +#: src/modules/ranks/ui/overview.py:95 +msgctxt "ui:rank_overview|button:auto|label" +msgid "Auto Create" +msgstr "Criar Automaticamente" + +#: src/modules/ranks/ui/overview.py:110 +msgctxt "ui:rank_overview|button:refresh|label" +msgid "Refresh Member Ranks" +msgstr "Atualizar Níveis dos Membros" + +#: src/modules/ranks/ui/overview.py:122 +msgctxt "ui:rank_overview|button:clear|confirm" +msgid "Are you sure you want to **delete all activity ranks** in this server?" +msgstr "" +"Você tem certeza que quer **apagar todos os Níveis de Atividade** deste " +"servidor?" + +#: src/modules/ranks/ui/overview.py:127 +msgctxt "ui:rank_overview|button:clear|confirm|button:yes" +msgid "Yes, clear ranks" +msgstr "Sim, apagar Níveis de Atividade" + +#: src/modules/ranks/ui/overview.py:133 +msgctxt "ui:rank_overview|button:clear|confirm|button:no" +msgid "Cancel" +msgstr "Cancelar" + +#: src/modules/ranks/ui/overview.py:149 +msgctxt "ui:rank_overview|button:clear|label" +msgid "Clear Ranks" +msgstr "Limpar Níveis Classificatórios" + +#: src/modules/ranks/ui/overview.py:179 +msgctxt "ui:rank_overview|button:create|label" +msgid "Create Rank" +msgstr "Criar Níveis Classificatórios" + +#: src/modules/ranks/ui/overview.py:222 +msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:is_default" +msgid "The @everyone role cannot be removed, and cannot be a rank!" +msgstr "" +"O cargo @everyone não pode ser removido, nem pode ser um cargo de nível de " +"classificação." + +#: src/modules/ranks/ui/overview.py:227 +msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:is_managed" +msgid "" +"The role is managed by another application or integration, and cannot be a " +"rank!" +msgstr "" +"Este cargo é gerenciado por outra aplicação ou Integração, e não pode ser " +"usado para um nível classificatório." + +#: src/modules/ranks/ui/overview.py:232 +msgctxt "" +"ui:rank_overview|menu:roles|error:not_assignable|suberror:no_permissions" +msgid "" +"I do not have the `MANAGE_ROLES` permission in this server, so I cannot " +"manage ranks!" +msgstr "" +"Eu não tenho permissão de ˋGERENCIAR_CARGOSˋ neste servidor, então não posso" +" gerenciar uma classificação em níveis." + +#: src/modules/ranks/ui/overview.py:237 +msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:above_me" +msgid "" +"This role is above my top role in the role hierarchy, so I cannot add or " +"remove it!" +msgstr "" +"Este cargo é acima do meu cargo mais elevado, então eu não posso atribuí-lo," +" ou removê-lo!" + +#: src/modules/ranks/ui/overview.py:243 +msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:other" +msgid "I am not able to manage the selected role, so it cannot be a rank!" +msgstr "" +"Eu não estou habilitado para gerenciar o cargo selecionado, então ele não " +"poderá ser atribuído como um nível de classificação." + +#: src/modules/ranks/ui/overview.py:249 +msgctxt "ui:rank_overview|menu:roles|error:not_assignable|title" +msgid "Could not create rank!" +msgstr "Não pude criar o nível!" + +#: src/modules/ranks/ui/overview.py:273 +msgctxt "ui:rank_overview|menu:roles|placeholder" +msgid "Create from role" +msgstr "Criar por cargos" + +#: src/modules/ranks/ui/overview.py:290 +msgctxt "ui:rank_overview|menu:ranks|placeholder" +msgid "View or edit rank" +msgstr "Ver ou editar níveis de classificação" + +#: src/modules/ranks/ui/overview.py:376 +msgctxt "ui:rank_overview|embed:noranks|desc" +msgid "" +"No activity ranks have been set up!\n" +"Press 'AUTO' to automatically create a standard heirachy of voice | text | xp ranks, or select a role or press Create below!" +msgstr "" +"Nenhum nível de classificação foi configurado!\n" +"Pressione em 'AUTO' para criar automaticamente um padrão hierárquico de Níveis de Atividade em Canais de Voz | Texto | Exp, ou pressione em Criar para fazê-lo manualmente." + +#: src/modules/ranks/ui/overview.py:384 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|title|type:voice" +msgid "Voice Ranks in {guild_name}" +msgstr "Classificação em Canais de Voz em {guild_name}" + +#: src/modules/ranks/ui/overview.py:389 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|title|type:xp" +msgid "XP ranks in {guild_name}" +msgstr "Classificação em EXPˋs em {guild_name}" + +#: src/modules/ranks/ui/overview.py:394 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|title|type:message" +msgid "Message ranks in {guild_name}" +msgstr "Classificação em Mensagens em {guild_name}" + +#: src/modules/ranks/ui/overview.py:406 +msgctxt "ui:rank_overview|embed|field:note|name" +msgid "Note" +msgstr "Nota" + +#: src/modules/ranks/ui/overview.py:412 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|field:note|value:with_season" +msgid "Ranks are determined by activity since {timestamp}." +msgstr "" +"Os níveis são determinados de acordo com a atividade desde {timestamp}." + +#: src/modules/ranks/ui/overview.py:419 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|field:note|value:without_season" +msgid "" +"Ranks are determined by *all-time* statistics.\n" +"To reward ranks from a later time (e.g. to have monthly/quarterly/yearly ranks) set the `season_start` with {stats_cmd}" +msgstr "" +"Os Níveis de Classificação são determinados pela estatística desde o começo da contagem.\n" +"Para recompensar Níveis de uma classificação mais antiga, (ex. ter estatísticas de níveis mensalmente/semanalmente/anualmente), use ˋcomeço_estatísticasˋ em {stats_cmd}" + +#: src/modules/ranks/ui/overview.py:426 +msgctxt "ui:rank_overview|embed|field:note|value|voice_addendum" +msgid "" +"Also note that ranks will only be updated when a member leaves a tracked " +"voice channel! Use the **Refresh Member Ranks** button below to update all " +"members manually." +msgstr "" +"Perceba também, que os Níveis somente serão atualizados quando um membro " +"sair de um canal em que esteja contabilizando atividade. Para atualizar " +"manualmente todos os níveis, use o botão **Atualizar Níveis dos Membros** " +"abaixo." + +#: src/modules/ranks/ui/editor.py:33 +msgctxt "ui:rank_editor|input:role_name|label" +msgid "Role Name" +msgstr "Nome do Cargo" + +#: src/modules/ranks/ui/editor.py:37 +msgctxt "ui:rank_editor|input:role_name|placeholder" +msgid "Name of the awarded guild role" +msgstr "Nome do cargo concedido" + +#: src/modules/ranks/ui/editor.py:53 +msgctxt "ui:rank_editor|input:role_colour|label" +msgid "Role Colour" +msgstr "Cor de Cargo" + +#: src/modules/ranks/ui/editor.py:57 +msgctxt "ui:rank_editor|input:role_colour|placeholder" +msgid "Colour of the awarded guild role, e.g. #AB1321" +msgstr "Cor do cargo concedido, Exemplo #AB1321" + +#: src/modules/ranks/ui/editor.py:69 +msgctxt "ui:rank_editor|input:role_colour|error:parse" +msgid "" +"`role_colour`: Could not parse colour! Please use `#` format e.g. " +"`#AB1325`." +msgstr "" +"`cor_de_cargo`: Não consegui analisar a cor! Por favor, use o formato " +"`#` Exemplo: `#AB1325`." + +#: src/modules/ranks/ui/editor.py:88 +msgctxt "ui:rank_editor|type:voice|input:requires|label" +msgid "Required Voice Hours" +msgstr "Quantidade de Horas de Voz Necessárias" + +#: src/modules/ranks/ui/editor.py:92 +msgctxt "ui:rank_editor|type:voice|input:requires|placeholder" +msgid "Number of voice hours before awarding this rank" +msgstr "" +"Número de horas, em canal de voz, necessárias para alcançar este nível de " +"classificação." + +#: src/modules/ranks/ui/editor.py:97 +msgctxt "ui:rank_editor|type:xp|input:requires|label" +msgid "Required XP" +msgstr "EXP Necessária" + +#: src/modules/ranks/ui/editor.py:101 +msgctxt "ui:rank_editor|type:xp|input:requires|placeholder" +msgid "Amount of XP needed before obtaining this rank" +msgstr "" +"Quantidade de XP necessárias para alcançar este nível de classificação" + +#: src/modules/ranks/ui/editor.py:106 +msgctxt "ui:rank_editor|type:message|input:requires|label" +msgid "Required Message Count" +msgstr "Quantidade de Mensagens Necessárias" + +#: src/modules/ranks/ui/editor.py:110 +msgctxt "ui:rank_editor|type:message|input:requires|placeholder" +msgid "Number of messages needed before awarding rank" +msgstr "" +"Número, de mensagens enviadas, necessário para alcançar este nível de " +"classificação." + +#: src/modules/ranks/ui/editor.py:126 +msgctxt "ui:rank_editor|type:voice|input:requires|error:parse" +msgid "" +"`requires`: Could not parse provided minimum time! Please write a number of " +"hours." +msgstr "" +"ˋrequerˋ: Não pude analisar o tempo mínimo informado! Por favor, informe o " +"número de horas." + +#: src/modules/ranks/ui/editor.py:137 +msgctxt "ui:rank_editor|type:message|input:requires|error:parse" +msgid "" +"`requires`: Could not parse provided minimum message count! Please enter an " +"integer." +msgstr "" +"ˋrequerˋ: Não pude analisar o número mínimo de \"mensagens enviadas\" " +"informado. Por favor, use um valor inteiro." + +#: src/modules/ranks/ui/editor.py:148 +msgctxt "ui:rank_editor|type:xp|input:requires|error:parse" +msgid "" +"`requires`: Could not parse provided minimum XP! Please enter an integer." +msgstr "" +"ˋrequerˋ: Não pude analisar o valor mínimo de XP informado! Por favor, use " +"um número inteiro." + +#: src/modules/ranks/ui/editor.py:162 +msgctxt "ui:rank_editor|input:reward|label" +msgid "LionCoins awarded upon achieving this rank" +msgstr "" +"Prêmio de LionCoins a ser pago quando atingirem este nível de classificação." + +#: src/modules/ranks/ui/editor.py:166 +msgctxt "ui:rank_editor|input:reward|placeholder" +msgid "LionCoins awarded upon achieving this rank" +msgstr "" +"Prêmio de LionCoins a ser pago quando atingirem este nível de classificação." + +#: src/modules/ranks/ui/editor.py:181 +msgctxt "ui:rank_editor|input:reward|error:parse" +msgid "`reward`: Please enter an integer number of LionCoins." +msgstr "ˋrequerˋ: Por favor, informe um número inteiro de LionCoins. " + +#: src/modules/ranks/ui/editor.py:197 +msgctxt "ui:rank_editor|input:message|label" +msgid "Rank Message" +msgstr "Níveis de Classificação em Mensagens" + +#: src/modules/ranks/ui/editor.py:201 +msgctxt "ui:rank_editor|input:message|placeholder" +msgid "Congratulatory message sent to the user upon achieving this rank." +msgstr "" +"Mensagem de comemoração enviada ao usuário quando atingir este nível de " +"classificação." + +#: src/modules/ranks/ui/editor.py:207 +#, possible-python-brace-format +msgctxt "ui:rank_editor|input:message|default|type:voice" +msgid "" +"Congratulations {user_mention}!\n" +"For working hard for **{requires}**, you have achieved the rank of **{role_name}** in **{guild_name}**! Keep up the good work." +msgstr "" +"Parabéns, {user_mention}!\n" +"Por ter dado duro por **{requires}**, você atingiu o nível de **{role_name}** em **{guild_name}**! Continue com esse empenho!" + +#: src/modules/ranks/ui/editor.py:262 +msgctxt "ui:rank_editor|mode:edit|title" +msgid "Rank Editor" +msgstr "Editor de Níveis" + +#: src/modules/ranks/ui/editor.py:317 +msgctxt "ui:rank_editor|mode:create|title" +msgid "Rank Creator" +msgstr "Criador de Níveis" diff --git a/locales/pt_BR/LC_MESSAGES/reminders.po b/locales/pt_BR/LC_MESSAGES/reminders.po new file mode 100644 index 00000000..c92f5a2e --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/reminders.po @@ -0,0 +1,418 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/reminders/cog.py:114 +#, possible-python-brace-format +msgctxt "create_reminder|error:past" +msgid "The provided reminder time {timestamp} is in the past!" +msgstr "O momento informado para o lembrete {timestamp} é no passado! " + +#: src/modules/reminders/cog.py:123 +msgctxt "create_reminder|error:too_fast" +msgid "" +"You cannot set a repeating reminder with a period less than 10 minutes." +msgstr "" +"Você não pode criar lembretes repetitivos com menos de 10 minutos de " +"intervalo entre eles." + +#: src/modules/reminders/cog.py:133 +msgctxt "create_reminder|error:too_many" +msgid "Sorry, you have reached the maximum of `25` reminders." +msgstr "" +"Sinto muito, mas você já atingiu o máximo de ˋ25ˋ lembretes permitidos." + +#: src/modules/reminders/cog.py:149 +msgctxt "create_reminder|error:cannot_dm" +msgid "" +"I cannot direct message you! Do you have me blocked or direct messages " +"closed?" +msgstr "" +"Eu não posso enviar uma Mensagem Direta a você! O que eu te fiz? Você me " +"bloqueou, ou suas Mensagens Diretas estão fechadas?" + +#: src/modules/reminders/cog.py:186 +#, possible-python-brace-format +msgctxt "parse_timestamp|error:parse" +msgid "" +"Could not parse `{given}` as a valid reminder time. Try entering the time in" +" the form `HH:MM` or `YYYY-MM-DD HH:MM`." +msgstr "" +"Não pude analisar ˋ{given}ˋ como um lembrete, de tempo, válido. Tente usar o" +" formato ˋHH:MMˋ ou ˋAAAA-MM-DD HH:MMˋ." + +#: src/modules/reminders/cog.py:329 +msgctxt "cmd:reminders" +msgid "reminders" +msgstr "lembretes" + +#: src/modules/reminders/cog.py:332 +msgctxt "cmd:reminders|desc" +msgid "View and set your reminders." +msgstr "Veja e configure seus lembretes." + +#: src/modules/reminders/cog.py:353 +msgctxt "cmd:remindme" +msgid "remindme" +msgstr "lembrar-me" + +#: src/modules/reminders/cog.py:354 +msgctxt "cmd:remindme|desc" +msgid "View and set task reminders." +msgstr "Veja e configure lembretes de tarefas." + +#: src/modules/reminders/cog.py:361 +msgctxt "cmd:reminders_cancel" +msgid "cancel" +msgstr "cancelar" + +#: src/modules/reminders/cog.py:364 +msgctxt "cmd:reminders_cancel|desc" +msgid "" +"Cancel a single reminder. Use /reminders to clear or cancel multiple " +"reminders." +msgstr "" +"Cancele um lembrete. Use /lembretes para limpar ou cancelar vários lembretes" +" de uma vez." + +#: src/modules/reminders/cog.py:368 +msgctxt "cmd:reminders_cancel|param:reminder" +msgid "reminder" +msgstr "lembrete" + +#: src/modules/reminders/cog.py:373 +msgctxt "cmd:reminders_cancel|param:reminder|desc" +msgid "Start typing, then select a reminder to cancel." +msgstr "Comece digitando, e então, selecione o lembrete a cancelar." + +#: src/modules/reminders/cog.py:392 +msgctxt "cmd:reminders_cancel|error:no_reminders" +msgid "There are no reminders to cancel!" +msgstr "Não há nenhum lembrete para cancelar." + +#: src/modules/reminders/cog.py:416 +msgctxt "cmd:reminders_cancel|error:no_match" +msgid "" +"I am not sure which reminder you want to cancel. Please try again, selecting" +" a reminder from the list of choices." +msgstr "" +"Eu não entendi ao certo qual lembrete você gostaria de cancelar. Por favor, " +"tente novamente selecionando o lembrete de uma das opções da lista." + +#: src/modules/reminders/cog.py:429 +msgctxt "cmd:reminders_cancel|embed:success|desc" +msgid "Reminder successfully cancelled." +msgstr "Lembretes cancelados com sucesso." + +#: src/modules/reminders/cog.py:446 +msgctxt "cmd:reminders_cancel|acmpl:reminder|error:no_reminders" +msgid "There are no reminders to cancel!" +msgstr "Não há lembretes para cancelar." + +#: src/modules/reminders/cog.py:476 +#, possible-python-brace-format +msgctxt "cmd:reminders_cancel|acmpl:reminder|error:no_matches" +msgid "You do not have any reminders matching \"{partial}\"" +msgstr "Você não tem nenhum lembrete parecido com \"{partial}\"" + +#: src/modules/reminders/cog.py:484 +msgctxt "cmd:remindme_at" +msgid "at" +msgstr "às" + +#: src/modules/reminders/cog.py:487 +msgctxt "cmd:remindme_at|desc" +msgid "Schedule a reminder for a particular time." +msgstr "Agende um lembrete para um horário específico." + +#: src/modules/reminders/cog.py:491 +msgctxt "cmd:remindme_at|param:time" +msgid "time" +msgstr "tempo" + +#: src/modules/reminders/cog.py:492 +msgctxt "cmd:remindme_at|param:reminder" +msgid "reminder" +msgstr "lembrete" + +#: src/modules/reminders/cog.py:493 +msgctxt "cmd:remindme_at|param:every" +msgid "repeat_every" +msgstr "repetir_toda" + +#: src/modules/reminders/cog.py:498 +msgctxt "cmd:remindme_at|param:time|desc" +msgid "When you want to be reminded. (E.g. `4pm` or `16:00`)." +msgstr "Quando você gostaria de ser lembrado. (Ex. ˋ4pmˋ ou ˋ16:00ˋ)." + +#: src/modules/reminders/cog.py:502 +msgctxt "cmd:remindme_at|param:reminder|desc" +msgid "What should the reminder be?" +msgstr "Sobre o quê você quer ser lembrado?" + +#: src/modules/reminders/cog.py:506 +msgctxt "cmd:remindme_at|param:every|desc" +msgid "How often to repeat this reminder." +msgstr "Quantas vezes devo repetir este lembrete." + +#: src/modules/reminders/cog.py:533 +msgctxt "cmd:remindme_at|error|title" +msgid "Could not create reminder!" +msgstr "Não pude criar o lembrete!" + +#: src/modules/reminders/cog.py:564 +#, possible-python-brace-format +msgctxt "cmd:remindme_at|acmpl:time|error:parse" +msgid "" +"Cannot parse \"{partial}\" as a time. Try the format HH:MM or YYYY-MM-DD " +"HH:MM" +msgstr "" +"Não pude analisar \"{partial}\" como um tempo. Tente o formato HH:MM ou " +"AAAA-MM-DD HH:MM" + +#: src/modules/reminders/cog.py:571 +msgctxt "cmd:remindme_in" +msgid "in" +msgstr "em" + +#: src/modules/reminders/cog.py:574 +msgctxt "cmd:remindme_in|desc" +msgid "Schedule a reminder for a given amount of time in the future." +msgstr "" +"Lembrete de check-in para uma determinada quantidade de horários no futuro." + +#: src/modules/reminders/cog.py:578 +msgctxt "cmd:remindme_in|param:time" +msgid "time" +msgstr "tempo" + +#: src/modules/reminders/cog.py:579 +msgctxt "cmd:remindme_in|param:reminder" +msgid "reminder" +msgstr "lembrete" + +#: src/modules/reminders/cog.py:580 +msgctxt "cmd:remindme_in|param:every" +msgid "repeat_every" +msgstr "repetir_toda" + +#: src/modules/reminders/cog.py:585 +msgctxt "cmd:remindme_in|param:time|desc" +msgid "How far into the future to set the reminder (e.g. 1 day 10h 5m)." +msgstr "Daqui há quanto tempo você quer ser lembrado? (ex. 1 dia 10h 5m)." + +#: src/modules/reminders/cog.py:589 +msgctxt "cmd:remindme_in|param:reminder|desc" +msgid "What should the reminder be?" +msgstr "O que deve ser lembrado?" + +#: src/modules/reminders/cog.py:593 +msgctxt "cmd:remindme_in|param:every|desc" +msgid "How often to repeat this reminder. (e.g. 1 day, or 2h)" +msgstr "Quantas vezes repetir este lembrete. (ex 1 dia, ou 2h)" + +#: src/modules/reminders/cog.py:619 +msgctxt "cmd:remindme_in|error|title" +msgid "Could not create reminder!" +msgstr "Não pude criar o lembrete!" + +#: src/modules/reminders/ui.py:47 +msgctxt "ui:reminderlist|button:clear|confirm|title" +msgid "Are You Sure?" +msgstr "Você tem certeza?" + +#: src/modules/reminders/ui.py:50 +#, possible-python-brace-format +msgctxt "ui:reminderlist|button:clear|confirm|desc" +msgid "Are you sure you want to delete your `{count}` reminder?" +msgid_plural "Are you sure you want to clear your `{count}` reminders?" +msgstr[0] "Você tem certeza que deseja limpar seu ˋ{count}ˋ lembrete?" +msgstr[1] "Você tem certeza que deseja limpar seus ˋ{count}ˋ lembretes?" +msgstr[2] "Você tem certeza que deseja limpar seus ˋ{count}ˋ lembretes?" + +#: src/modules/reminders/ui.py:57 +msgctxt "ui:reminderlist|button:clear|confirm|button:yes" +msgid "Yes, clear my reminders" +msgstr "Sim, apagar meus lembretes" + +#: src/modules/reminders/ui.py:68 +msgctxt "ui:reminderlist|button:clear|success|desc" +msgid "Your reminders have been cleared!" +msgstr "Seus lembretes foram apagados!" + +#: src/modules/reminders/ui.py:77 +msgctxt "ui:reminderlist|button:clear|confirm|button:cancel" +msgid "Cancel" +msgstr "Cancelar" + +#: src/modules/reminders/ui.py:89 +msgctxt "ui:reminderlist|button:clear|label" +msgid "Clear Reminders" +msgstr "Apagar Lembretes" + +#: src/modules/reminders/ui.py:110 +msgctxt "ui:reminderlist|button:new|modal|field:time|label" +msgid "When would you like to be reminded?" +msgstr "Quando você gostaria de ser lembrado?" + +#: src/modules/reminders/ui.py:120 +msgctxt "ui:reminderlist|button:new|modal|field:repeat|label" +msgid "How often should the reminder repeat?" +msgstr "Com que frequência o lembrete deve se repetir?" + +#: src/modules/reminders/ui.py:124 +msgctxt "ui:reminderlist|button:new|modal|field:repeat|placeholder" +msgid "1 day 10 hours 5 minutes (Leave empty for no repeat.)" +msgstr "" +"1 dia 10 horas 5 minutos (Caso não queira que se repita, deixe em branco)" + +#: src/modules/reminders/ui.py:133 +msgctxt "ui:reminderlist|button:new|modal|field:content|label" +msgid "What should I remind you?" +msgstr "Do que eu devo te lembrar?" + +#: src/modules/reminders/ui.py:144 +msgctxt "ui:reminderlist|button:new|modal|title" +msgid "Set a Reminder" +msgstr "Configurar um Lembrete" + +#: src/modules/reminders/ui.py:157 +#, possible-python-brace-format +msgctxt "ui:reminderlist|button:new|modal|parse|error:interval" +msgid "Cannot parse '{value}' as a duration." +msgstr "Não pude analisar ˋ{value}ˋ como uma duração." + +#: src/modules/reminders/ui.py:180 +msgctxt "ui:reminderlist|button:new|label" +msgid "New Reminder" +msgstr "Novo Lembrete" + +#: src/modules/reminders/ui.py:208 +msgctxt "ui:reminderlist|select:remove|placeholder" +msgid "Select to cancel" +msgstr "Selecione para cancelar" + +#: src/modules/reminders/ui.py:264 +msgctxt "ui:reminderlist|embed:list|author" +msgid "Your reminders" +msgstr "Seus lembretes" + +#: src/modules/reminders/ui.py:270 +msgctxt "ui:reminderlist|embed:list|footer" +msgid "Click a reminder to jump back to the context!" +msgstr "Clique em um lembrete para retornar ao conteúdo" + +#: src/modules/reminders/ui.py:277 +msgctxt "ui:reminderlist|embed:no_reminders|title" +msgid "You have no reminders set!" +msgstr "Você não possui lembretes configurados!" + +#: src/modules/reminders/ui.py:286 +msgctxt "ui:reminderlist|embed|tips:name" +msgid "Reminder Tips" +msgstr "Dicas dos lembretes." + +#: src/modules/reminders/ui.py:290 +#, possible-python-brace-format +msgctxt "ui:reminderlist|embed|tips:value" +msgid "" +"- Use {at_cmd} to set a reminder at a known time (e.g. `at 10 am`).\n" +"- Use {in_cmd} to set a reminder in a certain time (e.g. `in 2 hours`).\n" +"- Both commands support repeating reminders using the `every` parameter.\n" +"- Remember to tell me your timezone with {timezone_cmd} if you haven't already!" +msgstr "" +"- Use {at_cmd} para configurar um lembrete em para um tempo exato (ex. ˋàs 10 am`).\n" +"- Use {in_cmd} para configurar um lembrete daqui a um certo tempo (ex. `em 2 horas`).\n" +"- Ambos os comandos aceitam lembretes repetitivos, usando o parâmetro 'a cada'.\n" +"- Se lembre de configurar o seu fuso horário com {timezone_cmd}, caso ainda não tenha feito!" + +#: src/modules/reminders/data.py:63 +msgctxt "reminder_set|title" +msgid "Reminder Set!" +msgstr "Lembrete configurado!" + +#: src/modules/reminders/data.py:67 +#, possible-python-brace-format +msgctxt "reminder_set|desc" +msgid "" +"At {timestamp} I will remind you about:\n" +"> {content}" +msgstr "" +"Às {timestamp} eu irei te lembrar sobre:\n" +"> {content}" + +#: src/modules/reminders/data.py:79 +msgctxt "reminder_set|field:repeat|name" +msgid "Repeats" +msgstr "Repete" + +#: src/modules/reminders/data.py:83 +#, possible-python-brace-format +msgctxt "reminder_set|field:repeat|value" +msgid "" +"This reminder will repeat every `{interval}` (after the first reminder)." +msgstr "" +"Este lembrete irá repetir a cada ˋ{interval}ˋ (depois do primeiro lembrete)" + +#: src/modules/reminders/data.py:94 +msgctxt "reminder|embed" +msgid "You asked me to remind you!" +msgstr "Você me pediu para te lembrar!" + +#: src/modules/reminders/data.py:102 +msgctxt "reminder|embed" +msgid "Context?" +msgstr "Contexto?" + +#: src/modules/reminders/data.py:104 +msgctxt "reminder|embed" +msgid "Click Here" +msgstr "Clique Aqui" + +#: src/modules/reminders/data.py:111 +msgctxt "reminder|embed" +msgid "Next reminder" +msgstr "Próximo lembrete" + +#: src/modules/reminders/data.py:135 +#, possible-python-brace-format +msgctxt "reminder|formatted|interval" +msgid "Every day" +msgid_plural "Every `{days}` days" +msgstr[0] "Todo dia" +msgstr[1] "A cada ˋ{days}ˋ dias" +msgstr[2] "A cada ˋ{days}ˋ dias" + +#: src/modules/reminders/data.py:144 +#, possible-python-brace-format +msgctxt "reminder|formatted|interval" +msgid "Every hour" +msgid_plural "Every `{hours}` hours" +msgstr[0] "A cada hora" +msgstr[1] "A cada ˋ{hours}ˋ horas" +msgstr[2] "A cada ˋ{hours}ˋ horas" + +#: src/modules/reminders/data.py:153 +#, possible-python-brace-format +msgctxt "reminder|formatted|interval" +msgid "Every `{duration}`" +msgstr "A cada ˋ{duration}ˋ" diff --git a/locales/pt_BR/LC_MESSAGES/rolemenus.po b/locales/pt_BR/LC_MESSAGES/rolemenus.po new file mode 100644 index 00000000..6086ae13 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/rolemenus.po @@ -0,0 +1,1640 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/rolemenus/cog.py:41 +msgctxt "argtype:menu_style|opt:reaction" +msgid "Reaction Roles" +msgstr "Cargos por Reação" + +#: src/modules/rolemenus/cog.py:45 +msgctxt "argtype:menu_style|opt:button" +msgid "Button Menu" +msgstr "Botão do Menu" + +#: src/modules/rolemenus/cog.py:49 +msgctxt "argtype:menu_style|opt:dropdown" +msgid "Dropdown Menu" +msgstr "Menu Suspenso" + +#: src/modules/rolemenus/cog.py:68 +msgctxt "ctxcmd:rolemenu" +msgid "Role Menu Editor" +msgstr "Editor de Cargos" + +#: src/modules/rolemenus/cog.py:81 +msgctxt "ctxcmd:rolemenu|error:author_perms" +msgid "" +"You need the `MANAGE_ROLES` permission in order to manage the server role " +"menus." +msgstr "" +"Você precisa ter permissão ˋGERENCIAR_CARGOSˋ para que possa gerenciar as " +"configurações dos cargos." + +#: src/modules/rolemenus/cog.py:88 +msgctxt "ctxcmd:rolemenus|error:my_perms" +msgid "" +"I lack the `MANAGE_ROLES` permission required to offer roles from role " +"menus." +msgstr "" +"Está faltando uma permissão de ˋGERENCIAR_CARGOSˋ, necessária para " +"disponibilizar o menu de cargos." + +#: src/modules/rolemenus/cog.py:300 +msgctxt "parse:message_link|suberror:message_dne" +msgid "Could not find the linked message, has it been deleted?" +msgstr "Não pude encontrar a mensagem referida. Ela foi deletada?" + +#: src/modules/rolemenus/cog.py:305 +#, possible-python-brace-format +msgctxt "parse:message_link|suberror:no_perms" +msgid "" +"Insufficient permissions! I need the `MESSAGE_HISTORY` permission in " +"{channel}." +msgstr "" +"Permissões insuficientes! Eu preciso de permissões para ˋMESSAGE_HISTORYˋ em" +" {channel}." + +#: src/modules/rolemenus/cog.py:310 +#, possible-python-brace-format +msgctxt "parse:message_link|suberror:channel_dne" +msgid "The channel `{channelid}` could not be found in this server." +msgstr "O canal ˋ{channelid}ˋ não pôde ser encontrado neste servidor." + +#: src/modules/rolemenus/cog.py:315 +msgctxt "parse:message_link|suberror:malformed_link" +msgid "" +"Malformed message link. Please copy the link by right clicking the target " +"message." +msgstr "" +"O link para a mensagem referida está inconsistente. Por favor, copie o link " +"clicando com o botão direito do mouse sobre a mensagem." + +#: src/modules/rolemenus/cog.py:322 +#, possible-python-brace-format +msgctxt "parse:message_link|error" +msgid "" +"Failed to resolve the provided message link.\n" +"**ERROR:** {error}" +msgstr "" +"Uma falha ocorreu com o link da mensagem informado.\n" +"**ERRO:** {error}" + +#: src/modules/rolemenus/cog.py:434 +msgctxt "cmd:rolemenus" +msgid "rolemenus" +msgstr "menucargos" + +#: src/modules/rolemenus/cog.py:437 +msgctxt "cmd:rolemenus|desc" +msgid "View and configure the role menus in this server." +msgstr "Veja e configure o menu de cargos neste servidor." + +#: src/modules/rolemenus/cog.py:454 +msgctxt "cmd:rolemenus|error:author_perms" +msgid "" +"You need the `MANAGE_ROLES` permission in order to manage the server role " +"menus." +msgstr "" +"Você precisa de permissão para ˋGERENCIAR_CARGOSˋ para que possa gerenciar o" +" menu de cargos do servidor." + +#: src/modules/rolemenus/cog.py:461 +msgctxt "cmd:rolemenus|error:my_perms" +msgid "" +"I lack the `MANAGE_ROLES` permission required to offer roles from role " +"menus." +msgstr "" +"Não tenho permissão de ˋGERENCIAR_CARGOSˋ, necessária para oferecer um menu " +"de cargos." + +#: src/modules/rolemenus/cog.py:496 +#, possible-python-brace-format +msgctxt "acmpl:menus|choice:no_choices|name" +msgid "No role menus matching '{partial}'" +msgstr "Não há coincidência com o menu de cargos '{partial}'" + +#: src/modules/rolemenus/cog.py:515 +msgctxt "acmpl:menuroles|param:menu|keyname" +msgid "menu" +msgstr "menu" + +#: src/modules/rolemenus/cog.py:521 +msgctxt "acmpl:menuroles|choice:no_menu|name" +msgid "Please select a menu first" +msgstr "Por favor, primeiramente selecione um menu" + +#: src/modules/rolemenus/cog.py:545 +#, possible-python-brace-format +msgctxt "acmpl:menuroles|choice:invalid_menu|name" +msgid "Menu '{name}' does not exist!" +msgstr "Menu '{name}' não existe!" + +#: src/modules/rolemenus/cog.py:574 +#, possible-python-brace-format +msgctxt "acmpl:menuroles|choice:no_matching|name" +msgid "No roles in this menu matching '{partial}'" +msgstr "Nenhum cargo neste menu confere com este '{partial}' " + +#: src/modules/rolemenus/cog.py:581 +msgctxt "group:rolemenu" +msgid "rolemenu" +msgstr "menucargo" + +#: src/modules/rolemenus/cog.py:584 +msgctxt "group:rolemenu|desc" +msgid "Base command group for role menu configuration." +msgstr "Grupo de comandos base para configuração do menu de cargos. " + +#: src/modules/rolemenus/cog.py:593 +msgctxt "cmd:rolemenu_create" +msgid "newmenu" +msgstr "novomenu" + +#: src/modules/rolemenus/cog.py:596 +msgctxt "cmd:rolemenu_create|desc" +msgid "Create a new role menu (optionally using an existing message)" +msgstr "" +"Crie um novo menu de cargo (opcionalmente, use mensagens já existentes)" + +#: src/modules/rolemenus/cog.py:610 +msgctxt "cmd:rolemenu_create|param:message" +msgid "message_link" +msgstr "link_mensagem" + +#: src/modules/rolemenus/cog.py:611 +msgctxt "cmd:rolemenu_create|param:menu_style" +msgid "menu_style" +msgstr "estilo_menu" + +#: src/modules/rolemenus/cog.py:612 +msgctxt "cmd:rolemenu_create|param:remplate" +msgid "template" +msgstr "modelo" + +#: src/modules/rolemenus/cog.py:613 +msgctxt "cmd:rolemenu_create|param:rawmessage" +msgid "custom_message" +msgstr "mensagem_personalizada" + +#: src/modules/rolemenus/cog.py:623 +msgctxt "cmd:rolemenu_create|param:message|desc" +msgid "Link to an existing message to turn it into a (reaction) role menu" +msgstr "" +"Link de uma mensagem, já existente, para transforma-la em um painel (por " +"reação) de cargos." + +#: src/modules/rolemenus/cog.py:627 +msgctxt "cmd:rolemenu_create|param:menu_style" +msgid "Selection style for this menu (using buttons, dropdowns, or reactions)" +msgstr "" +"Estilo de seleção para este menu (usando botões, menu suspenso, ou reações)" + +#: src/modules/rolemenus/cog.py:631 +msgctxt "cmd:rolemenu_create|param:template" +msgid "Template to use for the menu message body" +msgstr "Modelo a usar para o corpo da mensagem do menu" + +#: src/modules/rolemenus/cog.py:635 +msgctxt "cmd:rolemenu_create|param:rawmessage" +msgid "Attach a custom menu message to use" +msgstr "Anexe uma mensagem personalizada a usar" + +#: src/modules/rolemenus/cog.py:664 +msgctxt "cmd:rolemenu_create|error:author_perms" +msgid "" +"You need the `MANAGE_ROLES` permission in order to create new role menus." +msgstr "" +"Você precisa ter permissão para ˋGERENCIAR_CARGOSˋ para que possa criar " +"novos menus de cargo." + +#: src/modules/rolemenus/cog.py:671 +msgctxt "cmd:rolemenu_create|error:my_perms" +msgid "" +"I lack the `MANAGE_ROLES` permission needed to offer roles from role menus." +msgstr "" +"Não tenho permissão de ˋGERENCIAR_CARGOSˋ, necessária para oferecer cargos " +"por um menu de cargos." + +#: src/modules/rolemenus/cog.py:690 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_create|error:message_exists" +msgid "The message {link} already has a role menu! Use {edit_cmd} to edit it." +msgstr "" +"A mensagem {link} já é usada como um menu de cargos! Use {edit_cmd} para " +"editá-la." + +#: src/modules/rolemenus/cog.py:711 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_create|error:style_notmine" +msgid "" +"I cannot create a `{style}` style menu on a message I didn't send! (Discord " +"restriction)." +msgstr "" +"Eu não posso criar o ˋ{style}ˋ estilo de um menu, em uma mensagem que não " +"foi enviada por mim! (Há uma restrição do Discord). " + +#: src/modules/rolemenus/cog.py:718 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_create|error:rawmessage_notmine" +msgid "" +"Cannot apply a custom menu message to {message} because I do not own this " +"message!" +msgstr "" +"Não pude aplicar um menu personalizado na mensagem {message}, pois ela não " +"pertence a mim! " + +#: src/modules/rolemenus/cog.py:727 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_create|error:template_notmine" +msgid "" +"Cannot apply a menu message template to {message} because I do not own this " +"message!" +msgstr "" +"Não pude aplicar um modelo de mensagem à {message} pois ela não pertence a " +"mim! " + +#: src/modules/rolemenus/cog.py:740 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_create|error:name_exists" +msgid "A rolemenu called `{name}` already exists! Use {edit_cmd} to edit it." +msgstr "" +"Um cargomenu chamado ˋ{name}ˋ já existe! Use {edit_cmd} para editá-lo." + +#: src/modules/rolemenus/cog.py:788 +msgctxt "cmd:rolemenu_edit" +msgid "editmenu" +msgstr "editarmenu" + +#: src/modules/rolemenus/cog.py:791 +msgctxt "cmd:rolemenu_edit|desc" +msgid "Edit an existing role menu." +msgstr "Editar um menu de cargos existente." + +#: src/modules/rolemenus/cog.py:800 +msgctxt "cmd:rolemenu_edit|param:name" +msgid "name" +msgstr "nome" + +#: src/modules/rolemenus/cog.py:801 +msgctxt "cmd:rolemenu_edit|param:new_name" +msgid "new_name" +msgstr "novo_nome" + +#: src/modules/rolemenus/cog.py:802 +msgctxt "cmd:rolemenu_edit|param:channel" +msgid "new_channel" +msgstr "novo_canal" + +#: src/modules/rolemenus/cog.py:807 +msgctxt "cmd:rolemenu_edit|param:menu_style" +msgid "menu_style" +msgstr "menu_estilo" + +#: src/modules/rolemenus/cog.py:808 +msgctxt "cmd:rolemenu_edit|param:remplate" +msgid "template" +msgstr "modelo" + +#: src/modules/rolemenus/cog.py:809 +msgctxt "cmd:rolemenu_edit|param:rawmessage" +msgid "custom_message" +msgstr "mensagem_personalizada" + +#: src/modules/rolemenus/cog.py:814 +msgctxt "cmd:rolemenu_edit|param:name|desc" +msgid "Name of the menu to edit" +msgstr "Nome do menu a ser editado" + +#: src/modules/rolemenus/cog.py:818 +msgctxt "cmd:rolemenu_edit|param:channel|desc" +msgid "Server channel to move the menu to" +msgstr "Canal do servidor para que possa mover o menu" + +#: src/modules/rolemenus/cog.py:827 +msgctxt "cmd:rolemenu_edit|param:menu_style" +msgid "Selection style for this menu (using buttons, dropdowns, or reactions)" +msgstr "" +"Selecione o estilo de menu (usando botões, reações, ou painel suspenso) " + +#: src/modules/rolemenus/cog.py:831 +msgctxt "cmd:rolemenu_edit|param:template" +msgid "Template to use for the menu message body" +msgstr "Modelo a ser usado para no corpo da mensagem " + +#: src/modules/rolemenus/cog.py:835 +msgctxt "cmd:rolemenu_edit|param:rawmessage" +msgid "Attach a custom menu message to use" +msgstr "Anexe uma mensagem personalizada a usar no menu" + +#: src/modules/rolemenus/cog.py:864 +msgctxt "cmd:rolemenu_edit|error:author_perms" +msgid "You need the `MANAGE_ROLES` permission in order to edit role menus." +msgstr "" +"Você precisa ter permissão de ˋGERENCIAR_CARGOSˋ para poder editar menus de " +"cargo." + +#: src/modules/rolemenus/cog.py:871 +msgctxt "cmd:rolemenu_edit|error:my_perms" +msgid "" +"I lack the `MANAGE_ROLES` permission needed to offer roles from role menus." +msgstr "" +"Me falta permissão de ˋGERENCIAR_CARGOSˋ, necessária para que eu possa " +"oferecer cargos através dos menus." + +#: src/modules/rolemenus/cog.py:894 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_edit|error:menu_not_found" +msgid "This server does not have a role menu called `{name}`!" +msgstr "Este servidor não tem um menu de cargos chamado ˋ{name}ˋ!" + +#: src/modules/rolemenus/cog.py:914 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_edit|parse:new_name|error:name_exists" +msgid "A role menu with the name **{new_name}** already exists!" +msgstr "Um menu de cargos com o nome **{new_name}** já existe!" + +#: src/modules/rolemenus/cog.py:951 +msgctxt "cmd:rolemenu_edit|parse:template|error:not_managed" +msgid "" +"Cannot set a template message for a role menu attached to a message I did " +"not send." +msgstr "" +"Não posso usar o modelo de mensagem para um menu de cargo anexado a uma " +"mensagem que eu não enviei." + +#: src/modules/rolemenus/cog.py:962 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_edit|parse:template|success:template" +msgid "Now using the `{name}` menu message template." +msgstr "Agora usando o modelo ˋ{name}ˋ de mensagem. " + +#: src/modules/rolemenus/cog.py:969 +msgctxt "cmd:rolemenu_edit|parse:template|success:custom" +msgid "Now using a custom menu message." +msgstr "Agora usando uma mensagem personalizada de menu." + +#: src/modules/rolemenus/cog.py:986 +msgctxt "cmd:rolemenu_edit|parse:custom_message|success" +msgid "Custom menu message updated." +msgstr "Mensagem personalizada do menu atualizada!" + +#: src/modules/rolemenus/cog.py:1001 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_edit|repost|success" +msgid "The role menu is now available at {message}" +msgstr "O novo menu de cargos está disponivel agora em {message} " + +#: src/modules/rolemenus/cog.py:1012 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_edit|repost|error:forbidden" +msgid "" +"Cannot update channel! I lack the `EMBED_LINKS` or `SEND_MESSAGES` " +"permission in {channel}." +msgstr "" +"Não pude atualizar o canal. Falta a permissão de ˋINSERIR_LINKSˋ ou de " +"ˋENVIAR_MENSAGENSˋ no {channel}." + +#: src/modules/rolemenus/cog.py:1017 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_edit|repost|error:unknown" +msgid "" +"An unknown error occurred trying to repost the menu to {channel}.\n" +"**Error:** `{exception}`" +msgstr "" +"Um erro desconhecido aconteceu, na tentativa de repostar o menu em {channel}.\n" +"**Erro:** ˋ{exception}ˋ" + +#: src/modules/rolemenus/cog.py:1051 +msgctxt "cmd:rolemenu_delete" +msgid "delmenu" +msgstr "apagarmenu" + +#: src/modules/rolemenus/cog.py:1054 +msgctxt "cmd:rolemenu_delete|desc" +msgid "Delete a role menu." +msgstr "Apagar um menu de cargos." + +#: src/modules/rolemenus/cog.py:1058 +msgctxt "cmd:rolemenu_delete|param:name" +msgid "menu" +msgstr "menu" + +#: src/modules/rolemenus/cog.py:1063 +msgctxt "cmd:rolemenu_delete|param:name|desc" +msgid "Name of the rolemenu to delete." +msgstr "Nome do menucargo a apagar." + +#: src/modules/rolemenus/cog.py:1078 +msgctxt "cmd:rolemenu_delete|error:author_perms" +msgid "" +"You need the `MANAGE_ROLES` permission in order to manage the server role " +"menus." +msgstr "" +"Você precisa ter permissão de ˋGERENCIAR_CARGOSˋ para que possa gerenciar os" +" menus de cargo no servidor." + +#: src/modules/rolemenus/cog.py:1101 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_delete|error:menu_not_found" +msgid "This server does not have a role menu called `{name}`!" +msgstr "Este servidor não possui um menu de cargo chamado ˋ{name}ˋ!" + +#: src/modules/rolemenus/cog.py:1109 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_delete|confirm|title" +msgid "" +"Are you sure you want to delete the role menu **{name}**? This is not " +"reversible!" +msgstr "" +"Você tem certeza que quer apagar o menu de cargos **{name}**? Esta operação " +"é irreversível!" + +#: src/modules/rolemenus/cog.py:1114 +msgctxt "cmd:rolemenu_delete|confirm|button:yes" +msgid "Yes, Delete Now" +msgstr "Sim, Apagar Agora" + +#: src/modules/rolemenus/cog.py:1119 +msgctxt "cmd:rolemenu_delete|confirm|button:no" +msgid "No, Cancel" +msgstr "Não, Cancelar" + +#: src/modules/rolemenus/cog.py:1144 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_delete|success|desc" +msgid "Successfully deleted the menu **{name}**" +msgstr "Menu **{name}** apagado com sucesso!" + +#: src/modules/rolemenus/cog.py:1152 +msgctxt "cmd:rolemenu_addrole" +msgid "addrole" +msgstr "addcargo" + +#: src/modules/rolemenus/cog.py:1155 +msgctxt "cmd:rolemenu_addrole|desc" +msgid "Add a new role to an existing role menu." +msgstr "Adicionar um novo cargo a um menu existente." + +#: src/modules/rolemenus/cog.py:1160 +msgctxt "cmd:rolemenu_addrole|param:menu" +msgid "menu" +msgstr "menu" + +#: src/modules/rolemenus/cog.py:1163 +msgctxt "cmd:rolemenu_addrole|param:role" +msgid "role" +msgstr "cargo" + +#: src/modules/rolemenus/cog.py:1174 +msgctxt "cmd:rolemenu_addrole|param:menu|desc" +msgid "Name of the menu to add a role to" +msgstr "Nome do menu ao qual devo adicionar o cargo" + +#: src/modules/rolemenus/cog.py:1178 +msgctxt "cmd:rolemenu_addrole|param:role|desc" +msgid "Role to add to the menu" +msgstr "Nome do cargo a adicionar ao menu" + +#: src/modules/rolemenus/cog.py:1186 +msgctxt "cmd:rolemenu_addrole|param:duration|desc" +msgid "Lifetime of the role after selection in minutes." +msgstr "Tempo de vida do cargo após a seleção, em minutos." + +#: src/modules/rolemenus/cog.py:1234 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_addrole|error:menu_not_found" +msgid "This server does not have a role menu called `{name}`!" +msgstr "Este servidor não tem um menu de cargos chamado ˋ{name}ˋ!" + +#: src/modules/rolemenus/cog.py:1319 +msgctxt "cmd:rolemenu_addrole|success:create|title" +msgid "Added Menu Role" +msgstr "Menu de Cargos Adicionado" + +#: src/modules/rolemenus/cog.py:1323 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_addrole|success:create|desc" +msgid "Add the role {role} to the menu **{menu}**." +msgstr "Adicione o cargo {role} ao menu **{menu}**." + +#: src/modules/rolemenus/cog.py:1341 +msgctxt "cmd:rolemenu_addrole|success:edit|title" +msgid "Menu Role updated" +msgstr "Menu de Cargo atualizado" + +#: src/modules/rolemenus/cog.py:1353 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_addrole|error:role_exists" +msgid "The role {role} is already selectable from the menu **{menu}**" +msgstr "O cargo {role} já pode ser escolhido através do menu **{menu}**." + +#: src/modules/rolemenus/cog.py:1371 +msgctxt "cmd:rolemenu_addrole|success|error:reaction|name" +msgid "Note" +msgstr "Nota" + +#: src/modules/rolemenus/cog.py:1383 +msgctxt "cmd:rolemenu_addrole|success|button:editor|label" +msgid "Edit Menu" +msgstr "Editar Menu" + +#: src/modules/rolemenus/cog.py:1400 +msgctxt "cmd:rolemenu_editrole" +msgid "editrole" +msgstr "editarcargo" + +#: src/modules/rolemenus/cog.py:1403 +msgctxt "cmd:rolemenu_editrole|desc" +msgid "Edit role options in an existing role menu." +msgstr "Editar opções de cargo em um menu existente. " + +#: src/modules/rolemenus/cog.py:1408 +msgctxt "cmd:rolemenu_editrole|param:menu" +msgid "menu" +msgstr "menu" + +#: src/modules/rolemenus/cog.py:1411 +msgctxt "cmd:rolemenu_editrole|param:menu_role" +msgid "menu_role" +msgstr "menu_de_cargos" + +#: src/modules/rolemenus/cog.py:1414 +msgctxt "cmd:rolemenu_editrole|param:role" +msgid "new_role" +msgstr "novo_cargo" + +#: src/modules/rolemenus/cog.py:1425 +msgctxt "cmd:rolemenu_editrole|param:menu|desc" +msgid "Name of the menu to edit the role for" +msgstr "Nome do menu de onde você quer editar o cargo" + +#: src/modules/rolemenus/cog.py:1429 +msgctxt "cmd:rolemenu_editrole|param:menu_role|desc" +msgid "Label, name, or mention of the menu role to edit." +msgstr "Rótulo, nome ou menção do menu de cargos a ser editado." + +#: src/modules/rolemenus/cog.py:1433 +msgctxt "cmd:rolemenu_editrole|param:role|desc" +msgid "New server role this menu role should give." +msgstr "Cargo que este menu de cargos deve dar aos novatos do servidor." + +#: src/modules/rolemenus/cog.py:1441 +msgctxt "cmd:rolemenu_editrole|param:duration|desc" +msgid "Lifetime of the role after selection in minutes." +msgstr "A duração que este cargo terá, depois de selecionado, em minutos." + +#: src/modules/rolemenus/cog.py:1482 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_editrole|error:menu_not_found" +msgid "This server does not have a role menu called `{name}`!" +msgstr "Este servidor não tem um menu de cargos chamado ˋ{name}ˋ!" + +#: src/modules/rolemenus/cog.py:1510 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_editrole|error:role_not_found" +msgid "The menu **{menu}** does not have the role **{name}**" +msgstr "O menu **{menu}** não tem o cargo **{name}**" + +#: src/modules/rolemenus/cog.py:1576 +msgctxt "cmd:rolemenu_editrole|success|title" +msgid "Role menu role updated" +msgstr "Cargos do menu de cargos foram atualizados" + +#: src/modules/rolemenus/cog.py:1591 +msgctxt "cmd:rolemenu_editrole|success|error:reaction|name" +msgid "Warning!" +msgstr "Atenção!" + +#: src/modules/rolemenus/cog.py:1616 +msgctxt "cmd:rolemenu_delrole" +msgid "delrole" +msgstr "apagarcargo" + +#: src/modules/rolemenus/cog.py:1619 +msgctxt "cmd:rolemenu_delrole|desc" +msgid "Remove a role from a role menu." +msgstr "Apaga um cargo de um menu de cargos" + +#: src/modules/rolemenus/cog.py:1623 +msgctxt "cmd:rolemenu_delrole|param:menu" +msgid "menu" +msgstr "menu" + +#: src/modules/rolemenus/cog.py:1624 +msgctxt "cmd:rolemenu_delrole|param:menu_role" +msgid "menu_role" +msgstr "menu_de_cargos" + +#: src/modules/rolemenus/cog.py:1629 +msgctxt "cmd:rolemenu_delrole|param:menu|desc" +msgid "Name of the menu to delete the role from." +msgstr "Nome do menu do qual será deletado o cargo" + +#: src/modules/rolemenus/cog.py:1633 +msgctxt "cmd:rolemenu_delrole|param:menu_role|desc" +msgid "Name, label, or mention of the role to delete." +msgstr "Nome, rótulo, ou menção do cargo a deletar." + +#: src/modules/rolemenus/cog.py:1651 +msgctxt "cmd:rolemenu_delrole|error:author_perms" +msgid "" +"You need the `MANAGE_ROLES` permission in order to manage the server role " +"menus." +msgstr "" +"Você precisa ter permissão de ˋGERENCIAR_CARGOSˋ para poder gerenciar o menu" +" de cargos do servidor." + +#: src/modules/rolemenus/cog.py:1675 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_delrole|error:menu_not_found" +msgid "This server does not have a role menu called `{name}`!" +msgstr "Este servidor não tem um menu de cargos chamado ˋ{name}ˋ!" + +#: src/modules/rolemenus/cog.py:1703 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_delrole|error:role_not_found" +msgid "The menu **{menu}** does not have the role **{name}**" +msgstr "O menu **{menu}** não tem o cargo **{name}**" + +#: src/modules/rolemenus/cog.py:1720 +#, possible-python-brace-format +msgctxt "cmd:rolemenu_delrole|success" +msgid "The role **{name}** was successfully removed from the menu **{menu}**." +msgstr "O cargo **{name}** foi removido com sucesso do menu **{menu}**." + +#: src/modules/rolemenus/roleoptions.py:57 +msgctxt "roleset:role" +msgid "role" +msgstr "cargo" + +#: src/modules/rolemenus/roleoptions.py:60 +msgctxt "roleset:role|desc" +msgid "The role associated to this menu item." +msgstr "O cargo associado a este item do menu." + +#: src/modules/rolemenus/roleoptions.py:64 +msgctxt "roleset:role|long_desc" +msgid "The role given when this menu item is selected in the role menu." +msgstr "O cargo dado quando este item é selecionado no menu de cargos." + +#: src/modules/rolemenus/roleoptions.py:77 +#, possible-python-brace-format +msgctxt "roleset:role|set_response:set" +msgid "This menu item will now give the role {role}." +msgstr "Este item do menu, dará agora, o cargo {role}." + +#: src/modules/rolemenus/roleoptions.py:88 +msgctxt "roleset:label" +msgid "label" +msgstr "rótulo" + +#: src/modules/rolemenus/roleoptions.py:91 +msgctxt "roleset:label|desc" +msgid "A short button label for this role." +msgstr "Um botão curto rotulado para este cargo." + +#: src/modules/rolemenus/roleoptions.py:96 +msgctxt "roleset:label|long_desc" +msgid "" +"A short name for this role, to be displayed in button labels, dropdown " +"titles, and some menu layouts. By default uses the Discord role name." +msgstr "" +"Um nome curto para este cargo, a ser mostrado nos rótulos dos botões, menus " +"suspensos e em alguns modelos de menu. Por padrão, usamos o nome do cargo " +"dado pelo Discord. " + +#: src/modules/rolemenus/roleoptions.py:110 +#, possible-python-brace-format +msgctxt "roleset:role|set_response" +msgid "This menu role is now called `{value}`." +msgstr "Este menu de cargos agora se chama ˋ{value}ˋ." + +#: src/modules/rolemenus/roleoptions.py:118 +msgctxt "roleset:emoji" +msgid "emoji" +msgstr "emoji" + +#: src/modules/rolemenus/roleoptions.py:121 +msgctxt "roleset:emoji|desc" +msgid "The emoji associated with this role." +msgstr "O emoji associado a este cargo." + +#: src/modules/rolemenus/roleoptions.py:125 +msgctxt "roleset:emoji|long_desc" +msgid "" +"The role emoji is used for the reaction (in reaction role menus), and " +"otherwise appears next to the role label in the button and dropdown styles. " +"The emoji is also displayed next to the role in most menu templates." +msgstr "" +"O emoji do cargo é usado para a reação do membro (nos menus de reação em " +"mensagem), e em outras horas, aparece próximo ao rótulo do cargo, em menus " +"de botões ou suspensos. O emoji também será mostrado próximo ao cargo na " +"maioria dos modelos de menu." + +#: src/modules/rolemenus/roleoptions.py:165 +#, possible-python-brace-format +msgctxt "roleset:emoji|error:test_emoji" +msgid "The selected emoji `{emoji}` is invalid or has been deleted." +msgstr "O emoji selecionado ˋ{emoji}ˋ é inválido, ou foi deletado." + +#: src/modules/rolemenus/roleoptions.py:176 +#, possible-python-brace-format +msgctxt "roleset:emoji|set_response:set" +msgid "The menu role emoji is now {emoji}." +msgstr "O emoji do menu de cargos, agora é {emoji}." + +#: src/modules/rolemenus/roleoptions.py:181 +msgctxt "roleset:emoji|set_response:unset" +msgid "The menu role emoji has been removed." +msgstr "O emoji do menu de cargos foi removido." + +#: src/modules/rolemenus/roleoptions.py:189 +msgctxt "roleset:description" +msgid "description" +msgstr "descrição" + +#: src/modules/rolemenus/roleoptions.py:192 +msgctxt "roleset:description|desc" +msgid "A longer description of this role." +msgstr "Uma descrição detalhada deste cargo." + +#: src/modules/rolemenus/roleoptions.py:197 +msgctxt "roleset:description|long_desc" +msgid "" +"The description is displayed under the role label in dropdown style menus. " +"It may also be used as a substitution key in custom role selection " +"responses." +msgstr "" +"A descrição é mostrada abaixo do rótulo do cargo, através de um menu " +"suspenso. Talvez ele também seja usado como substituto para uma seleção " +"personalizada de responsabilidades. " + +#: src/modules/rolemenus/roleoptions.py:213 +msgctxt "roleset:description|set_response:set" +msgid "The role description has been set." +msgstr "A descrição do cargo foi configurada." + +#: src/modules/rolemenus/roleoptions.py:218 +msgctxt "roleset:description|set_response:unset" +msgid "The role description has been removed." +msgstr "A descrição do cargo foi removida." + +#: src/modules/rolemenus/roleoptions.py:226 +msgctxt "roleset:price" +msgid "price" +msgstr "preço" + +#: src/modules/rolemenus/roleoptions.py:229 +msgctxt "roleset:price|desc" +msgid "Price of the role, in LionCoins. May be negative." +msgstr "Preço do cargo, em LionCoins. Podendo ser um valor negativo." + +#: src/modules/rolemenus/roleoptions.py:233 +msgctxt "roleset:price|long_desc" +msgid "" +"How many LionCoins should be deducted from a member's account when they equip this role through this menu.\n" +"The price may be negative, in which case the member will instead be rewarded coins when they equip the role." +msgstr "" +"Quantas LionCoins deverão ser cobradas de um usuário quando ele atribuir este cargo por este menu.\n" +"O preço pode ser negativo, em que o membro será recompensado em moedas por ter recebido este cargo." + +#: src/modules/rolemenus/roleoptions.py:240 +msgctxt "roleset:price|accepts" +msgid "Amount of coins that the role costs when equipped." +msgstr "Quantidade de moedas que o cargo irá custar, quando for atribuído." + +#: src/modules/rolemenus/roleoptions.py:254 +#, possible-python-brace-format +msgctxt "roleset:price|set_response:positive" +msgid "Equipping this role will now cost {coin}**{price}**." +msgstr "Atribuir este cargo irá custar {coin}**{price}**." + +#: src/modules/rolemenus/roleoptions.py:259 +msgctxt "roleset:price|set_response:zero" +msgid "Equipping this role is now free." +msgstr "Atribuir este cargo sairá de graça!" + +#: src/modules/rolemenus/roleoptions.py:264 +#, possible-python-brace-format +msgctxt "roleset:price|set_response:negative" +msgid "Equipping this role will now reward {coin}**{price}**." +msgstr "" +"Atribuir este cargo, agora dará uma recompensa, ao membro, de " +"{coin}**{price}**." + +#: src/modules/rolemenus/roleoptions.py:272 +msgctxt "roleset:duration" +msgid "duration" +msgstr "duração" + +#: src/modules/rolemenus/roleoptions.py:275 +msgctxt "roleset:duration|desc" +msgid "Lifetime of the role after selection" +msgstr "Tempo de vida do cargo, depois de atribuído" + +#: src/modules/rolemenus/roleoptions.py:279 +msgctxt "roleset:duration|long_desc" +msgid "" +"Allows creation of 'temporary roles' which expire a given time after being " +"equipped. Refunds will not be given upon expiry." +msgstr "" +"Autoriza a criação de 'cargos temporários' que irão expirar, depois de " +"atribuídos, depois do transcurso do período informado. As moedas não serão " +"devolvidas quando o tempo de validade expirar." + +#: src/modules/rolemenus/roleoptions.py:284 +msgctxt "roleset:duration|notset" +msgid "Forever." +msgstr "Ilimitado." + +#: src/modules/rolemenus/roleoptions.py:297 +#, possible-python-brace-format +msgctxt "roleset:duration|set_response:set" +msgid "This role will now expire after {duration}." +msgstr "Agora, este cargo irá expirar depois de {duration}." + +#: src/modules/rolemenus/roleoptions.py:302 +msgctxt "roleset:duration|set_response:unset" +msgid "This role will no longer expire after being selected." +msgstr "Este cargo não irá expirar, após ser selecionado." + +#: src/modules/rolemenus/templates.py:53 +msgctxt "template:simple|name" +msgid "Simple Menu" +msgstr "Menu Simplificado" + +#: src/modules/rolemenus/templates.py:57 +msgctxt "template:simple|desc" +msgid "A simple embedded list of roles in the menu" +msgstr "Um menu simplificado com integração das listas de menu." + +#: src/modules/rolemenus/templates.py:96 +msgctxt "template:two_column|name" +msgid "Two Column" +msgstr "Duas Colunas" + +#: src/modules/rolemenus/templates.py:100 +msgctxt "template:two_column|desc" +msgid "A compact two column role layout. Excludes prices and durations." +msgstr "" +"Um modelo compacto com apenas duas 2 colunas. Exclui duração e preços." + +#: src/modules/rolemenus/templates.py:131 +msgctxt "template:three_column|name" +msgid "Three Column" +msgstr "Três Colunas" + +#: src/modules/rolemenus/templates.py:135 +msgctxt "template:three_column|desc" +msgid "" +"A compact three column layout using emojis and labels, excluding prices and " +"durations." +msgstr "" +"Um modelo compacto com três colunas, usando títulos e emojis, excluindo as " +"durações e preços." + +#: src/modules/rolemenus/templates.py:168 +msgctxt "template:shop|name" +msgid "Role Shop" +msgstr "Loja de Cargos" + +#: src/modules/rolemenus/templates.py:172 +msgctxt "template:shop|desc" +msgid "A single column display suitable for simple role shops" +msgstr "" +"Um menu em formato de uma coluna, alternável para uma simplificada loja de " +"cargos." + +#: src/modules/rolemenus/rolemenu.py:280 +msgctxt "rolemenu|menu_message|error|title" +msgid "ROLE MENU DISPLAY ERROR" +msgstr "ERRO DO MOSTRADOR DO MENU DE CARGOS" + +#: src/modules/rolemenus/rolemenu.py:284 +#, possible-python-brace-format +msgctxt "rolemenu|menu_message|error|desc" +msgid "" +"A critical error occurred trying to display this role menu.\n" +"Error: `{error}`." +msgstr "" +"Um erro crítico ocorreu tentando mostrar este Menu de Cargos.\n" +"Erro: ˋ{error}ˋ." + +#: src/modules/rolemenus/rolemenu.py:336 +#, possible-python-brace-format +msgctxt "rolemenu|update_reactions|error" +msgid "" +"Could not add the {emoji} reaction, perhaps I do not have access to this " +"emoji! Reactions will need to be added manually." +msgstr "" +"Não pude adicionar a reação {emoji}, pois eu não tenho acesso a este emoji! " +"As reações do menu precisarão ser adicionadas manualmente." + +#: src/modules/rolemenus/rolemenu.py:381 +msgctxt "ui:rolemenu_dropdown|placeholder" +msgid "Select Roles" +msgstr "Selecione os Cargos." + +#: src/modules/rolemenus/rolemenu.py:472 +msgctxt "rolemenu|error:role_gone" +msgid "This role no longer exists!" +msgstr "Este cargo não existe mais!" + +#: src/modules/rolemenus/rolemenu.py:482 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|error:sticky" +msgid "**{role}** is a sticky role, you cannot remove it with this menu!" +msgstr "" +"**{role}** é um cargo persistentel. Você não pode removê-lo neste menu!" + +#: src/modules/rolemenus/rolemenu.py:493 +msgctxt "rolemenu|deselect|error:perms" +msgid "I don't have enough permissions to remove this role from you!" +msgstr "Eu não tenho permissões suficientes para remover este seu cargo!" + +#: src/modules/rolemenus/rolemenu.py:500 +msgctxt "rolemenu|deselect|error:discord" +msgid "An unknown error occurred removing your role! Please try again later." +msgstr "" +"Um erro desconhecido ocorreu enquanto seu cargo estava sendo retirado. Tente" +" novamente mais tarde!" + +#: src/modules/rolemenus/rolemenu.py:529 +msgctxt "rolemenu|deslect|success|title" +msgid "Role removed" +msgstr "Cargo retirado" + +#: src/modules/rolemenus/rolemenu.py:535 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:refund|desc" +msgid "You have removed **{role}**, and been refunded {coin} **{amount}**." +msgstr "Você removeu o **{role}**, e foi ressarcido com {coin} **{amount}**." + +#: src/modules/rolemenus/rolemenu.py:541 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:negrefund|desc" +msgid "You have removed **{role}**, and have lost {coin} **{amount}**." +msgstr "Você removeu **{role}**, e perdeu {coin}**{amount}**." + +#: src/modules/rolemenus/rolemenu.py:546 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:norefund|desc" +msgid "You have unequipped **{role}**." +msgstr "Você retirou o **{role}**." + +#: src/modules/rolemenus/rolemenu.py:560 +#, possible-python-brace-format +msgctxt "rolemenu|select|error:required_role" +msgid "You need to have the role **{role}** required to use this menu!" +msgstr "É necessário que você tenha o cargo **{role}** para usar este menu!" + +#: src/modules/rolemenus/rolemenu.py:574 +#, possible-python-brace-format +msgctxt "rolemenu|select|error:max_obtainable" +msgid "You already have the maximum of {obtainable} roles from this menu!" +msgstr "Você já tem o máximo de {obtainable} cargos permitidos deste menu." + +#: src/modules/rolemenus/rolemenu.py:588 +#, possible-python-brace-format +msgctxt "rolemenu|select|error:insufficient_funds" +msgid "" +"The role **{role}** costs {coin}**{cost}**,but you only have " +"{coin}**{balance}**!" +msgstr "" +"O cargo **{role}** custa {coins}**{cost}**, mas você tem apenas " +"{coin}**{balance}**!" + +#: src/modules/rolemenus/rolemenu.py:604 +msgctxt "rolemenu|select|error:perms" +msgid "I don't have enough permissions to give you this role!" +msgstr "" +"Eu não tenho as permissões suficientes para atribuir este cargo a você!" + +#: src/modules/rolemenus/rolemenu.py:611 +msgctxt "rolemenu|select|error:discord" +msgid "" +"An unknown error occurred while assigning your role! Please try again later." +msgstr "" +"Um erro desconhecido ocorreu enquanto estava atribuindo seu cargo. Por " +"favor, tente mais tarde." + +#: src/modules/rolemenus/rolemenu.py:653 +msgctxt "rolemenu|select|success|title" +msgid "Role equipped" +msgstr "Cargo atribuído" + +#: src/modules/rolemenus/rolemenu.py:659 +#, possible-python-brace-format +msgctxt "rolemenu|select|success:purchase|desc" +msgid "You have purchased the role **{role}** for {coin}**{amount}**" +msgstr "Você comprou o cargo **{role}** por {coin}**{amount}**." + +#: src/modules/rolemenus/rolemenu.py:664 +#, possible-python-brace-format +msgctxt "rolemenu|select|success:nopurchase|desc" +msgid "You have equipped the role **{role}**" +msgstr "O cargo **{role}** foi atribuído a você" + +#: src/modules/rolemenus/rolemenu.py:670 +#, possible-python-brace-format +msgctxt "rolemenu|select|expires_at" +msgid "The role will expire at {timestamp}." +msgstr "O cargo irá expirar em {timestamp}." + +#: src/modules/rolemenus/rolemenu.py:724 +#, possible-python-brace-format +msgctxt "rolemenu|content:reactions" +msgid "[Click here]({jump_link}) to jump back." +msgstr "[Click here]*({jump_link}) para retornar." + +#: src/modules/rolemenus/menuoptions.py:56 +msgctxt "menuset:name" +msgid "name" +msgstr "nome" + +#: src/modules/rolemenus/menuoptions.py:59 +msgctxt "menuset:name|desc" +msgid "Brief name for this role menu." +msgstr "Um nome curto para este menu." + +#: src/modules/rolemenus/menuoptions.py:64 +msgctxt "menuset:name|long_desc" +msgid "" +"The role menu name is displayed when selecting the menu in commands, and as " +"the title of most default menu layouts." +msgstr "" +"O nome do menu de cargos é mostrado quando está sendo selecionado o menu nos" +" comandos, e também como o título da maioria dos menus padrão." + +#: src/modules/rolemenus/menuoptions.py:78 +#, possible-python-brace-format +msgctxt "menuset:name|set_response" +msgid "This role menu will now be called **{new_name}**." +msgstr "Agora, este menu de cargos terá o nome de **{new_name}**. " + +#: src/modules/rolemenus/menuoptions.py:86 +msgctxt "menuset:sticky" +msgid "sticky_roles" +msgstr "cargos_permanentes" + +#: src/modules/rolemenus/menuoptions.py:89 +msgctxt "menuset:sticky|desc" +msgid "Whether the menu can be used to unequip roles." +msgstr "Se este menu pode ser utilizado para retirar os cargos." + +#: src/modules/rolemenus/menuoptions.py:94 +msgctxt "menuset:sticky|long_desc" +msgid "" +"When enabled, members will not be able to remove equipped roles by selecting" +" them in this menu. Note that when disabled, members will be able to unequip" +" the menu roles even if they were not obtained from the menu." +msgstr "" +"Quando habilitado, os membros não estarão aptos a retirar os cargos " +"atribuídos por este menu. Observe que, quando desabilitado, os membros " +"poderão retirar os cargos através do menu de cargos, mesmo aqueles que não " +"tenham sido colocado por lá." + +#: src/modules/rolemenus/menuoptions.py:110 +msgctxt "menuset:sticky|set_response:true" +msgid "Members will no longer be able to remove roles with this menu." +msgstr "Os membros não estarão habilitados a remover os cargos com este menu." + +#: src/modules/rolemenus/menuoptions.py:115 +msgctxt "menuset:sticky|set_response:false" +msgid "Members will now be able to remove roles with this menu." +msgstr "Os membros poderão remover os cargos com este menu." + +#: src/modules/rolemenus/menuoptions.py:123 +msgctxt "menuset:refunds" +msgid "refunds" +msgstr "ressarcido" + +#: src/modules/rolemenus/menuoptions.py:126 +msgctxt "menuset:refunds|desc" +msgid "Whether removing a role will refund the purchase price for that role." +msgstr "" +"Caso removido um cargo, irá ressarcir o preço pago pela compra do cargo." + +#: src/modules/rolemenus/menuoptions.py:131 +msgctxt "menuset:refunds|long_desc" +msgid "" +"When enabled, members who *purchased a role through this role menu* will obtain a full refund when they remove the role through the menu.\n" +"**Refunds will only be given for roles purchased through the same menu.**\n" +"**The `sticky` option must be disabled to allow members to remove roles.**" +msgstr "" +"Quando habilitado, membros os quais *compraram um cargo através deste menu de cargos* irão obter um ressarcimento quando retirarem o cargo através do menu.\n" +"**Ressarcimentos somente serão feitos por compras feitas através do mesmo menu.**\n" +"**A opção por permanente precisa estar desabilitada para permitir membros a retirar os cargos.** " + +#: src/modules/rolemenus/menuoptions.py:148 +msgctxt "menuset:refunds|set_response:true" +msgid "Members will now be refunded when removing a role with this menu." +msgstr "" +"Os membros irão agora ser ressarcidos quando retirarem um cargo deste menu " +"de cargos." + +#: src/modules/rolemenus/menuoptions.py:153 +msgctxt "menuset:refunds|set_response:false" +msgid "" +"Members will no longer be refunded when removing a role with this menu." +msgstr "" +"Os membros que retirarem o cargo neste menu, não serão mais ressarcidos do " +"valor pago." + +#: src/modules/rolemenus/menuoptions.py:161 +msgctxt "menuset:obtainable" +msgid "obtainable" +msgstr "recebível" + +#: src/modules/rolemenus/menuoptions.py:164 +msgctxt "menuset:obtainable|desc" +msgid "The maximum number of roles equippable from this menu." +msgstr "O número máximo de cargos que podem ser atribuídos por este menu." + +#: src/modules/rolemenus/menuoptions.py:169 +msgctxt "menuset:obtainable|long_desc" +msgid "" +"Members will not be able to obtain more than this number of roles from this " +"menu. This counts roles that were not obtained through the rolemenu system." +msgstr "" +"Os membros não serão permitidos de atribuir mais do que este número de " +"cargos por meio deste menu. Esta contagem inclui cargos que não foram " +"obtidos através do sistema de cargos de menu." + +#: src/modules/rolemenus/menuoptions.py:174 +msgctxt "menuset:obtainable|notset" +msgid "Unlimited." +msgstr "Ilimitado." + +#: src/modules/rolemenus/menuoptions.py:188 +#, possible-python-brace-format +msgctxt "menuset:obtainable|set_response:set" +msgid "" +"Members will be able to select a maximum of **{value}** roles from this " +"menu." +msgstr "" +"Membros estarão habilitados a selecionar um máximo de **{value}** cargos " +"deste menu." + +#: src/modules/rolemenus/menuoptions.py:193 +msgctxt "menuset:obtainable|set_response:unset" +msgid "Members will be able to select any number of roles from this menu." +msgstr "" +"Membros estarão permitidos de selecionar qualquer número de cargos por este " +"menu." + +#: src/modules/rolemenus/menuoptions.py:201 +msgctxt "menuset:required_role" +msgid "required_role" +msgstr "cargo_requerido" + +#: src/modules/rolemenus/menuoptions.py:204 +msgctxt "menuset:required_role|desc" +msgid "Initial role required to use this menu." +msgstr "Cargo inicial requerido para usar este menu." + +#: src/modules/rolemenus/menuoptions.py:209 +msgctxt "menuset:required_role|long_desc" +msgid "" +"If set, only members who have the `required_role` will be able to obtain or " +"remove roles using this menu." +msgstr "" +"Se configurado, membros que tiverem o ˋcargo_requeridoˋ serão permitidos " +"para atribuir e retirar cargos através deste menu." + +#: src/modules/rolemenus/menuoptions.py:223 +#, possible-python-brace-format +msgctxt "menuset:required_role|set_response:set" +msgid "Members will need to have the {role} role to use this menu." +msgstr "Membros precisarão ter o cargo {role} para usar este menu." + +#: src/modules/rolemenus/menuoptions.py:228 +msgctxt "menuset:required_role|set_response:unset" +msgid "Any member who can see the menu may use it." +msgstr "Qualquer membro que possa ver o menu, será permitido a usá-lo." + +#: src/modules/rolemenus/menuoptions.py:236 +msgctxt "menuset:message" +msgid "custom_message" +msgstr "mensagem_personalizada" + +#: src/modules/rolemenus/menuoptions.py:239 +msgctxt "menuset:message|desc" +msgid "Custom message data used to display the menu." +msgstr "Uma mensagem personalizada usada para mostrar o menu." + +#: src/modules/rolemenus/menuoptions.py:243 +msgctxt "menuset:message|long_desc" +msgid "" +"This setting determines the body of the menu message, including the message " +"content and the message embed(s). While most easily modifiable through the " +"`Edit Message` button, raw JSON-formatted message data may also be uploaded " +"via command." +msgstr "" +"Esta configuração determina a mensagem do corpo do menu, incluindo o contedo" +" da mensagem integrada(s). Apesar de ser facilmente modificada pelo botão " +"\"Editar Mensagemˋ, uma mensagem em formato JSON pode ser anexada através de" +" comando." + +#: src/modules/rolemenus/menuoptions.py:260 +msgctxt "menuset:message|set_response:set" +msgid "The role menu message has been set. Edit through the menu editor." +msgstr "" +"A mensagem do menu de cargos foi configurada. Edite através do menu editor." + +#: src/modules/rolemenus/menuoptions.py:265 +msgctxt "menuset:message|set_response:unset" +msgid "" +"The role menu message has been unset. Select a template through the menu " +"editor." +msgstr "" +"A mensagem do menu de cargos foi retirada. Escolha um menu através do menu " +"editor." + +#: src/modules/rolemenus/ui/menus.py:105 +msgctxt "ui:menu_list|menu:editmenu|placeholder" +msgid "Select Menu to Edit" +msgstr "Selecione o Menu a Editar" + +#: src/modules/rolemenus/ui/menus.py:129 +#, possible-python-brace-format +msgctxt "ui:menu_list|menu_line:attached" +msgid "[`{name}`]({jump_url}) with `{count}` roles." +msgstr "[`{name}`]({jump_url}) com `{count}` cargos." + +#: src/modules/rolemenus/ui/menus.py:138 +#, possible-python-brace-format +msgctxt "ui:menu_list|menu_line:unattached" +msgid "`{name}` with `{count}` roles." +msgstr "`{name}` com `{count}` cargos." + +#: src/modules/rolemenus/ui/menus.py:163 +#, possible-python-brace-format +msgctxt "ui:menu_list|embed|title" +msgid "Role Menus in {guild}" +msgstr "Menu de Cargos em {guild}" + +#: src/modules/rolemenus/ui/menus.py:172 +msgctxt "ui:menu_list|embed|field:tips|name" +msgid "Tips" +msgstr "Dicas" + +#: src/modules/rolemenus/ui/menus.py:176 +msgctxt "ui:menu_list|embed|field:tips|value" +msgid "" +"Right click an existing message or use the `newmenu` command to create a new" +" menu." +msgstr "" +"Clique com o botão direito do mouse, ou use o comando ˋnovomenuˋ para criar " +"um novo menu." + +#: src/modules/rolemenus/ui/menus.py:189 +msgctxt "ui:menu_list|embed|field:unattached|name" +msgid "Unattached Menus" +msgstr "Menus Desanexados" + +#: src/modules/rolemenus/ui/menus.py:201 +msgctxt "ui:menu_list|embed|footer:text" +msgid "Click a menu name to jump to the message." +msgstr "Clique no nome do menu para pular para a mensagem." + +#: src/modules/rolemenus/ui/menueditor.py:93 +msgctxt "ui:menu_editor|preview|error:title" +msgid "Display Error!" +msgstr "Erro do mostrador!" + +#: src/modules/rolemenus/ui/menueditor.py:97 +#, possible-python-brace-format +msgctxt "ui:menu_editor|preview|error:desc" +msgid "" +"Failed to display preview!\n" +"**Error:** `{exception}`" +msgstr "" +"Falha ao mostrar a prévia!\n" +"**Error:** ˋ{exception}ˋ" + +#: src/modules/rolemenus/ui/menueditor.py:151 +msgctxt "ui:menu_editor|button:options|label" +msgid "Menu Options" +msgstr "Opções do Menu" + +#: src/modules/rolemenus/ui/menueditor.py:179 +msgctxt "ui:menu_editor|button:bulk_edit|modal|title" +msgid "Menu Options" +msgstr "Opções do Menu" + +#: src/modules/rolemenus/ui/menueditor.py:218 +msgctxt "ui:menu_editor|button:bulk_edit|label" +msgid "Bulk Edit" +msgstr "Edição em Massa" + +#: src/modules/rolemenus/ui/menueditor.py:238 +msgctxt "ui:menu_editor|button:sticky|label" +msgid "Toggle Sticky" +msgstr "Alterar Permanentes" + +#: src/modules/rolemenus/ui/menueditor.py:262 +msgctxt "ui:menu_editor|button:refunds|label" +msgid "Toggle Refunds" +msgstr "Alterar Ressarcimentos" + +#: src/modules/rolemenus/ui/menueditor.py:292 +msgctxt "ui:menu_editor|menu:reqroles|placeholder" +msgid "Select Required Role" +msgstr "Selecione o Cargo Requerido" + +#: src/modules/rolemenus/ui/menueditor.py:311 +msgctxt "ui:menu_editor|button:modify_roles|label" +msgid "Modify Roles" +msgstr "Modificar Cargos" + +#: src/modules/rolemenus/ui/menueditor.py:340 +msgctxt "ui:menu_editor|role_editor|modal|title" +msgid "Edit Menu Role" +msgstr "Editar Menu de Cargos" + +#: src/modules/rolemenus/ui/menueditor.py:416 +msgctxt "ui:menu_editor|menu:add_roles|error:too_many_reactions" +msgid "Too many roles! Reaction role menus cannot exceed `20` roles." +msgstr "" +"Muitos cargos! O menu de cargos, através de reações a uma mensagem, não pode" +" exceder ˋ20ˋ cargos." + +#: src/modules/rolemenus/ui/menueditor.py:421 +msgctxt "ui:menu_editor|menu:add_roles|error:too_many_roles" +msgid "Too many roles! Role menus cannot have more than `25` roles." +msgstr "Muitos cargos! O menu de cargos não pode exceder ˋ25ˋ cargos." + +#: src/modules/rolemenus/ui/menueditor.py:460 +msgctxt "ui:menu_editor|menu:add_roles|placeholder" +msgid "Add Roles" +msgstr "Adicionar Cargos" + +#: src/modules/rolemenus/ui/menueditor.py:486 +msgctxt "ui:menu_editor|menu:edit_roles|placeholder" +msgid "Edit Roles" +msgstr "Editar Cargos" + +#: src/modules/rolemenus/ui/menueditor.py:524 +msgctxt "ui:menu_editor|menu:del_role|placeholder" +msgid "Remove Roles" +msgstr "Remover Cargos" + +#: src/modules/rolemenus/ui/menueditor.py:548 +msgctxt "ui:menu_editor|button:style|error:non-managed" +msgid "" +"Cannot change the style of a menu attached to a message I did not send! " +"Please repost first." +msgstr "" +"Não posso mudar o estilo de um menu anexado a uma mensagem que eu não " +"enviei! Por favor, reposte primeiro." + +#: src/modules/rolemenus/ui/menueditor.py:561 +msgctxt "ui:menu_editor|button:style|label" +msgid "Menu Style" +msgstr "Estilo do Menu" + +#: src/modules/rolemenus/ui/menueditor.py:586 +msgctxt "ui:menu_editor|menu:style|error:too_many_reactions" +msgid "" +"Too many roles! The Reaction style is limited to `20` roles (Discord " +"limitation)." +msgstr "" +"Muitos cargos! O estilo de atribuição de cargos por Reação é limitado a ˋ20ˋ" +" cargos (Limitação do Discord)." + +#: src/modules/rolemenus/ui/menueditor.py:596 +msgctxt "ui:menu_editor|menu:style|error:incomplete_emojis" +msgid "" +"Cannot switch to the Reaction Role Style! Every role needs to have a " +"distinct emoji first." +msgstr "" +"Não pude alternar para o atribuição Cargos Estilo Reação. Todo cargo " +"precisa, primeiro, ter um emoji distinto. " + +#: src/modules/rolemenus/ui/menueditor.py:614 +msgctxt "ui:menu_editor|menu:style|placeholder" +msgid "Select Menu Style" +msgstr "Selecione o Estilo de Menu" + +#: src/modules/rolemenus/ui/menueditor.py:618 +msgctxt "ui:menu_editor|menu:style|option:reaction|label" +msgid "Reaction Roles" +msgstr "Cargos por Reação" + +#: src/modules/rolemenus/ui/menueditor.py:621 +msgctxt "ui:menu_editor|menu:style|option:reaction|desc" +msgid "Roles are represented compactly as clickable reactions on a message." +msgstr "" +"Os cargos estao representados simbolicamente por um emoji para reação na " +"mensagem." + +#: src/modules/rolemenus/ui/menueditor.py:627 +msgctxt "ui:menu_editor|menu:style|option:button|label" +msgid "Button Menu" +msgstr "Menu por Botões" + +#: src/modules/rolemenus/ui/menueditor.py:630 +msgctxt "ui:menu_editor|menu:style|option:button|desc" +msgid "" +"Roles are represented in 5 rows of 5 buttons, each with an emoji and label." +msgstr "" +"Os cargos são representados em 5 linhas de 5 botões, cada um com um emoji e " +"título." + +#: src/modules/rolemenus/ui/menueditor.py:636 +msgctxt "ui:menu_editor|menu:style|option:dropdown|label" +msgid "Dropdown Menu" +msgstr "Menu Suspenso" + +#: src/modules/rolemenus/ui/menueditor.py:639 +msgctxt "ui:menu_editor|menu:style|option:dropdown|desc" +msgid "Roles are selectable from a dropdown menu below the message." +msgstr "" +"Os cargos serão selecionáveis por um menu, que aparecerá suspenso ao clicar " +"na mensagem. " + +#: src/modules/rolemenus/ui/menueditor.py:709 +msgctxt "ui:menu_editor|menu:template|placeholder" +msgid "Select Message Template" +msgstr "Selecione o Modelo de Mensagem" + +#: src/modules/rolemenus/ui/menueditor.py:719 +msgctxt "ui:menu_editor|menu:template|option:custom|label" +msgid "Custom Message" +msgstr "Mensagem Personalizada" + +#: src/modules/rolemenus/ui/menueditor.py:724 +msgctxt "ui:menu_editor|menu:template|option:custom|description" +msgid "Entirely custom menu message (opens an interactive editor)." +msgstr "" +"Menu de mensagem inteiramente personalizada (abre como um editor " +"interativo)." + +#: src/modules/rolemenus/ui/menueditor.py:741 +msgctxt "ui:menu_editor|button:delete|confirm|title" +msgid "Are you sure you want to delete this menu? This is not reversible!" +msgstr "Você está certo que quer deletar este menu? Isto não é reversivel!" + +#: src/modules/rolemenus/ui/menueditor.py:746 +msgctxt "ui:menu_editor|button:delete|confirm|button:yes" +msgid "Yes, Delete Now" +msgstr "Sim, Deletar Agora!" + +#: src/modules/rolemenus/ui/menueditor.py:751 +msgctxt "ui:menu_editor|button:delete|confirm|button:no" +msgid "No, Go Back" +msgstr "Não, Desejo Voltar" + +#: src/modules/rolemenus/ui/menueditor.py:768 +msgctxt "ui:menu_editor|button:delete|label" +msgid "Delete Menu" +msgstr "Deletar Menu" + +#: src/modules/rolemenus/ui/menueditor.py:825 +msgctxt "ui:menu_editor|button:edit_msg|label" +msgid "Edit Message" +msgstr "Editar Mensagem" + +#: src/modules/rolemenus/ui/menueditor.py:851 +msgctxt "ui:menu_editor|button:preview|label" +msgid "Preview" +msgstr "Pré-Visualização" + +#: src/modules/rolemenus/ui/menueditor.py:867 +msgctxt "ui:menu_editor|button:repost|widget:repost|menu:channel|placeholder" +msgid "Select New Channel" +msgstr "Selecione Novo Canal" + +#: src/modules/rolemenus/ui/menueditor.py:885 +msgctxt "ui:menu_editor|button:repost|widget:repost|error:perms|title" +msgid "Insufficient Permissions!" +msgstr "Permissões insuficientes!" + +#: src/modules/rolemenus/ui/menueditor.py:889 +msgctxt "ui:menu_editor|button:repost|eidget:repost|error:perms|desc" +msgid "" +"I lack the `EMBED_LINKS` or `SEND_MESSAGES` permission in this channel." +msgstr "" +"Eu preciso de permissão para ˋINSERIR_LINKSˋ ou ˋENVIAR_MENSAGENSˋ neste " +"canal." + +#: src/modules/rolemenus/ui/menueditor.py:902 +#, possible-python-brace-format +msgctxt "ui:menu_editor|button:repost|widget:repost|error:post_failed" +msgid "" +"An unknown error ocurred while posting to {channel}!\n" +"**Error:** `{exception}`" +msgstr "" +"Um erro desconhecido ocorreu enquanto postava em {channel}!\n" +"**Erro:** ˋ{exception}ˋ" + +#: src/modules/rolemenus/ui/menueditor.py:915 +msgctxt "ui:menu_editor|button:repost|widget:repost|success|title" +msgid "Role Menu Moved" +msgstr "Menu Cargos Movido" + +#: src/modules/rolemenus/ui/menueditor.py:921 +#, possible-python-brace-format +msgctxt "ui:menu_editor|button:repost|widget:repost|success|desc:general" +msgid "The role menu `{name}` is now available at {message_link}." +msgstr "O menu de cargos ˋ{name}ˋ agora está disponível em {message_link}." + +#: src/modules/rolemenus/ui/menueditor.py:935 +msgctxt "ui:menu_editor|button:repost|widget:repost|success|desc:reactions" +msgid "Please check the message reactions are correct." +msgstr "Por favor, verifique se a mensagem das reações está correta." + +#: src/modules/rolemenus/ui/menueditor.py:948 +msgctxt "ui:menu_editor|button:repost|widget:repost|title" +msgid "Repost Role Menu" +msgstr "Repostar Menu Cargos" + +#: src/modules/rolemenus/ui/menueditor.py:952 +msgctxt "ui:menu_editor|button:repost|widget:repost|description" +msgid "Please select the channel to which you want to resend this menu." +msgstr "" +"Por favor, selecione o canal ao qual você gostaria de reenviar este menu." + +#: src/modules/rolemenus/ui/menueditor.py:967 +msgctxt "ui:menu_editor|button:repost|label:repost" +msgid "Repost" +msgstr "Repostar" + +#: src/modules/rolemenus/ui/menueditor.py:972 +msgctxt "ui:menu_editor|button:repost|label:post" +msgid "Post" +msgstr "Postar" + +#: src/modules/rolemenus/ui/menueditor.py:982 +msgctxt "ui:menu_editor|embed|title" +msgid "Role Menu Editor" +msgstr "Editor do Menu Cargos" + +#: src/modules/rolemenus/ui/menueditor.py:991 +#, possible-python-brace-format +msgctxt "ui:menu_editor|embed|description|jump_text:attached" +msgid "Members may use this menu from {jump_url}" +msgstr "Membros podem usar este menu de {jump_url}" + +#: src/modules/rolemenus/ui/menueditor.py:996 +msgctxt "ui:menu_editor|embed|description|jump_text:unattached" +msgid "" +"This menu is not currently active!\n" +"Make it available by clicking `Post` below." +msgstr "" +"Este menu não está ativo atualmente!\n" +"Ative ele através do botão ˋPostarˋ abaixo." + +#: src/modules/rolemenus/ui/menueditor.py:1010 +msgctxt "ui:menu_editor|embed|field:tips|name" +msgid "Command Tips" +msgstr "Dicas de Comandos" + +#: src/modules/rolemenus/ui/menueditor.py:1014 +#, possible-python-brace-format +msgctxt "ui:menu_editor|embed|field:tips|value" +msgid "" +"Use the following commands for faster menu setup.\n" +"{menuedit} to edit the above menu options.\n" +"{addrole} to add new roles (recommended for roles with emojis).\n" +"{editrole} to edit role options." +msgstr "" +"Use os seguintes comandos para uma configuração rápida do menu.\n" +"{menuedit} para editar opções abaixo do menu.\n" +"{addrole} para adicionar novos cargos (recomendado para cargos com emojis).\n" +"{editrole} para editar opções de cargo." + +#: src/modules/rolemenus/ui/menueditor.py:1054 +msgctxt "ui:menu_editor|error:invald_emoji|title" +msgid "Invalid emoji encountered." +msgstr "Emoji invalido encontrado." + +#: src/modules/rolemenus/ui/menueditor.py:1058 +#, possible-python-brace-format +msgctxt "ui:menu_editor|error:invalid_emoji|desc" +msgid "" +"The emoji `{emoji}` for menu role `{label}` no longer exists, unsetting." +msgstr "" +"O emoji ˋ{emoji}ˋ para o menu de cargos ˋ{label}ˋ não existe mais. " +"Retirando." diff --git a/locales/pt_BR/LC_MESSAGES/rooms.po b/locales/pt_BR/LC_MESSAGES/rooms.po new file mode 100644 index 00000000..cf2b3546 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/rooms.po @@ -0,0 +1,819 @@ +# 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. +# +# Translators: +# Aline Souki, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/rooms/settingui.py:38 +msgctxt "ui:room_config|menu:category|placeholder" +msgid "Select Private Room Category" +msgstr "Selecione uma Categoria Particular de Sala" + +#: src/modules/rooms/settingui.py:52 +msgctxt "ui:room_config|button:visible|label" +msgid "Toggle Room Visibility" +msgstr "Alternar Visibilidade da Sala" + +#: src/modules/rooms/settingui.py:62 +msgctxt "ui:rooms_config|embed|title" +msgid "Private Room System Configuration Panel" +msgstr "Painel de Configuração do Sistema de Salas Particulares" + +#: src/modules/rooms/settingui.py:98 +msgctxt "dash:rooms|title" +msgid "Private Room Configuration ({commands[configure rooms]})" +msgstr "Configuração de Salas Particulares ({commands[configure rooms]})" + +#: src/modules/rooms/settingui.py:102 +msgctxt "dash:economy|dropdown|placeholder" +msgid "Private Room Panel" +msgstr "Painel de Salas Particulares" + +#: src/modules/rooms/roomui.py:56 +msgctxt "ui:room_status|error:owner_required" +msgid "You must be the private room owner to do this!" +msgstr "Você precisa ser dono de uma sala particular para fazer isto!" + +#: src/modules/rooms/roomui.py:72 +msgctxt "ui:room_status|error:member_required" +msgid "You need to be a member of the private room to do this!" +msgstr "Você precisa ser membro de uma sala particlar para fazer isto!" + +#: src/modules/rooms/roomui.py:90 +msgctxt "ui:room_status|button:deposit|modal:deposit|title" +msgid "Room Deposit" +msgstr "Depósito de Salas" + +#: src/modules/rooms/roomui.py:94 +msgctxt "ui:room_status|button:deposit|modal:deposit|field:question|label" +msgid "How many LionCoins do you want to deposit?" +msgstr "Quantas LionCoins você gostaria de depositar?" + +#: src/modules/rooms/roomui.py:112 +#, possible-python-brace-format +msgctxt "ui:room_status|button:deposit|error:invalid_number" +msgid "Cannot deposit `{inputted}` coins. Please enter a positive integer." +msgstr "" +"Não pude depositar `{inputted}` moedas. Por favor, use um valor positivo." + +#: src/modules/rooms/roomui.py:144 +#, possible-python-brace-format +msgctxt "ui:room_status|button:deposit|error:insufficient_funds" +msgid "" +"You cannot deposit {coin}**{amount}**! You only have {coin}**{balance}**." +msgstr "" +"Você não pode depositar {coin}**{amount}**! Você tem apenas " +"{coin}**{balance}**." + +#: src/modules/rooms/roomui.py:160 +msgctxt "ui:room_status|button:deposit|label" +msgid "Deposit" +msgstr "Depósito" + +#: src/modules/rooms/roomui.py:171 +msgctxt "ui:room_status|button:edit|label" +msgid "Edit Room" +msgstr "Editar Sala" + +#: src/modules/rooms/roomui.py:204 +msgctxt "ui:room_status|button:timer|modal:add_timer|title" +msgid "Create Room Timer" +msgstr "Criar Temporizador na Sala" + +#: src/modules/rooms/roomui.py:236 +#, possible-python-brace-format +msgctxt "ui:room_status|button:timer|timer_created" +msgid "Timer created successfully! Use {edit_cmd} to configure further." +msgstr "" +"Temporizador criado com sucesso! Use {edit_cmd} para mais configurações." + +#: src/modules/rooms/roomui.py:254 +msgctxt "ui:room_status|button:timer|label:edit_timer" +msgid "Edit Timer" +msgstr "Editar Temporizador" + +#: src/modules/rooms/roomui.py:261 +msgctxt "ui:room_status|button:timer|label:add_timer" +msgid "Add Timer" +msgstr "Adicionar Temporizador" + +#: src/modules/rooms/roomui.py:304 +#, possible-python-brace-format +msgctxt "ui:room_status|menu:invite|error:too_many_members" +msgid "" +"Too many members! You are inviting `{count}` new members to your room, but " +"you already have `{current}` members! The member cap is `{cap}`." +msgstr "" +"Muitos membros! Você está convidando ˋ{count}ˋ novos membros para sua sala, " +"mas já tem ˋ{current}ˋ membros! A capacidade máxima de membros é ˋ{cap}ˋ." + +#: src/modules/rooms/roomui.py:330 +msgctxt "ui:room_status|menu:invite_menu|placeholder:capped" +msgid "Room member cap reached!" +msgstr "Capacidade de membros atingida." + +#: src/modules/rooms/roomui.py:336 +msgctxt "ui:room_status|menu:invite_menu|placeholder:notcapped" +msgid "Add Members" +msgstr "Adicionar Membros" + +#: src/modules/rooms/roomui.py:359 +msgctxt "ui:room_status|menu:kick_menu|placeholder" +msgid "Remove Members" +msgstr "Remover Membros" + +#: src/modules/rooms/roomui.py:367 +msgctxt "ui:room_status|embed|title" +msgid "Room Control Panel" +msgstr "Painel de Controle da Sala" + +#: src/modules/rooms/roomui.py:375 +msgctxt "ui:room_status|embed|field:channel|name" +msgid "Channel" +msgstr "Canal" + +#: src/modules/rooms/roomui.py:380 +msgctxt "ui:room_status|embed|field:owner|name" +msgid "Owner" +msgstr "Dono" + +#: src/modules/rooms/roomui.py:385 +msgctxt "ui:room_status|embed|field:created|name" +msgid "Created At" +msgstr "Criado em" + +#: src/modules/rooms/roomui.py:395 +#, possible-python-brace-format +msgctxt "ui:room_status|embed|field:bank|value:expiring" +msgid "" +"**Warning:** Insufficient room balance to pay next rent ({coin} **{rent}**).\n" +"The room will expire {expiry}.\n" +"Use {room_deposit_cmd} to increase balance." +msgstr "" +"**Atenção:** Saldo da sala é insuficiente para pagar um novo aluguel ({coin} **{rent}**).\n" +"A sala irá expirar em {expiry}.\n" +"Use {room_deposit_cmd} para aumentar o saldo." + +#: src/modules/rooms/roomui.py:407 +#, possible-python-brace-format +msgctxt "ui:room_status|embed|field:bank|value:notexpiring" +msgid "Next rent due {time} (- {coin}**{rent}**)" +msgstr "Novo vencimento do aluguel em {time} (- {coin}**{rent}**)" + +#: src/modules/rooms/roomui.py:416 +#, possible-python-brace-format +msgctxt "ui:room_status|embed|field:bank|name" +msgid "Room Balance: {coin}**{amount}**" +msgstr "Saldo do caixa da Sala: {coin}**{amount}**" + +#: src/modules/rooms/roomui.py:428 +#, possible-python-brace-format +msgctxt "ui:room_status|embed|field:members|name" +msgid "Members ({count}/{cap})" +msgstr "Membros ({count}/{cap})" + +#: src/modules/rooms/cog.py:321 +msgctxt "cmd:room" +msgid "room" +msgstr "sala" + +#: src/modules/rooms/cog.py:322 +msgctxt "cmd:room|desc" +msgid "Base command group for private room configuration." +msgstr "Grupo de comandos base para configurações de salas particulares." + +#: src/modules/rooms/cog.py:329 +msgctxt "cmd:room_rent" +msgid "rent" +msgstr "alugar" + +#: src/modules/rooms/cog.py:332 +msgctxt "cmd:room_rent|desc" +msgid "Rent a private voice channel with LionCoins." +msgstr "Alugar um canal de voz privado com LionCoins." + +#: src/modules/rooms/cog.py:336 +msgctxt "cmd:room_rent|param:days" +msgid "days" +msgstr "dias" + +#: src/modules/rooms/cog.py:337 +msgctxt "cmd:room_rent|param:members" +msgid "members" +msgstr "membros" + +#: src/modules/rooms/cog.py:338 +msgctxt "cmd:room_rent|param:name" +msgid "name" +msgstr "nome" + +#: src/modules/rooms/cog.py:343 +msgctxt "cmd:room_rent|param:days|desc" +msgid "Number of days to pre-purchase. (Default: 1)" +msgstr "Numéro de dias para comprar antecipadamente. (Padrão: 1)" + +#: src/modules/rooms/cog.py:347 +msgctxt "cmd:room_rent|param:members|desc" +msgid "Mention the members you want to add to your private room." +msgstr "" +"Mencione o membro que você gostaria de adicionar à sua sala particular." + +#: src/modules/rooms/cog.py:351 +msgctxt "cmd:room_rent|param:name|desc" +msgid "Name of your private voice channel." +msgstr "Nome do seu canal privado de voz." + +#: src/modules/rooms/cog.py:369 +msgctxt "cmd:room_rent|error:not_setup" +msgid "" +"The private room system has not been set up! A private room category needs " +"to be set first with `/configure rooms`." +msgstr "" +"O sistema de sala particular não foi configurado! É necessário configurar " +"uma categoria de salas particular primeiro, com ˋ/configurar salasˋ." + +#: src/modules/rooms/cog.py:380 +msgctxt "cmd:room_rent|error:insufficient_perms" +msgid "" +"I do not have enough permissions to create a new channel under the " +"configured private room category!" +msgstr "" +"Eu não tenho permissão suficiente para criar um novo canal dentro da " +"categoria de salas particulares! " + +#: src/modules/rooms/cog.py:394 +#, possible-python-brace-format +msgctxt "cmd:room_rent|error:room_exists" +msgid "You already own a private room! Click to visit: {channel}" +msgstr "Você já tem uma sala particular! Clique para visitar: {channel}" + +#: src/modules/rooms/cog.py:414 +#, possible-python-brace-format +msgctxt "cmd:room_rent|error:member_not_found" +msgid "Could not find the requested member {mention} in this server!" +msgstr "Não pude encontrar o membro requisitado {mention} neste servidor!" + +#: src/modules/rooms/cog.py:428 +#, possible-python-brace-format +msgctxt "cmd:room_rent|error:too_many_members" +msgid "" +"Too many members! You have requested to add `{count}` members to your room, " +"but the maximum private room size is `{cap}`!" +msgstr "" +"Muitos membros! Você quis adicionar ˋ{count}ˋ membros para sua sala, mas a " +"capacidade máxima de salas particulares é ˋ{cap}ˋ!" + +#: src/modules/rooms/cog.py:442 +#, possible-python-brace-format +msgctxt "cmd:room_rent|confirm:purchase" +msgid "" +"Are you sure you want to spend {coin}**{required}** to rent a private room " +"for `one` day?" +msgid_plural "" +"Are you sure you want to spend {coin}**{required}** to rent a private room " +"for `{days}` days?" +msgstr[0] "" +"Você confirma que quer gastar {coin}**{required}** para alugar uma sala " +"privada por ˋumˋ dia?" +msgstr[1] "" +"Você confirma que quer gastar {coin}**{required}** para alugar uma sala " +"privada por ˋ{days}ˋ dias?" +msgstr[2] "" +"Você confirma que quer gastar {coin}**{required}** para alugar uma sala " +"particular por ˋ{days}ˋ dias?" + +#: src/modules/rooms/cog.py:467 +#, possible-python-brace-format +msgctxt "cmd:room_rent|success" +msgid "Successfully created your private room {channel}!" +msgstr "Sua sala particular {channel} foi criada com sucesso!" + +#: src/modules/rooms/cog.py:472 +msgctxt "cmd:room_rent|success|title" +msgid "Private Room Created!" +msgstr "Sala Particular Criada!" + +#: src/modules/rooms/cog.py:506 +#, possible-python-brace-format +msgctxt "cmd:room_rent|error:insufficient_funds" +msgid "" +"Renting a private room for `one` day costs {coin}**{required}**, but you " +"only have {coin}**{balance}**!" +msgid_plural "" +"Renting a private room for `{days}` days costs {coin}**{required}**, but you" +" only have {coin}**{balance}**!" +msgstr[0] "" +"Alugar uma sala privada por ˋumˋ dia, custa {coin}**{required}**, mas você " +"só tem {coin}**{balance}**!" +msgstr[1] "" +"Alugar uma sala privada por ˋ{days} dias, custa {coin}**{required}**, mas " +"você só tem {coin}**{balance}**!" +msgstr[2] "" +"Alugar uma sala particular por ˋ{days} dias, custa {coin}**{required}**, mas" +" você só tem {coin}**{balance}**!" + +#: src/modules/rooms/cog.py:540 +msgctxt "cmd:room_rent|error:my_permissions" +msgid "" +"Could not create your private room! You were not charged.\n" +"I have insufficient permissions to create a private room channel." +msgstr "" +"Não pude criar sua sala particular! Você não foi cobrado por isto.\n" +"Eu não tenho permissão suficiente para criar uma sala particular." + +#: src/modules/rooms/cog.py:552 +#, possible-python-brace-format +msgctxt "cmd:room_rent|error:unknown" +msgid "" +"Could not create your private room! You were not charged.\n" +"An unknown error occurred while creating your private room.\n" +"`{error}`" +msgstr "" +"Não pude criar sua sala particular! Você não foi cobrado por isto.\n" +"Um erro desconhecido ocorreu quando estava criando sua sala.\n" +"ˋ{error}ˋ" + +#: src/modules/rooms/cog.py:562 +msgctxt "cmd:room_status" +msgid "status" +msgstr "status" + +#: src/modules/rooms/cog.py:565 +msgctxt "cmd:room_status|desc" +msgid "Display the status of your current room." +msgstr "Mostra o status da sua sala atual." + +#: src/modules/rooms/cog.py:582 +msgctxt "cmd:room_status|error:no_target" +msgid "" +"Could not identify target private room! Please re-run the command in the " +"private room you wish to view the status of." +msgstr "" +"Não pude identificar a sala particular indicada! Por favor, repita o comando" +" na sala particular que você gostaria de ver o status." + +#: src/modules/rooms/cog.py:597 +msgctxt "cmd:room_invite" +msgid "invite" +msgstr "convidar" + +#: src/modules/rooms/cog.py:600 +msgctxt "cmd:room_invite|desc" +msgid "Add members to your private room." +msgstr "Adicionar membros à sua sala particular." + +#: src/modules/rooms/cog.py:604 +msgctxt "cmd:room_invite|param:members" +msgid "members" +msgstr "membros" + +#: src/modules/rooms/cog.py:609 +msgctxt "cmd:room_invite|param:members|desc" +msgid "Mention the members you want to add." +msgstr "Mencione os membros que você quer adicionar." + +#: src/modules/rooms/cog.py:623 +#, possible-python-brace-format +msgctxt "cmd:room_invite|error:no_room" +msgid "" +"You do not own a private room! Use `/room rent` to rent one with {coin}!" +msgstr "" +"Você não tem uma sala particular! Digite ˋ/sala alugarˋ para alugar uma por " +"{coin}!" + +#: src/modules/rooms/cog.py:644 +#, possible-python-brace-format +msgctxt "cmd:room_invite|error:member_not_found" +msgid "Could not find the invited member {mention} in this server!" +msgstr "Não foi possível encontrar o membro {mention} nesse servidor!" + +#: src/modules/rooms/cog.py:655 +msgctxt "cmd:room_invite|error:no_new_members" +msgid "All members mentioned are already in the room!" +msgstr "Todos os membros mencionados já estão na sala!" + +#: src/modules/rooms/cog.py:669 +#, possible-python-brace-format +msgctxt "cmd:room_invite|error:too_many_members" +msgid "" +"Too many members! You have invited `{count}` new members to your room, but " +"you already have `{current}`, and the member cap is `{cap}`!" +msgstr "" +"Muitos membros! Você convidou `{count}` novos membros para sua sala, mas " +"você já tem `{current}`, e a capacidade máxima de membros é de `{cap}`!" + +#: src/modules/rooms/cog.py:693 +msgctxt "cmd:room_invite|success|ack" +msgid "Members Invited successfully." +msgstr "Membros convidados com sucesso." + +#: src/modules/rooms/cog.py:701 +msgctxt "cmd:room_kick" +msgid "kick" +msgstr "expulsar" + +#: src/modules/rooms/cog.py:704 +msgctxt "cmd:room_kick|desc" +msgid "Remove a members from your private room." +msgstr "Remover um membro da sua sala particular." + +#: src/modules/rooms/cog.py:708 +msgctxt "cmd:room_kick|param:members" +msgid "members" +msgstr "membros" + +#: src/modules/rooms/cog.py:713 +msgctxt "cmd:room_kick|param:members|desc" +msgid "" +"Mention the members you want to remove. Also accepts space-separated user " +"ids." +msgstr "" +"Mencione o membro que você quer remover. IDˋs de usuário, separadas por " +"\"espaço\" também são aceitas." + +#: src/modules/rooms/cog.py:727 +#, possible-python-brace-format +msgctxt "cmd:room_kick|error:no_room" +msgid "" +"You do not own a private room! Use `/room rent` to rent one with {coin}!" +msgstr "" +"Você não tem uma sala particular! Use `/room rent` para alugar uma com " +"{coin}!" + +#: src/modules/rooms/cog.py:744 +msgctxt "cmd:room_kick|error:no_matching_members" +msgid "None of the mentioned members are in this room!" +msgstr "Nenhum dos membros indicados está nessa sala!" + +#: src/modules/rooms/cog.py:761 +msgctxt "cmd:room_kick|success|ack" +msgid "Members removed." +msgstr "Membros removidos." + +#: src/modules/rooms/cog.py:767 +msgctxt "cmd:room_transfer" +msgid "transfer" +msgstr "transferir" + +#: src/modules/rooms/cog.py:770 +msgctxt "cmd:room_transfer|desc" +msgid "Transfer your private room to another room member. Not reversible!" +msgstr "" +"Transferir a titularidade da sua sala particular para outro membro. Isto não" +" é reversível!" + +#: src/modules/rooms/cog.py:774 +msgctxt "cmd:room_transfer|param:new_owner" +msgid "new_owner" +msgstr "novo_dono" + +#: src/modules/rooms/cog.py:779 +msgctxt "cmd:room_transfer|param:new_owner" +msgid "The room member you would like to transfer your room to." +msgstr "" +"O membro da sala, para quem você gostaria de transferir sua sala particular." + +#: src/modules/rooms/cog.py:793 +msgctxt "cmd:room_transfer|error:no_room" +msgid "You do not own a private room to transfer!" +msgstr "Você não possui nenhuma sala particular para transferir!" + +#: src/modules/rooms/cog.py:805 +#, possible-python-brace-format +msgctxt "cmd:room_transfer|error:target_not_member" +msgid "" +"{mention} is not a member of your private room! You must invite them first." +msgstr "" +"{mention} não é um membro da sua sala particular! Você precisa convidá-lo " +"primeiro." + +#: src/modules/rooms/cog.py:817 +#, possible-python-brace-format +msgctxt "cmd:room_transfer|error:target_has_room" +msgid "" +"{mention} already owns a room! Members can only own one room at a time." +msgstr "" +"{mention} já possui uma sala! Cada membro pode ter apenas uma sala " +"particular por vez." + +#: src/modules/rooms/cog.py:826 +#, possible-python-brace-format +msgctxt "cmd:room_transfer|confirm|question" +msgid "" +"Are you sure you wish to transfer your private room {channel} to " +"{new_owner}? This action is not reversible!" +msgstr "" +"Tem certeza que você deseja transferir sua sala particular {channel} para " +"{novo_dono}? Essa ação não é reversível!" + +#: src/modules/rooms/cog.py:846 +#, possible-python-brace-format +msgctxt "cmd:room_transfer|success|description" +msgid "" +"You have successfully transferred ownership of {channel} to {new_owner}." +msgstr "" +"Você transferiu com sucesso a posse da sala {channel} para {novo_dono}." + +#: src/modules/rooms/cog.py:852 +msgctxt "cmd:room_deposit" +msgid "deposit" +msgstr "depositar" + +#: src/modules/rooms/cog.py:855 +msgctxt "cmd:room_deposit|desc" +msgid "" +"Deposit LionCoins in your private room bank to add more days. (Members may " +"also deposit!)" +msgstr "" +"Depositar LionCoins em seu caixa da sala particular, para que possam ser " +"adicionados mais dias. (Membros também podem depositar!)" + +#: src/modules/rooms/cog.py:859 +msgctxt "cmd:room_deposit|param:coins" +msgid "coins" +msgstr "moedas" + +#: src/modules/rooms/cog.py:864 +msgctxt "cmd:room_deposit|param:coins|desc" +msgid "Number of coins to deposit." +msgstr "Número de moedas para depositar." + +#: src/modules/rooms/cog.py:884 +msgctxt "cmd:room_deposit|error:no_target" +msgid "" +"Could not identify target private room! Please re-run the command in the " +"private room you wish to contribute to." +msgstr "" +"Não pude identificar sala particular descrita! Por favor, use o comando " +"novamente através da sala que você quer contribuir." + +#: src/modules/rooms/cog.py:900 +#, possible-python-brace-format +msgctxt "cmd:room_deposit|error:insufficient_funds" +msgid "" +"You cannot deposit {coin}**{amount}**! You only have {coin}**{balance}**." +msgstr "" +"Você não pode depositar {coin}**{amount}**! Você tem apenas " +"{coin}**{balance}**." + +#: src/modules/rooms/cog.py:921 +#, possible-python-brace-format +msgctxt "cmd:room_depost|success" +msgid "" +"Success! You have contributed {coin}**{amount}** to the private room bank." +msgstr "" +"Sucesso! Você contribuiu com {coin}**{amount}** para o caixa da sala " +"particular." + +#: src/modules/rooms/cog.py:936 +msgctxt "cmd:configure_rooms" +msgid "rooms" +msgstr "salas" + +#: src/modules/rooms/cog.py:937 +msgctxt "cmd:configure_rooms|desc" +msgid "Configure Rented Private Rooms" +msgstr "Configurar Aluguel de Salas Particulares" + +#: src/modules/rooms/room.py:81 +#, possible-python-brace-format +msgctxt "room|notify:deposit|description" +msgid "{member} has deposited {coin}**{amount}** into the room bank!" +msgstr "{member} depositou {coin}**{amount}** no caixa da sala!" + +#: src/modules/rooms/room.py:104 +msgctxt "room|notify:new_members|title" +msgid "New Members!" +msgstr "Novos Membros!" + +#: src/modules/rooms/room.py:108 +#, possible-python-brace-format +msgctxt "room|notify:new_members|desc" +msgid "Welcome {members}" +msgstr "Bem Vindos {members}" + +#: src/modules/rooms/room.py:183 +#, possible-python-brace-format +msgctxt "room|notify:transfer|description" +msgid "{old_owner} has transferred private room ownership to {new_owner}" +msgstr "{antigo_dono} transferiu a posse da sala particular para {novo_dono}" + +#: src/modules/rooms/room.py:247 +msgctxt "room|embed:expiry|title" +msgid "Private Room Expired!" +msgstr "Sala Particular Expirou!" + +#: src/modules/rooms/room.py:251 +#, possible-python-brace-format +msgctxt "room|embed:expiry|description" +msgid "Your private room in **{guild}** has expired!" +msgstr "Sua sala particular em **{guild}** expirou!" + +#: src/modules/rooms/room.py:265 +#, possible-python-brace-format +msgctxt "room|tick|rent_deducted" +msgid "Daily rent deducted from room balance. New balance: {coin}**{amount}**" +msgstr "" +"Aluguel diariamente cobrado do saldo do caixa da sala. Novo saldo: " +"{coin}**{amount}** " + +#: src/modules/rooms/settings.py:21 +msgctxt "guildset:room_category" +msgid "rooms_category" +msgstr "salas_categoria" + +#: src/modules/rooms/settings.py:25 +msgctxt "guildset:rooms_category|desc" +msgid "Category in which to create private voice channels." +msgstr "Categoria em que serão criados canais particulares de voz e vídeo." + +#: src/modules/rooms/settings.py:29 +msgctxt "guildset:room_category|long_desc" +msgid "" +"When a member uses {cmds[room rent]} to rent a new private room, a private " +"voice channel will be created under this category, manageable by the member." +" I must have permission to create new channels in this category, as well as " +"to manage permissions." +msgstr "" +"Quando um membro usa {cmds[room rent]} para alugar uma nova sala particular," +" uma sala exclusiva será criada dentro desta categoria gerenciada pelo " +"membro. Eu preciso ter permissão para criar novos canais nesta categoria, " +"assim como para gerenciar permissões." + +#: src/modules/rooms/settings.py:37 +msgctxt "guildset:room_category|accepts" +msgid "Private room category name or id." +msgstr "Nome ou ID da categoria da sala particular. " + +#: src/modules/rooms/settings.py:51 +msgctxt "guildset:rooms_category|set_response:unset" +msgid "" +"The private room category has been unset. Existing private rooms will not be" +" affected. Delete the channels manually to remove the private rooms." +msgstr "" +"A categoria de salas particulares foi retirada. As salas particulares atuais" +" não serão afetadas. Apague manualmente os canais para remover as salas " +"particulares." + +#: src/modules/rooms/settings.py:57 +#, possible-python-brace-format +msgctxt "guildset:rooms_category|set_response:set" +msgid "" +"Private room category has been set to {channel}. Existing private rooms will" +" be moved." +msgstr "" +"Uma categoria de salas particulares foi configurada para o canal {channel}. " +"As salas privadas atuais serão movidas para lá." + +#: src/modules/rooms/settings.py:67 +#, possible-python-brace-format +msgctxt "guildset:room_category|set_using" +msgid "{cmd} or category selector below." +msgstr "{cmd} ou selecione a categoria abaixo." + +#: src/modules/rooms/settings.py:76 +msgctxt "guildset:rooms_price" +msgid "room_rent" +msgstr "sala_alugar" + +#: src/modules/rooms/settings.py:80 +msgctxt "guildset:rooms_rent|desc" +msgid "Daily rent price for a private room." +msgstr "Preço diário do aluguel de um canal particular." + +#: src/modules/rooms/settings.py:84 +msgctxt "guildset:rooms_rent|long_desc" +msgid "" +"Members will be charged this many LionCoins for each day they rent a private" +" room." +msgstr "" +"Os membros serão cobrados esta quantidade de LionCoins por cada dia de " +"aluguel de um canal particular." + +#: src/modules/rooms/settings.py:88 +msgctxt "guildset:rooms_rent|accepts" +msgid "Number of LionCoins charged per day for a private room." +msgstr "Número de LionCoins cobrados por dia por um canal particular." + +#: src/modules/rooms/settings.py:100 +#, possible-python-brace-format +msgctxt "guildset:rooms_price|set_response" +msgid "Private rooms will now cost {coin}**{amount}** per 24 hours." +msgstr "" +"A partir de agora, as salas particulares irão custar {coin}**{amount}** a " +"cada 24 horas." + +#: src/modules/rooms/settings.py:112 +msgctxt "guildset:rooms_slots" +msgid "room_member_cap" +msgstr "sala_lim_membros" + +#: src/modules/rooms/settings.py:115 +msgctxt "guildset:rooms_slots|desc" +msgid "Maximum number of members in each private room." +msgstr "Número máximo de membros que cada sala particular pode ter." + +#: src/modules/rooms/settings.py:119 +msgctxt "guildset:rooms_slots|long_desc" +msgid "" +"Private room owners may invite other members to their private room via the " +"UI, or through the {cmds[room invite]} command. This setting limits the " +"maximum number of members a private room may hold." +msgstr "" +"Donos de salas particulares podem convidar outros membros para as suas salas" +" através da interface do usuário, ou através do comando {cmds[room invite]}." +" Esta configuração limita o número máximo de membros que uma sala particular" +" pode permitir." + +#: src/modules/rooms/settings.py:125 +msgctxt "guildset:rooms_slots|accepts" +msgid "Maximum number of members allowed per private room." +msgstr "Número máximo de membros permitidos por salas particulares." + +#: src/modules/rooms/settings.py:137 +#, possible-python-brace-format +msgctxt "guildset:rooms_slots|set_response" +msgid "Private rooms are now capped to **{amount}** members." +msgstr "Salas particulares estão limitadas a **{amount}** membros." + +#: src/modules/rooms/settings.py:146 +msgctxt "guildset:rooms_visible" +msgid "room_visibility" +msgstr "sala_visibilidade" + +#: src/modules/rooms/settings.py:149 +msgctxt "guildset:rooms_visible|desc" +msgid "Whether private rented rooms are visible to non-members." +msgstr "" +"Se a sala particular deve se visível aos não membros. Eles ainda precisarão " +"ser convidados para entrar." + +#: src/modules/rooms/settings.py:153 +msgctxt "guildset:rooms_visible|long_desc" +msgid "" +"If enabled, new private rooms will be created with the `VIEW_CHANNEL` " +"permission enabled for the `@everyone` role." +msgstr "" +"Se ativado, novas salas particulares serão criadas com a permissão " +"`VER_CANAL` para o cargo `@everyone`." + +#: src/modules/rooms/settings.py:157 +msgctxt "guildset:rooms_visible|accepts" +msgid "Visible/Invisible" +msgstr "Visível/Invisível" + +#: src/modules/rooms/settings.py:159 +msgctxt "guildset:rooms_visible|output:true" +msgid "Visible" +msgstr "Visível" + +#: src/modules/rooms/settings.py:160 +msgctxt "guildset:rooms_visible|output:false" +msgid "Invisible" +msgstr "Invisível" + +#: src/modules/rooms/settings.py:166 +msgctxt "guildset:rooms_visible|parse:truthy_values" +msgid "visible|enabled|yes|true|on|enable|1" +msgstr "visível|habilitado|sim|on|verdadeiro|habilitar|1" + +#: src/modules/rooms/settings.py:170 +msgctxt "guildset:rooms_visible|parse:falsey_values" +msgid "invisible|disabled|no|false|off|disable|0" +msgstr "invisivel|desabilitado|não|falso|desligado|desabilitar|0" + +#: src/modules/rooms/settings.py:182 +msgctxt "guildset:rooms_visible|set_response:enabled" +msgid "Private rooms will now be visible to everyone." +msgstr "Agora, as salas particulares serão visíveis a todos." + +#: src/modules/rooms/settings.py:187 +msgctxt "guildset:rooms_visible|set_response:disabled" +msgid "Private rooms will now only be visible to their members (and admins)." +msgstr "" +"Agora, as salas particulares somente serão visíveis por seus membros (e " +"moderadores)." + +#: src/modules/rooms/settings.py:197 +#, possible-python-brace-format +msgctxt "guildset:rooms_visible|set_using" +msgid "{cmd} or toggle below." +msgstr "{cmd} ou altere aqui abaixo." diff --git a/locales/pt_BR/LC_MESSAGES/schedule.po b/locales/pt_BR/LC_MESSAGES/schedule.po new file mode 100644 index 00000000..4c702bac --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/schedule.po @@ -0,0 +1,1101 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/schedule/cog.py:478 +msgctxt "create_booking|error:no_lobby" +msgid "" +"This server has not set a `session_lobby`, so the scheduled session system " +"is disabled!" +msgstr "" +"Este servidor não configurou um ˋbalcão_de_agendamentosˋ, então o sistema de" +" check-in está desabilitado!" + +#: src/modules/schedule/cog.py:490 +msgctxt "create_booking|error:no_member" +msgid "An unknown Discord error occurred. Please try again in a few minutes." +msgstr "" +"Ocorreu um erro desconhecido no Discord. Por favor, tente novamente em " +"alguns minutos. " + +#: src/modules/schedule/cog.py:498 +msgctxt "create_booking|error:blacklisted" +msgid "" +"You have been blacklisted from the scheduled session system in this server." +msgstr "" +"Você foi colocado na lista negra do sistema de Check-In deste servidor." + +#: src/modules/schedule/cog.py:509 +#, possible-python-brace-format +msgctxt "create_booking|error:insufficient_balance" +msgid "" +"Booking a session costs {coin}**{required}**, but you only have " +"{coin}**{balance}**." +msgid_plural "" +"Booking `{count}` sessions costs {coin}**{required}**, but you only have " +"{coin}**{balance}**." +msgstr[0] "" +"Agendar um horário custa {coin}**{required}**. Mas você só tem " +"{coin}**{balance}**." +msgstr[1] "" +"Agendar ˋ{count}ˋ horários, custa {coin}**{required}**. Mas você só tem " +"{coin}**{balance}**." +msgstr[2] "" +"Agendar ˋ{count}ˋ horários, custa {coin}**{required}**. Mas você só tem " +"{coin}**{balance}**." + +#: src/modules/schedule/cog.py:523 +msgctxt "create_booking|error:already_booked" +msgid "One or more requested timeslots are already booked!" +msgstr "Um ou mais horários marcados, já estão agendados!" + +#: src/modules/schedule/cog.py:726 +msgctxt "cmd:schedule" +msgid "schedule" +msgstr "check-in" + +#: src/modules/schedule/cog.py:729 +msgctxt "cmd:schedule|desc" +msgid "View and manage your scheduled session." +msgstr "Ver e gerenciar seus check-ins agendados." + +#: src/modules/schedule/cog.py:757 +#, possible-python-brace-format +msgctxt "cmd:schedule|cancel_booking|error:parse_slot" +msgid "" +"Time slot `{provided}` not recognised. Please select a session to cancel " +"from the autocomplete options." +msgstr "" +"O intervalo de tempo ˋ{provided}ˋ não reconhecido. Por favor, selecione um " +"horário a cancelar entre as opções que aparecem no autopreenchimento. " + +#: src/modules/schedule/cog.py:765 +#, possible-python-brace-format +msgctxt "cmd:schedule|cancel_booking|error:not_booked" +msgid "Could not cancel {time} booking because it is not booked!" +msgstr "" +"Não pude cancelar o horário {time} solicitado, pois ele não estar agendado! " + +#: src/modules/schedule/cog.py:774 +#, possible-python-brace-format +msgctxt "cmd:schedule|cancel_booking|error:too_soon" +msgid "Cannot cancel {time} booking because it is running or starting soon!" +msgstr "" +"Não posso cancelar o horário {time} agendado, pois ele já começou, ou irá " +"muito em breve." + +#: src/modules/schedule/cog.py:787 +#, possible-python-brace-format +msgctxt "cmd:schedule|cancel_booking|success" +msgid "Successfully cancelled your booking at {time}." +msgstr "Seu agendamento {time} foi cancelado com sucesso!" + +#: src/modules/schedule/cog.py:800 +#, possible-python-brace-format +msgctxt "cmd:schedule|create_booking|error:parse_slot" +msgid "" +"Time slot `{provided}` not recognised. Please select a session to cancel " +"from the autocomplete options." +msgstr "" +"Intervalo de tempo ˋ{provided}ˋ não reconhecido. Por favor, selecione um " +"horário dentre os que aparecem no autopreenchimento." + +#: src/modules/schedule/cog.py:808 +#, possible-python-brace-format +msgctxt "cmd:schedule|create_booking|error:already_booked" +msgid "You have already booked a scheduled session for {time}." +msgstr "Você já fez seu agendamento para {time}." + +#: src/modules/schedule/cog.py:817 +#, possible-python-brace-format +msgctxt "cmd:schedule|create_booking|error:too_soon" +msgid "Cannot book session at {time} because it is running or starting soon!" +msgstr "" +"Não pude agendar às {time} por já ter começado, ou irá muito em breve!" + +#: src/modules/schedule/cog.py:829 +#, possible-python-brace-format +msgctxt "cmd:schedule|create_booking|success" +msgid "You have successfully scheduled a session at {time}." +msgstr "Você fez o agendamento das {time} com sucesso." + +#: src/modules/schedule/cog.py:896 +msgctxt "cmd:configure_schedule" +msgid "schedule" +msgstr "check-in" + +#: src/modules/schedule/cog.py:899 +msgctxt "cmd:configure_schedule|desc" +msgid "Configure Scheduled Session system" +msgstr "Sistema de Configuração de Check-ins" + +#: src/modules/schedule/settings.py:36 +msgctxt "guildset:session_lobby" +msgid "session_lobby" +msgstr "balcão_de_agendamentos" + +#: src/modules/schedule/settings.py:39 +msgctxt "guildset:session_lobby|desc" +msgid "Channel to post scheduled session announcement and status to." +msgstr "" +"Canal para mostrar o agendamento dos horários e estado dos check-in's." + +#: src/modules/schedule/settings.py:43 +msgctxt "guildset:session_lobby|long_desc" +msgid "" +"Channel in which to announce scheduled sessions and post their status. I must have the `MANAGE_WEBHOOKS` permission in this channel.\n" +"**This must be configured in order for the scheduled session system to function.**" +msgstr "" +"Canal em que irá anunciar os check-inˋs e o estado de cada um. Eu preciso ter permissão de ˋINSERIR_LINKSˋ neste canal.\n" +"**Isto precisa ser configurado para que o sistema de check-in possa funcionar.** " + +#: src/modules/schedule/settings.py:49 +msgctxt "guildset:session_lobby|accepts" +msgid "Name or id of the session lobby channel." +msgstr "Nome ou ID do canal usado como balcão de agendamentos." + +#: src/modules/schedule/settings.py:63 +#, possible-python-brace-format +msgctxt "guildset:session_lobby|set_response|set" +msgid "Scheduled sessions will now be announced in {channel}" +msgstr "" +"Os horários agendados para check-in, agora, serão anunciados em {channel}" + +#: src/modules/schedule/settings.py:68 +msgctxt "guildset:session_lobby|set_response|unset" +msgid "" +"The schedule session lobby has been unset. Shutting down scheduled session " +"system." +msgstr "" +"O balcão de agendamentos do check-in foi desativado. Desligando o sistema de" +" agendamento de check-in. " + +#: src/modules/schedule/settings.py:78 +msgctxt "guildset:session_lobby|formatted|unset" +msgid "`Not Set` (The scheduled session system is disabled.)" +msgstr "ˋNão Configuradoˋ ( O sistema de check-in está desabilitado)." + +#: src/modules/schedule/settings.py:83 +#, possible-python-brace-format +msgctxt "guildset:session_lobby|formatted|set" +msgid "<#{channelid}>" +msgstr "<#{channelid}>" + +#: src/modules/schedule/settings.py:92 +msgctxt "guildset:session_room" +msgid "session_room" +msgstr "Sala_de_checkin" + +#: src/modules/schedule/settings.py:95 +msgctxt "guildset:session_room|desc" +msgid "Special voice channel open to scheduled session members." +msgstr "" +"Canal de voz especialmente aberto para os membros que fizeram o agendamento." + +#: src/modules/schedule/settings.py:99 +msgctxt "guildset:session_room|long_desc" +msgid "" +"If set, this voice channel serves as a dedicated room for scheduled session " +"members. During (and slightly before) each scheduled session, all members " +"who have booked the session will be given permission to join the voice " +"channel (via permission overwrites). I require the `MANAGE_CHANNEL`, " +"`MANAGE_PERMISSIONS`, `CONNECT`, and `VIEW_CHANNEL` permissions in this " +"channel, and my highest role must be higher than all permission overwrites " +"set in the channel. Furthermore, if this is set to a *category* channel, " +"then the permission overwrites will apply to all *synced* channels under the" +" category, as usual." +msgstr "" +"Se for configurado, este canal de voz será uma sala exclusiva aos membros " +"que fizeram o agendamento. Durante (e logo antes de começar) o horário " +"agendado, somente os membros que fizeram o agendamento serão permitidos a " +"entrar no canal de voz (considerando assim, como feito o seu check-in). É " +"necessário que eu tenha permissões para ˋGERENCIAR_CANAISˋ, " +"ˋGERENCIAR_PERMISSÕESˋ, ˋCONECTARˋ e ˋVER_CANAISˋ neste servidor, e também, " +"meu cargo mais alto precisa estar acima das permissões sobrescritas neste " +"canal. Caso seja configurado a uma *categoria de canais*, ao invés de só um " +"canal, as permissões configuradas serão aplicadas e sincronizadas para todos" +" os canais que pertencerem a esta categoria. " + +#: src/modules/schedule/settings.py:109 +msgctxt "guildset:session_room|accepts" +msgid "Name or id of the session room voice channel." +msgstr "Nome ou ID do canal para check-in do horário agendado." + +#: src/modules/schedule/settings.py:123 +#, possible-python-brace-format +msgctxt "guildset:session_room|set_response|set" +msgid "Schedule session members will now be given access to {channel}" +msgstr "" +"Agora, os membros que fizerem agendamento serão autorizados a entrar em " +"{channel} para contar como check-in no sistema" + +#: src/modules/schedule/settings.py:128 +msgctxt "guildset:session_room|set_response|unset" +msgid "The dedicated schedule session room has been removed." +msgstr "O canal dedicado ao check-in dos horários agendados foi removido." + +#: src/modules/schedule/settings.py:135 +msgctxt "guildset:session_channels" +msgid "session_channels" +msgstr "canais_de_checkin" + +#: src/modules/schedule/settings.py:138 +msgctxt "guildset:session_channels|desc" +msgid "Voice channels in which to track activity for scheduled sessions." +msgstr "Canais de voz para contar como check-in das sessões agendadas." + +#: src/modules/schedule/settings.py:142 +msgctxt "guildset:session_channels|long_desc" +msgid "" +"Only activity in these channels (and in `session_room` if set) will count " +"towards scheduled session attendance. If a category is selected, then all " +"channels under the category will also be included. Activity tracking also " +"respects the `untracked_voice_channels` setting." +msgstr "" +"Somente a atividade destes canais (e na ˋsala_de_checkinˋ, se estiver " +"configurada) irá ser contabilizada como comparecimento ao agendamento feito." +" Caso seja selecionada uma categoria, ao invés de um canal, todos os canais " +"pertencentes a esta, também serão contabilizáveis. O contador de check-in's " +"irá respeitar a configuração de ˋcanais_nao_contabilizadosˋ." + +#: src/modules/schedule/settings.py:149 +msgctxt "guildset:session_channels|accepts" +msgid "Comma separated list of session channel names or ids." +msgstr "Lista de nomes ou IDˋs dos canais, separados por vírgula." + +#: src/modules/schedule/settings.py:166 +#, possible-python-brace-format +msgctxt "guildset:session_channels|set_response|set" +msgid "" +"Activity in the following sessions will now count towards scheduled session " +"attendance: {channels}" +msgstr "" +"Agora, a atividade nos canais a seguir contarão como atendimento aos check-" +"inˋs agendados: {channels}" + +#: src/modules/schedule/settings.py:171 +msgctxt "guildset:session_channels|set_response|unset" +msgid "" +"Activity in all (tracked) voice channels will now count towards session " +"attendance." +msgstr "" +"A atividade em todos os canais de voz (contabilizáveis), agora irão contar " +"como atendimento aos check-inˋs agendados." + +#: src/modules/schedule/settings.py:181 +msgctxt "guildset:session_channels|formatted|unset" +msgid "All Channels (excluding `untracked_channels`)" +msgstr "Todos Os Canais (excluindo os ˋcanais_nao_contabilizadosˋ)" + +#: src/modules/schedule/settings.py:211 +msgctxt "guildset:schedule_cost" +msgid "schedule_cost" +msgstr "custo_do_agendamento" + +#: src/modules/schedule/settings.py:214 +msgctxt "guildset:schedule_cost|desc" +msgid "Booking cost for each scheduled session." +msgstr "" +"Custo de agendamento para cada horário que você deverá fazer o check-in ." + +#: src/modules/schedule/settings.py:218 +msgctxt "guildset:schedule_cost|long_desc" +msgid "" +"Members will be charged this many LionCoins for each scheduled session they " +"book." +msgstr "" +"Os membros serão cobrados esta quantidade de LionCoins por cada check-in " +"feito." + +#: src/modules/schedule/settings.py:222 +msgctxt "guildset:schedule_cost|accepts" +msgid "Price of each session booking (non-negative integer)." +msgstr "Preço de cada agendamento feito (número inteiro e positivo)." + +#: src/modules/schedule/settings.py:234 +#, possible-python-brace-format +msgctxt "guildset:schedule_cost|set_response" +msgid "" +"Schedule session bookings will now cost {coin} **{amount}** per timeslot." +msgstr "" +"Agendamento de horários para o check-in irão custar {coin}**{amount}** cada " +"um." + +#: src/modules/schedule/settings.py:247 +#, possible-python-brace-format +msgctxt "guildset:schedule_cost|formatted" +msgid "{coin}**{amount}** per booking." +msgstr "{coin}**{amount}** por agendamento." + +#: src/modules/schedule/settings.py:256 +msgctxt "guildset:attendance_reward" +msgid "attendance_reward" +msgstr "recompensa_de_checkin" + +#: src/modules/schedule/settings.py:259 +msgctxt "guildset:attendance_reward|desc" +msgid "Reward for attending a booked scheduled session." +msgstr "Recompensa por ter comparecido para check-in em uma sessão agendada." + +#: src/modules/schedule/settings.py:263 +msgctxt "guildset:attendance_reward|long_desc" +msgid "" +"When a member successfully attends a scheduled session they booked, they " +"will be awarded this many LionCoins. Should generally be more than the " +"`schedule_cost` setting." +msgstr "" +"Quando um membro comparece a um horário agendado, é considerado feito o " +"check-in. Por este check-in, ele irá receber esta quantidade de LionCoins. " +"Este valor, geralmente, deve ser mais alto do que o valor configurado como " +"ˋcusto_do_agendamentoˋ." + +#: src/modules/schedule/settings.py:269 +msgctxt "guildset:attendance_reward|accepts" +msgid "Number of coins to reward session attendance." +msgstr "" +"Número de moedas a receber por comparecimento para check-in em um horário " +"agendado." + +#: src/modules/schedule/settings.py:281 +#, possible-python-brace-format +msgctxt "guildset:attendance_reward|set_response" +msgid "" +"Members will be rewarded {coin}**{amount}** when they attend a scheduled " +"session." +msgstr "" +"Os membros receberão {coin}**{amount}** quando eles comparecerem para check-" +"in em um horário agendado." + +#: src/modules/schedule/settings.py:291 +#, possible-python-brace-format +msgctxt "guildset:attendance_reward|formatted" +msgid "{coin}**{amount}** upon attendance." +msgstr "{coint}**{amount}** por check-in." + +#: src/modules/schedule/settings.py:300 +msgctxt "guildset:attendance_bonus" +msgid "group_attendance_bonus" +msgstr "bonus_comprometimento_do_grupo" + +#: src/modules/schedule/settings.py:303 +msgctxt "guildset:attendance_bonus|desc" +msgid "Bonus reward given when all members attend a scheduled session." +msgstr "" +"Recompensa bônus a ser dada quando todos os membros agendados comparecerem " +"para check-in naquele horário." + +#: src/modules/schedule/settings.py:307 +msgctxt "guildset:attendance_bonus|long_desc" +msgid "" +"When all members who have booked a session successfully attend the session, " +"they will be given this bonus in *addition* to the `attendance_reward`." +msgstr "" +"Quando todos os membros agendados conseguirem comparecer no horário para " +"check-in, eles receberão um bônus adicional por ˋcomprometimento_do_grupoˋ." + +#: src/modules/schedule/settings.py:312 +msgctxt "guildset:attendance_bonus|accepts" +msgid "Bonus coins rewarded when everyone attends a session." +msgstr "" +"Bônus de moedas em recompensa por todos terem comparecido para check-in no " +"horário agendado." + +#: src/modules/schedule/settings.py:324 +#, possible-python-brace-format +msgctxt "guildset:attendance_bonus|set_response" +msgid "" +"Session members will be rewarded an additional {coin}**{amount}** when " +"everyone attends." +msgstr "" +"Os membros serão recompensados com um adicional de {coin}**{amount}** quando" +" todos comparecerem para check-in em um horário agendado." + +#: src/modules/schedule/settings.py:334 +#, possible-python-brace-format +msgctxt "guildset:attendance_bonus|formatted" +msgid "{coin}**{amount}** bonus when all booked members attend." +msgstr "" +"{coin}**{amount} de bônus quando todos os membros agendados comparecerem " +"para check-in. " + +#: src/modules/schedule/settings.py:343 +msgctxt "guildset:min_attendance" +msgid "min_attendance" +msgstr "tempo_minimo" + +#: src/modules/schedule/settings.py:346 +msgctxt "guildset:min_attendance|desc" +msgid "Minimum attendance before reward eligability." +msgstr "Tempo mínimo para que seja considerado validado como check-in." + +#: src/modules/schedule/settings.py:350 +msgctxt "guildset:min_attendance|long_desc" +msgid "" +"Scheduled session members will need to attend the session for at least this " +"number of minutes before they are marked as having attended (and hence are " +"rewarded)." +msgstr "" +"Os membros que agendarem o horário, precisarão permanecer, pelo menos, esta " +"quantidade de minutos para que seja validado o check-in (e para que recebam " +"a recompensa por isso)." + +#: src/modules/schedule/settings.py:355 +msgctxt "guildset:min_attendance|accepts" +msgid "Number of minutes (1-60) before attendance is counted." +msgstr "" +"Número de minutos (1-60) presente para que valide o check-in do horário. " + +#: src/modules/schedule/settings.py:369 +#, possible-python-brace-format +msgctxt "guildset:min_attendance|set_response" +msgid "" +"Members will be rewarded after they have attended booked sessions for at " +"least **`{amount}`** minutes." +msgstr "" +"Os membros somente serão recompensados quanto tiverem permanecido pelo menos" +" **{amount}** minutos no horário agendado. " + +#: src/modules/schedule/settings.py:379 +#, possible-python-brace-format +msgctxt "guildset:min_attendance|formatted" +msgid "**`{amount}`** minutes" +msgstr "**ˋ{amountˋ}** minutos" + +#: src/modules/schedule/settings.py:400 +msgctxt "guildset:min_attendance|parse|error" +msgid "" +"Minimum attendance must be an integer number of minutes between `1` and " +"`60`." +msgstr "" +"O número mínimo de minutos precisa ser um número inteiro, entre ˋ1ˋ e ˋ60ˋ." + +#: src/modules/schedule/settings.py:410 +msgctxt "guildset:schedule_blacklist_role" +msgid "schedule_blacklist_role" +msgstr "cargo_listanegra_checkin" + +#: src/modules/schedule/settings.py:413 +msgctxt "guildset:schedule_blacklist_role|desc" +msgid "Role which disables scheduled session booking." +msgstr "" +"Cargo que estará impedido de fazer novos agendamentos de horário, no sistema" +" de check-in." + +#: src/modules/schedule/settings.py:417 +msgctxt "guildset:schedule_blacklist_role|long_desc" +msgid "" +"Members with this role will not be allowed to book scheduled sessions in " +"this server. If the role is manually added, all future scheduled sessions " +"for the user are cancelled. This provides a way to stop repeatedly " +"unreliable members from blocking the group bonus for all members. " +"Alternatively, consider setting the booking cost (and reward) very high to " +"provide a strong disincentive for not attending a session." +msgstr "" +"Os membros que tenham recebido este cargo estarão impedidos de agendar um " +"horário no sistema de check-in deste servidor. Se este cargo for adicionado " +"manualmente, todos os horários agendados para este usuário serão cancelados." +" Isto ajuda com que algun membro descomprometido continue a impedir os " +"membros de conseguirem atingir a meta de comprometimento em grupo, com " +"faltas seguidas. Alternativamente, considere cobrar valores mais altos para " +"os agendamentos (aumentando também a recompensa pelo check-in), para coibir " +"e desincentivar as faltas." + +#: src/modules/schedule/settings.py:425 +msgctxt "guildset:schedule_blacklist_role|accepts" +msgid "Blacklist role name or id." +msgstr "Nome ou ID do cargo da Lista Negra." + +#: src/modules/schedule/settings.py:438 +#, possible-python-brace-format +msgctxt "guildset:schedule_blacklist_role|set_response|set" +msgid "Members with {role} will be unable to book scheduled sessions." +msgstr "" +"Os membros com o cargo {role} estarão impedidos de agendar novos horários no" +" sistema de check-in." + +#: src/modules/schedule/settings.py:443 +msgctxt "guildset:schedule_blacklist_role|set_response|unset" +msgid "The schedule blacklist role has been unset." +msgstr "O cargo de Lista Negra, do check-in, está desabilitado." + +#: src/modules/schedule/settings.py:453 +#, possible-python-brace-format +msgctxt "guildset:schedule_blacklist_role|formatted|set" +msgid "{role} members will not be able to book scheduled sessions." +msgstr "" +"Usuários {role} não estarão permitidos a fazer agendamento de horário. " + +#: src/modules/schedule/settings.py:458 +msgctxt "guildset:schedule_blacklist_role|formatted|unset" +msgid "Not Set" +msgstr "Não Configurado" + +#: src/modules/schedule/settings.py:467 +msgctxt "guildset:schedule_blacklist_after" +msgid "schedule_blacklist_after" +msgstr "listanegra_checkin_após" + +#: src/modules/schedule/settings.py:470 +msgctxt "guildset:schedule_blacklist_after|desc" +msgid "Number of missed sessions within 24h before blacklisting." +msgstr "" +"Número limite, de check-ins perdidos dentro de 24h, sem que o membro seja " +"colocado na lista negra." + +#: src/modules/schedule/settings.py:474 +msgctxt "guildset:schedule_blacklist_after|long_desc" +msgid "" +"Members who miss more than this number of booked sessions in a single 24 " +"hour period will be automatically given the `blacklist_role`. Has no effect " +"if the `blacklist_role` is not set or if I do not have sufficient " +"permissions to assign the blacklist role." +msgstr "" +"Os membros que perderem mais do que este número de check-inˋs, em um período" +" de 24 horas, serão automaticamente colocados como " +"ˋcargo_listanegra_checkinˋ. Esta funcionalidade não terá efeitos se o " +"ˋcargo_listanegra_checkinˋ não estiver configurado, ou se eu não tiver " +"permissões suficientes para designar o membro para o cargo de Lista Negra. " + +#: src/modules/schedule/settings.py:481 +msgctxt "guildset:schedule_blacklist_after|accepts" +msgid "A number of missed sessions (1-24) before blacklisting." +msgstr "" +"O número de check-inˋs perdidos (1-24) sem que o membro seja colocado na " +"lista negra." + +#: src/modules/schedule/settings.py:496 +#, possible-python-brace-format +msgctxt "guildset:schedule_blacklist_after|set_response|set" +msgid "" +"Members will be blacklisted after **`{amount}`** missed sessions within " +"`24h`." +msgstr "" +"Os membros serão colocados na Lista Negra depois de **ˋ{amount}ˋ** check-" +"inˋs perdidos em ˋ24hˋ." + +#: src/modules/schedule/settings.py:501 +msgctxt "guildset:schedule_blacklist_after|set_response|unset" +msgid "" +"Members will not be automatically blacklisted from booking scheduled " +"sessions." +msgstr "" +"Os membros não serão colocados na Lista Negra de check-in automaticamente. " + +#: src/modules/schedule/settings.py:511 +#, possible-python-brace-format +msgctxt "guildset:schedule_blacklist_after|formatted|set" +msgid "Blacklist after **`{amount}`** missed sessions within `24h`." +msgstr "" +"Colocar na Lista Negra depois de **ˋ{amount}ˋ** check-inˋs perdidos em " +"ˋ24hˋ." + +#: src/modules/schedule/settings.py:516 +msgctxt "guildset:schedule_blacklist_after|formatted|unset" +msgid "Do not automatically blacklist." +msgstr "Não coloque automaticamente em Lista Negra." + +#: src/modules/schedule/settings.py:528 +msgctxt "guildset:schedule_blacklist_role|parse|error" +msgid "Blacklist threshold must be a number between `1` and `24`." +msgstr "" +"A tolerância sem inscrever na Lista Negra precisa ser um número entre ˋ1ˋ e " +"ˋ24ˋ." + +#: src/modules/schedule/ui/settingui.py:69 +msgctxt "ui:schedule_config|button:page0|label" +msgid "Page 1" +msgstr "Página 1" + +#: src/modules/schedule/ui/settingui.py:88 +msgctxt "ui:schedule_config|menu:lobby|placeholder" +msgid "Select Lobby Channel" +msgstr "Selecione o Canal do Balcão de Agendamentos." + +#: src/modules/schedule/ui/settingui.py:105 +msgctxt "ui:schedule_config|menu:room|placeholder" +msgid "Select Session Room" +msgstr "Selecione a Sala Exclusiva do Check-In" + +#: src/modules/schedule/ui/settingui.py:123 +msgctxt "ui:schedule_config|menu:channels|placeholder" +msgid "Select Session Channels" +msgstr "Selecione os Canais de Check-In" + +#: src/modules/schedule/ui/settingui.py:137 +msgctxt "ui:schedule_config|button:page1|label" +msgid "Page 2" +msgstr "Página 2" + +#: src/modules/schedule/ui/settingui.py:152 +msgctxt "ui:schedule_config|button:page2|label" +msgid "Page 3" +msgstr "Página 3" + +#: src/modules/schedule/ui/settingui.py:169 +msgctxt "ui:schedule_config|menu:blacklist_role|placeholder" +msgid "Select Blacklist Role" +msgstr "Selecione Cargo Lista Negra" + +#: src/modules/schedule/ui/settingui.py:177 +msgctxt "ui:schedule_config|embed|title" +msgid "Scheduled Session Configuration Panel" +msgstr "Painel de Configuração do Sistema de Check-in." + +#: src/modules/schedule/ui/settingui.py:230 +msgctxt "dash:schedule|title" +msgid "Scheduled Session Configuration ({commands[configure schedule]})" +msgstr "Configuração do Sistema de Check-in ({commands[configure schedule]})" + +#: src/modules/schedule/ui/settingui.py:234 +msgctxt "dash:schedule|dropdown|placeholder" +msgid "Scheduled Sessions Panel" +msgstr "Painel do Sistema de Check-in" + +#: src/modules/schedule/ui/settingui.py:251 +msgctxt "dash:schedule|section:schedule_channels|name" +msgid "Scheduled Session Channels ({commands[configure schedule]})" +msgstr "Canais de Check-in ({commands[configure schedule]})" + +#: src/modules/schedule/ui/settingui.py:261 +msgctxt "dash:schedule|section:schedule_rewards|name" +msgid "Scheduled Session Rewards ({commands[configure schedule]})" +msgstr "Recompensa por Check-in ({commands[configure schedule]})" + +#: src/modules/schedule/ui/settingui.py:271 +msgctxt "dash:schedule|section:schedule_blacklist|name" +msgid "Scheduled Session Blacklist ({commands[configure schedule]})" +msgstr "Lista Negra do Check-in ({commands[configure schedule]})" + +#: src/modules/schedule/ui/scheduleui.py:31 +msgctxt "ui:schedule|about" +msgid "Guide tips here TBD" +msgstr "Dicas para direcionar o usuário, aqui." + +#: src/modules/schedule/ui/scheduleui.py:116 +msgctxt "ui:schedule|button:clear|error:nothing" +msgid "No upcoming sessions to cancel! Your schedule is already clear." +msgstr "" +"Não há agendamentos para cancelar. Você já está sem horários agendados. " + +#: src/modules/schedule/ui/scheduleui.py:129 +msgctxt "ui:schedule|button:clear|success" +msgid "Successfully cancelled and refunded your upcoming scheduled sessions." +msgstr "" +"Seu agendamento foi cancelado com sucesso, e suas moedas foram devolvidas." + +#: src/modules/schedule/ui/scheduleui.py:142 +msgctxt "ui:schedule|button:clear|label" +msgid "Clear Schedule" +msgstr "Limpar meus agendamentos." + +#: src/modules/schedule/ui/scheduleui.py:158 +msgctxt "ui:schedule|button:about|label" +msgid "About Schedule" +msgstr "Sobre o Sistema de Check-inˋs." + +#: src/modules/schedule/ui/scheduleui.py:184 +msgctxt "ui:schedule|menu:booking|error:current_slot" +msgid "You cannot schedule a currently running session!" +msgstr "Você não pode fazer check-in em uma seção que já começou." + +#: src/modules/schedule/ui/scheduleui.py:191 +msgctxt "ui:schedule|menu:booking|error:next_slot" +msgid "Too late! You cannot schedule a session starting in the next minute." +msgstr "" +"Tarde demais! Você não pode fazer check-in em uma seção que esteja começando" +" em menos de um minuto." + +#: src/modules/schedule/ui/scheduleui.py:198 +msgctxt "ui:schedule|menu:booking|error:already_booked" +msgid "You have already booked one or more of the requested sessions!" +msgstr "Você já agendou um ou mais destes horários selecionados." + +#: src/modules/schedule/ui/scheduleui.py:211 +#, possible-python-brace-format +msgctxt "ui:schedule|menu:booking|error:insufficient_balance" +msgid "" +"Booking `{count}` scheduled sessions requires {coin}**{required}**, but you " +"only have {coin}**{balance}**!" +msgstr "" +"Agendar ˋ{count}ˋ horários para check-in, custa {coins}**{required}**, mas " +"você só tem {coin}**{balance}**!" + +#: src/modules/schedule/ui/scheduleui.py:227 +#, possible-python-brace-format +msgctxt "ui:schedule|menu:booking|success" +msgid "Successfully booked your scheduled session at {times}." +msgid_plural "" +"Successfully booked the following scheduled sessions.\n" +"{times}" +msgstr[0] "" +"O agendamento deste horário foi feito com sucesso. Compareça pontualmente " +"para o check-in das {times}." +msgstr[1] "" +"O agendamento destes horários foi feito com sucesso! Compareça pontualmente para o check-in.\n" +"{times}" +msgstr[2] "" +"O agendamento destes horários foi feito com sucesso! Compareça pontualmente para o check-in.\n" +"{times}" + +#: src/modules/schedule/ui/scheduleui.py:250 +msgctxt "ui:schedule|menu:booking|placeholder:blacklisted" +msgid "Book Sessions (Cannot book - Blacklisted)" +msgstr "Agendamentos (Não é possível agendar - Lista Negra)" + +#: src/modules/schedule/ui/scheduleui.py:258 +#, possible-python-brace-format +msgctxt "ui:schedule|menu:booking|placeholder:regular" +msgid "Book Sessions ({amount} LC)" +msgstr "Agendamentos ({amount} LC)" + +#: src/modules/schedule/ui/scheduleui.py:303 +#, possible-python-brace-format +msgctxt "ui:schedule|menu:slots|option|format" +msgid "{day} {time} ({until})" +msgstr "{day} {time} ({until})" + +#: src/modules/schedule/ui/scheduleui.py:307 +msgctxt "ui:schedule|menu:slots|option|day:today" +msgid "Today" +msgstr "Hoje" + +#: src/modules/schedule/ui/scheduleui.py:311 +msgctxt "ui:schedule|menu:slots|option|day:tomorrow" +msgid "Tomorrow" +msgstr "Amanhã" + +#: src/modules/schedule/ui/scheduleui.py:333 +#, possible-python-brace-format +msgctxt "ui:schedule|format_until|positive" +msgid "in <1 hour" +msgid_plural "in {number} hours" +msgstr[0] "Em < 1 hora" +msgstr[1] "em {number} horas" +msgstr[2] "em {number} hours" + +#: src/modules/schedule/ui/scheduleui.py:340 +msgctxt "ui:schedule|format_until|now" +msgid "right now!" +msgstr "neste momento!" + +#: src/modules/schedule/ui/scheduleui.py:362 +msgctxt "ui:schedule|menu:cancel|error:current_slot" +msgid "" +"You cannot cancel a currently running *scheduled* session! Please attend it " +"if possible." +msgstr "" +"Você não pode cancelar um horário que já começou! Por favor, se for " +"possível, cumpra o combinado." + +#: src/modules/schedule/ui/scheduleui.py:368 +msgctxt "ui:schedule|menu:cancel|error:too_late" +msgid "" +"Too late! You cannot cancel a scheduled session within a minute of it " +"starting. Please attend it if possible." +msgstr "" +"Tarde demais! Você não pode cancelar o agendamento de um horário a menos de " +"um minuto do começo. Faça a sua parte do compromisso com o grupo!" + +#: src/modules/schedule/ui/scheduleui.py:385 +msgctxt "ui:schedule|menu:cancel|error:already_cancelled" +msgid "The selected bookings no longer exist! Nothing to cancel." +msgstr "" +"Os agendamentos nos horários selecionados não existem mais. Não há nada o " +"que cancelar aqui!" + +#: src/modules/schedule/ui/scheduleui.py:395 +#, possible-python-brace-format +msgctxt "ui:schedule|menu:cancel|success" +msgid "" +"Successfully cancelled and refunded your scheduled session booking for " +"{times}." +msgid_plural "" +"Successfully cancelled and refunded your scheduled session bookings:\n" +"{times}." +msgstr[0] "" +"Seu horário {times} foi cancelado com sucesso, e suas moedas foram " +"devolvidas." +msgstr[1] "" +"Seus agendamentos de horários foram cancelados com sucesso, e suas moedas foram devolvidas.\n" +"{times}." +msgstr[2] "" +"Seus agendamentos de horário foram cancelados com sucesso, e suas moedas foram devolvidas.\n" +"{times}." + +#: src/modules/schedule/ui/scheduleui.py:416 +msgctxt "ui:schedule|menu:cancel|placeholder" +msgid "Cancel booked sessions" +msgstr "Cancelar agendamentos de horário." + +#: src/modules/schedule/ui/scheduleui.py:438 +msgctxt "ui:schedule|embed|author" +msgid "Your Scheduled Sessions and Past Statistics" +msgstr "" +"Seus Agendamentos de Horários e Estatísticas de Check-inˋs Realizados." + +#: src/modules/schedule/ui/scheduleui.py:450 +msgctxt "ui:schedule|embed|field:stats|field:recent" +msgid "Recent" +msgstr "Recentes" + +#: src/modules/schedule/ui/scheduleui.py:457 +msgctxt "ui:schedule|embed|field:stats|field:alltime" +msgid "All Time" +msgstr "Desde o Começo" + +#: src/modules/schedule/ui/scheduleui.py:463 +msgctxt "ui:schedule|embed|field:stats|field:streak" +msgid "Streak" +msgstr "Sequência" + +#: src/modules/schedule/ui/scheduleui.py:468 +#, possible-python-brace-format +msgctxt "ui:schedule|embed|field:stats|field:streak|value:zero" +msgid "One session attended! Keep it up!" +msgid_plural "**{streak}** sessions attended in a row! Good job!" +msgstr[0] "Um check-in completado! Mantenha-se firme!" +msgstr[1] "**{streak}** check-inˋs seguidos! Você fortalece este servidor!" +msgstr[2] "**{streak}** check-ins seguidos! Isso que é constância!" + +#: src/modules/schedule/ui/scheduleui.py:475 +msgctxt "ui:schedule|embed|field:stats|field:streak|value:positive" +msgid "No streak yet!" +msgstr "Ainda não fez uma sequência!" + +#: src/modules/schedule/ui/scheduleui.py:483 +msgctxt "ui:schedule|embed|field:stats|name" +msgid "Session Statistics" +msgstr "Estatísticas de Check-In's" + +#: src/modules/schedule/ui/scheduleui.py:502 +msgctxt "ui:schedule|embed|field:upcoming|name" +msgid "Upcoming Sessions" +msgstr "Próximos Horários" + +#: src/modules/schedule/ui/scheduleui.py:506 +msgctxt "ui:schedule|embed|field:upcoming|value:empty" +msgid "No sessions scheduled yet!" +msgstr "Sem check-ins cumpridos ainda!" + +#: src/modules/schedule/ui/scheduleui.py:520 +#, possible-python-brace-format +msgctxt "ui:schedule|embed|stats_format" +msgid "" +"**{attended}** attended out of **{total}** booked.\r\n" +"**{percent}%** attendance rate.\r\n" +"**{average}** average attendance time." +msgstr "" +"**{attended}** atendidos de **{total}** agendados.\r\n" +"**{percent}%** de constância.\r\n" +"**{average}** em média por horário." + +#: src/modules/schedule/ui/scheduleui.py:534 +#, possible-python-brace-format +msgctxt "ui:schedule|booking_format:short" +msgid "`{until}` | {start} - {end}" +msgstr "`{until}` | {start} - {end}" + +#: src/modules/schedule/ui/scheduleui.py:538 +#, possible-python-brace-format +msgctxt "ui:schedule|booking_format:long" +msgid "> `{until}` | {start} - {end}" +msgstr "> `{until}` | {start} - {end}" + +#: src/modules/schedule/ui/sessionui.py:52 +msgctxt "ui:sessionui|button:book|label" +msgid "Book" +msgstr "Agendar" + +#: src/modules/schedule/ui/sessionui.py:56 +msgctxt "ui:sessionui|button:cancel|label" +msgid "Cancel" +msgstr "Cancelar" + +#: src/modules/schedule/ui/sessionui.py:60 +msgctxt "ui:sessionui|button:schedule|label" +msgid "Open Schedule" +msgstr "Abrir Agenda" + +#: src/modules/schedule/ui/sessionui.py:87 +msgctxt "ui:session|button:book|error:starting_soon" +msgid "Too late! This session has started or is starting shortly." +msgstr "Tarde demais! Este horário já começou, ou irá a qualquer momento. " + +#: src/modules/schedule/ui/sessionui.py:94 +msgctxt "ui:session|button:book|error:already_booked" +msgid "You are already a member of this session!" +msgstr "Você já está agendado para este horário!" + +#: src/modules/schedule/ui/sessionui.py:101 +msgctxt "ui:session|button:book|success" +msgid "Successfully booked this session." +msgstr "Agendamento para este horário foi feito com sucesso!" + +#: src/modules/schedule/ui/sessionui.py:115 +msgctxt "ui:session|button:book|error|title" +msgid "Could not book session" +msgstr "Não foi possível fazer este agendamento." + +#: src/modules/schedule/ui/sessionui.py:133 +msgctxt "ui:session|button:cancel|error:starting_soon" +msgid "Too late! This session has started or is starting shortly." +msgstr "Tarde demais! Este horário já começou, ou irá a qualquer momento." + +#: src/modules/schedule/ui/sessionui.py:140 +msgctxt "ui:session|button:cancel|error:not_booked" +msgid "You are not a member of this session!" +msgstr "Você não está agendado para fazer check-in neste horário!" + +#: src/modules/schedule/ui/sessionui.py:150 +msgctxt "ui:session|button:cancel|success" +msgid "Successfully cancelled this session." +msgstr "Este horário foi cancelado com sucesso!" + +#: src/modules/schedule/ui/sessionui.py:164 +msgctxt "ui:session|button:cancel|error|title" +msgid "Could not cancel session" +msgstr "Não pude cancelar este horário" + +#: src/modules/schedule/core/session.py:196 +msgctxt "session|error:lobby_webhook_perms" +msgid "" +"Insufficient permissions to create a webhook in this channel. I require the " +"`MANAGE_WEBHOOKS` permission." +msgstr "" +"Tenho permissões insuficientes para criar um WebHook neste canal! É preciso " +"que eu tenha permissão para ˋGERENCIAR_WEBHOOKSˋ." + +#: src/modules/schedule/core/session.py:280 +#, possible-python-brace-format +msgctxt "session|prepare|error:room_permissions" +msgid "" +"Could not prepare the configured session room {room} for the next scheduled " +"session! I require the `MANAGE_CHANNEL`, `MANAGE_ROLES`, `CONNECT` and " +"`VIEW_CHANNEL` permissions." +msgstr "" +"Não pude preparar as configurações da Sala de Check-in {room} para o próximo" +" horário. Eu preciso ter permissões para ˋGERENCIAR_CANAISˋ, " +"ˋGERENCIAR_CARGOSˋ, ˋCONECTARˋ e ˋVER_CANALˋ. " + +#: src/modules/schedule/core/session.py:330 +#, possible-python-brace-format +msgctxt "session|open|error:room_permissions" +msgid "" +"Could not set up the configured session room {room} for this scheduled " +"session! I require the `MANAGE_CHANNEL`, `MANAGE_ROLES`, `CONNECT` and " +"`VIEW_CHANNEL` permissions." +msgstr "" +"Não pude configurar a Sala de Check-in {room} para este horário! Eu preciso " +"ter permissões para ˋGERENCIAR_CANALˋ, ˋGERENCIAR_CARGOSˋ, ˋCONECTARˋ e " +"ˋVER_CANALˋ." + +#: src/modules/schedule/core/session.py:371 +#, possible-python-brace-format +msgctxt "session|status|title" +msgid "Session {start} - {end}" +msgstr "Horário {start} - {end}" + +#: src/modules/schedule/core/session.py:382 +msgctxt "session|status|desc:cancelled" +msgid "" +"I cancelled this scheduled session because I was unavailable. All members " +"who booked the session have been refunded." +msgstr "" +"Eu cancelei este horário, pois eu estava com uns probleminhas no meu " +"sistema. Mas fique tranquilo, eu devolvi as moedas de todos que fizeram " +"agendamento para este horário." + +#: src/modules/schedule/core/session.py:389 +msgctxt "session|status|desc:no_members" +msgid "*No members scheduled this session.*" +msgstr "*Ninguém agendou para fazer check-in neste horário.*" + +#: src/modules/schedule/core/session.py:395 +#, possible-python-brace-format +msgctxt "session|status:preparing|desc:has_members" +msgid "Starting {start}" +msgstr "Começando {start}" + +#: src/modules/schedule/core/session.py:398 +msgctxt "session|status:preparing|field:members" +msgid "Members" +msgstr "Membros" + +#: src/modules/schedule/core/session.py:405 +#, possible-python-brace-format +msgctxt "session|status:running|desc:has_members" +msgid "Finishing {start}" +msgstr "Terminando {start}" + +#: src/modules/schedule/core/session.py:439 +msgctxt "session|status:running|field:waiting" +msgid "Waiting For" +msgstr "Esperando por" + +#: src/modules/schedule/core/session.py:445 +msgctxt "session|status:running|field:attending" +msgid "Attending" +msgstr "Presentes" + +#: src/modules/schedule/core/session.py:451 +msgctxt "session|status:running|field:attended" +msgid "Attended" +msgstr "Atendidos" + +#: src/modules/schedule/core/session.py:476 +#, possible-python-brace-format +msgctxt "session|status:finished|desc:everyone_att" +msgid "" +"Everyone attended the session! All members were rewarded with {coin} " +"**{reward} + {bonus}**!" +msgstr "" +"Todos cumpriram o horário! Por isso, todos os membros irão ser recompensados" +" com {coin} **{reward} + {bonus}**!" + +#: src/modules/schedule/core/session.py:487 +#, possible-python-brace-format +msgctxt "session|status:finished|desc:some_att" +msgid "" +"Everyone who attended was rewarded with {coin} **{reward}**! Some members did not attend so everyone missed out on the bonus {coin} **{bonus}**.\n" +"**Members who missed their session have all future sessions cancelled without refund!*" +msgstr "" +"Todos que cumpriram o check-in neste horário serão recompensados com {coin} **{reward}**! Alguns membros não compareceram para o check-in conforme o combinado, então ninguém ganhará o bônus {coin} **{bonus}**.\n" +"**Os membros que não compareceram para check-in no horário agendado podem ter todos os próximos agendamentos cancelados sem o direito a devolução do dinheiro!**" + +#: src/modules/schedule/core/session.py:499 +msgctxt "session|status:finished|desc:some_att" +msgid "" +"No-one attended this session! No-one received rewards.\n" +"**Members who missed their session have all future sessions cancelled without refund!*" +msgstr "" +"Ninguém compareceu a este horário! Sendo assim, ninguém recebeu recompensa.\n" +"** Os membros que não compareceram para check-in no horário agendado podem ter todos os próximos agendamentos cancelados sem o direito a devolução do dinheiro!**" + +#: src/modules/schedule/core/session.py:505 +msgctxt "session|status:finished|field:attended" +msgid "Attended" +msgstr "Atendido" + +#: src/modules/schedule/core/session.py:510 +msgctxt "session|status:finished|field:missing" +msgid "Missing" +msgstr "Faltando" diff --git a/locales/pt_BR/LC_MESSAGES/settings_base.po b/locales/pt_BR/LC_MESSAGES/settings_base.po new file mode 100644 index 00000000..59389c05 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/settings_base.po @@ -0,0 +1,228 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/settings/ui.py:179 +msgctxt "setting|formatted|notset" +msgid "Not Set" +msgstr "Não Configurado" + +#: src/settings/ui.py:338 +#, possible-python-brace-format +msgctxt "setting|summary_embed|title" +msgid "Configuration options for `{name}`" +msgstr "Opções de configuração para ˋ{name}ˋ" + +#: src/settings/ui.py:350 +msgctxt "setting|summary_table|field:currently|key" +msgid "Currently" +msgstr "Atualmente" + +#: src/settings/ui.py:357 +msgctxt "setting|summary_table|field:default|key" +msgid "By Default" +msgstr "Por Padrão" + +#: src/settings/ui.py:364 +msgctxt "setting|summary_table|field:set|key" +msgid "Set Using" +msgstr "Configuração Usada" + +#: src/settings/setting_types.py:48 +msgctxt "settype:string|accepts" +msgid "Any Text" +msgstr "Qualquer Texto" + +#: src/settings/setting_types.py:89 +#, possible-python-brace-format +msgctxt "settype:string|error" +msgid "Provided string is too long! Maximum length: {maxlen} characters." +msgstr "String provida é muito comprida. Tamanho máximo: {maxlen} caracteres." + +#: src/settings/setting_types.py:114 +msgctxt "settype:emoji|accepts" +msgid "Paste a builtin emoji, custom emoji, or emoji id." +msgstr "Colar um emoji integrado, personalizado, ou id de um padrão." + +#: src/settings/setting_types.py:167 +#, possible-python-brace-format +msgctxt "settype:emoji|error:parse" +msgid "" +"Could not parse `{provided}` as a Discord emoji. Supported formats are " +"builtin emojis (e.g. `{builtin}`), custom emojis (e.g. {custom}), or custom " +"emoji ids (e.g. `{custom_id}`)." +msgstr "" +"Não pude analisar ˋ{provided}ˋ como um emoji do Discord. Formatos aceitos " +"são de emoji integrados (ex: ˋ{builtin}ˋ), emoji personalizado (ex:. " +"{custom}), ou IDˋs de um emoji personalizado (ex:. ˋ{custom_id}ˋ)." + +#: src/settings/setting_types.py:236 +msgctxt "settype:channel|accepts" +msgid "A channel name or id" +msgstr "O nome ou ID do canal." + +#: src/settings/setting_types.py:282 +#, possible-python-brace-format +msgctxt "settype:channel|parse|error:not_found" +msgid "Channel `{string}` could not be found in this guild!" +msgstr "O Canal ˋ{string}ˋ não pode ser encontrado neste servidor!" + +#: src/settings/setting_types.py:368 +msgctxt "settype:role|accepts" +msgid "A role name or id" +msgstr "O nome ou ID de um cargo." + +#: src/settings/setting_types.py:427 +#, possible-python-brace-format +msgctxt "settype:role|parse|error:not_found" +msgid "Role `{string}` could not be found in this guild!" +msgstr "O cargo ˋ{string}ˋ não pôde ser encontrado neste servidor." + +#: src/settings/setting_types.py:492 +msgctxt "settype:bool|accepts" +msgid "Enabled/Disabled" +msgstr "Habilitado/Desabilitado" + +#: src/settings/setting_types.py:497 +msgctxt "settype:bool|parse:truthy_values" +msgid "enabled|yes|true|on|enable|1" +msgstr "habilitado|sim|verdadeiro|on|habilitar|1" + +#: src/settings/setting_types.py:501 +msgctxt "settype:bool|parse:falsey_values" +msgid "disabled|no|false|off|disable|0" +msgstr "desabilitado|não|falso|off|desabilitar|0" + +#: src/settings/setting_types.py:506 +msgctxt "settype:bool|output:true" +msgid "On" +msgstr "On" + +#: src/settings/setting_types.py:507 +msgctxt "settype:bool|output:false" +msgid "Off" +msgstr "Off" + +#: src/settings/setting_types.py:508 +msgctxt "settype:bool|output:none" +msgid "Not Set" +msgstr "Não Configurado" + +#: src/settings/setting_types.py:619 +msgctxt "settype:integer|accepts" +msgid "An integer" +msgstr "Um número inteiro" + +#: src/settings/setting_types.py:682 +msgctxt "settype:emoji|desc" +msgid "Unicode or custom emoji" +msgstr "Emoji personalizado, ou Unicode" + +#: src/settings/setting_types.py:754 +msgctxt "settype:guildid|accepts" +msgid "Any Snowflake ID" +msgstr "Qualquer ID Snowflake" + +#: src/settings/setting_types.py:823 +msgctxt "settype:timezone|accepts" +msgid "A timezone name from the 'tz database' (e.g. 'Europe/London')" +msgstr "" +"Um fuso horário dos mencionados ˋtz databaseˋ (ex:. ˋAmerica/Sao_Paulo)" + +#: src/settings/setting_types.py:893 +msgctxt "settype:timezone|summary_table|field:supported|key" +msgid "Supported" +msgstr "Suportado" + +#: src/settings/setting_types.py:897 +#, possible-python-brace-format +msgctxt "settype:timezone|summary_table|field:supported|value" +msgid "Any timezone from the [tz database]({link})." +msgstr "Qualquer fuso horário da lista [tz database]({link})." + +#: src/settings/setting_types.py:914 +#, possible-python-brace-format +msgctxt "set_type:timezone|acmpl|no_matching" +msgid "No timezones matching '{input}'!" +msgstr "O nome ˋ{input}ˋ do fuso horário não coincide com a lista." + +#: src/settings/setting_types.py:927 +#, possible-python-brace-format +msgctxt "set_type:timezone|acmpl|choice" +msgid "{tz} (Currently {now})" +msgstr "{tz} (Atualmente {now})" + +#: src/settings/setting_types.py:957 +msgctxt "settype:timestamp|accepts" +msgid "A timestamp in the form YYYY-MM-DD HH:MM" +msgstr "Uma data na forma AAAA-MM-DD HH:MM" + +#: src/settings/setting_types.py:986 +#, possible-python-brace-format +msgctxt "settype:timestamp|parse|error:invalid" +msgid "" +"Could not parse `{provided}` as a timestamp. Please use `YYYY-MM-DD HH:MM` " +"format." +msgstr "" +"Não consegui analisar ˋ{provided}ˋ como uma marcação data/hora. Por favor, " +"use o formato ˋAAAA-MM-DD HH:MMˋ." + +#: src/settings/setting_types.py:1017 +msgctxt "settype:raw|accepts" +msgid "Anything" +msgstr "Qualquer" + +#: src/settings/setting_types.py:1070 +msgctxt "settype:enum|accepts" +msgid "A valid option." +msgstr "Uma opção válida." + +#: src/settings/setting_types.py:1120 +#, possible-python-brace-format +msgctxt "settype:enum|parse|error:not_found" +msgid "`{provided}` is not a valid option!" +msgstr "ˋ{provided} não é uma opção válida!" + +#: src/settings/setting_types.py:1168 +msgctxt "settype:duration|accepts" +msgid "A number of days, hours, minutes, and seconds, e.g. `2d 4h 10s`." +msgstr "Um número de dias, horas, minutos e segundos, ex:. ˋ2d 4h 10sˋ." + +#: src/settings/setting_types.py:1349 +msgctxt "settype:channel_list|accepts" +msgid "Comma separated list of channel ids." +msgstr "Lista de ID dos canais, separadas pro vírgula." + +#: src/settings/setting_types.py:1360 +msgctxt "settype:role_list|accepts" +msgid "Comma separated list of role ids." +msgstr "Lista de ID dos cargos, separadas por vírgula." + +#: src/settings/setting_types.py:1376 +msgctxt "settype:stringlist|accepts" +msgid "Comma separated strings." +msgstr "Strings separadas por vírgulas." + +#: src/settings/setting_types.py:1387 +msgctxt "settype:guildidlist|accepts" +msgid "Comma separated list of guild ids." +msgstr "Lista de servidores, separados por vírgula." diff --git a/locales/pt_BR/LC_MESSAGES/shop.po b/locales/pt_BR/LC_MESSAGES/shop.po new file mode 100644 index 00000000..53ee2557 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/shop.po @@ -0,0 +1,635 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/shop/cog.py:108 +msgctxt "group:editshop" +msgid "editshop" +msgstr "editarloja" + +#: src/modules/shop/cog.py:117 +msgctxt "cmd:shop" +msgid "shop" +msgstr "loja" + +#: src/modules/shop/cog.py:118 +msgctxt "cmd:shop|desc" +msgid "Purchase coloures, roles, and other goodies with LionCoins." +msgstr "Comprar cores, cargos e outras coisas com as LionCoins." + +#: src/modules/shop/cog.py:125 +msgctxt "cmd:shop_open" +msgid "open" +msgstr "abrir" + +#: src/modules/shop/cog.py:126 +msgctxt "cmd:shop_open|desc" +msgid "Open the server shop." +msgstr "Abrir a loja do servidor." + +#: src/modules/shop/cog.py:153 +msgctxt "cmd:shop_open|error:no_shops" +msgid "There is nothing to buy!" +msgstr "Não há nada para comprar!" + +#: src/modules/shop/cog.py:215 +msgctxt "ui:stores|button:close|label" +msgid "Close" +msgstr "Fechar" + +#: src/modules/shop/cog.py:222 +msgctxt "ui:stores|button:close|response|title" +msgid "Shop Closed" +msgstr "Loja Fechada" + +#: src/modules/shop/shops/colours.py:105 +#, possible-python-brace-format +msgctxt "ui:colourstore|menu:buycolours|label" +msgid "{name} ({price} LC)" +msgstr "{name} ({price} LC)" + +#: src/modules/shop/shops/colours.py:110 +#, possible-python-brace-format +msgctxt "ui:colourstore|menu:buycolours|label" +msgid "{name} (This is your colour!)" +msgstr "{name} (Esta é sua cor!)" + +#: src/modules/shop/shops/colours.py:115 +#, possible-python-brace-format +msgctxt "ui:colourstore|menu:buycolours|desc" +msgid "Colour: {colour}" +msgstr "Cor: {colour}" + +#: src/modules/shop/shops/colours.py:120 +msgctxt "ui:colourstore|menu:buycolours|desc" +msgid "Colour: Unknown" +msgstr "Cor: Desconhecida" + +#: src/modules/shop/shops/colours.py:134 +msgctxt "shop:colours|name" +msgid "Colour Shop" +msgstr "Loja de Cores" + +#: src/modules/shop/shops/colours.py:173 +msgctxt "shop:colour|purchase|error:not_purchasable" +msgid "This item may not be purchased!" +msgstr "Este item talvez não seja comprado!" + +#: src/modules/shop/shops/colours.py:186 +msgctxt "shop:colour|purchase|error:no_guild" +msgid "Could not retrieve the server from Discord!" +msgstr "Não foi possível acessar o servidor do Discord!" + +#: src/modules/shop/shops/colours.py:196 +msgctxt "shop:colour|purchase|error:no_member" +msgid "Could not retrieve the member from Discord." +msgstr "Não foi possível acessar o membro do Discord." + +#: src/modules/shop/shops/colours.py:206 +msgctxt "shop:colour|purchase|error:no_role" +msgid "This colour role could not be found in the server." +msgstr "Esta cor de cargo não pôde ser encontrada no servidor." + +#: src/modules/shop/shops/colours.py:215 +#, possible-python-brace-format +msgctxt "shop:colour|purchase|error:low_balance" +msgid "" +"This item costs {coin}{amount}!\n" +"Your balance is {coin}{balance}" +msgstr "" +"Este item custa {coin}{amount}!\n" +"Seu saldo é {coin}{balance}" + +#: src/modules/shop/shops/colours.py:230 +msgctxt "shop:colour|purchase|error:owned" +msgid "You already own this item!" +msgstr "Você já comprou este item!" + +#: src/modules/shop/shops/colours.py:264 +msgctxt "shop:colour|purchase|error:failed_no_role" +msgid "This colour role no longer exists!" +msgstr "Esta cor de cargo não existe!" + +#: src/modules/shop/shops/colours.py:271 +msgctxt "shop:colour|purchase|error:failed_permissions" +msgid "I do not have enough permissions to give you this colour role!" +msgstr "Eu não tenho permissões suficientes para te dar esta cor de cargo." + +#: src/modules/shop/shops/colours.py:278 +msgctxt "shop:colour|purchase|error:failed_unknown" +msgid "An unknown error occurred while giving you this colour role!" +msgstr "" +"Um erro desconhecido aconteceu enquanto era alterada sua cor de cargo." + +#: src/modules/shop/shops/colours.py:348 +msgctxt "grp:editshop_colours" +msgid "colours" +msgstr "cores" + +#: src/modules/shop/shops/colours.py:353 +msgctxt "cmd:editshop_colours_create" +msgid "create" +msgstr "criar" + +#: src/modules/shop/shops/colours.py:356 +msgctxt "cmd:editshop_colours_create|desc" +msgid "Create a new colour role with the given colour." +msgstr "Criar uma nova cor para um cargo, com a cor determinada. " + +#: src/modules/shop/shops/colours.py:360 +msgctxt "cmd:editshop_colours_create|param:colour" +msgid "colour" +msgstr "cor" + +#: src/modules/shop/shops/colours.py:361 +msgctxt "cmd:editshop_colours_create|param:name" +msgid "name" +msgstr "nome" + +#: src/modules/shop/shops/colours.py:362 +msgctxt "cmd:editshop_colours_create|param:price" +msgid "price" +msgstr "preço" + +#: src/modules/shop/shops/colours.py:367 +msgctxt "cmd:editshop_colours_create|param:colour|desc" +msgid "What colour should the role be? (As a hex code, e.g. #AB22AB)" +msgstr "De qual cor o cargo deverá ser? (Usando um código Hex, ex. #AB22AB)" + +#: src/modules/shop/shops/colours.py:371 +msgctxt "cmd:editshop_colours_create|param:name|desc" +msgid "What should the colour role be called?" +msgstr "Como a cor do cargo deverá ser chamada?" + +#: src/modules/shop/shops/colours.py:375 +msgctxt "cmd:editshop_colours_create|param:price|desc" +msgid "How much should the colour role cost?" +msgstr "Quanto deverá custar a cor do cargo?" + +#: src/modules/shop/shops/colours.py:397 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_create|error:parse_colour" +msgid "" +"I could not extract a colour value from `{colour}`!\n" +"Please enter the colour as a hex string, e.g. `#FA0BC1`" +msgstr "" +"Eu não consegui extrair os dados de `{colour}`!\n" +"Por favor, digite a cor como um código HEX ex. `#FA0BC1`" + +#: src/modules/shop/shops/colours.py:407 +msgctxt "cmd:editshop_colours_create|error:perms" +msgid "" +"I do not have permission to create server roles!\n" +"Please either give me this permission, or create the role manually and use `/editshop colours add` instead." +msgstr "" +"Eu não tenho premissão para criar cargos do servidor!\n" +"Por favor, primeiro me dê permissão, ou então crie o cargo manualmente e use `/editarloja cores add`." + +#: src/modules/shop/shops/colours.py:424 +msgctxt "cmd:editshop_colours_create|error:max_colours" +msgid "" +"This server already has the maximum of `25` colour roles!\n" +"Please remove some before adding or creating more." +msgstr "" +"Este servidor já possui o máximo de ˋ25ˋ cores de cargo!\n" +"Por favor, remova alguma antes de adicionar ou criar outra." + +#: src/modules/shop/shops/colours.py:443 +msgctxt "cmd:editshop_colours_create|error:failed_unknown" +msgid "" +"An unknown Discord error occurred while creating your colour role!\n" +"Please try again in a few minutes." +msgstr "" +"Um erro desconhecido do Discord ocorreu quando estava sendo criado sua cor de cargo!\n" +"Por favor, tente novamente em alguns minutos." + +#: src/modules/shop/shops/colours.py:493 +msgctxt "cmd:editshop_colours_create|resp:done|title" +msgid "Colour Role Created" +msgstr " Cor de Cargo Criada" + +#: src/modules/shop/shops/colours.py:497 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_create|resp:done|desc" +msgid "" +"You have created the role {mention}, and added it to the colour shop for " +"{coin}**{price}**!" +msgstr "" +"Você criou o cargo {mention}, e adicionou ele à loja de cores por " +"{coin}**{price}**!" + +#: src/modules/shop/shops/colours.py:504 +msgctxt "cmd:editshop_colours_create|resp:done|field:position_note|value" +msgid "" +"The new colour role was added below all other roles. Remember a member's " +"active colour is determined by their highest coloured role!" +msgstr "" +"A nova cor de cargo foi adicionada abaixo de todas as outras. Lembre-se que " +"a cor ativa de um cargo é determinada pela equivalente à mais alta cor de " +"cargo." + +#: src/modules/shop/shops/colours.py:508 +msgctxt "cmd:editshop_colours_create|resp:done|field:position_note|name" +msgid "Note" +msgstr "Nota" + +#: src/modules/shop/shops/colours.py:517 +msgctxt "cmd:editshop_colours_edit" +msgid "edit" +msgstr "editar" + +#: src/modules/shop/shops/colours.py:520 +msgctxt "cmd:editshop_colours_edit|desc" +msgid "Edit the name, colour, or price of a colour role." +msgstr "Edite o nome, cor ou preço de uma cor de cargo." + +#: src/modules/shop/shops/colours.py:524 +msgctxt "cmd:editshop_colours_edit|param:role" +msgid "role" +msgstr "cargo" + +#: src/modules/shop/shops/colours.py:525 +msgctxt "cmd:editshop_colours_edit|param:name" +msgid "name" +msgstr "nome" + +#: src/modules/shop/shops/colours.py:526 +msgctxt "cmd:editshop_colours_edit|param:colour" +msgid "colour" +msgstr "cor" + +#: src/modules/shop/shops/colours.py:527 +msgctxt "cmd:editshop_colours_edit|param:price" +msgid "price" +msgstr "preço" + +#: src/modules/shop/shops/colours.py:532 +msgctxt "cmd:editshop_colours_edit|param:role|desc" +msgid "Select a colour role to edit." +msgstr "Selecione a cor de um cargo para editar." + +#: src/modules/shop/shops/colours.py:536 +msgctxt "cmd:editshop_colours_edit|param:name|desc" +msgid "New name to give the colour role." +msgstr "Novo nome para dar a esta cor de cargo." + +#: src/modules/shop/shops/colours.py:540 +msgctxt "cmd:editshop_colours_edit|param:colour|desc" +msgid "New colour for the colour role (as hex, e.g. #AB12AB)." +msgstr "Nova cor para a cor de cargo (em código HEX, ex:. #AB12AB)." + +#: src/modules/shop/shops/colours.py:544 +msgctxt "cmd:editshop_colours_edit|param:price|desc" +msgid "New price for the colour role." +msgstr "Novo preço para a cor de cargo." + +#: src/modules/shop/shops/colours.py:573 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_edit|error:invalid_role" +msgid "{mention} is not in the colour role shop!" +msgstr "{mention} não está na loja de cores de cargo." + +#: src/modules/shop/shops/colours.py:587 +msgctxt "cmd:editshop_colours_edit|error:no_args" +msgid "You must give me one of `name`, `colour`, or `price` to update!" +msgstr "Você precisa me informar o ˋnomeˋ, ˋcorˋ ou ˋpreçoˋ para atualizar!" + +#: src/modules/shop/shops/colours.py:603 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_edit|error:parse_colour" +msgid "" +"I could not extract a colour value from `{colour}`!\n" +"Please enter the colour as a hex string, e.g. `#FA0BC1`" +msgstr "" +"Eu não consegui extrair um código de cor de ˋ{colour}ˋ!\n" +"Por favor, informe a cor como um código HEX, ex. ˋ#FA0BC1ˋ" + +#: src/modules/shop/shops/colours.py:618 +msgctxt "cmd:editshop_colours_edit|error:perms" +msgid "I do not have sufficient server permissions to edit this role!" +msgstr "" +"Eu não tenho permissões suficientes no servidor para editar este cargo." + +#: src/modules/shop/shops/colours.py:634 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_edit|resp:done|line:price" +msgid "{tick} Set price to {coin}**{price}**" +msgstr "{tick} configurar o preço por {coin}**{price}**" + +#: src/modules/shop/shops/colours.py:651 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_edit|resp:done|line:role" +msgid "{tick} Updated role to {mention}" +msgstr "{tick} Cargo atualizado para {mention}" + +#: src/modules/shop/shops/colours.py:661 +msgctxt "cmd:editshop_colours_edit|resp:done|embed:title" +msgid "Colour Role Updated" +msgstr "Cor do Cargo Atualizada" + +#: src/modules/shop/shops/colours.py:667 +msgctxt "cmd:editshop_colours_auto" +msgid "auto" +msgstr "automático" + +#: src/modules/shop/shops/colours.py:668 +msgctxt "cmd:editshop_colours_auto|desc" +msgid "Automatically create a set of colour roles." +msgstr "Automaticamente crie uma sequência de cores de cargo." + +#: src/modules/shop/shops/colours.py:677 +msgctxt "cmd:editshop_colours_add" +msgid "add" +msgstr "adicionar" + +#: src/modules/shop/shops/colours.py:680 +msgctxt "cmd:editshop_colours_add|desc" +msgid "Add an existing role to the colour shop." +msgstr "Adicionar um cargo existente para a loja de cores de cargo." + +#: src/modules/shop/shops/colours.py:684 +msgctxt "cmd:editshop_colours_add|param:role" +msgid "role" +msgstr "cargo" + +#: src/modules/shop/shops/colours.py:685 +msgctxt "cmd:editshop_colours_add|param:price" +msgid "price" +msgstr "preço" + +#: src/modules/shop/shops/colours.py:690 +msgctxt "cmd:editshop_colours_add|param:role|desc" +msgid "Select a role to add to the colour shop." +msgstr "Selecione um cargo para adicionar à loja." + +#: src/modules/shop/shops/colours.py:694 +msgctxt "cmd:editshop_colours_add|param:price|desc" +msgid "How much should this role cost?" +msgstr "Quanto este cargo deveria custar?" + +#: src/modules/shop/shops/colours.py:719 +msgctxt "cmd:editshop_colours_add|error:max_colours" +msgid "" +"This server already has the maximum of `25` colour roles!\n" +"Please remove some before adding or creating more." +msgstr "" +"Este servidor já possui o máximo de ˋ25ˋ cores de cargo!\n" +"Por favor, remova alguma antes de adicionar ou criar outra." + +#: src/modules/shop/shops/colours.py:728 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_add|error:role_exists" +msgid "The role {mention} is already registered as a colour role!" +msgstr "O cargo {mention} já está registrado como uma cor de cargo." + +#: src/modules/shop/shops/colours.py:737 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_add|error:role_perms" +msgid "" +"I do not have enough permissions to assign the role {mention}! Please ensure" +" I have the `MANAGE_ROLES` permission, and that my top role is above this " +"role." +msgstr "" +"Eu não tenho permissão para colocar o cargo {mention}! Por favor, garanta " +"que eu tenha a permissão de ˋGERENCIAR_CARGOSˋ, e que meu cargo mais alto " +"seja maior que este." + +#: src/modules/shop/shops/colours.py:748 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_add|error:caller_perms" +msgid "" +"You do not have sufficient server permissions to assign {mention} to the " +"shop! You must have `MANAGE_ROLES`, and your top role must be above this " +"role." +msgstr "" +"Você não tem permissão suficiente para colocar {mention} na loja! Você " +"precisa ter permissão para ˋGERENCIAR_CARGOSˋ, e seu maior cargo precisa " +"estar acima deste." + +#: src/modules/shop/shops/colours.py:760 +msgctxt "cmd:editshop_colours_add|error:role_has_admin" +msgid "" +"I refuse to add an administrator role to the LionCoin shop. That is a really" +" bad idea." +msgstr "" +"Eu me recuso a adicionar um cargo de Administrador à Loja de LionCoin. Isto " +"é realmente uma péssima ideia." + +#: src/modules/shop/shops/colours.py:781 +msgctxt "cmd:editshop_colours_add|resp:done|embed:title" +msgid "Colour Role Created" +msgstr "Cor de Cargo Criada" + +#: src/modules/shop/shops/colours.py:784 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_add|resp:done|embed:desc" +msgid "You have added {mention} to the colour shop for {coin}**{price}**!" +msgstr "Você adicionou {mention} à loja de cores por {coin}**{price}**!" + +#: src/modules/shop/shops/colours.py:792 +msgctxt "cmd:editshop_colours_clear" +msgid "clear" +msgstr "limpar" + +#: src/modules/shop/shops/colours.py:795 +msgctxt "cmd:editshop_colours_clear|desc" +msgid "" +"Remove all the colour roles from the shop, and optionally delete the roles." +msgstr "" +"Remova todas as cores dos cargos da loja, e opcionalmente delete os cargos." + +#: src/modules/shop/shops/colours.py:799 +msgctxt "cmd:editshop_colours_clear|param:delete" +msgid "delete_roles" +msgstr "excluir_cargos" + +#: src/modules/shop/shops/colours.py:804 +msgctxt "cmd:editshop_colours_clear|param:delete|desc" +msgid "Also delete the associated roles." +msgstr "Também apague os cargos associados." + +#: src/modules/shop/shops/colours.py:846 +msgctxt "cmd:editshop_colours_clear|error:no_colours" +msgid "There are no coloured roles to remove!" +msgstr "Não há cargos coloridos para remover." + +#: src/modules/shop/shops/colours.py:890 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_clear|resp:done|line:clear" +msgid "{tick} Colour shop cleared." +msgstr "{tick} Loja de cores foi limpa." + +#: src/modules/shop/shops/colours.py:901 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_clear|resp:done|line:refunding" +msgid "{loading} Refunded **{count}/{total}** members." +msgstr "{loading} Reembolsados **{count}/{total}** membros." + +#: src/modules/shop/shops/colours.py:907 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_clear|resp:done|line:refunded" +msgid "{tick} Refunded **{total}/{total}** members." +msgstr "{tick} Reembolsados **{total}/{total}** membros." + +#: src/modules/shop/shops/colours.py:920 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_clear|resp:done|line:deleted_failed" +msgid "" +"{emoji} Deleted **{count}/{total}** colour roles. (**{failed}** failed!)" +msgstr "" +"{emoji} Apagadas **{count}/{total}** cores de cargo. (**{failed}** failed!)" + +#: src/modules/shop/shops/colours.py:925 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_clear|resp:done|line:deleted" +msgid "{emoji} Deleted **{count}/{total}** colour roles." +msgstr "{emoji} Apagadas **{count}/{total}** cores de cargo." + +#: src/modules/shop/shops/colours.py:974 +msgctxt "cmd:editshop_colours_remove" +msgid "remove" +msgstr "remover" + +#: src/modules/shop/shops/colours.py:977 +msgctxt "cmd:editshop_colours_remove|desc" +msgid "Remove a specific colour role from the shop." +msgstr "Remova uma cor de cargo específica da loja. " + +#: src/modules/shop/shops/colours.py:981 +msgctxt "cmd:editshop_colours_remove|param:role" +msgid "role" +msgstr "cargo" + +#: src/modules/shop/shops/colours.py:982 +msgctxt "cmd:editshop_colours_remove" +msgid "delete_role" +msgstr "excluir_cargo" + +#: src/modules/shop/shops/colours.py:987 +msgctxt "cmd:editshop_colours_remove|param:role|desc" +msgid "Select the colour role to remove." +msgstr "Selecione a cor de cargo para remover." + +#: src/modules/shop/shops/colours.py:991 +msgctxt "cmd:editshop_colours_remove|param:delete_role|desc" +msgid "Whether to delete the associated role." +msgstr "Se o cargo associado também deverá ser deletado." + +#: src/modules/shop/shops/colours.py:1016 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_remove|error:not_colour" +msgid "{mention} is not in the colour role shop!" +msgstr "{mention} não está na loja de cores de cargo!" + +#: src/modules/shop/shops/colours.py:1034 +msgctxt "cmd:editshop_colours_remove|resp:done|line:delete" +msgid "Successfully deleted the role." +msgstr "Cargo deletado com sucesso!" + +#: src/modules/shop/shops/colours.py:1039 +msgctxt "cmd:editshop_colours_remove|resp:done|line:delete" +msgid "I do not have sufficient permissions to delete the role." +msgstr "Eu não tenho permissões suficientes para deletar o cargo." + +#: src/modules/shop/shops/colours.py:1044 +msgctxt "cmd:editshop_colours_remove|resp:done|line:delete" +msgid "Failed to delete the role for an unknown reason." +msgstr "Houve uma falha ao deletar o cargo. Motivo desconhecido." + +#: src/modules/shop/shops/colours.py:1049 +msgctxt "cmd:editshop_colours_remove|resp:done|line:delete" +msgid "Could not find the role in order to delete it." +msgstr "Não consegui encontrar o cargo para deletá-lo." + +#: src/modules/shop/shops/colours.py:1060 +#, possible-python-brace-format +msgctxt "cmd:editshop_colours_remove|resp:done|embed:desc" +msgid "" +"Removed {mention} from the colour shop.\n" +"{delete_line}" +msgstr "" +"Removida {mention} da loja de cargos.\n" +"{delete_line}" + +#: src/modules/shop/shops/colours.py:1138 +msgctxt "ui:colourstore|menu:buycolours|embed:error|title" +msgid "Purchase Failed!" +msgstr "A compra falhou!" + +#: src/modules/shop/shops/colours.py:1149 +#, possible-python-brace-format +msgctxt "ui:colourstore|menu:buycolours|resp:done|desc" +msgid "{tick} You have purchased {mention}" +msgstr "{tick} Você comprou {mention}" + +#: src/modules/shop/shops/colours.py:1184 +msgctxt "ui:colourstore|menu:buycolours|placeholder" +msgid "There are no colour roles available to purchase!" +msgstr "Não há cores de cargo disponíveis para venda!" + +#: src/modules/shop/shops/colours.py:1190 +msgctxt "ui:colourstore|menu:buycolours|placeholder" +msgid "Select a colour role to purchase!" +msgstr "Selecione uma cor de cargo para comprar!" + +#: src/modules/shop/shops/colours.py:1236 +#, possible-python-brace-format +msgctxt "ui:colourstore|embed|line:owned_item" +msgid "`[{j:02}]` | `{price} LC` | {mention} (You own this!)" +msgstr "`[{j:02}]` | `{price} LC` | {mention} (Você tem isto!)" + +#: src/modules/shop/shops/colours.py:1241 +#, possible-python-brace-format +msgctxt "ui:colourstore|embed|line:item" +msgid "`[{j:02}]` | `{price} LC` | {mention}" +msgstr "`[{j:02}]` | `{price} LC` | {mention}" + +#: src/modules/shop/shops/colours.py:1248 +msgctxt "ui:colourstore|embed|desc" +msgid "No colour roles available for purchase!" +msgstr "Não há cores de cargo disponíveis para compra." + +#: src/modules/shop/shops/colours.py:1251 +msgctxt "ui:colourstore|embed|title" +msgid "Colour Role Shop" +msgstr "Loja de Cores de Cargo" + +#: src/modules/shop/shops/colours.py:1257 +#, possible-python-brace-format +msgctxt "ui:colourstore|embed|footer:paged" +msgid "Page {current}/{total}" +msgstr "Página {current}/{total}" + +#: src/modules/shop/shops/colours.py:1264 +msgctxt "ui:colourstore|embed|field:warning|name" +msgid "Note!" +msgstr "Atenção!" + +#: src/modules/shop/shops/colours.py:1268 +#, possible-python-brace-format +msgctxt "ui:colourstore|embed|field:warning|value" +msgid "" +"Purchasing a new colour role will *replace* your currently colour {current} " +"without refund!" +msgstr "" +"Comprando um cargo colorido, a sua cor atual {current} será *alterada*, sem " +"devolução das moedas gastas nela." diff --git a/locales/pt_BR/LC_MESSAGES/statistics.po b/locales/pt_BR/LC_MESSAGES/statistics.po new file mode 100644 index 00000000..3defa85d --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/statistics.po @@ -0,0 +1,774 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/statistics/cog.py:43 +msgctxt "cmd:me" +msgid "me" +msgstr "Eu" + +#: src/modules/statistics/cog.py:46 +msgctxt "cmd:me|desc" +msgid "Display your personal profile and summary statistics." +msgstr "Mostra seu perfil pessoal e resumo das suas estatísticas." + +#: src/modules/statistics/cog.py:56 +msgctxt "cmd:stats" +msgid "stats" +msgstr "estatísticas" + +#: src/modules/statistics/cog.py:59 +msgctxt "cmd:stats|desc" +msgid "Weekly and monthly statistics for your recent activity." +msgstr "Estatísticas semanais, e mensais, das suas atividades recentes." + +#: src/modules/statistics/cog.py:72 +msgctxt "cmd:leaderboard" +msgid "leaderboard" +msgstr "Classificação" + +#: src/modules/statistics/cog.py:75 +msgctxt "cmd:leaderboard|desc" +msgid "Server leaderboard." +msgstr "Classificação no servidor." + +#: src/modules/statistics/cog.py:90 +#, possible-python-brace-format +msgctxt "cmd:leaderboard|chunking|desc" +msgid "Requesting server member list from Discord, please wait {loading}" +msgstr "" +"Requisitando lista de membros para o Discord. Por favor, aguarde {loading}" + +#: src/modules/statistics/cog.py:113 +msgctxt "cmd:configure_statistics" +msgid "statistics" +msgstr "Estatísticas" + +#: src/modules/statistics/cog.py:114 +msgctxt "cmd:configure_statistics|desc" +msgid "Statistics configuration panel" +msgstr "Painel de configuração das estatísticas" + +#: src/modules/statistics/cog.py:117 +msgctxt "cmd:configure_statistics|param:season_start" +msgid "season_start" +msgstr "começo_estatísticas" + +#: src/modules/statistics/cog.py:122 +msgctxt "cmd:configure_statistics|param:season_start|desc" +msgid "" +"Time from which to start counting activity for rank badges and season " +"leaderboards. (YYYY-MM-DD)" +msgstr "" +"Tempo a partir do qual as estatísticas estarão sendo contadas para as " +"classificações e ranking do servidor. (AAAA-MM-DD)" + +#: src/modules/statistics/settings.py:37 +msgctxt "settype:stat|output:voice" +msgid "`Voice`" +msgstr "ˋEm Canais de Vozˋ" + +#: src/modules/statistics/settings.py:38 +msgctxt "settype:stat|output:text" +msgid "`Text`" +msgstr "ˋMensagemˋ" + +#: src/modules/statistics/settings.py:39 +msgctxt "settype:stat|output:anki" +msgid "`Anki`" +msgstr "ˋAnkiˋ" + +#: src/modules/statistics/settings.py:42 +msgctxt "settype:stat|input_format:voice" +msgid "Voice" +msgstr "Em Canais de Voz" + +#: src/modules/statistics/settings.py:43 +msgctxt "settype:stat|input_format:text" +msgid "Text" +msgstr "Mensagens" + +#: src/modules/statistics/settings.py:44 +msgctxt "settype:stat|input_format:anki" +msgid "Anki" +msgstr "Anki" + +#: src/modules/statistics/settings.py:47 +msgctxt "settype:stat|input_pattern:voice" +msgid "voice|study" +msgstr "voz|estudo" + +#: src/modules/statistics/settings.py:48 +msgctxt "settype:stat|input_pattern:text" +msgid "text|messages" +msgstr "texto|mensagens" + +#: src/modules/statistics/settings.py:49 +msgctxt "settype:stat|input_pattern:anki" +msgid "anki" +msgstr "anki" + +#: src/modules/statistics/settings.py:53 +msgctxt "settype:state|accepts" +msgid "Voice/Text/Anki" +msgstr "Voz/Texto/Anki" + +#: src/modules/statistics/settings.py:66 +msgctxt "userset:show_global_stats" +msgid "global_stats" +msgstr "estatísticas_globais" + +#: src/modules/statistics/settings.py:69 +msgctxt "userset:show_global_stats|desc" +msgid "Whether displayed statistics include all your servers." +msgstr "Se irá mostrar a estatística escolhida de todos os seus servidores." + +#: src/modules/statistics/settings.py:73 +msgctxt "userset:show_global_stats|long_desc" +msgid "" +"Whether statistics commands display combined stats for all servers or just " +"your current server." +msgstr "" +"Se o comando de estatísticas deve mostrar as estatísticas combinadas de " +"todos seus servidores, ou somente do servidor atual." + +#: src/modules/statistics/settings.py:88 +msgctxt "guildset:season_start" +msgid "season_start" +msgstr "começo_estatísticas" + +#: src/modules/statistics/settings.py:91 +msgctxt "guildset:season_start|desc" +msgid "Start of the current statistics season." +msgstr "Conta as estatísticas a partir desta data." + +#: src/modules/statistics/settings.py:95 +msgctxt "guildset:season_start|long_desc" +msgid "" +"Activity ranks will be determined based on tracked activity since this time, and the leaderboard will display activity since this time by default. Unset to disable seasons and use all-time statistics instead.\n" +"Provided dates and times are assumed to be in the guild `timezone`, so set this first!" +msgstr "" +"Os Níveis de Classificação serão computados com base na atividade desde esta data, assim como a Tabela de Classificação do servidor. Para que sejam usadas as estatísticas desde o início do servidor, deixe sem configurações de data.\n" +"Os dias e as horas das estatísticas são baseadas no ˋfuso horárioˋ do servidor, então, configure-o primeiro!" + +#: src/modules/statistics/settings.py:102 +msgctxt "guildset:season_start|accepts" +msgid "The season start time in the form YYYY-MM-DD HH:MM" +msgstr "" +"Determine o marco temporal a para o começo das estatísticas de atividades. " +"Use formato AAAA-MM-DD HH:MM" + +#: src/modules/statistics/settings.py:106 +msgctxt "guildset:season_start|notset" +msgid "Not Set (Using all-time statistics)" +msgstr "Não Configurado (Usando estatísticas desde o início dos registros) " + +#: src/modules/statistics/settings.py:125 +#, possible-python-brace-format +msgctxt "guildset:season_start|parse|error:future_time" +msgid "Provided season start time {timestamp} is in the future!" +msgstr "" +"A data informada {timestamp} para começar a contar as estatísticas, é no " +"futuro! " + +#: src/modules/statistics/settings.py:137 +#, possible-python-brace-format +msgctxt "guildset:season_start|set_response|set" +msgid "" +"The leaderboard season and activity ranks will now count from {timestamp}. Member ranks will update when they are next active.\n" +"Use {rank_cmd} and press **Refresh Member Ranks** to refresh all ranks immediately." +msgstr "" +"A Tabela de Classificação, e os Níveis de Atividade, serão contados desde {timestamp}. Os níveis dos membros serão atualizados assim que eles ficarem ativos novamente.\n" +"Use {rank_cmd} e clique em **Atualizar Níveis dos Membros** para atualizar todos os níveis imediatamente." + +#: src/modules/statistics/settings.py:147 +#, possible-python-brace-format +msgctxt "guildset:season_start|set_response|unset" +msgid "" +"The leaderboard and activity ranks will now count all-time statistics. Member ranks will update when they are next active.\n" +"Use {rank_cmd} and press **Refresh Member Ranks** to refresh all ranks immediately." +msgstr "" +"A Tabela de Classificação e os Níveis de Atividade irão contar desde o início. Os membros terão seus níveis atualizados assim que ficarem ativos novamente.\n" +"Use {rank_cmd} e clique em **Atualizar Níveis dos Membros** para atualizar todos os níveis imediatamente." + +#: src/modules/statistics/settings.py:159 +msgctxt "guildset:unranked_roles" +msgid "unranked_roles" +msgstr "cargos_não_contabilizados" + +#: src/modules/statistics/settings.py:162 +msgctxt "guildset:unranked_roles|desc" +msgid "Roles to exclude from the leaderboards." +msgstr "Cargos que não serão mostrados nas classificações." + +#: src/modules/statistics/settings.py:166 +msgctxt "guildset:unranked_roles|long_desc" +msgid "" +"When set, members with *any* of these roles will not appear on the " +"/leaderboard ranking list." +msgstr "" +"Quando configurado, membros com *qualquer* destes cargos, não irão aparecer " +"na /classificação do servidor." + +#: src/modules/statistics/settings.py:170 +msgctxt "guildset:unranked_roles|accepts" +msgid "Comma separated list of unranked role names or ids." +msgstr "" +"Nome ou ID dos cargos não contabilizados para classificações, separados por " +"vírgula." + +#: src/modules/statistics/settings.py:186 +msgctxt "guildset:unranked_roles|set_using" +msgid "Role selector below." +msgstr "Selecione o cargo abaixo." + +#: src/modules/statistics/settings.py:196 +#, possible-python-brace-format +msgctxt "guildset:unranked_roles|set_response|set" +msgid "" +"Members of the following roles will not appear on the leaderboard: {roles}" +msgstr "" +"Os membros dos cargos seguintes não irão aparecer na Lista de Classificação:" +" {roles}" + +#: src/modules/statistics/settings.py:203 +msgctxt "guildset:unranked_roles|set_response|unset" +msgid "You have cleared the unranked role list." +msgstr "Você limpou a lista de cargos não contabilizáveis." + +#: src/modules/statistics/settings.py:217 +msgctxt "guildset:visible_stats" +msgid "visible_stats" +msgstr "estatística_visível" + +#: src/modules/statistics/settings.py:220 +msgctxt "guildset:visible_stats|desc" +msgid "Which statistics will be visible in the statistics commands." +msgstr "" +"Quais estatísticas poderão ser vistas através dos comandos de estatística " +"deste servidor." + +#: src/modules/statistics/settings.py:224 +msgctxt "guildset:visible_stats|desc" +msgid "" +"Choose which statistics types to display in the leaderboard and statistics " +"commands." +msgstr "" +"Escolha quais tipos de estatística a serem mostradas na Lista de " +"Classificação e nos comandos de estatísticas deste servidor." + +#: src/modules/statistics/settings.py:228 +msgctxt "guildset:visible_stats|accepts" +msgid "Voice, Text, Anki" +msgstr "Voz, Mensagens, Anki" + +#: src/modules/statistics/settings.py:249 +msgctxt "guildset:visible_stats|set_using" +msgid "Option menu below." +msgstr "Opção de menu, abaixo." + +#: src/modules/statistics/settings.py:257 +#, possible-python-brace-format +msgctxt "guildset:visible_stats|set_response" +msgid "Members will be able to view the following statistics types: {types}" +msgstr "" +"Os membros estarão aptos a ver os seguintes tipos de estatísticas: {types} " + +#: src/modules/statistics/settings.py:267 +msgctxt "guildset:default_stat" +msgid "default_stat" +msgstr "estatística_padrão" + +#: src/modules/statistics/settings.py:270 +msgctxt "guildset:default_stat|desc" +msgid "Statistic type to display by default in setting dialogues." +msgstr "" +"Tipo de estatística para ser mostrada como padrão na configuração de " +"conversas." + +#: src/modules/statistics/settings.py:274 +msgctxt "guildset:default_stat|long_desc" +msgid "Which statistic type to display by default in setting dialogues." +msgstr "" +"Qual o tipo de estatística para ser mostrada por padrão nas configurações de" +" conversas." + +#: src/modules/statistics/settings.py:307 +msgctxt "ui:statistics_config|menu:unranked_roles|placeholder" +msgid "Select Unranked Roles" +msgstr "Selecione Cargos Não Contabilizáveis" + +#: src/modules/statistics/settings.py:331 +msgctxt "ui:statistics_config|menu:visible_stats|item:voice|mode:voice" +msgid "Voice Activity" +msgstr "Atividade em Canal de Voz" + +#: src/modules/statistics/settings.py:336 +msgctxt "ui:statistics_config|menu:visible_stats|item:voice|mode:study" +msgid "Study Statistics" +msgstr "Estatísticas de Estudos" + +#: src/modules/statistics/settings.py:346 +msgctxt "ui:statistics_config|menu:visible_stats|item:text" +msgid "Message Activity" +msgstr "Atividade em Conversas" + +#: src/modules/statistics/settings.py:354 +msgctxt "ui:statistics_config|menu:visible_stats|item:anki" +msgid "Anki Reviews" +msgstr "Revisões Anki" + +#: src/modules/statistics/settings.py:365 +msgctxt "ui:statistics_config|menu:visible_stats|placeholder" +msgid "Select Visible Statistics" +msgstr "Selecione Estatísticas Visíveis" + +#: src/modules/statistics/settings.py:386 +msgctxt "ui:statistics_config|embed|title" +msgid "Statistics Configuration Panel" +msgstr "Painel de Configuração de Estatísticas" + +#: src/modules/statistics/settings.py:408 +msgctxt "dash:stats|title" +msgid "Activity Statistics Configuration ({commands[configure statistics]})" +msgstr "" +"Configuração das Estatísticas de Atividade ({commands[configure " +"statistics]})" + +#: src/modules/statistics/settings.py:412 +msgctxt "dash:stats|dropdown|placeholder" +msgid "Activity Statistics Panel" +msgstr "Painel de Estatísticas de Atividade" + +#: src/modules/statistics/ui/goals.py:92 +msgctxt "ui:MonthlyUI|name" +msgid "Monthly" +msgstr "Mensal" + +#: src/modules/statistics/ui/goals.py:135 +msgctxt "ui:WeeklyUI|name" +msgid "Weekly" +msgstr "Semanal" + +#: src/modules/statistics/ui/summary.py:18 +msgctxt "ui:SummaryUI|name" +msgid "Summary" +msgstr "Sumário" + +#: src/modules/statistics/ui/weeklymonthly.py:96 +msgctxt "menu:stat_type|opt:weekly_voice|name" +msgid "Weekly Voice Statistics" +msgstr "Estatística Semanal em Canal de Voz" + +#: src/modules/statistics/ui/weeklymonthly.py:101 +msgctxt "menu:stat_type|opt:weekly_text|name" +msgid "Weekly Text Statistics" +msgstr "Estatística Semanal em Conversas" + +#: src/modules/statistics/ui/weeklymonthly.py:106 +msgctxt "menu:stat_type|opt:weekly_anki|name" +msgid "Weekly Anki Statistics" +msgstr "Estatística Semanal Anki" + +#: src/modules/statistics/ui/weeklymonthly.py:112 +msgctxt "menu:stat_type|opt:monthly_voice|name" +msgid "Monthly Voice Statistics" +msgstr "Estatística Mensal em Canal de Voz" + +#: src/modules/statistics/ui/weeklymonthly.py:117 +msgctxt "menu:stat_type|opt:monthly_text|name" +msgid "Monthly Text Statistics" +msgstr "Estatística Mensal em Conversas" + +#: src/modules/statistics/ui/weeklymonthly.py:122 +msgctxt "menu:stat_type|opt:monthly_anki|name" +msgid "Monthly Anki Statistics" +msgstr "Estatística Mensal Anki" + +#: src/modules/statistics/ui/weeklymonthly.py:144 +msgctxt "modal:goal_editor|field:task_goal|label" +msgid "Task goal" +msgstr "Meta de Tarefas" + +#: src/modules/statistics/ui/weeklymonthly.py:148 +msgctxt "modal:goal_editor|field:task_goal|placeholder" +msgid "Enter the number of tasklist tasks you aim to do" +msgstr "Digite o número de tarefas da lista-de-tarefas para ser o objetivo." + +#: src/modules/statistics/ui/weeklymonthly.py:159 +#, possible-python-brace-format +msgctxt "modal:goal_editor|field:task_goal|error:NAN" +msgid "The provided task goal `{input}` is not a number! Please try again." +msgstr "" +"A meta de tarefas informada ˋ{input}ˋ não é um número! Por favor, tente " +"novamente." + +#: src/modules/statistics/ui/weeklymonthly.py:181 +msgctxt "modal:goal_editor|field:voice_goal|label" +msgid "Study time goal" +msgstr "Meta de Horas de Estudo" + +#: src/modules/statistics/ui/weeklymonthly.py:185 +msgctxt "modal:goal_editor|field:voice_goal|placeholder" +msgid "Enter a number of hours of study to aim for." +msgstr "Digite o número de horas de estudo para ser o objetivo." + +#: src/modules/statistics/ui/weeklymonthly.py:190 +msgctxt "modal:goal_editor|field:text_goal|label" +msgid "Message goal" +msgstr "Meta de Mensagens" + +#: src/modules/statistics/ui/weeklymonthly.py:194 +msgctxt "modal:goal_editor|field:text_goal|placeholder" +msgid "Enter a message count to aim for." +msgstr "Digite um valor de mensagens para ser o objetivo." + +#: src/modules/statistics/ui/weeklymonthly.py:199 +msgctxt "modal:goal_editor|field:anki_goal|label" +msgid "Card goal" +msgstr "Meta Cartões" + +#: src/modules/statistics/ui/weeklymonthly.py:203 +msgctxt "modal:goal_editor|field:anki_goal|label" +msgid "Enter a number of card revisions to aim for." +msgstr "Digite um número de revisões em cartões do Anki para ser o objetivo." + +#: src/modules/statistics/ui/weeklymonthly.py:216 +#, possible-python-brace-format +msgctxt "modal:goal_editor|field:voice_goal|error:NAN" +msgid "" +"The provided study time goal `{input}` is not a number! Please try again." +msgstr "" +"A meta de estudos informada ˋ{input}ˋ não é um número! Por favor, tente " +"novamente." + +#: src/modules/statistics/ui/weeklymonthly.py:223 +#, possible-python-brace-format +msgctxt "modal:goal_editor|field:text_goal|error:NAN" +msgid "The provided message goal `{input}` is not a number! Please try again." +msgstr "" +"A meta de conversas informada ˋ{input}ˋ não é um número! Por favor, tente " +"novamente." + +#: src/modules/statistics/ui/weeklymonthly.py:230 +#, possible-python-brace-format +msgctxt "modal:goal_editor|field:anki_goal|error:NAN" +msgid "The provided card goal `{input}` is not a number! Please try again." +msgstr "" +"A meta de cartões informada ˋ{input}ˋ não é um número! Por favor, tente " +"novamente." + +#: src/modules/statistics/ui/weeklymonthly.py:252 +msgctxt "modal:goal_editor|field:weekly_task_editor|label" +msgid "Tasks to complete this week (one per line)" +msgstr "Tarefas a completar nesta semana (uma por linha)" + +#: src/modules/statistics/ui/weeklymonthly.py:256 +msgctxt "modal:goal_editor|field:weekly_task_editor|placeholder" +msgid "" +"[ ] Write my biology essay\n" +"[x] Complete the second maths assignment\n" +msgstr "" +"[ ] Escrever minha redação de biologia\n" +"[x] Estudar na A Seita todos os dias da semana\n" + +#: src/modules/statistics/ui/weeklymonthly.py:262 +msgctxt "modal:goal_editor|field:monthly_task_editor|label" +msgid "Tasks to complete this month (one per line)" +msgstr "Tarefas para completar este mês (uma por linha)" + +#: src/modules/statistics/ui/weeklymonthly.py:266 +msgctxt "modal:goal_editor|field:monthly_task_editor|placeholder" +msgid "" +"[ ] Write my biology essay\n" +"[x] Complete the second maths assignment\n" +msgstr "" +"[ ] Escrever minha redação de biologia\n" +"[x] Estudar na A Seita todos os dias da semana\n" + +#: src/modules/statistics/ui/weeklymonthly.py:284 +#, possible-python-brace-format +msgctxt "modal:goal_editor||field:task_editor|error:parse_general" +msgid "" +"Malformed task!\n" +"`{input}`" +msgstr "" +"Tarefa fora do padrão!\n" +"ˋ{input}ˋ" + +#: src/modules/statistics/ui/weeklymonthly.py:301 +msgctxt "modal:goal_editor|title" +msgid "Weekly goal editor" +msgstr "Editor Meta Semanal" + +#: src/modules/statistics/ui/weeklymonthly.py:306 +msgctxt "modal:goal_editor|monthly|title" +msgid "Monthly goal editor" +msgstr "Editor Meta Mensal" + +#: src/modules/statistics/ui/weeklymonthly.py:503 +msgctxt "ui:weeklymonthly|button:edit_goals|label" +msgid "Edit Goals" +msgstr "Editor Metas" + +#: src/modules/statistics/ui/weeklymonthly.py:519 +#, possible-python-brace-format +msgctxt "ui:weeklymonthly|menu:period|monthly|label" +msgid "{month} {year}" +msgstr "{month} {year}" + +#: src/modules/statistics/ui/weeklymonthly.py:534 +#, possible-python-brace-format +msgctxt "ui:weeklymonthly|menu:period|weekly|label" +msgid "{year} W{week}" +msgstr "{year} S{week}" + +#: src/modules/statistics/ui/weeklymonthly.py:538 +#, possible-python-brace-format +msgctxt "ui:weeklymonthly|menu:period|weekly|desc" +msgid "" +"{start_day} {start_month} {start_year} to {end_day} {end_month} {end_year}" +msgstr "" +"{start_day} {start_month} {start_year} até {end_day} {end_month} {end_year}" + +#: src/modules/statistics/ui/weeklymonthly.py:616 +msgctxt "ui:weeklymonthly|button:period|close|label" +msgid "Close Selector" +msgstr "Fechar Seletor" + +#: src/modules/statistics/ui/weeklymonthly.py:621 +msgctxt "ui:weeklymonthly|button:period|weekly|label" +msgid "Select Week" +msgstr "Selecionar Semana" + +#: src/modules/statistics/ui/weeklymonthly.py:626 +msgctxt "ui:weeklymonthly|button:period|monthly|label" +msgid "Select Month" +msgstr "Selecionar Mês" + +#: src/modules/statistics/ui/weeklymonthly.py:691 +msgctxt "ui:weeklymonthly|menu:period|weekly|placeholder" +msgid "Select a week to display" +msgstr "Selecione uma semana para mostrar" + +#: src/modules/statistics/ui/weeklymonthly.py:696 +msgctxt "ui:weeklymonthly|menu:period|monthly|placeholder" +msgid "Select a month to display" +msgstr "Selecione um mês para mostrar" + +#: src/modules/statistics/ui/weeklymonthly.py:718 +msgctxt "ui:WeeklyMonthly|button:global|resp:success" +msgid "" +"You will now see combined statistics from all your servers (where " +"applicable)! Press again to revert." +msgstr "" +"Você irá ver as estatísticas combinadas de todos os seus servidores (onde " +"for possível)! Pressione novamente para desfazer." + +#: src/modules/statistics/ui/weeklymonthly.py:731 +msgctxt "ui:WeeklyMonthly|button:global|mode:local" +msgid "Server Statistics" +msgstr "Estatísticas do Servidor" + +#: src/modules/statistics/ui/weeklymonthly.py:736 +msgctxt "ui:WeeklyMonthly|button:global|mode:global" +msgid "Global Statistics" +msgstr "Estatísticas Globais" + +#: src/modules/statistics/ui/profile.py:41 +msgctxt "modal:profile_editor|field:editor|label" +msgid "Profile Tags (One line per tag)" +msgstr "Etiquetas de Perfil (uma linha por etiqueta)" + +#: src/modules/statistics/ui/profile.py:45 +msgctxt "modal:profile_editor|field:editor|placeholder" +msgid "" +"Mathematician\n" +"Loves Cats" +msgstr "" +"Matematico\n" +"AmaGatos" + +#: src/modules/statistics/ui/profile.py:53 +msgctxt "modal:profile_editor|title" +msgid "Profile Tag Editor" +msgstr "Editor Etiquetas Perfil" + +#: src/modules/statistics/ui/profile.py:71 +#, possible-python-brace-format +msgctxt "modal:profile_editor|error:too_many_tags" +msgid "Too many tags! You can have at most `{limit}` profile tags." +msgstr "" +"Muitas etiquetas de perfil! Você pode ter no máximo ˋ{limit}ˋ etiquetas de " +"perfil." + +#: src/modules/statistics/ui/profile.py:92 +msgctxt "menu:stat_type|opt:voice|name" +msgid "Voice Statistics" +msgstr "Etatísticas em Canal de Voz" + +#: src/modules/statistics/ui/profile.py:97 +msgctxt "menu:stat_type|opt:text|name" +msgid "Text Statistics" +msgstr "Estatísticas em Conversas" + +#: src/modules/statistics/ui/profile.py:102 +msgctxt "menu:stat_type|opt:anki|name" +msgid "Anki Statistics" +msgstr "Estatísticas Anki" + +#: src/modules/statistics/ui/profile.py:190 +msgctxt "modal:profile_editor|resp:success" +msgid "Your profile has been updated!" +msgstr "Seu perfil foi atualizado!" + +#: src/modules/statistics/ui/profile.py:200 +msgctxt "ui:profile_card|button:edit|label" +msgid "Edit Profile Badges" +msgstr "Editar Distintivos Perfil" + +#: src/modules/statistics/ui/profile.py:219 +msgctxt "ui:profile_card|button:statistics|label:hide" +msgid "Hide Statistics" +msgstr "Ocultar Estatísticas" + +#: src/modules/statistics/ui/profile.py:224 +msgctxt "ui:profile_card|button:statistics|label:show" +msgid "Show Statistics" +msgstr "Mostrar Estatísticas" + +#: src/modules/statistics/ui/profile.py:253 +msgctxt "ui:Profile|button:global|resp:success" +msgid "" +"You will now see statistics from all you servers (where applicable)! Press " +"again to revert." +msgstr "" +"Agora, você irá ver estatísticas de todos os seus servidores (em que " +"possível)! Clique novamente para desfazer." + +#: src/modules/statistics/ui/leaderboard.py:253 +msgctxt "ui:leaderboard|menu:stats|placeholder" +msgid "Select Activity Type" +msgstr "Selecione Tipo de Atividade" + +#: src/modules/statistics/ui/leaderboard.py:262 +msgctxt "ui:leaderboard|menu:stats|item:voice" +msgid "Voice Activity" +msgstr "Atividade em Canal de Voz" + +#: src/modules/statistics/ui/leaderboard.py:273 +msgctxt "ui:leaderboard|menu:stats|item:study" +msgid "Study Statistics" +msgstr "Estatísticas de Estudos" + +#: src/modules/statistics/ui/leaderboard.py:284 +msgctxt "ui:leaderboard|menu:stats|item:message" +msgid "Message Activity" +msgstr "Atividade em Conversas" + +#: src/modules/statistics/ui/leaderboard.py:295 +msgctxt "ui:leaderboard|menu;stats|item:anki" +msgid "Anki Cards Reviewed" +msgstr "Cartões Anki Revisados" + +#: src/modules/statistics/ui/leaderboard.py:349 +msgctxt "ui:leaderboard|button:season|label" +msgid "This Season" +msgstr "Neste Período" + +#: src/modules/statistics/ui/leaderboard.py:353 +msgctxt "ui:leaderboard|button:day|label" +msgid "Today" +msgstr "Hoje" + +#: src/modules/statistics/ui/leaderboard.py:357 +msgctxt "ui:leaderboard|button:week|label" +msgid "This Week" +msgstr "Esta Semana" + +#: src/modules/statistics/ui/leaderboard.py:361 +msgctxt "ui:leaderboard|button:month|label" +msgid "This Month" +msgstr "Este Mês" + +#: src/modules/statistics/ui/leaderboard.py:365 +msgctxt "ui:leaderboard|button:alltime|label" +msgid "All Time" +msgstr "Desde Sempre" + +#: src/modules/statistics/ui/leaderboard.py:369 +msgctxt "ui:leaderboard|button:jump|label" +msgid "Jump" +msgstr "Ir" + +#: src/modules/statistics/ui/leaderboard.py:384 +msgctxt "ui:leaderboard|button:jump|input:title" +msgid "Jump to page" +msgstr "Ir para a página" + +#: src/modules/statistics/ui/leaderboard.py:388 +msgctxt "ui:leaderboard|button:jump|input:question" +msgid "Page number to jump to" +msgstr "Número da página para ir" + +#: src/modules/statistics/ui/leaderboard.py:399 +msgctxt "ui:leaderboard|button:jump|error:invalid_page" +msgid "Invalid page number, please try again!" +msgstr "Número da página inválido, por favor, tente novamente!" + +#: src/modules/statistics/ui/leaderboard.py:443 +msgctxt "ui:leaderboard|chunk_warning" +msgid "" +"**Note:** Could not retrieve member list from Discord, so some members may " +"be missing. Try again in a minute!" +msgstr "" +"**Nota:** Não pude recuperar a lista de membros do Discord, então alguns " +"membros podem estar faltando. Tente novamente em um minuto!" + +#: src/modules/statistics/ui/leaderboard.py:450 +#, possible-python-brace-format +msgctxt "ui:leaderboard|since" +msgid "Counting statistics since {timestamp}" +msgstr "Estatísticas sendo contadas desde {timestamp}" + +#: src/modules/statistics/ui/leaderboard.py:463 +#, possible-python-brace-format +msgctxt "ui:leaderboard|mode:voice|message:empty|desc" +msgid "There has been no voice activity since {timestamp}" +msgstr "Não houve atividade em canais de voz desde {timestamp}" + +#: src/modules/statistics/ui/leaderboard.py:468 +#, possible-python-brace-format +msgctxt "ui:leaderboard|mode:text|message:empty|desc" +msgid "There has been no message activity since {timestamp}" +msgstr "Não houve atividade em conversas desde {timestamp}" + +#: src/modules/statistics/ui/leaderboard.py:473 +#, possible-python-brace-format +msgctxt "ui:leaderboard|mode:anki|message:empty|desc" +msgid "There have been no Anki cards reviewed since {timestamp}" +msgstr "Não houve atividade em Cartões Anki desde {timestamp}" + +#: src/modules/statistics/ui/leaderboard.py:482 +msgctxt "ui:leaderboard|message:empty|title" +msgid "Leaderboard Empty!" +msgstr "Lista de Classificação Vazia!" diff --git a/locales/pt_BR/LC_MESSAGES/stats-gui.po b/locales/pt_BR/LC_MESSAGES/stats-gui.po new file mode 100644 index 00000000..cd376218 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/stats-gui.po @@ -0,0 +1,144 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. First column +#: src/gui/cards/stats.py:72 +msgctxt "skin:stats|header:col1" +msgid "STATISTICS" +msgstr "ESTATÍSTICAS" + +#: src/gui/cards/stats.py:75 +msgctxt "skin:stats|subheader:leaderboard" +msgid "LEADERBOARD POSITION" +msgstr "POSIÇÃO NA CLASSIFICAÇÃO" + +#: src/gui/cards/stats.py:79 +msgctxt "skin:stats|mode:study|subheader:study" +msgid "STUDY TIME" +msgstr "TEMPO ESTUDOS" + +#: src/gui/cards/stats.py:83 +msgctxt "skin:stats|mode:voice|subheader:study" +msgid "VOICE TIME" +msgstr "TEMPO EM CANAL DE VOZ" + +#: src/gui/cards/stats.py:87 +msgctxt "skin:stats|mode:text|subheader:study" +msgid "MESSAGES" +msgstr "MENSAGENS" + +#: src/gui/cards/stats.py:91 +msgctxt "skin:stats|mode:anki|subheader:study" +msgid "CARDS REVIEWED" +msgstr "CARTÕES REVISADOS" + +#: src/gui/cards/stats.py:102 +msgctxt "skin:stats|subheader:workouts" +msgid "WORKOUTS" +msgstr "EXERCÍCIOS" + +#: src/gui/cards/stats.py:118 +msgctxt "skin:stats|field:daily" +msgid "DAILY" +msgstr "DIÁRIO" + +#: src/gui/cards/stats.py:122 +msgctxt "skin:stats|field:weekly" +msgid "WEEKLY" +msgstr "SEMANAL" + +#: src/gui/cards/stats.py:126 +msgctxt "skin:stats|field:monthly" +msgid "MONTHLY" +msgstr "MENSAL" + +#: src/gui/cards/stats.py:130 +msgctxt "skin:stats|field:alltime" +msgid "ALL TIME" +msgstr "SEMPRE" + +#: src/gui/cards/stats.py:134 +msgctxt "skin:stats|field:time" +msgid "TIME" +msgstr "TEMPO" + +#: src/gui/cards/stats.py:138 +msgctxt "skin:stats|field:anki" +msgid "ANKI: COMING SOON" +msgstr "ANKI: EM BREVE" + +#: src/gui/cards/stats.py:155 +msgctxt "skin:stats|mode:study|header:col2" +msgid "STUDY STREAK" +msgstr "ETAPA DE ESTUDOS" + +#: src/gui/cards/stats.py:159 +msgctxt "skin:stats|mode:voice|header:col2" +msgid "VOICE STREAK" +msgstr "SEQUENCIAS EM CANAL DE VOZ" + +#: src/gui/cards/stats.py:163 +msgctxt "skin:stats|mode:text|header:col2" +msgid "ACTIVITY STREAK" +msgstr "ETAPA DA ATIVIDADE" + +#: src/gui/cards/stats.py:167 +msgctxt "skin:stats|mode:anki|header:col2" +msgid "ANKI REVIEW STREAK" +msgstr "ETAPA DE REVISÃO ANKI" + +#: src/gui/cards/stats.py:180 +#, possible-python-brace-format +msgctxt "skin:stats|mode:study|field:col2_summary" +msgid "{amount} HRS" +msgstr "{amount} HRS" + +#: src/gui/cards/stats.py:184 +#, possible-python-brace-format +msgctxt "skin:stats|mode:voice|field:col2_summary" +msgid "{amount} HRS" +msgstr "{amount} HRS" + +#: src/gui/cards/stats.py:188 +#, possible-python-brace-format +msgctxt "skin:stats|mode:text|field:col2_summary" +msgid "{amount} XP" +msgstr "{amount} XP" + +#: src/gui/cards/stats.py:192 +#, possible-python-brace-format +msgctxt "skin:stats|mode:anki|field:col2_summary" +msgid "{amount} CARDS" +msgstr "{amount} CARTÕES" + +#: src/gui/cards/stats.py:223 +msgctxt "skin:stats|cal|weekdays" +msgid "S,M,T,W,T,F,S" +msgstr "D,S,T,Q,Q,S,S" + +#: src/gui/cards/stats.py:227 +msgctxt "skin:stats|cal|months" +msgid "" +"JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER" +msgstr "" +"JANEIRO,FEVEREIRO,MARÇO,ABRIL,MAIO,JUNHO,JULHO,AGOSTO,SETEMBRO,OUTUBRO,NOVEMBRO,DEZEMBRO" diff --git a/locales/pt_BR/LC_MESSAGES/sysadmin.po b/locales/pt_BR/LC_MESSAGES/sysadmin.po new file mode 100644 index 00000000..c68d7bc4 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/sysadmin.po @@ -0,0 +1,207 @@ +# 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. +# +# Translators: +# Aline Souki, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/sysadmin/presence.py:116 +msgctxt "botset:presence_status" +msgid "online_status" +msgstr "online_status" + +#: src/modules/sysadmin/presence.py:117 +msgctxt "botset:presence_status|desc" +msgid "Bot status indicator" +msgstr "Indicador de sitação do bot " + +#: src/modules/sysadmin/presence.py:120 +msgctxt "botset:presence_status|long_desc" +msgid "Whether the bot account displays as online, idle, dnd, or offline." +msgstr "" +"Se o usuário do bot é mostrado como online, ausente, não perturbe ou " +"offline. " + +#: src/modules/sysadmin/presence.py:124 +msgctxt "botset:presence_status|accepts" +msgid "Online/Idle/Dnd/Offline" +msgstr "Online/Inativa/Não Perturbe/Offline" + +#: src/modules/sysadmin/presence.py:133 +msgctxt "botset:presence_status|output:online" +msgid "**Online**" +msgstr "**Online**" + +#: src/modules/sysadmin/presence.py:134 +msgctxt "botset:presence_status|output:idle" +msgid "**Idle**" +msgstr "**Ausente**" + +#: src/modules/sysadmin/presence.py:135 +msgctxt "botset:presence_status|output:dnd" +msgid "**Do Not Disturb**" +msgstr "**Ocupado**" + +#: src/modules/sysadmin/presence.py:136 +msgctxt "botset:presence_status|output:offline" +msgid "**Offline**" +msgstr "**Offline**" + +#: src/modules/sysadmin/presence.py:139 +msgctxt "botset:presence_status|input_format:online" +msgid "Online" +msgstr "Online" + +#: src/modules/sysadmin/presence.py:140 +msgctxt "botset:presence_status|input_format:idle" +msgid "Idle" +msgstr "Ausente" + +#: src/modules/sysadmin/presence.py:141 +msgctxt "botset:presence_status|input_format:dnd" +msgid "DND" +msgstr "Não Perturbe" + +#: src/modules/sysadmin/presence.py:142 +msgctxt "botset:presence_status|input_format:offline" +msgid "Offline" +msgstr "Offline" + +#: src/modules/sysadmin/presence.py:145 +msgctxt "botset:presence_status|input_pattern:online" +msgid "on|online" +msgstr "on|online" + +#: src/modules/sysadmin/presence.py:146 +msgctxt "botset:presence_status|input_pattern:idle" +msgid "idle" +msgstr "ausente" + +#: src/modules/sysadmin/presence.py:147 +msgctxt "botset:presence_status|input_pattern:dnd" +msgid "do not disturb|dnd" +msgstr "não perturbe|np" + +#: src/modules/sysadmin/presence.py:148 +msgctxt "botset:presence_status|input_pattern:offline" +msgid "off|offline|invisible" +msgstr "off|offline|invisível" + +#: src/modules/sysadmin/presence.py:155 +msgctxt "botset:presence_type" +msgid "activity_type" +msgstr "tipo_de_atividade" + +#: src/modules/sysadmin/presence.py:156 +msgctxt "botset:presence_type|desc" +msgid "Type of presence activity" +msgstr "Tipo de atividade atual" + +#: src/modules/sysadmin/presence.py:159 +msgctxt "botset:presence_type|long_desc" +msgid "" +"Whether the bot activity is shown as 'Listening', 'Playing', or 'Watching'." +msgstr "" +"Se a atividade do bot é mostrada como 'Ouvindo', 'Jogando' ou 'Assistindo'." + +#: src/modules/sysadmin/presence.py:163 +msgctxt "botset:presence_type|accepts" +msgid "Listening/Playing/Watching/Streaming" +msgstr "Ouvindo/Jogando/Assistindo/Transmitindo" + +#: src/modules/sysadmin/presence.py:172 +msgctxt "botset:presence_type|output:watching" +msgid "**Watching**" +msgstr "**Assistindo**" + +#: src/modules/sysadmin/presence.py:173 +msgctxt "botset:presence_type|output:listening" +msgid "**Listening**" +msgstr "**Ouvindo**" + +#: src/modules/sysadmin/presence.py:174 +msgctxt "botset:presence_type|output:playing" +msgid "**Playing**" +msgstr "**Jogando**" + +#: src/modules/sysadmin/presence.py:175 +msgctxt "botset:presence_type|output:streaming" +msgid "**Streaming**" +msgstr "**Transmitindo**" + +#: src/modules/sysadmin/presence.py:178 +msgctxt "botset:presence_type|input_format:watching" +msgid "Watching" +msgstr "Assistindo" + +#: src/modules/sysadmin/presence.py:179 +msgctxt "botset:presence_type|input_format:listening" +msgid "Listening" +msgstr "Ouvindo" + +#: src/modules/sysadmin/presence.py:180 +msgctxt "botset:presence_type|input_format:playing" +msgid "Playing" +msgstr "Jogando" + +#: src/modules/sysadmin/presence.py:181 +msgctxt "botset:presence_type|input_format:streaming" +msgid "Streaming" +msgstr "Transmitindo" + +#: src/modules/sysadmin/presence.py:184 +msgctxt "botset:presence_type|input_pattern:watching" +msgid "watching" +msgstr "assistindo" + +#: src/modules/sysadmin/presence.py:185 +msgctxt "botset:presence_type|input_pattern:listening" +msgid "listening" +msgstr "ouvindo" + +#: src/modules/sysadmin/presence.py:186 +msgctxt "botset:presence_type|input_pattern:playing" +msgid "playing" +msgstr "jogando" + +#: src/modules/sysadmin/presence.py:187 +msgctxt "botset:presence_type|input_pattern:streaming" +msgid "streaming" +msgstr "transmitindo" + +#: src/modules/sysadmin/presence.py:194 +msgctxt "botset:presence_name" +msgid "activity_name" +msgstr "nome_da_atividade" + +#: src/modules/sysadmin/presence.py:195 +msgctxt "botset:presence_name|desc" +msgid "Name of the presence activity" +msgstr "Nome da atividade atual" + +#: src/modules/sysadmin/presence.py:196 +msgctxt "botset:presence_name|long_desc" +msgid "Presence activity name." +msgstr "Nome da atividade atual." + +#: src/modules/sysadmin/presence.py:197 +msgctxt "botset:presence_name|accepts" +msgid "The name of the activity to show." +msgstr "Nome da atividade a mostrar." diff --git a/locales/pt_BR/LC_MESSAGES/tasklist.po b/locales/pt_BR/LC_MESSAGES/tasklist.po new file mode 100644 index 00000000..8c37ac4c --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/tasklist.po @@ -0,0 +1,888 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/tasklist/cog.py:35 +msgctxt "argtype:Before|opt:HOUR" +msgid "The last hour" +msgstr "Última hora" + +#: src/modules/tasklist/cog.py:36 +msgctxt "argtype:Before|opt:HALFDAY" +msgid "The last 12 hours" +msgstr "Nas últimas 12 horas" + +#: src/modules/tasklist/cog.py:37 +msgctxt "argtype:Before|opt:DAY" +msgid "The last 24 hours" +msgstr "Nas últimas 24 horas" + +#: src/modules/tasklist/cog.py:38 +msgctxt "argtype:Before|opt:TODAY" +msgid "Today" +msgstr "Hoje" + +#: src/modules/tasklist/cog.py:39 +msgctxt "argtype:Before|opt:YESTERDAY" +msgid "Yesterday" +msgstr "Ontem" + +#: src/modules/tasklist/cog.py:40 +msgctxt "argtype:Before|opt:Monday" +msgid "This Monday" +msgstr "Esta Segunda" + +#: src/modules/tasklist/cog.py:41 +msgctxt "argtype:Before|opt:THISMONTH" +msgid "This Month" +msgstr "Este Mês" + +#: src/modules/tasklist/cog.py:205 +msgctxt "summon_tasklist|error:insufficient_perms|title" +msgid "Uh-Oh, I cannot do that here!" +msgstr "Oh-oh, eu não posso fazer isto!" + +#: src/modules/tasklist/cog.py:209 +msgctxt "summon_tasklist|error:insufficient_perms|desc" +msgid "" +"This channel is configured as a tasklist channel, but I lack the " +"`EMBED_LINKS` or `SEND_MESSAGES` permission here! If you believe this is " +"unintentional, please contact a server administrator." +msgstr "" +"Este canal é configurado como o Canal da Lista de Tarefas, mas me falta " +"permissão para ˋINSERIR_LINKSˋ ou ˋENVIAR_MENSAGENSˋ aqui! Se você acredita " +"que é um erro não intencional, por favor, contate a Administração do " +"servidor." + +#: src/modules/tasklist/cog.py:258 +msgctxt "cmd:tasklist" +msgid "tasklist" +msgstr "lista_de_tarefas" + +#: src/modules/tasklist/cog.py:261 +msgctxt "cmd:tasklist|desc" +msgid "Open your tasklist." +msgstr "Abra sua lista de tarefas." + +#: src/modules/tasklist/cog.py:270 +msgctxt "group:tasks" +msgid "tasks" +msgstr "tarefas" + +#: src/modules/tasklist/cog.py:271 +msgctxt "group:tasks|desc" +msgid "Base command group for tasklist commands." +msgstr "Grupo de comandos-base para comandar as tarefas." + +#: src/modules/tasklist/cog.py:293 +msgctxt "argtype:taskid|error:no_tasks" +msgid "Tasklist empty! No matching tasks." +msgstr "Lista de tarefas vazia! Não há tarefas compatíveis." + +#: src/modules/tasklist/cog.py:330 +msgctxt "argtype:taskid|match:all" +msgid "All tasks" +msgstr "Todas as tarefas" + +#: src/modules/tasklist/cog.py:348 +#, possible-python-brace-format +msgctxt "argtype:taskid|error:parse_multi" +msgid "(Warning: {error})" +msgstr "(Atenção: {error})" + +#: src/modules/tasklist/cog.py:382 +#, possible-python-brace-format +msgctxt "argtype:taskid|error:no_matching" +msgid "No tasks matching '{partial}'!" +msgstr "Não há tarefas compatíveis '{partial}'!" + +#: src/modules/tasklist/cog.py:402 +msgctxt "cmd:tasks_new" +msgid "new" +msgstr "nova" + +#: src/modules/tasklist/cog.py:405 +msgctxt "cmd:tasks_new|desc" +msgid "Add a new task to your tasklist." +msgstr "Adicione uma nova tarefa na sua lista de tarefas." + +#: src/modules/tasklist/cog.py:409 +msgctxt "cmd:tasks_new|param:content" +msgid "task" +msgstr "tarefa" + +#: src/modules/tasklist/cog.py:410 +msgctxt "cmd:tasks_new|param:parent" +msgid "parent" +msgstr "tarefa-mãe" + +#: src/modules/tasklist/cog.py:413 +msgctxt "cmd:tasks_new|param:content|desc" +msgid "Content of your new task." +msgstr "Conteúdo da sua nova tarefa." + +#: src/modules/tasklist/cog.py:414 +msgctxt "cmd:tasks_new|param:parent" +msgid "Parent of this task." +msgstr "A tarefa-mãe desta tarefa." + +#: src/modules/tasklist/cog.py:434 +#, possible-python-brace-format +msgctxt "cmd:tasks_new|error:parse_parent" +msgid "Could not find parent task number `{input}` in your tasklist." +msgstr "" +"Não consegui encontrar o número ˋ{input}ˋ da tarefa-mãe em sua lista de " +"tarefas. " + +#: src/modules/tasklist/cog.py:449 +#, possible-python-brace-format +msgctxt "cmd:tasks_new|resp:success" +msgid "{tick} Created task `{label}`." +msgstr "{tick} Tarefa criada ˋ{label}ˋ." + +#: src/modules/tasklist/cog.py:461 +msgctxt "cmd:tasks_upload" +msgid "upload" +msgstr "enviar" + +#: src/modules/tasklist/cog.py:464 +msgctxt "cmd:tasks_upload|desc" +msgid "Upload a list of tasks to append to or replace your tasklist." +msgstr "" +"Envie uma lista de tarefas para anexar ou substituir sua lista de tarefas " +"atual." + +#: src/modules/tasklist/cog.py:468 +msgctxt "cmd:tasks_upload|param:tasklist" +msgid "tasklist" +msgstr "lista_de_tarefas" + +#: src/modules/tasklist/cog.py:469 +msgctxt "cmd:tasks_upload|param:append" +msgid "append" +msgstr "Acrescentar" + +#: src/modules/tasklist/cog.py:474 +msgctxt "cmd:tasks_upload|param:tasklist|desc" +msgid "" +"Text file containing a (standard markdown formatted) checklist of tasks to " +"add or append." +msgstr "" +"Arquivo de texto (formatado com marcadores padrão) que contenha uma lista de" +" tarefas para adicionar ou aumentar a sua." + +#: src/modules/tasklist/cog.py:478 +msgctxt "cmd:tasks_upload|param:append|desc" +msgid "" +"Whether to append the given tasks or replace your entire tasklist. Defaults " +"to True." +msgstr "" +"Será para substituir ou aumentar a sua lista de tarefas atual. A " +"configuração padrão retorna verdadeiro. " + +#: src/modules/tasklist/cog.py:494 +msgctxt "cmd:tasks_upload|error:not_text" +msgid "The attached tasklist must be a text file!" +msgstr "A lista anexada precisa ser um arquivo de texto!" + +#: src/modules/tasklist/cog.py:502 +msgctxt "cmd:tasks_upload|error:too_large" +msgid "The attached tasklist was too large!" +msgstr "A lista de tarefas era muito grande." + +#: src/modules/tasklist/cog.py:513 +msgctxt "cmd:tasks_upload|error:too_many_lines" +msgid "" +"Too many tasks! Refusing to process a tasklist with more than `1000` lines." +msgstr "" +"Muitas tarefas! Recusa ao tentar processar uma lista de tarefas com mais de " +"1000 linhas." + +#: src/modules/tasklist/cog.py:519 +msgctxt "cmd:tasks_upload|error:decoding" +msgid "" +"Could not decode attached tasklist. Please make sure it is saved with the " +"`UTF-8` encoding." +msgstr "" +"Não pude decodificar a lista de tarefas anexada. Por favor, confirme se ela " +"está salva com o formato ˋUTF-8ˋ." + +#: src/modules/tasklist/cog.py:566 +#, possible-python-brace-format +msgctxt "cmd:tasks_upload|resp:success" +msgid "{tick} Updated your tasklist." +msgstr "{tick} Lista atualizada." + +#: src/modules/tasklist/cog.py:578 +msgctxt "cmd:tasks_edit" +msgid "edit" +msgstr "editar" + +#: src/modules/tasklist/cog.py:581 +msgctxt "cmd:tasks_edit|desc" +msgid "Edit a task in your tasklist." +msgstr "Editar uma tarefa da lista de tarefas." + +#: src/modules/tasklist/cog.py:585 +msgctxt "cmd:tasks_edit|param:taskstr" +msgid "task" +msgstr "tarefa" + +#: src/modules/tasklist/cog.py:586 +msgctxt "cmd:tasks_edit|param:new_content" +msgid "new_task" +msgstr "nova_tarefa" + +#: src/modules/tasklist/cog.py:587 +msgctxt "cmd:tasks_edit|param:new_parent" +msgid "new_parent" +msgstr "nova_tarefamae" + +#: src/modules/tasklist/cog.py:590 +msgctxt "cmd:tasks_edit|param:taskstr|desc" +msgid "Which task do you want to update?" +msgstr "Qual tarefa você gostaria de atualizar?" + +#: src/modules/tasklist/cog.py:591 +msgctxt "cmd:tasks_edit|param:new_content|desc" +msgid "What do you want to change the task to?" +msgstr "Para qual conteúdo será transformada esta tarefa?" + +#: src/modules/tasklist/cog.py:592 +msgctxt "cmd:tasks_edit|param:new_parent|desc" +msgid "Which task do you want to be the new parent?" +msgstr "Qual tarefa você gostaria que fosse a nova tarefa-mãe?" + +#: src/modules/tasklist/cog.py:611 +#, possible-python-brace-format +msgctxt "cmd:tasks_edit|error:parse_taskstr" +msgid "Could not find target task number `{input}` in your tasklist." +msgstr "Não pude encontrar a tarefa número ˋ{input}ˋ em sua lista." + +#: src/modules/tasklist/cog.py:627 +#, possible-python-brace-format +msgctxt "cmd:tasks_edit|error:parse_parent" +msgid "Could not find new parent task number `{input}` in your tasklist." +msgstr "Não pude encontrar a tarefa-mãe número ˋ{input}ˋ em sua lista." + +#: src/modules/tasklist/cog.py:646 +#, possible-python-brace-format +msgctxt "cmd:tasks_edit|resp:success|desc" +msgid "{tick} Task `{label}` updated." +msgstr "{tick} Tarefa ˋ{label}ˋ atualizada." + +#: src/modules/tasklist/cog.py:668 +msgctxt "ui:tasklist_single_editor|title" +msgid "Edit Task" +msgstr "Editar Tarefa" + +#: src/modules/tasklist/cog.py:683 +msgctxt "cmd:tasks_clear" +msgid "clear" +msgstr "apagar" + +#: src/modules/tasklist/cog.py:684 +msgctxt "cmd:tasks_clear|desc" +msgid "Clear your tasklist." +msgstr "Apagar sua lista de tarefas." + +#: src/modules/tasklist/cog.py:694 +msgctxt "cmd:tasks_clear|resp:success" +msgid "Your tasklist has been cleared." +msgstr "Sua lista de tarefas foi apagada." + +#: src/modules/tasklist/cog.py:702 +msgctxt "cmd:tasks_remove" +msgid "remove" +msgstr "remover" + +#: src/modules/tasklist/cog.py:705 +msgctxt "cmd:tasks_remove|desc" +msgid "" +"Remove tasks matching all the provided conditions. (E.g. remove tasks " +"completed before today)." +msgstr "" +"Remover tarefas compatíveis com as descrições informadas. (Ex. remover " +"tarefas concluídas antes de hoje)." + +#: src/modules/tasklist/cog.py:709 +msgctxt "cmd:tasks_remove|param:taskidstr" +msgid "tasks" +msgstr "tarefas" + +#: src/modules/tasklist/cog.py:710 +msgctxt "cmd:tasks_remove|param:created_before" +msgid "created_before" +msgstr "criadas_antes" + +#: src/modules/tasklist/cog.py:711 +msgctxt "cmd:tasks_remove|param:updated_before" +msgid "updated_before" +msgstr "atualizadas_antes" + +#: src/modules/tasklist/cog.py:712 +msgctxt "cmd:tasks_remove|param:completed" +msgid "completed" +msgstr "concluídas" + +#: src/modules/tasklist/cog.py:713 +msgctxt "cmd:tasks_remove|param:cascade" +msgid "cascade" +msgstr "cascata" + +#: src/modules/tasklist/cog.py:718 +msgctxt "cmd:tasks_remove|param:taskidstr|desc" +msgid "" +"List of task numbers or ranges to remove (e.g. 1, 2, 5-7, 8.1-3, 9-), or `-`" +" to remove all." +msgstr "" +"Número das tarefas, da Lista de tarefas, ou o intervalo, que deseja remover " +"(ex. 1, 2, 5-7, 8.1-3, 9-), ou ˋ-ˋ para remover todas." + +#: src/modules/tasklist/cog.py:722 +msgctxt "cmd:tasks_remove|param:created_before|desc" +msgid "Only delete tasks created before the selected time." +msgstr "Somente apague tarefas criadas antes da data selecionada." + +#: src/modules/tasklist/cog.py:726 +msgctxt "cmd:tasks_remove|param:updated_before|desc" +msgid "" +"Only deleted tasks update (i.e. completed or edited) before the selected " +"time." +msgstr "" +"Somente apague tarefas atualizadas (completas ou editadas) antes da data " +"selecionada." + +#: src/modules/tasklist/cog.py:730 +msgctxt "cmd:tasks_remove|param:completed" +msgid "Only delete tasks which are (not) complete." +msgstr "Somente apague tarefas que (não) foram completadas." + +#: src/modules/tasklist/cog.py:734 +msgctxt "cmd:tasks_remove|param:cascade" +msgid "Whether to recursively remove subtasks of removed tasks." +msgstr "Se as sub-tarefas também devem ser apagadas com as tarefas removidas." + +#: src/modules/tasklist/cog.py:766 src/modules/tasklist/cog.py:861 +#: src/modules/tasklist/cog.py:936 +#, possible-python-brace-format +msgctxt "cmd:tasks_remove_cmd|error:no_matching" +msgid "No tasks on your tasklist match `{input}`" +msgstr "Nenhuma das tarefas em sua lista de tarefas corresponde com ˋ{input}ˋ" + +#: src/modules/tasklist/cog.py:790 +msgctxt "cmd:tasks_remove_cmd|error:no_matching" +msgid "No tasks on your tasklist matching all the given conditions!" +msgstr "" +"Nenhuma das tarefas, em sua lista de tarefas, é compatível com as condições " +"informadas." + +#: src/modules/tasklist/cog.py:803 +#, possible-python-brace-format +msgctxt "cmd:tasks_remove|resp:success" +msgid "{tick} Deleted task `{label}`" +msgid_plural "{tick} Deleted `{count}` tasks from your tasklist." +msgstr[0] "{tick} Tarefa apagada ˋ{label}ˋ" +msgstr[1] "{tick} Apaguei ˋ{count}ˋ tarefas da sua lista de tarefas." +msgstr[2] "{tick} Apaguei ˋ{count}ˋ tarefas da sua lista de tarefas." + +#: src/modules/tasklist/cog.py:821 +msgctxt "cmd:tasks_tick" +msgid "tick" +msgstr "ticar" + +#: src/modules/tasklist/cog.py:822 +msgctxt "cmd:tasks_tick|desc" +msgid "Mark the given tasks as completed." +msgstr "Marca as tarefas como completadas." + +#: src/modules/tasklist/cog.py:825 +msgctxt "cmd:tasks_tick|param:taskidstr" +msgid "tasks" +msgstr "tarefas" + +#: src/modules/tasklist/cog.py:826 +msgctxt "cmd:tasks_tick|param:cascade" +msgid "cascade" +msgstr "cascata" + +#: src/modules/tasklist/cog.py:831 +msgctxt "cmd:tasks_tick|param:taskidstr|desc" +msgid "" +"List of task numbers or ranges to tick (e.g. 1, 2, 5-7, 8.1-3, 9-) or '-' to" +" tick all." +msgstr "" +"Lista de tarefas, ou intervalo de tarefas, a ticar (ex. 1, 2, 5-7, 8.1-3, " +"9-), ou '-' para ticar todas." + +#: src/modules/tasklist/cog.py:835 +msgctxt "cmd:tasks_tick|param:cascade|desc" +msgid "Whether to also mark all subtasks as complete." +msgstr "Se deverá marcar também as sub-tarefas como completadas." + +#: src/modules/tasklist/cog.py:879 +#, possible-python-brace-format +msgctxt "cmd:tasks_tick|resp:success" +msgid "{tick} Marked `{label}` as complete." +msgid_plural "{tick} Marked `{count}` tasks as complete." +msgstr[0] "{tick} Marquei ˋ{label}ˋ como completada." +msgstr[1] "{tick} Marquei ˋ{count}ˋ tarefas como completadas." +msgstr[2] "{tick} Marquei ˋ{count}ˋ tarefas como completadas." + +#: src/modules/tasklist/cog.py:897 +msgctxt "cmd:tasks_untick" +msgid "untick" +msgstr "des-ticar" + +#: src/modules/tasklist/cog.py:898 +msgctxt "cmd:tasks_untick|desc" +msgid "Mark the given tasks as incomplete." +msgstr "Marca a tarefa indicada como incompleta." + +#: src/modules/tasklist/cog.py:901 +msgctxt "cmd:tasks_untick|param:taskidstr" +msgid "taskids" +msgstr "identificador da tarefa" + +#: src/modules/tasklist/cog.py:902 +msgctxt "cmd:tasks_untick|param:cascade" +msgid "cascade" +msgstr "cascata" + +#: src/modules/tasklist/cog.py:907 +msgctxt "cmd:tasks_untick|param:taskidstr|desc" +msgid "" +"List of task numbers or ranges to untick (e.g. 1, 2, 5-7, 8.1-3, 9-) or '-' " +"to untick all." +msgstr "" +"Lista dos números das tarefas, ou intervalo, para des-ticar (ex. 1, 2, 5-7, " +"8.1-3, 9-), ou '-' para des-ticar todos." + +#: src/modules/tasklist/cog.py:911 +msgctxt "cmd:tasks_untick|param:cascade|desc" +msgid "Whether to also mark all subtasks as incomplete." +msgstr "Se deverá marcar também as sub-tarefas como incompletas." + +#: src/modules/tasklist/cog.py:952 +#, possible-python-brace-format +msgctxt "cmd:tasks_untick|resp:success" +msgid "{tick} Marked `{label}` as incomplete." +msgid_plural "{tick} Marked `{count}` tasks as incomplete." +msgstr[0] "{tick} Marquei ˋ{label}ˋ como incompleta." +msgstr[1] "{tick} Marquei ˋ{count}ˋ tarefas como incompletas." +msgstr[2] "{tick} Marquei ˋ{count}ˋ tarefas como incompletas." + +#: src/modules/tasklist/cog.py:976 +msgctxt "cmd:configure_tasklist" +msgid "tasklist" +msgstr "lista_de_tarefas" + +#: src/modules/tasklist/cog.py:977 +msgctxt "cmd:configure_tasklist|desc" +msgid "Tasklist configuration panel" +msgstr "Painel de Configuração da Lista de Tarefas" + +#: src/modules/tasklist/cog.py:980 +msgctxt "cmd:configure_tasklist|param:reward" +msgid "reward" +msgstr "recompensa" + +#: src/modules/tasklist/cog.py:981 +msgctxt "cmd:configure_tasklist|param:reward_limit" +msgid "reward_limit" +msgstr "limite_de_recompensas" + +#: src/modules/tasklist/cog.py:1017 +#, possible-python-brace-format +msgctxt "cmd:configure_tasklist|resp:success|desc" +msgid "" +"Members will now be rewarded {coin}**{amount}** for each task they complete " +"up to a maximum of `{limit}` tasks per 24h." +msgstr "" +"Os membros serão recompensados com {coin}**{amount}** por cada tarefa " +"completada por eles, até um máximo de ˋ{limit}ˋ tarefas por 24h." + +#: src/modules/tasklist/tasklist.py:267 +#, possible-python-brace-format +msgctxt "tasklist|parse:multi-range|error:parents_match" +msgid "Parents don't match in range `{range}`" +msgstr "Tarefas-mãe não coincidem no intervalo ˋ{range}ˋ" + +#: src/modules/tasklist/tasklist.py:289 +#, possible-python-brace-format +msgctxt "tasklist|parse:multi-range|error:parse" +msgid "Could not parse `{range}` as a task number or range." +msgstr "Não pude analisar ˋ{range}ˋ como um número ou intervalo." + +#: src/modules/tasklist/tasklist.py:320 +#, possible-python-brace-format +msgctxt "modal:tasklist_bulk_editor|error:parse_task" +msgid "" +"Malformed taskline!\n" +"`{input}`" +msgstr "" +"Linha de tarefas mal formatada.\n" +"ˋ{input}ˋ" + +#: src/modules/tasklist/tasklist.py:332 +msgctxt "modal:tasklist_bulk_editor|error:task_too_long" +msgid "Please keep your tasks under 100 characters!" +msgstr "Por favor, mantenha suas tarefas com menos de 100 caracteres!" + +#: src/modules/tasklist/ui.py:39 +msgctxt "ui:tasklist_caller|button:tasklist|label" +msgid "Open Tasklist" +msgstr "Abrir Lista de Tarefas" + +#: src/modules/tasklist/ui.py:57 +msgctxt "modal:tasklist_single_editor|field:task|label" +msgid "Task content" +msgstr "Conteúdo da tarefa" + +#: src/modules/tasklist/ui.py:69 +msgctxt "modal:tasklist_single_editor|field:parent|label" +msgid "Parent Task" +msgstr "Tarefa-Mãe" + +#: src/modules/tasklist/ui.py:73 +msgctxt "modal:tasklist_single_editor|field:parent|placeholder" +msgid "Enter a task number, e.g. 2.1" +msgstr "Digite o número da tarefa, ex 2.1" + +#: src/modules/tasklist/ui.py:104 +msgctxt "modal:tasklist_bulk_editor|field:tasklist|label" +msgid "Tasklist" +msgstr "Lista de Tarefas" + +#: src/modules/tasklist/ui.py:108 +msgctxt "modal:tasklist_bulk_editor|field:tasklist|placeholder" +msgid "" +"- [ ] This is task 1, unfinished.\n" +"- [x] This is task 2, finished.\n" +" - [ ] This is subtask 2.1." +msgstr "" +"- [ ] Esta é a tarefa 1.0, não finalizada.\n" +"- [x] Esta é a tarefa 2.0, finalizada.\n" +" - [ ] Esta é a sub-tarefa 2.1." + +#: src/modules/tasklist/ui.py:130 +msgctxt "modal:tasklist_bulk_editor" +msgid "Tasklist Editor" +msgstr "Editor da Lista de Tarefas" + +#: src/modules/tasklist/ui.py:188 +msgctxt "ui:tasklist|menu:main|mode:toggle|placeholder" +msgid "Select to Toggle" +msgstr "Selecione para Alternar" + +#: src/modules/tasklist/ui.py:192 +#, possible-python-brace-format +msgctxt "ui:tasklist|menu:sub|mode:toggle|placeholder" +msgid "Toggle from {label}.*" +msgstr "Alternar de {label}.*" + +#: src/modules/tasklist/ui.py:198 +msgctxt "ui:tasklist|menu:main|mode:edit|placeholder" +msgid "Select to Edit" +msgstr "Selecione para Editar" + +#: src/modules/tasklist/ui.py:202 +#, possible-python-brace-format +msgctxt "ui:tasklist|menu:sub|mode:edit|placeholder" +msgid "Edit from {label}.*" +msgstr "Editar de {label}.*" + +#: src/modules/tasklist/ui.py:208 +msgctxt "ui:tasklist|menu:main|mode:delete|placeholder" +msgid "Select to Delete" +msgstr "Selecione para Deletar" + +#: src/modules/tasklist/ui.py:212 +#, possible-python-brace-format +msgctxt "ui:tasklist|menu:sub|mode:delete|placeholder" +msgid "Delete from {label}.*" +msgstr "Apagar de {label}.*" + +#: src/modules/tasklist/ui.py:409 +#, possible-python-brace-format +msgctxt "ui:tasklist_single_editor|field:parent|error:parse_id" +msgid "" +"Could not find the given parent task number `{input}` in your tasklist." +msgstr "" +"Não pude encontrar o número ˋ{input}ˋ da tarefa-mãe informado na sua lista " +"de tarefas." + +#: src/modules/tasklist/ui.py:423 +#, possible-python-brace-format +msgctxt "ui:tasklist_single_editor|field:parent|error:multiple_matching" +msgid "" +"Multiple tasks matching given parent task `{input}`. Please use a task " +"number instead!" +msgstr "" +"Multiplas tarefas coincidem com a tarefa-mãe ˋ{input}ˋ. Por favor, use o " +"número de tarefa." + +#: src/modules/tasklist/ui.py:430 +#, possible-python-brace-format +msgctxt "ui:tasklist_single_editor|field:parent|error:no_matching" +msgid "No tasks matching given parent task `{input}`." +msgstr "Não há tarefas coincidindo com a Tarefa-Mãe ˋ{input}ˋ." + +#: src/modules/tasklist/ui.py:501 +msgctxt "ui:tasklist|menu:edit|modal:title" +msgid "Edit task" +msgstr "Editar tarefa" + +#: src/modules/tasklist/ui.py:596 +msgctxt "ui:tasklist_single_editor|title" +msgid "Add task" +msgstr "Adicionar Tarefa" + +#: src/modules/tasklist/ui.py:629 +msgctxt "ui:tasklist|button:edit_mode|label" +msgid "Edit" +msgstr "Editar" + +#: src/modules/tasklist/ui.py:645 +msgctxt "ui:tasklist|button:delete_mode|label" +msgid "Delete" +msgstr "Deletar" + +#: src/modules/tasklist/ui.py:661 +msgctxt "ui:tasklist|button:toggle_mode|label" +msgid "Toggle" +msgstr "Alternar" + +#: src/modules/tasklist/ui.py:678 +msgctxt "ui:tasklist|button:edit_bulk|error:too_long" +msgid "" +"Your tasklist is too long to be edited in a Discord text input! Use the save" +" button and {cmds[tasks upload]} instead." +msgstr "" +"Sua lista de tarefas é muito longa para ser editada por uma entrada de texto" +" do Discord! Use o botão salvar e {cmds[tasks upload]} pra isso." + +#: src/modules/tasklist/ui.py:692 +msgctxt "ui:tasklist|button:edit_bulk|label" +msgid "Bulk Edit" +msgstr "Edição em Escala" + +#: src/modules/tasklist/ui.py:705 +msgctxt "ui:tasklist|button:clear|label" +msgid "Clear Tasklist" +msgstr "Apagar Lista de Tarefas" + +#: src/modules/tasklist/ui.py:724 +#, possible-python-brace-format +msgctxt "ui:tasklist|button:save|dm:contents" +msgid "Your tasklist as of {now} is attached. Click here to jump back: {jump}" +msgstr "" +"Sua lista de tarefas como em {now}, foi anexada. Clique aqui para retornar: " +"{jump}" + +#: src/modules/tasklist/ui.py:737 +msgctxt "ui:tasklist|button:save|error:dms" +msgid "Could not DM you! Do you have me blocked? Tasklist attached below." +msgstr "" +"Não pude enviar mensagem direta a você! Você me bloqueou? Anexei a lista de " +"tarefas aqui abaixo." + +#: src/modules/tasklist/ui.py:782 +msgctxt "ui:tasklist|error:wrong_user" +msgid "This is not your tasklist!" +msgstr "Esta não é sua lista de tarefas!" + +#: src/modules/tasklist/ui.py:824 +#, possible-python-brace-format +msgctxt "ui:tasklist|embed|author" +msgid "{name}'s tasklist ({completed}/{total} complete)" +msgstr "Lista de Tarefas {name}ˋs ({completed}/{total} completos) " + +#: src/modules/tasklist/ui.py:846 +msgctxt "ui:tasklist|embed|description" +msgid "" +"**You have no tasks on your tasklist!**\n" +"Add a task with {cmds[tasks new]}, or by pressing the {new_button} button below." +msgstr "" +"**Você não tem tarefas na sua lista de tarefas!**\n" +"Adicione uma tarefa com {cmds[tasks new]}, ou clicando no {new_button} botão abaixo." + +#: src/modules/tasklist/settings.py:33 +msgctxt "guildset:task_reward" +msgid "task_reward" +msgstr "recompensa_tarefas" + +#: src/modules/tasklist/settings.py:36 +msgctxt "guildset:task_reward|desc" +msgid "Number of LionCoins given for each completed task." +msgstr "Número de LionCoins dadas por cada tarefa completada." + +#: src/modules/tasklist/settings.py:40 +msgctxt "guildset:task_reward|long_desc" +msgid "" +"The number of coins members will be rewarded each time they complete a task " +"on their tasklist." +msgstr "" +"O número de moedas que os membros serão recompensados a cada vez que eles " +"completarem uma tarefa da sua lista." + +#: src/modules/tasklist/settings.py:44 +msgctxt "guildset:task_reward|accepts" +msgid "The number of LionCoins to reward per task." +msgstr "O número de LionCoins a recompensar por tarefa." + +#: src/modules/tasklist/settings.py:56 +#, possible-python-brace-format +msgctxt "guildset:task_reward|response" +msgid "" +"Members will now be rewarded {coin}**{amount}** for each completed task." +msgstr "" +"Os membros serão recompensados {coin}**{amount}** por cada tarefa " +"completada." + +#: src/modules/tasklist/settings.py:65 +#, possible-python-brace-format +msgctxt "guildset:task_reward|formatted" +msgid "{coin}**{amount}** per task." +msgstr "{coin}**{amount}** por tarefa." + +#: src/modules/tasklist/settings.py:73 +msgctxt "guildset:task_reward_limit" +msgid "task_reward_limit" +msgstr "Limite_recompensa_tarefas" + +#: src/modules/tasklist/settings.py:76 +msgctxt "guildset:task_reward_limit|desc" +msgid "Maximum number of task rewards given per 24h." +msgstr "Número máximo de recompensa por tarefas dadas em 24h." + +#: src/modules/tasklist/settings.py:80 +msgctxt "guildset:task_reward_limit|long_desc" +msgid "" +"Maximum number of times in each 24h period that members will be rewarded for" +" completing a task." +msgstr "" +"Número máximo de vezes, em 24h de intervalo, que membros serão recompensados" +" por completar uma tarefa." + +#: src/modules/tasklist/settings.py:85 +msgctxt "guildset:task_reward_limit|accepts" +msgid "The maximum number of tasks to reward LC for per 24h." +msgstr "O número máximo de tarefas a recompensar com LionCoins a cada 24h." + +#: src/modules/tasklist/settings.py:97 +#, possible-python-brace-format +msgctxt "guildset:task_reward_limit|response" +msgid "" +"Members will now be rewarded for task completion at most **{amount}** times " +"per 24h." +msgstr "" +"Os membros irão ser recompensados por tarefas completadas até **{amount}** " +"vezes a cada 24h." + +#: src/modules/tasklist/settings.py:106 +#, possible-python-brace-format +msgctxt "guildset:task_reward_limit|formatted" +msgid "`{number}` per 24 hours." +msgstr "ˋ{number}ˋ a cada 24 horas." + +#: src/modules/tasklist/settings.py:113 +msgctxt "guildset:tasklist_channels" +msgid "tasklist_channels" +msgstr "canal_lista_de_tarefas" + +#: src/modules/tasklist/settings.py:116 +msgctxt "guildset:tasklist_channels|desc" +msgid "Channels in which to publicly display member tasklists." +msgstr "Canal em que será publicado o mostrador de tarefas dos membros." + +#: src/modules/tasklist/settings.py:120 +#, possible-python-brace-format +msgctxt "guildset:tasklist_channels|long_desc" +msgid "" +"A member's tasklist (from {cmds[tasklist]}) is usually only visible to the " +"member themselves. If set, tasklists opened in `tasklist_channels` will be " +"visible to all members, and the interface will have a much longer expiry " +"period. If a category is provided, this will apply to all channels under the" +" category." +msgstr "" +"O painel da Lista de Tarefas (de {cmds[tasklist]}) é normalmente mostrado " +"somente ao membro. Se configurada esta opção, no ˋcanal_lista_de_tarefasˋ " +"será publicada sua lista visível a todos os outros membros, e o tempo de " +"interação com o painel será muito mais longo também. Se for informada uma " +"categoria de canais, todos os canais dentro desta categoria estarão com " +"estas características." + +#: src/modules/tasklist/settings.py:127 +msgctxt "guildset:tasklist_channels|accepts" +msgid "Comma separated list of tasklist channel names or ids." +msgstr "Nome ou IDˋs dos canais de Lista de Tarefas, separados por vírgula. " + +#: src/modules/tasklist/settings.py:144 +#, possible-python-brace-format +msgctxt "guildset:tasklist_channels|set_response|set" +msgid "" +"Tasklists will now be publicly displayed in the following channels: " +"{channels}" +msgstr "" +"A lista de tarefas, estará agora, visível publicamente nos seguintes canais:" +" {channels}" + +#: src/modules/tasklist/settings.py:149 +msgctxt "guildset:tasklist_channels|set_response|unset" +msgid "Member tasklists will never be publicly displayed." +msgstr "A lista de tarefas dos membros não irá ficar visíveis publicamente." + +#: src/modules/tasklist/settings.py:158 +msgctxt "guildset:tasklist_channels|set_using" +msgid "Channel selector below." +msgstr "Selecione canal abaixo." + +#: src/modules/tasklist/settings.py:289 +msgctxt "ui:tasklist_config|button:close|label" +msgid "Close" +msgstr "Fechar" + +#: src/modules/tasklist/settings.py:290 +msgctxt "ui:tasklist_config|button:reset|label" +msgid "Reset" +msgstr "Resetar" + +#: src/modules/tasklist/settings.py:293 +msgctxt "ui:tasklist_config|menu:channels|placeholder" +msgid "Set Tasklist Channels" +msgstr "Configurar Canal da Lista de Tarefas" + +#: src/modules/tasklist/settings.py:311 +msgctxt "ui:tasklist_config|embed|title" +msgid "Tasklist Configuration Panel" +msgstr "Painel de Configuração da Lista de Tarefas" + +#: src/modules/tasklist/settings.py:320 +msgctxt "dash:tasklist|name" +msgid "Tasklist Configuration ({commands[configure tasklist]})" +msgstr "Configuração da Lista de Tarefas ({commands[configure tasklist]})" + +#: src/modules/tasklist/settings.py:323 +msgctxt "dash:tasklist|dropdown|placeholder" +msgid "Tasklist Options Panel" +msgstr "Painel de Opções da Lista de Tarefas" diff --git a/locales/pt_BR/LC_MESSAGES/test.po b/locales/pt_BR/LC_MESSAGES/test.po new file mode 100644 index 00000000..ff41316b --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/test.po @@ -0,0 +1,86 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/test/test.py:59 src/modules/test/test.py:66 +msgid "test" +msgstr "teste" + +#: src/modules/test/test.py:67 +msgid "Test" +msgstr "Teste" + +#: src/modules/test/test.py:74 +msgid "editor" +msgstr "editor" + +#: src/modules/test/test.py:75 +msgid "Test message editor" +msgstr "Teste do editor de mensagem" + +#: src/modules/test/test.py:101 +msgid "test_ephemeral" +msgstr "teste_provisório" + +#: src/modules/test/test.py:102 +msgid "Test ephemeral delete and edit" +msgstr "Apagar e editar Teste Provisório" + +#: src/modules/test/test.py:114 +msgid "colours" +msgstr "cores" + +#: src/modules/test/test.py:115 +msgid "Test Ansi colours" +msgstr "Teste cores Ansi" + +#: src/modules/test/test.py:135 +msgid "fail" +msgstr "falha" + +#: src/modules/test/test.py:143 +msgid "failui" +msgstr "falha" + +#: src/modules/test/test.py:150 +msgid "pager" +msgstr "pager" + +#: src/modules/test/test.py:178 +msgid "pager2" +msgstr "pager2" + +#: src/modules/test/test.py:209 +msgid "prettyusers" +msgstr "usuáriosfofos" + +#: src/modules/test/test.py:259 +msgid "dmview" +msgstr "ver_md" + +#: src/modules/test/test.py:270 +msgid "multiview" +msgstr "multivisao" + +#: src/modules/test/test.py:287 +msgid "stats-card" +msgstr "stats-cartões" diff --git a/locales/pt_BR/LC_MESSAGES/text-tracker.po b/locales/pt_BR/LC_MESSAGES/text-tracker.po new file mode 100644 index 00000000..992c667f --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/text-tracker.po @@ -0,0 +1,269 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/tracking/text/cog.py:254 +msgctxt "cmd:configure_message_exp" +msgid "message_exp" +msgstr "exp_message" + +#: src/tracking/text/cog.py:257 +msgctxt "cmd:configure_message_exp|desc" +msgid "Configure Message Tracking & Experience" +msgstr "Configurar Contabilizador de Mensagens e Experiência" + +#: src/tracking/text/cog.py:320 +msgctxt "cmd:leo_configure_exp_rates" +msgid "experience_rates" +msgstr "taxas_experiência" + +#: src/tracking/text/cog.py:323 +msgctxt "cmd:leo_configure_exp_rates|desc" +msgid "Global experience rate configuration" +msgstr "Configuração da Taxa global de experiência" + +#: src/tracking/text/ui.py:45 +msgctxt "ui:text_tracker_config|menu:untracked_channels|placeholder" +msgid "Select Untracked Channels" +msgstr "Selecione Canais não Contabilizados" + +#: src/tracking/text/ui.py:52 +msgctxt "ui:text_tracker_config|embed|title" +msgid "Message Tracking Configuration Panel" +msgstr "Painel de Configuração do Contabilizador de Mensagens" + +#: src/tracking/text/ui.py:89 +msgctxt "dash:text_tracking|title" +msgid "Message XP configuration ({commands[configure message_exp]})" +msgstr "Configuração de EXP em Mensagens ({commands[configure message_exp]})" + +#: src/tracking/text/ui.py:93 +msgctxt "dash:text_tracking|dropdown|placeholder" +msgid "Message XP Panel" +msgstr "Painel de EXP Mensagens" + +#: src/tracking/text/settings.py:33 +msgctxt "guildset:xp_per_period" +msgid "xp_per_5min" +msgstr "exp_por_5min" + +#: src/tracking/text/settings.py:36 +msgctxt "guildset:xp_per_period|desc" +msgid "" +"How much XP members will be given every 5 minute period they are active." +msgstr "" +"Quantidade de EXP que os membros receberão a cada 5 min que eles estiverem " +"ativos." + +#: src/tracking/text/settings.py:40 +msgctxt "guildset:xp_per_period|long_desc" +msgid "" +"Amount of message XP to give members for each 5 minute period in which they " +"are active (send a message). Note that this XP is only given *once* per " +"period." +msgstr "" +"Quantidade de EXP em mensagens dado para cada 5 minutos em que os membros " +"estiverem ativos (enviando mensagem). Observe que EXP somente é dada *uma " +"vez* cada período. " + +#: src/tracking/text/settings.py:45 +msgctxt "guildset:xp_per_period|accepts" +msgid "Number of message XP to reward per 5 minute active period." +msgstr "" +"Número de EXP em mensagens a recompensar por cada 5 min de atividade no " +"período." + +#: src/tracking/text/settings.py:57 +#, possible-python-brace-format +msgctxt "guildset:xp_per_period|set_response" +msgid "" +"For every **5** minutes they are active (i.e. in which they send a message)," +" members will now be given **{amount}** XP." +msgstr "" +"Para todos 5min que eles estiverem ativos (em que ele tenha enviado " +"mensagens), os membros receberão **{amount}**EXP." + +#: src/tracking/text/settings.py:65 +msgctxt "guildset:word_xp" +msgid "xp_per_100words" +msgstr "exp_por_100palavras" + +#: src/tracking/text/settings.py:68 +msgctxt "guildset:word_xp|desc" +msgid "How much XP members will be given per hundred words they write." +msgstr "" +"Quanto os membros receberão em EXP para cada centena de palavras escritas." + +#: src/tracking/text/settings.py:72 +msgctxt "guildset:word_xp|long_desc" +msgid "" +"Amount of message XP to be given (additionally to the XP per period) for " +"each hundred words. Useful for rewarding communication." +msgstr "" +"Quantidade de EXP em mensagem a ser dado (adicionalmente ao EXP por período)" +" por cada cem palavras. Útil para incentivar a interação dos membros através" +" de recompensas. " + +#: src/tracking/text/settings.py:77 +msgctxt "guildset:word_xp|accepts" +msgid "Number of XP to reward per hundred words sent." +msgstr "Número de EXP a recompensar por centena de palavras enviadas." + +#: src/tracking/text/settings.py:89 +#, possible-python-brace-format +msgctxt "guildset:word_xp|set_response" +msgid "" +"For every **100** words they send, members will now be rewarded an " +"additional **{amount}** XP." +msgstr "" +"Para cada **100** palavras enviadas, os membros agora receberão um adicional" +" de **{amount}** EXP." + +#: src/tracking/text/settings.py:95 +msgctxt "guildset:untracked_text_channels" +msgid "untracked_text_channels" +msgstr "canais_texto_não_contabilizados" + +#: src/tracking/text/settings.py:98 +msgctxt "guildset:untracked_text_channels|desc" +msgid "Channels in which Message XP will not be given." +msgstr "Canais em que não será dado EXP por Mensagens." + +#: src/tracking/text/settings.py:102 +msgctxt "guildset:untracked_text_channels|long_desc" +msgid "" +"Messages sent in these channels will not count towards a member's message " +"XP. If a category is selected, then all channels under the category will " +"also be untracked." +msgstr "" +"Mensagens enviadas nestes canais não irão contar para acumular EXP em " +"Mensagens. Se uma categoria for selecionada, então todos os canais abaixo " +"desta categoria, também serão não-contabilizáveis." + +#: src/tracking/text/settings.py:107 +msgctxt "guildset:untracked_text_channels|accepts" +msgid "Comma separated list of untracked text channel names or ids." +msgstr "" +"Lista de nomes, ou IDˋs, dos canais em que as mensagens são não-" +"contabilizáveis, separados por vírgula." + +#: src/tracking/text/settings.py:111 +msgctxt "guildset:untracked_text_channels|notset" +msgid "Not Set (all text channels will be tracked.)" +msgstr "Não configurado (todos os canais serão contabilizáveis)." + +#: src/tracking/text/settings.py:128 +#, possible-python-brace-format +msgctxt "guildset:untracked_text_channels|set_response|set" +msgid "" +"Messages in or under the following channels will be ignored: {channels}" +msgstr "" +"Mensagens nestes seguintes canais, serão ignoradas da contagem: {channels} " + +#: src/tracking/text/settings.py:133 +msgctxt "guildset:untracked_text_channels|set_response|notset" +msgid "Message XP will now be tracked in every channel." +msgstr "EXP em Mensagens serão agora acumuladas em todos os canais." + +#: src/tracking/text/settings.py:142 +msgctxt "guildset:untracked_text_channels|set_using" +msgid "Channel selector below" +msgstr "Seletor de canais abaixo" + +#: src/tracking/text/settings.py:173 +msgctxt "botset:xp_per_period" +msgid "xp_per_5min" +msgstr "exp_por_5min" + +#: src/tracking/text/settings.py:176 +msgctxt "botset:xp_per_period|desc" +msgid "" +"How much global XP members will be given every 5 minute period they are " +"active." +msgstr "" +"Quanto de EXP Global os membros receberão por cada período de 5 minutos que " +"estiverem ativos. " + +#: src/tracking/text/settings.py:180 +msgctxt "botset:xp_per_period|long_desc" +msgid "" +"Amount of global message XP to give members for each 5 minute period in " +"which they are active (send a message). Note that this XP is only given " +"*once* per period." +msgstr "" +"Quantidade de EXP Global de Mensagens a ser dada aos membros por cada " +"período de 5 minutos em que eles estiverem ativos (enviando mensagens). " +"Observe que será dado apenas *uma vez* a cada período." + +#: src/tracking/text/settings.py:186 +msgctxt "botset:xp_per_period|accepts" +msgid "Number of message XP to reward per 5 minute active period." +msgstr "" +"Número de EXP em Mensagens a recompensar por cada período de 5 minutos de " +"atividade. " + +#: src/tracking/text/settings.py:198 +#, possible-python-brace-format +msgctxt "leoset:xp_per_period|set_response" +msgid "" +"For every **5** minutes they are active (i.e. in which they send a message)," +" all users will now be given **{amount}** global XP." +msgstr "" +"Para cada **5** minutos de atividade (em que eles estiverem enviando " +"mensagens), todos os usuários receberão **{amount}** de EXP Global." + +#: src/tracking/text/settings.py:206 +msgctxt "botset:word_xp" +msgid "xp_per_100words" +msgstr "exp_por_100palavras" + +#: src/tracking/text/settings.py:209 +msgctxt "botset:word_xp|desc" +msgid "How much global XP members will be given per hundred words they write." +msgstr "" +"Quantidade de EXP Global que os membros receberão por centena de palavras " +"que escreverem." + +#: src/tracking/text/settings.py:213 +msgctxt "botset:word_xp|long_desc" +msgid "" +"Amount of global message XP to be given (additionally to the XP per period) " +"for each hundred words. Useful for rewarding communication." +msgstr "" +"Quantidade de EXP em mensagem a ser dado (adicionalmente ao EXP por período)" +" por cada cem palavras. Útil para incentivar a interação dos membros através" +" de recompensas. " + +#: src/tracking/text/settings.py:218 +msgctxt "botset:word_xp|accepts" +msgid "Number of XP to reward per hundred words sent." +msgstr "Número de EXP a recompensar por cada centena de palavras enviadas." + +#: src/tracking/text/settings.py:230 +#, possible-python-brace-format +msgctxt "leoset:word_xp|set_response" +msgid "" +"For every **100** words they send, users will now be rewarded an additional " +"**{amount}** global XP." +msgstr "" +"A cada **100** palavras que eles enviarem, os membros serão recompensados " +"com um adicional de **{amount}** de EXP Global." diff --git a/locales/pt_BR/LC_MESSAGES/timer-gui.po b/locales/pt_BR/LC_MESSAGES/timer-gui.po new file mode 100644 index 00000000..ce02cd03 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/timer-gui.po @@ -0,0 +1,37 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/gui/cards/timer.py:73 +msgctxt "skin:timer|field:date_text" +msgid "Use /now to show what you are working on!" +msgstr "Use /now para mostrar a descrição do que você está fazendo!" + +#: src/gui/cards/timer.py:89 +msgctxt "skin:timer|stage:focus|field:stage_text" +msgid "FOCUS" +msgstr "FOCO" + +#: src/gui/cards/timer.py:103 +msgctxt "skin:timer|stage:break|field:stage_text" +msgid "BREAK" +msgstr "PAUSA" diff --git a/locales/pt_BR/LC_MESSAGES/user_config.po b/locales/pt_BR/LC_MESSAGES/user_config.po new file mode 100644 index 00000000..872ea592 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/user_config.po @@ -0,0 +1,114 @@ +# 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. +# +# Translators: +# Interitio, 2023 +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/user_config/cog.py:38 +msgctxt "userset:timezone" +msgid "timezone" +msgstr "fuso horário" + +#: src/modules/user_config/cog.py:41 +msgctxt "userset:timezone|desc" +msgid "Timezone in which to display statistics." +msgstr "Fuso horário em que serão exibidas as estatísticas." + +#: src/modules/user_config/cog.py:45 +msgctxt "userset:timezone|long_desc" +msgid "" +"All personal time-related features of StudyLion will use this timezone for " +"you, including personal statistics. Note that leaderboards will still be " +"shown in the server's own timezone." +msgstr "" +"Todas as funcionalidades do StudyLion, para você, relacionadas ao horário, " +"usarão este fuso. Incluindo suas estatísticas pessoais. Note que os " +"rankings de classificação ainda serão exibidos no fuso horário padrão do " +"servidor." + +#: src/modules/user_config/cog.py:60 +#, possible-python-brace-format +msgctxt "userset:timezone|response:set" +msgid "Your personal timezone has been set to `{timezone}`." +msgstr "O seu fuso horário pessoal foi definido para `{timezone}`." + +#: src/modules/user_config/cog.py:65 +msgctxt "userset:timezone|response:unset" +msgid "" +"You have unset your timezone. Statistics will be displayed in the server " +"timezone." +msgstr "" +"Você removeu o seu fuso horário. As estatísticas serão exibidas no fuso " +"horário do servidor." + +#: src/modules/user_config/cog.py:81 +msgctxt "cmd:userconfig" +msgid "my" +msgstr "meu" + +#: src/modules/user_config/cog.py:82 +msgctxt "cmd:userconfig|desc" +msgid "User configuration commands." +msgstr "Comandos de configuração do usuário." + +#: src/modules/user_config/cog.py:89 +msgctxt "cmd:userconfig_timezone" +msgid "timezone" +msgstr "fuso_horário" + +#: src/modules/user_config/cog.py:92 +msgctxt "cmd:userconfig_timezone|desc" +msgid "" +"Set your personal timezone, used for displaying stats and setting reminders." +msgstr "" +"Defina o seu fuso horário pessoal, usado para exibir estatísticas e definir " +"lembretes." + +#: src/modules/user_config/cog.py:96 +msgctxt "cmd:userconfig_timezone|param:timezone" +msgid "timezone" +msgstr "fuso_horário" + +#: src/modules/user_config/cog.py:101 +msgctxt "cmd:userconfig_timezone|param:timezone|desc" +msgid "What timezone are you in? Try typing your country or continent." +msgstr "" +"Em que fuso horário você está? Tente digitar o nome do seu país ou " +"continente." + +#: src/modules/user_config/cog.py:117 +#, possible-python-brace-format +msgctxt "cmd:userconfig_timezone|response:set" +msgid "Your timezone is currently set to {timezone}" +msgstr "O seu fuso horário está atualmente definido como {timezone}." + +#: src/modules/user_config/cog.py:121 +msgctxt "cmd:userconfig_timezone|button:reset|label" +msgid "Reset" +msgstr "Redefinir" + +#: src/modules/user_config/cog.py:133 +#, possible-python-brace-format +msgctxt "cmd:userconfig_timezone|response:unset" +msgid "Your timezone is not set. Using the server timezone `{timezone}`." +msgstr "" +"O seu fuso horário não foi definido. Será usado o fuso horário do servidor " +"{timezone}." diff --git a/locales/pt_BR/LC_MESSAGES/utils.po b/locales/pt_BR/LC_MESSAGES/utils.po new file mode 100644 index 00000000..6de309c9 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/utils.po @@ -0,0 +1,546 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/utils/cog.py:18 +msgctxt "cmd:page" +msgid "page" +msgstr "página" + +#: src/utils/cog.py:21 +msgctxt "cmd:page|desc" +msgid "" +"Jump to a given page of the ouput of a previous command in this channel." +msgstr "" +"Comando utilizado para ir diretamente para uma determinada página de um " +"painel que esteja sendo mostrado pelo Lion neste canal." + +#: src/utils/cog.py:34 +msgctxt "cmd:page|error:no_pager" +msgid "No pager listening in this channel!" +msgstr "Não há nenhum painel sendo mostrado neste canal." + +#: src/utils/cog.py:45 +msgctxt "cmd:page_next" +msgid "next" +msgstr "próximo" + +#: src/utils/cog.py:46 +msgctxt "cmd:page_next|desc" +msgid "Jump to the next page of output." +msgstr "" +"Comando utilizado para ir para a próxima página do painel mostrado no canal." + +#: src/utils/cog.py:52 +msgctxt "cmd:page_prev" +msgid "prev" +msgstr "anterior" + +#: src/utils/cog.py:53 +msgctxt "cmd:page_prev|desc" +msgid "Jump to the previous page of output." +msgstr "" +"Comando utilizado para ir para a página anterior do painel mostrado no " +"canal." + +#: src/utils/cog.py:59 +msgctxt "cmd:page_first" +msgid "first" +msgstr "Primeira" + +#: src/utils/cog.py:60 +msgctxt "cmd:page_first|desc" +msgid "Jump to the first page of output." +msgstr "" +"Comando utilizado para ir para a primeira página do painel mostrado no " +"canal." + +#: src/utils/cog.py:66 +msgctxt "cmd:page_last" +msgid "last" +msgstr "última" + +#: src/utils/cog.py:67 +msgctxt "cmd:page_last|desc" +msgid "Jump to the last page of output." +msgstr "" +"Comando utilizado para ir para a última página do painel mostrado no canal." + +#: src/utils/cog.py:73 +msgctxt "cmd:page_select" +msgid "select" +msgstr "selecionar" + +#: src/utils/cog.py:74 +msgctxt "cmd:page_select|desc" +msgid "Select a page of the output to jump to." +msgstr "Comando utilizado para selecionar a página para ir diretamente a ela." + +#: src/utils/cog.py:77 +msgctxt "cmd:page_select|param:page" +msgid "page" +msgstr "página" + +#: src/utils/cog.py:80 +msgctxt "cmd:page_select|param:page|desc" +msgid "The page name or number to jump to." +msgstr "O nome da página ou número para ir até ela." + +#: src/utils/cog.py:86 +msgctxt "cmd:page_select|error:no_pager" +msgid "No pager listening in this channel!" +msgstr "Sem pager listado neste canal!" + +#: src/utils/cog.py:97 +msgctxt "cmd:page_select|acmpl|error:no_pager" +msgid "No active pagers in this channel!" +msgstr "Não há pagers ativos neste canal!" + +#: src/utils/transformers.py:45 +#, possible-python-brace-format +msgctxt "utils:parse_dur|error" +msgid "Cannot parse `{value}` as a duration." +msgstr "Não pude analisar ˋ{value}ˋ como uma duração." + +#: src/utils/transformers.py:71 +#, possible-python-brace-format +msgctxt "util:Duration|acmpl|error" +msgid "Cannot extract duration from \"{partial}\"" +msgstr "Não pude extrair a duração de ˋ{partial}ˋ" + +#: src/utils/lib.py:678 +msgctxt "util:parse_dur|regex:day" +msgid "(?P\\d+)\\s*(?:(d)|(day))" +msgstr "(?P\\d+)\\s*(?:(d)|(dia))" + +#: src/utils/lib.py:685 +msgctxt "util:parse_dur|regex:hour" +msgid "(?P\\d+)\\s*(?:(h)|(hour))" +msgstr "(?P\\d+)\\s*(?:(h)|(hora))" + +#: src/utils/lib.py:692 +msgctxt "util:parse_dur|regex:minute" +msgid "(?P\\d+)\\s*(?:(m)|(min))" +msgstr "(?P\\d+)\\s*(?:(m)|(min))" + +#: src/utils/lib.py:699 +msgctxt "util:parse_dur|regex:second" +msgid "(?P\\d+)\\s*(?:(s)|(sec))" +msgstr "(?P\\d+)\\s*(?:(s)|(seg))" + +#: src/utils/ui/config.py:35 +msgctxt "ui:configui|modal:edit|title" +msgid "Setting Editor" +msgstr "Configurando Editor" + +#: src/utils/ui/config.py:75 +msgctxt "ui:configui|check|not_permitted" +msgid "You have insufficient server permissions to use this UI!" +msgstr "" +"Você não tem permissões suficientes para usar esta Interface do Usuário " +"deste servidor!" + +#: src/utils/ui/config.py:153 +msgctxt "ui:configui|button:edit|label" +msgid "Edit" +msgstr "Editar" + +#: src/utils/ui/config.py:192 +msgctxt "ui:guild_config_base|button:reset|label" +msgid "Reset" +msgstr "Resetar" + +#: src/utils/ui/config.py:327 +msgctxt "ui:dashboard|error:section_too_long" +msgid "" +"Oops, the settings in this configuration section are too large, and I can " +"not display them here! Please view the settings in the linked configuration " +"panel instead." +msgstr "" +"Oops, as configurações nesta seção são muito compridas e eu não posso " +"mostrá-las aqui! Por favor, veja mais detalhes da configuração no painel " +"específico desta função." + +#. List of valid keys indicating movement to the next page +#: src/utils/ui/pagers.py:50 +msgctxt "cmd:page|pager:Pager|options:next" +msgid "n, nxt, next, forward, +" +msgstr "p, próximo, pxm, diante, +" + +#. List of valid keys indicating movement to the previous page +#: src/utils/ui/pagers.py:53 +msgctxt "cmd:page|pager:Pager|options:prev" +msgid "p, prev, back, -" +msgstr "a, ant, anterior, atrás, -" + +#. List of valid keys indicating movement to the first page +#: src/utils/ui/pagers.py:56 +msgctxt "cmd:page|pager:Pager|options:first" +msgid "f, first, one, start" +msgstr "1, prim, primeira, começo" + +#. List of valid keys indicating movement to the last page +#: src/utils/ui/pagers.py:59 +msgctxt "cmd:page|pager:Pager|options:last" +msgid "l, last, end" +msgstr "u, última, fim" + +#: src/utils/ui/pagers.py:273 +#, possible-python-brace-format +msgctxt "cmd:page|pager:Pager|error:parse" +msgid "Could not understand page specification `{value}`." +msgstr "Não pude entender a especificação da página ˋ{valor}ˋ." + +#: src/utils/ui/pagers.py:302 +#, possible-python-brace-format +msgctxt "cmd:page|acmpl|pager:Pager|choice:last" +msgid "Last: Page {page}/{total}" +msgstr "Última: Página {page}/{total}" + +#: src/utils/ui/pagers.py:307 +#, possible-python-brace-format +msgctxt "cmd:page|acmpl|pager:Pager|choice:current" +msgid "Current: Page {page}/{total}" +msgstr "Atual: Página {page}/{total}" + +#: src/utils/ui/pagers.py:319 +#, possible-python-brace-format +msgctxt "cmd:page|acmpl|pager:Pager|choice:general" +msgid "Page {page}" +msgstr "Página {page}" + +#: src/utils/ui/pagers.py:353 +#, possible-python-brace-format +msgctxt "cmd:page|acmpl|pager:Page|choice:select" +msgid "Selected: Page {page}/{total}" +msgstr "Selecionada: Página {page}/{total}" + +#: src/utils/ui/pagers.py:363 +msgctxt "cmd:page|acmpl|pager:Page|error:parse" +msgid "No matching pages!" +msgstr "Não há páginas compatíveis." + +#: src/utils/ui/msgeditor.py:75 +msgctxt "ui:msg_editor|error:empty" +msgid "Rendering failed! The message content and embed cannot both be empty." +msgstr "" +"Falha de processamento! O conteúdo da mensagem e o link da integração não " +"podem estar vazios." + +#: src/utils/ui/msgeditor.py:86 +#, possible-python-brace-format +msgctxt "ui:msg_editor|error:embed_failed" +msgid "" +"Rendering failed! Could not parse the embed.\n" +"Error: {error}" +msgstr "" +"Falha de processamento! Não consegui analisar a link integrado.\n" +"Erro: {error}" + +#: src/utils/ui/msgeditor.py:104 +#, possible-python-brace-format +msgctxt "ui:msg_editor|error:invalid_change" +msgid "" +"Rendering failed! The message was not modified.\n" +"Error: `{text}`" +msgstr "" +"Falha de processamento! A mensagem não foi modificada.\n" +"Erro: ˋ{text}ˋ" + +#: src/utils/ui/msgeditor.py:123 +msgctxt "ui:msg_editor|modal:content|field:content|label" +msgid "Message Content" +msgstr "Conteúdo da Mensagem" + +#: src/utils/ui/msgeditor.py:132 +msgctxt "ui:msg_editor|modal:content|title" +msgid "Content Editor" +msgstr "Editor de Conteúdo" + +#: src/utils/ui/msgeditor.py:150 +msgctxt "ui:msg_editor|button:edit|label" +msgid "Edit Content" +msgstr "Editar Conteúdo" + +#: src/utils/ui/msgeditor.py:162 +msgctxt "ui:msg_editor|button:add_embed|sample_embed|title" +msgid "Title Placeholder" +msgstr "Espaço para Título" + +#: src/utils/ui/msgeditor.py:163 +msgctxt "ui:msg_editor|button:add_embed|sample_embed|description" +msgid "Description Placeholder" +msgstr "Descrição do Espaço" + +#: src/utils/ui/msgeditor.py:174 +msgctxt "ui:msg_editor|button:add_embed|label" +msgid "Add Embed" +msgstr "Adicionar Integração" + +#: src/utils/ui/msgeditor.py:192 +msgctxt "ui:msg_editor|modal:body|field:content|label" +msgid "Message Content" +msgstr "Conteúdo da Mensagem" + +#: src/utils/ui/msgeditor.py:203 +msgctxt "ui:msg_editor|modal:body|field:desc|label" +msgid "Embed Description" +msgstr "Descrição da Integração" + +#: src/utils/ui/msgeditor.py:214 +msgctxt "ui:msg_editor|modal:body|field:title|label" +msgid "Embed Title" +msgstr "Título integrado" + +#: src/utils/ui/msgeditor.py:225 +msgctxt "ui:msg_editor|modal:body|field:colour|label" +msgid "Embed Colour" +msgstr "Cor em Integração" + +#: src/utils/ui/msgeditor.py:240 +msgctxt "ui:msg_editor|modal:body|title" +msgid "Message Body Editor" +msgstr "Editor de Corpo de Mensagem" + +#: src/utils/ui/msgeditor.py:265 +msgctxt "ui:msg_editor|button:body|error:invalid_colour" +msgid "" +"Invalid colour format! Please enter colours as hex codes, e.g. `#E67E22`" +msgstr "" +"Cor em formato inválido! Por favor, insira cores como códigos HEX, Ex. " +"ˋ#E67E22ˋ" + +#: src/utils/ui/msgeditor.py:285 +msgctxt "ui:msg_editor|button:body|label" +msgid "Body" +msgstr "Corpo" + +#: src/utils/ui/msgeditor.py:302 +msgctxt "ui:msg_editor|modal:author|field:name|label" +msgid "Author Name" +msgstr "Nome do Autor" + +#: src/utils/ui/msgeditor.py:313 +msgctxt "ui:msg_editor|modal:author|field:link|label" +msgid "Author URL" +msgstr "Link do Autor" + +#: src/utils/ui/msgeditor.py:323 +msgctxt "ui:msg_editor|modal:author|field:image|label" +msgid "Author Image URL" +msgstr "Link da Imagem do Autor" + +#: src/utils/ui/msgeditor.py:334 +msgctxt "ui:msg_editor|modal:author|title" +msgid "Embed Author Editor" +msgstr "Editor Integrado do Autor" + +#: src/utils/ui/msgeditor.py:360 +msgctxt "ui:msg_editor|button:author|label" +msgid "Author" +msgstr "Autor" + +#: src/utils/ui/msgeditor.py:377 +msgctxt "ui:msg_editor|modal:footer|field:text|label" +msgid "Footer Text" +msgstr "Texto de Rodapé" + +#: src/utils/ui/msgeditor.py:388 +msgctxt "ui:msg_editor|modal:footer|field:image|label" +msgid "Footer Image URL" +msgstr "Link da Image de Rodapé" + +#: src/utils/ui/msgeditor.py:398 +msgctxt "ui:msg_editor|modal:footer|field:timestamp|label" +msgid "Embed Timestamp (in ISO format)" +msgstr "Link integrado de Data/Hora (em formato ISO)" + +#: src/utils/ui/msgeditor.py:410 +msgctxt "ui:msg_editor|modal:footer|title" +msgid "Embed Footer Editor" +msgstr "Editor de Rodapé Integrado" + +#: src/utils/ui/msgeditor.py:429 +msgctxt "ui:msg_editor|button:footer|error:invalid_timestamp" +msgid "Invalid timestamp! Please enter the timestamp in ISO format." +msgstr "" +"Tempo Data/Hora inválidos! Por favor, adicione a Data/Hora em formato ISO." + +#: src/utils/ui/msgeditor.py:449 +msgctxt "ui:msg_editor|button:footer|label" +msgid "Footer" +msgstr "Rodapé" + +#: src/utils/ui/msgeditor.py:467 +msgctxt "ui:msg_editor|modal:images|field:thumb|label" +msgid "Thumbnail Image URL" +msgstr "Link de Miniatura de Imagem " + +#: src/utils/ui/msgeditor.py:477 +msgctxt "ui:msg_editor|modal:images|field:image|label" +msgid "Embed Image URL" +msgstr "Inserir Link de imagem" + +#: src/utils/ui/msgeditor.py:487 +msgctxt "ui:msg_editor|modal:images|title" +msgid "Embed images Editor" +msgstr "Editor de Imagens Integrado" + +#: src/utils/ui/msgeditor.py:517 +msgctxt "ui:msg_editor|button:images|label" +msgid "Images" +msgstr "Imagens" + +#: src/utils/ui/msgeditor.py:535 +msgctxt "ui:msg_editor|modal:add_field|field:position|label" +msgid "Field number to insert at" +msgstr "Campo de Número a inserir " + +#: src/utils/ui/msgeditor.py:545 +msgctxt "ui:msg_editor|modal:add_field|field:name|label" +msgid "Field name" +msgstr "Nome do Campo" + +#: src/utils/ui/msgeditor.py:555 +msgctxt "ui:msg_editor|modal:add_field|field:value|label" +msgid "Field value" +msgstr "Valor do Campo" + +#: src/utils/ui/msgeditor.py:565 +msgctxt "ui:msg_editor|modal:add_field|field:inline|label" +msgid "Whether the field is inline" +msgstr "Se o campo é linear" + +#: src/utils/ui/msgeditor.py:569 +msgctxt "ui:msg_editor|modal:add_field|field:inline|placeholder" +msgid "True/False" +msgstr "Verdadeiro/Falso" + +#: src/utils/ui/msgeditor.py:582 +msgctxt "ui:msg_editor|modal:add_field|title" +msgid "Add Embed Field" +msgstr "Adicionar Campo Integrado" + +#: src/utils/ui/msgeditor.py:602 +msgctxt "ui:msg_editor|modal:add_field|error:position_not_int" +msgid "The field position must be an integer!" +msgstr "O valor do campo precisa ser um valor inteiro!" + +#: src/utils/ui/msgeditor.py:621 +msgctxt "ui:msg_editor|button:add_field|label" +msgid "Add Field" +msgstr "Adicione Campo" + +#: src/utils/ui/msgeditor.py:637 +msgctxt "ui:msg_editor|format_field|name_placeholder" +msgid "-" +msgstr "-" + +#: src/utils/ui/msgeditor.py:666 +msgctxt "ui:msg_editor|modal:edit_field|field:name|label" +msgid "Field name" +msgstr "Nome do campo" + +#: src/utils/ui/msgeditor.py:677 +msgctxt "ui:msg_editor|modal:edit_field|field:value|label" +msgid "Field value" +msgstr "Valor do campo" + +#: src/utils/ui/msgeditor.py:688 +msgctxt "ui:msg_editor|modal:edit_field|field:inline|label" +msgid "Whether the field is inline" +msgstr "Se o campo é linear" + +#: src/utils/ui/msgeditor.py:692 +msgctxt "ui:msg_editor|modal:edit_field|field:inline|placeholder" +msgid "True/False" +msgstr "Verdadeiro/Falso" + +#: src/utils/ui/msgeditor.py:704 +msgctxt "ui:msg_editor|modal:edit_field|title" +msgid "Edit Embed Field" +msgstr "Editar Campo Integrado" + +#: src/utils/ui/msgeditor.py:733 +msgctxt "ui:msg_editor|menu:edit_field|placeholder" +msgid "Edit Embed Field" +msgstr "Editar Campo Integrado" + +#: src/utils/ui/msgeditor.py:772 +msgctxt "ui:msg_deleteor|menu:delete_field|placeholder" +msgid "Remove Embed Field" +msgstr "Remover Campo Integrado" + +#: src/utils/ui/msgeditor.py:808 +msgctxt "ui:msg_editor|button:save|label" +msgid "Save" +msgstr "Salvar" + +#: src/utils/ui/msgeditor.py:833 +msgctxt "ui:msg_editor|button:download|label" +msgid "Download" +msgstr "Download" + +#: src/utils/ui/msgeditor.py:852 +msgctxt "ui:msg_editor|button:undo|label" +msgid "Undo" +msgstr "Desfazer" + +#: src/utils/ui/msgeditor.py:872 +msgctxt "ui:msg_editor|button:redo|label" +msgid "Redo" +msgstr "Refazer" + +#: src/utils/ui/msgeditor.py:891 +msgctxt "ui:msg_editor|button:quit|confirm" +msgid "You have unsaved changes! Are you sure you want to quit?" +msgstr "Você tem mudanças não salvas! Tem certeza que deseja sair?" + +#: src/utils/ui/msgeditor.py:896 +msgctxt "ui:msg_editor|button:quit|confirm|button:yes" +msgid "Yes, Quit Now" +msgstr "Sim! Sair Agora." + +#: src/utils/ui/msgeditor.py:902 +msgctxt "ui:msg_editor|button:quit|confirm|button:no" +msgid "No, Go Back" +msgstr "Não, Retornar." + +#: src/utils/ui/msgeditor.py:996 +msgctxt "ui:msg_editor|timeout_warning|title" +msgid "Warning!" +msgstr "Atenção!" + +#: src/utils/ui/msgeditor.py:1000 +#, possible-python-brace-format +msgctxt "ui:msg_editor|timeout_warning|desc" +msgid "" +"This interface will time out {timestamp}. Press 'Continue' below to keep " +"editing." +msgstr "" +"Esta interface irá finalizar em {timestamp}. Para continuar editando, " +"pressione ˋContinuarˋ." + +#: src/utils/ui/msgeditor.py:1009 +msgctxt "ui:msg_editor|timeout_warning|continue" +msgid "Continue" +msgstr "Continuar" diff --git a/locales/pt_BR/LC_MESSAGES/video.po b/locales/pt_BR/LC_MESSAGES/video.po new file mode 100644 index 00000000..4edaafeb --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/video.po @@ -0,0 +1,382 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/modules/video_channels/settingui.py:57 +msgctxt "ui:video_config|menu:channels|placeholder" +msgid "Select Video Channels" +msgstr "Selecione os Canais de Vídeo" + +#: src/modules/video_channels/settingui.py:82 +msgctxt "ui:video_config|menu:exempt|placeholder" +msgid "Select Exempt Roles" +msgstr "Selecione Cargos Excepcionados" + +#: src/modules/video_channels/settingui.py:109 +msgctxt "ui:video_config|menu:video_blacklist|placeholder" +msgid "Select Blacklist Role" +msgstr "Selecione o Cargo ListaNegra" + +#: src/modules/video_channels/settingui.py:117 +msgctxt "ui:video_config|embed|title" +msgid "Video Channel Configuration Panel" +msgstr "Painel de Configuração de Canais de Video" + +#: src/modules/video_channels/settingui.py:156 +msgctxt "dash:video|title" +msgid "Video Channel Settings ({commands[configure video_channels]})" +msgstr "" +"Configuração de Canais de Vídeo ({commands[configure_video_channels]})" + +#: src/modules/video_channels/settingui.py:160 +msgctxt "dash:video|option|name" +msgid "Video Channel Panel" +msgstr "Painel de Canais de Vídeo" + +#: src/modules/video_channels/cog.py:229 +msgctxt "video_watchdog|kick_blacklisted_member|audit_reason" +msgid "Removing video blacklisted member from a video channel." +msgstr "Removendo um membro da Lista Negra dos canais de vídeo." + +#: src/modules/video_channels/cog.py:246 +msgctxt "video_watchdog|kick_blacklisted_member|notification|title" +msgid "You have been disconnected." +msgstr "Você foi desconectado." + +#: src/modules/video_channels/cog.py:250 +#, possible-python-brace-format +msgctxt "video_watchdog|kick_blacklisted_member|notification|desc" +msgid "" +"You were disconnected from the video channel {channel} because you are " +"blacklisted from video channels in **{server}**." +msgstr "" +"Você foi desconectado do canal de vídeo {channel}, pois você foi colocado na" +" lista negra dos canais de vídeo do servidor **{server}**." + +#: src/modules/video_channels/cog.py:290 +#, possible-python-brace-format +msgctxt "video_watchdog|join_task|jump_field" +msgid "[Click to jump back]({link})" +msgstr "[Clique para retornar] ({link})" + +#: src/modules/video_channels/cog.py:297 +msgctxt "video_watchdog|join_task|initial_request:title" +msgid "Please enable your video!" +msgstr "Por Favor, Ative sua câmera!" + +#: src/modules/video_channels/cog.py:301 +#, possible-python-brace-format +msgctxt "video_watchdog|join_task|initial_request:description" +msgid "" +"**You have joined the video channel {channel}!**\n" +"Please **enable your video** or **leave the channel** or you will be disconnected {timestamp} and potentially **blacklisted**." +msgstr "" +"**Você entrou em um canal de vídeo {channel}!**\n" +"Por favor, **ligue sua câmera** ou **se retire do canal**, ou você será desconectado em {timestamp} e poderá ser colocado na **Lista Negra**." + +#: src/modules/video_channels/cog.py:316 +msgctxt "video_watchdog|join_task|thanks:title" +msgid "Thanks for enabling your video!" +msgstr "Obrigado por ligar sua câmera! " + +#: src/modules/video_channels/cog.py:323 +msgctxt "video_watchdog|join_task|bye:title" +msgid "Thanks for leaving the channel promptly!" +msgstr "Obrigado por ter deixado o canal prontamente!" + +#: src/modules/video_channels/cog.py:367 +msgctxt "video_watchdog|join_task|kick_after_grace|audit_reason" +msgid "Member never enabled their video in video channel." +msgstr "Membro nunca abriu sua câmera em um canal de vídeo." + +#: src/modules/video_channels/cog.py:385 +#, possible-python-brace-format +msgctxt "video_watchdog|join_task|kick_after_grace|ticket_reason" +msgid "Failed to enable their video in time in the video channel {channel}" +msgstr "" +"Você deixou de habilitar sua câmera a tempo, no canal de vídeo {channel}." + +#: src/modules/video_channels/cog.py:403 +msgctxt "video_watchdog|join_task|kick_after_grace|warning|title" +msgid "You have received a warning!" +msgstr "Você recebeu um alerta!" + +#: src/modules/video_channels/cog.py:407 +#, possible-python-brace-format +msgctxt "video_watchdog|join_task|kick_after_grace|warning|desc" +msgid "" +"**You must enable your camera in camera-only rooms.**\n" +"You have been disconnected from the video {channel} for not enabling your camera." +msgstr "" +"**Você precisa habilitar sua câmera em canais que o uso de câmera é obrigatório!**\n" +"Você foi desconectado do canal de vídeo {channel} justamente por não ter habilitado sua câmera." + +#: src/modules/video_channels/cog.py:422 +msgctxt "video_watchdog|join_task|kick_after_grace|blacklist|title" +msgid "You have been blacklisted!" +msgstr "Você foi colocado na Lista Negra!" + +#: src/modules/video_channels/cog.py:426 +msgctxt "video_watchdog|join_task|kick_after_grace|blacklist|desc" +msgid "You have been blacklisted from the video channels in this server." +msgstr "Você foi colocado na Lista Negra dos canais de vídeo deste servidor." + +#: src/modules/video_channels/cog.py:459 +#, possible-python-brace-format +msgctxt "video_watchdog|disabled_video_kick|audit_reason" +msgid "" +"Disconnected for disabling video for more than {number} seconds in video " +"channel." +msgstr "" +"Desconectado por ter desabilitado o vídeo por mais de {numer} segundos em um" +" canal de vídeo." + +#: src/modules/video_channels/cog.py:474 +msgctxt "video_watchdog|disabled_video_kick|notification|title" +msgid "You have been disconnected." +msgstr "Você foi desconectado." + +#: src/modules/video_channels/cog.py:478 +#, possible-python-brace-format +msgctxt "video_watchdog|disabled_video_kick|notification|desc" +msgid "" +"You were disconnected from the video channel {channel} because you disabled your video.\n" +"Please keep your video on at all times, and leave the channel if you need to disable it!" +msgstr "" +"Você foi desconectado do canal de vídeo {channel} por ter desabilitado seu vídeo.\n" +"Por favor, deixe sua câmera ligada, e, caso precise desabilitar ou tampar, saia do canal. Retorne assim que for possível voltar às condições necessárias. " + +#: src/modules/video_channels/cog.py:510 +msgctxt "cmd:configure_video" +msgid "video_channels" +msgstr "canais_de_vídeo" + +#: src/modules/video_channels/cog.py:512 +msgctxt "cmd:configure_video|desc" +msgid "Configure video-only channels and blacklisting." +msgstr "Configure canais somente para vídeo, e da Lista Negra." + +#: src/modules/video_channels/settings.py:29 +msgctxt "guildset:video_channels" +msgid "video_channels" +msgstr "canais_de_vídeo" + +#: src/modules/video_channels/settings.py:32 +msgctxt "guildset:video_channels|desc" +msgid "List of voice channels and categories in which to enforce video." +msgstr "Lista de canais e/ou categorias em que a câmera deve ser obrigatória." + +#: src/modules/video_channels/settings.py:36 +msgctxt "guildset:video_channels|long_desc" +msgid "" +"Member will be required to turn on their video in these channels.\n" +"If they do not enable their video with `15` seconds of joining, they will be asked to enable it through a notification in direct messages or the `alert_channel`. If they still have not enabled it after the `video_grace_period` has passed, they will be kicked from the channel. Further, after the first offence (which is considered a warning), they will be given the `video_blacklist` role, if configured, which will stop them from joining video channels.\n" +"As usual, if a category is configured, this will apply to all voice channels under the category." +msgstr "" +"Os membros serão requisitados a ligar sua câmera nestes canais.\n" +"Caso eles não habilitem o seu vídeo dentro de 15 segundos, eles irão ser notificados por mensagem direta, ou no \"canal_de_alertasˋ. Caso, ainda assim, continue com a câmera desligada, será contado o tempo configurado em \"tempo_tolerância_câmera\" e então serão retirados do canal. Se o membro reincidir no comportamento depois da primeira vez que for retirado do canal (que é considerada como um aviso), ele será incluído na \"lista_negra_de_video\" e receberá o cargo \"listanegra_câmera\", caso configurado, o que o proibirá de entrar nos canais de vídeo.\n" +"Usualmente, se você configurar toda uma categoria, todos os canais de voz desta estarão sobre estas regras. " + +#: src/modules/video_channels/settings.py:50 +msgctxt "guildset:video_channels|accepts" +msgid "Comma separated channel ids or names." +msgstr "Nomes dos canais, ou IDˋs, separados por vírgula." + +#: src/modules/video_channels/settings.py:67 +#, possible-python-brace-format +msgctxt "guildset:video_channels|set_response:set" +msgid "" +"Members will be asked to turn on their video in the following channels: " +"{channels}" +msgstr "" +"Os membros serão orientados a ligar suas câmeras nos seguintes canais: " +"{channels}" + +#: src/modules/video_channels/settings.py:72 +msgctxt "guildset:video_channels|set_response:unset" +msgid "Members will not be asked to turn on their video in any channels." +msgstr "Os membros não serão orientados a ligar suas câmeras em nenhum canal." + +#: src/modules/video_channels/settings.py:105 +msgctxt "guildset:video_blacklist" +msgid "video_blacklist" +msgstr "listanegra_câmera" + +#: src/modules/video_channels/settings.py:108 +msgctxt "guildset:video_blacklist|desc" +msgid "Role given when members are blacklisted from video channels." +msgstr "Cargo dado a quem foi inscrito na Lista Negra dos canais de vídeo." + +#: src/modules/video_channels/settings.py:112 +msgctxt "guildset:video_blacklist|long_desc" +msgid "" +"This role will be automatically given after a member has failed to keep their video enabled in a video channel (see above).\n" +"Members who have this role will not be able to join configured video channels. The role permissions may be freely configured by server admins to place further restrictions on the offender.\n" +"The role may also be manually assigned, to the same effect.\n" +"If this role is not set, no video blacklist will occur, and members will only be kicked from the channel and warned." +msgstr "" +"O cargo será automaticamente atribuído ao membro que, repetidamente, deixar de manter a câmera ligada nos canais indicados (conforme abaixo).\n" +"Os membros que tiverem este cargo não estarão aptos a entrar nos canais de vídeo configurados como de uso obrigatório de webcam. As permissões do cargo podem ser facilmente definidas manualmente pela moderação, com o mesmo efeito.\n" +"Se o cargo não for configurado, não haverá uma proibição para reincidentes. Os membros somente irão ser kickados do canal e alertados por mensagem direta. " + +#: src/modules/video_channels/settings.py:123 +msgctxt "guildset:video_blacklist|accepts" +msgid "Blacklist role name or id." +msgstr "Nome ou ID do cargo da Lista Negra " + +#: src/modules/video_channels/settings.py:138 +#, possible-python-brace-format +msgctxt "guildset:video_blacklist|set_response:set" +msgid "Members who fail to keep their video on will be given {role}" +msgstr "" +"Os membros que deixarem de ligar sua câmera, serão atribuídos ao {role}." + +#: src/modules/video_channels/settings.py:143 +msgctxt "guildset:video_blacklist|set_response:unset" +msgid "" +"Members will no longer be automatically blacklisted from video channels." +msgstr "" +"Membros não serão automaticamente colocados na Lista Negra de salas de " +"vídeo." + +#: src/modules/video_channels/settings.py:155 +msgctxt "guildset:video_blacklist|formatted:unset" +msgid "Not Set. (Members will not be automatically blacklisted.)" +msgstr "" +"Não configurado. (Membros não serão atribuídos a um cargo de Lista Negra.)" + +#: src/modules/video_channels/settings.py:162 +msgctxt "guildset:video_durations" +msgid "video_blacklist_durations" +msgstr "câmera_listanegra_duração" + +#: src/modules/video_channels/settings.py:165 +msgctxt "guildset:video_durations|desc" +msgid "Sequence of durations for automatic video blacklists." +msgstr "" +"Sequência de reincidências para ser automáticamente listado na Lista Negra." + +#: src/modules/video_channels/settings.py:169 +msgctxt "guildset:video_durations|long_desc" +msgid "" +"When `video_blacklist` is set and members fail to turn on their video within the configured `video_grace_period`, they will be automatically blacklisted (i.e. given the `video_blacklist` role).\n" +"This setting describes *how long* the member will be blacklisted for, for each offence.\n" +"E.g. if this is set to `1d, 7d, 30d`, then on the first offence the member will be blacklisted for 1 day, on the second for 7 days, and on the third for 30 days. A subsequent offence will result in an infinite blacklist." +msgstr "" +"Quando está configurada a ˋlistanegra_câmeraˋ, e os membros deixarem de habilitar a câmera nas salas com um ˋtempo_tolerância_câmeraˋ configurado, eles serão automaticamente listados na Lista Negra (recebendo o cargo correspondente).\n" +"Esta configuração define *quanto tempo* o membro ficará na lista negra por cada infração.\n" +"Ex. Se estiver configurado ˋ1d, 7d, 30dˋ, então na primeira infração, ele ficará proibido por 1 dia, na segunda por 7 e na terceira por 30 dias. Uma quarta falta será permanente." + +#: src/modules/video_channels/settings.py:181 +msgctxt "guildset:video_durations|accepts" +msgid "Comma separated list of durations." +msgstr "Lista de duração, separada por vírgulas." + +#: src/modules/video_channels/settings.py:208 +#, possible-python-brace-format +msgctxt "guildset:video_durations|set_response:set" +msgid "Members will be automatically blacklisted for: {durations}" +msgstr "" +"Os membros serão automaticamente listados na Lista Negra por: {durations}" + +#: src/modules/video_channels/settings.py:213 +msgctxt "guildset:video_durations|set_response:unset" +msgid "Video blacklists are now always permanent." +msgstr "" +"A partir de agora, a reincidência não irá ser temporária, será permanente." + +#: src/modules/video_channels/settings.py:221 +msgctxt "guildset:video_grace_period" +msgid "video_grace_period" +msgstr "tempo_tolerância_câmera" + +#: src/modules/video_channels/settings.py:224 +msgctxt "guildset:video_grace_period|desc" +msgid "" +"How long to wait (in seconds) before kicking/blacklist members who don't " +"enable their video." +msgstr "" +"Quanto tempo esperar (em segundos) antes de kickar/proibir membros que não " +"ligarem suas câmeras." + +#: src/modules/video_channels/settings.py:228 +msgctxt "guildset:video_grace_period|long_desc" +msgid "" +"The length of time a member has to enable their video after joining a video " +"channel. After this time, if they have not enabled their video, they will be" +" kicked from the channel and potentially blacklisted from video channels." +msgstr "" +"A quantidade de tempo que um membro terá para abrir sua câmera depois de " +"entrar em um canal de vídeo. Depois deste tempo, sem que tenha habilitado, " +"ele será kickado do canal e poderá ser inscrito na Lista Negra de canais de " +"vídeo." + +#: src/modules/video_channels/settings.py:234 +msgctxt "guildset:video_grace_period|accepts" +msgid "How many seconds to wait for a member to enable video." +msgstr "Quantos segundos aguardar para um membro habilitar sua câmera." + +#: src/modules/video_channels/settings.py:248 +#, possible-python-brace-format +msgctxt "guildset:video_grace_period|set_response:set" +msgid "Members will now have **{duration}** to enable their video." +msgstr "" +"Os membros terão, a partir de agora, **{duration}** para ligar sua câmera." + +#: src/modules/video_channels/settings.py:256 +msgctxt "guildset:video_exempt" +msgid "video_exempt" +msgstr "vídeo_excepcionados" + +#: src/modules/video_channels/settings.py:259 +msgctxt "guildset:video_exempt|desc" +msgid "List of roles which are exempt from video channels." +msgstr "Lista de cargos que serão excepcionados da obrigatoriedade de vídeo " + +#: src/modules/video_channels/settings.py:263 +msgctxt "guildset:video_exempt|long_desc" +msgid "" +"Members who have **any** of these roles will not be required to enable their" +" video in the `video_channels`. This also overrides the `video_blacklist` " +"role." +msgstr "" +"Membros que tiverem **qualquer** destes cargos não serão requisitados a " +"ligar seus vídeos nos ˋcanais_de_vídeoˋ. Isto também os isenta do cargo " +"ˋlistanegra_câmeraˋ." + +#: src/modules/video_channels/settings.py:269 +msgctxt "guildset:video_exempt|accepts" +msgid "List of exempt role names or ids." +msgstr "Nome dos cargos ou IDs dos excepcionados." + +#: src/modules/video_channels/settings.py:284 +#, possible-python-brace-format +msgctxt "guildset:video_exempt|set_response:set" +msgid "The following roles will now be exempt from video channels: {roles}" +msgstr "" +"Agora, cargos a seguir serão excepcionados dos requisitos em canais de " +"vídeo: {roles}" + +#: src/modules/video_channels/settings.py:289 +msgctxt "guildset:video_exempt|set_response:unset" +msgid "No members will be exempt from video channel requirements." +msgstr "Nenhum membro será excepcionado dos requisitos de canais de vídeo." diff --git a/locales/pt_BR/LC_MESSAGES/voice-tracker.po b/locales/pt_BR/LC_MESSAGES/voice-tracker.po new file mode 100644 index 00000000..528d733c --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/voice-tracker.po @@ -0,0 +1,437 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/tracking/voice/cog.py:649 +msgctxt "cmd:now" +msgid "now" +msgstr "agora" + +#: src/tracking/voice/cog.py:652 +msgctxt "cmd:now|desc" +msgid "" +"Describe what you are working on, or see what your friends are working on!" +msgstr "Descreva em quê você se ocupando, ou veja em quê seus amigos estão!" + +#: src/tracking/voice/cog.py:656 +msgctxt "cmd:now|param:tag" +msgid "tag" +msgstr "etiqueta" + +#: src/tracking/voice/cog.py:657 +msgctxt "cmd:now|param:user" +msgid "user" +msgstr "usuário" + +#: src/tracking/voice/cog.py:658 +msgctxt "cmd:now|param:clear" +msgid "clear" +msgstr "limpar" + +#: src/tracking/voice/cog.py:663 +msgctxt "cmd:now|param:tag|desc" +msgid "Describe what you are working on in 10 characters or less!" +msgstr "Descreva em quê você está fazendo em no máximo 10 caracteres!" + +#: src/tracking/voice/cog.py:667 +msgctxt "cmd:now|param:user|desc" +msgid "Check what a friend is working on." +msgstr "Verifique o que seu amgio está fazendo." + +#: src/tracking/voice/cog.py:671 +msgctxt "cmd:now|param:clear|desc" +msgid "Unset your activity tag (or the target user's tag, for moderators)." +msgstr "" +"Retire uma etiqueta de atividade (ou a de um usuário definido -para " +"moderadores- )" + +#: src/tracking/voice/cog.py:698 +msgctxt "cmd:now|target:self|error:target_inactive" +msgid "" +"You have no running session! Join a tracked voice channel to start a " +"session." +msgstr "" +"Você não está em uma sessão! Entre em um canal de voz e comece uma sessão. " + +#: src/tracking/voice/cog.py:707 +#, possible-python-brace-format +msgctxt "cmd:now|target:other|error:target_inactive" +msgid "{mention} has no running session!" +msgstr "{mention} não está em uma sessão!" + +#: src/tracking/voice/cog.py:722 +msgctxt "cmd:now|target:self|mode:clear|success|title" +msgid "Session Tag Cleared" +msgstr "Etiqueta de sessão apagada." + +#: src/tracking/voice/cog.py:726 +msgctxt "cmd:now|target:self|mode:clear|success|desc" +msgid "Successfully unset your session tag." +msgstr "A etiqueta de sessão foi retirada com sucesso! " + +#: src/tracking/voice/cog.py:735 +msgctxt "cmd:now|target:other|mode:clear|error:perms|title" +msgid "You can't do that!" +msgstr "Você não pode fazer isto! " + +#: src/tracking/voice/cog.py:739 +msgctxt "cmd:now|target:other|mode:clear|error:perms|desc" +msgid "You need to be a moderator to set or clear someone else's session tag." +msgstr "" +"Você precisa ser um moderador para adicionar ou remover a etiqueta de sessão" +" de alguém." + +#: src/tracking/voice/cog.py:749 +msgctxt "cmd:now|target:other|mode:clear|success|title" +msgid "Session Tag Cleared!" +msgstr "Etiqueta de Sessão Apagada!" + +#: src/tracking/voice/cog.py:753 +#, possible-python-brace-format +msgctxt "cmd:now|target:other|mode:clear|success|desc" +msgid "Cleared {target}'s session tag." +msgstr "Etiquetas de sessão de {target}'s apagada." + +#: src/tracking/voice/cog.py:765 +msgctxt "cmd:now|target:self|mode:set|success|title" +msgid "Session Tag Set!" +msgstr "Etiqueta de Sessão definida!" + +#: src/tracking/voice/cog.py:769 +#, possible-python-brace-format +msgctxt "cmd:now|target:self|mode:set|success|desc" +msgid "You are now working on `{new_tag}`. Good luck!" +msgstr "Agora você está empenhado em ˋ{new_tag}ˋ. Boa sorte! " + +#: src/tracking/voice/cog.py:778 +msgctxt "cmd:now|target:other|mode:set|error:perms|title" +msgid "You can't do that!" +msgstr "Você não pode fazer isto!" + +#: src/tracking/voice/cog.py:782 +msgctxt "cmd:now|target:other|mode:set|error:perms|desc" +msgid "You need to be a moderator to set or clear someone else's session tag!" +msgstr "" +"Você precisa ser um moderador para definir ou retirar a etiqueta de sessão " +"de alguém!" + +#: src/tracking/voice/cog.py:792 +msgctxt "cmd:now|target:other|mode:set|success|title" +msgid "Session Tag Set!" +msgstr "Etiqueta de Sessão definida." + +#: src/tracking/voice/cog.py:796 +#, possible-python-brace-format +msgctxt "cmd:now|target:other|mode:set|success|desc" +msgid "Set {target}'s session tag to `{new_tag}`." +msgstr "Etiqueta de sessão de {target}'s definidas para ˋ{new_tag}ˋ." + +#: src/tracking/voice/cog.py:805 +#, possible-python-brace-format +msgctxt "cmd:now|target:self|mode:show_with_tag|desc" +msgid "You have been working on **`{tag}`** in {channel} since {time}!" +msgstr "Você estava empenhado em **ˋ{tag}ˋ** em {channel} desde {time}!" + +#: src/tracking/voice/cog.py:810 +#, possible-python-brace-format +msgctxt "cmd:now|target:self|mode:show_without_tag|desc" +msgid "" +"You have been working in {channel} since {time}!\n" +"\n" +"Use `/now ` to set what you are working on." +msgstr "" +"Você estava empenhado, em {channel}, desde {time}!\n" +"\n" +"Use `/now ` para conferir o quê você estava fazendo." + +#: src/tracking/voice/cog.py:817 +#, possible-python-brace-format +msgctxt "cmd:now|target:other|mode:show_with_tag|desc" +msgid "" +"{target} is current working in {channel}!\n" +"They have been working on **{tag}** since {time}." +msgstr "" +"{target} está empenhado em {channel}!\n" +"Eles estão empenhados em **{tag}** desde {time}." + +#: src/tracking/voice/cog.py:823 +#, possible-python-brace-format +msgctxt "cmd:now|target:other|mode:show_without_tag|desc" +msgid "{target} has been working in {channel} since {time}!" +msgstr "{target} está empenhado, em {channel}, desde {time}!" + +#: src/tracking/voice/cog.py:846 +msgctxt "cmd:configure_voice_rates" +msgid "voice_rewards" +msgstr "recompensa_de_voz" + +#: src/tracking/voice/cog.py:849 +msgctxt "cmd:configure_voice_rates|desc" +msgid "Configure Voice tracking rewards and experience" +msgstr "Configure as recompensas e atividades em canais de voz" + +#: src/tracking/voice/cog.py:906 +#, possible-python-brace-format +msgctxt "cmd:configure_voice_tracking|mode:voice|resp:success|desc" +msgid "" +"Members will now be rewarded {coin}**{base} (+ {bonus})** per hour they " +"spend (live) in a voice channel, up to a total of **{cap}** hours per server" +" day." +msgstr "" +"Os membros agora serão recompensados {coin}**{base} (+ {bonus})** por hora " +"que eles ficarem (on) em um canal de voz, até um limite de **{cap}** horas " +"por dia no servidor." + +#: src/tracking/voice/cog.py:917 +#, possible-python-brace-format +msgctxt "cmd:configure_voice_tracking|mode:study|resp:success|desc" +msgid "" +"Members will now be rewarded {coin}**{base}** per hour of study in this " +"server, with a bonus of {coin}**{bonus}** if they stream of display video, " +"up to a total of **{cap}** hours per server day." +msgstr "" +"Os membros agora serão recompensados em {coin}**{base}** por hora de " +"estudos, mais um bônus de {coin} **{bonus}** se permanecerem com o vídeo " +"ligado por até um total de **{cap}** horas por dia no servidor." + +#: src/tracking/voice/settings.py:40 +msgctxt "guildset:untracked_channels" +msgid "untracked_channels" +msgstr "canais_desconsiderados" + +#: src/tracking/voice/settings.py:43 +msgctxt "guildset:untracked_channels|desc" +msgid "Channels which will be ignored for statistics tracking." +msgstr "Canais que serão desconsiderados das estatísticas." + +#: src/tracking/voice/settings.py:47 +msgctxt "guildset:untracked_channels|long_desc" +msgid "" +"Activity in these channels will not count towards a member's statistics. If " +"a category is selected, all channels under the category will be untracked." +msgstr "" +"A atividade nestes canais não serão adicionadas às estatísticas dos membros." +" Se você selecionar uma categoria, todos os canais desta categoria, serão " +"desconsiderados." + +#: src/tracking/voice/settings.py:52 +msgctxt "guildset:untracked_channels|accepts" +msgid "Comma separated list of untracked channel name/ids." +msgstr "" +"Lista com nomes, ou IDˋs, dos canais não contabilizados, separados por " +"vírgula." + +#: src/tracking/voice/settings.py:56 +msgctxt "guildset:untracked_channels|notset" +msgid "Not Set (all voice channels will be tracked.)" +msgstr "Não configurado (todos canais de voz serão considerados)." + +#: src/tracking/voice/settings.py:73 +msgctxt "guildset:untracked_channels|set" +msgid "Channel selector below." +msgstr "Seletor de canais abaixo." + +#: src/tracking/voice/settings.py:82 +#, possible-python-brace-format +msgctxt "guildset:untracked_channels|set_response|set" +msgid "Activity in the following channels will now be ignored: {channels}" +msgstr "A atividade nos seguintes canais, serão agora ignoradas: {channels}" + +#: src/tracking/voice/settings.py:89 +msgctxt "guildset:untracked_channels|set_response|unset" +msgid "All voice channels will now be tracked." +msgstr "Todos os canais de voz, agora, serão considerados!" + +#: src/tracking/voice/settings.py:117 +msgctxt "guildset:hourly_reward" +msgid "hourly_reward" +msgstr "recompensa_horária" + +#: src/tracking/voice/settings.py:120 +msgctxt "guildset:hourly_reward|mode:voice|desc" +msgid "LionCoins given per hour in a voice channel." +msgstr "LionCoins dadas por hora em um canal de voz." + +#: src/tracking/voice/settings.py:124 +msgctxt "guildset:hourly_reward|mode:voice|long_desc" +msgid "" +"Number of LionCoins to each member per hour that they stay in a tracked " +"voice channel." +msgstr "" +"Numero de LionCoins para dadas aos membros, por cada hora que eles ficarem " +"em um canal contabilizável." + +#: src/tracking/voice/settings.py:128 +msgctxt "guildset:hourly_reward|accepts" +msgid "Number of coins to reward per hour in voice." +msgstr "Número de moedas recebidas por hora em sala de voz." + +#: src/tracking/voice/settings.py:144 +#, possible-python-brace-format +msgctxt "guildset:hourly_reward|formatted" +msgid "{coin}**{amount}** per hour." +msgstr "{coin}**{amount}** por hora." + +#: src/tracking/voice/settings.py:159 +#, possible-python-brace-format +msgctxt "guildset:hourly_reward|mode:voice|response" +msgid "Members will be given {coin}**{amount}** per hour in a voice channel!" +msgstr "Os membros receberão {coin}**{amount}** por hora em um canal de voz." + +#: src/tracking/voice/settings.py:171 +msgctxt "guildset:hourly_reward|mode:study|desc" +msgid "LionCoins given per hour of study." +msgstr "LionCoins recebidas por cada hora de estudo." + +#: src/tracking/voice/settings.py:175 +msgctxt "guildset:hourly_reward|mode:study|long_desc" +msgid "Number of LionCoins given per hour of study, up to the daily hour cap." +msgstr "" +"Número de LionCoins recebidas por cada hora de estudo, até o limite diário." + +#: src/tracking/voice/settings.py:183 +#, possible-python-brace-format +msgctxt "guildset:hourly_reward|mode:study|response" +msgid "Members will be given {coin}**{amount}** per hour that they study!" +msgstr "" +"Os membros receberão {coin}**{amount}** por cada hora que eles estudarem!" + +#: src/tracking/voice/settings.py:197 +msgctxt "guildset:hourly_live_bonus" +msgid "hourly_live_bonus" +msgstr "bonus_horário" + +#: src/tracking/voice/settings.py:200 +msgctxt "guildset:hourly_live_bonus|desc" +msgid "Bonus Lioncoins given per hour when a member streams or video-chats." +msgstr "" +"Lioncoins recebidas de bônus por cada hora que um membro ligar sua câmera ou" +" compartilhar a sua tela." + +#: src/tracking/voice/settings.py:205 +msgctxt "guildset:hourly_live_bonus|long_desc" +msgid "" +"When a member streams or video-chats in a channel they will be given this " +"bonus *additionally* to the `hourly_reward`." +msgstr "" +"Quando um membro compartilhar o vídeo ou ligar sua câmera em um canal, será " +"dado, adicionalmente à ˋrecompensa_horáriaˋ, um bônus. " + +#: src/tracking/voice/settings.py:210 +msgctxt "guildset:hourly_live_bonus|accepts" +msgid "Number of bonus coins to reward per hour when live." +msgstr "Número de moedas bônus a receber por horas em chamada." + +#: src/tracking/voice/settings.py:226 +#, possible-python-brace-format +msgctxt "guildset:hourly_live_bonus|formatted" +msgid "{coin}**{amount}** bonus per hour when live." +msgstr "{coin}**{amount}** bonus por hora em chamada." + +#: src/tracking/voice/settings.py:237 +#, possible-python-brace-format +msgctxt "guildset:hourly_live_bonus|response" +msgid "" +"Live members will now *additionally* be given {coin}**{amount}** per hour." +msgstr "" +"Membros em chamada, irão *adicionalmente* receber {coin}**{amount}** por " +"hora." + +#: src/tracking/voice/settings.py:248 +msgctxt "guildset:daily_voice_cap" +msgid "daily_voice_cap" +msgstr "limite_diario_horas" + +#: src/tracking/voice/settings.py:251 +msgctxt "guildset:daily_voice_cap|desc" +msgid "Maximum number of hours per day to count for each member." +msgstr "Numero máximo de horas que cada membro pode contabilizar." + +#: src/tracking/voice/settings.py:255 +msgctxt "guildset:daily_voice_cap|long_desc" +msgid "" +"Time spend in voice channels over this amount will not be tracked towards " +"the member's statistics. Tracking will resume at the start of the next day. " +"The start of the day is determined by the configured guild timezone." +msgstr "" +"O tempo gasto em canais de voz, além deste limite, não será contabilizado " +"nas estatísticas do membro. O tempo voltará a ser contabilizado na primeira " +"hora do próximo dia. Este horário inicial é configurado pelo fuso horário do" +" servidor." + +#: src/tracking/voice/settings.py:261 +msgctxt "guildset:daily_voice_cap|accepts" +msgid "The maximum number of voice hours to track per day." +msgstr "O número máximo de horas em canal de voz a ser contabilizado por dia." + +#: src/tracking/voice/settings.py:277 +#, possible-python-brace-format +msgctxt "guildset:daily_voice_cap|response" +msgid "" +"Members will be tracked for at most {duration} per day. (**NOTE:** This will" +" not affect members currently in voice channels.)" +msgstr "" +"As horas dos membros serão contadas até {duration} por dia. (**Atenção:** " +"Esta configuração não irá surtir efeito sobre os membros que já estão dentro" +" dos canais.)" + +#: src/tracking/voice/settings.py:335 +msgctxt "ui:voice_tracker_config|button:close|label" +msgid "Close" +msgstr "Fechar" + +#: src/tracking/voice/settings.py:349 +msgctxt "ui:voice_tracker_config|button:reset|label" +msgid "Reset" +msgstr "Resetar" + +#: src/tracking/voice/settings.py:362 +msgctxt "ui:voice_tracker_config|menu:untracked_channels|placeholder" +msgid "Set Untracked Channels" +msgstr "Configurar canais não contabilizados" + +#: src/tracking/voice/settings.py:428 src/tracking/voice/settings.py:482 +msgctxt "ui:voice_tracker_config|mode:voice|embed|title" +msgid "Voice Tracker Configuration Panel" +msgstr "Painel de Configuração da Contabilização em Canais de Voz" + +#: src/tracking/voice/settings.py:433 src/tracking/voice/settings.py:487 +msgctxt "ui:voice_tracker_config|mode:study|embed|title" +msgid "Study Tracker Configuration Panel" +msgstr "Painel de Configuração de Contabilização de Estudos" + +#: src/tracking/voice/settings.py:472 +msgctxt "ui:voice_tracker_config|menu:untracked_channels|placeholder" +msgid "Select Untracked Channels" +msgstr "Selecione os Canais a Serem Não-Contabilizados" + +#: src/tracking/voice/settings.py:528 +msgctxt "dash:voice_tracker|title" +msgid "Voice Tracker Configuration ({commands[configure voice_rewards]})" +msgstr "" +"Configuração de Contabilização em Canais de Voz ({commands[configure " +"voice_rewards]})" + +#: src/tracking/voice/settings.py:532 +msgctxt "dash:voice_tracking|dropdown|placeholder" +msgid "Voice Activity Panel" +msgstr "Painel de Atividade em Canais de Voz " diff --git a/locales/pt_BR/LC_MESSAGES/wards.po b/locales/pt_BR/LC_MESSAGES/wards.po new file mode 100644 index 00000000..98f1722b --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/wards.po @@ -0,0 +1,104 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-24 12:21+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Bruno Evangelista De Oliveira, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/wards.py:83 +msgctxt "ward:sys_admin|failed" +msgid "You must be a bot owner to do this!" +msgstr "Você precisa ser dono de um bot para fazer isto!" + +#: src/wards.py:99 +msgctxt "ward:high_management|failed" +msgid "" +"You must have the `ADMINISTRATOR` permission in this server to do this!" +msgstr "" +"Você precisa ter permissão de ˋADMINISTRADORˋ para fazer isto neste " +"servidor." + +#: src/wards.py:115 +msgctxt "ward:low_management|failed" +msgid "You must have the `MANAGE_GUILD` permission in this server to do this!" +msgstr "" +"Você precisa ter permissão de `MANAGE_GUILD`, neste servidor, para poder " +"fazer isto! " + +#: src/wards.py:127 +msgctxt "ward:moderator|failed" +msgid "" +"You must have the configured moderator role, or `MANAGE_GUILD` permissions " +"to do this." +msgstr "" +"Você precisa de um cargo de Moderador ou permissão `MANAGE_GUILD` para fazer" +" isto." + +#: src/wards.py:153 +#, possible-python-brace-format +msgctxt "ward:equippable_role|error:bot_managed" +msgid "I cannot manage {role} because it is managed by another bot!" +msgstr "Eu não posso gerenciar {role}, pois ele é gerenciado por outro bot!" + +#: src/wards.py:160 +#, possible-python-brace-format +msgctxt "ward:equippable_role|error:integration" +msgid "I cannot manage {role} because it is managed by a server integration." +msgstr "" +"Eu não posso gerenciar {role}, pois ele é gerenciado por uma integração do " +"servidor." + +#: src/wards.py:167 +msgctxt "ward:equippable_role|error:default_role" +msgid "I cannot manage the server's default role." +msgstr "Eu não posso configurar os cargos padrão do servidor." + +#: src/wards.py:174 +msgctxt "ward:equippable_role|error:no_perms" +msgid "I need the `MANAGE_ROLES` permission before I can manage roles!" +msgstr "" +"Eu preciso ter permissão de `GERENCIAR_CARGOS` antes de poder configurar " +"cargos." + +#: src/wards.py:181 +#, possible-python-brace-format +msgctxt "ward:equippable_role|error:my_top_role" +msgid "I cannot assign or remove {role} because it is above my top role!" +msgstr "" +"Eu não consigo adicionar ou remover {role} por ser um cargo maior que o meu." + +#: src/wards.py:188 +#, possible-python-brace-format +msgctxt "ward:equippable_role|error:not_assignable" +msgid "I don't have sufficient permissions to assign or remove {role}." +msgstr "Eu não tenho permissões suficientes para adicionar ou remover {role}." + +#: src/wards.py:196 +msgctxt "ward:equippable_role|error:actor_perms" +msgid "You need the `MANAGE_ROLES` permission before you can configure roles!" +msgstr "" +"Você precisa ter permissão de `GERENCIAR_CARGOS` antes de poder configurar " +"os cargos!" + +#: src/wards.py:203 +#, possible-python-brace-format +msgctxt "ward:equippable_role|error:actor_top_role" +msgid "You cannot configure {role} because it is above your top role!" +msgstr "" +"Você não pode configurar {role} pois ele está acima do seu maior cargo!" diff --git a/locales/pt_BR/LC_MESSAGES/weekly-gui.po b/locales/pt_BR/LC_MESSAGES/weekly-gui.po new file mode 100644 index 00000000..85281cc3 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/weekly-gui.po @@ -0,0 +1,102 @@ +# 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. +# +# Translators: +# Bruno Evangelista De Oliveira, 2023 +# Aline Souki, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-28 22:43+0300\n" +"PO-Revision-Date: 2023-08-28 13:43+0000\n" +"Last-Translator: Aline Souki, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/leobot/teams/174919/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: src/gui/cards/weekly.py:52 +msgctxt "skin:weeklystats|mode:study|title" +msgid "STUDY HOURS" +msgstr "HORAS ESTUDADAS" + +#: src/gui/cards/weekly.py:56 +msgctxt "skin:weeklystats|mode:voice|title" +msgid "VOICE CHANNEL ACTIVITY" +msgstr "ATIVIDADE EM CANAL DE VOZ" + +#: src/gui/cards/weekly.py:60 +msgctxt "skin:weeklystats|mode:text|title" +msgid "MESSAGE ACTIVITY" +msgstr "ATIVIDADE EM CONVERSAS" + +#: src/gui/cards/weekly.py:64 +msgctxt "skin::weeklystats|mode:anki|title" +msgid "CARDS REVIEWED" +msgstr "CARTÕES REVISADOS" + +#: src/gui/cards/weekly.py:137 +msgctxt "skin:weeklystats|weekdays" +msgid "M,T,W,T,F,S,S" +msgstr "S,T,Q,Q,S,S,D" + +#: src/gui/cards/weekly.py:207 +#, possible-python-brace-format +msgctxt "skin:weeklystats|mode:study|summary:this_week" +msgid "THIS WEEK: {amount} HOURS" +msgstr "ESTA SEMANA: {amount} HORAS" + +#: src/gui/cards/weekly.py:211 +#, possible-python-brace-format +msgctxt "skin:weeklystats|mode:voice|summary:this_week" +msgid "THIS WEEK: {amount} HOURS" +msgstr "ESTA SEMANA: {amount} HORAS" + +#: src/gui/cards/weekly.py:215 +#, possible-python-brace-format +msgctxt "skin:weeklystats|mode:text|summary:this_week" +msgid "THIS WEEK: {amount} MESSAGES" +msgstr "ESTA SEMANA: {amount} MENSAGENS" + +#: src/gui/cards/weekly.py:219 +#, possible-python-brace-format +msgctxt "skin:weeklystats|mode:text|summary:this_week" +msgid "THIS WEEK: {amount} CARDS" +msgstr "ESTA SEMANA: {amount} CARTÕES" + +#: src/gui/cards/weekly.py:240 +#, possible-python-brace-format +msgctxt "skin:weeklystats|mode:study|summary:last_week" +msgid "LAST WEEK: {amount} HOURS" +msgstr "SEMANA PASSADA: {amount} HORAS" + +#: src/gui/cards/weekly.py:244 +#, possible-python-brace-format +msgctxt "skin:weeklystats|mode:voice|summary:last_week" +msgid "LAST WEEK: {amount} HOURS" +msgstr "SEMANA PASSADA: {amount} HORAS" + +#: src/gui/cards/weekly.py:248 +#, possible-python-brace-format +msgctxt "skin:weeklystats|mode:text|summary:last_week" +msgid "LAST WEEK: {amount} MESSAGES" +msgstr "SEMANA PASSADA: {amount} MENSAGENS" + +#: src/gui/cards/weekly.py:252 +#, possible-python-brace-format +msgctxt "skin:weeklystats|mode:text|summary:last_week" +msgid "LAST WEEK: {amount} CARDS" +msgstr "SEMANA PASSADA: {amount} CARTÕES" + +#: src/gui/cards/weekly.py:272 +#, possible-python-brace-format +msgctxt "skin:weeklystats|footer" +msgid "Weekly Statistics • As of {day} {month} • {name} {discrim}" +msgstr "Estatísticas semanais • A partir de {day} {month} • {name} {discrim}" diff --git a/locales/templates/Pomodoro.pot b/locales/templates/Pomodoro.pot index 106d1b03..444e8e8c 100644 --- a/locales/templates/Pomodoro.pot +++ b/locales/templates/Pomodoro.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,41 +18,46 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/modules/pomodoro/timer.py:51 +#: src/modules/pomodoro/timer.py:52 msgctxt "timer|stage:break|name" msgid "BREAK" msgstr "" -#: src/modules/pomodoro/timer.py:52 +#: src/modules/pomodoro/timer.py:53 msgctxt "timer|stage:focus|name" msgid "FOCUS" msgstr "" -#: src/modules/pomodoro/timer.py:158 +#: src/modules/pomodoro/timer.py:160 #, possible-python-brace-format msgctxt "timer|webhook|name" msgid "{bot_name} Pomodoro" msgstr "" -#: src/modules/pomodoro/timer.py:162 +#: src/modules/pomodoro/timer.py:164 msgctxt "timer|webhook|audit_reason" msgid "Pomodoro Notifications" msgstr "" -#: src/modules/pomodoro/timer.py:173 +#: src/modules/pomodoro/timer.py:175 msgctxt "timer|webhook|error:insufficient_permissions" msgid "" "I require the `MANAGE_WEBHOOKS` permission to send pomodoro notifications " "here!" msgstr "" -#: src/modules/pomodoro/timer.py:232 +#: src/modules/pomodoro/timer.py:234 #, possible-python-brace-format msgctxt "timer|default_base_name" msgid "Timer {pattern}" msgstr "" -#: src/modules/pomodoro/timer.py:406 +#: src/modules/pomodoro/timer.py:409 +msgctxt "timer|disconnect|audit_reason" +msgid "Disconnecting inactive member from timer." +msgstr "" + +#: src/modules/pomodoro/timer.py:421 #, possible-python-brace-format msgctxt "timer|kicked_message" msgid "" @@ -64,20 +69,28 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/modules/pomodoro/timer.py:499 +#: src/modules/pomodoro/timer.py:434 +#, possible-python-brace-format +msgctxt "timer|kick_failed" +msgid "" +"**Warning!** Timer {channel} is configured to disconnect on inactivity, but " +"I lack the 'Move Members' permission to do this!" +msgstr "" + +#: src/modules/pomodoro/timer.py:529 #, possible-python-brace-format msgctxt "timer|status|stage:focus|statusline" msgid "{channel} is now in **FOCUS**! Good luck, **BREAK** starts {timestamp}" msgstr "" -#: src/modules/pomodoro/timer.py:504 +#: src/modules/pomodoro/timer.py:534 #, possible-python-brace-format msgctxt "timer|status|stage:break|statusline" msgid "" "{channel} is now on **BREAK**! Take a rest, **FOCUS** starts {timestamp}" msgstr "" -#: src/modules/pomodoro/timer.py:536 +#: src/modules/pomodoro/timer.py:566 #, possible-python-brace-format msgctxt "timer|status|warningline" msgid "" @@ -85,13 +98,13 @@ msgid "" "next stage." msgstr "" -#: src/modules/pomodoro/timer.py:555 +#: src/modules/pomodoro/timer.py:585 #, possible-python-brace-format msgctxt "timer|status|stopped:auto" msgid "Timer stopped! Join {channel} to start the timer." msgstr "" -#: src/modules/pomodoro/timer.py:560 +#: src/modules/pomodoro/timer.py:590 msgctxt "timer|status|stopped:manual" msgid "Timer stopped! Press `Start` to restart the timer." msgstr "" @@ -116,34 +129,34 @@ msgctxt "dash:stats|dropdown|placeholder" msgid "Pomodoro Timer Panel" msgstr "" -#: src/modules/pomodoro/cog.py:82 +#: src/modules/pomodoro/cog.py:116 msgctxt "cmd_check:ready|failed" msgid "" "I am currently restarting! The Pomodoro timers will be unavailable until I " "have restarted. Thank you for your patience!" msgstr "" -#: src/modules/pomodoro/cog.py:322 +#: src/modules/pomodoro/cog.py:401 msgctxt "cmd:timer" msgid "timer" msgstr "" -#: src/modules/pomodoro/cog.py:323 +#: src/modules/pomodoro/cog.py:402 msgctxt "cmd:timer|desc" msgid "Show your current (or selected) pomodoro timer." msgstr "" -#: src/modules/pomodoro/cog.py:326 +#: src/modules/pomodoro/cog.py:405 msgctxt "cmd:timer|param:channel" msgid "timer_channel" msgstr "" -#: src/modules/pomodoro/cog.py:331 +#: src/modules/pomodoro/cog.py:410 msgctxt "cmd:timer|param:channel|desc" msgid "Select a timer to display (by selecting the timer voice channel)" msgstr "" -#: src/modules/pomodoro/cog.py:353 src/modules/pomodoro/cog.py:423 +#: src/modules/pomodoro/cog.py:432 src/modules/pomodoro/cog.py:503 #, possible-python-brace-format msgctxt "cmd:timer|error:no_timers|desc" msgid "" @@ -152,7 +165,7 @@ msgid "" "rent a private room with {room_cmd} and create one yourself!" msgstr "" -#: src/modules/pomodoro/cog.py:367 +#: src/modules/pomodoro/cog.py:446 #, possible-python-brace-format msgctxt "cmd:timer|error:no_channel|desc" msgid "" @@ -161,7 +174,7 @@ msgid "" "list the available timers in this server." msgstr "" -#: src/modules/pomodoro/cog.py:380 +#: src/modules/pomodoro/cog.py:459 #, possible-python-brace-format msgctxt "cmd:timer|error:no_timer_in_channel" msgid "" @@ -169,17 +182,17 @@ msgid "" "Use {timers_cmd} to list the available timers in this server." msgstr "" -#: src/modules/pomodoro/cog.py:396 +#: src/modules/pomodoro/cog.py:476 msgctxt "cmd:timers" msgid "timers" msgstr "" -#: src/modules/pomodoro/cog.py:397 +#: src/modules/pomodoro/cog.py:477 msgctxt "cmd:timers|desc" msgid "List the available pomodoro timer rooms." msgstr "" -#: src/modules/pomodoro/cog.py:436 +#: src/modules/pomodoro/cog.py:516 #, possible-python-brace-format msgctxt "cmd:timer|error:no_visible_timers|desc" msgid "" @@ -188,13 +201,13 @@ msgid "" "with {room_cmd} and create one yourself!" msgstr "" -#: src/modules/pomodoro/cog.py:449 +#: src/modules/pomodoro/cog.py:529 #, possible-python-brace-format msgctxt "cmd:timers|embed:timer_list|title" msgid "Pomodoro Timer Rooms in **{guild}**" msgstr "" -#: src/modules/pomodoro/cog.py:458 +#: src/modules/pomodoro/cog.py:538 #, possible-python-brace-format msgctxt "cmd:timers|status:stopped_auto" msgid "" @@ -202,7 +215,7 @@ msgid "" "Join {channel} to restart it." msgstr "" -#: src/modules/pomodoro/cog.py:464 +#: src/modules/pomodoro/cog.py:544 #, possible-python-brace-format msgctxt "cmd:timers|status:stopped_manual" msgid "" @@ -210,7 +223,7 @@ msgid "" "Join {channel} and press `Start` to start it!" msgstr "" -#: src/modules/pomodoro/cog.py:471 +#: src/modules/pomodoro/cog.py:551 #, possible-python-brace-format msgctxt "cmd:timers|status:running_focus" msgid "" @@ -218,7 +231,7 @@ msgid "" "Currently **focusing**, with break starting {timestamp}" msgstr "" -#: src/modules/pomodoro/cog.py:477 +#: src/modules/pomodoro/cog.py:557 #, possible-python-brace-format msgctxt "cmd:timers|status:running_break" msgid "" @@ -226,78 +239,78 @@ msgid "" "Currently **resting**, with focus starting {timestamp}" msgstr "" -#: src/modules/pomodoro/cog.py:491 +#: src/modules/pomodoro/cog.py:571 msgctxt "cmd:pomodoro" msgid "pomodoro" msgstr "" -#: src/modules/pomodoro/cog.py:492 +#: src/modules/pomodoro/cog.py:572 msgctxt "cmd:pomodoro|desc" msgid "Create and configure pomodoro timer rooms." msgstr "" -#: src/modules/pomodoro/cog.py:499 +#: src/modules/pomodoro/cog.py:579 msgctxt "cmd:pomodoro_create" msgid "create" msgstr "" -#: src/modules/pomodoro/cog.py:502 +#: src/modules/pomodoro/cog.py:582 msgctxt "cmd:pomodoro_create|desc" msgid "Create a new Pomodoro timer. Requires manage channel permissions." msgstr "" -#: src/modules/pomodoro/cog.py:506 +#: src/modules/pomodoro/cog.py:586 msgctxt "cmd:pomodoro_create|param:channel" msgid "timer_channel" msgstr "" -#: src/modules/pomodoro/cog.py:512 +#: src/modules/pomodoro/cog.py:592 msgctxt "cmd:pomodoro_create|param:channel|desc" msgid "" "Voice channel to create the timer in. (Defaults to your current channel, or " "makes a new one.)" msgstr "" -#: src/modules/pomodoro/cog.py:557 +#: src/modules/pomodoro/cog.py:637 msgctxt "cmd:pomodoro_create|new_channel|error:your_insufficient_perms|title" msgid "Could not create pomodoro voice channel!" msgstr "" -#: src/modules/pomodoro/cog.py:561 +#: src/modules/pomodoro/cog.py:641 msgctxt "cmd:pomodoro_create|new_channel|error:your_insufficient_perms" msgid "" "No `timer_channel` was provided, and you lack the 'Manage Channels` " "permission required to create a new timer room!" msgstr "" -#: src/modules/pomodoro/cog.py:572 +#: src/modules/pomodoro/cog.py:652 msgctxt "cmd:pomodoro_create|new_channel|error:my_insufficient_perms|title" msgid "Could not create pomodoro voice channel!" msgstr "" -#: src/modules/pomodoro/cog.py:576 +#: src/modules/pomodoro/cog.py:656 msgctxt "cmd:pomodoro_create|new_channel|error:my_insufficient_perms|desc" msgid "" "No `timer_channel` was provided, and I lack the 'Manage Channels' permission " "required to create a new voice channel." msgstr "" -#: src/modules/pomodoro/cog.py:587 +#: src/modules/pomodoro/cog.py:667 msgctxt "cmd:pomodoro_create|new_channel|default_name" msgid "Timer" msgstr "" -#: src/modules/pomodoro/cog.py:591 +#: src/modules/pomodoro/cog.py:671 msgctxt "cmd:pomodoro_create|new_channel|audit_reason" msgid "Creating Pomodoro Voice Channel" msgstr "" -#: src/modules/pomodoro/cog.py:600 +#: src/modules/pomodoro/cog.py:680 msgctxt "cmd:pomodoro_create|new_channel|error:channel_create_failed|title" msgid "Could not create pomodoro voice channel!" msgstr "" -#: src/modules/pomodoro/cog.py:604 +#: src/modules/pomodoro/cog.py:684 msgctxt "cmd:pomodoro_create|new_channel|error:channel_create_failed|desc" msgid "" "Failed to create a new pomodoro voice channel due to an unknown Discord " @@ -305,13 +318,13 @@ msgid "" "the `timer_channel` argument of this command." msgstr "" -#: src/modules/pomodoro/cog.py:621 +#: src/modules/pomodoro/cog.py:701 #, possible-python-brace-format msgctxt "cmd:pomodoro_create|add_timer|error:timer_exists" msgid "A timer already exists in {channel}! Reconfigure it with {edit_cmd}." msgstr "" -#: src/modules/pomodoro/cog.py:635 +#: src/modules/pomodoro/cog.py:715 #, possible-python-brace-format msgctxt "cmd:pomodoro_create|add_timer|error:your_insufficient_perms" msgid "" @@ -319,43 +332,43 @@ msgid "" "timer there!" msgstr "" -#: src/modules/pomodoro/cog.py:684 +#: src/modules/pomodoro/cog.py:764 msgctxt "cmd:pomodoro_create|response:success|content" msgid "Timer created successfully! Use the panel below to reconfigure." msgstr "" -#: src/modules/pomodoro/cog.py:690 +#: src/modules/pomodoro/cog.py:770 msgctxt "cmd:pomodoro_destroy" msgid "destroy" msgstr "" -#: src/modules/pomodoro/cog.py:693 +#: src/modules/pomodoro/cog.py:773 msgctxt "cmd:pomodoro_destroy|desc" msgid "Remove a pomodoro timer from a voice channel." msgstr "" -#: src/modules/pomodoro/cog.py:697 +#: src/modules/pomodoro/cog.py:777 msgctxt "cmd:pomodoro_destroy|param:channel" msgid "timer_channel" msgstr "" -#: src/modules/pomodoro/cog.py:700 +#: src/modules/pomodoro/cog.py:780 msgctxt "cmd:pomodoro_destroy|param:channel" msgid "Select a timer voice channel to remove the timer from." msgstr "" -#: src/modules/pomodoro/cog.py:718 +#: src/modules/pomodoro/cog.py:798 msgctxt "cmd:pomodoro_destroy|error:no_timer" msgid "This channel doesn't have an attached pomodoro timer!" msgstr "" -#: src/modules/pomodoro/cog.py:731 +#: src/modules/pomodoro/cog.py:811 msgctxt "cmd:pomodoro_destroy|error:insufficient_perms|owned" msgid "" "You need to be an administrator or own this channel to remove this timer!" msgstr "" -#: src/modules/pomodoro/cog.py:740 +#: src/modules/pomodoro/cog.py:820 #, possible-python-brace-format msgctxt "cmd:pomodoro_destroy|error:insufficient_perms|notowned" msgid "" @@ -363,38 +376,38 @@ msgid "" "this timer!" msgstr "" -#: src/modules/pomodoro/cog.py:751 +#: src/modules/pomodoro/cog.py:831 #, possible-python-brace-format msgctxt "cmd:pomdoro_destroy|response:success|description" msgid "Timer successfully removed from {channel}." msgstr "" -#: src/modules/pomodoro/cog.py:757 +#: src/modules/pomodoro/cog.py:837 msgctxt "cmd:pomodoro_edit" msgid "edit" msgstr "" -#: src/modules/pomodoro/cog.py:760 +#: src/modules/pomodoro/cog.py:840 msgctxt "cmd:pomodoro_edit|desc" msgid "Reconfigure a pomodoro timer." msgstr "" -#: src/modules/pomodoro/cog.py:764 +#: src/modules/pomodoro/cog.py:844 msgctxt "cmd:pomodoro_edit|param:channel" msgid "timer_channel" msgstr "" -#: src/modules/pomodoro/cog.py:770 +#: src/modules/pomodoro/cog.py:850 msgctxt "cmd:pomodoro_edit|param:channel|desc" msgid "Select a timer voice channel to reconfigure." msgstr "" -#: src/modules/pomodoro/cog.py:811 +#: src/modules/pomodoro/cog.py:891 msgctxt "cmd:pomodoro_edit|error:no_timer" msgid "This channel doesn't have an attached pomodoro timer to edit!" msgstr "" -#: src/modules/pomodoro/cog.py:824 +#: src/modules/pomodoro/cog.py:904 msgctxt "cmd:pomodoro_edit|error:insufficient_perms|role:other" msgid "" "Insufficient permissions to modifiy this timer!\n" @@ -402,28 +415,28 @@ msgid "" "manager role." msgstr "" -#: src/modules/pomodoro/cog.py:845 +#: src/modules/pomodoro/cog.py:925 msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:admin" msgid "You need to be a guild admin to modify this option!" msgstr "" -#: src/modules/pomodoro/cog.py:850 +#: src/modules/pomodoro/cog.py:930 msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:owner" msgid "You need to be a channel owner or guild admin to modify this option!" msgstr "" -#: src/modules/pomodoro/cog.py:855 +#: src/modules/pomodoro/cog.py:935 msgctxt "cmd:pomodoro_edit|error:insufficient_permissions|role_needed:manager" msgid "" "You need to be a guild admin or have the manager role to modify this option!" msgstr "" -#: src/modules/pomodoro/cog.py:891 +#: src/modules/pomodoro/cog.py:971 msgctxt "cmd:configure_pomodoro" msgid "pomodoro" msgstr "" -#: src/modules/pomodoro/cog.py:892 +#: src/modules/pomodoro/cog.py:972 msgctxt "cmd:configure_pomodoro|desc" msgid "Configure Pomodoro Timer System" msgstr "" diff --git a/locales/templates/babel.pot b/locales/templates/babel.pot index 43a4ca71..e3f95e32 100644 --- a/locales/templates/babel.pot +++ b/locales/templates/babel.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -84,7 +84,7 @@ msgctxt "cmd:userconfig_language|button:reset|label" msgid "Reset" msgstr "" -#: src/babel/cog.py:251 +#: src/babel/cog.py:252 #, possible-python-brace-format msgctxt "acmpl:language|no_match" msgid "No supported languages matching {partial}" @@ -102,105 +102,105 @@ msgctxt "utils|short_months" msgid "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec" msgstr "" -#: src/babel/settings.py:23 +#: src/babel/settings.py:24 msgctxt "settype:locale|accepts" msgid "Enter a supported language (e.g. 'en-GB')." msgstr "" -#: src/babel/settings.py:34 +#: src/babel/settings.py:35 msgctxt "settype:locale|summary_table|field:supported|key" msgid "Supported" msgstr "" -#: src/babel/settings.py:44 +#: src/babel/settings.py:45 msgctxt "settype:locale|formatted:unset" msgid "Unset" msgstr "" -#: src/babel/settings.py:60 +#: src/babel/settings.py:61 #, possible-python-brace-format msgctxt "settype:locale|error" msgid "Sorry, we do not support the language `{lang}` at this time!" msgstr "" -#: src/babel/settings.py:75 +#: src/babel/settings.py:76 msgctxt "userset:locale" msgid "language" msgstr "" -#: src/babel/settings.py:76 +#: src/babel/settings.py:77 msgctxt "userset:locale|desc" msgid "Your preferred language for interacting with me." msgstr "" -#: src/babel/settings.py:79 +#: src/babel/settings.py:80 msgctxt "userset:locale|long_desc" msgid "" "The language you would prefer me to respond to commands and interactions in. " "Servers may be configured to override this with their own language." msgstr "" -#: src/babel/settings.py:90 +#: src/babel/settings.py:91 msgctxt "userset:locale|response" msgid "You have unset your language." msgstr "" -#: src/babel/settings.py:92 +#: src/babel/settings.py:93 #, possible-python-brace-format msgctxt "userset:locale|response" msgid "You have set your language to {lang}." msgstr "" -#: src/babel/settings.py:110 +#: src/babel/settings.py:111 msgctxt "guildset:force_locale" msgid "force_language" msgstr "" -#: src/babel/settings.py:112 +#: src/babel/settings.py:113 msgctxt "guildset:force_locale|desc" msgid "" "Whether to force all members to use the configured guild language when " "interacting with me." msgstr "" -#: src/babel/settings.py:115 +#: src/babel/settings.py:116 msgctxt "guildset:force_locale|long_desc" msgid "" "When enabled, commands in this guild will always use the configured guild " "language, regardless of the member's personally configured language." msgstr "" -#: src/babel/settings.py:119 +#: src/babel/settings.py:120 msgctxt "guildset:force_locale|output" msgid "Enabled (members will be forced to use the server language)" msgstr "" -#: src/babel/settings.py:120 +#: src/babel/settings.py:121 msgctxt "guildset:force_locale|output" msgid "Disabled (members may set their own language)" msgstr "" -#: src/babel/settings.py:134 +#: src/babel/settings.py:135 msgctxt "guildset:force_locale|response" msgid "I will always use the set language in this server." msgstr "" -#: src/babel/settings.py:139 +#: src/babel/settings.py:140 msgctxt "guildset:force_locale|response" msgid "I will now allow the members to set their own language here." msgstr "" -#: src/babel/settings.py:156 +#: src/babel/settings.py:157 msgctxt "guildset:locale" msgid "language" msgstr "" -#: src/babel/settings.py:157 +#: src/babel/settings.py:158 msgctxt "guildset:locale|desc" msgid "Your preferred language for interacting with me." msgstr "" -#: src/babel/settings.py:160 +#: src/babel/settings.py:161 msgctxt "guildset:locale|long_desc" msgid "" "The default language to use for responses and interactions in this server. " @@ -208,173 +208,183 @@ msgid "" "unless `force_language` is enabled." msgstr "" -#: src/babel/settings.py:172 +#: src/babel/settings.py:173 msgctxt "guildset:locale|response" msgid "You have unset the guild language." msgstr "" -#: src/babel/settings.py:174 +#: src/babel/settings.py:175 #, possible-python-brace-format msgctxt "guildset:locale|response" msgid "You have set the guild language to {lang}." msgstr "" -#: src/babel/enums.py:42 -msgctxt "localenames|locale:en-US" -msgid "American English" -msgstr "" - #: src/babel/enums.py:43 -msgctxt "localenames|locale:en-GB" -msgid "British English" +msgctxt "localenames|locale:id" +msgid "Indonesian" msgstr "" #: src/babel/enums.py:44 -msgctxt "localenames|locale:bg" -msgid "Bulgarian" -msgstr "" - -#: src/babel/enums.py:45 -msgctxt "localenames|locale:zh-CN" -msgid "Chinese" -msgstr "" - -#: src/babel/enums.py:46 -msgctxt "localenames|locale:zh-TW" -msgid "Taiwan Chinese" -msgstr "" - -#: src/babel/enums.py:47 -msgctxt "localenames|locale:hr" -msgid "Croatian" -msgstr "" - -#: src/babel/enums.py:48 -msgctxt "localenames|locale:cs" -msgid "Czech" -msgstr "" - -#: src/babel/enums.py:49 msgctxt "localenames|locale:da" msgid "Danish" msgstr "" -#: src/babel/enums.py:50 -msgctxt "localenames|locale:nl" -msgid "Dutch" -msgstr "" - -#: src/babel/enums.py:51 -msgctxt "localenames|locale:fi" -msgid "Finnish" -msgstr "" - -#: src/babel/enums.py:52 -msgctxt "localenames|locale:fr" -msgid "French" -msgstr "" - -#: src/babel/enums.py:53 +#: src/babel/enums.py:45 msgctxt "localenames|locale:de" msgid "German" msgstr "" -#: src/babel/enums.py:54 -msgctxt "localenames|locale:el" -msgid "Greek" +#: src/babel/enums.py:46 +msgctxt "localenames|locale:en-GB" +msgid "English, UK" msgstr "" -#: src/babel/enums.py:55 -msgctxt "localenames|locale:hi" -msgid "Hindi" +#: src/babel/enums.py:47 +msgctxt "localenames|locale:en-US" +msgid "English, US" msgstr "" -#: src/babel/enums.py:56 -msgctxt "localenames|locale:hu" -msgid "Hungarian" +#: src/babel/enums.py:48 +msgctxt "localenames|locale:es-ES" +msgid "Spanish" msgstr "" -#: src/babel/enums.py:57 +#: src/babel/enums.py:49 +msgctxt "localenames|locale:fr" +msgid "French" +msgstr "" + +#: src/babel/enums.py:50 +msgctxt "localenames|locale:hr" +msgid "Croatian" +msgstr "" + +#: src/babel/enums.py:51 msgctxt "localenames|locale:it" msgid "Italian" msgstr "" -#: src/babel/enums.py:58 -msgctxt "localenames|locale:ja" -msgid "Japanese" -msgstr "" - -#: src/babel/enums.py:59 -msgctxt "localenames|locale:ko" -msgid "Korean" -msgstr "" - -#: src/babel/enums.py:60 +#: src/babel/enums.py:52 msgctxt "localenames|locale:lt" msgid "Lithuanian" msgstr "" -#: src/babel/enums.py:61 +#: src/babel/enums.py:53 +msgctxt "localenames|locale:hu" +msgid "Hungarian" +msgstr "" + +#: src/babel/enums.py:54 +msgctxt "localenames|locale:nl" +msgid "Dutch" +msgstr "" + +#: src/babel/enums.py:55 msgctxt "localenames|locale:no" msgid "Norwegian" msgstr "" -#: src/babel/enums.py:62 +#: src/babel/enums.py:56 msgctxt "localenames|locale:pl" msgid "Polish" msgstr "" -#: src/babel/enums.py:63 +#: src/babel/enums.py:57 msgctxt "localenames|locale:pt-BR" -msgid "Brazil Portuguese" +msgid "Portuguese, Brazilian" msgstr "" -#: src/babel/enums.py:64 +#: src/babel/enums.py:58 msgctxt "localenames|locale:ro" -msgid "Romanian" +msgid "Romanian, Romania" msgstr "" -#: src/babel/enums.py:65 -msgctxt "localenames|locale:ru" -msgid "Russian" +#: src/babel/enums.py:59 +msgctxt "localenames|locale:fi" +msgid "Finnish" msgstr "" -#: src/babel/enums.py:66 -msgctxt "localenames|locale:es-ES" -msgid "Spain Spanish" -msgstr "" - -#: src/babel/enums.py:67 +#: src/babel/enums.py:60 msgctxt "localenames|locale:sv-SE" msgid "Swedish" msgstr "" -#: src/babel/enums.py:68 -msgctxt "localenames|locale:th" -msgid "Thai" -msgstr "" - -#: src/babel/enums.py:69 -msgctxt "localenames|locale:tr" -msgid "Turkish" -msgstr "" - -#: src/babel/enums.py:70 -msgctxt "localenames|locale:uk" -msgid "Ukrainian" -msgstr "" - -#: src/babel/enums.py:71 +#: src/babel/enums.py:61 msgctxt "localenames|locale:vi" msgid "Vietnamese" msgstr "" +#: src/babel/enums.py:62 +msgctxt "localenames|locale:tr" +msgid "Turkish" +msgstr "" + +#: src/babel/enums.py:63 +msgctxt "localenames|locale:cs" +msgid "Czech" +msgstr "" + +#: src/babel/enums.py:64 +msgctxt "localenames|locale:el" +msgid "Greek" +msgstr "" + +#: src/babel/enums.py:65 +msgctxt "localenames|locale:bg" +msgid "Bulgarian" +msgstr "" + +#: src/babel/enums.py:66 +msgctxt "localenames|locale:ru" +msgid "Russian" +msgstr "" + +#: src/babel/enums.py:67 +msgctxt "localenames|locale:uk" +msgid "Ukrainian" +msgstr "" + +#: src/babel/enums.py:68 +msgctxt "localenames|locale:hi" +msgid "Hindi" +msgstr "" + +#: src/babel/enums.py:69 +msgctxt "localenames|locale:th" +msgid "Thai" +msgstr "" + +#: src/babel/enums.py:70 +msgctxt "localenames|locale:zh-CN" +msgid "Chinese, China" +msgstr "" + +#: src/babel/enums.py:71 +msgctxt "localenames|locale:ja" +msgid "Japanese" +msgstr "" + #: src/babel/enums.py:72 +msgctxt "localenames|locale:zh-TW" +msgid "Chinese, Taiwan" +msgstr "" + +#: src/babel/enums.py:73 +msgctxt "localenames|locale:ko" +msgid "Korean" +msgstr "" + +#: src/babel/enums.py:78 msgctxt "localenames|locale:he" msgid "Hebrew" msgstr "" -#: src/babel/enums.py:73 -msgctxt "localenames|locale:he_IL" -msgid "Hebrew (Israel)" +#: src/babel/enums.py:79 +msgctxt "localenames|locale:he-IL" +msgid "Hebrew" +msgstr "" + +#: src/babel/enums.py:80 +msgctxt "localenames|locale:test" +msgid "Test Language" msgstr "" diff --git a/locales/templates/config.pot b/locales/templates/config.pot index cc464ce4..cd1a99bb 100644 --- a/locales/templates/config.pot +++ b/locales/templates/config.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/core_config.pot b/locales/templates/core_config.pot index 4c514961..ed18d798 100644 --- a/locales/templates/core_config.pot +++ b/locales/templates/core_config.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/economy.pot b/locales/templates/economy.pot index f1459b45..7c5a37ec 100644 --- a/locales/templates/economy.pot +++ b/locales/templates/economy.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/exec.pot b/locales/templates/exec.pot index 5eefe627..88ec3c89 100644 --- a/locales/templates/exec.pot +++ b/locales/templates/exec.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,74 +17,74 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/modules/sysadmin/exec_cog.py:257 +#: src/modules/sysadmin/exec_cog.py:269 msgctxt "ward:sys_admin|failed" msgid "You must be a bot owner to do this!" msgstr "" -#: src/modules/sysadmin/exec_cog.py:262 +#: src/modules/sysadmin/exec_cog.py:274 msgid "async" msgstr "" -#: src/modules/sysadmin/exec_cog.py:263 +#: src/modules/sysadmin/exec_cog.py:275 msgid "Execute arbitrary code with Exec" msgstr "" -#: src/modules/sysadmin/exec_cog.py:325 +#: src/modules/sysadmin/exec_cog.py:337 msgctxt "command" msgid "eval" msgstr "" -#: src/modules/sysadmin/exec_cog.py:326 +#: src/modules/sysadmin/exec_cog.py:338 msgctxt "command:eval" msgid "Execute arbitrary code with Eval" msgstr "" -#: src/modules/sysadmin/exec_cog.py:329 +#: src/modules/sysadmin/exec_cog.py:341 msgctxt "command:eval|param:string" msgid "Code to evaluate." msgstr "" -#: src/modules/sysadmin/exec_cog.py:336 +#: src/modules/sysadmin/exec_cog.py:348 msgctxt "command" msgid "asyncall" msgstr "" -#: src/modules/sysadmin/exec_cog.py:337 +#: src/modules/sysadmin/exec_cog.py:349 msgctxt "command:asyncall|desc" msgid "Execute arbitrary code on all shards." msgstr "" -#: src/modules/sysadmin/exec_cog.py:340 +#: src/modules/sysadmin/exec_cog.py:352 msgctxt "command:asyncall|param:string" msgid "Cross-shard code to execute. Cannot reference ctx!" msgstr "" -#: src/modules/sysadmin/exec_cog.py:341 +#: src/modules/sysadmin/exec_cog.py:353 msgctxt "command:asyncall|param:target" msgid "Target shard app name, see autocomplete for options." msgstr "" -#: src/modules/sysadmin/exec_cog.py:384 +#: src/modules/sysadmin/exec_cog.py:396 msgid "reload" msgstr "" -#: src/modules/sysadmin/exec_cog.py:385 +#: src/modules/sysadmin/exec_cog.py:397 msgid "Reload a given LionBot extension. Launches an ExecUI." msgstr "" -#: src/modules/sysadmin/exec_cog.py:388 +#: src/modules/sysadmin/exec_cog.py:400 msgid "Name of the extension to reload. See autocomplete for options." msgstr "" -#: src/modules/sysadmin/exec_cog.py:389 +#: src/modules/sysadmin/exec_cog.py:401 msgid "Whether to force an extension reload even if it doesn't exist." msgstr "" -#: src/modules/sysadmin/exec_cog.py:425 +#: src/modules/sysadmin/exec_cog.py:437 msgid "shutdown" msgstr "" -#: src/modules/sysadmin/exec_cog.py:426 +#: src/modules/sysadmin/exec_cog.py:438 msgid "Shutdown (or restart) the client." msgstr "" diff --git a/locales/templates/goals-gui.pot b/locales/templates/goals-gui.pot index ebd4186b..bcf4ff2e 100644 --- a/locales/templates/goals-gui.pot +++ b/locales/templates/goals-gui.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/leaderboard-gui.pot b/locales/templates/leaderboard-gui.pot index d9de564a..2d908d18 100644 --- a/locales/templates/leaderboard-gui.pot +++ b/locales/templates/leaderboard-gui.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,74 +17,74 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/gui/cards/leaderboard.py:69 +#: src/gui/cards/leaderboard.py:68 msgctxt "skin:leaderboard|mode:study|header_text" msgid "STUDY TIME LEADERBOARD" msgstr "" -#: src/gui/cards/leaderboard.py:73 +#: src/gui/cards/leaderboard.py:72 msgctxt "skin:leaderboard|mode:text|header_text" msgid "MESSAGE LEADERBOARD" msgstr "" -#: src/gui/cards/leaderboard.py:77 +#: src/gui/cards/leaderboard.py:76 msgctxt "skin:leaderboard|mode:voice|header_text" msgid "VOICE LEADERBOARD" msgstr "" -#: src/gui/cards/leaderboard.py:81 +#: src/gui/cards/leaderboard.py:80 msgctxt "skin:leaderboard|mode:anki|header_text" msgid "ANKI REVIEW LEADERBOARD" msgstr "" -#: src/gui/cards/leaderboard.py:99 +#: src/gui/cards/leaderboard.py:98 msgctxt "skin:leaderboard|field:subheader_text" msgid "SERVER: " msgstr "" -#: src/gui/cards/leaderboard.py:129 +#: src/gui/cards/leaderboard.py:128 #, possible-python-brace-format msgctxt "skin:leaderboard|mode:study|top_hours_text" msgid "{amount} hours" msgstr "" -#: src/gui/cards/leaderboard.py:133 +#: src/gui/cards/leaderboard.py:132 #, possible-python-brace-format msgctxt "skin:leaderboard|mode:text|top_hours_text" msgid "{amount} XP" msgstr "" -#: src/gui/cards/leaderboard.py:137 +#: src/gui/cards/leaderboard.py:136 #, possible-python-brace-format msgctxt "skin:leaderboard|mode:voice|top_hours_text" msgid "{amount} hours" msgstr "" -#: src/gui/cards/leaderboard.py:141 +#: src/gui/cards/leaderboard.py:140 #, possible-python-brace-format msgctxt "skin:leaderboard|mode:anki|top_hours_text" msgid "{amount} cards" msgstr "" -#: src/gui/cards/leaderboard.py:168 +#: src/gui/cards/leaderboard.py:167 #, possible-python-brace-format msgctxt "skin:leaderboard|mode:study|entry_hours_text" msgid "{HH:02d}:{MM:02d}" msgstr "" -#: src/gui/cards/leaderboard.py:172 +#: src/gui/cards/leaderboard.py:171 #, possible-python-brace-format msgctxt "skin:leaderboard|mode:text|entry_hours_text" msgid "{amount} XP" msgstr "" -#: src/gui/cards/leaderboard.py:176 +#: src/gui/cards/leaderboard.py:175 #, possible-python-brace-format msgctxt "skin:leaderboard|mode:voice|entry_hours_text" msgid "{HH:02d}:{MM:02d}" msgstr "" -#: src/gui/cards/leaderboard.py:180 +#: src/gui/cards/leaderboard.py:179 #, possible-python-brace-format msgctxt "skin:leaderboard|mode:anki|entry_hours_text" msgid "{amount} cards" diff --git a/locales/templates/lion-core.pot b/locales/templates/lion-core.pot index 2677acac..0dfdc27e 100644 --- a/locales/templates/lion-core.pot +++ b/locales/templates/lion-core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,45 +27,47 @@ msgctxt "settype:coin|parse|error:notinteger" msgid "The coin quantity must be a positive integer!" msgstr "" -#: src/core/setting_types.py:54 +#: src/core/setting_types.py:55 +#, possible-python-brace-format msgctxt "settype:coin|parse|error:too_large" -msgid "Provided number of coins was too high!" +msgid "You cannot set this to more than {coin}**{max}**!" msgstr "" -#: src/core/setting_types.py:60 -msgctxt "settype:coin|parse|error:too_large" -msgid "Provided number of coins was too low!" +#: src/core/setting_types.py:63 +#, possible-python-brace-format +msgctxt "settype:coin|parse|error:too_small" +msgid "You cannot set this to less than {coin}**{min}**!" msgstr "" -#: src/core/setting_types.py:71 +#: src/core/setting_types.py:75 #, possible-python-brace-format msgctxt "settype:coin|formatted" msgid "{coin}**{amount}**" msgstr "" -#: src/core/setting_types.py:87 +#: src/core/setting_types.py:91 msgctxt "settype:message|accepts" msgid "JSON formatted raw message data" msgstr "" -#: src/core/setting_types.py:102 +#: src/core/setting_types.py:106 msgctxt "settype:message|download|error:not_json" msgid "The attached message data is not a JSON file!" msgstr "" -#: src/core/setting_types.py:107 +#: src/core/setting_types.py:111 msgctxt "settype:message|download|error:size" msgid "The attached message data is too large!" msgstr "" -#: src/core/setting_types.py:116 +#: src/core/setting_types.py:120 msgctxt "settype:message|download|error:decoding" msgid "" "Could not decode the message data. Please ensure it is saved with the " "`UTF-8` encoding." msgstr "" -#: src/core/setting_types.py:173 +#: src/core/setting_types.py:177 #, possible-python-brace-format msgctxt "settype:message|error_suffix" msgid "" @@ -73,7 +75,7 @@ msgid "" "({link})." msgstr "" -#: src/core/setting_types.py:185 +#: src/core/setting_types.py:189 #, possible-python-brace-format msgctxt "settype:message|error:invalid_json" msgid "" @@ -81,34 +83,34 @@ msgid "" "`{error}`" msgstr "" -#: src/core/setting_types.py:193 +#: src/core/setting_types.py:197 msgctxt "settype:message|error:json_missing_keys" msgid "" "Message data must be a JSON object with at least one of the following " "fields: `content`, `embed`, `embeds`" msgstr "" -#: src/core/setting_types.py:202 +#: src/core/setting_types.py:206 msgctxt "settype:message|error:json_embed_type" msgid "`embed` field must be a valid JSON object." msgstr "" -#: src/core/setting_types.py:210 +#: src/core/setting_types.py:214 msgctxt "settype:message|error:json_embeds_type" msgid "`embeds` field must be a list." msgstr "" -#: src/core/setting_types.py:217 +#: src/core/setting_types.py:221 msgctxt "settype:message|error:json_embed_embeds" msgid "Message data cannot include both `embed` and `embeds`." msgstr "" -#: src/core/setting_types.py:225 +#: src/core/setting_types.py:229 msgctxt "settype:message|error:json_content_type" msgid "`content` field must be a string." msgstr "" -#: src/core/setting_types.py:241 +#: src/core/setting_types.py:245 #, possible-python-brace-format msgctxt "ui:settype:message|error:embed_conversion" msgid "" @@ -116,7 +118,7 @@ msgid "" "**Error:** `{exception}`" msgstr "" -#: src/core/setting_types.py:269 +#: src/core/setting_types.py:273 msgctxt "settype:message|format:too_long" msgid "Too long to display! See Preview." msgstr "" diff --git a/locales/templates/member_admin.pot b/locales/templates/member_admin.pot index 9868296e..02fa3378 100644 --- a/locales/templates/member_admin.pot +++ b/locales/templates/member_admin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -44,7 +44,7 @@ msgstr "" #: src/modules/member_admin/settingui.py:213 msgctxt "ui:memberadmin|embed|title" -msgid "Member Admin Configuration Panel" +msgid "Greetings and Initial Roles Panel" msgstr "" #: src/modules/member_admin/settingui.py:257 @@ -67,39 +67,39 @@ msgctxt "dash:member_admin|section:initial_roles|name" msgid "Initial Roles ({commands[configure welcome]})" msgstr "" -#: src/modules/member_admin/cog.py:234 +#: src/modules/member_admin/cog.py:239 msgctxt "cmd:resetmember" msgid "resetmember" msgstr "" -#: src/modules/member_admin/cog.py:237 +#: src/modules/member_admin/cog.py:242 msgctxt "cmd:resetmember|desc" msgid "Reset (server-associated) member data for the target member or user." msgstr "" -#: src/modules/member_admin/cog.py:241 +#: src/modules/member_admin/cog.py:246 msgctxt "cmd:resetmember|param:target" msgid "member_to_reset" msgstr "" -#: src/modules/member_admin/cog.py:242 +#: src/modules/member_admin/cog.py:247 msgctxt "cmd:resetmember|param:saved_roles" msgid "saved_roles" msgstr "" -#: src/modules/member_admin/cog.py:247 +#: src/modules/member_admin/cog.py:252 msgctxt "cmd:resetmember|param:target|desc" msgid "Choose the member (current or past) you want to reset." msgstr "" -#: src/modules/member_admin/cog.py:251 +#: src/modules/member_admin/cog.py:256 msgctxt "cmd:resetmember|param:saved_roles|desc" msgid "" "Clear the saved roles for this member, so their past roles are not restored " "on rejoin." msgstr "" -#: src/modules/member_admin/cog.py:278 +#: src/modules/member_admin/cog.py:283 #, possible-python-brace-format msgctxt "cmd:resetmember|reset:saved_roles|success" msgid "" @@ -107,17 +107,17 @@ msgid "" "roles if they rejoin." msgstr "" -#: src/modules/member_admin/cog.py:286 +#: src/modules/member_admin/cog.py:291 msgctxt "cmd:resetmember|error:nothing_to_do" msgid "No reset operation selected, nothing to do." msgstr "" -#: src/modules/member_admin/cog.py:302 +#: src/modules/member_admin/cog.py:307 msgctxt "cmd:configure_welcome" msgid "welcome" msgstr "" -#: src/modules/member_admin/cog.py:305 +#: src/modules/member_admin/cog.py:310 msgctxt "cmd:configure_welcome|desc" msgid "Configure new member greetings and roles." msgstr "" @@ -180,45 +180,45 @@ msgctxt "guildset:greeting_channel|accepts" msgid "Name or id of the greeting channel, or 0 for DM." msgstr "" -#: src/modules/member_admin/settings.py:67 +#: src/modules/member_admin/settings.py:68 msgctxt "guildset:greeting_channel|set_response:unset" msgid "Welcome messages will now be sent via direct message." msgstr "" -#: src/modules/member_admin/settings.py:72 +#: src/modules/member_admin/settings.py:73 #, possible-python-brace-format msgctxt "guildset:greeting_channel|set_response:set" msgid "Welcome messages will now be sent to {channel}" msgstr "" -#: src/modules/member_admin/settings.py:84 +#: src/modules/member_admin/settings.py:85 msgctxt "guildset:greeting_channel|formmatted:unset" msgid "Direct Message" msgstr "" -#: src/modules/member_admin/settings.py:91 +#: src/modules/member_admin/settings.py:92 msgctxt "guildset:greeting_message" msgid "welcome_message" msgstr "" -#: src/modules/member_admin/settings.py:95 +#: src/modules/member_admin/settings.py:96 msgctxt "guildset:greeting_message|desc" msgid "Custom message used to greet new members when they join the server." msgstr "" -#: src/modules/member_admin/settings.py:99 +#: src/modules/member_admin/settings.py:100 msgctxt "guildset:greeting_message|long_desc" msgid "" "When set, this message will be sent to the `welcome_channel` when a *new* " "member joins the server. If not set, no message will be sent." msgstr "" -#: src/modules/member_admin/settings.py:104 +#: src/modules/member_admin/settings.py:105 msgctxt "guildset:greeting_message|accepts" msgid "JSON formatted greeting message data" msgstr "" -#: src/modules/member_admin/settings.py:108 +#: src/modules/member_admin/settings.py:109 msgctxt "guildset:greeting_message|default" msgid "" "\n" @@ -236,55 +236,55 @@ msgid "" " " msgstr "" -#: src/modules/member_admin/settings.py:136 +#: src/modules/member_admin/settings.py:137 msgctxt "guildset:greeting_message|set_response:unset" msgid "Welcome message unset! New members will not be greeted." msgstr "" -#: src/modules/member_admin/settings.py:141 +#: src/modules/member_admin/settings.py:142 msgctxt "guildset:greeting_message|set_response:set" msgid "The welcome message has been updated." msgstr "" -#: src/modules/member_admin/settings.py:153 +#: src/modules/member_admin/settings.py:154 msgctxt "guildset:greeting_message|formmatted:unset" msgid "Not set, members will not be welcomed." msgstr "" -#: src/modules/member_admin/settings.py:200 +#: src/modules/member_admin/settings.py:201 msgctxt "guildset:greeting_message|embed_field|formatkeys|explanation" msgid "The following placeholders will be substituted with their values." msgstr "" -#: src/modules/member_admin/settings.py:203 +#: src/modules/member_admin/settings.py:204 msgctxt "guildset:greeting_message|embed_field|formatkeys|name" msgid "Placeholders" msgstr "" -#: src/modules/member_admin/settings.py:213 +#: src/modules/member_admin/settings.py:214 msgctxt "guildset:returning_message" msgid "returning_message" msgstr "" -#: src/modules/member_admin/settings.py:217 +#: src/modules/member_admin/settings.py:218 msgctxt "guildset:returning_message|desc" msgid "" "Custom message used to greet returning members when they rejoin the server." msgstr "" -#: src/modules/member_admin/settings.py:221 +#: src/modules/member_admin/settings.py:222 msgctxt "guildset:returning_message|long_desc" msgid "" "When set, this message will be sent to the `welcome_channel` when a member " "*returns* to the server. If not set, no message will be sent." msgstr "" -#: src/modules/member_admin/settings.py:226 +#: src/modules/member_admin/settings.py:227 msgctxt "guildset:returning_message|accepts" msgid "JSON formatted returning message data" msgstr "" -#: src/modules/member_admin/settings.py:230 +#: src/modules/member_admin/settings.py:231 msgctxt "guildset:returning_message|default" msgid "" "\n" @@ -300,47 +300,47 @@ msgid "" " " msgstr "" -#: src/modules/member_admin/settings.py:247 +#: src/modules/member_admin/settings.py:248 msgctxt "guildset:returning_message|formatkey:last_time" msgid "Unix timestamp of the last time the member was seen in the server." msgstr "" -#: src/modules/member_admin/settings.py:258 +#: src/modules/member_admin/settings.py:259 msgctxt "guildset:returning_message|set_response:unset" msgid "Returning member greeting unset! Will use `welcome_message` if set." msgstr "" -#: src/modules/member_admin/settings.py:263 +#: src/modules/member_admin/settings.py:264 msgctxt "guildset:greeting_message|set_response:set" msgid "The returning member greeting has been updated." msgstr "" -#: src/modules/member_admin/settings.py:275 +#: src/modules/member_admin/settings.py:276 msgctxt "guildset:greeting_message|formmatted:unset" msgid "Not set, will use the `welcome_message` if set." msgstr "" -#: src/modules/member_admin/settings.py:325 +#: src/modules/member_admin/settings.py:326 msgctxt "guildset:returning_message|embed_field|formatkeys|explanation" msgid "In *addition* to the placeholders supported by `welcome_message`" msgstr "" -#: src/modules/member_admin/settings.py:328 +#: src/modules/member_admin/settings.py:329 msgctxt "guildset:returning_message|embed_field|formatkeys|" msgid "Placeholders" msgstr "" -#: src/modules/member_admin/settings.py:339 +#: src/modules/member_admin/settings.py:340 msgctxt "guildset:autoroles" msgid "autoroles" msgstr "" -#: src/modules/member_admin/settings.py:343 +#: src/modules/member_admin/settings.py:344 msgctxt "guildset:autoroles|desc" msgid "Roles given to new members when they join the server." msgstr "" -#: src/modules/member_admin/settings.py:347 +#: src/modules/member_admin/settings.py:348 msgctxt "guildset:autoroles|long_desc" msgid "" "These roles will be given when a member joins the server. If " @@ -348,32 +348,32 @@ msgid "" "returning member." msgstr "" -#: src/modules/member_admin/settings.py:361 +#: src/modules/member_admin/settings.py:362 msgctxt "guildset:bot_autoroles" msgid "bot_autoroles" msgstr "" -#: src/modules/member_admin/settings.py:365 +#: src/modules/member_admin/settings.py:366 msgctxt "guildset:bot_autoroles|desc" msgid "Roles given to new bots when they join the server." msgstr "" -#: src/modules/member_admin/settings.py:369 +#: src/modules/member_admin/settings.py:370 msgctxt "guildset:bot_autoroles|long_desc" msgid "These roles will be given when a bot joins the server." msgstr "" -#: src/modules/member_admin/settings.py:382 +#: src/modules/member_admin/settings.py:383 msgctxt "guildset:role_persistence" msgid "role_persistence" msgstr "" -#: src/modules/member_admin/settings.py:385 +#: src/modules/member_admin/settings.py:386 msgctxt "guildset:role_persistence|desc" msgid "Whether member roles should be restored on rejoin." msgstr "" -#: src/modules/member_admin/settings.py:389 +#: src/modules/member_admin/settings.py:390 msgctxt "guildset:role_persistence|long_desc" msgid "" "If enabled, member roles will be stored when they leave the server, and then " @@ -381,12 +381,12 @@ msgid "" "may conflict with other bots who manage join roles." msgstr "" -#: src/modules/member_admin/settings.py:405 +#: src/modules/member_admin/settings.py:406 msgctxt "guildset:role_persistence|set_response:off" msgid "Roles will not be restored when members rejoin." msgstr "" -#: src/modules/member_admin/settings.py:410 +#: src/modules/member_admin/settings.py:411 msgctxt "guildset:greeting_message|set_response:on" msgid "Roles will now be restored when members rejoin." msgstr "" diff --git a/locales/templates/meta.pot b/locales/templates/meta.pot index 77687e92..67158691 100644 --- a/locales/templates/meta.pot +++ b/locales/templates/meta.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/moderation.pot b/locales/templates/moderation.pot index 609b0bc6..eeaaa78d 100644 --- a/locales/templates/moderation.pot +++ b/locales/templates/moderation.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/monthly-gui.pot b/locales/templates/monthly-gui.pot index a7006170..5536f040 100644 --- a/locales/templates/monthly-gui.pot +++ b/locales/templates/monthly-gui.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -143,22 +143,40 @@ msgstr "" #: src/gui/cards/monthly.py:320 #, possible-python-brace-format -msgctxt "ui:monthlystats|stats:daily_average|value" +msgctxt "skin:monthlystats|mode:study|stats:daily_average|value" msgid "{count} hours" msgstr "" #: src/gui/cards/monthly.py:324 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:voice|stats:daily_average|value" +msgid "{count} hours" +msgstr "" + +#: src/gui/cards/monthly.py:328 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:text|stats:daily_average|value" +msgid "{count} msgs" +msgstr "" + +#: src/gui/cards/monthly.py:332 +#, possible-python-brace-format +msgctxt "skin:monthlystats|mode:anki|stats:daily_average|value" +msgid "{count} cards" +msgstr "" + +#: src/gui/cards/monthly.py:342 msgctxt "ui:monthlystats|stats:days_active|key" msgid "Days Active:" msgstr "" -#: src/gui/cards/monthly.py:328 +#: src/gui/cards/monthly.py:346 #, possible-python-brace-format msgctxt "ui:monthlystats|stats:days_active|value" msgid "{count} days" msgstr "" -#: src/gui/cards/monthly.py:341 +#: src/gui/cards/monthly.py:359 #, possible-python-brace-format msgctxt "skin:monthlystats|footer" msgid "Monthly Statistics • As of {day} {month} • {name} {discrim}" diff --git a/locales/templates/profile-gui.pot b/locales/templates/profile-gui.pot index 0a3fbac4..44f98a7e 100644 --- a/locales/templates/profile-gui.pot +++ b/locales/templates/profile-gui.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/ranks.pot b/locales/templates/ranks.pot index 6f0fcf33..dbdd0f3b 100644 --- a/locales/templates/ranks.pot +++ b/locales/templates/ranks.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -32,17 +32,22 @@ msgctxt "cmd:configure_ranks|param:rank_type|choice:message" msgid "Message" msgstr "" -#: src/modules/ranks/cog.py:406 +#: src/modules/ranks/cog.py:498 msgctxt "event:rank_update|embed:notify" msgid "New Activity Rank Attained!" msgstr "" -#: src/modules/ranks/cog.py:516 +#: src/modules/ranks/cog.py:607 +msgctxt "rank_refresh|error:cannot_chunk|desc" +msgid "Could not retrieve member list from Discord. Please try again later." +msgstr "" + +#: src/modules/ranks/cog.py:620 msgctxt "rank_refresh|error:roles_dne|desc" msgid "Some ranks have invalid or deleted roles! Please remove them first." msgstr "" -#: src/modules/ranks/cog.py:526 +#: src/modules/ranks/cog.py:630 #, possible-python-brace-format msgctxt "rank_refresh|error:unassignable_roles|desc" msgid "" @@ -50,36 +55,36 @@ msgid "" "{roles}" msgstr "" -#: src/modules/ranks/cog.py:596 +#: src/modules/ranks/cog.py:700 msgctxt "rank_refresh|remove_roles|audit" msgid "Removing invalid rank role." msgstr "" -#: src/modules/ranks/cog.py:610 +#: src/modules/ranks/cog.py:714 #, possible-python-brace-format msgctxt "rank_refresh|remove_roles|small_error" msgid "*Could not remove ranks from {member}*" msgstr "" -#: src/modules/ranks/cog.py:617 +#: src/modules/ranks/cog.py:721 msgctxt "rank_refresh|remove_roles|error:too_many_issues" msgid "" "Too many issues occurred while removing ranks! Please check my permissions " "and try again in a few minutes." msgstr "" -#: src/modules/ranks/cog.py:631 +#: src/modules/ranks/cog.py:735 msgctxt "rank_refresh|add_roles|audit" msgid "Adding rank role from refresh" msgstr "" -#: src/modules/ranks/cog.py:645 +#: src/modules/ranks/cog.py:749 #, possible-python-brace-format msgctxt "rank_refresh|add_roles|small_error" msgid "*Could not add {role} to {member}*" msgstr "" -#: src/modules/ranks/cog.py:652 +#: src/modules/ranks/cog.py:756 msgctxt "rank_refresh|add_roles|error:too_many_issues" msgid "" "Too many issues occurred while adding ranks! Please check my permissions and " @@ -87,22 +92,22 @@ msgid "" msgstr "" #. ---------- Commands ---------- -#: src/modules/ranks/cog.py:677 +#: src/modules/ranks/cog.py:781 msgctxt "cmd:ranks" msgid "ranks" msgstr "" -#: src/modules/ranks/cog.py:709 +#: src/modules/ranks/cog.py:813 msgctxt "cmd:configure_ranks" msgid "ranks" msgstr "" -#: src/modules/ranks/cog.py:710 +#: src/modules/ranks/cog.py:814 msgctxt "cmd:configure_ranks|desc" msgid "Configure Activity Ranks" msgstr "" -#: src/modules/ranks/cog.py:770 +#: src/modules/ranks/cog.py:874 #, possible-python-brace-format msgctxt "" "cmd:configure_ranks|response:updated|setting:notification|withdm_withchannel" @@ -111,20 +116,20 @@ msgid "" "otherwise to {channel}" msgstr "" -#: src/modules/ranks/cog.py:776 +#: src/modules/ranks/cog.py:880 msgctxt "" "cmd:configure_ranks|response:updated|setting:notification|withdm_nochannel" msgid "Rank update notifications will be sent via **direct message**." msgstr "" -#: src/modules/ranks/cog.py:782 +#: src/modules/ranks/cog.py:886 #, possible-python-brace-format msgctxt "" "cmd:configure_ranks|response:updated|setting:notification|nodm_withchannel" msgid "Rank update notifications will be sent to {channel}." msgstr "" -#: src/modules/ranks/cog.py:787 +#: src/modules/ranks/cog.py:891 msgctxt "" "cmd:configure_ranks|response:updated|setting:notification|nodm_nochannel" msgid "Members will not be notified when their activity rank updates." @@ -346,31 +351,31 @@ msgctxt "guildset:dm_ranks|response:false" msgid "I will never direct message members upon rank advancement." msgstr "" -#: src/modules/ranks/ui/preview.py:74 +#: src/modules/ranks/ui/preview.py:75 msgctxt "ui:rank_preview|button:edit|error:role_deleted" msgid "" "The role underlying this rank no longer exists! Please select a new role " "from the role menu." msgstr "" -#: src/modules/ranks/ui/preview.py:81 +#: src/modules/ranks/ui/preview.py:82 msgctxt "ui:rank_preview|button:edit|error:role_not_assignable" msgid "" "I do not have permission to edit the underlying role! Please select a new " "role from the role menu, or ensure my top role is above the selected role." msgstr "" -#: src/modules/ranks/ui/preview.py:90 +#: src/modules/ranks/ui/preview.py:91 msgctxt "ui:rank_preview|button:edit|error|title" msgid "Failed to edit rank!" msgstr "" -#: src/modules/ranks/ui/preview.py:108 +#: src/modules/ranks/ui/preview.py:109 msgctxt "ui:rank_preview|button:edit|label" msgid "Edit" msgstr "" -#: src/modules/ranks/ui/preview.py:139 +#: src/modules/ranks/ui/preview.py:142 #, possible-python-brace-format msgctxt "ui:rank_preview|button:delete|response:success|description|with_role" msgid "" @@ -378,24 +383,24 @@ msgid "" "the role." msgstr "" -#: src/modules/ranks/ui/preview.py:144 +#: src/modules/ranks/ui/preview.py:147 #, possible-python-brace-format msgctxt "ui:rank_preview|button:delete|response:success|description|no_role" msgid "You have deleted the rank {mention}." msgstr "" -#: src/modules/ranks/ui/preview.py:150 +#: src/modules/ranks/ui/preview.py:153 msgctxt "ui:rank_preview|button:delete|response:success|title" msgid "Rank Deleted" msgstr "" -#: src/modules/ranks/ui/preview.py:160 +#: src/modules/ranks/ui/preview.py:163 msgctxt "" "ui:rank_preview|button:delete|response:success|button:delete_role|label" msgid "Delete Role" msgstr "" -#: src/modules/ranks/ui/preview.py:176 +#: src/modules/ranks/ui/preview.py:179 #, possible-python-brace-format msgctxt "" "ui:rank_preview|button:delete|response:success|button:delete_role|response:" @@ -405,7 +410,7 @@ msgid "" "unknown error." msgstr "" -#: src/modules/ranks/ui/preview.py:182 +#: src/modules/ranks/ui/preview.py:185 #, possible-python-brace-format msgctxt "" "ui:rank_preview|button:delete|response:success|button:delete_role|response:" @@ -413,37 +418,24 @@ msgctxt "" msgid "You have deleted the rank **{name}** along with the underlying role." msgstr "" -#: src/modules/ranks/ui/preview.py:199 +#: src/modules/ranks/ui/preview.py:202 msgctxt "ui:rank_preview|button:delete|label" msgid "Delete Rank" msgstr "" -#: src/modules/ranks/ui/preview.py:219 -#, possible-python-brace-format -msgctxt "ui:rank_preview|menu:roles|error:above_caller" -msgid "" -"You have insufficient permissions to assign {mention} as a rank role! You " -"may only manage roles below your top role." -msgstr "" - -#: src/modules/ranks/ui/preview.py:225 -msgctxt "ui:rank_preview|menu:roles|error:above_caller|title" -msgid "Insufficient permissions!" -msgstr "" - -#: src/modules/ranks/ui/preview.py:241 +#: src/modules/ranks/ui/preview.py:232 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:is_default" msgid "The @everyone role cannot be removed, and cannot be a rank!" msgstr "" -#: src/modules/ranks/ui/preview.py:246 +#: src/modules/ranks/ui/preview.py:237 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:is_managed" msgid "" "The role is managed by another application or integration, and cannot be a " "rank!" msgstr "" -#: src/modules/ranks/ui/preview.py:251 +#: src/modules/ranks/ui/preview.py:242 msgctxt "" "ui:rank_preview|menu:roles|error:not_assignable|suberror:no_permissions" msgid "" @@ -451,121 +443,121 @@ msgid "" "manage ranks!" msgstr "" -#: src/modules/ranks/ui/preview.py:256 +#: src/modules/ranks/ui/preview.py:247 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:above_me" msgid "" "This role is above my top role in the role hierarchy, so I cannot add or " "remove it!" msgstr "" -#: src/modules/ranks/ui/preview.py:262 +#: src/modules/ranks/ui/preview.py:253 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|suberror:other" msgid "I am not able to manage the selected role, so it cannot be a rank!" msgstr "" -#: src/modules/ranks/ui/preview.py:268 +#: src/modules/ranks/ui/preview.py:259 msgctxt "ui:rank_preview|menu:roles|error:not_assignable|title" msgid "Could not update rank!" msgstr "" -#: src/modules/ranks/ui/preview.py:278 +#: src/modules/ranks/ui/preview.py:269 msgctxt "ui:rank_preview|menu:roles|placeholder" msgid "Update Rank Role" msgstr "" -#: src/modules/ranks/ui/preview.py:290 +#: src/modules/ranks/ui/preview.py:281 msgctxt "ui:rank_preview|embed|title" msgid "Rank Information" msgstr "" -#: src/modules/ranks/ui/preview.py:297 +#: src/modules/ranks/ui/preview.py:288 msgctxt "ui:rank_preview|embed|field:role|name" msgid "Role" msgstr "" -#: src/modules/ranks/ui/preview.py:304 +#: src/modules/ranks/ui/preview.py:295 msgctxt "ui:rank_preview|embed|field:required|name" msgid "Required" msgstr "" -#: src/modules/ranks/ui/preview.py:311 +#: src/modules/ranks/ui/preview.py:302 msgctxt "ui:rank_preview|embed|field:reward|name" msgid "Reward" msgstr "" -#: src/modules/ranks/ui/preview.py:320 +#: src/modules/ranks/ui/preview.py:311 msgctxt "ui:rank_preview|embed|field:message" msgid "Congratulatory Message" msgstr "" -#: src/modules/ranks/ui/refresh.py:125 +#: src/modules/ranks/ui/refresh.py:134 msgctxt "ui:refresh_ranks|embed|title:errored" msgid "Could not refresh the server ranks!" msgstr "" -#: src/modules/ranks/ui/refresh.py:133 +#: src/modules/ranks/ui/refresh.py:142 msgctxt "ui:refresh_ranks|embed|title:done" msgid "Rank refresh complete!" msgstr "" -#: src/modules/ranks/ui/refresh.py:139 +#: src/modules/ranks/ui/refresh.py:148 msgctxt "ui:refresh_ranks|embed|title:working" msgid "Refreshing your server ranks, please wait." msgstr "" -#: src/modules/ranks/ui/refresh.py:157 +#: src/modules/ranks/ui/refresh.py:166 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:ranks" msgid "**Loading server ranks:** {emoji}" msgstr "" -#: src/modules/ranks/ui/refresh.py:167 +#: src/modules/ranks/ui/refresh.py:176 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:members" msgid "**Loading server members:** {emoji}" msgstr "" -#: src/modules/ranks/ui/refresh.py:177 +#: src/modules/ranks/ui/refresh.py:186 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:roles" msgid "**Loading rank roles:** {emoji}" msgstr "" -#: src/modules/ranks/ui/refresh.py:187 +#: src/modules/ranks/ui/refresh.py:196 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:compute" msgid "**Computing correct ranks:** {emoji}" msgstr "" -#: src/modules/ranks/ui/refresh.py:198 +#: src/modules/ranks/ui/refresh.py:207 msgctxt "ui:refresh_ranks|embed|field:remove|name" msgid "Removing invalid rank roles from members" msgstr "" -#: src/modules/ranks/ui/refresh.py:202 +#: src/modules/ranks/ui/refresh.py:211 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|field:remove|value" msgid "{progress} {done}/{total} removed" msgstr "" -#: src/modules/ranks/ui/refresh.py:213 +#: src/modules/ranks/ui/refresh.py:222 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:remove" msgid "**Removed invalid ranks:** {done}/{target}" msgstr "" -#: src/modules/ranks/ui/refresh.py:221 +#: src/modules/ranks/ui/refresh.py:230 msgctxt "ui:refresh_ranks|embed|field:add|name" msgid "Giving members their rank roles" msgstr "" -#: src/modules/ranks/ui/refresh.py:225 +#: src/modules/ranks/ui/refresh.py:234 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|field:add|value" msgid "{progress} {done}/{total} given" msgstr "" -#: src/modules/ranks/ui/refresh.py:236 +#: src/modules/ranks/ui/refresh.py:245 #, possible-python-brace-format msgctxt "ui:refresh_ranks|embed|line:add" msgid "**Updated member ranks:** {done}/{target}" @@ -621,67 +613,54 @@ msgctxt "dash:rank|dropdown|placeholder" msgid "Activity Rank Panel" msgstr "" -#: src/modules/ranks/ui/overview.py:94 +#: src/modules/ranks/ui/overview.py:95 msgctxt "ui:rank_overview|button:auto|label" msgid "Auto Create" msgstr "" -#: src/modules/ranks/ui/overview.py:109 +#: src/modules/ranks/ui/overview.py:110 msgctxt "ui:rank_overview|button:refresh|label" msgid "Refresh Member Ranks" msgstr "" -#: src/modules/ranks/ui/overview.py:121 +#: src/modules/ranks/ui/overview.py:122 msgctxt "ui:rank_overview|button:clear|confirm" msgid "Are you sure you want to **delete all activity ranks** in this server?" msgstr "" -#: src/modules/ranks/ui/overview.py:126 +#: src/modules/ranks/ui/overview.py:127 msgctxt "ui:rank_overview|button:clear|confirm|button:yes" msgid "Yes, clear ranks" msgstr "" -#: src/modules/ranks/ui/overview.py:132 +#: src/modules/ranks/ui/overview.py:133 msgctxt "ui:rank_overview|button:clear|confirm|button:no" msgid "Cancel" msgstr "" -#: src/modules/ranks/ui/overview.py:148 +#: src/modules/ranks/ui/overview.py:149 msgctxt "ui:rank_overview|button:clear|label" msgid "Clear Ranks" msgstr "" -#: src/modules/ranks/ui/overview.py:178 +#: src/modules/ranks/ui/overview.py:179 msgctxt "ui:rank_overview|button:create|label" msgid "Create Rank" msgstr "" -#: src/modules/ranks/ui/overview.py:194 -#, possible-python-brace-format -msgctxt "ui:rank_overview|menu:roles|error:above_caller" -msgid "" -"You have insufficient permissions to assign {mention} as a rank role! You " -"may only manage roles below your top role." -msgstr "" - -#: src/modules/ranks/ui/overview.py:200 -msgctxt "ui:rank_overview|menu:roles|error:above_caller|title" -msgid "Insufficient permissions!" -msgstr "" - -#: src/modules/ranks/ui/overview.py:233 +#: src/modules/ranks/ui/overview.py:222 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:is_default" msgid "The @everyone role cannot be removed, and cannot be a rank!" msgstr "" -#: src/modules/ranks/ui/overview.py:238 +#: src/modules/ranks/ui/overview.py:227 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:is_managed" msgid "" "The role is managed by another application or integration, and cannot be a " "rank!" msgstr "" -#: src/modules/ranks/ui/overview.py:243 +#: src/modules/ranks/ui/overview.py:232 msgctxt "" "ui:rank_overview|menu:roles|error:not_assignable|suberror:no_permissions" msgid "" @@ -689,45 +668,71 @@ msgid "" "manage ranks!" msgstr "" -#: src/modules/ranks/ui/overview.py:248 +#: src/modules/ranks/ui/overview.py:237 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:above_me" msgid "" "This role is above my top role in the role hierarchy, so I cannot add or " "remove it!" msgstr "" -#: src/modules/ranks/ui/overview.py:254 +#: src/modules/ranks/ui/overview.py:243 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|suberror:other" msgid "I am not able to manage the selected role, so it cannot be a rank!" msgstr "" -#: src/modules/ranks/ui/overview.py:260 +#: src/modules/ranks/ui/overview.py:249 msgctxt "ui:rank_overview|menu:roles|error:not_assignable|title" msgid "Could not create rank!" msgstr "" -#: src/modules/ranks/ui/overview.py:284 +#: src/modules/ranks/ui/overview.py:273 msgctxt "ui:rank_overview|menu:roles|placeholder" msgid "Create from role" msgstr "" -#: src/modules/ranks/ui/overview.py:301 +#: src/modules/ranks/ui/overview.py:290 msgctxt "ui:rank_overview|menu:ranks|placeholder" msgid "View or edit rank" msgstr "" -#: src/modules/ranks/ui/overview.py:387 +#: src/modules/ranks/ui/overview.py:376 +msgctxt "ui:rank_overview|embed:noranks|desc" +msgid "" +"No activity ranks have been set up!\n" +"Press 'AUTO' to automatically create a standard heirachy of voice | text | " +"xp ranks, or select a role or press Create below!" +msgstr "" + +#: src/modules/ranks/ui/overview.py:384 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|title|type:voice" +msgid "Voice Ranks in {guild_name}" +msgstr "" + +#: src/modules/ranks/ui/overview.py:389 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|title|type:xp" +msgid "XP ranks in {guild_name}" +msgstr "" + +#: src/modules/ranks/ui/overview.py:394 +#, possible-python-brace-format +msgctxt "ui:rank_overview|embed|title|type:message" +msgid "Message ranks in {guild_name}" +msgstr "" + +#: src/modules/ranks/ui/overview.py:406 msgctxt "ui:rank_overview|embed|field:note|name" msgid "Note" msgstr "" -#: src/modules/ranks/ui/overview.py:393 +#: src/modules/ranks/ui/overview.py:412 #, possible-python-brace-format msgctxt "ui:rank_overview|embed|field:note|value:with_season" msgid "Ranks are determined by activity since {timestamp}." msgstr "" -#: src/modules/ranks/ui/overview.py:400 +#: src/modules/ranks/ui/overview.py:419 #, possible-python-brace-format msgctxt "ui:rank_overview|embed|field:note|value:without_season" msgid "" @@ -736,7 +741,7 @@ msgid "" "ranks) set the `season_start` with {stats_cmd}" msgstr "" -#: src/modules/ranks/ui/overview.py:407 +#: src/modules/ranks/ui/overview.py:426 msgctxt "ui:rank_overview|embed|field:note|value|voice_addendum" msgid "" "Also note that ranks will only be updated when a member leaves a tracked " @@ -744,32 +749,6 @@ msgid "" "members manually." msgstr "" -#: src/modules/ranks/ui/overview.py:415 -msgctxt "ui:rank_overview|embed:noranks|desc" -msgid "" -"No activity ranks have been set up!\n" -"Press 'AUTO' to automatically create a standard heirachy of voice | text | " -"xp ranks, or select a role or press Create below!" -msgstr "" - -#: src/modules/ranks/ui/overview.py:423 -#, possible-python-brace-format -msgctxt "ui:rank_overview|embed|title|type:voice" -msgid "Voice Ranks in {guild_name}" -msgstr "" - -#: src/modules/ranks/ui/overview.py:428 -#, possible-python-brace-format -msgctxt "ui:rank_overview|embed|title|type:xp" -msgid "XP ranks in {guild_name}" -msgstr "" - -#: src/modules/ranks/ui/overview.py:433 -#, possible-python-brace-format -msgctxt "ui:rank_overview|embed|title|type:message" -msgid "Message ranks in {guild_name}" -msgstr "" - #: src/modules/ranks/ui/editor.py:33 msgctxt "ui:rank_editor|input:role_name|label" msgid "Role Name" diff --git a/locales/templates/reminders.pot b/locales/templates/reminders.pot index efc7a880..a2592ee1 100644 --- a/locales/templates/reminders.pot +++ b/locales/templates/reminders.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/rolemenus.pot b/locales/templates/rolemenus.pot index ee890f26..1e8099a7 100644 --- a/locales/templates/rolemenus.pot +++ b/locales/templates/rolemenus.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,6 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/modules/rolemenus/cog.py:41 msgctxt "argtype:menu_style|opt:reaction" @@ -50,12 +51,12 @@ msgid "" "I lack the `MANAGE_ROLES` permission required to offer roles from role menus." msgstr "" -#: src/modules/rolemenus/cog.py:300 +#: src/modules/rolemenus/cog.py:301 msgctxt "parse:message_link|suberror:message_dne" msgid "Could not find the linked message, has it been deleted?" msgstr "" -#: src/modules/rolemenus/cog.py:305 +#: src/modules/rolemenus/cog.py:306 #, possible-python-brace-format msgctxt "parse:message_link|suberror:no_perms" msgid "" @@ -63,20 +64,20 @@ msgid "" "{channel}." msgstr "" -#: src/modules/rolemenus/cog.py:310 +#: src/modules/rolemenus/cog.py:311 #, possible-python-brace-format msgctxt "parse:message_link|suberror:channel_dne" msgid "The channel `{channelid}` could not be found in this server." msgstr "" -#: src/modules/rolemenus/cog.py:315 +#: src/modules/rolemenus/cog.py:316 msgctxt "parse:message_link|suberror:malformed_link" msgid "" "Malformed message link. Please copy the link by right clicking the target " "message." msgstr "" -#: src/modules/rolemenus/cog.py:322 +#: src/modules/rolemenus/cog.py:323 #, possible-python-brace-format msgctxt "parse:message_link|error" msgid "" @@ -84,136 +85,136 @@ msgid "" "**ERROR:** {error}" msgstr "" -#: src/modules/rolemenus/cog.py:434 +#: src/modules/rolemenus/cog.py:435 msgctxt "cmd:rolemenus" msgid "rolemenus" msgstr "" -#: src/modules/rolemenus/cog.py:437 +#: src/modules/rolemenus/cog.py:438 msgctxt "cmd:rolemenus|desc" msgid "View and configure the role menus in this server." msgstr "" -#: src/modules/rolemenus/cog.py:454 +#: src/modules/rolemenus/cog.py:455 msgctxt "cmd:rolemenus|error:author_perms" msgid "" "You need the `MANAGE_ROLES` permission in order to manage the server role " "menus." msgstr "" -#: src/modules/rolemenus/cog.py:461 +#: src/modules/rolemenus/cog.py:462 msgctxt "cmd:rolemenus|error:my_perms" msgid "" "I lack the `MANAGE_ROLES` permission required to offer roles from role menus." msgstr "" -#: src/modules/rolemenus/cog.py:496 +#: src/modules/rolemenus/cog.py:497 #, possible-python-brace-format msgctxt "acmpl:menus|choice:no_choices|name" msgid "No role menus matching '{partial}'" msgstr "" -#: src/modules/rolemenus/cog.py:515 +#: src/modules/rolemenus/cog.py:516 msgctxt "acmpl:menuroles|param:menu|keyname" msgid "menu" msgstr "" -#: src/modules/rolemenus/cog.py:521 +#: src/modules/rolemenus/cog.py:522 msgctxt "acmpl:menuroles|choice:no_menu|name" msgid "Please select a menu first" msgstr "" -#: src/modules/rolemenus/cog.py:545 +#: src/modules/rolemenus/cog.py:546 #, possible-python-brace-format msgctxt "acmpl:menuroles|choice:invalid_menu|name" msgid "Menu '{name}' does not exist!" msgstr "" -#: src/modules/rolemenus/cog.py:574 +#: src/modules/rolemenus/cog.py:575 #, possible-python-brace-format msgctxt "acmpl:menuroles|choice:no_matching|name" msgid "No roles in this menu matching '{partial}'" msgstr "" -#: src/modules/rolemenus/cog.py:581 +#: src/modules/rolemenus/cog.py:582 msgctxt "group:rolemenu" msgid "rolemenu" msgstr "" -#: src/modules/rolemenus/cog.py:584 +#: src/modules/rolemenus/cog.py:585 msgctxt "group:rolemenu|desc" msgid "Base command group for role menu configuration." msgstr "" -#: src/modules/rolemenus/cog.py:593 +#: src/modules/rolemenus/cog.py:594 msgctxt "cmd:rolemenu_create" msgid "newmenu" msgstr "" -#: src/modules/rolemenus/cog.py:596 +#: src/modules/rolemenus/cog.py:597 msgctxt "cmd:rolemenu_create|desc" msgid "Create a new role menu (optionally using an existing message)" msgstr "" -#: src/modules/rolemenus/cog.py:610 +#: src/modules/rolemenus/cog.py:611 msgctxt "cmd:rolemenu_create|param:message" msgid "message_link" msgstr "" -#: src/modules/rolemenus/cog.py:611 +#: src/modules/rolemenus/cog.py:612 msgctxt "cmd:rolemenu_create|param:menu_style" msgid "menu_style" msgstr "" -#: src/modules/rolemenus/cog.py:612 +#: src/modules/rolemenus/cog.py:613 msgctxt "cmd:rolemenu_create|param:remplate" msgid "template" msgstr "" -#: src/modules/rolemenus/cog.py:613 +#: src/modules/rolemenus/cog.py:614 msgctxt "cmd:rolemenu_create|param:rawmessage" msgid "custom_message" msgstr "" -#: src/modules/rolemenus/cog.py:623 +#: src/modules/rolemenus/cog.py:624 msgctxt "cmd:rolemenu_create|param:message|desc" msgid "Link to an existing message to turn it into a (reaction) role menu" msgstr "" -#: src/modules/rolemenus/cog.py:627 +#: src/modules/rolemenus/cog.py:628 msgctxt "cmd:rolemenu_create|param:menu_style" msgid "Selection style for this menu (using buttons, dropdowns, or reactions)" msgstr "" -#: src/modules/rolemenus/cog.py:631 +#: src/modules/rolemenus/cog.py:632 msgctxt "cmd:rolemenu_create|param:template" msgid "Template to use for the menu message body" msgstr "" -#: src/modules/rolemenus/cog.py:635 +#: src/modules/rolemenus/cog.py:636 msgctxt "cmd:rolemenu_create|param:rawmessage" msgid "Attach a custom menu message to use" msgstr "" -#: src/modules/rolemenus/cog.py:664 +#: src/modules/rolemenus/cog.py:665 msgctxt "cmd:rolemenu_create|error:author_perms" msgid "" "You need the `MANAGE_ROLES` permission in order to create new role menus." msgstr "" -#: src/modules/rolemenus/cog.py:671 +#: src/modules/rolemenus/cog.py:672 msgctxt "cmd:rolemenu_create|error:my_perms" msgid "" "I lack the `MANAGE_ROLES` permission needed to offer roles from role menus." msgstr "" -#: src/modules/rolemenus/cog.py:690 +#: src/modules/rolemenus/cog.py:691 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:message_exists" msgid "The message {link} already has a role menu! Use {edit_cmd} to edit it." msgstr "" -#: src/modules/rolemenus/cog.py:711 +#: src/modules/rolemenus/cog.py:712 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:style_notmine" msgid "" @@ -221,7 +222,7 @@ msgid "" "restriction)." msgstr "" -#: src/modules/rolemenus/cog.py:718 +#: src/modules/rolemenus/cog.py:719 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:rawmessage_notmine" msgid "" @@ -229,7 +230,7 @@ msgid "" "message!" msgstr "" -#: src/modules/rolemenus/cog.py:727 +#: src/modules/rolemenus/cog.py:728 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:template_notmine" msgid "" @@ -237,125 +238,153 @@ msgid "" "message!" msgstr "" -#: src/modules/rolemenus/cog.py:740 +#: src/modules/rolemenus/cog.py:741 #, possible-python-brace-format msgctxt "cmd:rolemenu_create|error:name_exists" msgid "A rolemenu called `{name}` already exists! Use {edit_cmd} to edit it." msgstr "" -#: src/modules/rolemenus/cog.py:788 +#: src/modules/rolemenus/cog.py:789 msgctxt "cmd:rolemenu_edit" msgid "editmenu" msgstr "" -#: src/modules/rolemenus/cog.py:791 +#: src/modules/rolemenus/cog.py:792 msgctxt "cmd:rolemenu_edit|desc" msgid "Edit an existing role menu." msgstr "" -#: src/modules/rolemenus/cog.py:800 +#: src/modules/rolemenus/cog.py:801 msgctxt "cmd:rolemenu_edit|param:name" msgid "name" msgstr "" -#: src/modules/rolemenus/cog.py:801 +#: src/modules/rolemenus/cog.py:802 msgctxt "cmd:rolemenu_edit|param:new_name" msgid "new_name" msgstr "" -#: src/modules/rolemenus/cog.py:802 +#: src/modules/rolemenus/cog.py:803 msgctxt "cmd:rolemenu_edit|param:channel" msgid "new_channel" msgstr "" -#: src/modules/rolemenus/cog.py:807 +#: src/modules/rolemenus/cog.py:808 msgctxt "cmd:rolemenu_edit|param:menu_style" msgid "menu_style" msgstr "" -#: src/modules/rolemenus/cog.py:808 +#: src/modules/rolemenus/cog.py:809 msgctxt "cmd:rolemenu_edit|param:remplate" msgid "template" msgstr "" -#: src/modules/rolemenus/cog.py:809 +#: src/modules/rolemenus/cog.py:810 msgctxt "cmd:rolemenu_edit|param:rawmessage" msgid "custom_message" msgstr "" -#: src/modules/rolemenus/cog.py:814 +#: src/modules/rolemenus/cog.py:815 msgctxt "cmd:rolemenu_edit|param:name|desc" msgid "Name of the menu to edit" msgstr "" -#: src/modules/rolemenus/cog.py:818 +#: src/modules/rolemenus/cog.py:819 msgctxt "cmd:rolemenu_edit|param:channel|desc" msgid "Server channel to move the menu to" msgstr "" -#: src/modules/rolemenus/cog.py:827 +#: src/modules/rolemenus/cog.py:828 msgctxt "cmd:rolemenu_edit|param:menu_style" msgid "Selection style for this menu (using buttons, dropdowns, or reactions)" msgstr "" -#: src/modules/rolemenus/cog.py:831 +#: src/modules/rolemenus/cog.py:832 msgctxt "cmd:rolemenu_edit|param:template" msgid "Template to use for the menu message body" msgstr "" -#: src/modules/rolemenus/cog.py:835 +#: src/modules/rolemenus/cog.py:836 msgctxt "cmd:rolemenu_edit|param:rawmessage" msgid "Attach a custom menu message to use" msgstr "" -#: src/modules/rolemenus/cog.py:864 +#: src/modules/rolemenus/cog.py:865 msgctxt "cmd:rolemenu_edit|error:author_perms" msgid "You need the `MANAGE_ROLES` permission in order to edit role menus." msgstr "" -#: src/modules/rolemenus/cog.py:871 +#: src/modules/rolemenus/cog.py:872 msgctxt "cmd:rolemenu_edit|error:my_perms" msgid "" "I lack the `MANAGE_ROLES` permission needed to offer roles from role menus." msgstr "" -#: src/modules/rolemenus/cog.py:894 +#: src/modules/rolemenus/cog.py:895 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "" -#: src/modules/rolemenus/cog.py:914 +#: src/modules/rolemenus/cog.py:916 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|parse:new_name|error:name_exists" msgid "A role menu with the name **{new_name}** already exists!" msgstr "" -#: src/modules/rolemenus/cog.py:951 +#: src/modules/rolemenus/cog.py:953 msgctxt "cmd:rolemenu_edit|parse:template|error:not_managed" msgid "" "Cannot set a template message for a role menu attached to a message I did " "not send." msgstr "" -#: src/modules/rolemenus/cog.py:962 +#: src/modules/rolemenus/cog.py:964 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|parse:template|success:template" msgid "Now using the `{name}` menu message template." msgstr "" -#: src/modules/rolemenus/cog.py:969 +#: src/modules/rolemenus/cog.py:971 msgctxt "cmd:rolemenu_edit|parse:template|success:custom" msgid "Now using a custom menu message." msgstr "" -#: src/modules/rolemenus/cog.py:994 +#: src/modules/rolemenus/cog.py:981 +msgctxt "cmd:rolemenu_edit|parse:style|error:not_managed" +msgid "" +"Cannot change the style of a role menu attached to a message I did not send." +msgstr "" + +#: src/modules/rolemenus/cog.py:991 +msgctxt "cmd:rolemenu_edit|parse:style|error:too_many_reactions" +msgid "Too many roles! Reaction role menus can have at most `20` roles." +msgstr "" + +#: src/modules/rolemenus/cog.py:1001 +msgctxt "cmd:rolemenu_edit|parse:style|error:incomplete_emojis" +msgid "" +"Cannot switch to the reaction role style! Every role needs a distinct emoji " +"first." +msgstr "" + +#: src/modules/rolemenus/cog.py:1008 +msgctxt "cmd:rolemenu_edit|parse:style|success" +msgid "Updated role menu style." +msgstr "" + +#: src/modules/rolemenus/cog.py:1022 +msgctxt "cmd:rolemenu_edit|parse:custom_message|success" +msgid "Custom menu message updated." +msgstr "" + +#: src/modules/rolemenus/cog.py:1037 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|repost|success" msgid "The role menu is now available at {message}" msgstr "" -#: src/modules/rolemenus/cog.py:1005 +#: src/modules/rolemenus/cog.py:1048 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|repost|error:forbidden" msgid "" @@ -363,7 +392,7 @@ msgid "" "permission in {channel}." msgstr "" -#: src/modules/rolemenus/cog.py:1010 +#: src/modules/rolemenus/cog.py:1053 #, possible-python-brace-format msgctxt "cmd:rolemenu_edit|repost|error:unknown" msgid "" @@ -371,40 +400,40 @@ msgid "" "**Error:** `{exception}`" msgstr "" -#: src/modules/rolemenus/cog.py:1044 +#: src/modules/rolemenus/cog.py:1092 msgctxt "cmd:rolemenu_delete" msgid "delmenu" msgstr "" -#: src/modules/rolemenus/cog.py:1047 +#: src/modules/rolemenus/cog.py:1095 msgctxt "cmd:rolemenu_delete|desc" msgid "Delete a role menu." msgstr "" -#: src/modules/rolemenus/cog.py:1051 +#: src/modules/rolemenus/cog.py:1099 msgctxt "cmd:rolemenu_delete|param:name" msgid "menu" msgstr "" -#: src/modules/rolemenus/cog.py:1056 +#: src/modules/rolemenus/cog.py:1104 msgctxt "cmd:rolemenu_delete|param:name|desc" msgid "Name of the rolemenu to delete." msgstr "" -#: src/modules/rolemenus/cog.py:1071 +#: src/modules/rolemenus/cog.py:1119 msgctxt "cmd:rolemenu_delete|error:author_perms" msgid "" "You need the `MANAGE_ROLES` permission in order to manage the server role " "menus." msgstr "" -#: src/modules/rolemenus/cog.py:1094 +#: src/modules/rolemenus/cog.py:1142 #, possible-python-brace-format msgctxt "cmd:rolemenu_delete|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "" -#: src/modules/rolemenus/cog.py:1102 +#: src/modules/rolemenus/cog.py:1150 #, possible-python-brace-format msgctxt "cmd:rolemenu_delete|confirm|title" msgid "" @@ -412,272 +441,272 @@ msgid "" "reversible!" msgstr "" -#: src/modules/rolemenus/cog.py:1107 +#: src/modules/rolemenus/cog.py:1155 msgctxt "cmd:rolemenu_delete|confirm|button:yes" msgid "Yes, Delete Now" msgstr "" -#: src/modules/rolemenus/cog.py:1112 +#: src/modules/rolemenus/cog.py:1160 msgctxt "cmd:rolemenu_delete|confirm|button:no" msgid "No, Cancel" msgstr "" -#: src/modules/rolemenus/cog.py:1137 +#: src/modules/rolemenus/cog.py:1185 #, possible-python-brace-format msgctxt "cmd:rolemenu_delete|success|desc" msgid "Successfully deleted the menu **{name}**" msgstr "" -#: src/modules/rolemenus/cog.py:1145 +#: src/modules/rolemenus/cog.py:1193 msgctxt "cmd:rolemenu_addrole" msgid "addrole" msgstr "" -#: src/modules/rolemenus/cog.py:1148 +#: src/modules/rolemenus/cog.py:1196 msgctxt "cmd:rolemenu_addrole|desc" msgid "Add a new role to an existing role menu." msgstr "" -#: src/modules/rolemenus/cog.py:1153 +#: src/modules/rolemenus/cog.py:1201 msgctxt "cmd:rolemenu_addrole|param:menu" msgid "menu" msgstr "" -#: src/modules/rolemenus/cog.py:1156 +#: src/modules/rolemenus/cog.py:1204 msgctxt "cmd:rolemenu_addrole|param:role" msgid "role" msgstr "" -#: src/modules/rolemenus/cog.py:1167 +#: src/modules/rolemenus/cog.py:1215 msgctxt "cmd:rolemenu_addrole|param:menu|desc" msgid "Name of the menu to add a role to" msgstr "" -#: src/modules/rolemenus/cog.py:1171 +#: src/modules/rolemenus/cog.py:1219 msgctxt "cmd:rolemenu_addrole|param:role|desc" msgid "Role to add to the menu" msgstr "" -#: src/modules/rolemenus/cog.py:1179 +#: src/modules/rolemenus/cog.py:1227 msgctxt "cmd:rolemenu_addrole|param:duration|desc" msgid "Lifetime of the role after selection in minutes." msgstr "" -#: src/modules/rolemenus/cog.py:1227 +#: src/modules/rolemenus/cog.py:1275 #, possible-python-brace-format msgctxt "cmd:rolemenu_addrole|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "" -#: src/modules/rolemenus/cog.py:1312 +#: src/modules/rolemenus/cog.py:1360 msgctxt "cmd:rolemenu_addrole|success:create|title" msgid "Added Menu Role" msgstr "" -#: src/modules/rolemenus/cog.py:1316 +#: src/modules/rolemenus/cog.py:1364 #, possible-python-brace-format msgctxt "cmd:rolemenu_addrole|success:create|desc" msgid "Add the role {role} to the menu **{menu}**." msgstr "" -#: src/modules/rolemenus/cog.py:1334 +#: src/modules/rolemenus/cog.py:1382 msgctxt "cmd:rolemenu_addrole|success:edit|title" msgid "Menu Role updated" msgstr "" -#: src/modules/rolemenus/cog.py:1346 +#: src/modules/rolemenus/cog.py:1394 #, possible-python-brace-format msgctxt "cmd:rolemenu_addrole|error:role_exists" msgid "The role {role} is already selectable from the menu **{menu}**" msgstr "" -#: src/modules/rolemenus/cog.py:1364 +#: src/modules/rolemenus/cog.py:1412 msgctxt "cmd:rolemenu_addrole|success|error:reaction|name" msgid "Note" msgstr "" -#: src/modules/rolemenus/cog.py:1376 +#: src/modules/rolemenus/cog.py:1424 msgctxt "cmd:rolemenu_addrole|success|button:editor|label" msgid "Edit Menu" msgstr "" -#: src/modules/rolemenus/cog.py:1393 +#: src/modules/rolemenus/cog.py:1441 msgctxt "cmd:rolemenu_editrole" msgid "editrole" msgstr "" -#: src/modules/rolemenus/cog.py:1396 +#: src/modules/rolemenus/cog.py:1444 msgctxt "cmd:rolemenu_editrole|desc" msgid "Edit role options in an existing role menu." msgstr "" -#: src/modules/rolemenus/cog.py:1401 +#: src/modules/rolemenus/cog.py:1449 msgctxt "cmd:rolemenu_editrole|param:menu" msgid "menu" msgstr "" -#: src/modules/rolemenus/cog.py:1404 +#: src/modules/rolemenus/cog.py:1452 msgctxt "cmd:rolemenu_editrole|param:menu_role" msgid "menu_role" msgstr "" -#: src/modules/rolemenus/cog.py:1407 +#: src/modules/rolemenus/cog.py:1455 msgctxt "cmd:rolemenu_editrole|param:role" msgid "new_role" msgstr "" -#: src/modules/rolemenus/cog.py:1418 +#: src/modules/rolemenus/cog.py:1466 msgctxt "cmd:rolemenu_editrole|param:menu|desc" msgid "Name of the menu to edit the role for" msgstr "" -#: src/modules/rolemenus/cog.py:1422 +#: src/modules/rolemenus/cog.py:1470 msgctxt "cmd:rolemenu_editrole|param:menu_role|desc" msgid "Label, name, or mention of the menu role to edit." msgstr "" -#: src/modules/rolemenus/cog.py:1426 +#: src/modules/rolemenus/cog.py:1474 msgctxt "cmd:rolemenu_editrole|param:role|desc" msgid "New server role this menu role should give." msgstr "" -#: src/modules/rolemenus/cog.py:1434 +#: src/modules/rolemenus/cog.py:1482 msgctxt "cmd:rolemenu_editrole|param:duration|desc" msgid "Lifetime of the role after selection in minutes." msgstr "" -#: src/modules/rolemenus/cog.py:1475 +#: src/modules/rolemenus/cog.py:1523 #, possible-python-brace-format msgctxt "cmd:rolemenu_editrole|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "" -#: src/modules/rolemenus/cog.py:1503 +#: src/modules/rolemenus/cog.py:1551 #, possible-python-brace-format msgctxt "cmd:rolemenu_editrole|error:role_not_found" msgid "The menu **{menu}** does not have the role **{name}**" msgstr "" -#: src/modules/rolemenus/cog.py:1569 +#: src/modules/rolemenus/cog.py:1617 msgctxt "cmd:rolemenu_editrole|success|title" msgid "Role menu role updated" msgstr "" -#: src/modules/rolemenus/cog.py:1584 +#: src/modules/rolemenus/cog.py:1632 msgctxt "cmd:rolemenu_editrole|success|error:reaction|name" msgid "Warning!" msgstr "" -#: src/modules/rolemenus/cog.py:1609 +#: src/modules/rolemenus/cog.py:1657 msgctxt "cmd:rolemenu_delrole" msgid "delrole" msgstr "" -#: src/modules/rolemenus/cog.py:1612 +#: src/modules/rolemenus/cog.py:1660 msgctxt "cmd:rolemenu_delrole|desc" msgid "Remove a role from a role menu." msgstr "" -#: src/modules/rolemenus/cog.py:1616 +#: src/modules/rolemenus/cog.py:1664 msgctxt "cmd:rolemenu_delrole|param:menu" msgid "menu" msgstr "" -#: src/modules/rolemenus/cog.py:1617 +#: src/modules/rolemenus/cog.py:1665 msgctxt "cmd:rolemenu_delrole|param:menu_role" msgid "menu_role" msgstr "" -#: src/modules/rolemenus/cog.py:1622 +#: src/modules/rolemenus/cog.py:1670 msgctxt "cmd:rolemenu_delrole|param:menu|desc" msgid "Name of the menu to delete the role from." msgstr "" -#: src/modules/rolemenus/cog.py:1626 +#: src/modules/rolemenus/cog.py:1674 msgctxt "cmd:rolemenu_delrole|param:menu_role|desc" msgid "Name, label, or mention of the role to delete." msgstr "" -#: src/modules/rolemenus/cog.py:1644 +#: src/modules/rolemenus/cog.py:1692 msgctxt "cmd:rolemenu_delrole|error:author_perms" msgid "" "You need the `MANAGE_ROLES` permission in order to manage the server role " "menus." msgstr "" -#: src/modules/rolemenus/cog.py:1668 +#: src/modules/rolemenus/cog.py:1716 #, possible-python-brace-format msgctxt "cmd:rolemenu_delrole|error:menu_not_found" msgid "This server does not have a role menu called `{name}`!" msgstr "" -#: src/modules/rolemenus/cog.py:1696 +#: src/modules/rolemenus/cog.py:1744 #, possible-python-brace-format msgctxt "cmd:rolemenu_delrole|error:role_not_found" msgid "The menu **{menu}** does not have the role **{name}**" msgstr "" -#: src/modules/rolemenus/cog.py:1713 +#: src/modules/rolemenus/cog.py:1761 #, possible-python-brace-format msgctxt "cmd:rolemenu_delrole|success" msgid "The role **{name}** was successfully removed from the menu **{menu}**." msgstr "" -#: src/modules/rolemenus/roleoptions.py:54 +#: src/modules/rolemenus/roleoptions.py:57 msgctxt "roleset:role" msgid "role" msgstr "" -#: src/modules/rolemenus/roleoptions.py:57 +#: src/modules/rolemenus/roleoptions.py:60 msgctxt "roleset:role|desc" msgid "The role associated to this menu item." msgstr "" -#: src/modules/rolemenus/roleoptions.py:61 +#: src/modules/rolemenus/roleoptions.py:64 msgctxt "roleset:role|long_desc" msgid "The role given when this menu item is selected in the role menu." msgstr "" -#: src/modules/rolemenus/roleoptions.py:74 +#: src/modules/rolemenus/roleoptions.py:77 #, possible-python-brace-format msgctxt "roleset:role|set_response:set" msgid "This menu item will now give the role {role}." msgstr "" -#: src/modules/rolemenus/roleoptions.py:82 +#: src/modules/rolemenus/roleoptions.py:88 msgctxt "roleset:label" msgid "label" msgstr "" -#: src/modules/rolemenus/roleoptions.py:85 +#: src/modules/rolemenus/roleoptions.py:91 msgctxt "roleset:label|desc" msgid "A short button label for this role." msgstr "" -#: src/modules/rolemenus/roleoptions.py:90 +#: src/modules/rolemenus/roleoptions.py:96 msgctxt "roleset:label|long_desc" msgid "" "A short name for this role, to be displayed in button labels, dropdown " "titles, and some menu layouts. By default uses the Discord role name." msgstr "" -#: src/modules/rolemenus/roleoptions.py:104 +#: src/modules/rolemenus/roleoptions.py:110 #, possible-python-brace-format msgctxt "roleset:role|set_response" msgid "This menu role is now called `{value}`." msgstr "" -#: src/modules/rolemenus/roleoptions.py:112 +#: src/modules/rolemenus/roleoptions.py:118 msgctxt "roleset:emoji" msgid "emoji" msgstr "" -#: src/modules/rolemenus/roleoptions.py:115 +#: src/modules/rolemenus/roleoptions.py:121 msgctxt "roleset:emoji|desc" msgid "The emoji associated with this role." msgstr "" -#: src/modules/rolemenus/roleoptions.py:119 +#: src/modules/rolemenus/roleoptions.py:125 msgctxt "roleset:emoji|long_desc" msgid "" "The role emoji is used for the reaction (in reaction role menus), and " @@ -685,110 +714,120 @@ msgid "" "The emoji is also displayed next to the role in most menu templates." msgstr "" -#: src/modules/rolemenus/roleoptions.py:157 +#: src/modules/rolemenus/roleoptions.py:165 #, possible-python-brace-format msgctxt "roleset:emoji|error:test_emoji" msgid "The selected emoji `{emoji}` is invalid or has been deleted." msgstr "" -#: src/modules/rolemenus/roleoptions.py:168 +#: src/modules/rolemenus/roleoptions.py:176 #, possible-python-brace-format msgctxt "roleset:emoji|set_response:set" msgid "The menu role emoji is now {emoji}." msgstr "" -#: src/modules/rolemenus/roleoptions.py:173 +#: src/modules/rolemenus/roleoptions.py:181 msgctxt "roleset:emoji|set_response:unset" msgid "The menu role emoji has been removed." msgstr "" -#: src/modules/rolemenus/roleoptions.py:181 +#: src/modules/rolemenus/roleoptions.py:189 msgctxt "roleset:description" msgid "description" msgstr "" -#: src/modules/rolemenus/roleoptions.py:184 +#: src/modules/rolemenus/roleoptions.py:192 msgctxt "roleset:description|desc" msgid "A longer description of this role." msgstr "" -#: src/modules/rolemenus/roleoptions.py:189 +#: src/modules/rolemenus/roleoptions.py:197 msgctxt "roleset:description|long_desc" msgid "" "The description is displayed under the role label in dropdown style menus. " "It may also be used as a substitution key in custom role selection responses." msgstr "" -#: src/modules/rolemenus/roleoptions.py:205 +#: src/modules/rolemenus/roleoptions.py:213 msgctxt "roleset:description|set_response:set" msgid "The role description has been set." msgstr "" -#: src/modules/rolemenus/roleoptions.py:210 +#: src/modules/rolemenus/roleoptions.py:218 msgctxt "roleset:description|set_response:unset" msgid "The role description has been removed." msgstr "" -#: src/modules/rolemenus/roleoptions.py:218 +#: src/modules/rolemenus/roleoptions.py:226 msgctxt "roleset:price" msgid "price" msgstr "" -#: src/modules/rolemenus/roleoptions.py:221 -msgctxt "roleset:price|desc" -msgid "Price of the role, in LionCoins." -msgstr "" - -#: src/modules/rolemenus/roleoptions.py:225 -msgctxt "roleset:price|long_desc" -msgid "How much the role costs when selected, in LionCoins." -msgstr "" - #: src/modules/rolemenus/roleoptions.py:229 +msgctxt "roleset:price|desc" +msgid "Price of the role, in LionCoins. May be negative." +msgstr "" + +#: src/modules/rolemenus/roleoptions.py:233 +msgctxt "roleset:price|long_desc" +msgid "" +"How many LionCoins should be deducted from a member's account when they " +"equip this role through this menu.\n" +"The price may be negative, in which case the member will instead be rewarded " +"coins when they equip the role." +msgstr "" + +#: src/modules/rolemenus/roleoptions.py:240 msgctxt "roleset:price|accepts" -msgid "Amount of coins that the role costs." +msgid "Amount of coins that the role costs when equipped." msgstr "" -#: src/modules/rolemenus/roleoptions.py:242 +#: src/modules/rolemenus/roleoptions.py:254 #, possible-python-brace-format -msgctxt "roleset:price|set_response:set" -msgid "This role will now cost {price} to equip." +msgctxt "roleset:price|set_response:positive" +msgid "Equipping this role will now cost {coin}**{price}**." msgstr "" -#: src/modules/rolemenus/roleoptions.py:247 -msgctxt "roleset:price|set_response:unset" -msgid "This role will now be free to equip from this role menu." +#: src/modules/rolemenus/roleoptions.py:259 +msgctxt "roleset:price|set_response:zero" +msgid "Equipping this role is now free." msgstr "" -#: src/modules/rolemenus/roleoptions.py:255 +#: src/modules/rolemenus/roleoptions.py:264 +#, possible-python-brace-format +msgctxt "roleset:price|set_response:negative" +msgid "Equipping this role will now reward {coin}**{price}**." +msgstr "" + +#: src/modules/rolemenus/roleoptions.py:272 msgctxt "roleset:duration" msgid "duration" msgstr "" -#: src/modules/rolemenus/roleoptions.py:258 +#: src/modules/rolemenus/roleoptions.py:275 msgctxt "roleset:duration|desc" msgid "Lifetime of the role after selection" msgstr "" -#: src/modules/rolemenus/roleoptions.py:262 +#: src/modules/rolemenus/roleoptions.py:279 msgctxt "roleset:duration|long_desc" msgid "" "Allows creation of 'temporary roles' which expire a given time after being " "equipped. Refunds will not be given upon expiry." msgstr "" -#: src/modules/rolemenus/roleoptions.py:267 +#: src/modules/rolemenus/roleoptions.py:284 msgctxt "roleset:duration|notset" msgid "Forever." msgstr "" -#: src/modules/rolemenus/roleoptions.py:280 +#: src/modules/rolemenus/roleoptions.py:297 #, possible-python-brace-format msgctxt "roleset:duration|set_response:set" msgid "This role will now expire after {duration}." msgstr "" -#: src/modules/rolemenus/roleoptions.py:285 +#: src/modules/rolemenus/roleoptions.py:302 msgctxt "roleset:duration|set_response:unset" msgid "This role will no longer expire after being selected." msgstr "" @@ -835,12 +874,12 @@ msgctxt "template:shop|desc" msgid "A single column display suitable for simple role shops" msgstr "" -#: src/modules/rolemenus/rolemenu.py:280 +#: src/modules/rolemenus/rolemenu.py:294 msgctxt "rolemenu|menu_message|error|title" msgid "ROLE MENU DISPLAY ERROR" msgstr "" -#: src/modules/rolemenus/rolemenu.py:284 +#: src/modules/rolemenus/rolemenu.py:298 #, possible-python-brace-format msgctxt "rolemenu|menu_message|error|desc" msgid "" @@ -848,7 +887,7 @@ msgid "" "Error: `{error}`." msgstr "" -#: src/modules/rolemenus/rolemenu.py:336 +#: src/modules/rolemenus/rolemenu.py:350 #, possible-python-brace-format msgctxt "rolemenu|update_reactions|error" msgid "" @@ -856,62 +895,21 @@ msgid "" "emoji! Reactions will need to be added manually." msgstr "" -#: src/modules/rolemenus/rolemenu.py:381 +#: src/modules/rolemenus/rolemenu.py:395 msgctxt "ui:rolemenu_dropdown|placeholder" msgid "Select Roles" msgstr "" -#: src/modules/rolemenus/rolemenu.py:472 -msgctxt "rolemenu|error:role_gone" -msgid "This role no longer exists!" -msgstr "" - -#: src/modules/rolemenus/rolemenu.py:482 -#, possible-python-brace-format -msgctxt "rolemenu|deselect|error:sticky" -msgid "**{role}** is a sticky role, you cannot remove it with this menu!" -msgstr "" - -#: src/modules/rolemenus/rolemenu.py:493 -msgctxt "rolemenu|deselect|error:perms" -msgid "I don't have enough permissions to remove this role from you!" -msgstr "" - -#: src/modules/rolemenus/rolemenu.py:500 -msgctxt "rolemenu|deselect|error:discord" -msgid "An unknown error occurred removing your role! Please try again later." -msgstr "" - -#: src/modules/rolemenus/rolemenu.py:529 -msgctxt "rolemenu|deslect|success|title" -msgid "Role removed" -msgstr "" - -#: src/modules/rolemenus/rolemenu.py:535 -#, possible-python-brace-format -msgctxt "rolemenu|deselect|success:refund|desc" -msgid "You have removed **{role}**, and been refunded {coin} **{amount}**." -msgstr "" - -#: src/modules/rolemenus/rolemenu.py:540 -#, possible-python-brace-format -msgctxt "rolemenu|deselect|success:norefund|desc" -msgid "You have unequipped **{role}**." -msgstr "" - -#: src/modules/rolemenus/rolemenu.py:554 -#, possible-python-brace-format -msgctxt "rolemenu|select|error:required_role" -msgid "You need to have the **{role}** role to use this!" -msgstr "" - -#: src/modules/rolemenus/rolemenu.py:568 +#: src/modules/rolemenus/rolemenu.py:506 #, possible-python-brace-format msgctxt "rolemenu|select|error:max_obtainable" -msgid "You already have the maximum of {obtainable} roles from this menu!" -msgstr "" +msgid "You can own at most one role from this menu! You currently own:" +msgid_plural "" +"You can own at most **{count}** roles from this menu! You currently own:" +msgstr[0] "" +msgstr[1] "" -#: src/modules/rolemenus/rolemenu.py:582 +#: src/modules/rolemenus/rolemenu.py:523 #, possible-python-brace-format msgctxt "rolemenu|select|error:insufficient_funds" msgid "" @@ -919,41 +917,92 @@ msgid "" "**{balance}**!" msgstr "" -#: src/modules/rolemenus/rolemenu.py:598 +#: src/modules/rolemenus/rolemenu.py:539 msgctxt "rolemenu|select|error:perms" msgid "I don't have enough permissions to give you this role!" msgstr "" -#: src/modules/rolemenus/rolemenu.py:605 +#: src/modules/rolemenus/rolemenu.py:546 msgctxt "rolemenu|select|error:discord" msgid "" "An unknown error occurred while assigning your role! Please try again later." msgstr "" -#: src/modules/rolemenus/rolemenu.py:647 +#: src/modules/rolemenus/rolemenu.py:588 msgctxt "rolemenu|select|success|title" msgid "Role equipped" msgstr "" -#: src/modules/rolemenus/rolemenu.py:653 +#: src/modules/rolemenus/rolemenu.py:594 #, possible-python-brace-format msgctxt "rolemenu|select|success:purchase|desc" msgid "You have purchased the role **{role}** for {coin}**{amount}**" msgstr "" -#: src/modules/rolemenus/rolemenu.py:658 +#: src/modules/rolemenus/rolemenu.py:599 #, possible-python-brace-format msgctxt "rolemenu|select|success:nopurchase|desc" -msgid "You have equipped the role **{role}**" +msgid "You have equipped **{role}**" msgstr "" -#: src/modules/rolemenus/rolemenu.py:664 +#: src/modules/rolemenus/rolemenu.py:605 #, possible-python-brace-format msgctxt "rolemenu|select|expires_at" msgid "The role will expire at {timestamp}." msgstr "" -#: src/modules/rolemenus/rolemenu.py:717 +#: src/modules/rolemenus/rolemenu.py:627 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|error:sticky" +msgid "**{role}** is a sticky role, you cannot remove it with this menu!" +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:638 +msgctxt "rolemenu|deselect|error:perms" +msgid "I don't have enough permissions to remove this role from you!" +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:645 +msgctxt "rolemenu|deselect|error:discord" +msgid "An unknown error occurred removing your role! Please try again later." +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:674 +msgctxt "rolemenu|deslect|success|title" +msgid "Role removed" +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:680 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:refund|desc" +msgid "You have removed **{role}**, and been refunded {coin} **{amount}**." +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:686 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:negrefund|desc" +msgid "You have removed **{role}**, and have lost {coin} **{amount}**." +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:691 +#, possible-python-brace-format +msgctxt "rolemenu|deselect|success:norefund|desc" +msgid "You have unequipped **{role}**." +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:713 +#, possible-python-brace-format +msgctxt "rolemenu|error:role_gone" +msgid "The role **{name}** no longer exists!" +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:726 +#, possible-python-brace-format +msgctxt "rolemenu|select|error:required_role" +msgid "You need to have the role **{role}** required to use this menu!" +msgstr "" + +#: src/modules/rolemenus/rolemenu.py:784 #, possible-python-brace-format msgctxt "rolemenu|content:reactions" msgid "[Click here]({jump_link}) to jump back." @@ -1200,251 +1249,251 @@ msgctxt "ui:menu_editor|button:bulk_edit|modal|title" msgid "Menu Options" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:215 +#: src/modules/rolemenus/ui/menueditor.py:218 msgctxt "ui:menu_editor|button:bulk_edit|label" msgid "Bulk Edit" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:235 +#: src/modules/rolemenus/ui/menueditor.py:238 msgctxt "ui:menu_editor|button:sticky|label" msgid "Toggle Sticky" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:259 +#: src/modules/rolemenus/ui/menueditor.py:262 msgctxt "ui:menu_editor|button:refunds|label" msgid "Toggle Refunds" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:289 +#: src/modules/rolemenus/ui/menueditor.py:292 msgctxt "ui:menu_editor|menu:reqroles|placeholder" msgid "Select Required Role" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:308 +#: src/modules/rolemenus/ui/menueditor.py:311 msgctxt "ui:menu_editor|button:modify_roles|label" msgid "Modify Roles" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:337 +#: src/modules/rolemenus/ui/menueditor.py:340 msgctxt "ui:menu_editor|role_editor|modal|title" msgid "Edit Menu Role" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:411 +#: src/modules/rolemenus/ui/menueditor.py:416 msgctxt "ui:menu_editor|menu:add_roles|error:too_many_reactions" msgid "Too many roles! Reaction role menus cannot exceed `20` roles." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:416 +#: src/modules/rolemenus/ui/menueditor.py:421 msgctxt "ui:menu_editor|menu:add_roles|error:too_many_roles" msgid "Too many roles! Role menus cannot have more than `25` roles." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:455 +#: src/modules/rolemenus/ui/menueditor.py:460 msgctxt "ui:menu_editor|menu:add_roles|placeholder" msgid "Add Roles" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:481 +#: src/modules/rolemenus/ui/menueditor.py:486 msgctxt "ui:menu_editor|menu:edit_roles|placeholder" msgid "Edit Roles" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:514 +#: src/modules/rolemenus/ui/menueditor.py:524 msgctxt "ui:menu_editor|menu:del_role|placeholder" msgid "Remove Roles" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:538 +#: src/modules/rolemenus/ui/menueditor.py:548 msgctxt "ui:menu_editor|button:style|error:non-managed" msgid "" "Cannot change the style of a menu attached to a message I did not send! " "Please repost first." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:551 +#: src/modules/rolemenus/ui/menueditor.py:561 msgctxt "ui:menu_editor|button:style|label" msgid "Menu Style" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:576 +#: src/modules/rolemenus/ui/menueditor.py:586 msgctxt "ui:menu_editor|menu:style|error:too_many_reactions" msgid "" "Too many roles! The Reaction style is limited to `20` roles (Discord " "limitation)." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:586 +#: src/modules/rolemenus/ui/menueditor.py:596 msgctxt "ui:menu_editor|menu:style|error:incomplete_emojis" msgid "" "Cannot switch to the Reaction Role Style! Every role needs to have a " "distinct emoji first." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:602 +#: src/modules/rolemenus/ui/menueditor.py:614 msgctxt "ui:menu_editor|menu:style|placeholder" msgid "Select Menu Style" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:606 +#: src/modules/rolemenus/ui/menueditor.py:618 msgctxt "ui:menu_editor|menu:style|option:reaction|label" msgid "Reaction Roles" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:609 +#: src/modules/rolemenus/ui/menueditor.py:621 msgctxt "ui:menu_editor|menu:style|option:reaction|desc" msgid "Roles are represented compactly as clickable reactions on a message." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:615 +#: src/modules/rolemenus/ui/menueditor.py:627 msgctxt "ui:menu_editor|menu:style|option:button|label" msgid "Button Menu" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:618 +#: src/modules/rolemenus/ui/menueditor.py:630 msgctxt "ui:menu_editor|menu:style|option:button|desc" msgid "" "Roles are represented in 5 rows of 5 buttons, each with an emoji and label." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:624 +#: src/modules/rolemenus/ui/menueditor.py:636 msgctxt "ui:menu_editor|menu:style|option:dropdown|label" msgid "Dropdown Menu" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:627 +#: src/modules/rolemenus/ui/menueditor.py:639 msgctxt "ui:menu_editor|menu:style|option:dropdown|desc" msgid "Roles are selectable from a dropdown menu below the message." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:697 +#: src/modules/rolemenus/ui/menueditor.py:709 msgctxt "ui:menu_editor|menu:template|placeholder" msgid "Select Message Template" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:707 +#: src/modules/rolemenus/ui/menueditor.py:719 msgctxt "ui:menu_editor|menu:template|option:custom|label" msgid "Custom Message" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:712 +#: src/modules/rolemenus/ui/menueditor.py:724 msgctxt "ui:menu_editor|menu:template|option:custom|description" msgid "Entirely custom menu message (opens an interactive editor)." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:729 +#: src/modules/rolemenus/ui/menueditor.py:741 msgctxt "ui:menu_editor|button:delete|confirm|title" msgid "Are you sure you want to delete this menu? This is not reversible!" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:734 +#: src/modules/rolemenus/ui/menueditor.py:746 msgctxt "ui:menu_editor|button:delete|confirm|button:yes" msgid "Yes, Delete Now" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:739 +#: src/modules/rolemenus/ui/menueditor.py:751 msgctxt "ui:menu_editor|button:delete|confirm|button:no" msgid "No, Go Back" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:756 +#: src/modules/rolemenus/ui/menueditor.py:768 msgctxt "ui:menu_editor|button:delete|label" msgid "Delete Menu" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:813 +#: src/modules/rolemenus/ui/menueditor.py:825 msgctxt "ui:menu_editor|button:edit_msg|label" msgid "Edit Message" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:844 +#: src/modules/rolemenus/ui/menueditor.py:851 msgctxt "ui:menu_editor|button:preview|label" msgid "Preview" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:860 +#: src/modules/rolemenus/ui/menueditor.py:867 msgctxt "ui:menu_editor|button:repost|widget:repost|menu:channel|placeholder" msgid "Select New Channel" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:878 +#: src/modules/rolemenus/ui/menueditor.py:885 msgctxt "ui:menu_editor|button:repost|widget:repost|error:perms|title" msgid "Insufficient Permissions!" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:882 +#: src/modules/rolemenus/ui/menueditor.py:889 msgctxt "ui:menu_editor|button:repost|eidget:repost|error:perms|desc" msgid "I lack the `EMBED_LINKS` or `SEND_MESSAGES` permission in this channel." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:895 +#: src/modules/rolemenus/ui/menueditor.py:902 #, possible-python-brace-format msgctxt "ui:menu_editor|button:repost|widget:repost|error:post_failed" msgid "" -"An error ocurred while posting to {channel}. Do I have sufficient " -"permissions?" +"An unknown error ocurred while posting to {channel}!\n" +"**Error:** `{exception}`" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:907 +#: src/modules/rolemenus/ui/menueditor.py:915 msgctxt "ui:menu_editor|button:repost|widget:repost|success|title" msgid "Role Menu Moved" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:913 +#: src/modules/rolemenus/ui/menueditor.py:921 #, possible-python-brace-format msgctxt "ui:menu_editor|button:repost|widget:repost|success|desc:general" msgid "The role menu `{name}` is now available at {message_link}." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:927 +#: src/modules/rolemenus/ui/menueditor.py:935 msgctxt "ui:menu_editor|button:repost|widget:repost|success|desc:reactions" msgid "Please check the message reactions are correct." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:940 +#: src/modules/rolemenus/ui/menueditor.py:948 msgctxt "ui:menu_editor|button:repost|widget:repost|title" msgid "Repost Role Menu" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:944 +#: src/modules/rolemenus/ui/menueditor.py:952 msgctxt "ui:menu_editor|button:repost|widget:repost|description" msgid "Please select the channel to which you want to resend this menu." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:959 +#: src/modules/rolemenus/ui/menueditor.py:967 msgctxt "ui:menu_editor|button:repost|label:repost" msgid "Repost" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:964 +#: src/modules/rolemenus/ui/menueditor.py:972 msgctxt "ui:menu_editor|button:repost|label:post" msgid "Post" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:974 +#: src/modules/rolemenus/ui/menueditor.py:982 msgctxt "ui:menu_editor|embed|title" msgid "Role Menu Editor" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:983 +#: src/modules/rolemenus/ui/menueditor.py:991 #, possible-python-brace-format msgctxt "ui:menu_editor|embed|description|jump_text:attached" msgid "Members may use this menu from {jump_url}" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:988 +#: src/modules/rolemenus/ui/menueditor.py:996 msgctxt "ui:menu_editor|embed|description|jump_text:unattached" msgid "" "This menu is not currently active!\n" "Make it available by clicking `Post` below." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:1002 +#: src/modules/rolemenus/ui/menueditor.py:1010 msgctxt "ui:menu_editor|embed|field:tips|name" msgid "Command Tips" msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:1006 +#: src/modules/rolemenus/ui/menueditor.py:1014 #, possible-python-brace-format msgctxt "ui:menu_editor|embed|field:tips|value" msgid "" @@ -1454,12 +1503,12 @@ msgid "" "{editrole} to edit role options." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:1046 +#: src/modules/rolemenus/ui/menueditor.py:1054 msgctxt "ui:menu_editor|error:invald_emoji|title" msgid "Invalid emoji encountered." msgstr "" -#: src/modules/rolemenus/ui/menueditor.py:1050 +#: src/modules/rolemenus/ui/menueditor.py:1058 #, possible-python-brace-format msgctxt "ui:menu_editor|error:invalid_emoji|desc" msgid "" diff --git a/locales/templates/rooms.pot b/locales/templates/rooms.pot index 72574608..61ab9a02 100644 --- a/locales/templates/rooms.pot +++ b/locales/templates/rooms.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/schedule.pot b/locales/templates/schedule.pot index a6426401..1c0ba94f 100644 --- a/locales/templates/schedule.pot +++ b/locales/templates/schedule.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,25 +18,25 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/modules/schedule/cog.py:429 +#: src/modules/schedule/cog.py:493 msgctxt "create_booking|error:no_lobby" msgid "" "This server has not set a `session_lobby`, so the scheduled session system " "is disabled!" msgstr "" -#: src/modules/schedule/cog.py:441 +#: src/modules/schedule/cog.py:505 msgctxt "create_booking|error:no_member" msgid "An unknown Discord error occurred. Please try again in a few minutes." msgstr "" -#: src/modules/schedule/cog.py:449 +#: src/modules/schedule/cog.py:513 msgctxt "create_booking|error:blacklisted" msgid "" "You have been blacklisted from the scheduled session system in this server." msgstr "" -#: src/modules/schedule/cog.py:460 +#: src/modules/schedule/cog.py:524 #, possible-python-brace-format msgctxt "create_booking|error:insufficient_balance" msgid "" @@ -48,22 +48,42 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/modules/schedule/cog.py:474 +#: src/modules/schedule/cog.py:538 msgctxt "create_booking|error:already_booked" msgid "One or more requested timeslots are already booked!" msgstr "" -#: src/modules/schedule/cog.py:677 +#: src/modules/schedule/cog.py:741 msgctxt "cmd:schedule" msgid "schedule" msgstr "" -#: src/modules/schedule/cog.py:680 +#: src/modules/schedule/cog.py:744 msgctxt "cmd:schedule|desc" msgid "View and manage your scheduled session." msgstr "" -#: src/modules/schedule/cog.py:708 +#: src/modules/schedule/cog.py:749 +msgctxt "cmd:schedule|param:cancel" +msgid "cancel" +msgstr "" + +#: src/modules/schedule/cog.py:752 +msgctxt "cmd:schedule|param:book" +msgid "book" +msgstr "" + +#: src/modules/schedule/cog.py:758 +msgctxt "cmd:schedule|param:cancel|desc" +msgid "Select a booked timeslot to cancel." +msgstr "" + +#: src/modules/schedule/cog.py:762 +msgctxt "cmd:schedule|param:book|desc" +msgid "Select a timeslot to schedule. (Times shown in your set timezone.)" +msgstr "" + +#: src/modules/schedule/cog.py:792 #, possible-python-brace-format msgctxt "cmd:schedule|cancel_booking|error:parse_slot" msgid "" @@ -71,25 +91,25 @@ msgid "" "from the autocomplete options." msgstr "" -#: src/modules/schedule/cog.py:716 +#: src/modules/schedule/cog.py:800 #, possible-python-brace-format msgctxt "cmd:schedule|cancel_booking|error:not_booked" msgid "Could not cancel {time} booking because it is not booked!" msgstr "" -#: src/modules/schedule/cog.py:725 +#: src/modules/schedule/cog.py:809 #, possible-python-brace-format msgctxt "cmd:schedule|cancel_booking|error:too_soon" msgid "Cannot cancel {time} booking because it is running or starting soon!" msgstr "" -#: src/modules/schedule/cog.py:738 +#: src/modules/schedule/cog.py:822 #, possible-python-brace-format msgctxt "cmd:schedule|cancel_booking|success" msgid "Successfully cancelled your booking at {time}." msgstr "" -#: src/modules/schedule/cog.py:751 +#: src/modules/schedule/cog.py:835 #, possible-python-brace-format msgctxt "cmd:schedule|create_booking|error:parse_slot" msgid "" @@ -97,45 +117,98 @@ msgid "" "from the autocomplete options." msgstr "" -#: src/modules/schedule/cog.py:759 +#: src/modules/schedule/cog.py:843 #, possible-python-brace-format msgctxt "cmd:schedule|create_booking|error:already_booked" msgid "You have already booked a scheduled session for {time}." msgstr "" -#: src/modules/schedule/cog.py:768 +#: src/modules/schedule/cog.py:852 #, possible-python-brace-format msgctxt "cmd:schedule|create_booking|error:too_soon" msgid "Cannot book session at {time} because it is running or starting soon!" msgstr "" -#: src/modules/schedule/cog.py:780 +#: src/modules/schedule/cog.py:864 #, possible-python-brace-format msgctxt "cmd:schedule|create_booking|success" msgid "You have successfully scheduled a session at {time}." msgstr "" -#: src/modules/schedule/cog.py:847 +#: src/modules/schedule/cog.py:909 +msgctxt "cmd:schedule|acmpl:book|error:not_in_guild" +msgid "You need to be in a server to book sessions!" +msgstr "" + +#: src/modules/schedule/cog.py:922 +msgctxt "cmd:schedule|acmpl:book|error:blacklisted" +msgid "Cannot Book -- Blacklisted" +msgstr "" + +#: src/modules/schedule/cog.py:943 +#, possible-python-brace-format +msgctxt "cmd:schedule|acmpl:book|timezone_info" +msgid "" +"Using timezone '{timezone}' where it is '{now}'. Change with '/my timezone'" +msgstr "" + +#: src/modules/schedule/cog.py:956 src/modules/schedule/cog.py:1014 +#, possible-python-brace-format +msgctxt "cmd:schedule|acmpl:book|format" +msgid "{start} - {end} ({until})" +msgstr "" + +#: src/modules/schedule/cog.py:980 +#, possible-python-brace-format +msgctxt "cmd:schedule|acmpl:book|no_matching" +msgid "No bookable sessions matching '{partial}'" +msgstr "" + +#: src/modules/schedule/cog.py:1003 +msgctxt "cmd:schedule|acmpl:cancel|error:empty_schedule" +msgid "You do not have any upcoming sessions to cancel!" +msgstr "" + +#: src/modules/schedule/cog.py:1036 +#, possible-python-brace-format +msgctxt "cmd:schedule|acmpl:cancel|error:no_matching" +msgid "No cancellable sessions matching '{partial}'" +msgstr "" + +#: src/modules/schedule/cog.py:1081 msgctxt "cmd:configure_schedule" msgid "schedule" msgstr "" -#: src/modules/schedule/cog.py:850 +#: src/modules/schedule/cog.py:1084 msgctxt "cmd:configure_schedule|desc" msgid "Configure Scheduled Session system" msgstr "" -#: src/modules/schedule/settings.py:36 +#: src/modules/schedule/lib.py:86 src/modules/schedule/ui/scheduleui.py:333 +#, possible-python-brace-format +msgctxt "ui:schedule|format_until|positive" +msgid "in <1 hour" +msgid_plural "in {number} hours" +msgstr[0] "" +msgstr[1] "" + +#: src/modules/schedule/lib.py:93 src/modules/schedule/ui/scheduleui.py:340 +msgctxt "ui:schedule|format_until|now" +msgid "right now!" +msgstr "" + +#: src/modules/schedule/settings.py:68 msgctxt "guildset:session_lobby" msgid "session_lobby" msgstr "" -#: src/modules/schedule/settings.py:39 +#: src/modules/schedule/settings.py:71 msgctxt "guildset:session_lobby|desc" msgid "Channel to post scheduled session announcement and status to." msgstr "" -#: src/modules/schedule/settings.py:43 +#: src/modules/schedule/settings.py:75 msgctxt "guildset:session_lobby|long_desc" msgid "" "Channel in which to announce scheduled sessions and post their status. I " @@ -144,46 +217,46 @@ msgid "" "function.**" msgstr "" -#: src/modules/schedule/settings.py:49 +#: src/modules/schedule/settings.py:81 msgctxt "guildset:session_lobby|accepts" msgid "Name or id of the session lobby channel." msgstr "" -#: src/modules/schedule/settings.py:63 +#: src/modules/schedule/settings.py:95 #, possible-python-brace-format msgctxt "guildset:session_lobby|set_response|set" msgid "Scheduled sessions will now be announced in {channel}" msgstr "" -#: src/modules/schedule/settings.py:68 +#: src/modules/schedule/settings.py:100 msgctxt "guildset:session_lobby|set_response|unset" msgid "" "The schedule session lobby has been unset. Shutting down scheduled session " "system." msgstr "" -#: src/modules/schedule/settings.py:78 +#: src/modules/schedule/settings.py:110 msgctxt "guildset:session_lobby|formatted|unset" msgid "`Not Set` (The scheduled session system is disabled.)" msgstr "" -#: src/modules/schedule/settings.py:83 +#: src/modules/schedule/settings.py:115 #, possible-python-brace-format msgctxt "guildset:session_lobby|formatted|set" msgid "<#{channelid}>" msgstr "" -#: src/modules/schedule/settings.py:92 +#: src/modules/schedule/settings.py:124 msgctxt "guildset:session_room" msgid "session_room" msgstr "" -#: src/modules/schedule/settings.py:95 +#: src/modules/schedule/settings.py:127 msgctxt "guildset:session_room|desc" msgid "Special voice channel open to scheduled session members." msgstr "" -#: src/modules/schedule/settings.py:99 +#: src/modules/schedule/settings.py:131 msgctxt "guildset:session_room|long_desc" msgid "" "If set, this voice channel serves as a dedicated room for scheduled session " @@ -197,33 +270,33 @@ msgid "" "category, as usual." msgstr "" -#: src/modules/schedule/settings.py:109 +#: src/modules/schedule/settings.py:141 msgctxt "guildset:session_room|accepts" msgid "Name or id of the session room voice channel." msgstr "" -#: src/modules/schedule/settings.py:123 +#: src/modules/schedule/settings.py:155 #, possible-python-brace-format msgctxt "guildset:session_room|set_response|set" msgid "Schedule session members will now be given access to {channel}" msgstr "" -#: src/modules/schedule/settings.py:128 +#: src/modules/schedule/settings.py:160 msgctxt "guildset:session_room|set_response|unset" msgid "The dedicated schedule session room has been removed." msgstr "" -#: src/modules/schedule/settings.py:135 +#: src/modules/schedule/settings.py:167 msgctxt "guildset:session_channels" msgid "session_channels" msgstr "" -#: src/modules/schedule/settings.py:138 +#: src/modules/schedule/settings.py:170 msgctxt "guildset:session_channels|desc" msgid "Voice channels in which to track activity for scheduled sessions." msgstr "" -#: src/modules/schedule/settings.py:142 +#: src/modules/schedule/settings.py:174 msgctxt "guildset:session_channels|long_desc" msgid "" "Only activity in these channels (and in `session_room` if set) will count " @@ -232,12 +305,12 @@ msgid "" "respects the `untracked_voice_channels` setting." msgstr "" -#: src/modules/schedule/settings.py:149 +#: src/modules/schedule/settings.py:181 msgctxt "guildset:session_channels|accepts" msgid "Comma separated list of session channel names or ids." msgstr "" -#: src/modules/schedule/settings.py:166 +#: src/modules/schedule/settings.py:198 #, possible-python-brace-format msgctxt "guildset:session_channels|set_response|set" msgid "" @@ -245,64 +318,64 @@ msgid "" "attendance: {channels}" msgstr "" -#: src/modules/schedule/settings.py:171 +#: src/modules/schedule/settings.py:203 msgctxt "guildset:session_channels|set_response|unset" msgid "" "Activity in all (tracked) voice channels will now count towards session " "attendance." msgstr "" -#: src/modules/schedule/settings.py:181 +#: src/modules/schedule/settings.py:213 msgctxt "guildset:session_channels|formatted|unset" msgid "All Channels (excluding `untracked_channels`)" msgstr "" -#: src/modules/schedule/settings.py:211 +#: src/modules/schedule/settings.py:243 msgctxt "guildset:schedule_cost" msgid "schedule_cost" msgstr "" -#: src/modules/schedule/settings.py:214 +#: src/modules/schedule/settings.py:246 msgctxt "guildset:schedule_cost|desc" msgid "Booking cost for each scheduled session." msgstr "" -#: src/modules/schedule/settings.py:218 +#: src/modules/schedule/settings.py:250 msgctxt "guildset:schedule_cost|long_desc" msgid "" "Members will be charged this many LionCoins for each scheduled session they " "book." msgstr "" -#: src/modules/schedule/settings.py:222 +#: src/modules/schedule/settings.py:254 msgctxt "guildset:schedule_cost|accepts" msgid "Price of each session booking (non-negative integer)." msgstr "" -#: src/modules/schedule/settings.py:234 +#: src/modules/schedule/settings.py:266 #, possible-python-brace-format msgctxt "guildset:schedule_cost|set_response" msgid "" "Schedule session bookings will now cost {coin} **{amount}** per timeslot." msgstr "" -#: src/modules/schedule/settings.py:247 +#: src/modules/schedule/settings.py:279 #, possible-python-brace-format msgctxt "guildset:schedule_cost|formatted" msgid "{coin}**{amount}** per booking." msgstr "" -#: src/modules/schedule/settings.py:256 +#: src/modules/schedule/settings.py:288 msgctxt "guildset:attendance_reward" msgid "attendance_reward" msgstr "" -#: src/modules/schedule/settings.py:259 +#: src/modules/schedule/settings.py:291 msgctxt "guildset:attendance_reward|desc" msgid "Reward for attending a booked scheduled session." msgstr "" -#: src/modules/schedule/settings.py:263 +#: src/modules/schedule/settings.py:295 msgctxt "guildset:attendance_reward|long_desc" msgid "" "When a member successfully attends a scheduled session they booked, they " @@ -310,12 +383,12 @@ msgid "" "`schedule_cost` setting." msgstr "" -#: src/modules/schedule/settings.py:269 +#: src/modules/schedule/settings.py:301 msgctxt "guildset:attendance_reward|accepts" msgid "Number of coins to reward session attendance." msgstr "" -#: src/modules/schedule/settings.py:281 +#: src/modules/schedule/settings.py:313 #, possible-python-brace-format msgctxt "guildset:attendance_reward|set_response" msgid "" @@ -323,35 +396,35 @@ msgid "" "session." msgstr "" -#: src/modules/schedule/settings.py:291 +#: src/modules/schedule/settings.py:323 #, possible-python-brace-format msgctxt "guildset:attendance_reward|formatted" msgid "{coin}**{amount}** upon attendance." msgstr "" -#: src/modules/schedule/settings.py:300 +#: src/modules/schedule/settings.py:332 msgctxt "guildset:attendance_bonus" msgid "group_attendance_bonus" msgstr "" -#: src/modules/schedule/settings.py:303 +#: src/modules/schedule/settings.py:335 msgctxt "guildset:attendance_bonus|desc" msgid "Bonus reward given when all members attend a scheduled session." msgstr "" -#: src/modules/schedule/settings.py:307 +#: src/modules/schedule/settings.py:339 msgctxt "guildset:attendance_bonus|long_desc" msgid "" "When all members who have booked a session successfully attend the session, " "they will be given this bonus in *addition* to the `attendance_reward`." msgstr "" -#: src/modules/schedule/settings.py:312 +#: src/modules/schedule/settings.py:344 msgctxt "guildset:attendance_bonus|accepts" msgid "Bonus coins rewarded when everyone attends a session." msgstr "" -#: src/modules/schedule/settings.py:324 +#: src/modules/schedule/settings.py:356 #, possible-python-brace-format msgctxt "guildset:attendance_bonus|set_response" msgid "" @@ -359,23 +432,23 @@ msgid "" "everyone attends." msgstr "" -#: src/modules/schedule/settings.py:334 +#: src/modules/schedule/settings.py:366 #, possible-python-brace-format msgctxt "guildset:attendance_bonus|formatted" msgid "{coin}**{amount}** bonus when all booked members attend." msgstr "" -#: src/modules/schedule/settings.py:343 +#: src/modules/schedule/settings.py:375 msgctxt "guildset:min_attendance" msgid "min_attendance" msgstr "" -#: src/modules/schedule/settings.py:346 +#: src/modules/schedule/settings.py:378 msgctxt "guildset:min_attendance|desc" msgid "Minimum attendance before reward eligability." msgstr "" -#: src/modules/schedule/settings.py:350 +#: src/modules/schedule/settings.py:382 msgctxt "guildset:min_attendance|long_desc" msgid "" "Scheduled session members will need to attend the session for at least this " @@ -383,12 +456,12 @@ msgid "" "rewarded)." msgstr "" -#: src/modules/schedule/settings.py:355 +#: src/modules/schedule/settings.py:387 msgctxt "guildset:min_attendance|accepts" msgid "Number of minutes (1-60) before attendance is counted." msgstr "" -#: src/modules/schedule/settings.py:369 +#: src/modules/schedule/settings.py:401 #, possible-python-brace-format msgctxt "guildset:min_attendance|set_response" msgid "" @@ -396,29 +469,29 @@ msgid "" "least **`{amount}`** minutes." msgstr "" -#: src/modules/schedule/settings.py:379 +#: src/modules/schedule/settings.py:411 #, possible-python-brace-format msgctxt "guildset:min_attendance|formatted" msgid "**`{amount}`** minutes" msgstr "" -#: src/modules/schedule/settings.py:400 +#: src/modules/schedule/settings.py:432 msgctxt "guildset:min_attendance|parse|error" msgid "" "Minimum attendance must be an integer number of minutes between `1` and `60`." msgstr "" -#: src/modules/schedule/settings.py:410 +#: src/modules/schedule/settings.py:443 msgctxt "guildset:schedule_blacklist_role" msgid "schedule_blacklist_role" msgstr "" -#: src/modules/schedule/settings.py:413 +#: src/modules/schedule/settings.py:446 msgctxt "guildset:schedule_blacklist_role|desc" msgid "Role which disables scheduled session booking." msgstr "" -#: src/modules/schedule/settings.py:417 +#: src/modules/schedule/settings.py:450 msgctxt "guildset:schedule_blacklist_role|long_desc" msgid "" "Members with this role will not be allowed to book scheduled sessions in " @@ -429,44 +502,44 @@ msgid "" "provide a strong disincentive for not attending a session." msgstr "" -#: src/modules/schedule/settings.py:425 +#: src/modules/schedule/settings.py:458 msgctxt "guildset:schedule_blacklist_role|accepts" msgid "Blacklist role name or id." msgstr "" -#: src/modules/schedule/settings.py:438 +#: src/modules/schedule/settings.py:471 #, possible-python-brace-format msgctxt "guildset:schedule_blacklist_role|set_response|set" msgid "Members with {role} will be unable to book scheduled sessions." msgstr "" -#: src/modules/schedule/settings.py:443 +#: src/modules/schedule/settings.py:476 msgctxt "guildset:schedule_blacklist_role|set_response|unset" msgid "The schedule blacklist role has been unset." msgstr "" -#: src/modules/schedule/settings.py:453 +#: src/modules/schedule/settings.py:486 #, possible-python-brace-format msgctxt "guildset:schedule_blacklist_role|formatted|set" msgid "{role} members will not be able to book scheduled sessions." msgstr "" -#: src/modules/schedule/settings.py:458 +#: src/modules/schedule/settings.py:491 msgctxt "guildset:schedule_blacklist_role|formatted|unset" msgid "Not Set" msgstr "" -#: src/modules/schedule/settings.py:467 +#: src/modules/schedule/settings.py:500 msgctxt "guildset:schedule_blacklist_after" msgid "schedule_blacklist_after" msgstr "" -#: src/modules/schedule/settings.py:470 +#: src/modules/schedule/settings.py:503 msgctxt "guildset:schedule_blacklist_after|desc" msgid "Number of missed sessions within 24h before blacklisting." msgstr "" -#: src/modules/schedule/settings.py:474 +#: src/modules/schedule/settings.py:507 msgctxt "guildset:schedule_blacklist_after|long_desc" msgid "" "Members who miss more than this number of booked sessions in a single 24 " @@ -475,12 +548,12 @@ msgid "" "permissions to assign the blacklist role." msgstr "" -#: src/modules/schedule/settings.py:481 +#: src/modules/schedule/settings.py:514 msgctxt "guildset:schedule_blacklist_after|accepts" msgid "A number of missed sessions (1-24) before blacklisting." msgstr "" -#: src/modules/schedule/settings.py:496 +#: src/modules/schedule/settings.py:529 #, possible-python-brace-format msgctxt "guildset:schedule_blacklist_after|set_response|set" msgid "" @@ -488,25 +561,25 @@ msgid "" "`24h`." msgstr "" -#: src/modules/schedule/settings.py:501 +#: src/modules/schedule/settings.py:534 msgctxt "guildset:schedule_blacklist_after|set_response|unset" msgid "" "Members will not be automatically blacklisted from booking scheduled " "sessions." msgstr "" -#: src/modules/schedule/settings.py:511 +#: src/modules/schedule/settings.py:544 #, possible-python-brace-format msgctxt "guildset:schedule_blacklist_after|formatted|set" msgid "Blacklist after **`{amount}`** missed sessions within `24h`." msgstr "" -#: src/modules/schedule/settings.py:516 +#: src/modules/schedule/settings.py:549 msgctxt "guildset:schedule_blacklist_after|formatted|unset" msgid "Do not automatically blacklist." msgstr "" -#: src/modules/schedule/settings.py:528 +#: src/modules/schedule/settings.py:561 msgctxt "guildset:schedule_blacklist_role|parse|error" msgid "Blacklist threshold must be a number between `1` and `24`." msgstr "" @@ -661,19 +734,6 @@ msgctxt "ui:schedule|menu:slots|option|day:tomorrow" msgid "Tomorrow" msgstr "" -#: src/modules/schedule/ui/scheduleui.py:333 -#, possible-python-brace-format -msgctxt "ui:schedule|format_until|positive" -msgid "in <1 hour" -msgid_plural "in {number} hours" -msgstr[0] "" -msgstr[1] "" - -#: src/modules/schedule/ui/scheduleui.py:340 -msgctxt "ui:schedule|format_until|now" -msgid "right now!" -msgstr "" - #: src/modules/schedule/ui/scheduleui.py:362 msgctxt "ui:schedule|menu:cancel|error:current_slot" msgid "" @@ -794,54 +854,154 @@ msgctxt "ui:sessionui|button:schedule|label" msgid "Open Schedule" msgstr "" -#: src/modules/schedule/ui/sessionui.py:87 +#: src/modules/schedule/ui/sessionui.py:64 +msgctxt "ui:sessionui|button:help|label" +msgid "How to Attend" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:92 msgctxt "ui:session|button:book|error:starting_soon" msgid "Too late! This session has started or is starting shortly." msgstr "" -#: src/modules/schedule/ui/sessionui.py:94 +#: src/modules/schedule/ui/sessionui.py:99 msgctxt "ui:session|button:book|error:already_booked" msgid "You are already a member of this session!" msgstr "" -#: src/modules/schedule/ui/sessionui.py:101 +#: src/modules/schedule/ui/sessionui.py:106 msgctxt "ui:session|button:book|success" msgid "Successfully booked this session." msgstr "" -#: src/modules/schedule/ui/sessionui.py:115 +#: src/modules/schedule/ui/sessionui.py:120 msgctxt "ui:session|button:book|error|title" msgid "Could not book session" msgstr "" -#: src/modules/schedule/ui/sessionui.py:133 +#: src/modules/schedule/ui/sessionui.py:138 msgctxt "ui:session|button:cancel|error:starting_soon" msgid "Too late! This session has started or is starting shortly." msgstr "" -#: src/modules/schedule/ui/sessionui.py:140 +#: src/modules/schedule/ui/sessionui.py:145 msgctxt "ui:session|button:cancel|error:not_booked" msgid "You are not a member of this session!" msgstr "" -#: src/modules/schedule/ui/sessionui.py:150 +#: src/modules/schedule/ui/sessionui.py:155 msgctxt "ui:session|button:cancel|success" msgid "Successfully cancelled this session." msgstr "" -#: src/modules/schedule/ui/sessionui.py:164 +#: src/modules/schedule/ui/sessionui.py:169 msgctxt "ui:session|button:cancel|error|title" msgid "Could not cancel session" msgstr "" -#: src/modules/schedule/core/session.py:196 +#: src/modules/schedule/ui/sessionui.py:202 +msgctxt "ui:session|button:help|embed:unbooked|title" +msgid "You have not booked this session!" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:206 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:unbooked|description" +msgid "" +"You need to book this scheduled session before you can attend it! Press the " +"**{book_label}** button to book the session." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:215 +msgctxt "ui:session|button:help|embed:help|title" +msgid "How to attend your scheduled session" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:224 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|minimum_attendance" +msgid "at least one minute" +msgid_plural "at least `{duration}` minutes" +msgstr[0] "" +msgstr[1] "" + +#: src/modules/schedule/ui/sessionui.py:237 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|room_line:category" +msgid "" +"The exclusive scheduled session category **{category}** will also be open to " +"you during your scheduled session." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:243 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|room_line:voice" +msgid "" +"The exclusive scheduled session room {room} will also be open to you during " +"your scheduled session." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:262 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|attend_line:only_room_category" +msgid "" +"To attend your scheduled session, join a voice channel in **{room}** for " +"**{minimum}** between {start} and {end}." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:272 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|attend_line:only_room_channel" +msgid "" +"To attend your scheduled session, join {room} for **{minimum}** between " +"{start} and {end}." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:282 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|attend_line:with_channels" +msgid "" +"To attend your scheduled session, join a valid session voice channel for " +"**{minimum}** between {start} and {end}." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:292 +msgctxt "ui:session|button:help|embed:help|field:channels|name" +msgid "Valid session channels" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:300 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|attend_line:all_channels" +msgid "" +"To attend your scheduled session, join any tracked voice channel for " +"**{minimum}** between {start} and {end}." +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:308 +msgctxt "ui:session|button:help|embed:help|field:rewards|name" +msgid "Rewards" +msgstr "" + +#: src/modules/schedule/ui/sessionui.py:312 +#, possible-python-brace-format +msgctxt "ui:session|button:help|embed:help|field:rewards|value" +msgid "" +"Everyone who attends the session will be rewarded with {coin}**{reward}**.\n" +"If *everyone* successfully attends, you will also be awarded a bonus of " +"{coin}**{bonus}**.\n" +"Anyone who does *not* attend their booked session will have the rest of " +"their schedule cancelled **without refund**, so beware!" +msgstr "" + +#: src/modules/schedule/core/session.py:197 msgctxt "session|error:lobby_webhook_perms" msgid "" "Insufficient permissions to create a webhook in this channel. I require the " "`MANAGE_WEBHOOKS` permission." msgstr "" -#: src/modules/schedule/core/session.py:274 +#: src/modules/schedule/core/session.py:281 #, possible-python-brace-format msgctxt "session|prepare|error:room_permissions" msgid "" @@ -850,7 +1010,17 @@ msgid "" "`VIEW_CHANNEL` permissions." msgstr "" -#: src/modules/schedule/core/session.py:317 +#: src/modules/schedule/core/session.py:325 +msgctxt "session|open|update_perms|audit_reason" +msgid "Opening configured scheduled session room." +msgstr "" + +#: src/modules/schedule/core/session.py:347 +msgctxt "session|open|clean_room|audit_reason" +msgid "Removing extra member from scheduled session room." +msgstr "" + +#: src/modules/schedule/core/session.py:354 #, possible-python-brace-format msgctxt "session|open|error:room_permissions" msgid "" @@ -859,57 +1029,90 @@ msgid "" "`VIEW_CHANNEL` permissions." msgstr "" -#: src/modules/schedule/core/session.py:358 +#: src/modules/schedule/core/session.py:411 +#, possible-python-brace-format +msgctxt "session|notify|dm|join_line:room_category" +msgid "Please attend your session by joining a voice channel under **{room}**!" +msgstr "" + +#: src/modules/schedule/core/session.py:416 +#, possible-python-brace-format +msgctxt "session|notify|dm|join_line:room_voice" +msgid "Please attend your session by joining {room}" +msgstr "" + +#: src/modules/schedule/core/session.py:421 +msgctxt "session|notify|dm|join_line:all_channels" +msgid "Please attend your session by joining a tracked voice channel!" +msgstr "" + +#: src/modules/schedule/core/session.py:443 +msgctxt "session|notify|dm|join_line:channels" +msgid "Please attend your session by joining one of the following:" +msgstr "" + +#: src/modules/schedule/core/session.py:453 +msgctxt "session|notify|dm|title" +msgid "Your Scheduled Session has started!" +msgstr "" + +#: src/modules/schedule/core/session.py:457 +#, possible-python-brace-format +msgctxt "session|notify|dm|description" +msgid "Your scheduled session in {dest} has now begun!" +msgstr "" + +#: src/modules/schedule/core/session.py:482 #, possible-python-brace-format msgctxt "session|status|title" msgid "Session {start} - {end}" msgstr "" -#: src/modules/schedule/core/session.py:369 +#: src/modules/schedule/core/session.py:493 msgctxt "session|status|desc:cancelled" msgid "" "I cancelled this scheduled session because I was unavailable. All members " "who booked the session have been refunded." msgstr "" -#: src/modules/schedule/core/session.py:376 +#: src/modules/schedule/core/session.py:500 msgctxt "session|status|desc:no_members" msgid "*No members scheduled this session.*" msgstr "" -#: src/modules/schedule/core/session.py:382 +#: src/modules/schedule/core/session.py:506 #, possible-python-brace-format msgctxt "session|status:preparing|desc:has_members" msgid "Starting {start}" msgstr "" -#: src/modules/schedule/core/session.py:385 +#: src/modules/schedule/core/session.py:509 msgctxt "session|status:preparing|field:members" msgid "Members" msgstr "" -#: src/modules/schedule/core/session.py:392 +#: src/modules/schedule/core/session.py:516 #, possible-python-brace-format msgctxt "session|status:running|desc:has_members" msgid "Finishing {start}" msgstr "" -#: src/modules/schedule/core/session.py:426 +#: src/modules/schedule/core/session.py:550 msgctxt "session|status:running|field:waiting" msgid "Waiting For" msgstr "" -#: src/modules/schedule/core/session.py:432 +#: src/modules/schedule/core/session.py:556 msgctxt "session|status:running|field:attending" msgid "Attending" msgstr "" -#: src/modules/schedule/core/session.py:438 +#: src/modules/schedule/core/session.py:562 msgctxt "session|status:running|field:attended" msgid "Attended" msgstr "" -#: src/modules/schedule/core/session.py:463 +#: src/modules/schedule/core/session.py:587 #, possible-python-brace-format msgctxt "session|status:finished|desc:everyone_att" msgid "" @@ -917,7 +1120,7 @@ msgid "" "**{reward} + {bonus}**!" msgstr "" -#: src/modules/schedule/core/session.py:474 +#: src/modules/schedule/core/session.py:598 #, possible-python-brace-format msgctxt "session|status:finished|desc:some_att" msgid "" @@ -927,7 +1130,7 @@ msgid "" "without refund!*" msgstr "" -#: src/modules/schedule/core/session.py:486 +#: src/modules/schedule/core/session.py:610 msgctxt "session|status:finished|desc:some_att" msgid "" "No-one attended this session! No-one received rewards.\n" @@ -935,12 +1138,22 @@ msgid "" "without refund!*" msgstr "" -#: src/modules/schedule/core/session.py:492 +#: src/modules/schedule/core/session.py:616 msgctxt "session|status:finished|field:attended" msgid "Attended" msgstr "" -#: src/modules/schedule/core/session.py:497 +#: src/modules/schedule/core/session.py:621 msgctxt "session|status:finished|field:missing" msgid "Missing" msgstr "" + +#: src/modules/schedule/core/timeslot.py:487 +msgctxt "session|closing|audit_reason" +msgid "Removing previous scheduled session member permissions." +msgstr "" + +#: src/modules/schedule/core/timeslot.py:506 +msgctxt "session|closing|disconnecting|audit_reason" +msgid "Disconnecting previous scheduled session members." +msgstr "" diff --git a/locales/templates/settings_base.pot b/locales/templates/settings_base.pot index ff6959cc..8fce9834 100644 --- a/locales/templates/settings_base.pot +++ b/locales/templates/settings_base.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -22,23 +22,28 @@ msgctxt "setting|formatted|notset" msgid "Not Set" msgstr "" -#: src/settings/ui.py:338 +#: src/settings/ui.py:320 +msgctxt "setting|embed_field|too_long" +msgid "Too long to display here!" +msgstr "" + +#: src/settings/ui.py:354 #, possible-python-brace-format msgctxt "setting|summary_embed|title" msgid "Configuration options for `{name}`" msgstr "" -#: src/settings/ui.py:350 +#: src/settings/ui.py:366 msgctxt "setting|summary_table|field:currently|key" msgid "Currently" msgstr "" -#: src/settings/ui.py:357 +#: src/settings/ui.py:373 msgctxt "setting|summary_table|field:default|key" msgid "By Default" msgstr "" -#: src/settings/ui.py:364 +#: src/settings/ui.py:380 msgctxt "setting|summary_table|field:set|key" msgid "Set Using" msgstr "" @@ -84,91 +89,91 @@ msgctxt "settype:role|accepts" msgid "A role name or id" msgstr "" -#: src/settings/setting_types.py:427 +#: src/settings/setting_types.py:430 #, possible-python-brace-format msgctxt "settype:role|parse|error:not_found" msgid "Role `{string}` could not be found in this guild!" msgstr "" -#: src/settings/setting_types.py:492 +#: src/settings/setting_types.py:495 msgctxt "settype:bool|accepts" msgid "Enabled/Disabled" msgstr "" -#: src/settings/setting_types.py:497 +#: src/settings/setting_types.py:500 msgctxt "settype:bool|parse:truthy_values" msgid "enabled|yes|true|on|enable|1" msgstr "" -#: src/settings/setting_types.py:501 +#: src/settings/setting_types.py:504 msgctxt "settype:bool|parse:falsey_values" msgid "disabled|no|false|off|disable|0" msgstr "" -#: src/settings/setting_types.py:506 +#: src/settings/setting_types.py:509 msgctxt "settype:bool|output:true" msgid "On" msgstr "" -#: src/settings/setting_types.py:507 +#: src/settings/setting_types.py:510 msgctxt "settype:bool|output:false" msgid "Off" msgstr "" -#: src/settings/setting_types.py:508 +#: src/settings/setting_types.py:511 msgctxt "settype:bool|output:none" msgid "Not Set" msgstr "" -#: src/settings/setting_types.py:619 +#: src/settings/setting_types.py:622 msgctxt "settype:integer|accepts" msgid "An integer" msgstr "" -#: src/settings/setting_types.py:682 +#: src/settings/setting_types.py:685 msgctxt "settype:emoji|desc" msgid "Unicode or custom emoji" msgstr "" -#: src/settings/setting_types.py:754 +#: src/settings/setting_types.py:757 msgctxt "settype:guildid|accepts" msgid "Any Snowflake ID" msgstr "" -#: src/settings/setting_types.py:823 +#: src/settings/setting_types.py:826 msgctxt "settype:timezone|accepts" msgid "A timezone name from the 'tz database' (e.g. 'Europe/London')" msgstr "" -#: src/settings/setting_types.py:893 +#: src/settings/setting_types.py:896 msgctxt "settype:timezone|summary_table|field:supported|key" msgid "Supported" msgstr "" -#: src/settings/setting_types.py:897 +#: src/settings/setting_types.py:900 #, possible-python-brace-format msgctxt "settype:timezone|summary_table|field:supported|value" msgid "Any timezone from the [tz database]({link})." msgstr "" -#: src/settings/setting_types.py:914 +#: src/settings/setting_types.py:917 #, possible-python-brace-format msgctxt "set_type:timezone|acmpl|no_matching" msgid "No timezones matching '{input}'!" msgstr "" -#: src/settings/setting_types.py:927 +#: src/settings/setting_types.py:930 #, possible-python-brace-format msgctxt "set_type:timezone|acmpl|choice" msgid "{tz} (Currently {now})" msgstr "" -#: src/settings/setting_types.py:957 +#: src/settings/setting_types.py:960 msgctxt "settype:timestamp|accepts" msgid "A timestamp in the form YYYY-MM-DD HH:MM" msgstr "" -#: src/settings/setting_types.py:986 +#: src/settings/setting_types.py:989 #, possible-python-brace-format msgctxt "settype:timestamp|parse|error:invalid" msgid "" @@ -176,43 +181,43 @@ msgid "" "format." msgstr "" -#: src/settings/setting_types.py:1017 +#: src/settings/setting_types.py:1020 msgctxt "settype:raw|accepts" msgid "Anything" msgstr "" -#: src/settings/setting_types.py:1070 +#: src/settings/setting_types.py:1073 msgctxt "settype:enum|accepts" msgid "A valid option." msgstr "" -#: src/settings/setting_types.py:1120 +#: src/settings/setting_types.py:1123 #, possible-python-brace-format msgctxt "settype:enum|parse|error:not_found" msgid "`{provided}` is not a valid option!" msgstr "" -#: src/settings/setting_types.py:1168 +#: src/settings/setting_types.py:1171 msgctxt "settype:duration|accepts" msgid "A number of days, hours, minutes, and seconds, e.g. `2d 4h 10s`." msgstr "" -#: src/settings/setting_types.py:1349 +#: src/settings/setting_types.py:1352 msgctxt "settype:channel_list|accepts" msgid "Comma separated list of channel ids." msgstr "" -#: src/settings/setting_types.py:1360 +#: src/settings/setting_types.py:1363 msgctxt "settype:role_list|accepts" msgid "Comma separated list of role ids." msgstr "" -#: src/settings/setting_types.py:1376 +#: src/settings/setting_types.py:1379 msgctxt "settype:stringlist|accepts" msgid "Comma separated strings." msgstr "" -#: src/settings/setting_types.py:1387 +#: src/settings/setting_types.py:1390 msgctxt "settype:guildidlist|accepts" msgid "Comma separated list of guild ids." msgstr "" diff --git a/locales/templates/shop.pot b/locales/templates/shop.pot index d8a6b050..54526f8a 100644 --- a/locales/templates/shop.pot +++ b/locales/templates/shop.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -32,27 +32,27 @@ msgctxt "cmd:shop|desc" msgid "Purchase coloures, roles, and other goodies with LionCoins." msgstr "" -#: src/modules/shop/cog.py:124 +#: src/modules/shop/cog.py:125 msgctxt "cmd:shop_open" msgid "open" msgstr "" -#: src/modules/shop/cog.py:125 +#: src/modules/shop/cog.py:126 msgctxt "cmd:shop_open|desc" msgid "Open the server shop." msgstr "" -#: src/modules/shop/cog.py:151 +#: src/modules/shop/cog.py:153 msgctxt "cmd:shop_open|error:no_shops" msgid "There is nothing to buy!" msgstr "" -#: src/modules/shop/cog.py:213 +#: src/modules/shop/cog.py:215 msgctxt "ui:stores|button:close|label" msgid "Close" msgstr "" -#: src/modules/shop/cog.py:220 +#: src/modules/shop/cog.py:222 msgctxt "ui:stores|button:close|response|title" msgid "Shop Closed" msgstr "" diff --git a/locales/templates/statistics.pot b/locales/templates/statistics.pot index d034783d..e68844bc 100644 --- a/locales/templates/statistics.pot +++ b/locales/templates/statistics.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,58 +17,58 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/modules/statistics/cog.py:42 +#: src/modules/statistics/cog.py:43 msgctxt "cmd:me" msgid "me" msgstr "" -#: src/modules/statistics/cog.py:45 +#: src/modules/statistics/cog.py:46 msgctxt "cmd:me|desc" msgid "Display your personal profile and summary statistics." msgstr "" -#: src/modules/statistics/cog.py:55 +#: src/modules/statistics/cog.py:57 msgctxt "cmd:stats" msgid "stats" msgstr "" -#: src/modules/statistics/cog.py:58 +#: src/modules/statistics/cog.py:60 msgctxt "cmd:stats|desc" msgid "Weekly and monthly statistics for your recent activity." msgstr "" -#: src/modules/statistics/cog.py:71 +#: src/modules/statistics/cog.py:74 msgctxt "cmd:leaderboard" msgid "leaderboard" msgstr "" -#: src/modules/statistics/cog.py:74 +#: src/modules/statistics/cog.py:77 msgctxt "cmd:leaderboard|desc" msgid "Server leaderboard." msgstr "" -#: src/modules/statistics/cog.py:89 +#: src/modules/statistics/cog.py:92 #, possible-python-brace-format msgctxt "cmd:leaderboard|chunking|desc" msgid "Requesting server member list from Discord, please wait {loading}" msgstr "" -#: src/modules/statistics/cog.py:108 +#: src/modules/statistics/cog.py:115 msgctxt "cmd:configure_statistics" msgid "statistics" msgstr "" -#: src/modules/statistics/cog.py:109 +#: src/modules/statistics/cog.py:116 msgctxt "cmd:configure_statistics|desc" msgid "Statistics configuration panel" msgstr "" -#: src/modules/statistics/cog.py:112 +#: src/modules/statistics/cog.py:119 msgctxt "cmd:configure_statistics|param:season_start" msgid "season_start" msgstr "" -#: src/modules/statistics/cog.py:117 +#: src/modules/statistics/cog.py:124 msgctxt "cmd:configure_statistics|param:season_start|desc" msgid "" "Time from which to start counting activity for rank badges and season " @@ -613,101 +613,108 @@ msgid "" "again to revert." msgstr "" -#: src/modules/statistics/ui/leaderboard.py:250 +#: src/modules/statistics/ui/leaderboard.py:253 msgctxt "ui:leaderboard|menu:stats|placeholder" msgid "Select Activity Type" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:259 +#: src/modules/statistics/ui/leaderboard.py:262 msgctxt "ui:leaderboard|menu:stats|item:voice" msgid "Voice Activity" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:270 +#: src/modules/statistics/ui/leaderboard.py:273 msgctxt "ui:leaderboard|menu:stats|item:study" msgid "Study Statistics" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:281 +#: src/modules/statistics/ui/leaderboard.py:284 msgctxt "ui:leaderboard|menu:stats|item:message" msgid "Message Activity" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:292 +#: src/modules/statistics/ui/leaderboard.py:295 msgctxt "ui:leaderboard|menu;stats|item:anki" msgid "Anki Cards Reviewed" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:346 +#: src/modules/statistics/ui/leaderboard.py:349 msgctxt "ui:leaderboard|button:season|label" msgid "This Season" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:350 +#: src/modules/statistics/ui/leaderboard.py:353 msgctxt "ui:leaderboard|button:day|label" msgid "Today" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:354 +#: src/modules/statistics/ui/leaderboard.py:357 msgctxt "ui:leaderboard|button:week|label" msgid "This Week" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:358 +#: src/modules/statistics/ui/leaderboard.py:361 msgctxt "ui:leaderboard|button:month|label" msgid "This Month" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:362 +#: src/modules/statistics/ui/leaderboard.py:365 msgctxt "ui:leaderboard|button:alltime|label" msgid "All Time" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:366 +#: src/modules/statistics/ui/leaderboard.py:369 msgctxt "ui:leaderboard|button:jump|label" msgid "Jump" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:381 +#: src/modules/statistics/ui/leaderboard.py:384 msgctxt "ui:leaderboard|button:jump|input:title" msgid "Jump to page" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:385 +#: src/modules/statistics/ui/leaderboard.py:388 msgctxt "ui:leaderboard|button:jump|input:question" msgid "Page number to jump to" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:396 +#: src/modules/statistics/ui/leaderboard.py:399 msgctxt "ui:leaderboard|button:jump|error:invalid_page" msgid "Invalid page number, please try again!" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:442 +#: src/modules/statistics/ui/leaderboard.py:443 +msgctxt "ui:leaderboard|chunk_warning" +msgid "" +"**Note:** Could not retrieve member list from Discord, so some members may " +"be missing. Try again in a minute!" +msgstr "" + +#: src/modules/statistics/ui/leaderboard.py:450 #, possible-python-brace-format msgctxt "ui:leaderboard|since" msgid "Counting statistics since {timestamp}" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:453 +#: src/modules/statistics/ui/leaderboard.py:463 #, possible-python-brace-format msgctxt "ui:leaderboard|mode:voice|message:empty|desc" msgid "There has been no voice activity since {timestamp}" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:458 +#: src/modules/statistics/ui/leaderboard.py:468 #, possible-python-brace-format msgctxt "ui:leaderboard|mode:text|message:empty|desc" msgid "There has been no message activity since {timestamp}" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:463 +#: src/modules/statistics/ui/leaderboard.py:473 #, possible-python-brace-format msgctxt "ui:leaderboard|mode:anki|message:empty|desc" msgid "There have been no Anki cards reviewed since {timestamp}" msgstr "" -#: src/modules/statistics/ui/leaderboard.py:472 +#: src/modules/statistics/ui/leaderboard.py:482 msgctxt "ui:leaderboard|message:empty|title" msgid "Leaderboard Empty!" msgstr "" diff --git a/locales/templates/stats-gui.pot b/locales/templates/stats-gui.pot index 8099bcd1..0e659e79 100644 --- a/locales/templates/stats-gui.pot +++ b/locales/templates/stats-gui.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/sysadmin.pot b/locales/templates/sysadmin.pot index c09da5d5..05e2d22b 100644 --- a/locales/templates/sysadmin.pot +++ b/locales/templates/sysadmin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/tasklist.pot b/locales/templates/tasklist.pot index 2190ec80..7ccbd255 100644 --- a/locales/templates/tasklist.pot +++ b/locales/templates/tasklist.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/test.pot b/locales/templates/test.pot index 330d6555..2ccd8f96 100644 --- a/locales/templates/test.pot +++ b/locales/templates/test.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/text-tracker.pot b/locales/templates/text-tracker.pot index 734e1335..d30eced7 100644 --- a/locales/templates/text-tracker.pot +++ b/locales/templates/text-tracker.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,22 +17,22 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/tracking/text/cog.py:254 +#: src/tracking/text/cog.py:261 msgctxt "cmd:configure_message_exp" msgid "message_exp" msgstr "" -#: src/tracking/text/cog.py:257 +#: src/tracking/text/cog.py:264 msgctxt "cmd:configure_message_exp|desc" msgid "Configure Message Tracking & Experience" msgstr "" -#: src/tracking/text/cog.py:320 +#: src/tracking/text/cog.py:327 msgctxt "cmd:leo_configure_exp_rates" msgid "experience_rates" msgstr "" -#: src/tracking/text/cog.py:323 +#: src/tracking/text/cog.py:330 msgctxt "cmd:leo_configure_exp_rates|desc" msgid "Global experience rate configuration" msgstr "" diff --git a/locales/templates/timer-gui.pot b/locales/templates/timer-gui.pot index 3a3c1ca8..436476f7 100644 --- a/locales/templates/timer-gui.pot +++ b/locales/templates/timer-gui.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/user_config.pot b/locales/templates/user_config.pot index e6bc395f..2f803d53 100644 --- a/locales/templates/user_config.pot +++ b/locales/templates/user_config.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/utils.pot b/locales/templates/utils.pot index 6bca2f4a..9d39b871 100644 --- a/locales/templates/utils.pot +++ b/locales/templates/utils.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -115,22 +115,22 @@ msgctxt "util:Duration|acmpl|error" msgid "Cannot extract duration from \"{partial}\"" msgstr "" -#: src/utils/lib.py:678 +#: src/utils/lib.py:679 msgctxt "util:parse_dur|regex:day" msgid "(?P\\d+)\\s*(?:(d)|(day))" msgstr "" -#: src/utils/lib.py:685 +#: src/utils/lib.py:686 msgctxt "util:parse_dur|regex:hour" msgid "(?P\\d+)\\s*(?:(h)|(hour))" msgstr "" -#: src/utils/lib.py:692 +#: src/utils/lib.py:693 msgctxt "util:parse_dur|regex:minute" msgid "(?P\\d+)\\s*(?:(m)|(min))" msgstr "" -#: src/utils/lib.py:699 +#: src/utils/lib.py:700 msgctxt "util:parse_dur|regex:second" msgid "(?P\\d+)\\s*(?:(s)|(sec))" msgstr "" @@ -273,238 +273,248 @@ msgctxt "ui:msg_editor|button:add_embed|label" msgid "Add Embed" msgstr "" -#: src/utils/ui/msgeditor.py:192 +#: src/utils/ui/msgeditor.py:190 +msgctxt "ui:msg_editor|button:rm_embed|sample_content" +msgid "Content Placeholder" +msgstr "" + +#: src/utils/ui/msgeditor.py:199 +msgctxt "ui:msg_editor|button:rm_embed|label" +msgid "Remove Embed" +msgstr "" + +#: src/utils/ui/msgeditor.py:217 msgctxt "ui:msg_editor|modal:body|field:content|label" msgid "Message Content" msgstr "" -#: src/utils/ui/msgeditor.py:203 +#: src/utils/ui/msgeditor.py:228 msgctxt "ui:msg_editor|modal:body|field:desc|label" msgid "Embed Description" msgstr "" -#: src/utils/ui/msgeditor.py:214 +#: src/utils/ui/msgeditor.py:239 msgctxt "ui:msg_editor|modal:body|field:title|label" msgid "Embed Title" msgstr "" -#: src/utils/ui/msgeditor.py:225 +#: src/utils/ui/msgeditor.py:250 msgctxt "ui:msg_editor|modal:body|field:colour|label" msgid "Embed Colour" msgstr "" -#: src/utils/ui/msgeditor.py:240 +#: src/utils/ui/msgeditor.py:265 msgctxt "ui:msg_editor|modal:body|title" msgid "Message Body Editor" msgstr "" -#: src/utils/ui/msgeditor.py:265 +#: src/utils/ui/msgeditor.py:290 msgctxt "ui:msg_editor|button:body|error:invalid_colour" msgid "" "Invalid colour format! Please enter colours as hex codes, e.g. `#E67E22`" msgstr "" -#: src/utils/ui/msgeditor.py:285 +#: src/utils/ui/msgeditor.py:310 msgctxt "ui:msg_editor|button:body|label" msgid "Body" msgstr "" -#: src/utils/ui/msgeditor.py:302 +#: src/utils/ui/msgeditor.py:327 msgctxt "ui:msg_editor|modal:author|field:name|label" msgid "Author Name" msgstr "" -#: src/utils/ui/msgeditor.py:313 +#: src/utils/ui/msgeditor.py:338 msgctxt "ui:msg_editor|modal:author|field:link|label" msgid "Author URL" msgstr "" -#: src/utils/ui/msgeditor.py:323 +#: src/utils/ui/msgeditor.py:348 msgctxt "ui:msg_editor|modal:author|field:image|label" msgid "Author Image URL" msgstr "" -#: src/utils/ui/msgeditor.py:334 +#: src/utils/ui/msgeditor.py:359 msgctxt "ui:msg_editor|modal:author|title" msgid "Embed Author Editor" msgstr "" -#: src/utils/ui/msgeditor.py:360 +#: src/utils/ui/msgeditor.py:385 msgctxt "ui:msg_editor|button:author|label" msgid "Author" msgstr "" -#: src/utils/ui/msgeditor.py:377 +#: src/utils/ui/msgeditor.py:402 msgctxt "ui:msg_editor|modal:footer|field:text|label" msgid "Footer Text" msgstr "" -#: src/utils/ui/msgeditor.py:388 +#: src/utils/ui/msgeditor.py:413 msgctxt "ui:msg_editor|modal:footer|field:image|label" msgid "Footer Image URL" msgstr "" -#: src/utils/ui/msgeditor.py:398 +#: src/utils/ui/msgeditor.py:423 msgctxt "ui:msg_editor|modal:footer|field:timestamp|label" msgid "Embed Timestamp (in ISO format)" msgstr "" -#: src/utils/ui/msgeditor.py:410 +#: src/utils/ui/msgeditor.py:435 msgctxt "ui:msg_editor|modal:footer|title" msgid "Embed Footer Editor" msgstr "" -#: src/utils/ui/msgeditor.py:429 +#: src/utils/ui/msgeditor.py:454 msgctxt "ui:msg_editor|button:footer|error:invalid_timestamp" msgid "Invalid timestamp! Please enter the timestamp in ISO format." msgstr "" -#: src/utils/ui/msgeditor.py:449 +#: src/utils/ui/msgeditor.py:474 msgctxt "ui:msg_editor|button:footer|label" msgid "Footer" msgstr "" -#: src/utils/ui/msgeditor.py:467 +#: src/utils/ui/msgeditor.py:492 msgctxt "ui:msg_editor|modal:images|field:thumb|label" msgid "Thumbnail Image URL" msgstr "" -#: src/utils/ui/msgeditor.py:477 +#: src/utils/ui/msgeditor.py:502 msgctxt "ui:msg_editor|modal:images|field:image|label" msgid "Embed Image URL" msgstr "" -#: src/utils/ui/msgeditor.py:487 +#: src/utils/ui/msgeditor.py:512 msgctxt "ui:msg_editor|modal:images|title" msgid "Embed images Editor" msgstr "" -#: src/utils/ui/msgeditor.py:517 +#: src/utils/ui/msgeditor.py:542 msgctxt "ui:msg_editor|button:images|label" msgid "Images" msgstr "" -#: src/utils/ui/msgeditor.py:535 +#: src/utils/ui/msgeditor.py:560 msgctxt "ui:msg_editor|modal:add_field|field:position|label" msgid "Field number to insert at" msgstr "" -#: src/utils/ui/msgeditor.py:545 +#: src/utils/ui/msgeditor.py:570 msgctxt "ui:msg_editor|modal:add_field|field:name|label" msgid "Field name" msgstr "" -#: src/utils/ui/msgeditor.py:555 +#: src/utils/ui/msgeditor.py:580 msgctxt "ui:msg_editor|modal:add_field|field:value|label" msgid "Field value" msgstr "" -#: src/utils/ui/msgeditor.py:565 +#: src/utils/ui/msgeditor.py:590 msgctxt "ui:msg_editor|modal:add_field|field:inline|label" msgid "Whether the field is inline" msgstr "" -#: src/utils/ui/msgeditor.py:569 +#: src/utils/ui/msgeditor.py:594 msgctxt "ui:msg_editor|modal:add_field|field:inline|placeholder" msgid "True/False" msgstr "" -#: src/utils/ui/msgeditor.py:582 +#: src/utils/ui/msgeditor.py:607 msgctxt "ui:msg_editor|modal:add_field|title" msgid "Add Embed Field" msgstr "" -#: src/utils/ui/msgeditor.py:602 +#: src/utils/ui/msgeditor.py:627 msgctxt "ui:msg_editor|modal:add_field|error:position_not_int" msgid "The field position must be an integer!" msgstr "" -#: src/utils/ui/msgeditor.py:621 +#: src/utils/ui/msgeditor.py:646 msgctxt "ui:msg_editor|button:add_field|label" msgid "Add Field" msgstr "" -#: src/utils/ui/msgeditor.py:637 +#: src/utils/ui/msgeditor.py:662 msgctxt "ui:msg_editor|format_field|name_placeholder" msgid "-" msgstr "" -#: src/utils/ui/msgeditor.py:666 +#: src/utils/ui/msgeditor.py:691 msgctxt "ui:msg_editor|modal:edit_field|field:name|label" msgid "Field name" msgstr "" -#: src/utils/ui/msgeditor.py:677 +#: src/utils/ui/msgeditor.py:702 msgctxt "ui:msg_editor|modal:edit_field|field:value|label" msgid "Field value" msgstr "" -#: src/utils/ui/msgeditor.py:688 +#: src/utils/ui/msgeditor.py:713 msgctxt "ui:msg_editor|modal:edit_field|field:inline|label" msgid "Whether the field is inline" msgstr "" -#: src/utils/ui/msgeditor.py:692 +#: src/utils/ui/msgeditor.py:717 msgctxt "ui:msg_editor|modal:edit_field|field:inline|placeholder" msgid "True/False" msgstr "" -#: src/utils/ui/msgeditor.py:704 +#: src/utils/ui/msgeditor.py:729 msgctxt "ui:msg_editor|modal:edit_field|title" msgid "Edit Embed Field" msgstr "" -#: src/utils/ui/msgeditor.py:733 +#: src/utils/ui/msgeditor.py:758 msgctxt "ui:msg_editor|menu:edit_field|placeholder" msgid "Edit Embed Field" msgstr "" -#: src/utils/ui/msgeditor.py:772 +#: src/utils/ui/msgeditor.py:797 msgctxt "ui:msg_deleteor|menu:delete_field|placeholder" msgid "Remove Embed Field" msgstr "" -#: src/utils/ui/msgeditor.py:808 +#: src/utils/ui/msgeditor.py:833 msgctxt "ui:msg_editor|button:save|label" msgid "Save" msgstr "" -#: src/utils/ui/msgeditor.py:833 +#: src/utils/ui/msgeditor.py:858 msgctxt "ui:msg_editor|button:download|label" msgid "Download" msgstr "" -#: src/utils/ui/msgeditor.py:852 +#: src/utils/ui/msgeditor.py:877 msgctxt "ui:msg_editor|button:undo|label" msgid "Undo" msgstr "" -#: src/utils/ui/msgeditor.py:872 +#: src/utils/ui/msgeditor.py:897 msgctxt "ui:msg_editor|button:redo|label" msgid "Redo" msgstr "" -#: src/utils/ui/msgeditor.py:891 +#: src/utils/ui/msgeditor.py:916 msgctxt "ui:msg_editor|button:quit|confirm" msgid "You have unsaved changes! Are you sure you want to quit?" msgstr "" -#: src/utils/ui/msgeditor.py:896 +#: src/utils/ui/msgeditor.py:921 msgctxt "ui:msg_editor|button:quit|confirm|button:yes" msgid "Yes, Quit Now" msgstr "" -#: src/utils/ui/msgeditor.py:902 +#: src/utils/ui/msgeditor.py:927 msgctxt "ui:msg_editor|button:quit|confirm|button:no" msgid "No, Go Back" msgstr "" -#: src/utils/ui/msgeditor.py:996 +#: src/utils/ui/msgeditor.py:1025 msgctxt "ui:msg_editor|timeout_warning|title" msgid "Warning!" msgstr "" -#: src/utils/ui/msgeditor.py:1000 +#: src/utils/ui/msgeditor.py:1029 #, possible-python-brace-format msgctxt "ui:msg_editor|timeout_warning|desc" msgid "" @@ -512,7 +522,7 @@ msgid "" "editing." msgstr "" -#: src/utils/ui/msgeditor.py:1009 +#: src/utils/ui/msgeditor.py:1038 msgctxt "ui:msg_editor|timeout_warning|continue" msgid "Continue" msgstr "" diff --git a/locales/templates/video.pot b/locales/templates/video.pot index 7a90a3ce..cd8a6a37 100644 --- a/locales/templates/video.pot +++ b/locales/templates/video.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locales/templates/voice-tracker.pot b/locales/templates/voice-tracker.pot index ace47871..14cd52a6 100644 --- a/locales/templates/voice-tracker.pot +++ b/locales/templates/voice-tracker.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,129 +17,129 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/tracking/voice/cog.py:649 +#: src/tracking/voice/cog.py:661 msgctxt "cmd:now" msgid "now" msgstr "" -#: src/tracking/voice/cog.py:652 +#: src/tracking/voice/cog.py:664 msgctxt "cmd:now|desc" msgid "" "Describe what you are working on, or see what your friends are working on!" msgstr "" -#: src/tracking/voice/cog.py:656 +#: src/tracking/voice/cog.py:668 msgctxt "cmd:now|param:tag" msgid "tag" msgstr "" -#: src/tracking/voice/cog.py:657 +#: src/tracking/voice/cog.py:669 msgctxt "cmd:now|param:user" msgid "user" msgstr "" -#: src/tracking/voice/cog.py:658 +#: src/tracking/voice/cog.py:670 msgctxt "cmd:now|param:clear" msgid "clear" msgstr "" -#: src/tracking/voice/cog.py:663 +#: src/tracking/voice/cog.py:675 msgctxt "cmd:now|param:tag|desc" msgid "Describe what you are working on in 10 characters or less!" msgstr "" -#: src/tracking/voice/cog.py:667 +#: src/tracking/voice/cog.py:679 msgctxt "cmd:now|param:user|desc" msgid "Check what a friend is working on." msgstr "" -#: src/tracking/voice/cog.py:671 +#: src/tracking/voice/cog.py:683 msgctxt "cmd:now|param:clear|desc" msgid "Unset your activity tag (or the target user's tag, for moderators)." msgstr "" -#: src/tracking/voice/cog.py:698 +#: src/tracking/voice/cog.py:710 msgctxt "cmd:now|target:self|error:target_inactive" msgid "" "You have no running session! Join a tracked voice channel to start a session." msgstr "" -#: src/tracking/voice/cog.py:707 +#: src/tracking/voice/cog.py:719 #, possible-python-brace-format msgctxt "cmd:now|target:other|error:target_inactive" msgid "{mention} has no running session!" msgstr "" -#: src/tracking/voice/cog.py:722 +#: src/tracking/voice/cog.py:734 msgctxt "cmd:now|target:self|mode:clear|success|title" msgid "Session Tag Cleared" msgstr "" -#: src/tracking/voice/cog.py:726 +#: src/tracking/voice/cog.py:738 msgctxt "cmd:now|target:self|mode:clear|success|desc" msgid "Successfully unset your session tag." msgstr "" -#: src/tracking/voice/cog.py:735 +#: src/tracking/voice/cog.py:747 msgctxt "cmd:now|target:other|mode:clear|error:perms|title" msgid "You can't do that!" msgstr "" -#: src/tracking/voice/cog.py:739 +#: src/tracking/voice/cog.py:751 msgctxt "cmd:now|target:other|mode:clear|error:perms|desc" msgid "You need to be a moderator to set or clear someone else's session tag." msgstr "" -#: src/tracking/voice/cog.py:749 +#: src/tracking/voice/cog.py:761 msgctxt "cmd:now|target:other|mode:clear|success|title" msgid "Session Tag Cleared!" msgstr "" -#: src/tracking/voice/cog.py:753 +#: src/tracking/voice/cog.py:765 #, possible-python-brace-format msgctxt "cmd:now|target:other|mode:clear|success|desc" msgid "Cleared {target}'s session tag." msgstr "" -#: src/tracking/voice/cog.py:765 +#: src/tracking/voice/cog.py:777 msgctxt "cmd:now|target:self|mode:set|success|title" msgid "Session Tag Set!" msgstr "" -#: src/tracking/voice/cog.py:769 +#: src/tracking/voice/cog.py:781 #, possible-python-brace-format msgctxt "cmd:now|target:self|mode:set|success|desc" msgid "You are now working on `{new_tag}`. Good luck!" msgstr "" -#: src/tracking/voice/cog.py:778 +#: src/tracking/voice/cog.py:790 msgctxt "cmd:now|target:other|mode:set|error:perms|title" msgid "You can't do that!" msgstr "" -#: src/tracking/voice/cog.py:782 +#: src/tracking/voice/cog.py:794 msgctxt "cmd:now|target:other|mode:set|error:perms|desc" msgid "You need to be a moderator to set or clear someone else's session tag!" msgstr "" -#: src/tracking/voice/cog.py:792 +#: src/tracking/voice/cog.py:804 msgctxt "cmd:now|target:other|mode:set|success|title" msgid "Session Tag Set!" msgstr "" -#: src/tracking/voice/cog.py:796 +#: src/tracking/voice/cog.py:808 #, possible-python-brace-format msgctxt "cmd:now|target:other|mode:set|success|desc" msgid "Set {target}'s session tag to `{new_tag}`." msgstr "" -#: src/tracking/voice/cog.py:805 +#: src/tracking/voice/cog.py:817 #, possible-python-brace-format msgctxt "cmd:now|target:self|mode:show_with_tag|desc" msgid "You have been working on **`{tag}`** in {channel} since {time}!" msgstr "" -#: src/tracking/voice/cog.py:810 +#: src/tracking/voice/cog.py:822 #, possible-python-brace-format msgctxt "cmd:now|target:self|mode:show_without_tag|desc" msgid "" @@ -148,7 +148,7 @@ msgid "" "Use `/now ` to set what you are working on." msgstr "" -#: src/tracking/voice/cog.py:817 +#: src/tracking/voice/cog.py:829 #, possible-python-brace-format msgctxt "cmd:now|target:other|mode:show_with_tag|desc" msgid "" @@ -156,23 +156,23 @@ msgid "" "They have been working on **{tag}** since {time}." msgstr "" -#: src/tracking/voice/cog.py:823 +#: src/tracking/voice/cog.py:835 #, possible-python-brace-format msgctxt "cmd:now|target:other|mode:show_without_tag|desc" msgid "{target} has been working in {channel} since {time}!" msgstr "" -#: src/tracking/voice/cog.py:846 +#: src/tracking/voice/cog.py:858 msgctxt "cmd:configure_voice_rates" msgid "voice_rewards" msgstr "" -#: src/tracking/voice/cog.py:849 +#: src/tracking/voice/cog.py:861 msgctxt "cmd:configure_voice_rates|desc" msgid "Configure Voice tracking rewards and experience" msgstr "" -#: src/tracking/voice/cog.py:906 +#: src/tracking/voice/cog.py:918 #, possible-python-brace-format msgctxt "cmd:configure_voice_tracking|mode:voice|resp:success|desc" msgid "" @@ -181,7 +181,7 @@ msgid "" "day." msgstr "" -#: src/tracking/voice/cog.py:917 +#: src/tracking/voice/cog.py:929 #, possible-python-brace-format msgctxt "cmd:configure_voice_tracking|mode:study|resp:success|desc" msgid "" diff --git a/locales/templates/wards.pot b/locales/templates/wards.pot index 4a1694ab..f2c43f64 100644 --- a/locales/templates/wards.pot +++ b/locales/templates/wards.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,68 +17,68 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/wards.py:79 +#: src/wards.py:83 msgctxt "ward:sys_admin|failed" msgid "You must be a bot owner to do this!" msgstr "" -#: src/wards.py:95 +#: src/wards.py:99 msgctxt "ward:high_management|failed" msgid "You must have the `ADMINISTRATOR` permission in this server to do this!" msgstr "" -#: src/wards.py:111 +#: src/wards.py:115 msgctxt "ward:low_management|failed" msgid "You must have the `MANAGE_GUILD` permission in this server to do this!" msgstr "" -#: src/wards.py:123 +#: src/wards.py:127 msgctxt "ward:moderator|failed" msgid "" "You must have the configured moderator role, or `MANAGE_GUILD` permissions " "to do this." msgstr "" -#: src/wards.py:149 +#: src/wards.py:153 #, possible-python-brace-format msgctxt "ward:equippable_role|error:bot_managed" msgid "I cannot manage {role} because it is managed by another bot!" msgstr "" -#: src/wards.py:156 +#: src/wards.py:160 #, possible-python-brace-format msgctxt "ward:equippable_role|error:integration" msgid "I cannot manage {role} because it is managed by a server integration." msgstr "" -#: src/wards.py:163 +#: src/wards.py:167 msgctxt "ward:equippable_role|error:default_role" msgid "I cannot manage the server's default role." msgstr "" -#: src/wards.py:170 +#: src/wards.py:174 msgctxt "ward:equippable_role|error:no_perms" msgid "I need the `MANAGE_ROLES` permission before I can manage roles!" msgstr "" -#: src/wards.py:177 +#: src/wards.py:181 #, possible-python-brace-format msgctxt "ward:equippable_role|error:my_top_role" msgid "I cannot assign or remove {role} because it is above my top role!" msgstr "" -#: src/wards.py:184 +#: src/wards.py:188 #, possible-python-brace-format msgctxt "ward:equippable_role|error:not_assignable" msgid "I don't have sufficient permissions to assign or remove {role}." msgstr "" -#: src/wards.py:192 +#: src/wards.py:196 msgctxt "ward:equippable_role|error:actor_perms" msgid "You need the `MANAGE_ROLES` permission before you can configure roles!" msgstr "" -#: src/wards.py:199 +#: src/wards.py:203 #, possible-python-brace-format msgctxt "ward:equippable_role|error:actor_top_role" msgid "You cannot configure {role} because it is above your top role!" diff --git a/locales/templates/weekly-gui.pot b/locales/templates/weekly-gui.pot index 6558ba12..dd8d27ba 100644 --- a/locales/templates/weekly-gui.pot +++ b/locales/templates/weekly-gui.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-13 08:47+0300\n" +"POT-Creation-Date: 2023-10-01 16:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/requirements.txt b/requirements.txt index a34bcc40..011dd9dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ aiohttp==3.7.4.post0 cachetools==4.2.2 configparser==5.0.2 -discord.py +discord.py [voice] iso8601==0.1.16 psycopg[pool] pytz==2021.1 diff --git a/src/babel/cog.py b/src/babel/cog.py index 8f18ddf9..0ca4bcd5 100644 --- a/src/babel/cog.py +++ b/src/babel/cog.py @@ -145,7 +145,7 @@ class BabelCog(LionCog): t(_p( 'cmd:configure_language|error', "You cannot enable `{force_setting}` without having a configured language!" - )).format(force_setting=t(LocaleSettings.ForceLocale.display_name)) + )).format(force_setting=t(LocaleSettings.ForceLocale._display_name)) ) # TODO: Really need simultaneous model writes, or batched writes lines = [] diff --git a/src/babel/settings.py b/src/babel/settings.py index 47da6afe..24c45914 100644 --- a/src/babel/settings.py +++ b/src/babel/settings.py @@ -1,3 +1,4 @@ +from typing import Optional from settings import ModelData from settings.setting_types import StringSetting, BoolSetting @@ -23,11 +24,11 @@ class LocaleSetting(StringSetting): "Enter a supported language (e.g. 'en-GB')." ) - def _desc_table(self) -> list[str]: + def _desc_table(self, show_value: Optional[str] = None) -> list[tuple[str, str]]: translator = ctx_translator.get() t = translator.t - lines = super()._desc_table() + lines = super()._desc_table(show_value=show_value) lines.append(( t(_p( 'settype:locale|summary_table|field:supported|key', diff --git a/src/babel/translator.py b/src/babel/translator.py index 6e5fe904..fa832383 100644 --- a/src/babel/translator.py +++ b/src/babel/translator.py @@ -11,7 +11,7 @@ from discord.enums import Locale logger = logging.getLogger(__name__) -SOURCE_LOCALE = 'en-GB' +SOURCE_LOCALE = 'en_GB' ctx_locale: ContextVar[str] = ContextVar('locale', default=SOURCE_LOCALE) ctx_translator: ContextVar['LeoBabel'] = ContextVar('translator', default=None) # type: ignore @@ -71,6 +71,7 @@ class LeoBabel(Translator): self.translators.clear() def get_translator(self, locale, domain): + locale = locale.replace('-', '_') if locale else None if locale == SOURCE_LOCALE: translator = null elif locale in self.supported_locales and domain in self.supported_domains: @@ -93,7 +94,8 @@ class LeoBabel(Translator): return lazystr._translate_with(translator) async def translate(self, string: locale_str, locale: Locale, context): - if locale.value in self.supported_locales: + loc = locale.value.replace('-', '_') + if loc in self.supported_locales: domain = string.extras.get('domain', None) if domain is None and isinstance(string, LazyStr): logger.debug( @@ -101,7 +103,7 @@ class LeoBabel(Translator): ) return None - translator = self.get_translator(locale.value, domain) + translator = self.get_translator(loc, domain) if not isinstance(string, LazyStr): lazy = LazyStr(Method.GETTEXT, string.message) else: diff --git a/src/bot.py b/src/bot.py index 49dceb11..d643fa73 100644 --- a/src/bot.py +++ b/src/bot.py @@ -70,7 +70,7 @@ async def main(): async with aiohttp.ClientSession() as session: async with LionBot( - command_prefix=commands.when_mentioned, + command_prefix='!leo!', intents=intents, appname=appname, shardname=shardname, diff --git a/src/gui b/src/gui index ba9ace6c..24e94d10 160000 --- a/src/gui +++ b/src/gui @@ -1 +1 @@ -Subproject commit ba9ace6ced300123c53287ff1ba4dbd106d1cc46 +Subproject commit 24e94d10e2ef2e34a6feb2bc8f9eca268260f512 diff --git a/src/modules/economy/data.py b/src/modules/economy/data.py index da4a62df..3e6f09db 100644 --- a/src/modules/economy/data.py +++ b/src/modules/economy/data.py @@ -209,6 +209,9 @@ class EconomyData(Registry, name='economy'): ] # Execute refund transactions return await cls.execute_transactions(*records) + else: + return [] + class ShopTransaction(RowModel): """ diff --git a/src/modules/member_admin/settings.py b/src/modules/member_admin/settings.py index deaba142..057a202c 100644 --- a/src/modules/member_admin/settings.py +++ b/src/modules/member_admin/settings.py @@ -55,6 +55,7 @@ class MemberAdminSettings(SettingGroup): _model = CoreData.Guild _column = CoreData.Guild.greeting_channel.name + _allow_object = False @property def update_message(self) -> str: @@ -188,8 +189,8 @@ class MemberAdminSettings(SettingGroup): self.value = editor_data await self.write() - def _desc_table(self) -> list[str]: - lines = super()._desc_table() + def _desc_table(self, show_value: Optional[str] = None) -> list[tuple[str, str]]: + lines = super()._desc_table(show_value=show_value) t = ctx_translator.get().t keydescs = [ (key, t(value)) for key, value in self._subkey_desc.items() @@ -313,8 +314,8 @@ class MemberAdminSettings(SettingGroup): self.value = editor_data await self.write() - def _desc_table(self) -> list[str]: - lines = super()._desc_table() + def _desc_table(self, show_value: Optional[str] = None) -> list[tuple[str, str]]: + lines = super()._desc_table(show_value=show_value) t = ctx_translator.get().t keydescs = [ (key, t(value)) for key, value in self._subkey_desc_returning.items() diff --git a/src/modules/pomodoro/cog.py b/src/modules/pomodoro/cog.py index a86e9156..885d20d1 100644 --- a/src/modules/pomodoro/cog.py +++ b/src/modules/pomodoro/cog.py @@ -12,6 +12,7 @@ from meta.logger import log_wrap from meta.sharding import THIS_SHARD from meta.monitor import ComponentMonitor, ComponentStatus, StatusLevel from utils.lib import utc_now +from utils.ratelimits import limit_concurrency from wards import low_management_ward @@ -48,16 +49,38 @@ class TimerCog(LionCog): self.timer_options = TimerOptions() self.ready = False - self.timers = defaultdict(dict) + self.timers: dict[int, dict[int, Timer]] = defaultdict(dict) async def _monitor(self): + timers = [timer for tguild in self.timers.values() for timer in tguild.values()] + state = ( + "" + ) + data = dict( + loaded=len(timers), + guilds=len(set(timer.data.guildid for timer in timers)), + members=sum(len(timer.members) for timer in timers), + running=sum(1 for timer in timers if timer.running), + launched=sum(1 for timer in timers if timer._run_task and not timer._run_task.done()), + looping=sum(1 for timer in timers if timer._loop_task and not timer._loop_task.done()), + locked=sum(1 for timer in timers if timer._lock.locked()), + voice_locked=sum(1 for timer in timers if timer._voice_update_lock.locked()), + ) if not self.ready: level = StatusLevel.STARTING - info = "(STARTING) Not ready. {timers} timers loaded." + info = f"(STARTING) Not ready. {state}" else: level = StatusLevel.OKAY - info = "(OK) {timers} timers loaded." - data = dict(timers=len(self.timers)) + info = f"(OK) Ready. {state}" return ComponentStatus(level, info, info, data) async def cog_load(self): @@ -79,15 +102,12 @@ class TimerCog(LionCog): Clears caches and stops run-tasks for each active timer. Does not exist until all timers have completed background tasks. """ - timers = (timer for tguild in self.timers.values() for timer in tguild.values()) - try: - await asyncio.gather(*(timer.unload() for timer in timers)) - except Exception: - logger.exception( - "Exception encountered while unloading `TimerCog`" - ) + timers = [timer for tguild in self.timers.values() for timer in tguild.values()] self.timers.clear() + if timers: + await self._unload_timers(timers) + async def cog_check(self, ctx: LionContext): if not self.ready: raise CheckFailure( @@ -101,6 +121,20 @@ class TimerCog(LionCog): else: return True + @log_wrap(action='Unload Timers') + async def _unload_timers(self, timers: list[Timer]): + """ + Unload all active timers. + """ + tasks = [asyncio.create_task(timer.unload()) for timer in timers] + for timer, task in zip(timers, tasks): + try: + await task + except Exception: + logger.exception( + f"Unexpected exception while unloading timer {timer!r}" + ) + async def _load_timers(self, timer_data: list[TimerData.Timer]): """ Factored method to load a list of timers from data rows. @@ -108,6 +142,7 @@ class TimerCog(LionCog): guildids = set() to_delete = [] to_create = [] + to_unload = [] for row in timer_data: channel = self.bot.get_channel(row.channelid) if not channel: @@ -115,6 +150,12 @@ class TimerCog(LionCog): else: guildids.add(row.guildid) to_create.append(row) + if row.guildid in self.timers: + if row.channelid in self.timers[row.guildid]: + to_unload.append(self.timers[row.guildid].pop(row.channelid)) + + if to_unload: + await self._unload_timers(to_unload) if guildids: lguilds = await self.bot.core.lions.fetch_guilds(*guildids) @@ -145,37 +186,57 @@ class TimerCog(LionCog): # Re-launch and update running timers for timer in to_launch: timer.launch() - tasks = [ - asyncio.create_task(timer.update_status_card()) for timer in to_launch - ] - if tasks: - try: - await asyncio.gather(*tasks) - except Exception: - logger.exception( - "Exception occurred updating timer status for running timers." - ) + + coros = [timer.update_status_card() for timer in to_launch] + if coros: + i = 0 + async for task in limit_concurrency(coros, 10): + try: + await task + except discord.HTTPException: + timer = to_launch[i] + logger.warning( + f"Unhandled discord exception while updating timer status for {timer!r}", + exc_info=True + ) + except Exception: + timer = to_launch[i] + logger.exception( + f"Unexpected exception while updating timer status for {timer!r}", + exc_info=True + ) + i += 1 logger.info( f"Updated and launched {len(to_launch)} running timers." ) # Update stopped timers - tasks = [ - asyncio.create_task(timer.update_status_card()) for timer in to_update - ] - if tasks: - try: - await asyncio.gather(*tasks) - except Exception: - logger.exception( - "Exception occurred updating timer status for stopped timers." - ) + coros = [timer.update_status_card(render=False) for timer in to_update] + if coros: + i = 0 + async for task in limit_concurrency(coros, 10): + try: + await task + except discord.HTTPException: + timer = to_update[i] + logger.warning( + f"Unhandled discord exception while updating timer status for {timer!r}", + exc_info=True + ) + except Exception: + timer = to_update[i] + logger.exception( + f"Unexpected exception while updating timer status for {timer!r}", + exc_info=True + ) + i += 1 logger.info( f"Updated {len(to_update)} stopped timers." ) # Update timer registry - self.timers.update(timer_reg) + for gid, gtimers in timer_reg.items(): + self.timers[gid].update(gtimers) @LionCog.listener('on_ready') @log_wrap(action='Init Timers') @@ -185,10 +246,14 @@ class TimerCog(LionCog): """ self.ready = False self.timers = defaultdict(dict) + if self.timers: + timers = [timer for tguild in self.timers.values() for timer in tguild.values()] + await self._unload_timers(timers) + self.timers.clear() # Fetch timers in guilds on this shard - # TODO: Join with guilds and filter by guilds we are still in - timer_data = await self.data.Timer.fetch_where(THIS_SHARD) + guildids = [guild.id for guild in self.bot.guilds] + timer_data = await self.data.Timer.fetch_where(guildid=guildids) await self._load_timers(timer_data) # Ready to handle events diff --git a/src/modules/pomodoro/options.py b/src/modules/pomodoro/options.py index da2ff06f..76f9e10d 100644 --- a/src/modules/pomodoro/options.py +++ b/src/modules/pomodoro/options.py @@ -259,7 +259,7 @@ class TimerOptions(SettingGroup): @property def input_formatted(self): - return str(int(self._data // 60)) if self._data else None + return str(int(self._data // 60)) if self._data else '25' @classmethod async def _parse_string(cls, parent_id, string, **kwargs): @@ -300,7 +300,7 @@ class TimerOptions(SettingGroup): @property def input_formatted(self): - return str(int(self._data // 60)) if self._data else None + return str(int(self._data // 60)) if self._data else '5' @classmethod async def _parse_string(cls, parent_id, string, **kwargs): diff --git a/src/modules/pomodoro/timer.py b/src/modules/pomodoro/timer.py index 32bbb268..14b35e8e 100644 --- a/src/modules/pomodoro/timer.py +++ b/src/modules/pomodoro/timer.py @@ -7,7 +7,7 @@ from datetime import timedelta, datetime import discord from meta import LionBot -from meta.logger import log_wrap, log_context +from meta.logger import log_wrap, log_context, set_logging_context from utils.lib import MessageArgs, utc_now, replace_multiple from core.lion_guild import LionGuild from core.data import CoreData @@ -61,7 +61,7 @@ class Timer: log_context.set(f"tid: {self.data.channelid}") # State - self.last_seen: dict[int, int] = {} # memberid -> last seen timestamp + self.last_seen: dict[int, datetime] = {} # memberid -> last seen timestamp self.status_view: Optional[TimerStatusUI] = None # Current TimerStatusUI self.last_status_message: Optional[discord.Message] = None # Last deliever notification message self._hook: Optional[CoreData.LionHook] = None # Cached notification webhook @@ -381,7 +381,7 @@ class Timer: tasks = [] after_tasks = [] # Submit channel name update request - after_tasks.append(asyncio.create_task(self._update_channel_name())) + after_tasks.append(asyncio.create_task(self._update_channel_name(), name='Update-name')) if kick and (threshold := self.warning_threshold(from_stage)): now = utc_now() @@ -394,38 +394,65 @@ class Timer: elif last_seen < threshold: needs_kick.append(member) - for member in needs_kick: - tasks.append(member.edit(voice_channel=None)) + t = self.bot.translator.t + if self.channel and self.channel.permissions_for(self.channel.guild.me).move_members: + for member in needs_kick: + tasks.append( + asyncio.create_task( + member.edit( + voice_channel=None, + reason=t(_p( + 'timer|disconnect|audit_reason', + "Disconnecting inactive member from timer." + ), locale=self.locale.value) + ), + name="Disconnect-timer-member" + ) + ) notify_hook = await self.get_notification_webhook() - if needs_kick and notify_hook: - t = self.bot.translator.t - kick_message = t(_np( - 'timer|kicked_message', - "{mentions} was removed from {channel} because they were inactive! " - "Remember to press {tick} to register your presence every stage.", - "{mentions} were removed from {channel} because they were inactive! " - "Remember to press {tick} to register your presence every stage.", - len(needs_kick) - ), locale=self.locale.value).format( - channel=f"<#{self.data.channelid}>", - mentions=', '.join(member.mention for member in needs_kick), - tick=self.bot.config.emojis.tick - ) - tasks.append(notify_hook.send(kick_message)) + if needs_kick and notify_hook and self.channel: + if self.channel.permissions_for(self.channel.guild.me).move_members: + kick_message = t(_np( + 'timer|kicked_message', + "{mentions} was removed from {channel} because they were inactive! " + "Remember to press {tick} to register your presence every stage.", + "{mentions} were removed from {channel} because they were inactive! " + "Remember to press {tick} to register your presence every stage.", + len(needs_kick) + ), locale=self.locale.value).format( + channel=f"<#{self.data.channelid}>", + mentions=', '.join(member.mention for member in needs_kick), + tick=self.bot.config.emojis.tick + ) + else: + kick_message = t(_p( + 'timer|kick_failed', + "**Warning!** Timer {channel} is configured to disconnect on inactivity, " + "but I lack the 'Move Members' permission to do this!" + ), locale=self.locale.value).format( + channel=self.channel.mention + ) + tasks.append(asyncio.create_task(notify_hook.send(kick_message), name='kick-message')) if self.voice_alerts: - after_tasks.append(asyncio.create_task(self._voice_alert(to_stage))) + after_tasks.append(asyncio.create_task(self._voice_alert(to_stage), name='voice-alert')) - if tasks: + for task in tasks: try: - await asyncio.gather(*tasks) + await task + except discord.Forbidden: + logger.warning( + f"Unexpected forbidden during pre-task {task!r} for change stage in timer {self!r}" + ) + except discord.HTTPException: + logger.warning( + f"Unexpected API error during pre-task {task!r} for change stage in timer {self!r}" + ) except Exception: - logger.exception(f"Exception occurred during pre-tasks for change stage in timer {self!r}") + logger.exception(f"Exception occurred during pre-task {task!r} for change stage in timer {self!r}") - print("Sending Status") await self.send_status() - print("Sent Status") if after_tasks: try: @@ -441,7 +468,7 @@ class Timer: if not stage: return - if not self.channel or not self.channel.permissions_for(self.guild.me).speak: + if not self.guild or not self.channel or not self.channel.permissions_for(self.guild.me).speak: return async with self.lguild.voice_lock: @@ -477,15 +504,16 @@ class Timer: # Quit when we finish playing or after 10 seconds, whichever comes first sleep_task = asyncio.create_task(asyncio.sleep(10)) - wait_task = asyncio.create_task(finished.wait()) + wait_task = asyncio.create_task(finished.wait(), name='timer-voice-waiting') _, pending = await asyncio.wait([sleep_task, wait_task], return_when=asyncio.FIRST_COMPLETED) for task in pending: task.cancel() - await self.guild.voice_client.disconnect(force=True) + if self.guild and self.guild.voice_client: + await self.guild.voice_client.disconnect(force=True) except Exception: logger.exception( - "Exception occurred while playing voice alert for timer {self!r}" + f"Exception occurred while playing voice alert for timer {self!r}" ) def stageline(self, stage: Stage): @@ -508,7 +536,7 @@ class Timer: ) return stageline - async def current_status(self, with_notify=True, with_warnings=True) -> MessageArgs: + async def current_status(self, with_notify=True, with_warnings=True, render=True) -> MessageArgs: """ Message arguments for the current timer status message. """ @@ -517,7 +545,7 @@ class Timer: ctx_locale.set(self.locale.value) stage = self.current_stage - if self.running: + if self.running and stage is not None: stageline = self.stageline(stage) warningline = "" needs_warning = [] @@ -527,7 +555,7 @@ class Timer: last_seen = self.last_seen.get(member.id, None) if last_seen is None: last_seen = self.last_seen[member.id] = now - elif last_seen < threshold: + elif threshold and last_seen < threshold: needs_warning.append(member) if needs_warning: warningline = t(_p( @@ -572,13 +600,16 @@ class Timer: await ui.refresh() - card = await get_timer_card(self.bot, self, stage) - try: - await card.render() - file = card.as_file(f"pomodoro_{self.data.channelid}.png") - args = MessageArgs(content=content, file=file, view=ui) - except RenderingException: - args = MessageArgs(content=content, view=ui) + rawargs = dict(content=content, view=ui) + + if render: + try: + card = await get_timer_card(self.bot, self, stage) + await card.render() + rawargs['file'] = card.as_file(f"pomodoro_{self.data.channelid}.png") + except RenderingException: + pass + args = MessageArgs(**rawargs) return args @@ -769,12 +800,16 @@ class Timer: f"Timer deleted. Reason given: {reason!r}" ) - @log_wrap(action='Timer Loop') + @log_wrap(isolate=True, stack=()) async def _runloop(self): """ Main loop which controls the regular stage changes and status updates. """ + set_logging_context( + action=f"TimerLoop {self.data.channelid}", + context=f"tid: {self.data.channelid}", + ) # Allow updating with 10 seconds of drift to the next stage change drift = 10 @@ -790,6 +825,11 @@ class Timer: self._state = current = self.current_stage while True: + if current is None: + logger.exception( + f"Closing timer loop because current state is None. Timer {self!r}" + ) + break to_next_stage = (current.end - utc_now()).total_seconds() # TODO: Consider request rate and load @@ -817,12 +857,18 @@ class Timer: if current.end < utc_now(): self._state = self.current_stage - task = asyncio.create_task(self.notify_change_stage(current, self._state)) + task = asyncio.create_task( + self.notify_change_stage(current, self._state), + name='notify-change-stage' + ) background_tasks.add(task) task.add_done_callback(background_tasks.discard) current = self._state elif self.members: - task = asyncio.create_task(self._update_channel_name()) + task = asyncio.create_task( + self._update_channel_name(), + name='regular-channel-update' + ) background_tasks.add(task) task.add_done_callback(background_tasks.discard) task = asyncio.create_task(self.update_status_card()) @@ -830,7 +876,13 @@ class Timer: task.add_done_callback(background_tasks.discard) if background_tasks: - await asyncio.gather(*background_tasks) + try: + await asyncio.gather(*background_tasks) + except Exception: + logger.warning( + f"Unexpected error while finishing background tasks for timer {self!r}", + exc_info=True + ) def launch(self): """ diff --git a/src/modules/ranks/cog.py b/src/modules/ranks/cog.py index 76e615bf..4940d249 100644 --- a/src/modules/ranks/cog.py +++ b/src/modules/ranks/cog.py @@ -269,6 +269,9 @@ class RankCog(LionCog): Handle batch of completed message sessions. """ for guildid, userid, messages, guild_xp in session_data: + if not self.bot.get_guild(guildid): + # Ignore guilds we have left + continue lguild = await self.bot.core.lions.fetch_guild(guildid) rank_type = lguild.config.get('rank_type').value if rank_type in (RankType.MESSAGE, RankType.XP): @@ -542,6 +545,9 @@ class RankCog(LionCog): @log_wrap(action="Voice Rank Hook") async def on_voice_session_complete(self, *session_data): for guildid, userid, duration, guild_xp in session_data: + if not self.bot.get_guild(guildid): + # Ignore guilds we have left + continue lguild = await self.bot.core.lions.fetch_guild(guildid) unranked_role_setting = await self.bot.get_cog('StatsCog').settings.UnrankedRoles.get(guildid) unranked_roleids = set(unranked_role_setting.data) diff --git a/src/modules/rolemenus/cog.py b/src/modules/rolemenus/cog.py index 3618b4fd..9efef99a 100644 --- a/src/modules/rolemenus/cog.py +++ b/src/modules/rolemenus/cog.py @@ -126,6 +126,7 @@ async def rolemenu_ctxcmd(interaction: discord.Interaction, message: discord.Mes else: menu = await RoleMenu.fetch(self.bot, menuid) menu._message = message + await menu.update_raw() # Open the editor editor = MenuEditor(self.bot, menu, callerid=interaction.user.id) @@ -732,7 +733,7 @@ class RoleMenuCog(LionCog): # Parse menu options if given name = name.strip() - matching = await self.data.RoleMenu.fetch_where(name=name) + matching = await self.data.RoleMenu.fetch_where(name=name, guildid=ctx.guild.id) if matching: raise UserInputError( t(_p( @@ -895,6 +896,7 @@ class RoleMenuCog(LionCog): )).format(name=name) ) await target.fetch_message() + await target.update_raw() # Parse provided options reposting = channel is not None @@ -971,7 +973,41 @@ class RoleMenuCog(LionCog): ) # TODO: Generate the custom message from the template if it doesn't exist - # TODO: Pathway for setting menu style + if menu_style is not None: + if not managed and not reposting: + raise UserInputError( + t(_p( + 'cmd:rolemenu_edit|parse:style|error:not_managed', + "Cannot change the style of a role menu attached to a message I did not send." + )) + ) + if menu_style is MenuType.REACTION: + # Check menu is suitable for moving to reactions + roles = target.roles + if len(roles) > 20: + raise UserInputError( + t(_p( + 'cmd:rolemenu_edit|parse:style|error:too_many_reactions', + "Too many roles! Reaction role menus can have at most `20` roles." + )) + ) + emojis = [mrole.config.emoji.value for mrole in roles] + emojis = [emoji for emoji in emojis if emoji] + uniq = set(emojis) + if len(uniq) != len(roles): + raise UserInputError( + t(_p( + "cmd:rolemenu_edit|parse:style|error:incomplete_emojis", + "Cannot switch to the reaction role style! Every role needs a distinct emoji first." + )) + ) + update_args[self.data.RoleMenu.menutype.name] = menu_style + ack_lines.append( + t(_p( + 'cmd:rolemenu_edit|parse:style|success', + "Updated role menu style." + )) + ) if rawmessage is not None: msg_config = target.config.rawmessage @@ -1019,6 +1055,11 @@ class RoleMenuCog(LionCog): )).format(channel=channel.mention, exception=e.text)) else: await target.update_message() + if menu_style is not None: + try: + await target.update_reactons() + except SafeCancellation as e: + error_lines.append(e.msg) # Ack the updates if ack_lines or error_lines: diff --git a/src/modules/rolemenus/rolemenu.py b/src/modules/rolemenus/rolemenu.py index fcaafdcf..bc4437af 100644 --- a/src/modules/rolemenus/rolemenu.py +++ b/src/modules/rolemenus/rolemenu.py @@ -25,7 +25,7 @@ from . import logger, babel if TYPE_CHECKING: from .cog import RoleMenuCog -_p = babel._p +_p, _np = babel._p, babel._np MISSING = object() @@ -192,6 +192,20 @@ class RoleMenu: self._message = _message return self._message + async def update_raw(self): + """ + Updates the saved raw message data for non-owned menus. + """ + message = await self.fetch_message() + if not self.managed and message is not None: + message_data = {} + message_data['content'] = message.content + if message.embeds: + message_data['embed'] = message.embeds[0].to_dict() + rawmessage = json.dumps(message_data) + if rawmessage != self.data.rawmessage: + await self.data.update(rawmessage=rawmessage) + def emoji_map(self): emoji_map = {} for mrole in self.roles: @@ -454,100 +468,252 @@ class RoleMenu: if emojikey(emoji) not in menu_emojis: yield str(emoji) - async def _handle_selection(self, lion, member: discord.Member, menuroleid: int): - mrole = self.rolemap.get(menuroleid, None) - if mrole is None: - raise ValueError(f"Attempt to process event for invalid menuroleid {menuroleid}, THIS SHOULD NOT HAPPEN.") - - guild = member.guild - + async def _handle_positive(self, lion, member: discord.Member, mrole: RoleMenuRole) -> discord.Embed: t = self.bot.translator.t - + guild = member.guild role = guild.get_role(mrole.data.roleid) - if role is None: - # This role no longer exists, nothing we can do + if not role: + raise ValueError("Calling _handle_positive without a valid role.") + + price = mrole.config.price.value + + obtainable = self.config.obtainable.value + remove_line = '' + if obtainable is not None: + # Check shared roles + menu_roles = {mrole.data.roleid: mrole for mrole in self.roles} + common = [role for role in member.roles if role.id in menu_roles] + + if len(common) >= obtainable: + swap = None + if len(common) == 1 and not self.config.sticky.value: + swap = menu_roles[common[0].id] + # Check if LC will be lost by exchanging the role + if (swap.config.price.value) > 0 and not self.config.refunds.value: + swap = None + if swap is not None: + # Do remove + try: + remove_embed = await self._handle_negative(lion, member, swap) + remove_line = remove_embed.description + except UserInputError: + # If we failed to remove for some reason, pretend we didn't try + swap = None + + if swap is None: + error = t(_np( + 'rolemenu|select|error:max_obtainable', + "You can own at most one role from this menu! You currently own:", + "You can own at most **{count}** roles from this menu! You currently own:", + obtainable + )).format(count=obtainable) + error = '\n'.join((error, *(role.mention for role in common))) + raise UserInputError(error) + + + if price: + # Check member balance + # TODO: More transaction safe (or rather check again after transaction) + await lion.data.refresh() + balance = lion.data.coins + if balance < price: + raise UserInputError( + t(_p( + 'rolemenu|select|error:insufficient_funds', + "The role **{role}** costs {coin}**{cost}**," + "but you only have {coin}**{balance}**!" + )).format( + role=role.name, + coin=self.bot.config.emojis.coin, + cost=price, + balance=balance, + ) + ) + + try: + await member.add_roles(role) + except discord.Forbidden: raise UserInputError( t(_p( - 'rolemenu|error:role_gone', - "This role no longer exists!" + 'rolemenu|select|error:perms', + "I don't have enough permissions to give you this role!" )) ) - if role in member.roles: - # Member already has the role, deselection case. - if self.config.sticky.value: - # Cannot deselect - raise UserInputError( - t(_p( - 'rolemenu|deselect|error:sticky', - "**{role}** is a sticky role, you cannot remove it with this menu!" - )).format(role=role.name) - ) - - # Remove the role - try: - await member.remove_roles(role) - except discord.Forbidden: - raise UserInputError( - t(_p( - 'rolemenu|deselect|error:perms', - "I don't have enough permissions to remove this role from you!" - )) - ) - except discord.HTTPException: - raise UserInputError( - t(_p( - 'rolemenu|deselect|error:discord', - "An unknown error occurred removing your role! Please try again later." - )) - ) - - # Update history - now = utc_now() - history = await self.cog.data.RoleMenuHistory.table.update_where( - menuid=self.data.menuid, - roleid=role.id, - userid=member.id, - removed_at=None, - ).set(removed_at=now) - await self.cog.cancel_expiring_tasks(*(row['equipid'] for row in history)) - - # Refund if required - transactionids = [row['transactionid'] for row in history] - if self.config.refunds.value and any(transactionids): - transactionids = [tid for tid in transactionids if tid] - economy: Economy = self.bot.get_cog('Economy') - refunded = await economy.data.Transaction.refund_transactions(*transactionids) - total_refund = sum(row.amount + row.bonus for row in refunded) - else: - total_refund = 0 - - # Ack the removal - embed = discord.Embed( - colour=discord.Colour.brand_green(), - title=t(_p( - 'rolemenu|deslect|success|title', - "Role removed" + except discord.HTTPException: + raise UserInputError( + t(_p( + 'rolemenu|select|error:discord', + "An unknown error occurred while assigning your role! " + "Please try again later." )) ) - if total_refund > 0: - embed.description = t(_p( - 'rolemenu|deselect|success:refund|desc', - "You have removed **{role}**, and been refunded {coin} **{amount}**." - )).format(role=role.name, coin=self.bot.config.emojis.coin, amount=total_refund) - if total_refund < 0: - # TODO: Consider disallowing them from removing roles if their balance would go negative - embed.description = t(_p( - 'rolemenu|deselect|success:negrefund|desc', - "You have removed **{role}**, and have lost {coin} **{amount}**." - )).format(role=role.name, coin=self.bot.config.emojis.coin, amount=-total_refund) - else: - embed.description = t(_p( - 'rolemenu|deselect|success:norefund|desc', - "You have unequipped **{role}**." - )).format(role=role.name) - return embed + + now = utc_now() + + # Create transaction if applicable + if price: + economy: Economy = self.bot.get_cog('Economy') + tx = await economy.data.Transaction.execute_transaction( + transaction_type=TransactionType.OTHER, + guildid=guild.id, actorid=member.id, + from_account=member.id, to_account=None, + amount=price + ) + tid = tx.transactionid else: - # Member does not have the role, selection case. + tid = None + + # Calculate expiry + duration = mrole.config.duration.value + if duration is not None: + expiry = now + dt.timedelta(seconds=duration) + else: + expiry = None + + # Add to equip history + equip = await self.cog.data.RoleMenuHistory.create( + menuid=self.data.menuid, roleid=role.id, + userid=member.id, + obtained_at=now, + transactionid=tid, + expires_at=expiry + ) + await self.cog.schedule_expiring(equip) + + # Ack the selection + embed = discord.Embed( + colour=discord.Colour.brand_green(), + title=t(_p( + 'rolemenu|select|success|title', + "Role equipped" + )) + ) + if price: + embed.description = t(_p( + 'rolemenu|select|success:purchase|desc', + "You have purchased the role **{role}** for {coin}**{amount}**" + )).format(role=role.name, coin=self.bot.config.emojis.coin, amount=price) + else: + embed.description = t(_p( + 'rolemenu|select|success:nopurchase|desc', + "You have equipped **{role}**" + )).format(role=role.name) + + if expiry is not None: + embed.description += '\n' + t(_p( + 'rolemenu|select|expires_at', + "The role will expire at {timestamp}." + )).format( + timestamp=discord.utils.format_dt(expiry) + ) + if remove_line: + embed.description = '\n'.join((remove_line, embed.description)) + + # TODO Event logging + return embed + + async def _handle_negative(self, lion, member: discord.Member, mrole: RoleMenuRole) -> discord.Embed: + t = self.bot.translator.t + guild = member.guild + role = guild.get_role(mrole.data.roleid) + if not role: + raise ValueError("Calling _handle_negative without a valid role.") + + if self.config.sticky.value: + # Cannot deselect + raise UserInputError( + t(_p( + 'rolemenu|deselect|error:sticky', + "**{role}** is a sticky role, you cannot remove it with this menu!" + )).format(role=role.name) + ) + + # Remove the role + try: + await member.remove_roles(role) + except discord.Forbidden: + raise UserInputError( + t(_p( + 'rolemenu|deselect|error:perms', + "I don't have enough permissions to remove this role from you!" + )) + ) + except discord.HTTPException: + raise UserInputError( + t(_p( + 'rolemenu|deselect|error:discord', + "An unknown error occurred removing your role! Please try again later." + )) + ) + + # Update history + now = utc_now() + history = await self.cog.data.RoleMenuHistory.table.update_where( + menuid=self.data.menuid, + roleid=role.id, + userid=member.id, + removed_at=None, + ).set(removed_at=now) + await self.cog.cancel_expiring_tasks(*(row['equipid'] for row in history)) + + # Refund if required + transactionids = [row['transactionid'] for row in history] + if self.config.refunds.value and any(transactionids): + transactionids = [tid for tid in transactionids if tid] + economy: Economy = self.bot.get_cog('Economy') + refunded = await economy.data.Transaction.refund_transactions(*transactionids) + total_refund = sum(row.amount + row.bonus for row in refunded) + else: + total_refund = 0 + + # Ack the removal + embed = discord.Embed( + colour=discord.Colour.brand_green(), + title=t(_p( + 'rolemenu|deslect|success|title', + "Role removed" + )) + ) + if total_refund > 0: + embed.description = t(_p( + 'rolemenu|deselect|success:refund|desc', + "You have removed **{role}**, and been refunded {coin} **{amount}**." + )).format(role=role.name, coin=self.bot.config.emojis.coin, amount=total_refund) + if total_refund < 0: + # TODO: Consider disallowing them from removing roles if their balance would go negative + embed.description = t(_p( + 'rolemenu|deselect|success:negrefund|desc', + "You have removed **{role}**, and have lost {coin} **{amount}**." + )).format(role=role.name, coin=self.bot.config.emojis.coin, amount=-total_refund) + else: + embed.description = t(_p( + 'rolemenu|deselect|success:norefund|desc', + "You have unequipped **{role}**." + )).format(role=role.name) + return embed + + async def _handle_selection(self, lion, member: discord.Member, menuroleid: int): + lock_key = ('rmenu', member.id, member.guild.id) + async with self.bot.idlock(lock_key): + # TODO: Selection locking + mrole = self.rolemap.get(menuroleid, None) + if mrole is None: + raise ValueError( + f"Attempt to process event for invalid menuroleid {menuroleid}, THIS SHOULD NOT HAPPEN." + ) + + guild = member.guild + t = self.bot.translator.t + role = guild.get_role(mrole.data.roleid) + if role is None: + # This role no longer exists, nothing we can do + raise UserInputError( + t(_p( + 'rolemenu|error:role_gone', + "The role **{name}** no longer exists!" + )).format(name=mrole.data.label) + ) + required = self.config.required_role.data if required is not None: # Check member has the required role @@ -561,118 +727,12 @@ class RoleMenu: )).format(role=name) ) - obtainable = self.config.obtainable.value - if obtainable is not None: - # Check shared roles - menu_roleids = {mrole.data.roleid for mrole in self.roles} - member_roleids = {role.id for role in member.roles} - common = len(menu_roleids.intersection(member_roleids)) - if common >= obtainable: - raise UserInputError( - t(_p( - 'rolemenu|select|error:max_obtainable', - "You already have the maximum of {obtainable} roles from this menu!" - )).format(obtainable=obtainable) - ) - - price = mrole.config.price.value - if price: - # Check member balance - # TODO: More transaction safe (or rather check again after transaction) - await lion.data.refresh() - balance = lion.data.coins - if balance < price: - raise UserInputError( - t(_p( - 'rolemenu|select|error:insufficient_funds', - "The role **{role}** costs {coin}**{cost}**," - "but you only have {coin}**{balance}**!" - )).format( - role=role.name, - coin=self.bot.config.emojis.coin, - cost=price, - balance=balance, - ) - ) - - try: - await member.add_roles(role) - except discord.Forbidden: - raise UserInputError( - t(_p( - 'rolemenu|select|error:perms', - "I don't have enough permissions to give you this role!" - )) - ) - except discord.HTTPException: - raise UserInputError( - t(_p( - 'rolemenu|select|error:discord', - "An unknown error occurred while assigning your role! " - "Please try again later." - )) - ) - - now = utc_now() - - # Create transaction if applicable - if price: - economy: Economy = self.bot.get_cog('Economy') - tx = await economy.data.Transaction.execute_transaction( - transaction_type=TransactionType.OTHER, - guildid=guild.id, actorid=member.id, - from_account=member.id, to_account=None, - amount=price - ) - tid = tx.transactionid + if role in member.roles: + # Member already has the role, deselection case. + return await self._handle_negative(lion, member, mrole) else: - tid = None - - # Calculate expiry - duration = mrole.config.duration.value - if duration is not None: - expiry = now + dt.timedelta(seconds=duration) - else: - expiry = None - - # Add to equip history - equip = await self.cog.data.RoleMenuHistory.create( - menuid=self.data.menuid, roleid=role.id, - userid=member.id, - obtained_at=now, - transactionid=tid, - expires_at=expiry - ) - await self.cog.schedule_expiring(equip) - - # Ack the selection - embed = discord.Embed( - colour=discord.Colour.brand_green(), - title=t(_p( - 'rolemenu|select|success|title', - "Role equipped" - )) - ) - if price: - embed.description = t(_p( - 'rolemenu|select|success:purchase|desc', - "You have purchased the role **{role}** for {coin}**{amount}**" - )).format(role=role.name, coin=self.bot.config.emojis.coin, amount=price) - else: - embed.description = t(_p( - 'rolemenu|select|success:nopurchase|desc', - "You have equipped the role **{role}**" - )).format(role=role.name) - - if expiry is not None: - embed.description += '\n' + t(_p( - 'rolemenu|select|expires_at', - "The role will expire at {timestamp}." - )).format( - timestamp=discord.utils.format_dt(expiry) - ) - # TODO Event logging - return embed + # Member does not have the role, selection case. + return await self._handle_positive(lion, member, mrole) async def interactive_selection(self, interaction: discord.Interaction, menuroleid: int): """ diff --git a/src/modules/rolemenus/ui/menueditor.py b/src/modules/rolemenus/ui/menueditor.py index 55c949e3..0b8de19e 100644 --- a/src/modules/rolemenus/ui/menueditor.py +++ b/src/modules/rolemenus/ui/menueditor.py @@ -508,6 +508,11 @@ class MenuEditor(MessageUI): await self.refresh(thinking=selection) await self.update_preview() await self.menu.update_message() + if self.menu.data.menutype is MenuType.REACTION: + try: + await self.menu.update_reactons() + except SafeCancellation: + pass else: await selection.response.defer(thinking=False) @@ -596,6 +601,8 @@ class MenuEditor(MessageUI): await self.refresh(thinking=selection) await self.update_preview() await self.menu.update_message() + if menutype is MenuType.REACTION: + await self.menu.update_reactons() else: await selection.response.defer() @@ -1137,3 +1144,4 @@ class MenuEditor(MessageUI): self.pagen = self.pagen % self.page_count self.page_block = blocks[self.pagen] await self.menu.fetch_message() + await self.menu.update_raw() diff --git a/src/modules/rooms/cog.py b/src/modules/rooms/cog.py index 9adc4f91..e4543cbd 100644 --- a/src/modules/rooms/cog.py +++ b/src/modules/rooms/cog.py @@ -412,7 +412,7 @@ class RoomCog(LionCog): t(_p( 'cmd:room_rent|error:member_not_found', "Could not find the requested member {mention} in this server!" - )).format(member=f"<@{mid}>") + )).format(mention=f"<@{mid}>") ), ephemeral=True ) return diff --git a/src/modules/schedule/cog.py b/src/modules/schedule/cog.py index 39b60960..c655a991 100644 --- a/src/modules/schedule/cog.py +++ b/src/modules/schedule/cog.py @@ -29,7 +29,7 @@ from .settings import ScheduleSettings, ScheduleConfig from .ui.scheduleui import ScheduleUI from .ui.settingui import ScheduleSettingUI from .core import TimeSlot, ScheduledSession, SessionMember -from .lib import slotid_to_utc, time_to_slotid +from .lib import slotid_to_utc, time_to_slotid, format_until _p, _np = babel._p, babel._np @@ -243,6 +243,18 @@ class ScheduleCog(LionCog): logger.debug(f"Getting slotlock (locked: {lock.locked()})") return lock + def get_active_session(self, guildid: int) -> Optional[ScheduledSession]: + """ + Get the current active session for the given guildid, or None if no session is running. + """ + slot = self.active_slots.get(self.nowid, None) + if slot is not None: + return slot.sessions.get(guildid, None) + + async def get_config(self, guildid: int) -> ScheduleConfig: + config_data = await self.data.ScheduleGuild.fetch_or_create(guildid) + return ScheduleConfig(guildid, config_data) + @log_wrap(action='Cancel Booking') async def cancel_bookings(self, *bookingids: tuple[int, int, int], refund=True): """ @@ -415,7 +427,10 @@ class ScheduleCog(LionCog): tasks = [] for (gid, uid), member in to_blacklist.items(): role = autoblacklisting[gid][1] - task = asyncio.create_task(member.add_role(role)) + task = asyncio.create_task(member.add_roles( + role, + reason="Automatic scheduled session blacklist" + )) tasks.append(task) # TODO: Logging and some error handling await asyncio.gather(*tasks, return_exceptions=True) @@ -729,12 +744,29 @@ class ScheduleCog(LionCog): "View and manage your scheduled session." ) ) + @appcmds.rename( + cancel=_p( + 'cmd:schedule|param:cancel', "cancel" + ), + book=_p( + 'cmd:schedule|param:book', "book" + ), + ) + @appcmds.describe( + cancel=_p( + 'cmd:schedule|param:cancel|desc', + "Select a booked timeslot to cancel." + ), + book=_p( + 'cmd:schedule|param:book|desc', + "Select a timeslot to schedule. (Times shown in your set timezone.)" + ), + ) @appcmds.guild_only - async def schedule_cmd(self, ctx: LionContext): - # TODO: Auotocomplete for book and cancel options - # Will require TTL caching for member schedules. - book = None - cancel = None + async def schedule_cmd(self, ctx: LionContext, + cancel: Optional[str] = None, + book: Optional[str] = None, + ): if not ctx.guild: return if not ctx.interaction: @@ -747,6 +779,9 @@ class ScheduleCog(LionCog): now = utc_now() lines: list[tuple[bool, str]] = [] # (error_status, msg) + if book or cancel: + await ctx.interaction.response.defer(thinking=True, ephemeral=True) + if cancel is not None: schedule = await self._fetch_schedule(ctx.author.id) # Validate provided @@ -756,7 +791,7 @@ class ScheduleCog(LionCog): 'cmd:schedule|cancel_booking|error:parse_slot', "Time slot `{provided}` not recognised. " "Please select a session to cancel from the autocomplete options." - )) + )).format(provided=cancel) line = (True, error) elif (slotid := int(cancel)) not in schedule: # Can't cancel slot because it isn't booked @@ -799,8 +834,8 @@ class ScheduleCog(LionCog): 'cmd:schedule|create_booking|error:parse_slot', "Time slot `{provided}` not recognised. " "Please select a session to cancel from the autocomplete options." - )) - lines = (True, error) + )).format(provided=book) + line = (True, error) elif (slotid := int(book)) in schedule: # Can't book because the slot is already booked error = t(_p( @@ -809,7 +844,7 @@ class ScheduleCog(LionCog): )).format( time=discord.utils.format_dt(slotid_to_utc(slotid), style='t') ) - lines = (True, error) + line = (True, error) elif (slotid_to_utc(slotid) - now).total_seconds() < 60: # Can't book because it is running or about to start error = t(_p( @@ -823,7 +858,7 @@ class ScheduleCog(LionCog): # The slotid is valid and bookable # Run the booking try: - await self.create_booking(guildid, ctx.author.id) + await self.create_booking(guildid, ctx.author.id, slotid) ack = t(_p( 'cmd:schedule|create_booking|success', "You have successfully scheduled a session at {time}." @@ -856,6 +891,155 @@ class ScheduleCog(LionCog): await ui.run(ctx.interaction) await ui.wait() + @schedule_cmd.autocomplete('book') + async def schedule_cmd_book_acmpl(self, interaction: discord.Interaction, partial: str): + """ + List the sessions available for the member to book. + """ + # TODO: Warning about setting timezone? + userid = interaction.user.id + schedule = await self._fetch_schedule(userid) + t = self.bot.translator.t + + + if not interaction.guild or not isinstance(interaction.user, discord.Member): + choice = appcmds.Choice( + name=_p( + 'cmd:schedule|acmpl:book|error:not_in_guild', + "You need to be in a server to book sessions!" + ), + value='None' + ) + choices = [choice] + else: + member = interaction.user + # Check blacklist role + blacklist_role = (await self.settings.BlacklistRole.get(interaction.guild.id)).value + if blacklist_role and blacklist_role in member.roles: + choice = appcmds.Choice( + name=_p( + 'cmd:schedule|acmpl:book|error:blacklisted', + "Cannot Book -- Blacklisted" + ), + value='None' + ) + choices = [choice] + else: + nowid = self.nowid + if ((slotid_to_utc(nowid + 3600) - utc_now()).total_seconds() < 60): + # Start from next session instead + nowid += 3600 + upcoming = [nowid + 3600 * i for i in range(1, 25)] + upcoming = [slotid for slotid in upcoming if slotid not in schedule] + choices = [] + # We can have a max of 25 acmpl choices + # But there are at most 24 sessions to book + # So we can use the top choice for a message + + lion = await self.bot.core.lions.fetch_member(interaction.guild.id, member.id, member=member) + tz = lion.timezone + tzstring = t(_p( + 'cmd:schedule|acmpl:book|timezone_info', + "Using timezone '{timezone}' where it is '{now}'. Change with '/my timezone'" + )).format( + timezone=str(tz), + now=dt.datetime.now(tz).strftime('%H:%M') + ) + choices.append( + appcmds.Choice( + name=tzstring, value='None', + ) + ) + + slot_format = t(_p( + 'cmd:schedule|acmpl:book|format', + "{start} - {end} ({until})" + )) + for slotid in upcoming: + slot_start = slotid_to_utc(slotid).astimezone(tz).strftime('%H:%M') + slot_end = slotid_to_utc(slotid + 3600).astimezone(tz).strftime('%H:%M') + distance = int((slotid - nowid) // 3600) + until = format_until(t, distance) + name = slot_format.format( + start=slot_start, + end=slot_end, + until=until + ) + if partial.lower() in name.lower(): + choices.append( + appcmds.Choice( + name=name, + value=str(slotid) + ) + ) + if len(choices) == 1: + choices.append( + appcmds.Choice( + name=t(_p( + "cmd:schedule|acmpl:book|no_matching", + "No bookable sessions matching '{partial}'" + )).format(partial=partial[:25]), + value=partial + ) + ) + return choices + + @schedule_cmd.autocomplete('cancel') + async def schedule_cmd_cancel_acmpl(self, interaction: discord.Interaction, partial: str): + user = interaction.user + schedule = await self._fetch_schedule(user.id) + t = self.bot.translator.t + + choices = [] + + minid = self.nowid + if ((slotid_to_utc(self.nowid + 3600) - utc_now()).total_seconds() < 60): + minid = minid + 3600 + can_cancel = list(slotid for slotid in schedule if slotid > minid) + if not can_cancel: + choice = appcmds.Choice( + name=_p( + 'cmd:schedule|acmpl:cancel|error:empty_schedule', + "You do not have any upcoming sessions to cancel!" + ), + value='None' + ) + choices.append(choice) + else: + lion = await self.bot.core.lions.fetch_member(interaction.guild.id, user.id) + tz = lion.timezone + for slotid in can_cancel: + slot_format = t(_p( + 'cmd:schedule|acmpl:book|format', + "{start} - {end} ({until})" + )) + slot_start = slotid_to_utc(slotid).astimezone(tz).strftime('%H:%M') + slot_end = slotid_to_utc(slotid + 3600).astimezone(tz).strftime('%H:%M') + distance = int((slotid - minid) // 3600) + until = format_until(t, distance) + name = slot_format.format( + start=slot_start, + end=slot_end, + until=until + ) + if partial.lower() in name.lower(): + choices.append( + appcmds.Choice( + name=name, + value=str(slotid) + ) + ) + if not choices: + choice = appcmds.Choice( + name=t(_p( + 'cmd:schedule|acmpl:cancel|error:no_matching', + "No cancellable sessions matching '{partial}'" + )).format(partial=partial[:25]), + value='None' + ) + choices.append(choice) + return choices + async def _fetch_schedule(self, userid, **kwargs): """ Fetch the given user's schedule (i.e. booking map) @@ -866,6 +1050,7 @@ class ScheduleCog(LionCog): bookings = await booking_model.fetch_where( booking_model.slotid >= nowid, userid=userid, + **kwargs ).order_by('slotid', ORDER.ASC) return { diff --git a/src/modules/schedule/core/session.py b/src/modules/schedule/core/session.py index da266a9b..537b7840 100644 --- a/src/modules/schedule/core/session.py +++ b/src/modules/schedule/core/session.py @@ -1,3 +1,4 @@ +from random import random from typing import Optional import datetime as dt import asyncio @@ -11,7 +12,7 @@ from utils.lib import MessageArgs from .. import babel, logger from ..data import ScheduleData as Data -from ..lib import slotid_to_utc +from ..lib import slotid_to_utc, vacuum_channel from ..settings import ScheduleSettings as Settings from ..settings import ScheduleConfig from ..ui.sessionui import SessionUI @@ -288,12 +289,16 @@ class ScheduledSession: Remove overwrites for non-members. """ async with self.lock: - if not (members := list(self.members.values())): - return if not (guild := self.guild): return if not (room := self.room_channel): + # Nothing to do + self.prepared = True + self.opened = True return + members = list(self.members.values()) + + t = self.bot.translator.t if room.permissions_for(guild.me) >= my_room_permissions: # Replace the member overwrites @@ -313,17 +318,36 @@ class ScheduledSession: if mobj: overwrites[mobj] = discord.PermissionOverwrite(connect=True, view_channel=True) try: - await room.edit(overwrites=overwrites) + await room.edit( + overwrites=overwrites, + reason=t(_p( + 'session|open|update_perms|audit_reason', + "Opening configured scheduled session room." + )) + ) except discord.HTTPException: logger.exception( f"Unhandled discord exception received while opening schedule session room {self!r}" ) else: logger.debug( - f"Opened schedule session room for session {self!r}" + f"Opened schedule session room for session {self!r} with overwrites {overwrites}" + ) + + # Cleanup members who should not be in the channel(s) + if room.type is discord.enums.ChannelType.category: + channels = room.voice_channels + else: + channels = [room] + for channel in channels: + await vacuum_channel( + channel, + reason=t(_p( + 'session|open|clean_room|audit_reason', + "Removing extra member from scheduled session room." + )) ) else: - t = self.bot.translator.t await self.send( t(_p( 'session|open|error:room_permissions', @@ -335,20 +359,107 @@ class ScheduledSession: self.opened = True @log_wrap(action='Notify') - async def _notify(self, wait=60): + async def _notify(self, ping_wait=10, dm_wait=60): """ Ghost ping members who have not yet attended. """ try: - await asyncio.sleep(wait) + await asyncio.sleep(ping_wait) except asyncio.CancelledError: return + + # Ghost ping alert for missing members missing = [mid for mid, m in self.members.items() if m.total_clock == 0 and m.clock_start is None] if missing: ping = ''.join(f"<@{mid}>" for mid in missing) message = await self.send(ping) if message is not None: asyncio.create_task(message.delete()) + try: + # Random dither to spread out sharded notifications + dither = 30 * random() + await asyncio.sleep(dm_wait - ping_wait + dither) + except asyncio.CancelledError: + return + + if not self.guild: + # In case we somehow left the guild in the meantime + return + + # DM alert for _still_ missing members + missing = [mid for mid, m in self.members.items() if m.total_clock == 0 and m.clock_start is None] + for mid in missing: + member = self.guild.get_member(mid) + if member: + args = await self._notify_dm(member) + try: + await member.send(**args.send_args) + except discord.HTTPException: + # Discord really doesn't like failed DM requests + # So take a moment of silence + await asyncio.sleep(1) + + async def _notify_dm(self, member: discord.Member) -> MessageArgs: + t = self.bot.translator.t + # Join line depends on guild setup + channels = self.channels_setting.value + room = self.room_channel + if room: + if room.type is discord.enums.ChannelType.category: + join_line = t(_p( + 'session|notify|dm|join_line:room_category', + "Please attend your session by joining a voice channel under **{room}**!" + )).format(room=room.name) + else: + join_line = t(_p( + 'session|notify|dm|join_line:room_voice', + "Please attend your session by joining {room}" + )).format(room=room.mention) + elif not channels: + join_line = t(_p( + 'session|notify|dm|join_line:all_channels', + "Please attend your session by joining a tracked voice channel!" + )) + else: + # Expand channels into a list of valid voice channels + voice_channels = set() + for channel in channels: + if channel.type is discord.enums.ChannelType.category: + voice_channels.update(channel.voice_channels) + elif channel.type is discord.enums.ChannelType.voice: + voice_channels.add(channel) + + # Now filter by connectivity and tracked + voice_tracker = self.bot.get_cog('VoiceTrackerCog') + valid = [] + for channel in voice_channels: + if voice_tracker.is_untracked(channel): + continue + if not channel.permissions_for(member).connect: + continue + valid.append(channel) + join_line = t(_p( + 'session|notify|dm|join_line:channels', + "Please attend your session by joining one of the following:" + )) + join_line = '\n'.join(join_line, *(channel.mention for channel in valid[:20])) + if len(valid) > 20: + join_line += '\n...' + + embed = discord.Embed( + colour=discord.Colour.orange(), + title=t(_p( + 'session|notify|dm|title', + "Your Scheduled Session has started!" + )), + description=t(_p( + 'session|notify|dm|description', + "Your scheduled session in {dest} has now begun!" + )).format( + dest=self.lobby_channel.mention if self.lobby_channel else f"**{self.guild.name}**" + ) + '\n' + join_line + ) + return MessageArgs(embed=embed) def notify(self): """ diff --git a/src/modules/schedule/core/timeslot.py b/src/modules/schedule/core/timeslot.py index 200c3e1b..75a32f5c 100644 --- a/src/modules/schedule/core/timeslot.py +++ b/src/modules/schedule/core/timeslot.py @@ -19,7 +19,7 @@ from modules.economy.data import EconomyData, TransactionType from .. import babel, logger from ..data import ScheduleData as Data -from ..lib import slotid_to_utc, batchrun_per_second, limit_concurrency +from ..lib import slotid_to_utc, batchrun_per_second, limit_concurrency, vacuum_channel from ..settings import ScheduleSettings from .session import ScheduledSession @@ -439,6 +439,75 @@ class TimeSlot: f"Closed {len(sessions)} for scheduled session timeslot: {self!r}" ) + @log_wrap(action='Tidy session rooms') + async def tidy_rooms(self, sessions: list[ScheduledSession]): + """ + 'Tidy Up' after sessions have been closed. + + This cleans up permissions for sessions which do not have another running session, + and vacuums the channel. + + Somewhat temporary measure, + workaround for the design flaw that channel permissions are only updated during open, + and hence are never cleared unless there is a next session. + Limitations include not clearing after a manual close. + """ + t = self.bot.translator.t + + for session in sessions: + if not session.guild: + # Can no longer access the session guild, nothing to clean up + logger.debug(f"Not tidying {session!r} because guild gone.") + continue + if not (room := session.room_channel): + # Session did not have a room to clean up + logger.debug(f"Not tidying {session!r} because room channel gone.") + continue + if not session.opened or session.cancelled: + # Not an active session, don't try to tidy up + logger.debug(f"Not tidying {session!r} because cancelled or not opened.") + continue + if (active := self.cog.get_active_session(session.guild.id)) is not None: + # Rely on the active session to set permissions and vacuum channel + logger.debug(f"Not tidying {session!r} because guild has active session {active!r}.") + continue + logger.debug(f"Tidying {session!r}.") + + me = session.guild.me + if room.permissions_for(me).manage_roles: + overwrites = { + target: overwrite for target, overwrite in room.overwrites.items() + if not isinstance(target, discord.Member) + } + try: + await room.edit( + overwrites=overwrites, + reason=t(_p( + "session|closing|audit_reason", + "Removing previous scheduled session member permissions." + )) + ) + except discord.HTTPException: + logger.warning( + f"Unexpected exception occurred while tidying after sessions {session!r}", + exc_info=True + ) + else: + logger.debug(f"Updated room permissions while tidying {session!r}.") + if room.type is discord.enums.ChannelType.category: + channels = room.voice_channels + else: + channels = [room] + for channel in channels: + await vacuum_channel( + channel, + reason=t(_p( + "session|closing|disconnecting|audit_reason", + "Disconnecting previous scheduled session members." + )) + ) + logger.debug(f"Finished tidying {session!r}.") + def launch(self) -> asyncio.Task: self.run_task = asyncio.create_task(self.run(), name=f"TimeSlot {self.slotid}") return self.run_task @@ -475,6 +544,9 @@ class TimeSlot: logger.info(f"Active timeslot closing. {self!r}") await self.close(list(self.sessions.values()), consequences=True) logger.info(f"Active timeslot closed. {self!r}") + await asyncio.sleep(30) + await self.tidy_rooms(list(self.sessions.values())) + logger.info(f"Previous active timeslot tidied up. {self!r}") except asyncio.CancelledError: logger.info( f"Deactivating active time slot: {self!r}" diff --git a/src/modules/schedule/lib.py b/src/modules/schedule/lib.py index 1eb8b588..27595961 100644 --- a/src/modules/schedule/lib.py +++ b/src/modules/schedule/lib.py @@ -1,9 +1,15 @@ import asyncio import itertools import datetime as dt +from typing import Optional -from . import logger +import discord + +from meta.logger import log_wrap from utils.ratelimits import Bucket +from . import logger, babel + +_p, _np = babel._p, babel._np def time_to_slotid(time: dt.datetime) -> int: @@ -71,3 +77,39 @@ async def limit_concurrency(aws, limit): while done: yield done.pop() logger.debug(f"Completed {count} tasks") + + +def format_until(t, distance): + if distance: + return t(_np( + 'ui:schedule|format_until|positive', + "in <1 hour", + "in {number} hours", + distance + )).format(number=distance) + else: + return t(_p( + 'ui:schedule|format_until|now', + "right now!" + )) + + +@log_wrap(action='Vacuum Channel') +async def vacuum_channel(channel: discord.VoiceChannel, reason: Optional[str] = None): + """ + Launch disconnect tasks for each voice channel member who does not have permission to connect. + """ + me = channel.guild.me + if not channel.permissions_for(me).move_members: + # Nothing we can do + return + + to_remove = [member for member in channel.members if not channel.permissions_for(member).connect] + for member in to_remove: + # Disconnect member from voice + # Extra check here since members may come and go while we are trying to remove + if member in channel.members: + try: + await member.edit(voice_channel=None, reason=reason) + except discord.HTTPException: + pass diff --git a/src/modules/schedule/settings.py b/src/modules/schedule/settings.py index 8bb022d0..921ec8a0 100644 --- a/src/modules/schedule/settings.py +++ b/src/modules/schedule/settings.py @@ -25,6 +25,38 @@ class ScheduleConfig(ModelConfig): _model_settings = set() model = ScheduleData.ScheduleGuild + @property + def session_lobby(self): + return self.get(ScheduleSettings.SessionLobby.setting_id) + + @property + def session_room(self): + return self.get(ScheduleSettings.SessionRoom.setting_id) + + @property + def schedule_cost(self): + return self.get(ScheduleSettings.ScheduleCost.setting_id) + + @property + def attendance_reward(self): + return self.get(ScheduleSettings.AttendanceReward.setting_id) + + @property + def attendance_bonus(self): + return self.get(ScheduleSettings.AttendanceBonus.setting_id) + + @property + def min_attendance(self): + return self.get(ScheduleSettings.MinAttendance.setting_id) + + @property + def blacklist_role(self): + return self.get(ScheduleSettings.BlacklistRole.setting_id) + + @property + def blacklist_after(self): + return self.get(ScheduleSettings.BlacklistAfter.setting_id) + class ScheduleSettings(SettingGroup): @ScheduleConfig.register_model_setting @@ -400,6 +432,7 @@ class ScheduleSettings(SettingGroup): "Minimum attendance must be an integer number of minutes between `1` and `60`." )) raise UserInputError(error) + return num @ScheduleConfig.register_model_setting class BlacklistRole(ModelData, RoleSetting): diff --git a/src/modules/schedule/ui/sessionui.py b/src/modules/schedule/ui/sessionui.py index 4d2a737c..d8bfa4d4 100644 --- a/src/modules/schedule/ui/sessionui.py +++ b/src/modules/schedule/ui/sessionui.py @@ -18,7 +18,7 @@ from .scheduleui import ScheduleUI if TYPE_CHECKING: from ..cog import ScheduleCog -_p = babel._p +_p, _np = babel._p, babel._np class SessionUI(LeoUI): @@ -59,16 +59,21 @@ class SessionUI(LeoUI): 'ui:sessionui|button:schedule|label', 'Open Schedule' ), locale) + self.help_button.label = t(_p( + 'ui:sessionui|button:help|label', + "How to Attend" + )) # ----- API ----- async def reload(self): await self.init_components() if self.starting_soon: # Slot is about to start or slot has already started - self.set_layout((self.schedule_button,)) + self.set_layout((self.schedule_button, self.help_button)) else: self.set_layout( - (self.book_button, self.cancel_button, self.schedule_button), + (self.book_button, self.cancel_button,), + (self.schedule_button, self.help_button,), ) # ----- UI Components ----- @@ -178,3 +183,141 @@ class SessionUI(LeoUI): ui = ScheduleUI(self.bot, press.guild, press.user.id) await ui.run(press) await ui.wait() + + @button(label='HELP_PLACEHOLDER', style=ButtonStyle.grey, emoji=conf.emojis.question) + async def help_button(self, press: discord.Interaction, pressed: Button): + await press.response.defer(thinking=True, ephemeral=True) + t = self.bot.translator.t + babel = self.bot.get_cog('BabelCog') + locale = await babel.get_user_locale(press.user.id) + ctx_locale.set(locale) + + schedule = await self.cog._fetch_schedule(press.user.id) + if self.slotid not in schedule: + # Tell them how to book + embed = discord.Embed( + colour=discord.Colour.brand_red(), + title=t(_p( + 'ui:session|button:help|embed:unbooked|title', + 'You have not booked this session!' + )), + description=t(_p( + 'ui:session|button:help|embed:unbooked|description', + "You need to book this scheduled session before you can attend it! " + "Press the **{book_label}** button to book the session." + )).format(book_label=self.book_button.label), + ) + else: + embed = discord.Embed( + colour=discord.Colour.orange(), + title=t(_p( + 'ui:session|button:help|embed:help|title', + "How to attend your scheduled session" + )) + ) + config = await self.cog.get_config(self.guildid) + + # Get required duration, and format it + duration = config.min_attendance.value + durstring = t(_np( + 'ui:session|button:help|embed:help|minimum_attendance', + "at least one minute", + "at least `{duration}` minutes", + duration + )).format(duration=duration) + + # Get session room + room = config.session_room.value + + if room is None: + room_line = '' + elif room.type is discord.enums.ChannelType.category: + room_line = t(_p( + 'ui:session|button:help|embed:help|room_line:category', + "The exclusive scheduled session category **{category}** " + "will also be open to you during your scheduled session." + )).format(category=room.name) + else: + room_line = t(_p( + 'ui:session|button:help|embed:help|room_line:voice', + "The exclusive scheduled session room {room} " + "will also be open to you during your scheduled session." + )).format(room=room.mention) + + # Get valid session channels, if set + channels = (await self.cog.settings.SessionChannels.get(self.guildid)).value + + attend_args = dict( + minimum=durstring, + start=discord.utils.format_dt(slotid_to_utc(self.slotid), 't'), + end=discord.utils.format_dt(slotid_to_utc(self.slotid + 3600), 't'), + ) + + if room is not None and len(channels) == 1 and channels[0].id == room.id: + # Special case where session room is the only allowed channel/category + room_line = '' + if room.type is discord.enums.ChannelType.category: + attend_line = t(_p( + 'ui:session|button:help|embed:help|attend_line:only_room_category', + "To attend your scheduled session, " + "join a voice channel in **{room}** for **{minimum}** " + "between {start} and {end}." + )).format( + **attend_args, + room=room.name + ) + else: + attend_line = t(_p( + 'ui:session|button:help|embed:help|attend_line:only_room_channel', + "To attend your scheduled session, " + "join {room} for **{minimum}** " + "between {start} and {end}." + )).format( + **attend_args, + room=room.mention + ) + elif channels: + attend_line = t(_p( + 'ui:session|button:help|embed:help|attend_line:with_channels', + "To attend your scheduled session, join a valid session voice channel for **{minimum}** " + "between {start} and {end}." + )).format(**attend_args) + channel_string = ', '.join( + f"**{channel.name}**" if (channel.type == discord.enums.ChannelType.category) else channel.mention + for channel in channels + ) + embed.add_field( + name=t(_p( + 'ui:session|button:help|embed:help|field:channels|name', + "Valid session channels" + )), + value=channel_string[:1024], + inline=False + ) + else: + attend_line = t(_p( + 'ui:session|button:help|embed:help|attend_line:all_channels', + "To attend your scheduled session, join any tracked voice channel " + "for **{minimum}** between {start} and {end}." + )).format(**attend_args) + + embed.description = '\n'.join((attend_line, room_line)) + embed.add_field( + name=t(_p( + 'ui:session|button:help|embed:help|field:rewards|name', + "Rewards" + )), + value=t(_p( + 'ui:session|button:help|embed:help|field:rewards|value', + "Everyone who attends the session will be rewarded with {coin}**{reward}**.\n" + "If *everyone* successfully attends, you will also be awarded a bonus of {coin}**{bonus}**.\n" + "Anyone who does *not* attend their booked session will have the rest of their schedule cancelled " + "**without refund**, so beware!" + )).format( + coin=conf.emojis.coin, + reward=config.attendance_reward.value, + bonus=config.attendance_bonus.value, + ), + inline=False + ) + await press.edit_original_response(embed=embed) diff --git a/src/modules/statistics/cog.py b/src/modules/statistics/cog.py index 1ef512d5..899ed657 100644 --- a/src/modules/statistics/cog.py +++ b/src/modules/statistics/cog.py @@ -46,6 +46,7 @@ class StatsCog(LionCog): "Display your personal profile and summary statistics." ) ) + @appcmds.guild_only async def me_cmd(self, ctx: LionContext): await ctx.interaction.response.defer(thinking=True) ui = ProfileUI(self.bot, ctx.author, ctx.guild) @@ -59,6 +60,7 @@ class StatsCog(LionCog): "Weekly and monthly statistics for your recent activity." ) ) + @appcmds.guild_only async def stats_cmd(self, ctx: LionContext): """ Statistics command. diff --git a/src/modules/statistics/data.py b/src/modules/statistics/data.py index 30448701..76ba4cf6 100644 --- a/src/modules/statistics/data.py +++ b/src/modules/statistics/data.py @@ -126,7 +126,7 @@ class StatsData(Registry): @classmethod @log_wrap(action='study_times_between') - async def study_times_between(cls, guildid: int, userid: int, *points) -> list[int]: + async def study_times_between(cls, guildid: Optional[int], userid: int, *points) -> list[int]: if len(points) < 2: raise ValueError('Not enough block points given!') @@ -165,8 +165,8 @@ class StatsData(Registry): return (await cursor.fetchone()[0]) or 0 @classmethod - @log_wrap(action='study_times_between') - async def study_times_since(cls, guildid: int, userid: int, *starts) -> int: + @log_wrap(action='study_times_since') + async def study_times_since(cls, guildid: Optional[int], userid: int, *starts) -> int: if len(starts) < 1: raise ValueError('No starting points given!') diff --git a/src/modules/statistics/graphics/profile.py b/src/modules/statistics/graphics/profile.py index 3a413d4a..759a974b 100644 --- a/src/modules/statistics/graphics/profile.py +++ b/src/modules/statistics/graphics/profile.py @@ -76,7 +76,7 @@ async def get_profile_card(bot: LionBot, userid: int, guildid: int): else: next_rank = None - achievements = (0, 1) + achievements = (0, 1, 2, 3) card = ProfileCard( user=username, diff --git a/src/modules/statistics/graphics/stats.py b/src/modules/statistics/graphics/stats.py index b10607d8..ffa19bb0 100644 --- a/src/modules/statistics/graphics/stats.py +++ b/src/modules/statistics/graphics/stats.py @@ -34,7 +34,7 @@ async def get_stats_card(bot: LionBot, userid: int, guildid: int, mode: CardMode # Extract the study times for each period if mode in (CardMode.STUDY, CardMode.VOICE): model = data.VoiceSessionStats - refkey = (guildid, userid) + refkey = (guildid or None, userid) ref_since = model.study_times_since ref_between = model.study_times_between elif mode is CardMode.TEXT: diff --git a/src/modules/tasklist/cog.py b/src/modules/tasklist/cog.py index 88f718aa..64a5b93f 100644 --- a/src/modules/tasklist/cog.py +++ b/src/modules/tasklist/cog.py @@ -764,7 +764,7 @@ class TasklistCog(LionCog): embed=error_embed(t(_p( 'cmd:tasks_remove_cmd|error:no_matching', "No tasks on your tasklist match `{input}`" - ))).format(input=taskidstr) + )).format(input=taskidstr)) ) return @@ -788,7 +788,7 @@ class TasklistCog(LionCog): embed=error_embed(t(_p( 'cmd:tasks_remove_cmd|error:no_matching', "No tasks on your tasklist matching all the given conditions!" - ))).format(input=taskidstr) + )).format(input=taskidstr)) ) return taskids = [task.taskid for task in tasks] @@ -859,7 +859,7 @@ class TasklistCog(LionCog): embed=error_embed(t(_p( 'cmd:tasks_remove_cmd|error:no_matching', "No tasks on your tasklist match `{input}`" - ))).format(input=taskidstr) + )).format(input=taskidstr)) ) return @@ -934,7 +934,7 @@ class TasklistCog(LionCog): embed=error_embed(t(_p( 'cmd:tasks_remove_cmd|error:no_matching', "No tasks on your tasklist match `{input}`" - ))).format(input=taskidstr) + )).format(input=taskidstr)) ) return @@ -942,7 +942,7 @@ class TasklistCog(LionCog): tasks = [task for task in tasks if task.completed_at is not None] taskids = [task.taskid for task in tasks] if taskids: - await tasklist.update_tasks(*taskids, cascade=cascade, completed_at=None) + await tasklist.update_tasks(*taskids, cascade=cascade or False, completed_at=None) # Ack changes and summon tasklist embed = discord.Embed( diff --git a/src/settings/ui.py b/src/settings/ui.py index 046a961b..719fb7e1 100644 --- a/src/settings/ui.py +++ b/src/settings/ui.py @@ -310,6 +310,22 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]): """ name = self.display_name value = f"{self.long_desc}\n{self.desc_table}" + if len(value) > 1024: + t = ctx_translator.get().t + desc_table = '\n'.join( + tabulate( + *self._desc_table( + show_value=t(_p( + 'setting|embed_field|too_long', + "Too long to display here!" + )) + ) + ) + ) + value = f"{self.long_desc}\n{desc_table}" + if len(value) > 1024: + # Forcibly trim + value = value[:1020] + '...' return {'name': name, 'value': value} @property @@ -341,14 +357,14 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]): embed.description = "{}\n{}".format(self.long_desc.format(self=self), self.desc_table) return embed - def _desc_table(self) -> list[str]: + def _desc_table(self, show_value: Optional[str] = None) -> list[tuple[str, str]]: t = ctx_translator.get().t lines = [] # Currently line lines.append(( t(_p('setting|summary_table|field:currently|key', "Currently")), - self.formatted or self.notset_str + show_value or (self.formatted or self.notset_str) )) # Default line @@ -380,7 +396,7 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]): return TextInput( label=self.display_name, placeholder=self.accepts, - default=self.input_formatted, + default=self.input_formatted[:4000] if self.input_formatted else None, required=self._required ) diff --git a/src/tracking/text/cog.py b/src/tracking/text/cog.py index 21965e42..acfb6fe3 100644 --- a/src/tracking/text/cog.py +++ b/src/tracking/text/cog.py @@ -148,6 +148,12 @@ class TextTrackerCog(LionCog): logger.info( f"Saving batch of {len(batch)} completed text sessions." ) + if self.bot.core is None or self.bot.core.lions is None: + # Currently unloading, nothing we can do + logger.warning( + "Skipping text session batch due to unloaded modules." + ) + return # Batch-fetch lguilds lguilds = await self.bot.core.lions.fetch_guilds(*{session.guildid for session in batch}) @@ -223,6 +229,7 @@ class TextTrackerCog(LionCog): channel.category_id except discord.ClientException: logger.debug(f"Ignoring message from channel with no parent: {message.channel}") + return # Untracked channel ward untracked = self.untracked_channels.get(guildid, []) diff --git a/src/tracking/text/session.py b/src/tracking/text/session.py index 6f3f16ea..6921c88d 100644 --- a/src/tracking/text/session.py +++ b/src/tracking/text/session.py @@ -105,12 +105,15 @@ class TextSession: """ Process a message into the session. """ + if not message.guild: + return + if (message.author.id != self.userid) or (message.guild.id != self.guildid): raise ValueError("Invalid attempt to process message from a different member!") # Identify if we need to start a new period - tdiff = (message.created_at - self.this_period_start).total_seconds() - if self.this_period_start is not None and tdiff < self.period_length: + start = self.this_period_start + if start is not None and (message.created_at - start).total_seconds() < self.period_length: self.this_period_messages += 1 self.this_period_words += len(message.content.split()) else: diff --git a/src/tracking/voice/cog.py b/src/tracking/voice/cog.py index 0392320e..d5ecb3c8 100644 --- a/src/tracking/voice/cog.py +++ b/src/tracking/voice/cog.py @@ -79,6 +79,18 @@ class VoiceTrackerCog(LionCog): """ return VoiceSession.get(self.bot, guildid, userid, **kwargs) + def is_untracked(self, channel) -> bool: + if not channel.guild: + raise ValueError("Untracked check invalid for private channels.") + untracked = self.untracked_channels.get(channel.guild.id, ()) + if channel.id in untracked: + untracked = True + elif channel.category_id and channel.category_id in untracked: + untracked = True + else: + untracked = False + return untracked + @LionCog.listener('on_ready') @log_wrap(action='Init Voice Sessions') async def initialise(self): diff --git a/src/utils/data.py b/src/utils/data.py index 6be3680b..a590430f 100644 --- a/src/utils/data.py +++ b/src/utils/data.py @@ -1,7 +1,7 @@ """ Some useful pre-built Conditions for data queries. """ -from typing import Optional +from typing import Optional, Any from itertools import chain from psycopg import sql @@ -11,7 +11,7 @@ from data.base import Expression from constants import MAX_COINS -def MULTIVALUE_IN(columns: tuple[str, ...], *data: tuple[...]) -> Condition: +def MULTIVALUE_IN(columns: tuple[str, ...], *data: tuple[Any, ...]) -> Condition: """ Condition constructor for filtering by multiple column equalities. @@ -100,7 +100,7 @@ class TemporaryTable(Expression): ``` """ - def __init__(self, *columns: str, name: str = '_t', types: Optional[tuple[str]] = None): + def __init__(self, *columns: str, name: str = '_t', types: Optional[tuple[str, ...]] = None): self.name = name self.columns = columns self.types = types diff --git a/src/utils/lib.py b/src/utils/lib.py index 1bec50cc..10babc85 100644 --- a/src/utils/lib.py +++ b/src/utils/lib.py @@ -4,6 +4,7 @@ import datetime import iso8601 # type: ignore import pytz import re +import json from contextvars import Context import discord @@ -764,7 +765,7 @@ class Timezoned: Return the start of the current month in the object's timezone """ today = self.today - return today - datetime.timedelta(days=today.day) + return today - datetime.timedelta(days=(today.day - 1)) def replace_multiple(format_string, mapping): @@ -829,3 +830,60 @@ async def check_dm(user: discord.User | discord.Member) -> bool: return False except discord.HTTPException: return True + + +async def command_lengths(tree) -> dict[str, int]: + cmds = tree.get_commands() + payloads = [ + await cmd.get_translated_payload(tree.translator) + for cmd in cmds + ] + lens = {} + for command in payloads: + name = command['name'] + crumbs = {} + cmd_len = lens[name] = _recurse_length(command, crumbs, (name,)) + if name == 'configure' or cmd_len > 4000: + print(f"'{name}' over 4000. Breadcrumb Trail follows:") + lines = [] + for loc, val in crumbs.items(): + locstr = '.'.join(loc) + lines.append(f"{locstr}: {val}") + print('\n'.join(lines)) + print(json.dumps(command, indent=2)) + return lens + +def _recurse_length(payload, breadcrumbs={}, header=()) -> int: + total = 0 + total_header = (*header, '') + breadcrumbs[total_header] = 0 + + if isinstance(payload, dict): + # Read strings that count towards command length + # String length is length of longest localisation, including default. + for key in ('name', 'description', 'value'): + if key in payload: + value = payload[key] + if isinstance(value, str): + values = (value, *payload.get(key + '_localizations', {}).values()) + maxlen = max(map(len, values)) + total += maxlen + breadcrumbs[(*header, key)] = maxlen + + for key, value in payload.items(): + loc = (*header, key) + total += _recurse_length(value, breadcrumbs, loc) + elif isinstance(payload, list): + for i, item in enumerate(payload): + if isinstance(item, dict) and 'name' in item: + loc = (*header, f"{i}<{item['name']}>") + else: + loc = (*header, str(i)) + total += _recurse_length(item, breadcrumbs, loc) + + if total: + breadcrumbs[total_header] = total + else: + breadcrumbs.pop(total_header) + + return total diff --git a/src/utils/ratelimits.py b/src/utils/ratelimits.py index 4c050e94..7322336c 100644 --- a/src/utils/ratelimits.py +++ b/src/utils/ratelimits.py @@ -56,7 +56,10 @@ class Bucket: def delay(self): self._leak() if self._level + 1 > self.max_level: - return (self._level + 1 - self.max_level) * self.leak_rate + delay = (self._level + 1 - self.max_level) * self.leak_rate + else: + delay = 0 + return delay def _leak(self): if self._level: diff --git a/src/utils/ui/msgeditor.py b/src/utils/ui/msgeditor.py index 94d69c65..ad893119 100644 --- a/src/utils/ui/msgeditor.py +++ b/src/utils/ui/msgeditor.py @@ -181,6 +181,31 @@ class MsgEditor(MessageUI): "Add Embed" )) + @button(label="RM_EMBED_BUTTON_PLACEHOLDER", style=ButtonStyle.red) + async def rm_embed_button(self, press: discord.Interaction, pressed: Button): + """ + Remove the existing embed from the message. + """ + await press.response.defer() + t = self.bot.translator.t + data = self.copy_data() + data.pop('embed', None) + data.pop('embeds', None) + if not data.get('content', '').strip(): + data['content'] = t(_p( + 'ui:msg_editor|button:rm_embed|sample_content', + "Content Placeholder" + )) + await self.push_change(data) + + async def rm_embed_button_refresh(self): + t = self.bot.translator.t + button = self.rm_embed_button + button.label = t(_p( + 'ui:msg_editor|button:rm_embed|label', + "Remove Embed" + )) + # -- Embed Mode -- @button(label="BODY_BUTTON_PLACEHOLDER", style=ButtonStyle.blurple) @@ -934,7 +959,7 @@ class MsgEditor(MessageUI): return MessageArgs(**args) async def refresh_layout(self): - await asyncio.gather( + to_refresh = ( self.edit_button_refresh(), self.add_embed_button_refresh(), self.body_button_refresh(), @@ -948,12 +973,16 @@ class MsgEditor(MessageUI): self.download_button_refresh(), self.undo_button_refresh(), self.redo_button_refresh(), + self.rm_embed_button_refresh(), ) + await asyncio.gather(*to_refresh) + if self.history[-1].get('embed', None): self.set_layout( (self.body_button, self.author_button, self.footer_button, self.images_button, self.add_field_button), (self.edit_field_menu,), (self.delete_field_menu,), + (self.rm_embed_button,), (self.save_button, self.download_button, self.undo_button, self.redo_button, self.quit_button), ) else: