From 251b08558279086725bba1ea082ae3a793737c25 Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Sun, 16 Aug 2026 17:45:40 +0900 Subject: [PATCH 1/9] chore: Update docker getting started doc --- document/deploy_docker_dev.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/document/deploy_docker_dev.md b/document/deploy_docker_dev.md index 9adaae023..f83af6b10 100644 --- a/document/deploy_docker_dev.md +++ b/document/deploy_docker_dev.md @@ -4,12 +4,19 @@ # Containerized Development Environment -1. Simply run the following command to start containerized services, this will run both the database and django service for you: +1. Create `local.env` file: + ``` + cp src/pycontw2016/settings/local.sample.env \ + src/pycontw2016/settings/local.env + # Replace {{ secret_key }} with the instructions in `local.sample.env` + ``` + +2. Simply run the following command to start containerized services, this will run both the database and django service for you: ``` make run_dev ``` -2. If the services are up and running in the first time, you may need to run the following in `pycontw` service in docker shell. +3. If the services are up and running in the first time, you may need to run the following in `pycontw` service in docker shell. To get into the docker shell for `pycontw` From 9474b11b87ca85741e05790002057443db2b9104 Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Sun, 16 Aug 2026 17:49:14 +0900 Subject: [PATCH 2/9] chore: Commit changes from `manage.py makemessages` --- src/locale/en_US/LC_MESSAGES/django.po | 293 ++++++++++++++++++++--- src/locale/zh_Hant/LC_MESSAGES/django.po | 293 ++++++++++++++++++++--- 2 files changed, 510 insertions(+), 76 deletions(-) diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 71cef7a59..74b132993 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PyCon TW\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-20 14:48+0800\n" +"POT-Creation-Date: 2026-08-16 16:47+0800\n" "PO-Revision-Date: 2022-07-11 02:23+0800\n" "Last-Translator: Tom Chen \n" "Language-Team: English (United States) (http://www.transifex.com/pycon-" @@ -29,7 +29,7 @@ msgstr "" msgid "token" msgstr "token" -#: attendee/models.py:7 users/models.py:165 +#: attendee/models.py:7 users/models.py:173 msgid "verified" msgstr "verified" @@ -107,6 +107,7 @@ msgstr "Best Practices & Patterns" #: templates/pycontw-2023/_includes/footer.html:15 #: templates/pycontw-2024/_includes/footer.html:15 #: templates/pycontw-2025/_includes/footer.html:15 +#: templates/pycontw-2026/_includes/footer.html:15 msgid "Community" msgstr "Community" @@ -297,8 +298,8 @@ msgstr "attending PyCon TW in person" msgid "Key" msgstr "Key" -#: core/models.py:215 proposals/models.py:69 users/models.py:197 -#: users/models.py:314 +#: core/models.py:215 proposals/models.py:69 users/models.py:205 +#: users/models.py:322 msgid "user" msgstr "user" @@ -416,7 +417,7 @@ msgstr "custom event" msgid "custom events" msgstr "custom events" -#: events/models.py:210 users/models.py:117 +#: events/models.py:210 users/models.py:125 msgid "speaker name" msgstr "speaker name" @@ -905,6 +906,7 @@ msgstr "review stage" #: templates/pycontw-2023/events/talk_list.html:21 #: templates/pycontw-2024/events/talk_list.html:21 #: templates/pycontw-2025/events/talk_list.html:21 +#: templates/pycontw-2026/events/talk_list.html:21 msgid "Categories" msgstr "Categories" @@ -1236,6 +1238,7 @@ msgstr "PyCon Taiwan 2020" #: pycontw2016/settings/base.py:310 templates/pycontw-2021/index.html:14 #: templates/pycontw-2022/index.html:14 templates/pycontw-2023/index.html:14 #: templates/pycontw-2024/index.html:14 templates/pycontw-2025/index.html:14 +#: templates/pycontw-2026/index.html:14 msgid "PyCon Taiwan 2021" msgstr "PyCon Taiwan 2021" @@ -1255,56 +1258,68 @@ msgstr "PyCon Taiwan 2024" msgid "PyCon Taiwan 2025" msgstr "PyCon Taiwan 2025" -#: pycontw2016/settings/base.py:327 +#: pycontw2016/settings/base.py:315 +#, fuzzy +#| msgid "PyCon Taiwan 2020" +msgid "PyCon Taiwan 2026" +msgstr "PyCon Taiwan 2020" + +#: pycontw2016/settings/base.py:328 #: pycontw2016/settings/production/pycontw2016.py:16 #: pycontw2016/settings/production/pycontw2021.py:16 #: pycontw2016/settings/production/pycontw2022.py:16 #: pycontw2016/settings/production/pycontw2023.py:16 #: pycontw2016/settings/production/pycontw2024.py:16 #: pycontw2016/settings/production/pycontw2025.py:16 +#: pycontw2016/settings/production/pycontw2026.py:25 #: pycontw2016/settings/testing/pycontw2021.py:11 #: pycontw2016/settings/testing/pycontw2022.py:11 #: pycontw2016/settings/testing/pycontw2023.py:11 #: pycontw2016/settings/testing/pycontw2024.py:11 #: pycontw2016/settings/testing/pycontw2025.py:11 +#: pycontw2016/settings/testing/pycontw2026.py:11 msgid "No preference" msgstr "No preference" -#: pycontw2016/settings/base.py:328 +#: pycontw2016/settings/base.py:329 #: pycontw2016/settings/production/pycontw2021.py:17 #: pycontw2016/settings/production/pycontw2022.py:17 #: pycontw2016/settings/production/pycontw2023.py:17 #: pycontw2016/settings/production/pycontw2024.py:17 #: pycontw2016/settings/production/pycontw2025.py:17 +#: pycontw2016/settings/production/pycontw2026.py:26 #: pycontw2016/settings/testing/pycontw2021.py:12 #: pycontw2016/settings/testing/pycontw2022.py:12 #: pycontw2016/settings/testing/pycontw2023.py:12 #: pycontw2016/settings/testing/pycontw2024.py:12 #: pycontw2016/settings/testing/pycontw2025.py:12 +#: pycontw2016/settings/testing/pycontw2026.py:12 msgid "Prefer 15min" msgstr "Prefer 15min" -#: pycontw2016/settings/base.py:329 +#: pycontw2016/settings/base.py:330 #: pycontw2016/settings/production/pycontw2021.py:18 #: pycontw2016/settings/production/pycontw2022.py:18 #: pycontw2016/settings/production/pycontw2023.py:18 #: pycontw2016/settings/production/pycontw2024.py:18 #: pycontw2016/settings/production/pycontw2025.py:18 +#: pycontw2016/settings/production/pycontw2026.py:27 #: pycontw2016/settings/testing/pycontw2021.py:13 #: pycontw2016/settings/testing/pycontw2022.py:13 #: pycontw2016/settings/testing/pycontw2023.py:13 #: pycontw2016/settings/testing/pycontw2024.py:13 #: pycontw2016/settings/testing/pycontw2025.py:13 +#: pycontw2016/settings/testing/pycontw2026.py:13 msgid "Prefer 30min" msgstr "Prefer 30min" -#: pycontw2016/settings/base.py:333 +#: pycontw2016/settings/base.py:334 #: pycontw2016/settings/production/pycontw2016.py:22 #: templates/pycontw-2016/events/schedule.html:42 msgid "Day 1" msgstr "Day 1" -#: pycontw2016/settings/base.py:334 +#: pycontw2016/settings/base.py:335 #: pycontw2016/settings/production/pycontw2016.py:23 #: templates/pycontw-2016/events/schedule.html:45 msgid "Day 2" @@ -1320,11 +1335,13 @@ msgstr "Prefer 25min" #: pycontw2016/settings/production/pycontw2023.py:19 #: pycontw2016/settings/production/pycontw2024.py:19 #: pycontw2016/settings/production/pycontw2025.py:19 +#: pycontw2016/settings/production/pycontw2026.py:28 #: pycontw2016/settings/testing/pycontw2021.py:14 #: pycontw2016/settings/testing/pycontw2022.py:14 #: pycontw2016/settings/testing/pycontw2023.py:14 #: pycontw2016/settings/testing/pycontw2024.py:14 #: pycontw2016/settings/testing/pycontw2025.py:14 +#: pycontw2016/settings/testing/pycontw2026.py:14 msgid "Prefer 45min" msgstr "Prefer 45min" @@ -1668,6 +1685,8 @@ msgstr "Change" #: templates/pycontw-2024/events/tutorial_detail.html:54 #: templates/pycontw-2025/events/talk_detail.html:68 #: templates/pycontw-2025/events/tutorial_detail.html:54 +#: templates/pycontw-2026/events/talk_detail.html:68 +#: templates/pycontw-2026/events/tutorial_detail.html:54 msgid "Abstract" msgstr "Abstract" @@ -2013,7 +2032,7 @@ msgid "Stage" msgstr "Stage" #: templates/default/reviews/_includes/previous_review_table.html:7 -#: users/models.py:222 +#: users/models.py:230 msgid "Reviewer ID" msgstr "Reviewer ID" @@ -2320,6 +2339,8 @@ msgstr "Your Name" #: templates/pycontw-2024/contents/_default/conference/keynotes.html:57 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:44 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:57 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:44 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:57 msgid "Biography" msgstr "Biography" @@ -2339,7 +2360,7 @@ msgstr "GitHub Username" #: templates/pycontw-2019/404.html:12 templates/pycontw-2020/404.html:12 #: templates/pycontw-2021/404.html:12 templates/pycontw-2022/404.html:12 #: templates/pycontw-2023/404.html:12 templates/pycontw-2024/404.html:12 -#: templates/pycontw-2025/404.html:12 +#: templates/pycontw-2025/404.html:12 templates/pycontw-2026/404.html:12 msgid "Page Not Found" msgstr "Page Not Found" @@ -2347,7 +2368,7 @@ msgstr "Page Not Found" #: templates/pycontw-2019/404.html:29 templates/pycontw-2020/404.html:29 #: templates/pycontw-2021/404.html:29 templates/pycontw-2022/404.html:29 #: templates/pycontw-2023/404.html:29 templates/pycontw-2024/404.html:29 -#: templates/pycontw-2025/404.html:29 +#: templates/pycontw-2025/404.html:29 templates/pycontw-2026/404.html:29 msgid "Ooops! It’s a 404 problem." msgstr "Ooops! It’s a 404 problem." @@ -2355,7 +2376,7 @@ msgstr "Ooops! It’s a 404 problem." #: templates/pycontw-2019/404.html:30 templates/pycontw-2020/404.html:30 #: templates/pycontw-2021/404.html:30 templates/pycontw-2022/404.html:30 #: templates/pycontw-2023/404.html:30 templates/pycontw-2024/404.html:30 -#: templates/pycontw-2025/404.html:30 +#: templates/pycontw-2025/404.html:30 templates/pycontw-2026/404.html:30 msgid "We cannot find what you’re looking for." msgstr "We cannot find what you’re looking for." @@ -2363,7 +2384,7 @@ msgstr "We cannot find what you’re looking for." #: templates/pycontw-2019/500.html:12 templates/pycontw-2020/500.html:12 #: templates/pycontw-2021/500.html:12 templates/pycontw-2022/500.html:12 #: templates/pycontw-2023/500.html:12 templates/pycontw-2024/500.html:12 -#: templates/pycontw-2025/500.html:12 +#: templates/pycontw-2025/500.html:12 templates/pycontw-2026/500.html:12 msgid "Server Error" msgstr "Server Error" @@ -2371,7 +2392,7 @@ msgstr "Server Error" #: templates/pycontw-2019/500.html:29 templates/pycontw-2020/500.html:29 #: templates/pycontw-2021/500.html:29 templates/pycontw-2022/500.html:29 #: templates/pycontw-2023/500.html:29 templates/pycontw-2024/500.html:29 -#: templates/pycontw-2025/500.html:29 +#: templates/pycontw-2025/500.html:29 templates/pycontw-2026/500.html:29 msgid "Ooops! It’s a 500 problem." msgstr "Ooops! It’s a 500 problem." @@ -2379,7 +2400,7 @@ msgstr "Ooops! It’s a 500 problem." #: templates/pycontw-2019/500.html:30 templates/pycontw-2020/500.html:30 #: templates/pycontw-2021/500.html:30 templates/pycontw-2022/500.html:30 #: templates/pycontw-2023/500.html:30 templates/pycontw-2024/500.html:30 -#: templates/pycontw-2025/500.html:30 +#: templates/pycontw-2025/500.html:30 templates/pycontw-2026/500.html:30 msgid "We screwed up. It’s not your fault." msgstr "We screwed up. It’s not your fault." @@ -2392,6 +2413,7 @@ msgstr "We screwed up. It’s not your fault." #: templates/pycontw-2023/_includes/menu.html:39 #: templates/pycontw-2024/_includes/menu.html:39 #: templates/pycontw-2025/_includes/menu.html:39 +#: templates/pycontw-2026/_includes/menu.html:39 msgid "About" msgstr "About" @@ -2404,6 +2426,7 @@ msgstr "About" #: templates/pycontw-2023/_includes/footer.html:13 #: templates/pycontw-2024/_includes/footer.html:13 #: templates/pycontw-2025/_includes/footer.html:13 +#: templates/pycontw-2026/_includes/footer.html:13 msgid "Code of Conduct" msgstr "Code of Conduct" @@ -2434,6 +2457,9 @@ msgstr "Code of Conduct" #: templates/pycontw-2025/_includes/footer.html:14 #: templates/pycontw-2025/contents/_staff.html:5 #: templates/pycontw-2025/contents/_staff.html:10 +#: templates/pycontw-2026/_includes/footer.html:14 +#: templates/pycontw-2026/contents/_staff.html:5 +#: templates/pycontw-2026/contents/_staff.html:10 msgid "Staff" msgstr "Staff" @@ -2447,6 +2473,7 @@ msgstr "Staff" #: templates/pycontw-2023/contents/_default/conference/keynotes.html:17 #: templates/pycontw-2024/contents/_default/conference/keynotes.html:17 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:17 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:17 msgid "Events" msgstr "Events" @@ -2525,6 +2552,11 @@ msgstr "Schedule" #: templates/pycontw-2025/contents/_default/conference/keynotes.html:24 #: templates/pycontw-2025/contents/en/events/overview.html:28 #: templates/pycontw-2025/contents/zh/events/overview.html:24 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:6 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:18 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:24 +#: templates/pycontw-2026/contents/en/events/overview.html:28 +#: templates/pycontw-2026/contents/zh/events/overview.html:24 msgid "Keynotes" msgstr "Keynotes" @@ -2568,6 +2600,10 @@ msgstr "Keynotes" #: templates/pycontw-2025/contents/zh/events/overview.html:32 #: templates/pycontw-2025/events/talk_list.html:6 #: templates/pycontw-2025/events/talk_list.html:13 +#: templates/pycontw-2026/contents/en/events/overview.html:39 +#: templates/pycontw-2026/contents/zh/events/overview.html:32 +#: templates/pycontw-2026/events/talk_list.html:6 +#: templates/pycontw-2026/events/talk_list.html:13 msgid "Talks" msgstr "Talks" @@ -2588,6 +2624,8 @@ msgstr "Talks" #: templates/pycontw-2024/contents/zh/events/overview.html:84 #: templates/pycontw-2025/contents/en/events/overview.html:107 #: templates/pycontw-2025/contents/zh/events/overview.html:84 +#: templates/pycontw-2026/contents/en/events/overview.html:107 +#: templates/pycontw-2026/contents/zh/events/overview.html:84 msgid "Sprints" msgstr "Sprints" @@ -2652,6 +2690,7 @@ msgstr "Financial Aid" #: templates/pycontw-2023/_includes/social.html:4 #: templates/pycontw-2024/_includes/social.html:4 #: templates/pycontw-2025/_includes/social.html:4 +#: templates/pycontw-2026/_includes/social.html:4 msgid "Blog" msgstr "Blog" @@ -2723,6 +2762,8 @@ msgstr "Slides Link" #: templates/pycontw-2024/events/tutorial_detail.html:61 #: templates/pycontw-2025/events/talk_detail.html:75 #: templates/pycontw-2025/events/tutorial_detail.html:61 +#: templates/pycontw-2026/events/talk_detail.html:75 +#: templates/pycontw-2026/events/tutorial_detail.html:61 msgid "Description" msgstr "Description" @@ -2809,6 +2850,10 @@ msgstr "" #: templates/pycontw-2025/contents/zh/events/overview.html:39 #: templates/pycontw-2025/events/tutorial_list.html:6 #: templates/pycontw-2025/events/tutorial_list.html:11 +#: templates/pycontw-2026/contents/en/events/overview.html:50 +#: templates/pycontw-2026/contents/zh/events/overview.html:39 +#: templates/pycontw-2026/events/tutorial_list.html:6 +#: templates/pycontw-2026/events/tutorial_list.html:11 msgid "Tutorials" msgstr "Tutorials" @@ -3036,6 +3081,8 @@ msgstr "dashboard" #: templates/pycontw-2024/contents/_default/portal.html:12 #: templates/pycontw-2025/contents/_default/portal.html:6 #: templates/pycontw-2025/contents/_default/portal.html:12 +#: templates/pycontw-2026/contents/_default/portal.html:6 +#: templates/pycontw-2026/contents/_default/portal.html:12 msgid "Portal" msgstr "Portal" @@ -3048,6 +3095,7 @@ msgstr "Portal" #: templates/pycontw-2023/_includes/portal.html:4 #: templates/pycontw-2024/_includes/portal.html:4 #: templates/pycontw-2025/_includes/portal.html:4 +#: templates/pycontw-2026/_includes/portal.html:4 msgid "Collaborative Notes" msgstr "Collaborative Notes" @@ -3071,6 +3119,7 @@ msgstr "Quiz Leaderboard" #: templates/pycontw-2023/_includes/portal.html:12 #: templates/pycontw-2024/_includes/portal.html:12 #: templates/pycontw-2025/_includes/portal.html:12 +#: templates/pycontw-2026/_includes/portal.html:12 msgid "Facebook Fan Page" msgstr "Facebook Fan Page" @@ -3135,6 +3184,9 @@ msgstr "Export New Schedule" #: templates/pycontw-2025/events/talk_detail.html:33 #: templates/pycontw-2025/events/talk_detail.html:43 #: templates/pycontw-2025/events/tutorial_detail.html:30 +#: templates/pycontw-2026/events/talk_detail.html:33 +#: templates/pycontw-2026/events/talk_detail.html:43 +#: templates/pycontw-2026/events/tutorial_detail.html:30 #, python-format msgid "%(date_display)s, %(begin_time_display)s‑%(end_time_display)s" msgstr "%(date_display)s, %(begin_time_display)s‑%(end_time_display)s" @@ -3190,6 +3242,7 @@ msgstr "" #: templates/pycontw-2023/events/talk_list.html:57 #: templates/pycontw-2024/events/talk_list.html:57 #: templates/pycontw-2025/events/talk_list.html:57 +#: templates/pycontw-2026/events/talk_list.html:57 msgid "Invited Events" msgstr "Invited Events" @@ -3309,6 +3362,8 @@ msgstr "Learning" #: templates/pycontw-2024/contents/zh/events/overview.html:55 #: templates/pycontw-2025/contents/en/events/overview.html:68 #: templates/pycontw-2025/contents/zh/events/overview.html:55 +#: templates/pycontw-2026/contents/en/events/overview.html:68 +#: templates/pycontw-2026/contents/zh/events/overview.html:55 msgid "Open Spaces" msgstr "Open Spaces" @@ -3337,6 +3392,7 @@ msgstr "Registration" #: templates/pycontw-2023/_includes/menu.html:143 #: templates/pycontw-2024/_includes/menu.html:143 #: templates/pycontw-2025/_includes/menu.html:143 +#: templates/pycontw-2026/_includes/menu.html:143 msgid "My PyCon" msgstr "My PyCon" @@ -3455,6 +3511,7 @@ msgstr "Chinese slides" #: templates/pycontw-2023/events/tutorial_detail.html:25 #: templates/pycontw-2024/events/tutorial_detail.html:25 #: templates/pycontw-2025/events/tutorial_detail.html:25 +#: templates/pycontw-2026/events/tutorial_detail.html:25 msgid "Location: " msgstr "Location: " @@ -3466,6 +3523,7 @@ msgstr "Location: " #: templates/pycontw-2023/events/tutorial_detail.html:29 #: templates/pycontw-2024/events/tutorial_detail.html:29 #: templates/pycontw-2025/events/tutorial_detail.html:29 +#: templates/pycontw-2026/events/tutorial_detail.html:29 msgid "Slot: " msgstr "Slot: " @@ -3484,6 +3542,8 @@ msgstr "Slot: " #: templates/pycontw-2024/events/tutorial_detail.html:34 #: templates/pycontw-2025/events/talk_detail.html:47 #: templates/pycontw-2025/events/tutorial_detail.html:34 +#: templates/pycontw-2026/events/talk_detail.html:47 +#: templates/pycontw-2026/events/tutorial_detail.html:34 msgid "Category: " msgstr "Category: " @@ -3502,6 +3562,8 @@ msgstr "Category: " #: templates/pycontw-2024/events/tutorial_detail.html:38 #: templates/pycontw-2025/events/talk_detail.html:51 #: templates/pycontw-2025/events/tutorial_detail.html:38 +#: templates/pycontw-2026/events/talk_detail.html:51 +#: templates/pycontw-2026/events/tutorial_detail.html:38 msgid "Language: " msgstr "Language: " @@ -3520,6 +3582,8 @@ msgstr "Language: " #: templates/pycontw-2024/events/tutorial_detail.html:42 #: templates/pycontw-2025/events/talk_detail.html:55 #: templates/pycontw-2025/events/tutorial_detail.html:42 +#: templates/pycontw-2026/events/talk_detail.html:55 +#: templates/pycontw-2026/events/tutorial_detail.html:42 msgid "Python Level: " msgstr "Python Level: " @@ -3538,6 +3602,8 @@ msgstr "Python Level: " #: templates/pycontw-2024/events/tutorial_detail.html:48 #: templates/pycontw-2025/events/talk_detail.html:61 #: templates/pycontw-2025/events/tutorial_detail.html:48 +#: templates/pycontw-2026/events/talk_detail.html:61 +#: templates/pycontw-2026/events/tutorial_detail.html:48 msgid "No Recording" msgstr "No Recording" @@ -3557,6 +3623,8 @@ msgstr "No Recording" #: templates/pycontw-2024/events/tutorial_detail.html:68 #: templates/pycontw-2025/events/talk_detail.html:82 #: templates/pycontw-2025/events/tutorial_detail.html:68 +#: templates/pycontw-2026/events/talk_detail.html:82 +#: templates/pycontw-2026/events/tutorial_detail.html:68 msgid "Slides" msgstr "Slides" @@ -3568,6 +3636,7 @@ msgstr "Slides" #: templates/pycontw-2023/events/talk_detail.html:91 #: templates/pycontw-2024/events/talk_detail.html:91 #: templates/pycontw-2025/events/talk_detail.html:91 +#: templates/pycontw-2026/events/talk_detail.html:91 msgctxt "speaker info in talk detail" msgid "Speakers" msgstr "Speakers" @@ -3580,6 +3649,7 @@ msgstr "Speakers" #: templates/pycontw-2023/events/talk_detail.html:93 #: templates/pycontw-2024/events/talk_detail.html:93 #: templates/pycontw-2025/events/talk_detail.html:93 +#: templates/pycontw-2026/events/talk_detail.html:93 msgctxt "speaker info in talk detail" msgid "Speaker" msgstr "Speaker" @@ -3616,6 +3686,8 @@ msgstr "" #: templates/pycontw-2024/events/tutorial_list.html:16 #: templates/pycontw-2025/events/talk_list.html:18 #: templates/pycontw-2025/events/tutorial_list.html:16 +#: templates/pycontw-2026/events/talk_list.html:18 +#: templates/pycontw-2026/events/tutorial_list.html:16 msgid "" "Program schedule is subject to change. Please check this page " "frequently to get the latest version." @@ -3637,6 +3709,7 @@ msgstr "" #: templates/pycontw-2020/index.html:60 templates/pycontw-2021/index.html:63 #: templates/pycontw-2022/index.html:63 templates/pycontw-2023/index.html:63 #: templates/pycontw-2024/index.html:63 templates/pycontw-2025/index.html:63 +#: templates/pycontw-2026/index.html:63 msgid "What is PyCon" msgstr "What is PyCon" @@ -3644,6 +3717,7 @@ msgstr "What is PyCon" #: templates/pycontw-2020/index.html:61 templates/pycontw-2021/index.html:64 #: templates/pycontw-2022/index.html:64 templates/pycontw-2023/index.html:64 #: templates/pycontw-2024/index.html:64 templates/pycontw-2025/index.html:64 +#: templates/pycontw-2026/index.html:64 msgid "" "

