diff --git a/packages/next/src/next-fileupload/isEligibleRequest.ts b/packages/next/src/next-fileupload/isEligibleRequest.ts index 3632008e6f..f22984be57 100644 --- a/packages/next/src/next-fileupload/isEligibleRequest.ts +++ b/packages/next/src/next-fileupload/isEligibleRequest.ts @@ -1,5 +1,3 @@ -// eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/no-obscure-range -const ACCEPTABLE_CONTENT_TYPE = /multipart\/['"()+-_]+(?:; ?['"()+-_]*)+$/i const UNACCEPTABLE_METHODS = new Set(['GET', 'HEAD', 'DELETE', 'OPTIONS', 'CONNECT', 'TRACE']) const hasBody = (req: Request): boolean => { @@ -13,7 +11,7 @@ const hasAcceptableMethod = (req: Request): boolean => !UNACCEPTABLE_METHODS.has const hasAcceptableContentType = (req: Request): boolean => { const contType = req.headers.get('content-type') - return contType.includes('boundary=') && ACCEPTABLE_CONTENT_TYPE.test(contType) + return contType.includes('multipart/form-data; boundary=') } export const isEligibleRequest = (req: Request): boolean => { diff --git a/packages/payload/src/exports/i18n/zhTw.ts b/packages/payload/src/exports/i18n/zhTw.ts index acb2ecc668..52391f4f90 100644 --- a/packages/payload/src/exports/i18n/zhTw.ts +++ b/packages/payload/src/exports/i18n/zhTw.ts @@ -1 +1 @@ -export { zhTw } from '@payloadcms/translations/languages/zhTw' +export { zhTW } from '@payloadcms/translations/languages/zh-TW' diff --git a/packages/translations/src/exports/all.ts b/packages/translations/src/exports/all.ts index 4e6b32043c..974e37c423 100644 --- a/packages/translations/src/exports/all.ts +++ b/packages/translations/src/exports/all.ts @@ -29,7 +29,7 @@ import { tr } from '../languages/tr.js' import { uk } from '../languages/uk.js' import { vi } from '../languages/vi.js' import { zh } from '../languages/zh.js' -import { zhTw } from '../languages/zhTw.js' +import { zhTW } from '../languages/zh-TW.js' export const translations = { ar, @@ -61,5 +61,5 @@ export const translations = { uk, vi, zh, - 'zh-TW': zhTw, + zhTW, } as SupportedLanguages diff --git a/packages/translations/src/languages/zh-TW.ts b/packages/translations/src/languages/zh-TW.ts new file mode 100644 index 0000000000..206fd0ceba --- /dev/null +++ b/packages/translations/src/languages/zh-TW.ts @@ -0,0 +1,383 @@ +import type { Language } from '../types.js' + +export const zhTW: Language = { + dateFNSKey: 'zh-TW', + translations: { + authentication: { + account: '帳戶', + accountOfCurrentUser: '目前使用者的帳戶', + alreadyActivated: '已經啟用了', + alreadyLoggedIn: '已經登入了', + apiKey: 'API金鑰', + backToLogin: '返回登入頁面', + beginCreateFirstUser: '首先,請建立您的第一個使用者。', + changePassword: '更改密碼', + checkYourEmailForPasswordReset: '請檢查您的電子郵件以獲取安全重設密碼的連結。', + confirmGeneration: '確認生成', + confirmPassword: '確認密碼', + createFirstUser: '建立第一個使用者', + emailNotValid: '提供的電子郵件無效', + emailSent: '電子郵件已寄出', + enableAPIKey: '啟用API金鑰', + failedToUnlock: '解鎖失敗', + forceUnlock: '強制解鎖', + forgotPassword: '忘記密碼', + forgotPasswordEmailInstructions: + '請在下方輸入您的電子郵件。您將收到一封有關如何重設密碼的說明電子郵件。', + forgotPasswordQuestion: '忘記密碼?', + generate: '生成', + generateNewAPIKey: '生成新的API金鑰', + generatingNewAPIKeyWillInvalidate: + '生成新的API金鑰將使之前的金鑰<1>失效。您確定要繼續嗎?', + lockUntil: '鎖定直到', + logBackIn: '重新登入', + logOut: '登出', + loggedIn: '要使用另一個使用者登入前,您需要先<0>登出。', + loggedInChangePassword: '要更改您的密碼,請前往您的<0>帳戶頁面並在那裡編輯您的密碼。', + loggedOutInactivity: '您由於不活躍而被登出了。', + loggedOutSuccessfully: '您已成功登出。', + login: '登入', + loginAttempts: '登入次數', + loginUser: '登入使用者', + loginWithAnotherUser: '要使用另一個使用者登入前,您需要先<0>登出。', + logout: '登出', + logoutUser: '登出使用者', + newAPIKeyGenerated: '新的API金鑰已生成。', + newAccountCreated: + '剛剛為您建立了一個可以存取 {{serverURL}} 的新帳戶。請點擊以下連結或在瀏覽器中貼上以下網址以驗證您的電子郵件:{{verificationURL}}
驗證您的電子郵件後,您將能夠成功登入。', + newPassword: '新的密碼', + resetPassword: '重設密碼', + resetPasswordExpiration: '重設密碼的有效期', + resetPasswordToken: '重設密碼令牌', + resetYourPassword: '重設您的密碼', + stayLoggedIn: '保持登入狀態', + successfullyUnlocked: '已成功解鎖', + unableToVerify: '無法驗證', + verified: '已驗證', + verifiedSuccessfully: '成功驗證', + verify: '驗證', + verifyUser: '驗證使用者', + verifyYourEmail: '驗證您的電子郵件', + youAreInactive: + '您已經有一段時間沒有活動了,為了您的安全,很快就會自動登出。您想保持登入狀態嗎?', + youAreReceivingResetPassword: + '您收到此郵件是因為您(或其他人)已請求重設您帳戶的密碼。請點擊以下連結,或將其貼上到您的瀏覽器中以完成該過程:', + youDidNotRequestPassword: '如果您沒有要求這樣做,請忽略這封郵件,您的密碼將保持不變。', + }, + error: { + accountAlreadyActivated: '該帳戶已被啟用。', + autosaving: '自動儲存該文件時出現了問題。', + correctInvalidFields: '請更正無效區塊。', + deletingFile: '刪除文件時出現了錯誤。', + deletingTitle: '刪除{{title}}時出現了錯誤。請檢查您的網路連線並重試。', + emailOrPasswordIncorrect: '提供的電子郵件或密碼不正確。', + followingFieldsInvalid_one: '下面的字串是無效的:', + followingFieldsInvalid_other: '以下字串是無效的:', + incorrectCollection: '不正確的集合', + invalidFileType: '無效的文件類型', + invalidFileTypeValue: '無效的文件類型: {{value}}', + loadingDocument: '加載ID為{{id}}的文件時出現了問題。', + localesNotSaved_one: '這個語言環境無法被儲存:', + localesNotSaved_other: '以下的語言環境無法被儲存:', + missingEmail: '缺少電子郵件。', + missingIDOfDocument: '缺少需要更新的文檔的ID。', + missingIDOfVersion: '缺少版本的ID。', + missingRequiredData: '缺少必要的數據。', + noFilesUploaded: '沒有上傳文件。', + noMatchedField: '找不到與"{{label}}"匹配的字串', + noUser: '沒有該使用者', + notAllowedToAccessPage: '您沒有權限訪問此頁面。', + notAllowedToPerformAction: '您不被允許執行此操作。', + notFound: '沒有找到請求的資源。', + previewing: '預覽文件時出現了問題。', + problemUploadingFile: '上傳文件時出現了問題。', + tokenInvalidOrExpired: '令牌無效或已過期。', + unPublishingDocument: '取消發布此文件時出現了問題。', + unableToDeleteCount: '無法從 {{total}} 個中刪除 {{count}} 個 {{label}}。', + unableToUpdateCount: '無法從 {{total}} 個中更新 {{count}} 個 {{label}}。', + unauthorized: '未經授權,您必須登錄才能提出這個請求。', + unknown: '發生了一個未知的錯誤。', + unspecific: '發生了一個錯誤。', + userLocked: '該使用者由於有太多次失敗的登錄嘗試而被鎖定。', + valueMustBeUnique: '數值必須是唯一的', + verificationTokenInvalid: '驗證令牌無效。', + }, + fields: { + addLabel: '新增{{label}}', + addLink: '新增連結', + addNew: '新增', + addNewLabel: '新增{{label}}', + addRelationship: '新增關聯', + addUpload: '上傳', + block: '區塊', + blockType: '區塊類型', + blocks: '區塊', + chooseBetweenCustomTextOrDocument: '選擇自定義文件或連結到另一個文件。', + chooseDocumentToLink: '選擇要連結的文件', + chooseFromExisting: '從現有的選擇', + chooseLabel: '選擇{{label}}', + collapseAll: '全部折疊', + customURL: '自定義連結', + editLabelData: '編輯{{label}}資料', + editLink: '編輯連結', + editRelationship: '編輯關聯', + enterURL: '輸入連結', + internalLink: '內部連結', + itemsAndMore: '{{items}} 個,還有 {{count}} 個', + labelRelationship: '{{label}}關聯', + latitude: '緯度', + linkType: '連結類型', + linkedTo: '連結到<0>{{label}}', + longitude: '經度', + newLabel: '新的{{label}}', + openInNewTab: '在新標籤中打開', + passwordsDoNotMatch: '密碼不匹配。', + relatedDocument: '相關文件', + relationTo: '關聯到', + removeRelationship: '移除關聯', + removeUpload: '移除上傳', + saveChanges: '儲存變更', + searchForBlock: '搜尋一個區塊', + selectExistingLabel: '選擇現有的{{label}}', + selectFieldsToEdit: '選擇要編輯的字串', + showAll: '顯示全部', + swapRelationship: '替換關聯', + swapUpload: '替換上傳', + textToDisplay: '要顯示的文字', + toggleBlock: '切換區塊', + uploadNewLabel: '上傳新的{{label}}', + }, + general: { + aboutToDelete: '您即將刪除{{label}} <1>{{title}}。您確定要繼續嗎?', + aboutToDeleteCount_many: '您即將刪除 {{count}} 個 {{label}}', + aboutToDeleteCount_one: '您即將刪除 {{count}} 個 {{label}}', + aboutToDeleteCount_other: '您即將刪除 {{count}} 個 {{label}}', + addBelow: '新增到下方', + addFilter: '新增過濾器', + adminTheme: '管理頁面主題', + and: '和', + applyChanges: '套用更改', + ascending: '升冪', + automatic: '自動', + backToDashboard: '返回到控制面板', + cancel: '取消', + changesNotSaved: '您還有尚未儲存的變更。您確定要離開嗎?', + close: '關閉', + collapse: '折疊', + collections: '集合', + columnToSort: '要排序的欄位', + columns: '欄位', + confirm: '確認', + confirmDeletion: '確認刪除', + confirmDuplication: '確認複製', + copied: '已複製', + copy: '複製', + create: '建立', + createNew: '建立新的', + createNewLabel: '建立新的{{label}}', + created: '已建立', + createdAt: '建立於', + creating: '建立中', + creatingNewLabel: '正在建立新的{{label}}', + dark: '深色', + dashboard: '控制面板', + delete: '刪除', + deletedCountSuccessfully: '已成功刪除 {{count}} 個 {{label}}。', + deletedSuccessfully: '已成功刪除。', + deleting: '刪除中...', + descending: '降冪', + deselectAllRows: '取消選擇全部', + duplicate: '複製', + duplicateWithoutSaving: '複製而不儲存變更。', + edit: '編輯', + editLabel: '編輯{{label}}', + editing: '編輯中', + editingLabel_many: '編輯 {{count}} 個 {{label}}', + editingLabel_one: '編輯 {{count}} 個 {{label}}', + editingLabel_other: '編輯 {{count}} 個 {{label}}', + email: '電子郵件', + emailAddress: '電子郵件地址', + enterAValue: '輸入一個值', + error: '錯誤', + errors: '錯誤', + fallbackToDefaultLocale: '回到預設的語言', + filter: '過濾器', + filterWhere: '過濾{{label}}', + filters: '過濾器', + globals: '全域', + language: '語言', + lastModified: '最後修改', + leaveAnyway: '無論如何都要離開', + leaveWithoutSaving: '不儲存直接離開', + light: '亮色', + livePreview: '預覽', + loading: '載入中...', + locale: '語言環境', + locales: '語言環境', + menu: '菜單', + moveDown: '向下移動', + moveUp: '向上移動', + newPassword: '新密碼', + noFiltersSet: '沒有設定過濾器', + noLabel: '<沒有{{label}}>', + noOptions: '沒有選項', + noResults: '沒有找到{{label}}。{{label}}並不存在或沒有符合您上面所指定的過濾器。', + noValue: '沒有數值', + none: '無', + notFound: '未找到', + nothingFound: '沒有找到任何東西', + of: '的', + open: '打開', + or: '或', + order: '排序', + pageNotFound: '未找到頁面', + password: '密碼', + payloadSettings: 'Payload設定', + perPage: '每一頁: {{limit}} 個', + remove: '移除', + reset: '重設', + row: '行', + rows: '行', + save: '儲存', + saving: '儲存中...', + searchBy: '搜尋{{label}}', + selectAll: '選擇所有 {{count}} 個 {{label}}', + selectAllRows: '選擇所有行', + selectValue: '選擇一個值', + selectedCount: '已選擇 {{count}} 個 {{label}}', + showAllLabel: '顯示所有{{label}}', + sorryNotFound: '對不起,沒有找到您請求的東西。', + sort: '排序', + sortByLabelDirection: '按{{label}} {{direction}}排序', + stayOnThisPage: '停留在此頁面', + submissionSuccessful: '成功送出。', + submit: '送出', + successfullyCreated: '成功建立{{label}}', + successfullyDuplicated: '成功複製{{label}}', + thisLanguage: '中文 (繁體)', + titleDeleted: '{{label}} "{{title}}"已被成功刪除。', + unauthorized: '未經授權', + unsavedChangesDuplicate: '您有還沒儲存的修改,確定要繼續複製嗎?', + untitled: '無標題', + updatedAt: '更新於', + updatedCountSuccessfully: '已成功更新 {{count}} 個 {{label}}。', + updatedSuccessfully: '更新成功。', + updating: '更新中', + uploading: '上傳中', + user: '使用者', + users: '使用者', + value: '值', + welcome: '歡迎', + }, + operators: { + contains: '包含', + equals: '等於', + exists: '存在', + isGreaterThan: '大於', + isGreaterThanOrEqualTo: '大於等於', + isIn: '在', + isLessThan: '小於', + isLessThanOrEqualTo: '小於或等於', + isLike: '就像', + isNotEqualTo: '不等於', + isNotIn: '不在', + near: '附近', + }, + upload: { + crop: '裁剪', + cropToolDescription: '拖動所選區域的角落,繪製一個新區域或調整以下的值。', + dragAndDrop: '拖放一個檔案', + dragAndDropHere: '或在這裡拖放一個檔案', + editImage: '編輯圖像', + fileName: '檔案名稱', + fileSize: '檔案大小', + focalPoint: '焦點', + focalPointDescription: '直接在預覽中拖動焦點或調整下面的值。', + height: '高度', + lessInfo: '更少資訊', + moreInfo: '更多資訊', + previewSizes: '預覽尺寸', + selectCollectionToBrowse: '選擇一個要瀏覽的集合', + selectFile: '選擇一個文件', + setCropArea: '設置裁剪區域', + setFocalPoint: '設置焦點', + sizes: '尺寸', + sizesFor: '{{label}}的尺寸', + width: '寬度', + }, + validation: { + emailAddress: '請輸入一個有效的電子郵件地址。', + enterNumber: '請輸入一個有效的數字。', + fieldHasNo: '這個字串沒有{{label}}', + greaterThanMax: '{{value}}超過了允許的最大{{label}},該最大值為{{max}}。', + invalidInput: '這個字串有一個無效的輸入。', + invalidSelection: '這個字串有一個無效的選擇。', + invalidSelections: '這個字串有以下無效的選擇:', + lessThanMin: '{{value}}小於允許的最小{{label}},該最小值為{{min}}。', + limitReached: '已達限制,只能添加{{max}}個項目。', + longerThanMin: '該值必須大於{{minLength}}字串的最小長度', + notValidDate: '"{{value}}"不是一個有效的日期。', + required: '該字串為必填項目。', + requiresAtLeast: '該字串至少需要 {{count}} 個 {{label}}。', + requiresNoMoreThan: '該字串要求不超過 {{count}} 個 {{label}。', + requiresTwoNumbers: '該字串需要兩個數字。', + shorterThanMax: '該值長度必須小於{{maxLength}}個字元', + trueOrFalse: '該字串只能等於是或否。', + validUploadID: '該字串不是有效的上傳ID。', + }, + version: { + type: '類型', + aboutToPublishSelection: '您確定即將發佈所選的 {{label}} 嗎?', + aboutToRestore: '您將把這個文件{{label}}回復到{{versionDate}}時的狀態', + aboutToRestoreGlobal: '您要將痊域的{{label}}回復到{{versionDate}}時的狀態', + aboutToRevertToPublished: '您將要將這個文件的內容還原到它的發佈狀態。您確定嗎?', + aboutToUnpublish: '您即將取消發佈這個文件。您確定嗎?', + aboutToUnpublishSelection: '您即將取消發佈所選內容中的所有 {{label}}。您確定嗎?', + autosave: '自動儲存', + autosavedSuccessfully: '自動儲存成功。', + autosavedVersion: '自動儲存的版本', + changed: '已更改', + compareVersion: '對比版本:', + confirmPublish: '確認發佈', + confirmRevertToSaved: '確認回復到儲存狀態', + confirmUnpublish: '確認取消發佈', + confirmVersionRestoration: '確認版本回復', + currentDocumentStatus: '目前{{docStatus}}文件', + draft: '草稿', + draftSavedSuccessfully: '草稿儲存成功。', + lastSavedAgo: '上次儲存在{{distance}}之前', + noFurtherVersionsFound: '沒有發現其他版本', + noRowsFound: '沒有發現{{label}}', + preview: '預覽', + problemRestoringVersion: '回復這個版本時發生了問題', + publish: '發佈', + publishChanges: '發佈修改', + published: '已發佈', + restoreThisVersion: '回復此版本', + restoredSuccessfully: '回復成功。', + restoring: '回復中...', + revertToPublished: '還原到已發佈的版本', + reverting: '還原中...', + saveDraft: '儲存草稿', + selectLocales: '選擇要顯示的語言', + selectVersionToCompare: '選擇要比較的版本', + showLocales: '顯示語言:', + showingVersionsFor: '顯示版本為:', + status: '狀態', + unpublish: '取消發佈', + unpublishing: '取消發佈中...', + version: '版本', + versionCount_many: '發現 {{count}}個版本', + versionCount_none: '沒有發現任何版本', + versionCount_one: '找到 {{count}} 個版本', + versionCount_other: '找到 {{count}} 個版本', + versionCreatedOn: '版本 {{version}} 建立於:', + versionID: '版本ID', + versions: '版本', + viewingVersion: '正在查看{{entityLabel}} {{documentTitle}}的版本', + viewingVersionGlobal: '正在查看全域{{entityLabel}}的版本', + viewingVersions: '正在查看{{entityLabel}} {{documentTitle}}的版本', + viewingVersionsGlobal: '正在查看全域{{entityLabel}}的版本', + }, + }, +} diff --git a/packages/translations/src/utilities/languages.ts b/packages/translations/src/utilities/languages.ts index ca9c98fa2a..164dda0e20 100644 --- a/packages/translations/src/utilities/languages.ts +++ b/packages/translations/src/utilities/languages.ts @@ -32,7 +32,7 @@ export const acceptedLanguages = [ 'uk', 'vi', 'zh', - 'zh-TW', + 'zhTW', /** * Languages not implemented: