diff --git a/apps/landing/public/locales/zh-Hant/blog.json b/apps/landing/public/locales/zh-Hant/blog.json
new file mode 100644
index 000000000..1b3a4a776
--- /dev/null
+++ b/apps/landing/public/locales/zh-Hant/blog.json
@@ -0,0 +1,5 @@
+{
+ "recentPosts": "最新貼文",
+ "blogTitle": "Rallly - 部落格",
+ "blogDescription": "關於 Rallly 的新聞、更新與公告。"
+}
diff --git a/apps/landing/public/locales/zh-Hant/common.json b/apps/landing/public/locales/zh-Hant/common.json
new file mode 100644
index 000000000..2b23c9042
--- /dev/null
+++ b/apps/landing/public/locales/zh-Hant/common.json
@@ -0,0 +1,27 @@
+{
+ "login": "登入",
+ "links": "一覽",
+ "blog": "部落格",
+ "discussions": "討論區",
+ "footerCredit": "由 @imlukevella 製作",
+ "footerSponsor": "此專案由用戶自治,請考慮透過 捐贈 支持本專案。",
+ "language": "語言",
+ "poweredBy": "技術支持",
+ "privacyPolicy": "隱私權政策",
+ "support": "技術支援",
+ "cookiePolicy": "Cookie政策",
+ "termsOfUse": "使用條款",
+ "volunteerTranslator": "協助我們翻譯這個網站",
+ "notFoundTitle": "404:頁面不存在",
+ "notFoundDescription": "我們無法找到您要查找的頁面。",
+ "goToHome": "回到首頁",
+ "goToApp": "前往APP",
+ "pricing": "定價",
+ "bestDoodleAlternative": "最好的 Doodle 替代品",
+ "freeSchedulingPoll": "免費的日程投票",
+ "findATime": "找個時間見面",
+ "getStarted": "開始使用",
+ "availabilityPoll": "日程投票",
+ "solutions": "解決方案",
+ "howItWorks": "Rallly的運作方式"
+}
diff --git a/apps/landing/public/locales/zh-Hant/home.json b/apps/landing/public/locales/zh-Hant/home.json
new file mode 100644
index 000000000..4323c34cb
--- /dev/null
+++ b/apps/landing/public/locales/zh-Hant/home.json
@@ -0,0 +1,40 @@
+{
+ "createPageLikeThis": "僅需幾秒即可建立一個這樣的頁面!",
+ "noLoginRequired": "無需登入",
+ "headline": "捨棄繁瑣的郵件來回溝通",
+ "subheading": "簡化您的日程安排流程並節省時間",
+ "pcmagQuote": "「可在極短的時間內建立日程投票」",
+ "hubspotQuote": "「最適合大型組織的日程投票解決方案」",
+ "goodfirmsQuote": "「Rallly的獨特之處在於其簡潔性,且操作簡單。」",
+ "popsciQuote": "「如果您希望保持RSVP簡單,Rallly是完美的選擇。」",
+ "ericQuote": "「如果您主要使用電子郵件安排日程,我強烈鼓勵您試用Rallly簡化排程任務,使工作更加輕鬆、有條理。」",
+ "viaTrustpilot": "引述自 Trustpilot",
+ "ericJobTitle": "麻省理工學院行政助理",
+ "statsUsersRegistered": "超過 45,000 位用戶使用",
+ "statsPollsCreated": "已建立超過10萬個日程投票",
+ "statsLanguagesSupported": "支援10種以上語言",
+ "hint": "無需登入即可免費使用",
+ "doodleAlternative": "最好的 Doodle 替代品",
+ "doodleAlternativeDescription": "Rallly 是人人引頸盼望的 Doodle 替代品。成千上萬的用戶已改用 Rallly,享受專業、零廣告、直覺操作的使用者介面帶來的日程排程體驗。 ",
+ "availabilityPollCta": "建立日程投票",
+ "availabilityPollMetaTitle": "日程投票 | 以 Rallly 簡化日程安排流程",
+ "availabilityPollMetaDescription": "以 Rallly 簡化會議、活動的日程安排流程,並考慮每人的行程狀況,帶來流暢、高效率的日程安排體驗。",
+ "availabilityPollTitle": "日程投票",
+ "availabilityPollDescription": "很難找到每個人都滿意的會議時間?使用「日程投票」來簡化您的排程,這是一個強大的工具,旨在簡化和優化您的活動和會議規劃。",
+ "createAPoll": "建立日程投票",
+ "doodleAlternativeMetaTitle": "免費且最棒的 Doodle 替代品 | Rallly",
+ "doodleAlternativeMetaDescription": "正在尋找 Doodle 的替代品?試試 Rallly!免費、易用且不需要帳戶",
+ "findATimeMetaTitle": "找個時間見面 | Rallly",
+ "findATimeMetaDescription": "在幾秒鐘內建立會議投票,無需登入。",
+ "findATimeTitle": "找個時間見面",
+ "findATimeDescription": "建立日程投票,並讓您的參與者們投票決定最佳的會議時間。",
+ "createASchedulingPoll": "建立日程投票",
+ "freeSchedulingPollMetaTitle": "免費日程投票 | Rallly",
+ "freeSchedulingPollMetaDescription": "在幾秒鐘內建立日程投票。適合籌辦會議、活動、研討會、運動隊……等。",
+ "freeSchedulingPollTitle": "正在尋找免費的日程投票工具?",
+ "freeSchedulingPollDescription": "Rallly 可協助您建立美觀、易用的日程投票,以便您找到下次活動的最佳時間。",
+ "new": "新",
+ "metaTitle": "Rallly - 安排團體會議",
+ "metaDescription": "通過日程投票找出最合適的日期或時間。免費的 Doodle 替代品。",
+ "selfHostingBlog": "本地部署 Rallly 3.0"
+}
diff --git a/apps/landing/public/locales/zh-Hant/pricing.json b/apps/landing/public/locales/zh-Hant/pricing.json
new file mode 100644
index 000000000..438974371
--- /dev/null
+++ b/apps/landing/public/locales/zh-Hant/pricing.json
@@ -0,0 +1,30 @@
+{
+ "pricing": "定價",
+ "pricingDescription": "無需登入即可免費使用。",
+ "freeForever": "永久免費",
+ "planPro": "Pro版",
+ "annualBillingDescription": "每月,按年計費",
+ "monthlyBillingDescription": "每月",
+ "upgrade": "升級",
+ "faq": "常見問題",
+ "canUseFree": "我可以免費使用 Rallly 嗎?",
+ "whyUpgrade": "為什麼要升級?",
+ "howToUpgrade": "如何升級至付費方案?",
+ "howToUpgradeAnswer": "如需升級,請前往您的 帳單 並點擊 升級。",
+ "cancelSubscription": "如何取消訂閱?",
+ "cancelSubscriptionAnswer": "您可以隨時前往 帳單 取消訂閱。取消訂閱後,您仍可存取付費方案的功能直至計費週期結束。在那之後,您將降級為免費方案。",
+ "billingPeriodMonthly": "按月計費",
+ "billingPeriodYearly": "按年計費",
+ "planFreeDescription": "適合一般用戶",
+ "limitedAccess": "取得所有功能",
+ "pollsDeleted": "當投票轉為未啟用時,投票將自動被刪除",
+ "planProDescription": "適合專業用戶",
+ "accessAllFeatures": "取得所有功能",
+ "getEarlyAccess": "搶先使用新功能",
+ "canUseFreeAnswer2": "是的,Rallly的大部分功能都是免費的,且對多數用戶來說,可能永遠不需要支付任何費用。然而,有些功能僅開放付費用戶使用,這些付費功能旨在幫助您充分發揮 Rallly 的潛力。",
+ "whyUpgradeAnswer2": "如果您經常使用或工作需要 Rallly,請可考慮升級至Pro方案。目前的定價為早期支持者優惠且很快就會調整。現在升級,您將能取得高品質的日程安排工具並永久保有目前定價,不受未來定價調整影響。",
+ "upgradeNowSaveLater": "現在就升級,未來省一筆",
+ "earlyAdopterDescription": "作為早期支持者,您將保有現在的定價且不會被未來的定價調整影響。",
+ "planFree": "免費",
+ "keepPollsIndefinitely": "無限期保留投票"
+}
diff --git a/apps/web/public/locales/zh-Hant/app.json b/apps/web/public/locales/zh-Hant/app.json
new file mode 100644
index 000000000..3ba1c8c77
--- /dev/null
+++ b/apps/web/public/locales/zh-Hant/app.json
@@ -0,0 +1,232 @@
+{
+ "12h": "12小時制",
+ "24h": "24小時制",
+ "addTimeOption": "新增時間選項",
+ "alreadyRegistered": "已有帳戶? 立即登入",
+ "applyToAllDates": "套用至所有日期",
+ "areYouSure": "你確定嗎?",
+ "cancel": "取消",
+ "changeName": "重新命名",
+ "settings": "進階設定",
+ "changeNameDescription": "替該位參與者命名。",
+ "changeNameInfo": "這不會影響任何現有的投票。",
+ "comments": "留言",
+ "continue": "下一步",
+ "copied": "複製成功",
+ "createAnAccount": "建立帳戶",
+ "createdBy": "由 {name} 發起",
+ "createPoll": "建立投票",
+ "delete": "刪除",
+ "deleteDate": "刪除日期",
+ "deletedPoll": "已刪除投票",
+ "deletedPollInfo": "該投票不存在。",
+ "deleteParticipant": "刪除 {name}?",
+ "deleteParticipantDescription": "您確定要刪除此位參與者嗎?此操作無法復原。",
+ "deletePoll": "刪除投票",
+ "deletePollDescription": "與此投票相關的所有資料都將被刪除!此操作無法復原。",
+ "deletingOptionsWarning": "您正在刪除參與者已投票的選項,他們的投票也將被刪除!",
+ "description": "描述",
+ "descriptionPlaceholder": "嗨各位,請選擇你們方便的日期!",
+ "editDetails": "編輯投票詳情",
+ "editOptions": "編輯投票選項",
+ "editVotes": "編輯投票",
+ "email": "電子郵件",
+ "emailNotAllowed": "無法使用此電子郵件地址",
+ "emailPlaceholder": "jessie.smith@example.com",
+ "exportToCsv": "輸出至 CSV",
+ "forgetMe": "忘記我",
+ "guest": "訪客",
+ "ifNeedBe": "如果需要",
+ "location": "地點",
+ "locationPlaceholder": "Joe 的咖啡店",
+ "login": "登入",
+ "loginWith": "以 {provider} 登入",
+ "logout": "登出",
+ "manage": "管理",
+ "mixedOptionsDescription": "您無法在同個投票中同時使用日期及時間選項。您想保留哪一個?",
+ "mixedOptionsKeepDates": "保留日期選項",
+ "mixedOptionsKeepTimes": "保留時間選項",
+ "mixedOptionsTitle": "請稍候… 🤔",
+ "monthView": "月",
+ "name": "姓名",
+ "namePlaceholder": "杰西 · 史密斯",
+ "newParticipant": "新參與者",
+ "newParticipantFormDescription": "請填寫以下表格來送出您的投票。",
+ "newPoll": "新日程投票",
+ "nextMonth": "下個月",
+ "no": "否",
+ "noDatesSelected": "尚未選擇日期",
+ "noVotes": "沒有人投給此選項",
+ "optional": "選填",
+ "preferences": "偏好設定",
+ "previousMonth": "上個月",
+ "register": "註冊",
+ "requiredString": "“{name}” 為必填",
+ "response": "回覆",
+ "save": "儲存",
+ "saveInstruction": "選擇您有空的時間,並點擊 {action}",
+ "sendFeedback": "意見回饋",
+ "specifyTimes": "指定時間",
+ "specifyTimesDescription": "為每個選項設定開始和結束時間",
+ "stepSummary": "步驟 {current} / {total}",
+ "submit": "送出",
+ "timeFormat": "時間格式",
+ "timeZone": "時區",
+ "title": "標題",
+ "titlePlaceholder": "月度會議",
+ "today": "今天",
+ "userAlreadyExists": "使用該電子郵件地址的用戶已經存在",
+ "userNotFound": "使用該電子郵件地址的用戶不存在",
+ "validEmail": "請輸入有效的電子郵件地址",
+ "verificationCodeHelp": "沒有收到電子郵件?請檢查您的垃圾信箱。",
+ "verificationCodePlaceholder": "輸入6位驗證碼",
+ "verificationCodeSent": "驗證碼已發送至 {email} 更改電子郵件地址",
+ "verifyYourEmail": "驗證您的電子郵件地址",
+ "startOfWeek": "每週開始日",
+ "weekView": "週",
+ "wrongVerificationCode": "您的驗證碼不正確或已過期",
+ "yes": "有空",
+ "you": "您",
+ "yourName": "輸入您的姓名…",
+ "common_language": "語言",
+ "common_support": "技術支援",
+ "errors_notFoundTitle": "404:頁面不存在",
+ "errors_notFoundDescription": "我們無法找到您要查找的頁面。",
+ "errors_goToHome": "回到首頁",
+ "optionCount": "{count, plural, other {# 個選項}}",
+ "participantCount": "{count, plural, other {# 位參與者}}",
+ "addComment": "新增留言",
+ "profile": "個人資料",
+ "polls": "日程投票",
+ "showMore": "顯示更多…",
+ "timeZoneSelect__defaultValue": "選擇時區…",
+ "timeZoneSelect__noOption": "未找到選項",
+ "timeZoneSelect__inputPlaceholder": "搜尋…",
+ "poweredByRallly": "由 {name} 提供支持",
+ "participants": "參與者",
+ "language": "語言",
+ "languageDescription": "變更您的語言偏好",
+ "dateAndTime": "日期和時間",
+ "profileDescription": "設定您的個人資料",
+ "dates": "日期",
+ "menu": "選單",
+ "useLocaleDefaults": "使用本地預設值",
+ "inviteParticipantsDescription": "複製並分享此連結即可開始收集來自您的參與者的回覆。",
+ "inviteLink": "邀請連結",
+ "inviteParticipantLinkInfo": "任何收到此連結的人都可以參與你的投票。",
+ "support": "技術支援",
+ "billing": "帳單",
+ "guestPollAlertDescription": "<0>建立一個帳戶0> 或 <1>登入1> 來認領這個投票。",
+ "guestPollAlertTitle": "如果您清除 cookies,您將喪失管理此投票的權限!",
+ "attendeeCount": "{count, plural, other {# 位參與者}}",
+ "notificationsValue": "通知:{value}",
+ "notificationsOn": "啟用",
+ "notificationsOff": "關閉",
+ "pollStatusOpen": "啟用中",
+ "pollStatusPaused": "暫停中",
+ "pollStatusClosed": "已完成",
+ "reopenPoll": "重新打開投票",
+ "resumePoll": "繼續",
+ "pausePoll": "暫停",
+ "finishPoll": "作出最終決定",
+ "finalize": "最終決定",
+ "allDay": "全天",
+ "permissionDenied": "未授權",
+ "permissionDeniedDescription": "如果您是投票的建立者,請登入以存取您的投票",
+ "loginDifferent": "切換用戶",
+ "share": "分享",
+ "timeShownIn": "目前以 {timeZone} 時區顯示",
+ "editDetailsDescription": "更改活動詳情",
+ "finalizeDescription": "選擇一個最終日期",
+ "notificationsGuestTooltip": "建立一個帳戶或登入以開啟通知",
+ "planFree": "免費版",
+ "dateAndTimeDescription": "變更您的日期和時間偏好",
+ "createdTime": "建立於 {relativeTime}",
+ "permissionDeniedParticipant": "如果您不是投票的建立者,您應該前往邀請頁面。",
+ "goToInvite": "前往邀請頁面",
+ "planPro": "Pro版",
+ "Billing": "帳單",
+ "subscriptionUpdatePayment": "更新付款資訊",
+ "subscriptionCancel": "取消訂閱",
+ "billingStatus": "帳單狀態",
+ "billingStatusDescription": "管理您的訂閱和帳單詳情",
+ "freeForever": "永久免費",
+ "annualBillingDescription": "每月,按年計費",
+ "billingStatusState": "狀態",
+ "billingStatusActive": "啟用中",
+ "billingStatusPaused": "暫停中",
+ "billingStatusDeleted": "已取消",
+ "endDate": "結束日期",
+ "dueDate": "下次付款時間",
+ "billingStatusPlan": "方案",
+ "billingPeriod": "週期",
+ "billingPeriodMonthly": "按月計費",
+ "billingPeriodYearly": "按年計費",
+ "monthlyBillingDescription": "每月",
+ "plan_extendedPollLife": "無限期保留投票",
+ "becomeATranslator": "協助翻譯",
+ "noPolls": "沒有投票",
+ "noPollsDescription": "立即建立一個新日程投票!",
+ "event": "活動",
+ "describeYourEvent": "描述您的活動內容",
+ "calendar": "行事曆",
+ "selectPotentialDates": "為您的活動選擇日期或時間",
+ "optionalLabel": "(選填)",
+ "calendarHelp": "您的投票中必須包含至少一個選項",
+ "editSettings": "編輯進階設定",
+ "commentPlaceholder": "留言 (任何人都可看見此留言)",
+ "disableComments": "關閉留言區",
+ "clockPreferences": "時間偏好",
+ "clockPreferencesDescription": "設定您的偏好時區和時間格式",
+ "featureRequest": "提出新功能建議",
+ "bugReport": "回報問題",
+ "getSupport": "取得支援",
+ "feedback": "回饋",
+ "duplicate": "複製",
+ "duplicateDescription": "基於此投票建立一個新投票",
+ "duplicateTitleLabel": "標題",
+ "duplicateTitleDescription": "小提醒:為您的投票建立一個獨一無二的標題!",
+ "proFeature": "Pro 版功能",
+ "upgradeOverlaySubtitle2": "請升級至Pro版以使用此功能,這將幫助我們維持Rallly的營運 :)",
+ "upgrade": "升級",
+ "notToday": "下次再說",
+ "continueAsGuest": "以訪客身份繼續",
+ "scrollLeft": "向左滾動",
+ "scrollRight": "向右滾動",
+ "shrink": "收縮",
+ "expand": "展開",
+ "activeSubscription": "感謝您訂閱 Rallly Pro。您可從帳單頁面中管理您的訂閱與帳單詳情。",
+ "billingPortal": "帳單頁面",
+ "supportDescription": "需要任何幫助?",
+ "supportBilling": "如果您需要任何幫助,請聯絡我們。",
+ "contactSupport": "與客服聯繫",
+ "planFreeDescription": "適合一般用戶",
+ "currentPlan": "目前方案",
+ "limitedAccess": "取得所有功能",
+ "pollsDeleted": "當投票轉為未啟用時,投票將自動被刪除",
+ "planProDescription": "適合專業用戶",
+ "accessAllFeatures": "取得所有功能",
+ "earlyAccess": "搶先使用新功能",
+ "earlyAdopterDescription": "作為早期支持者,您將保有現在的定價且不會被未來的定價調整影響。",
+ "upgradeNowSaveLater": "現在就升級,未來省一筆",
+ "savePercent": "省下 {percent}%",
+ "priceIncreaseSoon": "定價很快就會調整。",
+ "lockPrice": "立即升級以便永久享有本定價。",
+ "features": "取得所有免費及付費版功能!",
+ "noAds": "零廣告",
+ "supportProject": "支持這個專案",
+ "pricing": "定價",
+ "pleaseUpgrade": "請升級至Pro版以使用本功能",
+ "pollSettingsDescription": "自訂您的日程投票的細節",
+ "requireParticipantEmailLabel": "要求參與者必填電子郵件地址",
+ "hideParticipantsLabel": "向參與者隱藏其他參與者名單",
+ "hideScoresLabel": "在參與者完成投票前隱藏結果",
+ "authErrorTitle": "登入失敗",
+ "authErrorDescription": "登入時發生錯誤,請再試一次。",
+ "authErrorCta": "前往登入",
+ "continueAs": "以下列身份繼續",
+ "finalizeFeature": "作出最終決定",
+ "duplicateFeature": "複製",
+ "pageMovedDescription": "重新導向至 {newUrl}",
+ "notRegistered": "沒有帳戶? 立即註冊"
+}
diff --git a/apps/web/public/locales/zh/app.json b/apps/web/public/locales/zh/app.json
index c311eae64..9ee8cf67a 100644
--- a/apps/web/public/locales/zh/app.json
+++ b/apps/web/public/locales/zh/app.json
@@ -32,7 +32,7 @@
"editVotes": "編輯投票",
"email": "電子郵件",
"emailNotAllowed": "無法使用此電子郵件地址",
- "emailPlaceholder": "jessie.smith@example.com",
+ "emailPlaceholder": "jessi.smith@example.com",
"exportToCsv": "輸出至 CSV",
"forgetMe": "忘記我",
"guest": "訪客",
diff --git a/apps/web/src/utils/dayjs.tsx b/apps/web/src/utils/dayjs.tsx
index 986968506..43b48c85d 100644
--- a/apps/web/src/utils/dayjs.tsx
+++ b/apps/web/src/utils/dayjs.tsx
@@ -138,6 +138,11 @@ const dayjsLocales: Record<
timeFormat: "hours24",
import: () => import("dayjs/locale/zh"),
},
+ "zh-Hant": {
+ weekStart: 0,
+ timeFormat: "hours24",
+ import: () => import("dayjs/locale/zh-tw"),
+ },
vi: {
weekStart: 1,
timeFormat: "hours24",
diff --git a/packages/languages/languages.json b/packages/languages/languages.json
index c66f925fd..098b3c9f3 100644
--- a/packages/languages/languages.json
+++ b/packages/languages/languages.json
@@ -19,5 +19,6 @@
"fi": "Suomi",
"sv": "Svenska",
"tr": "Türkçe",
- "zh": "汉语"
+ "zh": "简体中文",
+ "zh-Hant": "繁體中文"
}