The original PyCon was formed in North America in 2003, and now there are " "many other conferences being run in the PyCon spirit around the world.

" @@ -3655,6 +3729,7 @@ msgstr "" #: templates/pycontw-2020/index.html:68 templates/pycontw-2021/index.html:71 #: templates/pycontw-2022/index.html:71 templates/pycontw-2023/index.html:71 #: templates/pycontw-2024/index.html:71 templates/pycontw-2025/index.html:71 +#: templates/pycontw-2026/index.html:71 msgid "What is PyCon Taiwan" msgstr "What is PyCon Taiwan" @@ -3662,6 +3737,7 @@ msgstr "What is PyCon Taiwan" #: templates/pycontw-2020/index.html:69 templates/pycontw-2021/index.html:72 #: templates/pycontw-2022/index.html:72 templates/pycontw-2023/index.html:72 #: templates/pycontw-2024/index.html:72 templates/pycontw-2025/index.html:72 +#: templates/pycontw-2026/index.html:72 msgid "" "

PyCon Taiwan is an annual convention in Taiwan for the discussion and " "promotion of the Python programming language. It is held by enthusiasts and " @@ -3684,6 +3760,7 @@ msgstr "

Help us organize and make the conference successful!

" #: templates/pycontw-2020/index.html:47 templates/pycontw-2021/index.html:51 #: templates/pycontw-2022/index.html:51 templates/pycontw-2023/index.html:51 #: templates/pycontw-2024/index.html:51 templates/pycontw-2025/index.html:51 +#: templates/pycontw-2026/index.html:51 msgid "Become a volunteer" msgstr "Become a volunteer" @@ -3718,6 +3795,7 @@ msgstr "Maneuvering" #: templates/pycontw-2023/contents/_default/conference/keynotes.html:16 #: templates/pycontw-2024/contents/_default/conference/keynotes.html:16 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:16 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:16 msgid "Home" msgstr "Home" @@ -3735,6 +3813,8 @@ msgstr "Home" #: templates/pycontw-2024/contents/_default/conference/keynotes.html:69 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:47 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:69 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:47 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:69 msgid "Speech" msgstr "Speech" @@ -3745,6 +3825,7 @@ msgstr "Speech" #: templates/pycontw-2023/contents/_default/conference/keynotes.html:51 #: templates/pycontw-2024/contents/_default/conference/keynotes.html:51 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:51 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:51 msgid "Slido" msgstr "Slido" @@ -3759,6 +3840,7 @@ msgstr "Keynote: " #: templates/pycontw-2023/events/tutorial_detail.html:13 #: templates/pycontw-2024/events/tutorial_detail.html:13 #: templates/pycontw-2025/events/tutorial_detail.html:13 +#: templates/pycontw-2026/events/tutorial_detail.html:13 msgid "Tutorial: " msgstr "Tutorial: " @@ -3769,6 +3851,7 @@ msgstr "Tutorial: " #: templates/pycontw-2023/events/tutorial_detail.html:77 #: templates/pycontw-2024/events/tutorial_detail.html:77 #: templates/pycontw-2025/events/tutorial_detail.html:77 +#: templates/pycontw-2026/events/tutorial_detail.html:77 msgctxt "speaker info in tutorial detail" msgid "Lecturers" msgstr "Lecturers" @@ -3780,6 +3863,7 @@ msgstr "Lecturers" #: templates/pycontw-2023/events/tutorial_detail.html:79 #: templates/pycontw-2024/events/tutorial_detail.html:79 #: templates/pycontw-2025/events/tutorial_detail.html:79 +#: templates/pycontw-2026/events/tutorial_detail.html:79 msgctxt "speaker info in tutorial detail" msgid "Lecturer" msgstr "Lecturer" @@ -3803,6 +3887,7 @@ msgstr "" #: templates/pycontw-2023/events/tutorial_list.html:29 #: templates/pycontw-2024/events/tutorial_list.html:29 #: templates/pycontw-2025/events/tutorial_list.html:29 +#: templates/pycontw-2026/events/tutorial_list.html:29 msgid "Show Details" msgstr "Show Details" @@ -3813,6 +3898,7 @@ msgstr "Show Details" #: templates/pycontw-2023/events/tutorial_list.html:33 #: templates/pycontw-2024/events/tutorial_list.html:33 #: templates/pycontw-2025/events/tutorial_list.html:33 +#: templates/pycontw-2026/events/tutorial_list.html:33 msgid "Register" msgstr "Register" @@ -3822,6 +3908,7 @@ msgstr "Register" #: templates/pycontw-2023/_includes/ext/discord.html:6 #: templates/pycontw-2024/_includes/ext/discord.html:6 #: templates/pycontw-2025/_includes/ext/discord.html:6 +#: templates/pycontw-2026/_includes/ext/discord.html:6 msgid "discord-tutorials" msgstr "Tutorials" @@ -3831,6 +3918,7 @@ msgstr "Tutorials" #: templates/pycontw-2023/_includes/ext/discord.html:7 #: templates/pycontw-2024/_includes/ext/discord.html:7 #: templates/pycontw-2025/_includes/ext/discord.html:7 +#: templates/pycontw-2026/_includes/ext/discord.html:7 msgid "" "If you have not installed Discord or joined Python Taiwan Discord server, " "follow Setting up Discord and setup your " @@ -3846,6 +3934,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:10 #: templates/pycontw-2024/_includes/ext/discord.html:10 #: templates/pycontw-2025/_includes/ext/discord.html:10 +#: templates/pycontw-2026/_includes/ext/discord.html:10 msgid "1. Register yourself" msgstr "1. Register yourself" @@ -3865,6 +3954,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:13 #: templates/pycontw-2024/_includes/ext/discord.html:13 #: templates/pycontw-2025/_includes/ext/discord.html:13 +#: templates/pycontw-2026/_includes/ext/discord.html:13 msgid "Enter" msgstr "Enter" @@ -3874,6 +3964,7 @@ msgstr "Enter" #: templates/pycontw-2023/_includes/ext/discord.html:13 #: templates/pycontw-2024/_includes/ext/discord.html:13 #: templates/pycontw-2025/_includes/ext/discord.html:13 +#: templates/pycontw-2026/_includes/ext/discord.html:13 msgid "in this channel to register" msgstr "in this channel to register" @@ -3883,6 +3974,7 @@ msgstr "in this channel to register" #: templates/pycontw-2023/_includes/ext/discord.html:15 #: templates/pycontw-2024/_includes/ext/discord.html:15 #: templates/pycontw-2025/_includes/ext/discord.html:15 +#: templates/pycontw-2026/_includes/ext/discord.html:15 msgid "Enter !register [TOKEN] in this channel to register" msgstr "" "Enter !register [TOKEN] in this channel to register" @@ -3893,6 +3985,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:16 #: templates/pycontw-2024/_includes/ext/discord.html:16 #: templates/pycontw-2025/_includes/ext/discord.html:16 +#: templates/pycontw-2026/_includes/ext/discord.html:16 msgid "" "(If you want to get your own Token, please click the link in the letter or " "use Opass.)" @@ -3906,6 +3999,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:18 #: templates/pycontw-2024/_includes/ext/discord.html:18 #: templates/pycontw-2025/_includes/ext/discord.html:18 +#: templates/pycontw-2026/_includes/ext/discord.html:18 msgid "Enter !help if you need command help from RegBot." msgstr "Enter !help if you need command help from RegBot." @@ -3915,6 +4009,7 @@ msgstr "Enter !help if you need command help from RegBot." #: templates/pycontw-2023/_includes/ext/discord.html:19 #: templates/pycontw-2024/_includes/ext/discord.html:19 #: templates/pycontw-2025/_includes/ext/discord.html:19 +#: templates/pycontw-2026/_includes/ext/discord.html:19 msgid "" "If you register successfully, you can see several new channels appear in the " "left." @@ -3936,6 +4031,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:24 #: templates/pycontw-2024/_includes/ext/discord.html:24 #: templates/pycontw-2025/_includes/ext/discord.html:24 +#: templates/pycontw-2026/_includes/ext/discord.html:24 msgid "2. Take a look at official announcements" msgstr "2. Take a look at official announcements" @@ -3945,6 +4041,7 @@ msgstr "2. Take a look at official announcements" #: templates/pycontw-2023/_includes/ext/discord.html:25 #: templates/pycontw-2024/_includes/ext/discord.html:25 #: templates/pycontw-2025/_includes/ext/discord.html:25 +#: templates/pycontw-2026/_includes/ext/discord.html:25 msgid "" "All official announcements channel names contain the word " "'announcements'." @@ -3958,6 +4055,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:26 #: templates/pycontw-2024/_includes/ext/discord.html:26 #: templates/pycontw-2025/_includes/ext/discord.html:26 +#: templates/pycontw-2026/_includes/ext/discord.html:26 msgid "You can check for important announcements first after you are in." msgstr "You can check for important announcements first after you are in." @@ -3967,6 +4065,7 @@ msgstr "You can check for important announcements first after you are in." #: templates/pycontw-2023/_includes/ext/discord.html:30 #: templates/pycontw-2024/_includes/ext/discord.html:30 #: templates/pycontw-2025/_includes/ext/discord.html:30 +#: templates/pycontw-2026/_includes/ext/discord.html:30 msgid "3. Join session channel" msgstr "3. Join session channel" @@ -3976,6 +4075,7 @@ msgstr "3. Join session channel" #: templates/pycontw-2023/_includes/ext/discord.html:31 #: templates/pycontw-2024/_includes/ext/discord.html:31 #: templates/pycontw-2025/_includes/ext/discord.html:31 +#: templates/pycontw-2026/_includes/ext/discord.html:31 msgid "All session channel names contain the word 'track'." msgstr "All session channel names contain the word 'track'." @@ -3985,6 +4085,7 @@ msgstr "All session channel names contain the word 'track'." #: templates/pycontw-2023/_includes/ext/discord.html:32 #: templates/pycontw-2024/_includes/ext/discord.html:32 #: templates/pycontw-2025/_includes/ext/discord.html:32 +#: templates/pycontw-2026/_includes/ext/discord.html:32 msgid "" "You can enter keynote channel when it is time for keynote, or track channel " "according to which track you are in." @@ -3998,6 +4099,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:36 #: templates/pycontw-2024/_includes/ext/discord.html:36 #: templates/pycontw-2025/_includes/ext/discord.html:36 +#: templates/pycontw-2026/_includes/ext/discord.html:36 msgid "Roles list" msgstr "Roles list" @@ -4007,6 +4109,7 @@ msgstr "Roles list" #: templates/pycontw-2023/_includes/ext/discord.html:37 #: templates/pycontw-2024/_includes/ext/discord.html:37 #: templates/pycontw-2025/_includes/ext/discord.html:37 +#: templates/pycontw-2026/_includes/ext/discord.html:37 msgid "" "Users can be assigned several different roles, each role would have their " "own permission to enter some private channel." @@ -4060,6 +4163,7 @@ msgstr "Target: PyCon TW 2020 attendees" #: templates/pycontw-2023/_includes/ext/discord.html:60 #: templates/pycontw-2024/_includes/ext/discord.html:60 #: templates/pycontw-2025/_includes/ext/discord.html:60 +#: templates/pycontw-2026/_includes/ext/discord.html:60 msgid "Channels list" msgstr "Channels list" @@ -4069,6 +4173,7 @@ msgstr "Channels list" #: templates/pycontw-2023/_includes/ext/discord.html:61 #: templates/pycontw-2024/_includes/ext/discord.html:61 #: templates/pycontw-2025/_includes/ext/discord.html:61 +#: templates/pycontw-2026/_includes/ext/discord.html:61 msgid "" "There are two type of channels in Discord, which is Text Channel and Voice " "Channel. Below we use:" @@ -4082,6 +4187,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:62 #: templates/pycontw-2024/_includes/ext/discord.html:62 #: templates/pycontw-2025/_includes/ext/discord.html:62 +#: templates/pycontw-2026/_includes/ext/discord.html:62 msgid "#CHANNEL_NAME to represent a text channel" msgstr "#CHANNEL_NAME to represent a text channel" @@ -4091,6 +4197,7 @@ msgstr "#CHANNEL_NAME to represent a text channel" #: templates/pycontw-2023/_includes/ext/discord.html:63 #: templates/pycontw-2024/_includes/ext/discord.html:63 #: templates/pycontw-2025/_includes/ext/discord.html:63 +#: templates/pycontw-2026/_includes/ext/discord.html:63 msgid "🔊CHANNEL_NAME to represent a voice channel." msgstr "🔊CHANNEL_NAME to represent a voice channel." @@ -4100,6 +4207,7 @@ msgstr "🔊CHANNEL_NAME to represent a voice channel." #: templates/pycontw-2023/_includes/ext/discord.html:65 #: templates/pycontw-2024/_includes/ext/discord.html:65 #: templates/pycontw-2025/_includes/ext/discord.html:65 +#: templates/pycontw-2026/_includes/ext/discord.html:65 msgid "Registration channel" msgstr "Registration channel" @@ -4109,6 +4217,7 @@ msgstr "Registration channel" #: templates/pycontw-2023/_includes/ext/discord.html:66 #: templates/pycontw-2024/_includes/ext/discord.html:66 #: templates/pycontw-2025/_includes/ext/discord.html:66 +#: templates/pycontw-2026/_includes/ext/discord.html:66 msgid "#registration-desk" msgstr "#registration-desk" @@ -4118,6 +4227,7 @@ msgstr "#registration-desk" #: templates/pycontw-2023/_includes/ext/discord.html:67 #: templates/pycontw-2024/_includes/ext/discord.html:67 #: templates/pycontw-2025/_includes/ext/discord.html:67 +#: templates/pycontw-2026/_includes/ext/discord.html:67 msgid "Roles:@everyone" msgstr "Roles: @everyonte" @@ -4127,6 +4237,7 @@ msgstr "Roles: @everyonte" #: templates/pycontw-2023/_includes/ext/discord.html:68 #: templates/pycontw-2024/_includes/ext/discord.html:68 #: templates/pycontw-2025/_includes/ext/discord.html:68 +#: templates/pycontw-2026/_includes/ext/discord.html:68 msgid "" "When you just enter Python Taiwan Discord server, use this channel to " "provide your registration information, so that robot can promote you to the " @@ -4142,6 +4253,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:71 #: templates/pycontw-2024/_includes/ext/discord.html:71 #: templates/pycontw-2025/_includes/ext/discord.html:71 +#: templates/pycontw-2026/_includes/ext/discord.html:71 msgid "Session channel" msgstr "Session channel" @@ -4151,6 +4263,7 @@ msgstr "Session channel" #: templates/pycontw-2023/_includes/ext/discord.html:72 #: templates/pycontw-2024/_includes/ext/discord.html:72 #: templates/pycontw-2025/_includes/ext/discord.html:72 +#: templates/pycontw-2026/_includes/ext/discord.html:72 msgid "#keynote-track" msgstr "#keynote-track" @@ -4173,6 +4286,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:74 #: templates/pycontw-2024/_includes/ext/discord.html:74 #: templates/pycontw-2025/_includes/ext/discord.html:74 +#: templates/pycontw-2026/_includes/ext/discord.html:74 msgid "Keynote discussion channel" msgstr "Keynote discussion channel" @@ -4182,6 +4296,7 @@ msgstr "Keynote discussion channel" #: templates/pycontw-2023/_includes/ext/discord.html:75 #: templates/pycontw-2024/_includes/ext/discord.html:75 #: templates/pycontw-2025/_includes/ext/discord.html:75 +#: templates/pycontw-2026/_includes/ext/discord.html:75 msgid "#r1-track" msgstr "#r1-track" @@ -4191,6 +4306,7 @@ msgstr "#r1-track" #: templates/pycontw-2023/_includes/ext/discord.html:77 #: templates/pycontw-2024/_includes/ext/discord.html:77 #: templates/pycontw-2025/_includes/ext/discord.html:77 +#: templates/pycontw-2026/_includes/ext/discord.html:77 msgid "R1 track discussion channel" msgstr "R1 track discussion channel" @@ -4200,6 +4316,7 @@ msgstr "R1 track discussion channel" #: templates/pycontw-2023/_includes/ext/discord.html:78 #: templates/pycontw-2024/_includes/ext/discord.html:78 #: templates/pycontw-2025/_includes/ext/discord.html:78 +#: templates/pycontw-2026/_includes/ext/discord.html:78 msgid "#r2-track" msgstr "#r2-track" @@ -4209,6 +4326,7 @@ msgstr "#r2-track" #: templates/pycontw-2023/_includes/ext/discord.html:80 #: templates/pycontw-2024/_includes/ext/discord.html:80 #: templates/pycontw-2025/_includes/ext/discord.html:80 +#: templates/pycontw-2026/_includes/ext/discord.html:80 msgid "R2 track discussion channel" msgstr "R2 track discussion channel" @@ -4218,6 +4336,7 @@ msgstr "R2 track discussion channel" #: templates/pycontw-2023/_includes/ext/discord.html:81 #: templates/pycontw-2024/_includes/ext/discord.html:81 #: templates/pycontw-2025/_includes/ext/discord.html:81 +#: templates/pycontw-2026/_includes/ext/discord.html:81 msgid "#r3-track" msgstr "#r3-track" @@ -4227,6 +4346,7 @@ msgstr "#r3-track" #: templates/pycontw-2023/_includes/ext/discord.html:83 #: templates/pycontw-2024/_includes/ext/discord.html:83 #: templates/pycontw-2025/_includes/ext/discord.html:83 +#: templates/pycontw-2026/_includes/ext/discord.html:83 msgid "R3 track (remote track) discussion channel" msgstr "R3 track (remote track) discussion channel" @@ -4236,6 +4356,7 @@ msgstr "R3 track (remote track) discussion channel" #: templates/pycontw-2023/_includes/ext/discord.html:86 #: templates/pycontw-2024/_includes/ext/discord.html:86 #: templates/pycontw-2025/_includes/ext/discord.html:86 +#: templates/pycontw-2026/_includes/ext/discord.html:86 msgid "Announcements channel" msgstr "Announcements channel" @@ -4245,6 +4366,7 @@ msgstr "Announcements channel" #: templates/pycontw-2023/_includes/ext/discord.html:87 #: templates/pycontw-2024/_includes/ext/discord.html:87 #: templates/pycontw-2025/_includes/ext/discord.html:87 +#: templates/pycontw-2026/_includes/ext/discord.html:87 msgid "#announcements" msgstr "#announcements" @@ -4254,6 +4376,7 @@ msgstr "#announcements" #: templates/pycontw-2023/_includes/ext/discord.html:89 #: templates/pycontw-2024/_includes/ext/discord.html:89 #: templates/pycontw-2025/_includes/ext/discord.html:89 +#: templates/pycontw-2026/_includes/ext/discord.html:89 msgid "" "Official announcement channel, any official announcements will be posted " "here." @@ -4267,6 +4390,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:90 #: templates/pycontw-2024/_includes/ext/discord.html:90 #: templates/pycontw-2025/_includes/ext/discord.html:90 +#: templates/pycontw-2026/_includes/ext/discord.html:90 msgid "#speakers-announcements" msgstr "#speakers-announcements" @@ -4281,6 +4405,7 @@ msgstr "Roles:2020-staff, 2020-speaker" #: templates/pycontw-2023/_includes/ext/discord.html:92 #: templates/pycontw-2024/_includes/ext/discord.html:92 #: templates/pycontw-2025/_includes/ext/discord.html:92 +#: templates/pycontw-2026/_includes/ext/discord.html:92 msgid "" "A special announcement channel for speakers, speaker can also have " "discussion with each other in this channel." @@ -4294,6 +4419,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:93 #: templates/pycontw-2024/_includes/ext/discord.html:93 #: templates/pycontw-2025/_includes/ext/discord.html:93 +#: templates/pycontw-2026/_includes/ext/discord.html:93 msgid "#staff-announcements" msgstr "#staff-announcements" @@ -4307,6 +4433,7 @@ msgstr "Roles:2020-staff" #: templates/pycontw-2023/_includes/ext/discord.html:95 #: templates/pycontw-2024/_includes/ext/discord.html:95 #: templates/pycontw-2025/_includes/ext/discord.html:95 +#: templates/pycontw-2026/_includes/ext/discord.html:95 msgid "" "A special announcement channel for staff, staff can also contact to others " "in this channel." @@ -4320,6 +4447,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:98 #: templates/pycontw-2024/_includes/ext/discord.html:98 #: templates/pycontw-2025/_includes/ext/discord.html:98 +#: templates/pycontw-2026/_includes/ext/discord.html:98 msgid "Information desk channel" msgstr "Information desk channel" @@ -4329,6 +4457,7 @@ msgstr "Information desk channel" #: templates/pycontw-2023/_includes/ext/discord.html:99 #: templates/pycontw-2024/_includes/ext/discord.html:99 #: templates/pycontw-2025/_includes/ext/discord.html:99 +#: templates/pycontw-2026/_includes/ext/discord.html:99 msgid "#information-desk" msgstr "#information-desk" @@ -4338,6 +4467,7 @@ msgstr "#information-desk" #: templates/pycontw-2023/_includes/ext/discord.html:101 #: templates/pycontw-2024/_includes/ext/discord.html:101 #: templates/pycontw-2025/_includes/ext/discord.html:101 +#: templates/pycontw-2026/_includes/ext/discord.html:101 msgid "" "Official online information desk, speakers or attendees can give questions " "or suggestions in this channel." @@ -4351,6 +4481,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:102 #: templates/pycontw-2024/_includes/ext/discord.html:102 #: templates/pycontw-2025/_includes/ext/discord.html:102 +#: templates/pycontw-2026/_includes/ext/discord.html:102 msgid "#speakers" msgstr "#speakers" @@ -4360,6 +4491,7 @@ msgstr "#speakers" #: templates/pycontw-2023/_includes/ext/discord.html:104 #: templates/pycontw-2024/_includes/ext/discord.html:104 #: templates/pycontw-2025/_includes/ext/discord.html:104 +#: templates/pycontw-2026/_includes/ext/discord.html:104 msgid "" "Speakers only information desk, speakers can give sessions or speakers " "related questions here for answers or further instruction." @@ -4373,6 +4505,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:105 #: templates/pycontw-2024/_includes/ext/discord.html:105 #: templates/pycontw-2025/_includes/ext/discord.html:105 +#: templates/pycontw-2026/_includes/ext/discord.html:105 msgid "#session-chairs" msgstr "#session-chairs" @@ -4386,6 +4519,7 @@ msgstr "Roles:2020-session-chair" #: templates/pycontw-2023/_includes/ext/discord.html:107 #: templates/pycontw-2024/_includes/ext/discord.html:107 #: templates/pycontw-2025/_includes/ext/discord.html:107 +#: templates/pycontw-2026/_includes/ext/discord.html:107 msgid "" "A channel for session chairs and assistant chairs to give any related " "questions here for answers or further instruction." @@ -4399,6 +4533,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:110 #: templates/pycontw-2024/_includes/ext/discord.html:110 #: templates/pycontw-2025/_includes/ext/discord.html:110 +#: templates/pycontw-2026/_includes/ext/discord.html:110 msgid "Special channel" msgstr "Special channel" @@ -4408,6 +4543,7 @@ msgstr "Special channel" #: templates/pycontw-2023/_includes/ext/discord.html:111 #: templates/pycontw-2024/_includes/ext/discord.html:111 #: templates/pycontw-2025/_includes/ext/discord.html:111 +#: templates/pycontw-2026/_includes/ext/discord.html:111 msgid "🔊remote-guide" msgstr "🔊remote-guide" @@ -4421,6 +4557,7 @@ msgstr "Roles: 2020-remote" #: templates/pycontw-2023/_includes/ext/discord.html:113 #: templates/pycontw-2024/_includes/ext/discord.html:113 #: templates/pycontw-2025/_includes/ext/discord.html:113 +#: templates/pycontw-2026/_includes/ext/discord.html:113 msgid "" "A special channel for remote partners to contact with each other during " "sessions, mainly for session chairs to give a cue to remote speakers." @@ -4434,6 +4571,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:116 #: templates/pycontw-2024/_includes/ext/discord.html:116 #: templates/pycontw-2025/_includes/ext/discord.html:116 +#: templates/pycontw-2026/_includes/ext/discord.html:116 msgid "Appendices" msgstr "Appendices" @@ -4443,6 +4581,7 @@ msgstr "Appendices" #: templates/pycontw-2023/_includes/ext/discord.html:117 #: templates/pycontw-2024/_includes/ext/discord.html:117 #: templates/pycontw-2025/_includes/ext/discord.html:117 +#: templates/pycontw-2026/_includes/ext/discord.html:117 msgid "Setting up Discord" msgstr "Setting up Discord" @@ -4452,6 +4591,7 @@ msgstr "Setting up Discord" #: templates/pycontw-2023/_includes/ext/discord.html:118 #: templates/pycontw-2024/_includes/ext/discord.html:118 #: templates/pycontw-2025/_includes/ext/discord.html:118 +#: templates/pycontw-2026/_includes/ext/discord.html:118 msgid "" "1.Download the Discord client for " "your platform and install it. If you already have this, please make sure it " @@ -4467,6 +4607,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:120 #: templates/pycontw-2024/_includes/ext/discord.html:120 #: templates/pycontw-2025/_includes/ext/discord.html:120 +#: templates/pycontw-2026/_includes/ext/discord.html:120 msgid "" "2.Register an account on Discord if you don’t have one. Open the Discord " "client you just installed. Click the 'Register' link below and complete your " @@ -4484,6 +4625,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:123 #: templates/pycontw-2024/_includes/ext/discord.html:123 #: templates/pycontw-2025/_includes/ext/discord.html:123 +#: templates/pycontw-2026/_includes/ext/discord.html:123 msgid "" "3.Join the Python Taiwan Discord server.
Python Taiwan Discord server " "invite link: https://discord." @@ -4501,6 +4643,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:126 #: templates/pycontw-2024/_includes/ext/discord.html:126 #: templates/pycontw-2025/_includes/ext/discord.html:126 +#: templates/pycontw-2026/_includes/ext/discord.html:126 msgid "" "In this dialog, copy the invite link above and paste it to the inputbox, " "then click 'Join'." @@ -4514,6 +4657,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/live.html:17 #: templates/pycontw-2024/_includes/ext/live.html:17 #: templates/pycontw-2025/_includes/ext/live.html:17 +#: templates/pycontw-2026/_includes/ext/live.html:17 msgid "This broadcast is not ready yet." msgstr "This broadcast is not ready yet." @@ -4523,6 +4667,7 @@ msgstr "This broadcast is not ready yet." #: templates/pycontw-2023/_includes/ext/live.html:26 #: templates/pycontw-2024/_includes/ext/live.html:26 #: templates/pycontw-2025/_includes/ext/live.html:26 +#: templates/pycontw-2026/_includes/ext/live.html:26 msgid "The broadcasts are not ready yet, please try again later." msgstr "The broadcasts are not ready yet, please try again later." @@ -4532,6 +4677,7 @@ msgstr "The broadcasts are not ready yet, please try again later." #: templates/pycontw-2023/_includes/ext/live.html:32 #: templates/pycontw-2024/_includes/ext/live.html:32 #: templates/pycontw-2025/_includes/ext/live.html:32 +#: templates/pycontw-2026/_includes/ext/live.html:32 msgid "" "The token within the link is invalid. Please contact staff for further help." msgstr "" @@ -4542,6 +4688,7 @@ msgstr "" #: templates/pycontw-2023/_includes/footer.html:16 #: templates/pycontw-2024/_includes/footer.html:16 #: templates/pycontw-2025/_includes/footer.html:16 +#: templates/pycontw-2026/_includes/footer.html:16 msgid "Privacy Policy" msgstr "Privacy Policy" @@ -4570,6 +4717,10 @@ msgstr "Privacy Policy" #: templates/pycontw-2025/contents/zh/events/overview.html:72 #: templates/pycontw-2025/events/talk_list.html:64 #: templates/pycontw-2025/events/talk_list.html:76 +#: templates/pycontw-2026/contents/en/events/overview.html:91 +#: templates/pycontw-2026/contents/zh/events/overview.html:72 +#: templates/pycontw-2026/events/talk_list.html:64 +#: templates/pycontw-2026/events/talk_list.html:76 msgid "Community Track" msgstr "Community Track" @@ -4583,6 +4734,7 @@ msgstr "Warm-Up Session" #: templates/pycontw-2023/_includes/menu.html:137 #: templates/pycontw-2024/_includes/menu.html:137 #: templates/pycontw-2025/_includes/menu.html:137 +#: templates/pycontw-2026/_includes/menu.html:137 msgctxt "COVID-19 Guidelines" msgid "COVID-19 Guidelines" msgstr "COVID-19 Guidelines" @@ -4593,6 +4745,7 @@ msgstr "COVID-19 Guidelines" #: templates/pycontw-2023/_includes/portal.html:8 #: templates/pycontw-2024/_includes/portal.html:8 #: templates/pycontw-2025/_includes/portal.html:8 +#: templates/pycontw-2026/_includes/portal.html:8 msgid "Discord Chat Room" msgstr "Discord 聊天室" @@ -4602,6 +4755,7 @@ msgstr "Discord 聊天室" #: templates/pycontw-2023/_includes/portal.html:16 #: templates/pycontw-2024/_includes/portal.html:16 #: templates/pycontw-2025/_includes/portal.html:16 +#: templates/pycontw-2026/_includes/portal.html:16 msgid "Open space" msgstr "Open space" @@ -4644,6 +4798,8 @@ msgstr "traffic" #: templates/pycontw-2024/ext/discord.html:5 #: templates/pycontw-2025/ccip/discord.html:15 #: templates/pycontw-2025/ext/discord.html:5 +#: templates/pycontw-2026/ccip/discord.html:15 +#: templates/pycontw-2026/ext/discord.html:5 msgid "Discord Guideline" msgstr "Discord Guideline" @@ -4653,6 +4809,7 @@ msgstr "Discord Guideline" #: templates/pycontw-2023/contents/_default/conference/keynotes.html:68 #: templates/pycontw-2024/contents/_default/conference/keynotes.html:68 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:68 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:68 msgid "To be announced" msgstr "To be announced" @@ -4694,6 +4851,7 @@ msgstr "Full" #: templates/pycontw-2023/events/_includes/community-track-traffic.html:10 #: templates/pycontw-2024/events/_includes/community-track-traffic.html:10 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:10 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:10 msgid "Time" msgstr "Time" @@ -4703,6 +4861,7 @@ msgstr "Time" #: templates/pycontw-2023/events/_includes/community-track-traffic.html:11 #: templates/pycontw-2024/events/_includes/community-track-traffic.html:11 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:11 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:11 msgid "Shuttle bus route" msgstr "Shuttle bus route" @@ -4760,6 +4919,15 @@ msgstr "Shuttle bus route" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:18 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:19 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:20 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:21 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:29 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:30 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Cheng Kung University" msgstr "Cheng Kung University" @@ -4793,6 +4961,11 @@ msgstr "Cheng Kung University" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:18 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:29 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Tainan Cultural and Creative Park" msgstr "Tainan Cultural and Creative Park" @@ -4826,6 +4999,11 @@ msgstr "Tainan Cultural and Creative Park" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:19 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:30 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Tsang Fong Art Space" msgstr "Tsang Fong Art Space" @@ -4853,6 +5031,10 @@ msgstr "Tsang Fong Art Space" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:20 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Angry Burger" msgstr "Angry Burger" @@ -4880,6 +5062,10 @@ msgstr "Angry Burger" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:21 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Brunch of San Dao Men Siang Jian" msgstr "Brunch of San Dao Men Siang Jian" @@ -4898,6 +5084,7 @@ msgstr "Agenda" #: templates/pycontw-2023/events/talk_list.html:43 #: templates/pycontw-2024/events/talk_list.html:43 #: templates/pycontw-2025/events/talk_list.html:43 +#: templates/pycontw-2026/events/talk_list.html:43 #, python-format msgid " by %(speaker_names)s" msgstr " - %(speaker_names)s" @@ -4917,6 +5104,7 @@ msgstr "Invited Event" #: templates/pycontw-2023/events/talk_list.html:65 #: templates/pycontw-2024/events/talk_list.html:65 #: templates/pycontw-2025/events/talk_list.html:65 +#: templates/pycontw-2026/events/talk_list.html:65 #, python-format msgid " by %(host_name)s" msgstr " - %(host_name)s" @@ -4942,6 +5130,7 @@ msgstr "Community Track" #: templates/pycontw-2023/events/talk_list.html:78 #: templates/pycontw-2024/events/talk_list.html:78 #: templates/pycontw-2025/events/talk_list.html:78 +#: templates/pycontw-2026/events/talk_list.html:78 msgid "" "The community track is a new event in PyCon TW. We choose the talks with " "specific topics and package them into the same session. We'll leave the " @@ -4986,6 +5175,7 @@ msgstr "Python Community Leader" #: templates/pycontw-2023/events/talk_list.html:17 #: templates/pycontw-2024/events/talk_list.html:17 #: templates/pycontw-2025/events/talk_list.html:17 +#: templates/pycontw-2026/events/talk_list.html:17 msgid "" "The two conference days are packed with talks about Python by speakers from " "Taiwan and around the world. The talks will be either 15- or 30-minute long. " @@ -5007,6 +5197,7 @@ msgstr "" #: templates/pycontw-2023/events/tutorial_list.html:15 #: templates/pycontw-2024/events/tutorial_list.html:15 #: templates/pycontw-2025/events/tutorial_list.html:15 +#: templates/pycontw-2026/events/tutorial_list.html:15 msgid "" "Tutorial are events held as part of the main conference, but attendees need " "to register separately in order to join. They are 90-minute events held to " @@ -5024,6 +5215,7 @@ msgstr "" #: templates/pycontw-2023/ext/discord.html:11 #: templates/pycontw-2024/ext/discord.html:11 #: templates/pycontw-2025/ext/discord.html:11 +#: templates/pycontw-2026/ext/discord.html:11 msgid "PyCon TW Discord Guideline" msgstr "PyCon TW Discord Guideline" @@ -5039,6 +5231,8 @@ msgstr "PyCon TW Discord Guideline" #: templates/pycontw-2024/ext/live.html:12 #: templates/pycontw-2025/ext/live.html:5 #: templates/pycontw-2025/ext/live.html:12 +#: templates/pycontw-2026/ext/live.html:5 +#: templates/pycontw-2026/ext/live.html:12 msgid "Live broadcast" msgstr "Live broadcast" @@ -5051,6 +5245,7 @@ msgstr "Sponsor PyCon TW" #: templates/pycontw-2023/_includes/ext/discord.html:11 #: templates/pycontw-2024/_includes/ext/discord.html:11 #: templates/pycontw-2025/_includes/ext/discord.html:11 +#: templates/pycontw-2026/_includes/ext/discord.html:11 msgid "" "Users can find a #registration-desk channel under PYCON TW 2021 category. There is a PyCon TW RegBot in this channel to help you " @@ -5065,6 +5260,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:20 #: templates/pycontw-2024/_includes/ext/discord.html:20 #: templates/pycontw-2025/_includes/ext/discord.html:20 +#: templates/pycontw-2026/_includes/ext/discord.html:20 msgid "" "If you keep failing to register, you can directly raise your question in " "#registration-desk channel and mention 2021-staff。" @@ -5077,6 +5273,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:39 #: templates/pycontw-2024/_includes/ext/discord.html:39 #: templates/pycontw-2025/_includes/ext/discord.html:39 +#: templates/pycontw-2026/_includes/ext/discord.html:39 msgid "2021-session-chair" msgstr "2021-session-chair" @@ -5085,6 +5282,7 @@ msgstr "2021-session-chair" #: templates/pycontw-2023/_includes/ext/discord.html:40 #: templates/pycontw-2024/_includes/ext/discord.html:40 #: templates/pycontw-2025/_includes/ext/discord.html:40 +#: templates/pycontw-2026/_includes/ext/discord.html:40 msgid "Target: PyCon TW 2021 session chairs and assistant chairs" msgstr "Target: PyCon TW 2021 session chairs and assistant chairs" @@ -5093,6 +5291,7 @@ msgstr "Target: PyCon TW 2021 session chairs and assistant chairs" #: templates/pycontw-2023/_includes/ext/discord.html:43 #: templates/pycontw-2024/_includes/ext/discord.html:43 #: templates/pycontw-2025/_includes/ext/discord.html:43 +#: templates/pycontw-2026/_includes/ext/discord.html:43 msgid "2021-staff" msgstr "2021-staff" @@ -5101,6 +5300,7 @@ msgstr "2021-staff" #: templates/pycontw-2023/_includes/ext/discord.html:44 #: templates/pycontw-2024/_includes/ext/discord.html:44 #: templates/pycontw-2025/_includes/ext/discord.html:44 +#: templates/pycontw-2026/_includes/ext/discord.html:44 msgid "Target: PyCon TW 2021 staff" msgstr "Target: PyCon TW 2021 staff" @@ -5109,6 +5309,7 @@ msgstr "Target: PyCon TW 2021 staff" #: templates/pycontw-2023/_includes/ext/discord.html:47 #: templates/pycontw-2024/_includes/ext/discord.html:47 #: templates/pycontw-2025/_includes/ext/discord.html:47 +#: templates/pycontw-2026/_includes/ext/discord.html:47 msgid "2021-speaker" msgstr "2021-speaker" @@ -5117,6 +5318,7 @@ msgstr "2021-speaker" #: templates/pycontw-2023/_includes/ext/discord.html:48 #: templates/pycontw-2024/_includes/ext/discord.html:48 #: templates/pycontw-2025/_includes/ext/discord.html:48 +#: templates/pycontw-2026/_includes/ext/discord.html:48 msgid "Target: PyCon TW 2021 speakers" msgstr "Target: PyCon TW 2021 speakers" @@ -5125,6 +5327,7 @@ msgstr "Target: PyCon TW 2021 speakers" #: templates/pycontw-2023/_includes/ext/discord.html:51 #: templates/pycontw-2024/_includes/ext/discord.html:51 #: templates/pycontw-2025/_includes/ext/discord.html:51 +#: templates/pycontw-2026/_includes/ext/discord.html:51 msgid "2021-remote" msgstr "2021-remote" @@ -5133,6 +5336,7 @@ msgstr "2021-remote" #: templates/pycontw-2023/_includes/ext/discord.html:52 #: templates/pycontw-2024/_includes/ext/discord.html:52 #: templates/pycontw-2025/_includes/ext/discord.html:52 +#: templates/pycontw-2026/_includes/ext/discord.html:52 msgid "Target: PyCon TW 2021 remote session staff and remote speakers." msgstr "Target: PyCon TW 2021 remote session staff and remote speakers." @@ -5141,6 +5345,7 @@ msgstr "Target: PyCon TW 2021 remote session staff and remote speakers." #: templates/pycontw-2023/_includes/ext/discord.html:55 #: templates/pycontw-2024/_includes/ext/discord.html:55 #: templates/pycontw-2025/_includes/ext/discord.html:55 +#: templates/pycontw-2026/_includes/ext/discord.html:55 msgid "2021-attendee" msgstr "2021-attendee" @@ -5149,6 +5354,7 @@ msgstr "2021-attendee" #: templates/pycontw-2023/_includes/ext/discord.html:56 #: templates/pycontw-2024/_includes/ext/discord.html:56 #: templates/pycontw-2025/_includes/ext/discord.html:56 +#: templates/pycontw-2026/_includes/ext/discord.html:56 msgid "Target: PyCon TW 2021 attendees" msgstr "Target: PyCon TW 2021 attendees" @@ -5182,6 +5388,12 @@ msgstr "Target: PyCon TW 2021 attendees" #: templates/pycontw-2025/_includes/ext/discord.html:82 #: templates/pycontw-2025/_includes/ext/discord.html:88 #: templates/pycontw-2025/_includes/ext/discord.html:100 +#: templates/pycontw-2026/_includes/ext/discord.html:73 +#: templates/pycontw-2026/_includes/ext/discord.html:76 +#: templates/pycontw-2026/_includes/ext/discord.html:79 +#: templates/pycontw-2026/_includes/ext/discord.html:82 +#: templates/pycontw-2026/_includes/ext/discord.html:88 +#: templates/pycontw-2026/_includes/ext/discord.html:100 msgid "" "Roles:2021-staff, 2021-speaker, 2021-" "attendee" @@ -5199,6 +5411,8 @@ msgstr "" #: templates/pycontw-2024/_includes/ext/discord.html:103 #: templates/pycontw-2025/_includes/ext/discord.html:91 #: templates/pycontw-2025/_includes/ext/discord.html:103 +#: templates/pycontw-2026/_includes/ext/discord.html:91 +#: templates/pycontw-2026/_includes/ext/discord.html:103 msgid "Roles:2021-staff, 2021-speaker" msgstr "Roles:2021-staff, 2021-speaker" @@ -5207,6 +5421,7 @@ msgstr "Roles:2021-staff, 2021-speaker" #: templates/pycontw-2023/_includes/ext/discord.html:94 #: templates/pycontw-2024/_includes/ext/discord.html:94 #: templates/pycontw-2025/_includes/ext/discord.html:94 +#: templates/pycontw-2026/_includes/ext/discord.html:94 msgid "Roles:2021-staff" msgstr "Roles:2021-staff" @@ -5215,6 +5430,7 @@ msgstr "Roles:2021-staff" #: templates/pycontw-2023/_includes/ext/discord.html:106 #: templates/pycontw-2024/_includes/ext/discord.html:106 #: templates/pycontw-2025/_includes/ext/discord.html:106 +#: templates/pycontw-2026/_includes/ext/discord.html:106 msgid "Roles:2021-session-chair" msgstr "Roles:2021-session-chair" @@ -5223,12 +5439,13 @@ msgstr "Roles:2021-session-chair" #: templates/pycontw-2023/_includes/ext/discord.html:112 #: templates/pycontw-2024/_includes/ext/discord.html:112 #: templates/pycontw-2025/_includes/ext/discord.html:112 +#: templates/pycontw-2026/_includes/ext/discord.html:112 msgid "Roles: 2021-remote" msgstr "Roles: 2021-remote" #: templates/pycontw-2021/index.html:56 templates/pycontw-2022/index.html:56 #: templates/pycontw-2023/index.html:56 templates/pycontw-2024/index.html:56 -#: templates/pycontw-2025/index.html:56 +#: templates/pycontw-2025/index.html:56 templates/pycontw-2026/index.html:56 msgid "Call for Proposals" msgstr "Call for Proposals" @@ -5319,29 +5536,29 @@ msgstr "I agree to the code of conduct." msgid "You must agree to continue." msgstr "You must agree to continue." -#: users/models.py:113 +#: users/models.py:121 msgid "email address" msgstr "email address" -#: users/models.py:121 +#: users/models.py:129 msgid "biography" msgstr "biography" -#: users/models.py:124 +#: users/models.py:132 msgid "" "Describe yourself with 1000 characters or less. There will be no formatting." msgstr "" "Describe yourself with 1000 characters or less. There will be no formatting." -#: users/models.py:129 +#: users/models.py:137 msgid "photo" msgstr "photo" -#: users/models.py:133 +#: users/models.py:141 msgid "Facebook" msgstr "Facebook" -#: users/models.py:136 +#: users/models.py:144 msgid "" "Link to your Facebook profile page. This will be shown when we display your " "public information. If you do not know what your profile page link is, click " @@ -5353,11 +5570,11 @@ msgstr "" "on this link, and " "copy-paste the URL of the page opened. Remember to log in to Facebook first!" -#: users/models.py:145 +#: users/models.py:153 msgid "Twitter" msgstr "Twitter" -#: users/models.py:150 +#: users/models.py:158 msgid "" "Your Twitter handle, without the \"@\" sign. This will be shown when we " "display your public information." @@ -5365,11 +5582,11 @@ msgstr "" "Your Twitter handle, without the “@” sign. This will be shown when we " "display your public information." -#: users/models.py:155 +#: users/models.py:163 msgid "GitHub" msgstr "GitHub" -#: users/models.py:160 +#: users/models.py:168 msgid "" "Your GitHub account, without the \"@\" sign. This will be shown when we " "display your public information." @@ -5377,23 +5594,23 @@ msgstr "" "Your GitHub account, without the “@” sign. This will be shown when we " "display your public information." -#: users/models.py:168 +#: users/models.py:176 msgid "Designates whether the user has verified email ownership." msgstr "Designates whether the user has verified email ownership." -#: users/models.py:172 +#: users/models.py:180 msgid "staff status" msgstr "staff status" -#: users/models.py:175 +#: users/models.py:183 msgid "Designates whether the user can log into this admin site." msgstr "Designates whether the user can log into this admin site." -#: users/models.py:179 +#: users/models.py:187 msgid "active" msgstr "active" -#: users/models.py:182 +#: users/models.py:190 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." @@ -5401,24 +5618,24 @@ msgstr "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." -#: users/models.py:187 +#: users/models.py:195 msgid "date joined" msgstr "date joined" -#: users/models.py:198 +#: users/models.py:206 msgid "users" msgstr "users" -#: users/models.py:300 +#: users/models.py:308 #, python-brace-format msgid "Verify your email address on {host}" msgstr "Verify your email address on {host}" -#: users/models.py:318 +#: users/models.py:326 msgid "latest agreed CoC version" msgstr "latest agreed CoC version" -#: users/models.py:322 +#: users/models.py:330 msgid "agreed at" msgstr "agreed at" diff --git a/src/locale/zh_Hant/LC_MESSAGES/django.po b/src/locale/zh_Hant/LC_MESSAGES/django.po index 877edaeb4..0d5adfad1 100644 --- a/src/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/locale/zh_Hant/LC_MESSAGES/django.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: PyCon TW\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-20 14:48+0800\n" +"POT-Creation-Date: 2026-08-16 16:47+0800\n" "PO-Revision-Date: 2022-07-11 02:25+0800\n" "Last-Translator: Tom Chen \n" "Language-Team: Chinese Traditional (http://www.transifex.com/pycon-taiwan/" @@ -36,7 +36,7 @@ msgstr "" msgid "token" msgstr "驗證碼" -#: attendee/models.py:7 users/models.py:165 +#: attendee/models.py:7 users/models.py:173 msgid "verified" msgstr "已認證" @@ -114,6 +114,7 @@ msgstr "最佳實踐與慣例" #: templates/pycontw-2023/_includes/footer.html:15 #: templates/pycontw-2024/_includes/footer.html:15 #: templates/pycontw-2025/_includes/footer.html:15 +#: templates/pycontw-2026/_includes/footer.html:15 msgid "Community" msgstr "社群" @@ -304,8 +305,8 @@ msgstr "是否願意以實體方式與會" msgid "Key" msgstr "鍵" -#: core/models.py:215 proposals/models.py:69 users/models.py:197 -#: users/models.py:314 +#: core/models.py:215 proposals/models.py:69 users/models.py:205 +#: users/models.py:322 msgid "user" msgstr "使用者" @@ -423,7 +424,7 @@ msgstr "自訂活動" msgid "custom events" msgstr "自訂活動" -#: events/models.py:210 users/models.py:117 +#: events/models.py:210 users/models.py:125 msgid "speaker name" msgstr "演講者" @@ -889,6 +890,7 @@ msgstr "審查階段" #: templates/pycontw-2023/events/talk_list.html:21 #: templates/pycontw-2024/events/talk_list.html:21 #: templates/pycontw-2025/events/talk_list.html:21 +#: templates/pycontw-2026/events/talk_list.html:21 msgid "Categories" msgstr "主題分類" @@ -1198,6 +1200,7 @@ msgstr "PyCon Taiwan 2020" #: pycontw2016/settings/base.py:310 templates/pycontw-2021/index.html:14 #: templates/pycontw-2022/index.html:14 templates/pycontw-2023/index.html:14 #: templates/pycontw-2024/index.html:14 templates/pycontw-2025/index.html:14 +#: templates/pycontw-2026/index.html:14 msgid "PyCon Taiwan 2021" msgstr "PyCon Taiwan 2021" @@ -1217,56 +1220,68 @@ msgstr "PyCon Taiwan 2024" msgid "PyCon Taiwan 2025" msgstr "PyCon Taiwan 2025" -#: pycontw2016/settings/base.py:327 +#: pycontw2016/settings/base.py:315 +#, fuzzy +#| msgid "PyCon Taiwan 2020" +msgid "PyCon Taiwan 2026" +msgstr "PyCon Taiwan 2020" + +#: pycontw2016/settings/base.py:328 #: pycontw2016/settings/production/pycontw2016.py:16 #: pycontw2016/settings/production/pycontw2021.py:16 #: pycontw2016/settings/production/pycontw2022.py:16 #: pycontw2016/settings/production/pycontw2023.py:16 #: pycontw2016/settings/production/pycontw2024.py:16 #: pycontw2016/settings/production/pycontw2025.py:16 +#: pycontw2016/settings/production/pycontw2026.py:25 #: pycontw2016/settings/testing/pycontw2021.py:11 #: pycontw2016/settings/testing/pycontw2022.py:11 #: pycontw2016/settings/testing/pycontw2023.py:11 #: pycontw2016/settings/testing/pycontw2024.py:11 #: pycontw2016/settings/testing/pycontw2025.py:11 +#: pycontw2016/settings/testing/pycontw2026.py:11 msgid "No preference" msgstr "無偏好" -#: pycontw2016/settings/base.py:328 +#: pycontw2016/settings/base.py:329 #: pycontw2016/settings/production/pycontw2021.py:17 #: pycontw2016/settings/production/pycontw2022.py:17 #: pycontw2016/settings/production/pycontw2023.py:17 #: pycontw2016/settings/production/pycontw2024.py:17 #: pycontw2016/settings/production/pycontw2025.py:17 +#: pycontw2016/settings/production/pycontw2026.py:26 #: pycontw2016/settings/testing/pycontw2021.py:12 #: pycontw2016/settings/testing/pycontw2022.py:12 #: pycontw2016/settings/testing/pycontw2023.py:12 #: pycontw2016/settings/testing/pycontw2024.py:12 #: pycontw2016/settings/testing/pycontw2025.py:12 +#: pycontw2016/settings/testing/pycontw2026.py:12 msgid "Prefer 15min" msgstr "偏好 15 分鐘" -#: pycontw2016/settings/base.py:329 +#: pycontw2016/settings/base.py:330 #: pycontw2016/settings/production/pycontw2021.py:18 #: pycontw2016/settings/production/pycontw2022.py:18 #: pycontw2016/settings/production/pycontw2023.py:18 #: pycontw2016/settings/production/pycontw2024.py:18 #: pycontw2016/settings/production/pycontw2025.py:18 +#: pycontw2016/settings/production/pycontw2026.py:27 #: pycontw2016/settings/testing/pycontw2021.py:13 #: pycontw2016/settings/testing/pycontw2022.py:13 #: pycontw2016/settings/testing/pycontw2023.py:13 #: pycontw2016/settings/testing/pycontw2024.py:13 #: pycontw2016/settings/testing/pycontw2025.py:13 +#: pycontw2016/settings/testing/pycontw2026.py:13 msgid "Prefer 30min" msgstr "偏好 30 分鐘" -#: pycontw2016/settings/base.py:333 +#: pycontw2016/settings/base.py:334 #: pycontw2016/settings/production/pycontw2016.py:22 #: templates/pycontw-2016/events/schedule.html:42 msgid "Day 1" msgstr "第 1 天" -#: pycontw2016/settings/base.py:334 +#: pycontw2016/settings/base.py:335 #: pycontw2016/settings/production/pycontw2016.py:23 #: templates/pycontw-2016/events/schedule.html:45 msgid "Day 2" @@ -1282,11 +1297,13 @@ msgstr "偏好 25 分鐘" #: pycontw2016/settings/production/pycontw2023.py:19 #: pycontw2016/settings/production/pycontw2024.py:19 #: pycontw2016/settings/production/pycontw2025.py:19 +#: pycontw2016/settings/production/pycontw2026.py:28 #: pycontw2016/settings/testing/pycontw2021.py:14 #: pycontw2016/settings/testing/pycontw2022.py:14 #: pycontw2016/settings/testing/pycontw2023.py:14 #: pycontw2016/settings/testing/pycontw2024.py:14 #: pycontw2016/settings/testing/pycontw2025.py:14 +#: pycontw2016/settings/testing/pycontw2026.py:14 msgid "Prefer 45min" msgstr "偏好 45 分鐘" @@ -1621,6 +1638,8 @@ msgstr "修改" #: templates/pycontw-2024/events/tutorial_detail.html:54 #: templates/pycontw-2025/events/talk_detail.html:68 #: templates/pycontw-2025/events/tutorial_detail.html:54 +#: templates/pycontw-2026/events/talk_detail.html:68 +#: templates/pycontw-2026/events/tutorial_detail.html:54 msgid "Abstract" msgstr "摘要" @@ -1952,7 +1971,7 @@ msgid "Stage" msgstr "階段" #: templates/default/reviews/_includes/previous_review_table.html:7 -#: users/models.py:222 +#: users/models.py:230 msgid "Reviewer ID" msgstr "審稿人代號" @@ -2252,6 +2271,8 @@ msgstr "您的大名" #: templates/pycontw-2024/contents/_default/conference/keynotes.html:57 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:44 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:57 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:44 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:57 msgid "Biography" msgstr "自我介紹" @@ -2271,7 +2292,7 @@ msgstr "GitHub 帳號" #: templates/pycontw-2019/404.html:12 templates/pycontw-2020/404.html:12 #: templates/pycontw-2021/404.html:12 templates/pycontw-2022/404.html:12 #: templates/pycontw-2023/404.html:12 templates/pycontw-2024/404.html:12 -#: templates/pycontw-2025/404.html:12 +#: templates/pycontw-2025/404.html:12 templates/pycontw-2026/404.html:12 msgid "Page Not Found" msgstr "頁面不存在" @@ -2279,7 +2300,7 @@ msgstr "頁面不存在" #: templates/pycontw-2019/404.html:29 templates/pycontw-2020/404.html:29 #: templates/pycontw-2021/404.html:29 templates/pycontw-2022/404.html:29 #: templates/pycontw-2023/404.html:29 templates/pycontw-2024/404.html:29 -#: templates/pycontw-2025/404.html:29 +#: templates/pycontw-2025/404.html:29 templates/pycontw-2026/404.html:29 msgid "Ooops! It’s a 404 problem." msgstr "糟惹!這是個 404 錯誤。" @@ -2287,7 +2308,7 @@ msgstr "糟惹!這是個 404 錯誤。" #: templates/pycontw-2019/404.html:30 templates/pycontw-2020/404.html:30 #: templates/pycontw-2021/404.html:30 templates/pycontw-2022/404.html:30 #: templates/pycontw-2023/404.html:30 templates/pycontw-2024/404.html:30 -#: templates/pycontw-2025/404.html:30 +#: templates/pycontw-2025/404.html:30 templates/pycontw-2026/404.html:30 msgid "We cannot find what you’re looking for." msgstr "我們找不到你想去的頁面。" @@ -2295,7 +2316,7 @@ msgstr "我們找不到你想去的頁面。" #: templates/pycontw-2019/500.html:12 templates/pycontw-2020/500.html:12 #: templates/pycontw-2021/500.html:12 templates/pycontw-2022/500.html:12 #: templates/pycontw-2023/500.html:12 templates/pycontw-2024/500.html:12 -#: templates/pycontw-2025/500.html:12 +#: templates/pycontw-2025/500.html:12 templates/pycontw-2026/500.html:12 msgid "Server Error" msgstr "伺服器錯誤" @@ -2303,7 +2324,7 @@ msgstr "伺服器錯誤" #: templates/pycontw-2019/500.html:29 templates/pycontw-2020/500.html:29 #: templates/pycontw-2021/500.html:29 templates/pycontw-2022/500.html:29 #: templates/pycontw-2023/500.html:29 templates/pycontw-2024/500.html:29 -#: templates/pycontw-2025/500.html:29 +#: templates/pycontw-2025/500.html:29 templates/pycontw-2026/500.html:29 msgid "Ooops! It’s a 500 problem." msgstr "糟惹!這是個 500 錯誤。" @@ -2311,7 +2332,7 @@ msgstr "糟惹!這是個 500 錯誤。" #: templates/pycontw-2019/500.html:30 templates/pycontw-2020/500.html:30 #: templates/pycontw-2021/500.html:30 templates/pycontw-2022/500.html:30 #: templates/pycontw-2023/500.html:30 templates/pycontw-2024/500.html:30 -#: templates/pycontw-2025/500.html:30 +#: templates/pycontw-2025/500.html:30 templates/pycontw-2026/500.html:30 msgid "We screwed up. It’s not your fault." msgstr "我們搞砸了,這不是你的問題。" @@ -2324,6 +2345,7 @@ msgstr "我們搞砸了,這不是你的問題。" #: templates/pycontw-2023/_includes/menu.html:39 #: templates/pycontw-2024/_includes/menu.html:39 #: templates/pycontw-2025/_includes/menu.html:39 +#: templates/pycontw-2026/_includes/menu.html:39 msgid "About" msgstr "關於" @@ -2336,6 +2358,7 @@ msgstr "關於" #: templates/pycontw-2023/_includes/footer.html:13 #: templates/pycontw-2024/_includes/footer.html:13 #: templates/pycontw-2025/_includes/footer.html:13 +#: templates/pycontw-2026/_includes/footer.html:13 msgid "Code of Conduct" msgstr "行為準則" @@ -2366,6 +2389,9 @@ msgstr "行為準則" #: templates/pycontw-2025/_includes/footer.html:14 #: templates/pycontw-2025/contents/_staff.html:5 #: templates/pycontw-2025/contents/_staff.html:10 +#: templates/pycontw-2026/_includes/footer.html:14 +#: templates/pycontw-2026/contents/_staff.html:5 +#: templates/pycontw-2026/contents/_staff.html:10 msgid "Staff" msgstr "工作人員" @@ -2379,6 +2405,7 @@ msgstr "工作人員" #: templates/pycontw-2023/contents/_default/conference/keynotes.html:17 #: templates/pycontw-2024/contents/_default/conference/keynotes.html:17 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:17 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:17 msgid "Events" msgstr "活動" @@ -2457,6 +2484,11 @@ msgstr "時間表" #: templates/pycontw-2025/contents/_default/conference/keynotes.html:24 #: templates/pycontw-2025/contents/en/events/overview.html:28 #: templates/pycontw-2025/contents/zh/events/overview.html:24 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:6 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:18 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:24 +#: templates/pycontw-2026/contents/en/events/overview.html:28 +#: templates/pycontw-2026/contents/zh/events/overview.html:24 msgid "Keynotes" msgstr "基調演講" @@ -2500,6 +2532,10 @@ msgstr "基調演講" #: templates/pycontw-2025/contents/zh/events/overview.html:32 #: templates/pycontw-2025/events/talk_list.html:6 #: templates/pycontw-2025/events/talk_list.html:13 +#: templates/pycontw-2026/contents/en/events/overview.html:39 +#: templates/pycontw-2026/contents/zh/events/overview.html:32 +#: templates/pycontw-2026/events/talk_list.html:6 +#: templates/pycontw-2026/events/talk_list.html:13 msgid "Talks" msgstr "一般演講" @@ -2520,6 +2556,8 @@ msgstr "一般演講" #: templates/pycontw-2024/contents/zh/events/overview.html:84 #: templates/pycontw-2025/contents/en/events/overview.html:107 #: templates/pycontw-2025/contents/zh/events/overview.html:84 +#: templates/pycontw-2026/contents/en/events/overview.html:107 +#: templates/pycontw-2026/contents/zh/events/overview.html:84 msgid "Sprints" msgstr "衝刺開發" @@ -2584,6 +2622,7 @@ msgstr "財務補助" #: templates/pycontw-2023/_includes/social.html:4 #: templates/pycontw-2024/_includes/social.html:4 #: templates/pycontw-2025/_includes/social.html:4 +#: templates/pycontw-2026/_includes/social.html:4 msgid "Blog" msgstr "部落格" @@ -2654,6 +2693,8 @@ msgstr "投影片連結" #: templates/pycontw-2024/events/tutorial_detail.html:61 #: templates/pycontw-2025/events/talk_detail.html:75 #: templates/pycontw-2025/events/tutorial_detail.html:61 +#: templates/pycontw-2026/events/talk_detail.html:75 +#: templates/pycontw-2026/events/tutorial_detail.html:61 msgid "Description" msgstr "說明" @@ -2738,6 +2779,10 @@ msgstr "" #: templates/pycontw-2025/contents/zh/events/overview.html:39 #: templates/pycontw-2025/events/tutorial_list.html:6 #: templates/pycontw-2025/events/tutorial_list.html:11 +#: templates/pycontw-2026/contents/en/events/overview.html:50 +#: templates/pycontw-2026/contents/zh/events/overview.html:39 +#: templates/pycontw-2026/events/tutorial_list.html:6 +#: templates/pycontw-2026/events/tutorial_list.html:11 msgid "Tutorials" msgstr "專業課程" @@ -2963,6 +3008,8 @@ msgstr "控制面板" #: templates/pycontw-2024/contents/_default/portal.html:12 #: templates/pycontw-2025/contents/_default/portal.html:6 #: templates/pycontw-2025/contents/_default/portal.html:12 +#: templates/pycontw-2026/contents/_default/portal.html:6 +#: templates/pycontw-2026/contents/_default/portal.html:12 msgid "Portal" msgstr "傳送門" @@ -2975,6 +3022,7 @@ msgstr "傳送門" #: templates/pycontw-2023/_includes/portal.html:4 #: templates/pycontw-2024/_includes/portal.html:4 #: templates/pycontw-2025/_includes/portal.html:4 +#: templates/pycontw-2026/_includes/portal.html:4 msgid "Collaborative Notes" msgstr "共筆" @@ -2998,6 +3046,7 @@ msgstr "猜謎排行榜" #: templates/pycontw-2023/_includes/portal.html:12 #: templates/pycontw-2024/_includes/portal.html:12 #: templates/pycontw-2025/_includes/portal.html:12 +#: templates/pycontw-2026/_includes/portal.html:12 msgid "Facebook Fan Page" msgstr "Facebook 粉絲頁" @@ -3062,6 +3111,9 @@ msgstr "輸出新時間表" #: templates/pycontw-2025/events/talk_detail.html:33 #: templates/pycontw-2025/events/talk_detail.html:43 #: templates/pycontw-2025/events/tutorial_detail.html:30 +#: templates/pycontw-2026/events/talk_detail.html:33 +#: templates/pycontw-2026/events/talk_detail.html:43 +#: templates/pycontw-2026/events/tutorial_detail.html:30 #, python-format msgid "%(date_display)s, %(begin_time_display)s‑%(end_time_display)s" msgstr "%(date_display)s,%(begin_time_display)s‑%(end_time_display)s" @@ -3112,6 +3164,7 @@ msgstr "議程可能隨時更改。請頻繁確認本頁資訊,以獲 #: templates/pycontw-2023/events/talk_list.html:57 #: templates/pycontw-2024/events/talk_list.html:57 #: templates/pycontw-2025/events/talk_list.html:57 +#: templates/pycontw-2026/events/talk_list.html:57 msgid "Invited Events" msgstr "特邀活動" @@ -3228,6 +3281,8 @@ msgstr "學習" #: templates/pycontw-2024/contents/zh/events/overview.html:55 #: templates/pycontw-2025/contents/en/events/overview.html:68 #: templates/pycontw-2025/contents/zh/events/overview.html:55 +#: templates/pycontw-2026/contents/en/events/overview.html:68 +#: templates/pycontw-2026/contents/zh/events/overview.html:55 msgid "Open Spaces" msgstr "開放空間" @@ -3256,6 +3311,7 @@ msgstr "報到" #: templates/pycontw-2023/_includes/menu.html:143 #: templates/pycontw-2024/_includes/menu.html:143 #: templates/pycontw-2025/_includes/menu.html:143 +#: templates/pycontw-2026/_includes/menu.html:143 msgid "My PyCon" msgstr "My PyCon" @@ -3374,6 +3430,7 @@ msgstr "中文投影片" #: templates/pycontw-2023/events/tutorial_detail.html:25 #: templates/pycontw-2024/events/tutorial_detail.html:25 #: templates/pycontw-2025/events/tutorial_detail.html:25 +#: templates/pycontw-2026/events/tutorial_detail.html:25 msgid "Location: " msgstr "地點:" @@ -3385,6 +3442,7 @@ msgstr "地點:" #: templates/pycontw-2023/events/tutorial_detail.html:29 #: templates/pycontw-2024/events/tutorial_detail.html:29 #: templates/pycontw-2025/events/tutorial_detail.html:29 +#: templates/pycontw-2026/events/tutorial_detail.html:29 msgid "Slot: " msgstr "時段:" @@ -3403,6 +3461,8 @@ msgstr "時段:" #: templates/pycontw-2024/events/tutorial_detail.html:34 #: templates/pycontw-2025/events/talk_detail.html:47 #: templates/pycontw-2025/events/tutorial_detail.html:34 +#: templates/pycontw-2026/events/talk_detail.html:47 +#: templates/pycontw-2026/events/tutorial_detail.html:34 msgid "Category: " msgstr "主題分類:" @@ -3421,6 +3481,8 @@ msgstr "主題分類:" #: templates/pycontw-2024/events/tutorial_detail.html:38 #: templates/pycontw-2025/events/talk_detail.html:51 #: templates/pycontw-2025/events/tutorial_detail.html:38 +#: templates/pycontw-2026/events/talk_detail.html:51 +#: templates/pycontw-2026/events/tutorial_detail.html:38 msgid "Language: " msgstr "語言:" @@ -3439,6 +3501,8 @@ msgstr "語言:" #: templates/pycontw-2024/events/tutorial_detail.html:42 #: templates/pycontw-2025/events/talk_detail.html:55 #: templates/pycontw-2025/events/tutorial_detail.html:42 +#: templates/pycontw-2026/events/talk_detail.html:55 +#: templates/pycontw-2026/events/tutorial_detail.html:42 msgid "Python Level: " msgstr "Python 難易度:" @@ -3457,6 +3521,8 @@ msgstr "Python 難易度:" #: templates/pycontw-2024/events/tutorial_detail.html:48 #: templates/pycontw-2025/events/talk_detail.html:61 #: templates/pycontw-2025/events/tutorial_detail.html:48 +#: templates/pycontw-2026/events/talk_detail.html:61 +#: templates/pycontw-2026/events/tutorial_detail.html:48 msgid "No Recording" msgstr "不錄影" @@ -3476,6 +3542,8 @@ msgstr "不錄影" #: templates/pycontw-2024/events/tutorial_detail.html:68 #: templates/pycontw-2025/events/talk_detail.html:82 #: templates/pycontw-2025/events/tutorial_detail.html:68 +#: templates/pycontw-2026/events/talk_detail.html:82 +#: templates/pycontw-2026/events/tutorial_detail.html:68 msgid "Slides" msgstr "投影片" @@ -3487,6 +3555,7 @@ msgstr "投影片" #: templates/pycontw-2023/events/talk_detail.html:91 #: templates/pycontw-2024/events/talk_detail.html:91 #: templates/pycontw-2025/events/talk_detail.html:91 +#: templates/pycontw-2026/events/talk_detail.html:91 msgctxt "speaker info in talk detail" msgid "Speakers" msgstr "講者" @@ -3499,6 +3568,7 @@ msgstr "講者" #: templates/pycontw-2023/events/talk_detail.html:93 #: templates/pycontw-2024/events/talk_detail.html:93 #: templates/pycontw-2025/events/talk_detail.html:93 +#: templates/pycontw-2026/events/talk_detail.html:93 msgctxt "speaker info in talk detail" msgid "Speaker" msgstr "講者" @@ -3533,6 +3603,8 @@ msgstr "" #: templates/pycontw-2024/events/tutorial_list.html:16 #: templates/pycontw-2025/events/talk_list.html:18 #: templates/pycontw-2025/events/tutorial_list.html:16 +#: templates/pycontw-2026/events/talk_list.html:18 +#: templates/pycontw-2026/events/tutorial_list.html:16 msgid "" "Program schedule is subject to change. Please check this page " "frequently to get the latest version." @@ -3552,6 +3624,7 @@ msgstr "" #: templates/pycontw-2020/index.html:60 templates/pycontw-2021/index.html:63 #: templates/pycontw-2022/index.html:63 templates/pycontw-2023/index.html:63 #: templates/pycontw-2024/index.html:63 templates/pycontw-2025/index.html:63 +#: templates/pycontw-2026/index.html:63 msgid "What is PyCon" msgstr "何謂 PyCon" @@ -3559,6 +3632,7 @@ msgstr "何謂 PyCon" #: templates/pycontw-2020/index.html:61 templates/pycontw-2021/index.html:64 #: templates/pycontw-2022/index.html:64 templates/pycontw-2023/index.html:64 #: templates/pycontw-2024/index.html:64 templates/pycontw-2025/index.html:64 +#: templates/pycontw-2026/index.html:64 msgid "" "

The original PyCon was formed in North America in 2003, and now there are " "many other conferences being run in the PyCon spirit around the world.

" @@ -3570,6 +3644,7 @@ msgstr "" #: templates/pycontw-2020/index.html:68 templates/pycontw-2021/index.html:71 #: templates/pycontw-2022/index.html:71 templates/pycontw-2023/index.html:71 #: templates/pycontw-2024/index.html:71 templates/pycontw-2025/index.html:71 +#: templates/pycontw-2026/index.html:71 msgid "What is PyCon Taiwan" msgstr "何謂 PyCon Taiwan" @@ -3577,6 +3652,7 @@ msgstr "何謂 PyCon Taiwan" #: templates/pycontw-2020/index.html:69 templates/pycontw-2021/index.html:72 #: templates/pycontw-2022/index.html:72 templates/pycontw-2023/index.html:72 #: templates/pycontw-2024/index.html:72 templates/pycontw-2025/index.html:72 +#: templates/pycontw-2026/index.html:72 msgid "" "

PyCon Taiwan is an annual convention in Taiwan for the discussion and " "promotion of the Python programming language. It is held by enthusiasts and " @@ -3597,6 +3673,7 @@ msgstr "

協助我們舉辦,讓年會變得更好!

" #: templates/pycontw-2020/index.html:47 templates/pycontw-2021/index.html:51 #: templates/pycontw-2022/index.html:51 templates/pycontw-2023/index.html:51 #: templates/pycontw-2024/index.html:51 templates/pycontw-2025/index.html:51 +#: templates/pycontw-2026/index.html:51 msgid "Become a volunteer" msgstr "成為志工" @@ -3631,6 +3708,7 @@ msgstr "機動" #: templates/pycontw-2023/contents/_default/conference/keynotes.html:16 #: templates/pycontw-2024/contents/_default/conference/keynotes.html:16 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:16 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:16 msgid "Home" msgstr "首頁" @@ -3648,6 +3726,8 @@ msgstr "首頁" #: templates/pycontw-2024/contents/_default/conference/keynotes.html:69 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:47 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:69 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:47 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:69 msgid "Speech" msgstr "演講" @@ -3658,6 +3738,7 @@ msgstr "演講" #: templates/pycontw-2023/contents/_default/conference/keynotes.html:51 #: templates/pycontw-2024/contents/_default/conference/keynotes.html:51 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:51 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:51 msgid "Slido" msgstr "Slido" @@ -3672,6 +3753,7 @@ msgstr "基調演講:" #: templates/pycontw-2023/events/tutorial_detail.html:13 #: templates/pycontw-2024/events/tutorial_detail.html:13 #: templates/pycontw-2025/events/tutorial_detail.html:13 +#: templates/pycontw-2026/events/tutorial_detail.html:13 msgid "Tutorial: " msgstr "專業課程:" @@ -3682,6 +3764,7 @@ msgstr "專業課程:" #: templates/pycontw-2023/events/tutorial_detail.html:77 #: templates/pycontw-2024/events/tutorial_detail.html:77 #: templates/pycontw-2025/events/tutorial_detail.html:77 +#: templates/pycontw-2026/events/tutorial_detail.html:77 msgctxt "speaker info in tutorial detail" msgid "Lecturers" msgstr "講師" @@ -3693,6 +3776,7 @@ msgstr "講師" #: templates/pycontw-2023/events/tutorial_detail.html:79 #: templates/pycontw-2024/events/tutorial_detail.html:79 #: templates/pycontw-2025/events/tutorial_detail.html:79 +#: templates/pycontw-2026/events/tutorial_detail.html:79 msgctxt "speaker info in tutorial detail" msgid "Lecturer" msgstr "講師" @@ -3714,6 +3798,7 @@ msgstr "" #: templates/pycontw-2023/events/tutorial_list.html:29 #: templates/pycontw-2024/events/tutorial_list.html:29 #: templates/pycontw-2025/events/tutorial_list.html:29 +#: templates/pycontw-2026/events/tutorial_list.html:29 msgid "Show Details" msgstr "顯示詳細內容" @@ -3724,6 +3809,7 @@ msgstr "顯示詳細內容" #: templates/pycontw-2023/events/tutorial_list.html:33 #: templates/pycontw-2024/events/tutorial_list.html:33 #: templates/pycontw-2025/events/tutorial_list.html:33 +#: templates/pycontw-2026/events/tutorial_list.html:33 msgid "Register" msgstr "報名" @@ -3733,6 +3819,7 @@ msgstr "報名" #: templates/pycontw-2023/_includes/ext/discord.html:6 #: templates/pycontw-2024/_includes/ext/discord.html:6 #: templates/pycontw-2025/_includes/ext/discord.html:6 +#: templates/pycontw-2026/_includes/ext/discord.html:6 msgid "discord-tutorials" msgstr "使用流程" @@ -3742,6 +3829,7 @@ msgstr "使用流程" #: templates/pycontw-2023/_includes/ext/discord.html:7 #: templates/pycontw-2024/_includes/ext/discord.html:7 #: templates/pycontw-2025/_includes/ext/discord.html:7 +#: templates/pycontw-2026/_includes/ext/discord.html:7 msgid "" "If you have not installed Discord or joined Python Taiwan Discord server, " "follow Setting up Discord and setup your " @@ -3756,6 +3844,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:10 #: templates/pycontw-2024/_includes/ext/discord.html:10 #: templates/pycontw-2025/_includes/ext/discord.html:10 +#: templates/pycontw-2026/_includes/ext/discord.html:10 msgid "1. Register yourself" msgstr "1. 註冊" @@ -3774,6 +3863,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:13 #: templates/pycontw-2024/_includes/ext/discord.html:13 #: templates/pycontw-2025/_includes/ext/discord.html:13 +#: templates/pycontw-2026/_includes/ext/discord.html:13 msgid "Enter" msgstr "輸入" @@ -3783,6 +3873,7 @@ msgstr "輸入" #: templates/pycontw-2023/_includes/ext/discord.html:13 #: templates/pycontw-2024/_includes/ext/discord.html:13 #: templates/pycontw-2025/_includes/ext/discord.html:13 +#: templates/pycontw-2026/_includes/ext/discord.html:13 msgid "in this channel to register" msgstr "以進行註冊" @@ -3792,6 +3883,7 @@ msgstr "以進行註冊" #: templates/pycontw-2023/_includes/ext/discord.html:15 #: templates/pycontw-2024/_includes/ext/discord.html:15 #: templates/pycontw-2025/_includes/ext/discord.html:15 +#: templates/pycontw-2026/_includes/ext/discord.html:15 msgid "Enter !register [TOKEN] in this channel to register" msgstr "輸入 !register [TOKEN] 以進行註冊" @@ -3801,6 +3893,7 @@ msgstr "輸入 !register [TOKEN] 以進行註冊" #: templates/pycontw-2023/_includes/ext/discord.html:16 #: templates/pycontw-2024/_includes/ext/discord.html:16 #: templates/pycontw-2025/_includes/ext/discord.html:16 +#: templates/pycontw-2026/_includes/ext/discord.html:16 msgid "" "(If you want to get your own Token, please click the link in the letter or " "use Opass.)" @@ -3812,6 +3905,7 @@ msgstr "(如要取得您的專屬 Token 請點擊行前信中的連結或使用O #: templates/pycontw-2023/_includes/ext/discord.html:18 #: templates/pycontw-2024/_includes/ext/discord.html:18 #: templates/pycontw-2025/_includes/ext/discord.html:18 +#: templates/pycontw-2026/_includes/ext/discord.html:18 msgid "Enter !help if you need command help from RegBot." msgstr "輸入 !help 以獲得 RegBot 的幫助" @@ -3821,6 +3915,7 @@ msgstr "輸入 !help 以獲得 RegBot 的幫助" #: templates/pycontw-2023/_includes/ext/discord.html:19 #: templates/pycontw-2024/_includes/ext/discord.html:19 #: templates/pycontw-2025/_includes/ext/discord.html:19 +#: templates/pycontw-2026/_includes/ext/discord.html:19 msgid "" "If you register successfully, you can see several new channels appear in the " "left." @@ -3840,6 +3935,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:24 #: templates/pycontw-2024/_includes/ext/discord.html:24 #: templates/pycontw-2025/_includes/ext/discord.html:24 +#: templates/pycontw-2026/_includes/ext/discord.html:24 msgid "2. Take a look at official announcements" msgstr "2. 查看大會公告" @@ -3849,6 +3945,7 @@ msgstr "2. 查看大會公告" #: templates/pycontw-2023/_includes/ext/discord.html:25 #: templates/pycontw-2024/_includes/ext/discord.html:25 #: templates/pycontw-2025/_includes/ext/discord.html:25 +#: templates/pycontw-2026/_includes/ext/discord.html:25 msgid "" "All official announcements channel names contain the word " "'announcements'." @@ -3860,6 +3957,7 @@ msgstr "大會公告頻道的頻道名稱都會有 'announcements''track'." msgstr "議程討論頻道的頻道名稱都會有 'track' 單字。" @@ -3887,6 +3987,7 @@ msgstr "議程討論頻道的頻道名稱都會有 'track' 單 #: templates/pycontw-2023/_includes/ext/discord.html:32 #: templates/pycontw-2024/_includes/ext/discord.html:32 #: templates/pycontw-2025/_includes/ext/discord.html:32 +#: templates/pycontw-2026/_includes/ext/discord.html:32 msgid "" "You can enter keynote channel when it is time for keynote, or track channel " "according to which track you are in." @@ -3900,6 +4001,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:36 #: templates/pycontw-2024/_includes/ext/discord.html:36 #: templates/pycontw-2025/_includes/ext/discord.html:36 +#: templates/pycontw-2026/_includes/ext/discord.html:36 msgid "Roles list" msgstr "身份組清單" @@ -3909,6 +4011,7 @@ msgstr "身份組清單" #: templates/pycontw-2023/_includes/ext/discord.html:37 #: templates/pycontw-2024/_includes/ext/discord.html:37 #: templates/pycontw-2025/_includes/ext/discord.html:37 +#: templates/pycontw-2026/_includes/ext/discord.html:37 msgid "" "Users can be assigned several different roles, each role would have their " "own permission to enter some private channel." @@ -3960,6 +4063,7 @@ msgstr "對象:PyCon TW 2020 的所有會眾" #: templates/pycontw-2023/_includes/ext/discord.html:60 #: templates/pycontw-2024/_includes/ext/discord.html:60 #: templates/pycontw-2025/_includes/ext/discord.html:60 +#: templates/pycontw-2026/_includes/ext/discord.html:60 msgid "Channels list" msgstr "頻道清單" @@ -3969,6 +4073,7 @@ msgstr "頻道清單" #: templates/pycontw-2023/_includes/ext/discord.html:61 #: templates/pycontw-2024/_includes/ext/discord.html:61 #: templates/pycontw-2025/_includes/ext/discord.html:61 +#: templates/pycontw-2026/_includes/ext/discord.html:61 msgid "" "There are two type of channels in Discord, which is Text Channel and Voice " "Channel. Below we use:" @@ -3980,6 +4085,7 @@ msgstr "Discord 有兩種頻道:文字頻道與語音頻道。下面會以兩 #: templates/pycontw-2023/_includes/ext/discord.html:62 #: templates/pycontw-2024/_includes/ext/discord.html:62 #: templates/pycontw-2025/_includes/ext/discord.html:62 +#: templates/pycontw-2026/_includes/ext/discord.html:62 msgid "#CHANNEL_NAME to represent a text channel" msgstr "#CHANNEL_NAME 代表文字頻道" @@ -3989,6 +4095,7 @@ msgstr "#CHANNEL_NAME 代表文字頻道" #: templates/pycontw-2023/_includes/ext/discord.html:63 #: templates/pycontw-2024/_includes/ext/discord.html:63 #: templates/pycontw-2025/_includes/ext/discord.html:63 +#: templates/pycontw-2026/_includes/ext/discord.html:63 msgid "🔊CHANNEL_NAME to represent a voice channel." msgstr "🔊CHANNEL_NAME 代表語音頻道" @@ -3998,6 +4105,7 @@ msgstr "🔊CHANNEL_NAME 代表語音頻道" #: templates/pycontw-2023/_includes/ext/discord.html:65 #: templates/pycontw-2024/_includes/ext/discord.html:65 #: templates/pycontw-2025/_includes/ext/discord.html:65 +#: templates/pycontw-2026/_includes/ext/discord.html:65 msgid "Registration channel" msgstr "註冊用頻道" @@ -4007,6 +4115,7 @@ msgstr "註冊用頻道" #: templates/pycontw-2023/_includes/ext/discord.html:66 #: templates/pycontw-2024/_includes/ext/discord.html:66 #: templates/pycontw-2025/_includes/ext/discord.html:66 +#: templates/pycontw-2026/_includes/ext/discord.html:66 msgid "#registration-desk" msgstr "#registration-desk" @@ -4016,6 +4125,7 @@ msgstr "#registration-desk" #: templates/pycontw-2023/_includes/ext/discord.html:67 #: templates/pycontw-2024/_includes/ext/discord.html:67 #: templates/pycontw-2025/_includes/ext/discord.html:67 +#: templates/pycontw-2026/_includes/ext/discord.html:67 msgid "Roles:@everyone" msgstr "身分組:@everyone" @@ -4025,6 +4135,7 @@ msgstr "身分組:@everyone" #: templates/pycontw-2023/_includes/ext/discord.html:68 #: templates/pycontw-2024/_includes/ext/discord.html:68 #: templates/pycontw-2025/_includes/ext/discord.html:68 +#: templates/pycontw-2026/_includes/ext/discord.html:68 msgid "" "When you just enter Python Taiwan Discord server, use this channel to " "provide your registration information, so that robot can promote you to the " @@ -4039,6 +4150,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:71 #: templates/pycontw-2024/_includes/ext/discord.html:71 #: templates/pycontw-2025/_includes/ext/discord.html:71 +#: templates/pycontw-2026/_includes/ext/discord.html:71 msgid "Session channel" msgstr "議程相關頻道" @@ -4048,6 +4160,7 @@ msgstr "議程相關頻道" #: templates/pycontw-2023/_includes/ext/discord.html:72 #: templates/pycontw-2024/_includes/ext/discord.html:72 #: templates/pycontw-2025/_includes/ext/discord.html:72 +#: templates/pycontw-2026/_includes/ext/discord.html:72 msgid "#keynote-track" msgstr "#keynote-track" @@ -4070,6 +4183,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:74 #: templates/pycontw-2024/_includes/ext/discord.html:74 #: templates/pycontw-2025/_includes/ext/discord.html:74 +#: templates/pycontw-2026/_includes/ext/discord.html:74 msgid "Keynote discussion channel" msgstr "Keynote 的討論頻道。" @@ -4079,6 +4193,7 @@ msgstr "Keynote 的討論頻道。" #: templates/pycontw-2023/_includes/ext/discord.html:75 #: templates/pycontw-2024/_includes/ext/discord.html:75 #: templates/pycontw-2025/_includes/ext/discord.html:75 +#: templates/pycontw-2026/_includes/ext/discord.html:75 msgid "#r1-track" msgstr "#r1-track" @@ -4088,6 +4203,7 @@ msgstr "#r1-track" #: templates/pycontw-2023/_includes/ext/discord.html:77 #: templates/pycontw-2024/_includes/ext/discord.html:77 #: templates/pycontw-2025/_includes/ext/discord.html:77 +#: templates/pycontw-2026/_includes/ext/discord.html:77 msgid "R1 track discussion channel" msgstr "R1 軌所有議程的會眾討論頻道。" @@ -4097,6 +4213,7 @@ msgstr "R1 軌所有議程的會眾討論頻道。" #: templates/pycontw-2023/_includes/ext/discord.html:78 #: templates/pycontw-2024/_includes/ext/discord.html:78 #: templates/pycontw-2025/_includes/ext/discord.html:78 +#: templates/pycontw-2026/_includes/ext/discord.html:78 msgid "#r2-track" msgstr "#r2-track" @@ -4106,6 +4223,7 @@ msgstr "#r2-track" #: templates/pycontw-2023/_includes/ext/discord.html:80 #: templates/pycontw-2024/_includes/ext/discord.html:80 #: templates/pycontw-2025/_includes/ext/discord.html:80 +#: templates/pycontw-2026/_includes/ext/discord.html:80 msgid "R2 track discussion channel" msgstr "R2 軌所有議程的會眾討論頻道。" @@ -4115,6 +4233,7 @@ msgstr "R2 軌所有議程的會眾討論頻道。" #: templates/pycontw-2023/_includes/ext/discord.html:81 #: templates/pycontw-2024/_includes/ext/discord.html:81 #: templates/pycontw-2025/_includes/ext/discord.html:81 +#: templates/pycontw-2026/_includes/ext/discord.html:81 msgid "#r3-track" msgstr "#r3-track" @@ -4124,6 +4243,7 @@ msgstr "#r3-track" #: templates/pycontw-2023/_includes/ext/discord.html:83 #: templates/pycontw-2024/_includes/ext/discord.html:83 #: templates/pycontw-2025/_includes/ext/discord.html:83 +#: templates/pycontw-2026/_includes/ext/discord.html:83 msgid "R3 track (remote track) discussion channel" msgstr "R3 軌(遠端議程)所有議程的會眾討論頻道。" @@ -4133,6 +4253,7 @@ msgstr "R3 軌(遠端議程)所有議程的會眾討論頻道。" #: templates/pycontw-2023/_includes/ext/discord.html:86 #: templates/pycontw-2024/_includes/ext/discord.html:86 #: templates/pycontw-2025/_includes/ext/discord.html:86 +#: templates/pycontw-2026/_includes/ext/discord.html:86 msgid "Announcements channel" msgstr "公告頻道" @@ -4142,6 +4263,7 @@ msgstr "公告頻道" #: templates/pycontw-2023/_includes/ext/discord.html:87 #: templates/pycontw-2024/_includes/ext/discord.html:87 #: templates/pycontw-2025/_includes/ext/discord.html:87 +#: templates/pycontw-2026/_includes/ext/discord.html:87 msgid "#announcements" msgstr "#announcements" @@ -4151,6 +4273,7 @@ msgstr "#announcements" #: templates/pycontw-2023/_includes/ext/discord.html:89 #: templates/pycontw-2024/_includes/ext/discord.html:89 #: templates/pycontw-2025/_includes/ext/discord.html:89 +#: templates/pycontw-2026/_includes/ext/discord.html:89 msgid "" "Official announcement channel, any official announcements will be posted " "here." @@ -4162,6 +4285,7 @@ msgstr "大會公告頻道,若大會有全面性的公告事項都會發在此 #: templates/pycontw-2023/_includes/ext/discord.html:90 #: templates/pycontw-2024/_includes/ext/discord.html:90 #: templates/pycontw-2025/_includes/ext/discord.html:90 +#: templates/pycontw-2026/_includes/ext/discord.html:90 msgid "#speakers-announcements" msgstr "#speakers-announcements" @@ -4176,6 +4300,7 @@ msgstr "身份組:2020-staff, 2020-speaker" #: templates/pycontw-2023/_includes/ext/discord.html:92 #: templates/pycontw-2024/_includes/ext/discord.html:92 #: templates/pycontw-2025/_includes/ext/discord.html:92 +#: templates/pycontw-2026/_includes/ext/discord.html:92 msgid "" "A special announcement channel for speakers, speaker can also have " "discussion with each other in this channel." @@ -4187,6 +4312,7 @@ msgstr "一個大會專門公告給講者的頻道,講者之間亦可在此頻 #: templates/pycontw-2023/_includes/ext/discord.html:93 #: templates/pycontw-2024/_includes/ext/discord.html:93 #: templates/pycontw-2025/_includes/ext/discord.html:93 +#: templates/pycontw-2026/_includes/ext/discord.html:93 msgid "#staff-announcements" msgstr "#staff-announcements" @@ -4200,6 +4326,7 @@ msgstr "身份組:2020-staff" #: templates/pycontw-2023/_includes/ext/discord.html:95 #: templates/pycontw-2024/_includes/ext/discord.html:95 #: templates/pycontw-2025/_includes/ext/discord.html:95 +#: templates/pycontw-2026/_includes/ext/discord.html:95 msgid "" "A special announcement channel for staff, staff can also contact to others " "in this channel." @@ -4211,6 +4338,7 @@ msgstr "一個大會專門公告給志工的頻道,志工之間亦可在此頻 #: templates/pycontw-2023/_includes/ext/discord.html:98 #: templates/pycontw-2024/_includes/ext/discord.html:98 #: templates/pycontw-2025/_includes/ext/discord.html:98 +#: templates/pycontw-2026/_includes/ext/discord.html:98 msgid "Information desk channel" msgstr "服務台頻道" @@ -4220,6 +4348,7 @@ msgstr "服務台頻道" #: templates/pycontw-2023/_includes/ext/discord.html:99 #: templates/pycontw-2024/_includes/ext/discord.html:99 #: templates/pycontw-2025/_includes/ext/discord.html:99 +#: templates/pycontw-2026/_includes/ext/discord.html:99 msgid "#information-desk" msgstr "#information-desk" @@ -4229,6 +4358,7 @@ msgstr "#information-desk" #: templates/pycontw-2023/_includes/ext/discord.html:101 #: templates/pycontw-2024/_includes/ext/discord.html:101 #: templates/pycontw-2025/_includes/ext/discord.html:101 +#: templates/pycontw-2026/_includes/ext/discord.html:101 msgid "" "Official online information desk, speakers or attendees can give questions " "or suggestions in this channel." @@ -4240,6 +4370,7 @@ msgstr "大會的服務台,會眾或講者有任何公開詢問的問題可以 #: templates/pycontw-2023/_includes/ext/discord.html:102 #: templates/pycontw-2024/_includes/ext/discord.html:102 #: templates/pycontw-2025/_includes/ext/discord.html:102 +#: templates/pycontw-2026/_includes/ext/discord.html:102 msgid "#speakers" msgstr "#speakers" @@ -4249,6 +4380,7 @@ msgstr "#speakers" #: templates/pycontw-2023/_includes/ext/discord.html:104 #: templates/pycontw-2024/_includes/ext/discord.html:104 #: templates/pycontw-2025/_includes/ext/discord.html:104 +#: templates/pycontw-2026/_includes/ext/discord.html:104 msgid "" "Speakers only information desk, speakers can give sessions or speakers " "related questions here for answers or further instruction." @@ -4260,6 +4392,7 @@ msgstr "講者專屬的服務台,有議程或講者相關的問題可以在此 #: templates/pycontw-2023/_includes/ext/discord.html:105 #: templates/pycontw-2024/_includes/ext/discord.html:105 #: templates/pycontw-2025/_includes/ext/discord.html:105 +#: templates/pycontw-2026/_includes/ext/discord.html:105 msgid "#session-chairs" msgstr "#session-chairs" @@ -4273,6 +4406,7 @@ msgstr "身份組:2020-session-chair" #: templates/pycontw-2023/_includes/ext/discord.html:107 #: templates/pycontw-2024/_includes/ext/discord.html:107 #: templates/pycontw-2025/_includes/ext/discord.html:107 +#: templates/pycontw-2026/_includes/ext/discord.html:107 msgid "" "A channel for session chairs and assistant chairs to give any related " "questions here for answers or further instruction." @@ -4284,6 +4418,7 @@ msgstr "主持人與助理主持人的討論頻道,有任何相關的問題可 #: templates/pycontw-2023/_includes/ext/discord.html:110 #: templates/pycontw-2024/_includes/ext/discord.html:110 #: templates/pycontw-2025/_includes/ext/discord.html:110 +#: templates/pycontw-2026/_includes/ext/discord.html:110 msgid "Special channel" msgstr "特殊頻道" @@ -4293,6 +4428,7 @@ msgstr "特殊頻道" #: templates/pycontw-2023/_includes/ext/discord.html:111 #: templates/pycontw-2024/_includes/ext/discord.html:111 #: templates/pycontw-2025/_includes/ext/discord.html:111 +#: templates/pycontw-2026/_includes/ext/discord.html:111 msgid "🔊remote-guide" msgstr "🔊remote-guide" @@ -4306,6 +4442,7 @@ msgstr "身份組: 2020-remote" #: templates/pycontw-2023/_includes/ext/discord.html:113 #: templates/pycontw-2024/_includes/ext/discord.html:113 #: templates/pycontw-2025/_includes/ext/discord.html:113 +#: templates/pycontw-2026/_includes/ext/discord.html:113 msgid "" "A special channel for remote partners to contact with each other during " "sessions, mainly for session chairs to give a cue to remote speakers." @@ -4319,6 +4456,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:116 #: templates/pycontw-2024/_includes/ext/discord.html:116 #: templates/pycontw-2025/_includes/ext/discord.html:116 +#: templates/pycontw-2026/_includes/ext/discord.html:116 msgid "Appendices" msgstr "附錄" @@ -4328,6 +4466,7 @@ msgstr "附錄" #: templates/pycontw-2023/_includes/ext/discord.html:117 #: templates/pycontw-2024/_includes/ext/discord.html:117 #: templates/pycontw-2025/_includes/ext/discord.html:117 +#: templates/pycontw-2026/_includes/ext/discord.html:117 msgid "Setting up Discord" msgstr "設定 Discord 與加入 Python Taiwan 伺服器" @@ -4337,6 +4476,7 @@ msgstr "設定 Discord 與加入 Python Taiwan 伺服器" #: templates/pycontw-2023/_includes/ext/discord.html:118 #: templates/pycontw-2024/_includes/ext/discord.html:118 #: templates/pycontw-2025/_includes/ext/discord.html:118 +#: templates/pycontw-2026/_includes/ext/discord.html:118 msgid "" "1.Download the Discord client for " "your platform and install it. If you already have this, please make sure it " @@ -4351,6 +4491,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:120 #: templates/pycontw-2024/_includes/ext/discord.html:120 #: templates/pycontw-2025/_includes/ext/discord.html:120 +#: templates/pycontw-2026/_includes/ext/discord.html:120 msgid "" "2.Register an account on Discord if you don’t have one. Open the Discord " "client you just installed. Click the 'Register' link below and complete your " @@ -4367,6 +4508,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:123 #: templates/pycontw-2024/_includes/ext/discord.html:123 #: templates/pycontw-2025/_includes/ext/discord.html:123 +#: templates/pycontw-2026/_includes/ext/discord.html:123 msgid "" "3.Join the Python Taiwan Discord server.
Python Taiwan Discord server " "invite link: https://discord." @@ -4383,6 +4525,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:126 #: templates/pycontw-2024/_includes/ext/discord.html:126 #: templates/pycontw-2025/_includes/ext/discord.html:126 +#: templates/pycontw-2026/_includes/ext/discord.html:126 msgid "" "In this dialog, copy the invite link above and paste it to the inputbox, " "then click 'Join'." @@ -4394,6 +4537,7 @@ msgstr "複製上面的邀請連結,並把它貼到對話方塊中,接著按 #: templates/pycontw-2023/_includes/ext/live.html:17 #: templates/pycontw-2024/_includes/ext/live.html:17 #: templates/pycontw-2025/_includes/ext/live.html:17 +#: templates/pycontw-2026/_includes/ext/live.html:17 msgid "This broadcast is not ready yet." msgstr "這個直播還沒有準備好。" @@ -4403,6 +4547,7 @@ msgstr "這個直播還沒有準備好。" #: templates/pycontw-2023/_includes/ext/live.html:26 #: templates/pycontw-2024/_includes/ext/live.html:26 #: templates/pycontw-2025/_includes/ext/live.html:26 +#: templates/pycontw-2026/_includes/ext/live.html:26 msgid "The broadcasts are not ready yet, please try again later." msgstr "直播還沒有準備好,請稍後再試。" @@ -4412,6 +4557,7 @@ msgstr "直播還沒有準備好,請稍後再試。" #: templates/pycontw-2023/_includes/ext/live.html:32 #: templates/pycontw-2024/_includes/ext/live.html:32 #: templates/pycontw-2025/_includes/ext/live.html:32 +#: templates/pycontw-2026/_includes/ext/live.html:32 msgid "" "The token within the link is invalid. Please contact staff for further help." msgstr "連結中附帶的驗證碼錯誤。請聯繫工作人員取得更進一步的協助。" @@ -4422,6 +4568,7 @@ msgstr "連結中附帶的驗證碼錯誤。請聯繫工作人員取得更進一 #: templates/pycontw-2023/_includes/footer.html:16 #: templates/pycontw-2024/_includes/footer.html:16 #: templates/pycontw-2025/_includes/footer.html:16 +#: templates/pycontw-2026/_includes/footer.html:16 msgid "Privacy Policy" msgstr "個人資料保護聲明" @@ -4450,6 +4597,10 @@ msgstr "個人資料保護聲明" #: templates/pycontw-2025/contents/zh/events/overview.html:72 #: templates/pycontw-2025/events/talk_list.html:64 #: templates/pycontw-2025/events/talk_list.html:76 +#: templates/pycontw-2026/contents/en/events/overview.html:91 +#: templates/pycontw-2026/contents/zh/events/overview.html:72 +#: templates/pycontw-2026/events/talk_list.html:64 +#: templates/pycontw-2026/events/talk_list.html:76 msgid "Community Track" msgstr "社群軌" @@ -4463,6 +4614,7 @@ msgstr "暖身活動" #: templates/pycontw-2023/_includes/menu.html:137 #: templates/pycontw-2024/_includes/menu.html:137 #: templates/pycontw-2025/_includes/menu.html:137 +#: templates/pycontw-2026/_includes/menu.html:137 msgctxt "COVID-19 Guidelines" msgid "COVID-19 Guidelines" msgstr "COVID-19 防疫守則" @@ -4473,6 +4625,7 @@ msgstr "COVID-19 防疫守則" #: templates/pycontw-2023/_includes/portal.html:8 #: templates/pycontw-2024/_includes/portal.html:8 #: templates/pycontw-2025/_includes/portal.html:8 +#: templates/pycontw-2026/_includes/portal.html:8 msgid "Discord Chat Room" msgstr "Discord 聊天室" @@ -4482,6 +4635,7 @@ msgstr "Discord 聊天室" #: templates/pycontw-2023/_includes/portal.html:16 #: templates/pycontw-2024/_includes/portal.html:16 #: templates/pycontw-2025/_includes/portal.html:16 +#: templates/pycontw-2026/_includes/portal.html:16 msgid "Open space" msgstr "Open space 揪團" @@ -4524,6 +4678,8 @@ msgstr "交通" #: templates/pycontw-2024/ext/discord.html:5 #: templates/pycontw-2025/ccip/discord.html:15 #: templates/pycontw-2025/ext/discord.html:5 +#: templates/pycontw-2026/ccip/discord.html:15 +#: templates/pycontw-2026/ext/discord.html:5 msgid "Discord Guideline" msgstr "Discord 指南" @@ -4533,6 +4689,7 @@ msgstr "Discord 指南" #: templates/pycontw-2023/contents/_default/conference/keynotes.html:68 #: templates/pycontw-2024/contents/_default/conference/keynotes.html:68 #: templates/pycontw-2025/contents/_default/conference/keynotes.html:68 +#: templates/pycontw-2026/contents/_default/conference/keynotes.html:68 msgid "To be announced" msgstr "即將公佈" @@ -4574,6 +4731,7 @@ msgstr "已滿" #: templates/pycontw-2023/events/_includes/community-track-traffic.html:10 #: templates/pycontw-2024/events/_includes/community-track-traffic.html:10 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:10 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:10 msgid "Time" msgstr "時間" @@ -4583,6 +4741,7 @@ msgstr "時間" #: templates/pycontw-2023/events/_includes/community-track-traffic.html:11 #: templates/pycontw-2024/events/_includes/community-track-traffic.html:11 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:11 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:11 msgid "Shuttle bus route" msgstr "接駁車路線" @@ -4640,6 +4799,15 @@ msgstr "接駁車路線" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:18 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:19 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:20 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:21 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:29 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:30 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Cheng Kung University" msgstr "成大" @@ -4673,6 +4841,11 @@ msgstr "成大" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:18 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:29 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Tainan Cultural and Creative Park" msgstr "古蹟出張所" @@ -4706,6 +4879,11 @@ msgstr "古蹟出張所" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:19 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:30 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Tsang Fong Art Space" msgstr "藏風藝文空間" @@ -4733,6 +4911,10 @@ msgstr "藏風藝文空間" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:20 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Angry Burger" msgstr "Angry Burger" @@ -4760,6 +4942,10 @@ msgstr "Angry Burger" #: templates/pycontw-2025/events/_includes/community-track-traffic.html:31 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:38 #: templates/pycontw-2025/events/_includes/community-track-traffic.html:44 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:21 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:31 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:38 +#: templates/pycontw-2026/events/_includes/community-track-traffic.html:44 msgid "Brunch of San Dao Men Siang Jian" msgstr "三道門香見" @@ -4778,6 +4964,7 @@ msgstr "活動議程" #: templates/pycontw-2023/events/talk_list.html:43 #: templates/pycontw-2024/events/talk_list.html:43 #: templates/pycontw-2025/events/talk_list.html:43 +#: templates/pycontw-2026/events/talk_list.html:43 #, python-format msgid " by %(speaker_names)s" msgstr " — %(speaker_names)s" @@ -4797,6 +4984,7 @@ msgstr "特邀活動" #: templates/pycontw-2023/events/talk_list.html:65 #: templates/pycontw-2024/events/talk_list.html:65 #: templates/pycontw-2025/events/talk_list.html:65 +#: templates/pycontw-2026/events/talk_list.html:65 #, python-format msgid " by %(host_name)s" msgstr " — %(host_name)s" @@ -4822,6 +5010,7 @@ msgstr "社群體驗式主題議程" #: templates/pycontw-2023/events/talk_list.html:78 #: templates/pycontw-2024/events/talk_list.html:78 #: templates/pycontw-2025/events/talk_list.html:78 +#: templates/pycontw-2026/events/talk_list.html:78 msgid "" "The community track is a new event in PyCon TW. We choose the talks with " "specific topics and package them into the same session. We'll leave the " @@ -4870,6 +5059,7 @@ msgstr "各地 Python 社群負責人" #: templates/pycontw-2023/events/talk_list.html:17 #: templates/pycontw-2024/events/talk_list.html:17 #: templates/pycontw-2025/events/talk_list.html:17 +#: templates/pycontw-2026/events/talk_list.html:17 msgid "" "The two conference days are packed with talks about Python by speakers from " "Taiwan and around the world. The talks will be either 15- or 30-minute long. " @@ -4889,6 +5079,7 @@ msgstr "" #: templates/pycontw-2023/events/tutorial_list.html:15 #: templates/pycontw-2024/events/tutorial_list.html:15 #: templates/pycontw-2025/events/tutorial_list.html:15 +#: templates/pycontw-2026/events/tutorial_list.html:15 msgid "" "Tutorial are events held as part of the main conference, but attendees need " "to register separately in order to join. They are 90-minute events held to " @@ -4904,6 +5095,7 @@ msgstr "" #: templates/pycontw-2023/ext/discord.html:11 #: templates/pycontw-2024/ext/discord.html:11 #: templates/pycontw-2025/ext/discord.html:11 +#: templates/pycontw-2026/ext/discord.html:11 msgid "PyCon TW Discord Guideline" msgstr "PyCon TW Discord 指南" @@ -4919,6 +5111,8 @@ msgstr "PyCon TW Discord 指南" #: templates/pycontw-2024/ext/live.html:12 #: templates/pycontw-2025/ext/live.html:5 #: templates/pycontw-2025/ext/live.html:12 +#: templates/pycontw-2026/ext/live.html:5 +#: templates/pycontw-2026/ext/live.html:12 msgid "Live broadcast" msgstr "現場直播" @@ -4931,6 +5125,7 @@ msgstr "贊助方案" #: templates/pycontw-2023/_includes/ext/discord.html:11 #: templates/pycontw-2024/_includes/ext/discord.html:11 #: templates/pycontw-2025/_includes/ext/discord.html:11 +#: templates/pycontw-2026/_includes/ext/discord.html:11 msgid "" "Users can find a #registration-desk channel under PYCON TW 2021 category. There is a PyCon TW RegBot in this channel to help you " @@ -4944,6 +5139,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:20 #: templates/pycontw-2024/_includes/ext/discord.html:20 #: templates/pycontw-2025/_includes/ext/discord.html:20 +#: templates/pycontw-2026/_includes/ext/discord.html:20 msgid "" "If you keep failing to register, you can directly raise your question in " "#registration-desk channel and mention 2021-staff。" @@ -4956,6 +5152,7 @@ msgstr "" #: templates/pycontw-2023/_includes/ext/discord.html:39 #: templates/pycontw-2024/_includes/ext/discord.html:39 #: templates/pycontw-2025/_includes/ext/discord.html:39 +#: templates/pycontw-2026/_includes/ext/discord.html:39 msgid "2021-session-chair" msgstr "2021-session-chair" @@ -4964,6 +5161,7 @@ msgstr "2021-session-chair" #: templates/pycontw-2023/_includes/ext/discord.html:40 #: templates/pycontw-2024/_includes/ext/discord.html:40 #: templates/pycontw-2025/_includes/ext/discord.html:40 +#: templates/pycontw-2026/_includes/ext/discord.html:40 msgid "Target: PyCon TW 2021 session chairs and assistant chairs" msgstr "對象:PyCon TW 2021 的所有議程主持人與助理主持人" @@ -4972,6 +5170,7 @@ msgstr "對象:PyCon TW 2021 的所有議程主持人與助理主持人" #: templates/pycontw-2023/_includes/ext/discord.html:43 #: templates/pycontw-2024/_includes/ext/discord.html:43 #: templates/pycontw-2025/_includes/ext/discord.html:43 +#: templates/pycontw-2026/_includes/ext/discord.html:43 msgid "2021-staff" msgstr "2021-staff" @@ -4980,6 +5179,7 @@ msgstr "2021-staff" #: templates/pycontw-2023/_includes/ext/discord.html:44 #: templates/pycontw-2024/_includes/ext/discord.html:44 #: templates/pycontw-2025/_includes/ext/discord.html:44 +#: templates/pycontw-2026/_includes/ext/discord.html:44 msgid "Target: PyCon TW 2021 staff" msgstr "對象:PyCon TW 2021 的所有志工" @@ -4988,6 +5188,7 @@ msgstr "對象:PyCon TW 2021 的所有志工" #: templates/pycontw-2023/_includes/ext/discord.html:47 #: templates/pycontw-2024/_includes/ext/discord.html:47 #: templates/pycontw-2025/_includes/ext/discord.html:47 +#: templates/pycontw-2026/_includes/ext/discord.html:47 msgid "2021-speaker" msgstr "2021-speaker" @@ -4996,6 +5197,7 @@ msgstr "2021-speaker" #: templates/pycontw-2023/_includes/ext/discord.html:48 #: templates/pycontw-2024/_includes/ext/discord.html:48 #: templates/pycontw-2025/_includes/ext/discord.html:48 +#: templates/pycontw-2026/_includes/ext/discord.html:48 msgid "Target: PyCon TW 2021 speakers" msgstr "對象:PyCon TW 2021 的所有講者" @@ -5004,6 +5206,7 @@ msgstr "對象:PyCon TW 2021 的所有講者" #: templates/pycontw-2023/_includes/ext/discord.html:51 #: templates/pycontw-2024/_includes/ext/discord.html:51 #: templates/pycontw-2025/_includes/ext/discord.html:51 +#: templates/pycontw-2026/_includes/ext/discord.html:51 msgid "2021-remote" msgstr "2021-remote" @@ -5012,6 +5215,7 @@ msgstr "2021-remote" #: templates/pycontw-2023/_includes/ext/discord.html:52 #: templates/pycontw-2024/_includes/ext/discord.html:52 #: templates/pycontw-2025/_includes/ext/discord.html:52 +#: templates/pycontw-2026/_includes/ext/discord.html:52 msgid "Target: PyCon TW 2021 remote session staff and remote speakers." msgstr "對象:PyCon TW 2021 的遠端議程相關工作人員" @@ -5020,6 +5224,7 @@ msgstr "對象:PyCon TW 2021 的遠端議程相關工作人員" #: templates/pycontw-2023/_includes/ext/discord.html:55 #: templates/pycontw-2024/_includes/ext/discord.html:55 #: templates/pycontw-2025/_includes/ext/discord.html:55 +#: templates/pycontw-2026/_includes/ext/discord.html:55 msgid "2021-attendee" msgstr "2021-attendee" @@ -5028,6 +5233,7 @@ msgstr "2021-attendee" #: templates/pycontw-2023/_includes/ext/discord.html:56 #: templates/pycontw-2024/_includes/ext/discord.html:56 #: templates/pycontw-2025/_includes/ext/discord.html:56 +#: templates/pycontw-2026/_includes/ext/discord.html:56 msgid "Target: PyCon TW 2021 attendees" msgstr "對象:PyCon TW 2021 的所有會眾" @@ -5061,6 +5267,12 @@ msgstr "對象:PyCon TW 2021 的所有會眾" #: templates/pycontw-2025/_includes/ext/discord.html:82 #: templates/pycontw-2025/_includes/ext/discord.html:88 #: templates/pycontw-2025/_includes/ext/discord.html:100 +#: templates/pycontw-2026/_includes/ext/discord.html:73 +#: templates/pycontw-2026/_includes/ext/discord.html:76 +#: templates/pycontw-2026/_includes/ext/discord.html:79 +#: templates/pycontw-2026/_includes/ext/discord.html:82 +#: templates/pycontw-2026/_includes/ext/discord.html:88 +#: templates/pycontw-2026/_includes/ext/discord.html:100 msgid "" "Roles:2021-staff, 2021-speaker, 2021-" "attendee" @@ -5078,6 +5290,8 @@ msgstr "" #: templates/pycontw-2024/_includes/ext/discord.html:103 #: templates/pycontw-2025/_includes/ext/discord.html:91 #: templates/pycontw-2025/_includes/ext/discord.html:103 +#: templates/pycontw-2026/_includes/ext/discord.html:91 +#: templates/pycontw-2026/_includes/ext/discord.html:103 msgid "Roles:2021-staff, 2021-speaker" msgstr "身份組:2020-staff, 2021-speaker" @@ -5086,6 +5300,7 @@ msgstr "身份組:2020-staff, 2021-speaker" #: templates/pycontw-2023/_includes/ext/discord.html:94 #: templates/pycontw-2024/_includes/ext/discord.html:94 #: templates/pycontw-2025/_includes/ext/discord.html:94 +#: templates/pycontw-2026/_includes/ext/discord.html:94 msgid "Roles:2021-staff" msgstr "身份組:2021-staff" @@ -5094,6 +5309,7 @@ msgstr "身份組:2021-staff" #: templates/pycontw-2023/_includes/ext/discord.html:106 #: templates/pycontw-2024/_includes/ext/discord.html:106 #: templates/pycontw-2025/_includes/ext/discord.html:106 +#: templates/pycontw-2026/_includes/ext/discord.html:106 msgid "Roles:2021-session-chair" msgstr "身份組:2021-session-chair" @@ -5102,12 +5318,13 @@ msgstr "身份組:2021-session-chair" #: templates/pycontw-2023/_includes/ext/discord.html:112 #: templates/pycontw-2024/_includes/ext/discord.html:112 #: templates/pycontw-2025/_includes/ext/discord.html:112 +#: templates/pycontw-2026/_includes/ext/discord.html:112 msgid "Roles: 2021-remote" msgstr "身份組: 2021-remote" #: templates/pycontw-2021/index.html:56 templates/pycontw-2022/index.html:56 #: templates/pycontw-2023/index.html:56 templates/pycontw-2024/index.html:56 -#: templates/pycontw-2025/index.html:56 +#: templates/pycontw-2025/index.html:56 templates/pycontw-2026/index.html:56 msgid "Call for Proposals" msgstr "徵求稿件" @@ -5196,28 +5413,28 @@ msgstr "我同意行為準則。" msgid "You must agree to continue." msgstr "你必須同意才能繼續下一步。" -#: users/models.py:113 +#: users/models.py:121 msgid "email address" msgstr "電子郵件信箱" -#: users/models.py:121 +#: users/models.py:129 msgid "biography" msgstr "自我介紹" -#: users/models.py:124 +#: users/models.py:132 msgid "" "Describe yourself with 1000 characters or less. There will be no formatting." msgstr "使用少於 1000 個字元介紹您自己。本欄位不含任何格式。" -#: users/models.py:129 +#: users/models.py:137 msgid "photo" msgstr "個人照" -#: users/models.py:133 +#: users/models.py:141 msgid "Facebook" msgstr "Facebook" -#: users/models.py:136 +#: users/models.py:144 msgid "" "Link to your Facebook profile page. This will be shown when we display your " "public information. If you do not know what your profile page link is, click " @@ -5228,66 +5445,66 @@ msgstr "" "人頁連結為何,可以使用" "這個連結,並將開啟頁面的網址列內容貼至本欄位。記得先登入 Facebook!" -#: users/models.py:145 +#: users/models.py:153 msgid "Twitter" msgstr "Twitter" -#: users/models.py:150 +#: users/models.py:158 msgid "" "Your Twitter handle, without the \"@\" sign. This will be shown when we " "display your public information." msgstr "您的 Twitter 帳號,不包含 @ 符號。這個名稱會出現在您的公開資料中。" -#: users/models.py:155 +#: users/models.py:163 msgid "GitHub" msgstr "GitHub" -#: users/models.py:160 +#: users/models.py:168 msgid "" "Your GitHub account, without the \"@\" sign. This will be shown when we " "display your public information." msgstr "您的 GitHub 帳號,不包含 @ 符號。這個名稱會出現在您的公開資料中。" -#: users/models.py:168 +#: users/models.py:176 msgid "Designates whether the user has verified email ownership." msgstr "指定本使用者是否已完成 email 認證。" -#: users/models.py:172 +#: users/models.py:180 msgid "staff status" msgstr "管理員權限" -#: users/models.py:175 +#: users/models.py:183 msgid "Designates whether the user can log into this admin site." msgstr "指定本使用者是否可以登入本管理站台。" -#: users/models.py:179 +#: users/models.py:187 msgid "active" msgstr "已啟用" -#: users/models.py:182 +#: users/models.py:190 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." msgstr "指定本使用者是否被視為 active。取消勾選此選項而非刪除帳號。" -#: users/models.py:187 +#: users/models.py:195 msgid "date joined" msgstr "註冊日期" -#: users/models.py:198 +#: users/models.py:206 msgid "users" msgstr "使用者" -#: users/models.py:300 +#: users/models.py:308 #, python-brace-format msgid "Verify your email address on {host}" msgstr "於 {host} 認證您的信箱地址" -#: users/models.py:318 +#: users/models.py:326 msgid "latest agreed CoC version" msgstr "最後同意的 CoC 版本" -#: users/models.py:322 +#: users/models.py:330 msgid "agreed at" msgstr "同意於" From 69de1bf84a78299ea3b0ec104def30e79e00b722 Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Sun, 16 Aug 2026 18:11:38 +0900 Subject: [PATCH 3/9] chore: Add `make psql` to aid local development --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2069d51b2..741044a49 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: init +.PHONY: init psql init: . ${NVM_DIR}/nvm.sh && nvm use @@ -9,6 +9,9 @@ init: run_db: docker compose -f docker-compose-dev.yml up db -d +psql: + docker compose -f docker-compose-dev.yml exec db psql -U postgres -d pycontw2016 + run_local: init run_db export DATABASE_URL=postgresql://postgres:secretpostgres@127.0.0.1:5432/pycontw2016 poetry run python src/manage.py runserver 0.0.0.0:8000 From 6adf4c8fee3a053d79bee0837bc72dea947f6cac Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Sun, 16 Aug 2026 20:05:54 +0900 Subject: [PATCH 4/9] feat: Support multiple locations for custom event --- src/events/forms.py | 49 +++++- .../tests/test_custom_event_locations.py | 118 ++++++++++++++ src/locale/en_US/LC_MESSAGES/django.po | 145 ++++++++++-------- src/locale/zh_Hant/LC_MESSAGES/django.po | 145 ++++++++++-------- src/static/events/admin/custom_event.js | 24 +++ 5 files changed, 347 insertions(+), 134 deletions(-) create mode 100644 src/events/tests/test_custom_event_locations.py create mode 100644 src/static/events/admin/custom_event.js diff --git a/src/events/forms.py b/src/events/forms.py index ab564e4ab..1725da843 100644 --- a/src/events/forms.py +++ b/src/events/forms.py @@ -1,17 +1,62 @@ from django import forms +from django.utils.translation import gettext_lazy as _ from .models import CustomEvent +CUSTOM_LOCATION = '__custom__' + class CustomEventForm(forms.ModelForm): + location_mode = forms.ChoiceField( + label=_('location'), + required=False, + ) + custom_location = forms.CharField( + label=_('custom location'), + max_length=CustomEvent._meta.get_field('location').max_length, + required=False, + ) class Meta: model = CustomEvent fields = [ - 'conference', 'title', 'begin_time', 'end_time', 'location', - 'break_event', 'description', 'link_path', + 'conference', 'title', 'begin_time', 'end_time', 'location_mode', + 'custom_location', 'break_event', 'description', 'link_path', ] + class Media: + js = ('events/admin/custom_event.js',) + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + location_choices = list(CustomEvent.LOCATION_CHOICES) + self.fields['location_mode'].choices = [ + ('', '---------'), + *location_choices, + (CUSTOM_LOCATION, _('Custom…')), + ] self.fields['title'].strip = False + + location = self.instance.location + if location in dict(location_choices): + self.fields['location_mode'].initial = location + elif location: + self.fields['location_mode'].initial = CUSTOM_LOCATION + self.fields['custom_location'].initial = location + + def clean(self): + cleaned_data = super().clean() + location_mode = cleaned_data.get('location_mode') + + if location_mode == CUSTOM_LOCATION: + location = cleaned_data.get('custom_location') + if not location: + self.add_error( + 'custom_location', + _('Enter a custom location.'), + ) + else: + location = location_mode + + self.instance.location = location or None + return cleaned_data diff --git a/src/events/tests/test_custom_event_locations.py b/src/events/tests/test_custom_event_locations.py new file mode 100644 index 000000000..d7ba26fab --- /dev/null +++ b/src/events/tests/test_custom_event_locations.py @@ -0,0 +1,118 @@ +import datetime + +import pytest +from django.conf import settings +from django.utils import timezone + +from events.forms import CUSTOM_LOCATION, CustomEventForm +from events.models import CustomEvent, Location, Time + + +def make_time(date, hour): + value = timezone.make_aware(datetime.datetime.combine(date, datetime.time(hour))) + return Time.all_objects.create(value=value) + + +@pytest.mark.django_db +def test_custom_event_form_saves_predefined_location(): + form = CustomEventForm(data={ + 'conference': settings.CONFERENCE_DEFAULT_SLUG, + 'title': 'Scheduled event', + 'location_mode': Location.R0, + 'description': '', + 'link_path': '', + }) + + assert form.is_valid(), form.errors + event = form.save() + assert event.location == Location.R0 + + +@pytest.mark.django_db +def test_custom_event_form_saves_custom_location(): + form = CustomEventForm(data={ + 'conference': settings.CONFERENCE_DEFAULT_SLUG, + 'title': 'Off-site event', + 'location_mode': CUSTOM_LOCATION, + 'custom_location': 'lobby', + 'description': '', + 'link_path': '', + }) + + assert form.is_valid(), form.errors + event = form.save() + assert event.location == 'lobby' + + +def test_custom_event_form_initializes_custom_location(): + form = CustomEventForm(instance=CustomEvent(location='lobby')) + + assert form.fields['location_mode'].initial == CUSTOM_LOCATION + assert form.fields['custom_location'].initial == 'lobby' + + +def test_custom_event_form_requires_custom_location(): + form = CustomEventForm(data={ + 'conference': settings.CONFERENCE_DEFAULT_SLUG, + 'title': 'Off-site event', + 'location_mode': CUSTOM_LOCATION, + 'custom_location': '', + 'description': '', + 'link_path': '', + }) + + assert not form.is_valid() + assert form.errors['custom_location'] == ['Enter a custom location.'] + + +def test_custom_event_form_limits_custom_location_to_twelve_characters(): + form = CustomEventForm(data={ + 'conference': settings.CONFERENCE_DEFAULT_SLUG, + 'title': 'Off-site event', + 'location_mode': CUSTOM_LOCATION, + 'custom_location': 'x' * 13, + 'description': '', + 'link_path': '', + }) + + assert not form.is_valid() + assert 'custom_location' in form.errors + + +@pytest.mark.django_db +def test_schedule_api_treats_custom_location_as_one_room(api_client): + dates = list(settings.EVENTS_DAY_NAMES) + for index, date in enumerate(dates): + CustomEvent.objects.create( + title=f'Event {index}', + begin_time=make_time(date, 9), + end_time=make_time(date, 10), + location='lobby' if index == 0 else Location.R2, + ) + + response = api_client.get('/api/events/schedule/') + + assert response.status_code == 200 + first_day = response.json()['data'][0] + assert 'lobby' in first_day['rooms'] + assert len(first_day['slots']['lobby']) == 1 + + +@pytest.mark.django_db +def test_ccip_treats_custom_location_as_one_room(client): + date = next(iter(settings.EVENTS_DAY_NAMES)) + event = CustomEvent.objects.create( + title='Off-site event', + begin_time=make_time(date, 9), + end_time=make_time(date, 10), + location='lobby', + ) + + response = client.get('/ccip/') + + assert response.status_code == 200 + data = response.json() + session = next(item for item in data['sessions'] if item['id'] == f'event-{event.pk}') + assert session['room'] == 'lobby' + assert session['broadcast'] == [] + assert 'lobby' in {room['id'] for room in data['rooms']} diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 74b132993..75f57caa2 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PyCon TW\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-16 16:47+0800\n" +"POT-Creation-Date: 2026-08-16 19:10+0800\n" "PO-Revision-Date: 2022-07-11 02:23+0800\n" "Last-Translator: Tom Chen \n" "Language-Team: English (United States) (http://www.transifex.com/pycon-" @@ -49,32 +49,32 @@ msgstr "attendee" msgid "attendees" msgstr "attendees" -#: ccip/views.py:209 +#: ccip/views.py:215 msgctxt "CCIP event type" msgid "event" msgstr "event" -#: ccip/views.py:217 +#: ccip/views.py:223 msgctxt "CCIP event type" msgid "break" msgstr "break" -#: ccip/views.py:225 +#: ccip/views.py:231 msgctxt "CCIP event type" msgid "keynote" msgstr "keynote" -#: ccip/views.py:231 +#: ccip/views.py:237 msgctxt "CCIP event type" msgid "sponsored" msgstr "sponsored" -#: ccip/views.py:239 +#: ccip/views.py:245 msgctxt "CCIP event type" msgid "tutorial" msgstr "tutorial" -#: ccip/views.py:251 +#: ccip/views.py:257 msgctxt "CCIP event type" msgid "talk" msgstr "talk" @@ -234,7 +234,7 @@ msgstr "{model_name_cap} creation requires a request object." msgid "conference" msgstr "conference" -#: core/models.py:93 events/models.py:179 +#: core/models.py:93 events/models.py:202 msgid "title" msgstr "title" @@ -278,7 +278,7 @@ msgstr "slide link" msgid "slido embed link" msgstr "Slido embed link" -#: core/models.py:156 events/models.py:244 +#: core/models.py:156 events/models.py:275 msgid "HackMD embed link" msgstr "HackMD embed link" @@ -319,80 +319,93 @@ msgstr "Tokens" msgid "time value" msgstr "time value" -#: events/admin.py:108 events/models.py:159 +#: events/admin.py:108 events/models.py:160 msgid "begin time" msgstr "begin time" -#: events/admin.py:114 events/models.py:168 +#: events/admin.py:114 events/models.py:169 msgid "end time" msgstr "end time" -#: events/admin.py:136 +#: events/admin.py:120 events/admin.py:155 events/forms.py:11 +#: events/models.py:152 events/models.py:198 +msgid "location" +msgstr "Location" + +#: events/admin.py:162 #: templates/default/users/_includes/dashboard_proposal_table.html:32 msgid "Edit" msgstr "Edit" -#: events/models.py:70 +#: events/forms.py:15 +msgid "custom location" +msgstr "Custom location" + +#: events/forms.py:36 +msgid "Custom…" +msgstr "Custom…" + +#: events/forms.py:56 +msgid "Enter a custom location." +msgstr "Enter a custom location." + +#: events/models.py:71 msgid "value" msgstr "value" -#: events/models.py:77 +#: events/models.py:78 msgid "time" msgstr "time" -#: events/models.py:78 +#: events/models.py:79 msgid "times" msgstr "times" -#: events/models.py:128 +#: events/models.py:129 msgid "All rooms" msgstr "All rooms" -#: events/models.py:129 +#: events/models.py:130 msgid "R0 (Simulcast)" msgstr "R0 (Simulcast)" -#: events/models.py:130 +#: events/models.py:131 msgid "R0" msgstr "R0" -#: events/models.py:133 +#: events/models.py:134 msgid "R1" msgstr "R1" -#: events/models.py:136 +#: events/models.py:137 msgid "R2" msgstr "R2" -#: events/models.py:139 +#: events/models.py:140 msgid "R3" msgstr "R3" -#: events/models.py:140 +#: events/models.py:141 msgid "R4" msgstr "R4" -#: events/models.py:141 +#: events/models.py:142 msgid "Sprint / Open Space" msgstr "Sprint / Open Space" -#: events/models.py:142 templates/pycontw-2016/_includes/nav/front_nav.html:46 +#: events/models.py:143 templates/pycontw-2016/_includes/nav/front_nav.html:46 msgid "Tutorial" msgstr "Tutorial" -#: events/models.py:143 +#: events/models.py:144 msgid "Young Inspire / Poster Session" msgstr "Young Inspire / Poster Session" -#: events/models.py:151 -msgid "location" -msgstr "location" - -#: events/models.py:183 +#: events/models.py:206 msgid "is break event" msgstr "is break event" -#: events/models.py:186 +#: events/models.py:209 msgid "" "Whether this event is displays as a break. A break can be visually " "distinguished from \"real\" conference sessions, such as keynotes, talks, " @@ -401,71 +414,71 @@ msgstr "" "Whether this event is displays as a break. A break can be visually " "distinguished from “real” conference sessions, such as keynotes, talks, etc." -#: events/models.py:192 +#: events/models.py:215 msgid "event description" msgstr "event description" -#: events/models.py:195 +#: events/models.py:218 msgid "link path" msgstr "link path" -#: events/models.py:200 +#: events/models.py:223 msgid "custom event" msgstr "custom event" -#: events/models.py:201 +#: events/models.py:224 msgid "custom events" msgstr "custom events" -#: events/models.py:210 users/models.py:125 +#: events/models.py:241 users/models.py:125 msgid "speaker name" msgstr "speaker name" -#: events/models.py:215 +#: events/models.py:246 msgid "speaker bio" msgstr "speaker bio" -#: events/models.py:219 +#: events/models.py:250 msgid "speaker photo" msgstr "speaker photo" -#: events/models.py:223 +#: events/models.py:254 msgid "Raster format of the speaker's photo, e.g. PNG, JPEG." msgstr "Raster format of the speaker's photo, e.g. PNG, JPEG." -#: events/models.py:227 +#: events/models.py:258 msgid "keynote session title" msgstr "keynote session title" -#: events/models.py:232 +#: events/models.py:263 msgid "keynote session description" msgstr "keynote session description" -#: events/models.py:236 +#: events/models.py:267 msgid "session slides" msgstr "session slides" -#: events/models.py:240 +#: events/models.py:271 msgid "slido" msgstr "Slido" -#: events/models.py:249 +#: events/models.py:280 msgid "social linkedin" msgstr "Linkedin" -#: events/models.py:253 +#: events/models.py:284 msgid "social twitter" msgstr "Twitter" -#: events/models.py:257 +#: events/models.py:288 msgid "social github" msgstr "Github" -#: events/models.py:261 events/models.py:346 +#: events/models.py:292 events/models.py:377 msgid "slug" msgstr "slug" -#: events/models.py:263 +#: events/models.py:294 #, python-brace-format msgid "" "This is used to link to the speaker's introduction on the Keynote page, e.g. " @@ -474,77 +487,77 @@ msgstr "" "This is used to link to the speaker's introduction on the Keynote page, e.g. " "'liang2' will link to '{link}#keynote-speaker-liang2'." -#: events/models.py:270 events/models.py:389 events/models.py:425 +#: events/models.py:301 events/models.py:420 events/models.py:456 msgid "is remote" msgstr "is remote" -#: events/models.py:274 events/models.py:349 events/models.py:393 -#: events/models.py:429 +#: events/models.py:305 events/models.py:380 events/models.py:424 +#: events/models.py:460 msgid "youtube id" msgstr "youtube id" -#: events/models.py:280 +#: events/models.py:311 msgid "keynote event" msgstr "keynote event" -#: events/models.py:281 +#: events/models.py:312 msgid "keynote events" msgstr "keynote events" -#: events/models.py:284 +#: events/models.py:315 #, python-brace-format msgid "Keynote: {speaker}" msgstr "Keynote: {speaker}" -#: events/models.py:323 sponsors/models.py:107 sponsors/models.py:123 +#: events/models.py:354 sponsors/models.py:107 sponsors/models.py:123 msgid "sponsor" msgstr "sponsor" -#: events/models.py:328 events/models.py:329 +#: events/models.py:359 events/models.py:360 #: templates/pycontw-2020/_includes/menu.html:104 #: templates/pycontw-2020/contents/_default/events/job-listings.html:33 msgid "Job Listings" msgstr "Job Listings" -#: events/models.py:332 +#: events/models.py:363 #, python-brace-format msgid "Open Role of Sponsor: {sponsor}" msgstr "Open Role of Sponsor: {sponsor}" -#: events/models.py:341 +#: events/models.py:372 msgid "host" msgstr "host" -#: events/models.py:355 +#: events/models.py:386 msgid "sponsored event" msgstr "sponsored event" -#: events/models.py:356 +#: events/models.py:387 msgid "sponsored events" msgstr "sponsored events" -#: events/models.py:384 events/models.py:415 proposals/models.py:364 +#: events/models.py:415 events/models.py:446 proposals/models.py:364 #: reviews/models.py:75 reviews/models.py:196 msgid "proposal" msgstr "proposal" -#: events/models.py:401 +#: events/models.py:432 msgid "talk event" msgstr "talk event" -#: events/models.py:402 +#: events/models.py:433 msgid "talk events" msgstr "talk events" -#: events/models.py:420 +#: events/models.py:451 msgid "registration link" msgstr "registration link" -#: events/models.py:437 +#: events/models.py:468 msgid "tutorial event" msgstr "tutorial event" -#: events/models.py:438 +#: events/models.py:469 msgid "tutorial events" msgstr "tutorial events" diff --git a/src/locale/zh_Hant/LC_MESSAGES/django.po b/src/locale/zh_Hant/LC_MESSAGES/django.po index 0d5adfad1..8fb3e4683 100644 --- a/src/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/locale/zh_Hant/LC_MESSAGES/django.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: PyCon TW\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-16 16:47+0800\n" +"POT-Creation-Date: 2026-08-16 19:10+0800\n" "PO-Revision-Date: 2022-07-11 02:25+0800\n" "Last-Translator: Tom Chen \n" "Language-Team: Chinese Traditional (http://www.transifex.com/pycon-taiwan/" @@ -56,32 +56,32 @@ msgstr "會眾" msgid "attendees" msgstr "會眾" -#: ccip/views.py:209 +#: ccip/views.py:215 msgctxt "CCIP event type" msgid "event" msgstr "活動" -#: ccip/views.py:217 +#: ccip/views.py:223 msgctxt "CCIP event type" msgid "break" msgstr "休息" -#: ccip/views.py:225 +#: ccip/views.py:231 msgctxt "CCIP event type" msgid "keynote" msgstr "基調演講" -#: ccip/views.py:231 +#: ccip/views.py:237 msgctxt "CCIP event type" msgid "sponsored" msgstr "贊助" -#: ccip/views.py:239 +#: ccip/views.py:245 msgctxt "CCIP event type" msgid "tutorial" msgstr "專業課程" -#: ccip/views.py:251 +#: ccip/views.py:257 msgctxt "CCIP event type" msgid "talk" msgstr "演講" @@ -241,7 +241,7 @@ msgstr "建立 {model_name_cap} 需要一個 request 物件。" msgid "conference" msgstr "會議" -#: core/models.py:93 events/models.py:179 +#: core/models.py:93 events/models.py:202 msgid "title" msgstr "題目" @@ -285,7 +285,7 @@ msgstr "投影片連結" msgid "slido embed link" msgstr "Slido 嵌入連結" -#: core/models.py:156 events/models.py:244 +#: core/models.py:156 events/models.py:275 msgid "HackMD embed link" msgstr "HackMD 嵌入連結" @@ -326,80 +326,93 @@ msgstr "驗證碼" msgid "time value" msgstr "時間值" -#: events/admin.py:108 events/models.py:159 +#: events/admin.py:108 events/models.py:160 msgid "begin time" msgstr "開始時間" -#: events/admin.py:114 events/models.py:168 +#: events/admin.py:114 events/models.py:169 msgid "end time" msgstr "結束時間" -#: events/admin.py:136 +#: events/admin.py:120 events/admin.py:155 events/forms.py:11 +#: events/models.py:152 events/models.py:198 +msgid "location" +msgstr "地點" + +#: events/admin.py:162 #: templates/default/users/_includes/dashboard_proposal_table.html:32 msgid "Edit" msgstr "編輯" -#: events/models.py:70 +#: events/forms.py:15 +msgid "custom location" +msgstr "自訂地點" + +#: events/forms.py:36 +msgid "Custom…" +msgstr "自訂…" + +#: events/forms.py:56 +msgid "Enter a custom location." +msgstr "請輸入自訂地點。" + +#: events/models.py:71 msgid "value" msgstr "值" -#: events/models.py:77 +#: events/models.py:78 msgid "time" msgstr "時間" -#: events/models.py:78 +#: events/models.py:79 msgid "times" msgstr "時間" -#: events/models.py:128 +#: events/models.py:129 msgid "All rooms" msgstr "所有會議室" -#: events/models.py:129 +#: events/models.py:130 msgid "R0 (Simulcast)" msgstr "R0 (聯播)" -#: events/models.py:130 +#: events/models.py:131 msgid "R0" msgstr "R0" -#: events/models.py:133 +#: events/models.py:134 msgid "R1" msgstr "R1" -#: events/models.py:136 +#: events/models.py:137 msgid "R2" msgstr "R2" -#: events/models.py:139 +#: events/models.py:140 msgid "R3" msgstr "R3" -#: events/models.py:140 +#: events/models.py:141 msgid "R4" msgstr "R4" -#: events/models.py:141 +#: events/models.py:142 msgid "Sprint / Open Space" msgstr "衝刺開發 / 開放空間" -#: events/models.py:142 templates/pycontw-2016/_includes/nav/front_nav.html:46 +#: events/models.py:143 templates/pycontw-2016/_includes/nav/front_nav.html:46 msgid "Tutorial" msgstr "專業課程" -#: events/models.py:143 +#: events/models.py:144 msgid "Young Inspire / Poster Session" msgstr "Young Inspire / 海報展" -#: events/models.py:151 -msgid "location" -msgstr "地點" - -#: events/models.py:183 +#: events/models.py:206 msgid "is break event" msgstr "休息" -#: events/models.py:186 +#: events/models.py:209 msgid "" "Whether this event is displays as a break. A break can be visually " "distinguished from \"real\" conference sessions, such as keynotes, talks, " @@ -408,71 +421,71 @@ msgstr "" "此活動是否應該被顯示為休息時間。休息時間的顯示會與「真的」會議時段,例如基調" "演講、一般演講不同。" -#: events/models.py:192 +#: events/models.py:215 msgid "event description" msgstr "活動說明" -#: events/models.py:195 +#: events/models.py:218 msgid "link path" msgstr "連結路徑" -#: events/models.py:200 +#: events/models.py:223 msgid "custom event" msgstr "自訂活動" -#: events/models.py:201 +#: events/models.py:224 msgid "custom events" msgstr "自訂活動" -#: events/models.py:210 users/models.py:125 +#: events/models.py:241 users/models.py:125 msgid "speaker name" msgstr "演講者" -#: events/models.py:215 +#: events/models.py:246 msgid "speaker bio" msgstr "演講者介紹" -#: events/models.py:219 +#: events/models.py:250 msgid "speaker photo" msgstr "演講者照片" -#: events/models.py:223 +#: events/models.py:254 msgid "Raster format of the speaker's photo, e.g. PNG, JPEG." msgstr "演講者照片使用點陣格式,例如PNG, JPEG" -#: events/models.py:227 +#: events/models.py:258 msgid "keynote session title" msgstr "演講標題" -#: events/models.py:232 +#: events/models.py:263 msgid "keynote session description" msgstr "演講介紹" -#: events/models.py:236 +#: events/models.py:267 msgid "session slides" msgstr "演講投影片" -#: events/models.py:240 +#: events/models.py:271 msgid "slido" msgstr "Slido" -#: events/models.py:249 +#: events/models.py:280 msgid "social linkedin" msgstr "Linkedin" -#: events/models.py:253 +#: events/models.py:284 msgid "social twitter" msgstr "Twitter" -#: events/models.py:257 +#: events/models.py:288 msgid "social github" msgstr "Github" -#: events/models.py:261 events/models.py:346 +#: events/models.py:292 events/models.py:377 msgid "slug" msgstr "網址文字" -#: events/models.py:263 +#: events/models.py:294 #, python-brace-format msgid "" "This is used to link to the speaker's introduction on the Keynote page, e.g. " @@ -481,77 +494,77 @@ msgstr "" "用來連結至基調演講頁面上的講者簡介,如「liang2」可連結至「{link}#keynote-" "speaker-liang2」。" -#: events/models.py:270 events/models.py:389 events/models.py:425 +#: events/models.py:301 events/models.py:420 events/models.py:456 msgid "is remote" msgstr "遠端演講" -#: events/models.py:274 events/models.py:349 events/models.py:393 -#: events/models.py:429 +#: events/models.py:305 events/models.py:380 events/models.py:424 +#: events/models.py:460 msgid "youtube id" msgstr "youtube id" -#: events/models.py:280 +#: events/models.py:311 msgid "keynote event" msgstr "基調演講" -#: events/models.py:281 +#: events/models.py:312 msgid "keynote events" msgstr "基調演講" -#: events/models.py:284 +#: events/models.py:315 #, python-brace-format msgid "Keynote: {speaker}" msgstr "基調演講:{speaker}" -#: events/models.py:323 sponsors/models.py:107 sponsors/models.py:123 +#: events/models.py:354 sponsors/models.py:107 sponsors/models.py:123 msgid "sponsor" msgstr "贊助" -#: events/models.py:328 events/models.py:329 +#: events/models.py:359 events/models.py:360 #: templates/pycontw-2020/_includes/menu.html:104 #: templates/pycontw-2020/contents/_default/events/job-listings.html:33 msgid "Job Listings" msgstr "徵才資訊" -#: events/models.py:332 +#: events/models.py:363 #, python-brace-format msgid "Open Role of Sponsor: {sponsor}" msgstr "徵才中贊助商: {sponsor}" -#: events/models.py:341 +#: events/models.py:372 msgid "host" msgstr "主持人" -#: events/models.py:355 +#: events/models.py:386 msgid "sponsored event" msgstr "贊助演講" -#: events/models.py:356 +#: events/models.py:387 msgid "sponsored events" msgstr "贊助演講" -#: events/models.py:384 events/models.py:415 proposals/models.py:364 +#: events/models.py:415 events/models.py:446 proposals/models.py:364 #: reviews/models.py:75 reviews/models.py:196 msgid "proposal" msgstr "提案" -#: events/models.py:401 +#: events/models.py:432 msgid "talk event" msgstr "演講" -#: events/models.py:402 +#: events/models.py:433 msgid "talk events" msgstr "演講" -#: events/models.py:420 +#: events/models.py:451 msgid "registration link" msgstr "報名連結" -#: events/models.py:437 +#: events/models.py:468 msgid "tutorial event" msgstr "專業課程" -#: events/models.py:438 +#: events/models.py:469 msgid "tutorial events" msgstr "專業課程" diff --git a/src/static/events/admin/custom_event.js b/src/static/events/admin/custom_event.js new file mode 100644 index 000000000..29a3463bd --- /dev/null +++ b/src/static/events/admin/custom_event.js @@ -0,0 +1,24 @@ +(function () { + 'use strict'; + + function setupCustomLocation() { + const locationMode = document.getElementById('id_location_mode'); + const customLocation = document.querySelector('.form-row.field-custom_location'); + if (!locationMode || !customLocation) { + return; + } + + function updateVisibility() { + customLocation.hidden = locationMode.value !== '__custom__'; + } + + locationMode.addEventListener('change', updateVisibility); + updateVisibility(); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', setupCustomLocation); + } else { + setupCustomLocation(); + } +}()); From a1a7931a68d6a6ec209f617828c80218a1c1d02e Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Mon, 17 Aug 2026 01:40:41 +0900 Subject: [PATCH 5/9] chore: Preserve postgres data between docker compose down --- docker-compose-dev.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 6d7dbd8f0..de6d4fb82 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -10,6 +10,8 @@ services: - POSTGRES_PASSWORD=secretpostgres ports: - ${COMPOSE_DB_PORT:-5432}:5432 + volumes: + - postgres_data:/var/lib/postgresql/data healthcheck: test: "pg_isready" start_period: 5s @@ -33,3 +35,6 @@ services: - DATABASE_URL=postgres://postgres:secretpostgres@db:5432/pycontw2016 command: "python3 manage.py runserver 0.0.0.0:8000" working_dir: /usr/local/app/src + +volumes: + postgres_data: From 33b45c6466e461a962eafc5c29c56a2a34167da7 Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Mon, 17 Aug 2026 01:43:03 +0900 Subject: [PATCH 6/9] chore: Use bash for shell_dev --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 741044a49..2dcc9096d 100644 --- a/Makefile +++ b/Makefile @@ -27,4 +27,4 @@ remove_dev: docker compose -f docker-compose-dev.yml down shell_dev: - docker compose -f docker-compose-dev.yml exec -it pycontw /bin/sh + docker compose -f docker-compose-dev.yml exec -it pycontw /bin/bash From f1446c2a6b2264792d19e932eb14c7481b6393b1 Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Mon, 17 Aug 2026 02:47:02 +0900 Subject: [PATCH 7/9] feat: Add custom location to other event forms --- src/events/fields.py | 101 ++++++++++++++++++ src/events/forms.py | 49 +-------- src/events/models.py | 4 +- .../tests/test_custom_event_locations.py | 27 ++--- src/static/events/admin/custom_event.js | 24 ----- src/static/events/admin/event_location.js | 25 +++++ 6 files changed, 146 insertions(+), 84 deletions(-) create mode 100644 src/events/fields.py delete mode 100644 src/static/events/admin/custom_event.js create mode 100644 src/static/events/admin/event_location.js diff --git a/src/events/fields.py b/src/events/fields.py new file mode 100644 index 000000000..178f37e4d --- /dev/null +++ b/src/events/fields.py @@ -0,0 +1,101 @@ +from django import forms +from django.core import exceptions +from django.db import models +from django.utils.text import capfirst +from django.utils.translation import gettext_lazy as _ + +CUSTOM_LOCATION = '__custom__' + + +class EventLocationWidget(forms.MultiWidget): + + def __init__(self, choices, max_length, attrs=None): + widgets = [ + forms.Select( + choices=choices, + attrs={'class': 'event-location-mode'}, + ), + forms.TextInput(attrs={ + 'class': 'vTextField event-location-custom', + 'maxlength': max_length, + 'placeholder': _('custom location'), + }), + ] + super().__init__(widgets, attrs) + + def decompress(self, value): + location_choices = dict(self.widgets[0].choices) + if value in location_choices: + return [value, ''] + if value: + return [CUSTOM_LOCATION, value] + return ['', ''] + + class Media: + css = {'all': ('events/admin/event_location.css',)} + js = ('events/admin/event_location.js',) + + +class EventLocationField(forms.MultiValueField): + + def __init__(self, choices, max_length, **kwargs): + choices = [ + ('', '---------'), + *choices, + (CUSTOM_LOCATION, _('Custom…')), + ] + fields = [ + forms.ChoiceField(choices=choices, required=False), + forms.CharField(max_length=max_length, required=False), + ] + kwargs.setdefault('label', _('location')) + kwargs.setdefault('required', False) + super().__init__( + fields=fields, + require_all_fields=False, + widget=EventLocationWidget(choices, max_length), + **kwargs, + ) + + def compress(self, data_list): + if not data_list: + return None + + location_mode, custom_location = data_list + if location_mode == CUSTOM_LOCATION: + if not custom_location: + raise exceptions.ValidationError(_('Enter a custom location.')) + return custom_location + return location_mode or None + + +class EventLocationModelField(models.CharField): + + def formfield(self, **kwargs): + defaults = { + 'choices': self.choices, + 'max_length': self.max_length, + 'label': capfirst(self.verbose_name), + 'required': not self.blank, + 'help_text': self.help_text, + } + defaults.update(kwargs) + return EventLocationField(**defaults) + + def validate(self, value, model_instance): + if not self.editable: + return + if value is None and not self.null: + raise exceptions.ValidationError( + self.error_messages['null'], + code='null', + ) + if not self.blank and value in self.empty_values: + raise exceptions.ValidationError( + self.error_messages['blank'], + code='blank', + ) + + def deconstruct(self): + name, _, args, kwargs = super().deconstruct() + return name, 'django.db.models.CharField', args, kwargs diff --git a/src/events/forms.py b/src/events/forms.py index 1725da843..ab564e4ab 100644 --- a/src/events/forms.py +++ b/src/events/forms.py @@ -1,62 +1,17 @@ from django import forms -from django.utils.translation import gettext_lazy as _ from .models import CustomEvent -CUSTOM_LOCATION = '__custom__' - class CustomEventForm(forms.ModelForm): - location_mode = forms.ChoiceField( - label=_('location'), - required=False, - ) - custom_location = forms.CharField( - label=_('custom location'), - max_length=CustomEvent._meta.get_field('location').max_length, - required=False, - ) class Meta: model = CustomEvent fields = [ - 'conference', 'title', 'begin_time', 'end_time', 'location_mode', - 'custom_location', 'break_event', 'description', 'link_path', + 'conference', 'title', 'begin_time', 'end_time', 'location', + 'break_event', 'description', 'link_path', ] - class Media: - js = ('events/admin/custom_event.js',) - def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - location_choices = list(CustomEvent.LOCATION_CHOICES) - self.fields['location_mode'].choices = [ - ('', '---------'), - *location_choices, - (CUSTOM_LOCATION, _('Custom…')), - ] self.fields['title'].strip = False - - location = self.instance.location - if location in dict(location_choices): - self.fields['location_mode'].initial = location - elif location: - self.fields['location_mode'].initial = CUSTOM_LOCATION - self.fields['custom_location'].initial = location - - def clean(self): - cleaned_data = super().clean() - location_mode = cleaned_data.get('location_mode') - - if location_mode == CUSTOM_LOCATION: - location = cleaned_data.get('custom_location') - if not location: - self.add_error( - 'custom_location', - _('Enter a custom location.'), - ) - else: - location = location_mode - - self.instance.location = location or None - return cleaned_data diff --git a/src/events/models.py b/src/events/models.py index ba46dfdc9..bc65e67b1 100644 --- a/src/events/models.py +++ b/src/events/models.py @@ -25,6 +25,8 @@ from proposals.models import PrimarySpeaker, TalkProposal, TutorialProposal from sponsors.models import Sponsor +from .fields import EventLocationModelField + MIDNIGHT_TIME = datetime.time(tzinfo=pytz.timezone('Asia/Taipei')) EVENT_DATETIME_START_END = ( @@ -142,7 +144,7 @@ class BaseEvent(ConferenceRelated): (Location.TUTORIAL, _('Tutorial')), (Location.YI_PS, _('Young Inspire / Poster Session')), ] - location = models.CharField( + location = EventLocationModelField( max_length=12, choices=LOCATION_CHOICES, blank=True, diff --git a/src/events/tests/test_custom_event_locations.py b/src/events/tests/test_custom_event_locations.py index d7ba26fab..111fe51a3 100644 --- a/src/events/tests/test_custom_event_locations.py +++ b/src/events/tests/test_custom_event_locations.py @@ -4,7 +4,8 @@ from django.conf import settings from django.utils import timezone -from events.forms import CUSTOM_LOCATION, CustomEventForm +from events.fields import CUSTOM_LOCATION +from events.forms import CustomEventForm from events.models import CustomEvent, Location, Time @@ -18,7 +19,7 @@ def test_custom_event_form_saves_predefined_location(): form = CustomEventForm(data={ 'conference': settings.CONFERENCE_DEFAULT_SLUG, 'title': 'Scheduled event', - 'location_mode': Location.R0, + 'location_0': Location.R0, 'description': '', 'link_path': '', }) @@ -33,8 +34,8 @@ def test_custom_event_form_saves_custom_location(): form = CustomEventForm(data={ 'conference': settings.CONFERENCE_DEFAULT_SLUG, 'title': 'Off-site event', - 'location_mode': CUSTOM_LOCATION, - 'custom_location': 'lobby', + 'location_0': CUSTOM_LOCATION, + 'location_1': 'lobby', 'description': '', 'link_path': '', }) @@ -47,36 +48,38 @@ def test_custom_event_form_saves_custom_location(): def test_custom_event_form_initializes_custom_location(): form = CustomEventForm(instance=CustomEvent(location='lobby')) - assert form.fields['location_mode'].initial == CUSTOM_LOCATION - assert form.fields['custom_location'].initial == 'lobby' + assert form.fields['location'].widget.decompress(form.initial['location']) == [ + CUSTOM_LOCATION, + 'lobby', + ] def test_custom_event_form_requires_custom_location(): form = CustomEventForm(data={ 'conference': settings.CONFERENCE_DEFAULT_SLUG, 'title': 'Off-site event', - 'location_mode': CUSTOM_LOCATION, - 'custom_location': '', + 'location_0': CUSTOM_LOCATION, + 'location_1': '', 'description': '', 'link_path': '', }) assert not form.is_valid() - assert form.errors['custom_location'] == ['Enter a custom location.'] + assert form.errors['location'] == ['Enter a custom location.'] def test_custom_event_form_limits_custom_location_to_twelve_characters(): form = CustomEventForm(data={ 'conference': settings.CONFERENCE_DEFAULT_SLUG, 'title': 'Off-site event', - 'location_mode': CUSTOM_LOCATION, - 'custom_location': 'x' * 13, + 'location_0': CUSTOM_LOCATION, + 'location_1': 'x' * 13, 'description': '', 'link_path': '', }) assert not form.is_valid() - assert 'custom_location' in form.errors + assert 'location' in form.errors @pytest.mark.django_db diff --git a/src/static/events/admin/custom_event.js b/src/static/events/admin/custom_event.js deleted file mode 100644 index 29a3463bd..000000000 --- a/src/static/events/admin/custom_event.js +++ /dev/null @@ -1,24 +0,0 @@ -(function () { - 'use strict'; - - function setupCustomLocation() { - const locationMode = document.getElementById('id_location_mode'); - const customLocation = document.querySelector('.form-row.field-custom_location'); - if (!locationMode || !customLocation) { - return; - } - - function updateVisibility() { - customLocation.hidden = locationMode.value !== '__custom__'; - } - - locationMode.addEventListener('change', updateVisibility); - updateVisibility(); - } - - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', setupCustomLocation); - } else { - setupCustomLocation(); - } -}()); diff --git a/src/static/events/admin/event_location.js b/src/static/events/admin/event_location.js new file mode 100644 index 000000000..abfb64b2a --- /dev/null +++ b/src/static/events/admin/event_location.js @@ -0,0 +1,25 @@ +(function () { + 'use strict'; + + function setupEventLocations() { + document.querySelectorAll('.event-location-mode').forEach(function (locationMode) { + const customLocation = locationMode.parentElement.querySelector('.event-location-custom'); + if (!customLocation) { + return; + } + + function updateVisibility() { + customLocation.hidden = locationMode.value !== '__custom__'; + } + + locationMode.addEventListener('change', updateVisibility); + updateVisibility(); + }); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', setupEventLocations); + } else { + setupEventLocations(); + } +}()); From 36a595b1a5707b322c5e238de3bdece2430e9de6 Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Mon, 17 Aug 2026 02:48:47 +0900 Subject: [PATCH 8/9] feat: Adjust custom location input layout --- src/events/fields.py | 8 ++++++++ src/static/events/admin/event_location.css | 6 ++++++ 2 files changed, 14 insertions(+) create mode 100644 src/static/events/admin/event_location.css diff --git a/src/events/fields.py b/src/events/fields.py index 178f37e4d..3d038896f 100644 --- a/src/events/fields.py +++ b/src/events/fields.py @@ -1,6 +1,7 @@ from django import forms from django.core import exceptions from django.db import models +from django.utils.html import format_html from django.utils.text import capfirst from django.utils.translation import gettext_lazy as _ @@ -23,6 +24,13 @@ def __init__(self, choices, max_length, attrs=None): ] super().__init__(widgets, attrs) + def render(self, name, value, attrs=None, renderer=None): + rendered_widget = super().render(name, value, attrs, renderer) + return format_html( + '', + rendered_widget, + ) + def decompress(self, value): location_choices = dict(self.widgets[0].choices) if value in location_choices: diff --git a/src/static/events/admin/event_location.css b/src/static/events/admin/event_location.css new file mode 100644 index 000000000..1a838c3f4 --- /dev/null +++ b/src/static/events/admin/event_location.css @@ -0,0 +1,6 @@ +.form-row .event-location-widget { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 6px; +} From 395847ccc152758a4423db15664dd60757ec4cfe Mon Sep 17 00:00:00 2001 From: Kenji Pa Date: Mon, 17 Aug 2026 02:55:05 +0900 Subject: [PATCH 9/9] =?UTF-8?q?chore:=20=E8=A1=9D=E5=88=BA=E9=96=8B?= =?UTF-8?q?=E7=99=BC=20/=20=E9=96=8B=E6=94=BE=E7=A9=BA=E9=96=93=20->=20?= =?UTF-8?q?=E9=96=8B=E6=94=BE=E7=A9=BA=E9=96=93;=20Young=20Inspire=20/=20?= =?UTF-8?q?=E6=B5=B7=E5=A0=B1=E5=B1=95=20->=20=E6=B5=B7=E5=A0=B1=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locale/en_US/LC_MESSAGES/django.po | 4 ++-- src/locale/zh_Hant/LC_MESSAGES/django.po | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 75f57caa2..2ef0f7079 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -391,7 +391,7 @@ msgstr "R4" #: events/models.py:142 msgid "Sprint / Open Space" -msgstr "Sprint / Open Space" +msgstr "Sprint" #: events/models.py:143 templates/pycontw-2016/_includes/nav/front_nav.html:46 msgid "Tutorial" @@ -399,7 +399,7 @@ msgstr "Tutorial" #: events/models.py:144 msgid "Young Inspire / Poster Session" -msgstr "Young Inspire / Poster Session" +msgstr "Poster Session" #: events/models.py:206 msgid "is break event" diff --git a/src/locale/zh_Hant/LC_MESSAGES/django.po b/src/locale/zh_Hant/LC_MESSAGES/django.po index 8fb3e4683..1d9526f0c 100644 --- a/src/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/locale/zh_Hant/LC_MESSAGES/django.po @@ -398,7 +398,7 @@ msgstr "R4" #: events/models.py:142 msgid "Sprint / Open Space" -msgstr "衝刺開發 / 開放空間" +msgstr "開放空間" #: events/models.py:143 templates/pycontw-2016/_includes/nav/front_nav.html:46 msgid "Tutorial" @@ -406,7 +406,7 @@ msgstr "專業課程" #: events/models.py:144 msgid "Young Inspire / Poster Session" -msgstr "Young Inspire / 海報展" +msgstr "海報展" #: events/models.py:206 msgid "is break event"