diff --git a/src/components/cards/MediaCard.vue b/src/components/cards/MediaCard.vue index c10618b7..9a7905b5 100644 --- a/src/components/cards/MediaCard.vue +++ b/src/components/cards/MediaCard.vue @@ -14,6 +14,7 @@ import SubscribeEditDialog from '../dialog/SubscribeEditDialog.vue' import SearchSiteDialog from '@/components/dialog/SearchSiteDialog.vue' import SubscribeSeasonDialog from '../dialog/SubscribeSeasonDialog.vue' import { useI18n } from 'vue-i18n' +import { getMeidaTypeText } from '@/types/i18n-type' // 国际化 const { t } = useI18n() @@ -486,7 +487,7 @@ function onRemoveSubscribe() { :class="getChipColor(props.media?.type || '')" class="absolute left-2 top-2 bg-opacity-80 text-white font-bold" > - {{ props.media?.type }} + {{ getMeidaTypeText(props.media?.type) }} diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index e805e71f..6ea8179f 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -22,6 +22,13 @@ export default { saving: 'Saving', reset: 'Reset', }, + mediaType: { + movie: 'Movie', + tv: 'TV Show', + anime: 'Anime', + collection: 'Collection', + unknown: 'Unknown', + }, theme: { light: 'Light', dark: 'Dark', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 90d8f6a2..81f3f1b9 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -22,6 +22,13 @@ export default { saving: '保存中', reset: '重置', }, + mediaType: { + movie: '电影', + tv: '电视剧', + anime: '动漫', + collection: '合集', + unknown: '未知', + }, theme: { light: '浅色', dark: '深色', diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts new file mode 100644 index 00000000..12ba377c --- /dev/null +++ b/src/locales/zh-TW.ts @@ -0,0 +1,1401 @@ +export default { + common: { + confirm: '確認', + cancel: '取消', + save: '保存', + delete: '刪除', + edit: '編輯', + add: '添加', + search: '搜索', + loading: '加載中', + success: '成功', + error: '錯誤', + openInNewWindow: '在新窗口中打開', + inputMessage: '輸入消息或命令', + send: '發送', + noData: '暫無數據', + noContent: '沒有找到相關內容', + all: '全部', + default: '默認', + name: '名稱', + create: '新建', + saving: '保存中', + reset: '重置', + }, + mediaType: { + movie: '電影', + tv: '電視劇', + anime: '動漫', + collection: '合集', + unknown: '未知', + }, + theme: { + light: '淺色', + dark: '深色', + auto: '跟隨系統', + transparent: '透明', + purple: '幻紫', + custom: '自定義主題', + }, + app: { + moviepilot: 'MoviePilot', + recommend: '推薦', + subscribeMovie: '電影訂閱', + subscribeTv: '電視劇訂閱', + settings: '設置', + language: '語言設置', + selectLanguage: '選擇語言', + logout: '退出登錄', + restarting: '正在重啟...', + confirmRestart: '確認重啟系統嗎?', + restartTip: '重啟後,您將被註銷並需要重新登錄。', + }, + login: { + wallpapers: '壁紙', + username: '用戶名', + password: '密碼', + otpCode: '雙重驗證碼', + stayLoggedIn: '保持登錄', + login: '登錄', + networkError: '登錄失敗,請檢查網絡連接!', + authFailure: '登錄失敗,請檢查用戶名、密碼或雙重驗證是否正確!', + permissionDenied: '登錄失敗,您沒有權限訪問!', + serverError: '登錄失敗,服務器錯誤!', + loginFailed: '登錄失敗', + checkCredentials: '請檢查用戶名、密碼或雙重驗證碼是否正確!', + }, + menu: { + start: '開始', + discovery: '發現', + subscribe: '訂閱', + organize: '整理', + system: '系統', + }, + navItems: { + dashboard: '儀表盤', + mediaInfo: '媒體庫', + recommend: '推薦', + site: '站點', + search: '搜索', + searchResult: '搜索結果', + download: '下載', + movieSubscribe: '電影訂閱', + tvSubscribe: '電視劇訂閱', + history: '歷史記錄', + transfer: '整理', + rename: '重命名', + statistic: '統計', + setting: '設置', + plugin: '插件', + user: '用戶', + about: '關於', + explore: '探索', + movie: '電影', + tv: '電視劇', + workflow: '工作流', + calendar: '日曆', + downloadManager: '下載管理', + mediaOrganize: '媒體整理', + fileManager: '文件管理', + pluginManager: '插件', + siteManager: '站點管理', + userManager: '用戶管理', + settings: '設定', + }, + settingTabs: { + system: { + title: '系統', + description: '基礎設置、下載器(Qbittorrent、Transmission)、媒體服務器(Emby、Jellyfin、Plex)', + }, + directory: { + title: '存儲 & 目錄', + description: '下載目錄、媒體庫目錄、整理、刮削', + }, + site: { + title: '站點', + description: '站點同步、站點數據刷新、站點重置', + }, + rule: { + title: '規則', + description: '自定義規則、優先級規則組、下載規則', + }, + search: { + title: '搜索 & 下載', + description: '搜索數據源(TheMovieDb、豆瓣、Bangumi)、下載任務標籤、搜索站點', + }, + subscribe: { + title: '訂閱', + description: '訂閱站點、訂閱模式、訂閱規則、洗版規則', + }, + scheduler: { + title: '服務', + description: '定時作業', + }, + notification: { + title: '通知', + description: '通知渠道(微信、Telegram、Slack、SynologyChat、VoceChat、WebPush)、消息發送範圍', + }, + words: { + title: '詞表', + description: '自定義識別詞、自定義製作組/字幕組、自定義占位符、文件整理屏蔽詞', + }, + about: { + title: '關於', + description: '軟件版本', + }, + }, + subscribeTabs: { + movie: { + mysub: '我的訂閱', + popular: '熱門訂閱', + }, + tv: { + mysub: '我的訂閱', + popular: '熱門訂閱', + share: '訂閱分享', + }, + }, + pluginTabs: { + installed: '我的插件', + market: '插件市場', + }, + discoverTabs: { + themoviedb: 'TheMovieDb', + douban: '豆瓣', + bangumi: 'Bangumi', + }, + user: { + admin: '管理員', + normalUser: '普通用戶', + profile: '個人信息', + systemSettings: '系統設定', + siteAuth: '用戶認證', + helpDocs: '幫助文檔', + restart: '重啟', + management: '用戶管理', + noUsers: '沒有用戶', + clickToAddUser: '點擊添加用戶卡片添加用戶', + addUser: '添加用戶', + editUser: '編輯用戶', + username: '用戶名', + password: '密碼', + confirmPassword: '確認密碼', + role: '角色', + email: '郵箱', + enabled: '啟用', + disabled: '禁用', + status: '狀態', + operations: '操作', + }, + nav: { + more: '更多', + }, + notification: { + center: '通知中心', + markRead: '設為已讀', + empty: '暫無通知', + }, + shortcut: { + title: '捷徑', + recognition: { + title: '識別', + subtitle: '名稱識別測試', + }, + rule: { + title: '規則', + subtitle: '規則測試', + }, + log: { + title: '日誌', + subtitle: '實時日誌', + }, + network: { + title: '網絡', + subtitle: '網速連通性測試', + }, + system: { + title: '系統', + subtitle: '健康檢查', + }, + message: { + title: '消息', + subtitle: '消息中心', + }, + }, + workflow: { + components: '動作組件', + clickToAdd: '點擊添加', + dragToCanvas: '拖動到畫布', + tapComponentHint: '點擊組件添加到畫布', + dragComponentHint: '拖動組件到畫布', + }, + dashboard: { + storage: '存儲空間', + mediaStatistic: '媒體統計', + weeklyOverview: '最近入庫', + speed: '實時速率', + scheduler: '後台任務', + cpu: 'CPU', + memory: '內存', + library: '我的媒體庫', + playing: '繼續觀看', + latest: '最近添加', + settings: '設置儀表板', + chooseContent: '選擇您想在頁面顯示的內容', + adaptiveHeight: '自適應組件高度', + }, + media: { + movie: '電影', + tv: '電視劇', + }, + subscribe: { + normalSub: '訂閱', + versionSub: '洗版訂閱', + addSuccess: '添加{name}成功!', + addFailed: '添加{name}失敗:{message}!', + cancelSuccess: '已取消訂閱!', + cancelFailed: '取消訂閱失敗:{message}!', + filterSubscriptions: '篩選訂閱', + name: '名稱', + searchShares: '搜索訂閱分享', + keyword: '關鍵詞', + noShareData: '未獲取到分享訂閱數據,未開啟數據分享或服務器無法連接。', + noPopularData: '未獲取到熱門訂閱數據,未開啟數據分享或服務器無法連接。', + noFilterData: '沒有篩選到相關內容,請更換篩選條件。', + noSubscribeData: '請通過搜索添加電影、電視劇訂閱。', + sharer: '分享人', + follow: '關注', + unfollow: '取消關注', + recognitionWords: '識別詞', + cancelShare: '取消分享', + usageCount: '共 {count} 次複用', + }, + recommend: { + all: '全部', + categoryMovie: '電影', + categoryTV: '電視劇', + categoryAnime: '動漫', + categoryRankings: '榜單', + trendingNow: '流行趨勢', + nowShowing: '正在熱映', + bangumiDaily: 'Bangumi每日放送', + tmdbHotMovies: 'TMDB熱門電影', + tmdbHotTVShows: 'TMDB熱門電視劇', + doubanHotMovies: '豆瓣熱門電影', + doubanHotTVShows: '豆瓣熱門電視劇', + doubanHotAnime: '豆瓣熱門動漫', + doubanNewMovies: '豆瓣最新電影', + doubanNewTVShows: '豆瓣最新電視劇', + doubanTop250: '豆瓣電影TOP250', + doubanChineseTVRankings: '豆瓣國產劇集榜', + doubanGlobalTVRankings: '豆瓣全球劇集榜', + noCategoryContent: '當前分類下沒有可顯示的內容', + configureContent: '設置顯示內容', + customizeContent: '自定義內容', + selectContentToDisplay: '選擇您想在頁面顯示的內容', + selectAll: '全選', + selectNone: '全不選', + }, + discover: { + setTabOrder: '設置標籤順序', + dragToReorder: '拖動對標籤頁進行排序', + }, + downloading: { + noDownloader: '沒有下載器', + configureDownloader: '請先在設置中正確配置並啟用下載器。', + }, + resource: { + searchResults: '資源搜索結果', + keyword: '關鍵詞', + title: '標題', + year: '年份', + season: '季', + switchingView: '切換視圖', + backToHome: '返回首頁', + searching: '正在搜索,請稍候...', + noData: '沒有數據', + noResourceFound: '未搜索到任何資源', + }, + browse: { + actor: '演員', + }, + appcenter: { + others: '其他', + }, + notFound: { + title: '頁面不存在 ⚠️', + description: '您想要訪問的頁面不存在,請檢查地址是否正確。', + backButton: '返回', + }, + torrent: { + sortDefault: '默認', + sortSite: '站點', + sortSize: '大小', + sortSeeder: '做種數', + filterSite: '站點', + filterSeason: '季集', + filterFreeState: '促銷狀態', + filterVideoCode: '視頻編碼', + filterEdition: '質量', + filterResolution: '分辨率', + filterReleaseGroup: '製作組', + clearFilters: '清除', + selectAll: '全選', + loadMore: '加載更多', + noMatchingResults: '沒有匹配的結果', + }, + calendar: { + episode: '第{number}集', + }, + storage: { + usedPercent: '已使用 {percent}%', + }, + site: { + noSites: '沒有站點', + sitesWillBeShownHere: '已添加並支持的站點將會在這裡顯示。', + }, + message: { + loadMore: '加載更多', + noMoreData: '沒有更多數據', + }, + logging: { + level: '級別', + time: '時間', + program: '程序', + content: '內容', + refreshing: '正在刷新', + }, + moduleTest: { + normal: '正常', + disabled: '未啟用', + error: '錯誤', + }, + nameTest: { + recognize: '識別', + recognizing: '識別中...', + recognizeAgain: '重新識別', + title: '標題', + subtitle: '副標題', + }, + netTest: { + notTested: '未測試', + testing: '測試中...', + normal: '正常', + }, + ruleTest: { + test: '測試', + testing: '正在測試...', + testAgain: '重新測試', + title: '標題', + subtitle: '副標題', + ruleGroup: '規則組', + priority: '優先級:{value}', + noPriorityRule: '未命中任何優先級規則!', + }, + setting: { + about: { + title: '關於 MoviePilot', + softwareVersion: '軟件版本', + frontendVersion: '前端版本', + authVersion: '認證資源版本', + indexerVersion: '站點資源版本', + configDir: '配置目錄', + dataDir: '數據目錄', + timezone: '時區', + latest: '最新', + support: '支援', + documentation: '文檔', + feedback: '問題反饋', + channel: '發布頻道', + versions: '軟件版本', + latestVersion: '最新軟件版本', + currentVersion: '當前版本', + viewChangelog: '查看變更日誌', + changelog: '變更日誌', + dataDirectory: '/moviepilot', + }, + system: { + basicSettings: '基礎設置', + basicSettingsDesc: '設置服務器的全局功能。', + appDomain: '訪問域名', + appDomainHint: '用於發送通知時,添加快捷跳轉地址', + wallpaper: '背景壁紙', + wallpaperHint: '選擇登陸頁面背景來源', + recognizeSource: '識別數據源', + recognizeSourceHint: '設置默認媒體信息識別數據源', + mediaServerSyncInterval: '媒體服務器同步間隔', + mediaServerSyncIntervalHint: '定時同步媒體服務器數據到本地的時間間隔', + hours: '小時', + required: '必選項,請勿留空', + numbersOnly: '僅支持輸入數字,請勿輸入其他字符', + minInterval: '間隔不能小於1個小時', + apiToken: 'API令牌', + apiTokenHint: '設置外部請求MoviePilot API時使用的token值', + apiTokenMinChars: '不能小於16位字符', + apiTokenRequired: '必填項;請輸入API Token', + apiTokenLength: 'API Token不得低於16位', + githubToken: 'Github Token', + githubTokenFormat: 'ghp_**** 或 github_pat_****', + githubTokenHint: '用於提高插件等訪問Github API時的限流閾值', + ocrHost: '驗證碼識別服務器', + ocrHostHint: '用於站點簽到、更新站點Cookie等識別驗證碼', + advancedSettings: '高級設置', + advancedSettingsDesc: '系統進階設置,特殊情況下才需要調整', + downloaders: '下載器', + downloadersDesc: '只有默認下載器才會被默認使用。', + mediaServers: '媒體服務器', + mediaServersDesc: '所有啟用的媒體服務器都會被使用。', + trimeMedia: '飛牛影視', + system: '系統', + media: '媒體', + network: '網絡', + log: '日誌', + lab: '實驗室', + downloaderSaveSuccess: '下載器設置保存成功', + downloaderSaveFailed: '下載器設置保存失敗!', + defaultDownloaderNotice: '未設置默認下載器,已將【{name}】作為默認下載器', + mediaServerSaveSuccess: '媒體服務器設置保存成功', + mediaServerSaveFailed: '媒體服務器設置保存失敗!', + saveFailed: '設置保存失敗:{message}!', + basicSaveSuccess: '基礎設置保存成功', + advancedSaveSuccess: '高級設置保存成功', + copySuccess: '已複製到剪貼板!', + copyFailed: '複製失敗:可能是瀏覽器不支持或被用戶阻止!', + copyError: '複製失敗!', + reloading: '正在應用配置...', + qbittorrent: 'Qbittorrent', + transmission: 'Transmission', + emby: 'Emby', + jellyfin: 'Jellyfin', + plex: 'Plex', + reloadSuccess: '系統配置已生效', + reloadFailed: '重載系統失敗!', + auxAuthEnable: '用戶輔助認證', + auxAuthEnableHint: '允許外部服務進行登錄認證以及自動創建用戶', + globalImageCache: '全局圖片緩存', + globalImageCacheHint: '將媒體圖片緩存到本地,提升圖片加載速度', + subscribeStatisticShare: '分享訂閱數據', + subscribeStatisticShareHint: '分享訂閱統計數據到熱門訂閱,供其他MPer參考', + pluginStatisticShare: '上報插件安裝數據', + pluginStatisticShareHint: '上報插件安裝數據給服務器,用於統計展示插件安裝情況', + bigMemoryMode: '大內存模式', + bigMemoryModeHint: '使用更大的內存緩存數據,提升系統性能', + dbWalEnable: 'WAL模式', + dbWalEnableHint: '可提升讀寫併發性能,但可能在異常情況下增加數據丟失風險,更改後需重啟生效', + tmdbApiDomain: 'TMDB API服務地址', + tmdbApiDomainPlaceholder: 'api.themoviedb.org', + tmdbApiDomainHint: '自定義themoviedb API域名或代理地址', + tmdbApiDomainRequired: '請輸入TMDB API域名', + tmdbImageDomain: 'TMDB 圖片服務地址', + tmdbImageDomainPlaceholder: 'image.tmdb.org', + tmdbImageDomainHint: '自定義themoviedb圖片服務域名或代理地址', + tmdbImageDomainRequired: '請輸入圖片服務域名', + tmdbLocale: 'TMDB 元數據語言', + tmdbLocalePlaceholder: 'zh', + tmdbLocaleHint: '自定義themoviedb元數據語言', + metaCacheExpire: '媒體元數據緩存過期時間', + metaCacheExpireHint: '識別元數據本地緩存時間,為 0 時使用內置默認值', + metaCacheExpireRequired: '請輸入元數據緩存時間', + metaCacheExpireMin: '元數據緩存時間必須大於等於0', + scrapFollowTmdb: '跟隨TMDB識別整理', + scrapFollowTmdbHint: '關閉時以整理歷史記錄為準(如有),避免TMDB數據在訂閱中途修改', + fanartEnable: 'Fanart圖片數據源', + fanartEnableHint: '使用 fanart.tv 的圖片數據', + githubProxy: 'Github加速代理', + githubProxyPlaceholder: '留空表示不使用代理', + githubProxyHint: '使用代理加速Github訪問速度', + pipProxy: 'PIP加速代理', + pipProxyPlaceholder: '留空表示不使用代理', + pipProxyHint: '使用代理加速插件等pip庫安裝速度', + dohEnable: 'DNS Over HTTPS', + dohEnableHint: '使用DOH對特定域名進行解析,以防止DNS污染', + dohResolvers: 'DOH 服務器', + dohResolversPlaceholder: 'https://dns.google/dns-query,1.1.1.1', + dohResolversHint: 'DNS解析服務器地址,多個地址使用逗號分隔', + dohDomains: 'DOH 域名', + dohDomainsPlaceholder: 'example.com,example2.com', + dohDomainsHint: '使用DOH解析的域名,多個域名使用逗號分隔', + debug: '調試模式', + debugHint: '啟用調試模式後,日誌將以DEBUG級別記錄,以便排查問題', + logLevel: '日誌等級', + logLevelHint: '設置日誌記錄的級別,用於控制日誌輸出量', + logMaxFileSize: '日誌文件最大容量(MB)', + logMaxFileSizeHint: '限制單個日誌文件的最大容量,超出後將自動分割日誌', + logMaxFileSizeRequired: '日誌文件最大大小', + logMaxFileSizeMin: '日誌文件最大容量必須大於等於1', + logBackupCount: '日誌文件最大備份數量', + logBackupCountHint: '設置每個模塊日誌文件的最大備份數量,超過後將覆蓋舊日誌', + logBackupCountRequired: '請輸入日誌文件最大備份數量', + logBackupCountMin: '日誌文件最大備份數量必須大於等於1', + logFileFormat: '日誌文件格式', + logFileFormatHint: '設置日誌文件的輸出格式,用於自定義日誌的顯示內容', + pluginAutoReload: '插件熱加載', + pluginAutoReloadHint: '修改插件文件後自動重新加載,開發插件時使用', + encodingDetectionPerformanceMode: '編碼探測性能模式', + encodingDetectionPerformanceModeHint: '優先提升探測效率,但可能降低編碼探測的準確性', + tokenizedSearch: '分詞搜索', + tokenizedSearchHint: '提升整理歷史記錄搜索精度,但可能增加性能開銷和意外結果', + tmdbLanguage: { + zhCN: '簡體中文', + zhTW: '繁體中文', + en: '英文', + }, + logLevelItems: { + debug: 'DEBUG - 調試', + info: 'INFO - 信息', + warning: 'WARNING - 警告', + error: 'ERROR - 錯誤', + critical: 'CRITICAL - 嚴重', + }, + wallpaperItems: { + tmdb: 'TMDB電影海報', + bing: 'Bing每日壁紙', + bingDaily: 'Bing每日圖片', + none: '無壁紙', + }, + mb: 'MB', + hour: '小時', + }, + site: { + siteSync: '站點同步', + siteSyncDesc: '從CookieCloud快速同步站點數據。', + enableLocalCookieCloud: '啟用本地CookieCloud服務器', + enableLocalCookieCloudHint: '使用內建CookieCloud服務同步站點數據,服務地址為:http://localhost:3000/cookiecloud', + serviceAddress: '服務地址', + serviceAddressPlaceholder: 'https://movie-pilot.org/cookiecloud', + serviceAddressHint: '遠端CookieCloud服務地址,格式:https://movie-pilot.org/cookiecloud', + userKey: '用戶KEY', + userKeyHint: 'CookieCloud瀏覽器插件生成的用戶KEY', + e2ePassword: '端對端加密密碼', + e2ePasswordHint: 'CookieCloud瀏覽器插件生成的端對端加密密碼', + autoSyncInterval: '自動同步間隔', + autoSyncIntervalHint: '從CookieCloud服務器自動同步站點Cookie到MoviePilot的時間間隔', + syncBlacklist: '同步域名黑名單', + syncBlacklistPlaceholder: '多個域名,分割', + syncBlacklistHint: 'CookieCloud同步域名黑名單,多個域名,分割', + userAgent: '瀏覽器User-Agent', + userAgentHint: 'CookieCloud插件所在的瀏覽器的User-Agent', + siteDataRefresh: '站點數據刷新', + siteDataRefreshInterval: '站點數據刷新間隔', + siteDataRefreshIntervalHint: '刷新站點用戶上傳下載等數據的時間間隔', + readSiteMessage: '閱讀站點消息', + readSiteMessageHint: '刷新數據時讀取站點消息並發送通知', + siteReset: '站點重置', + confirmReset: '確認刪除所有站點數據並重新同步。', + confirmResetHint: '刪除所有站點數據並重新從CookieCloud同步,操作請先清空涉及站點的相關設置。', + resetSites: '重置站點數據', + resettingSites: '正在重置...', + syncInterval: { + hourly: '每小時', + every6Hours: '每6小時', + every12Hours: '每12小時', + daily: '每天', + weekly: '每週', + monthly: '每月', + never: '永不', + }, + saveSuccess: '保存站點設置成功', + saveFailed: '站點設置保存失敗!', + resetSuccess: '站點重置成功,請等待CookieCloud同步完成!', + resetFailed: '站點重置失敗!', + }, + notification: { + channels: '通知渠道', + channelsDesc: '設置消息發送渠道參數。', + scope: '通知發送範圍', + scopeDesc: '對應消息類型只會發送給設定的用戶。', + messageType: '消息類型', + scopeRange: '範圍', + operationUserOnly: '僅操作用戶', + adminOnly: '僅管理員', + userAndAdmin: '操作用戶和管理員', + allUsers: '所有用戶', + sendTime: '通知發送時間', + sendTimeDesc: '設定消息發送的時間範圍。', + startTime: '開始時間', + endTime: '結束時間', + saveSuccess: '通知設置保存成功', + saveFailed: '通知設置保存失敗!', + switchSaveSuccess: '消息類型開關保存成功', + switchSaveFailed: '消息類型開關保存失敗!', + timeSaveSuccess: '通知發送時間保存成功', + timeSaveFailed: '通知發送時間保存失敗!', + channel: '通知', + wechat: '微信', + resourceDownload: '資源下載', + mediaImport: '整理入庫', + subscription: '訂閱', + site: '站點', + mediaServer: '媒體服務器', + manualProcess: '手動處理', + plugin: '插件', + other: '其它', + telegram: 'Telegram', + slack: 'Slack', + synologyChat: 'SynologyChat', + voceChat: 'VoceChat', + webPush: 'WebPush', + }, + words: { + customIdentifiers: '自定義識別詞', + identifiersDesc: '添加規則對種子名或者文件名進行預處理以校正識別。', + identifiersPlaceholder: '支持正則表達式,特殊字符需要\\轉義,一行為一組', + identifiersHint: '支持正則表達式,特殊字符需要\\轉義,一行為一組', + formatTitle: '支持的配置格式(注意空格):', + formatContent: + '屏蔽詞\n' + + '被替換詞 => 替換詞\n' + + '前定位詞 <> 後定位詞 >> 集偏移量(EP)\n' + + '被替換詞 => 替換詞 && 前定位詞 <> 後定位詞 >> 集偏移量(EP)\n' + + '其中替換詞支持格式:{tmdbid/doubanid=xxx;type=movie/tv;s=xxx;e=xxx} 直接指定TMDBID/豆瓣ID識別,其中s、e為季數和集數(可選)', + identifierSaveSuccess: '自定義識別詞保存成功', + identifierSaveFailed: '自定義識別詞保存失敗!', + + customReleaseGroups: '自定義製作組/字幕組', + releaseGroupsDesc: '添加無法識別的製作組/字幕組。', + releaseGroupsPlaceholder: '支持正則表達式,特殊字符需要\\轉義,一行代表一個製作組/字幕組', + releaseGroupsHint: '支持正則表達式,特殊字符需要\\轉義,一行代表一個製作組/字幕組', + releaseGroupSaveSuccess: '自定義製作組/字幕組保存成功', + releaseGroupSaveFailed: '自定義製作組/字幕組保存失敗!', + + customization: '自定義占位符', + customizationDesc: '添加自定義占位符識別正則,重命名格式中添加{customization}使用。', + customizationPlaceholder: '支持正則表達式,特殊字符需要\\轉義,多個匹配對象請換行分隔', + customizationHint: '支持正則表達式,特殊字符需要\\轉義,多個匹配對象請換行分隔', + customizationSaveSuccess: '自定義占位符保存成功', + customizationSaveFailed: '自定義占位符保存失敗!', + + transferExcludeWords: '文件整理屏蔽詞', + excludeWordsDesc: '目錄名或文件名中包含屏蔽詞時不進行整理。', + excludeWordsPlaceholder: '支持正則表達式,特殊字符需要\\轉義,一行代表一個屏蔽詞', + excludeWordsHint: '支持正則表達式,特殊字符需要\\轉義,一行代表一個屏蔽詞', + excludeWordsSaveSuccess: '文件整理屏蔽詞保存成功', + excludeWordsSaveFailed: '文件整理屏蔽詞保存失敗!', + }, + search: { + basicSettings: '基礎設置', + basicSettingsDesc: '設定數據源、規則組等基礎信息。', + recognizeSource: '識別數據源', + recognizeSourceDesc: '默認使用TMDB。豆瓣識別中文作品通常更友好,但有些國外作品信息不完整。', + themoviedb: 'TheMovieDb', + douban: '豆瓣', + filterRuleGroup: '過濾規則組', + filterRuleGroupDesc: '設置下載過程中使用的過濾規則組。', + downloadLabel: '下載任務標籤', + downloadLabelDesc: '下載器中的下載標籤,用於過濾查詢。', + downloadLabelHint: '支持增加多個標籤,英文逗號分隔', + downloadSite: '搜索站點', + downloadSiteDesc: '設置指定分類搜索的站點範圍。', + movieSites: '電影站點', + tvSites: '電視劇站點', + animeSites: '動漫站點', + saveSites: '保存站點', + saveSuccess: '保存搜索設置成功', + saveFailed: '搜索設置保存失敗!', + saveRuleFailed: '規則保存失敗!', + movieCategory: '電影', + tvCategory: '電視劇', + animeCategory: '動漫', + downloadUser: '遠程搜索自動下載用戶', + multipleNameSearch: '多名稱資源搜索', + multipleNameSearchHint: '使用多個名稱(中文、英文等)搜索站點資源並合並搜索結果,會增加站點訪問頻率', + downloadSubtitle: '下載站點字幕', + downloadSubtitleHint: '檢查站點資源是否有單獨的字幕文件並自動下載', + mediaSource: '媒體搜索數據源', + mediaSourceHint: '搜索媒體信息時使用的數據源以及排序', + filterRuleGroupHint: '搜索媒體信息時按選定的過濾規則組對結果進行過濾', + downloadUserPlaceholder: '用戶ID1,用戶ID2', + downloadUserHint: '使用Telegram、微信等搜索時是否自動下載,使用逗號分割,設置為 all 代表所有用戶自動擇優下載', + downloadLabelPlaceholder: 'MOVIEPILOT', + }, + directory: { + storage: '存儲', + storageDesc: '設置本地或網盤存儲。', + directory: '目錄', + directoryDesc: '設置媒體文件整理目錄結構,按先後順序依次匹配。', + organizeAndScrap: '整理 & 刮削', + organizeAndScrapDesc: '設置重命名格式、刮削選項等。', + scrapSource: '刮削數據源', + scrapSourceHint: '刮削時的元數據來源', + movieRenameFormat: '電影重命名格式', + movieRenameFormatHint: '使用Jinja2語法,格式參考:https://jinja.palletsprojects.com/en/3.0.x/templates', + tvRenameFormat: '電視劇重命名格式', + tvRenameFormatHint: '使用Jinja2語法,格式參考:https://jinja.palletsprojects.com/en/3.0.x/templates', + saveSuccess: '存儲設置保存成功', + saveFailed: '存儲設置保存失敗!', + directorySaveSuccess: '目錄設置保存成功', + directorySaveFailed: '目錄設置保存失敗!', + organizeSaveSuccess: '整理選項設置保存成功', + organizeSaveFailed: '整理選項設置保存失敗!', + duplicateDirectoryName: '存在重複目錄名稱!無法保存,請修改!', + defaultDirName: '目錄', + storageSaveSuccess: '存儲設置保存成功', + storageSaveFailed: '存儲設置保存失敗!', + }, + rule: { + customRules: '自定義規則', + customRulesDesc: '自定義優先級規則項', + priorityRuleGroups: '優先級規則組', + priorityRuleGroupsDesc: '預設優先級規則組,以便在搜索和訂閱中使用。', + downloadRules: '下載規則', + downloadRulesDesc: '同時命中多個資源時擇優下載。', + resourcePriority: '資源優先級', + sitePriority: '站點優先級', + siteUpload: '站點上傳量', + resourceSeeder: '資源做種數', + emptyIdError: '存在空ID的規則,無法保存,請修改!', + emptyNameError: '存在空名字的規則,無法保存,請修改!', + duplicateIdError: '存在重複規則ID!無法保存,請修改!', + duplicateNameError: '存在重複規則名稱!無法保存,請修改!', + customRuleSaveSuccess: '自定義規則保存成功', + customRuleSaveFailed: '自定義規則保存失敗!', + emptyGroupNameError: '存在空名字的規則組!無法保存,請修改!', + duplicateGroupNameError: '存在重複規則組名稱!無法保存,請修改!', + ruleGroupSaveSuccess: '優先級規則組保存成功', + ruleGroupSaveFailed: '優先級規則組保存失敗!', + customRuleCopySuccess: '自定義規則已複製到剪貼板!', + customRuleCopyFailed: '自定義規則複製失敗:可能是瀏覽器不支持或被用戶阻止!', + customRuleCopyError: '自定義規則複製失敗!', + ruleGroupCopySuccess: '優先級規則組已複製到剪貼板!', + ruleGroupCopyFailed: '優先級規則組複製失敗:可能是瀏覽器不支持或被用戶阻止!', + ruleGroupCopyError: '優先級規則組複製失敗!', + currentPriorityRules: '當前使用下載優先規則', + currentPriorityRulesHint: '排在前面的優先級越高,未選擇的項不納入排序', + importCustomRules: '導入自定義規則', + importRuleGroups: '導入優先級規則組', + importFailed: '導入規則失敗!無法解析輸入的數據!', + importUnknownType: '導入規則失敗!未知的數據類型!', + duplicateValue: '存在重名值', + importNoId: '導入失敗!發現有規則不存在ID,可能屬於優先級規則組!', + importHasId: '導入失敗!發現有規則存在相同ID,可能屬於自定義規則!', + }, + scheduler: { + scheduledTasks: '定時作業', + scheduledTasksDesc: '包含系統內置服務以及插件提供的服務,手動執行不會影響作業正常的時間表。', + provider: '提供者', + taskName: '任務名稱', + taskStatus: '任務狀態', + nextRunTime: '下一次執行時間', + execute: '執行', + noService: '沒有後台服務', + running: '正在運行', + stopped: '已停止', + waiting: '等待', + executeSuccess: '定時作業執行請求提交成功!', + }, + subscribe: { + basicSettings: '基礎設置', + basicSettingsDesc: '設定訂閱模式、週期等基礎設置', + subscribeSites: '訂閱站點', + subscribeSitesDesc: '只有選中的站點才會在訂閱中使用。', + mode: '訂閱模式', + modeHint: '自動:自動爬取站點首頁,站點RSS:通過站點RSS鏈接訂閱', + rssInterval: '站點RSS週期', + rssIntervalHint: '設置站點RSS運行週期,在訂閱模式為`站點RSS`時生效', + filterRuleGroup: '訂閱優先級規則組', + filterRuleGroupHint: '按選定的過濾規則組對訂閱進行過濾', + bestVersionRuleGroup: '洗版優先級規則組', + bestVersionRuleGroupHint: '按選定的過濾規則組對洗版訂閱進行過濾', + timedSearch: '訂閱定時搜索', + timedSearchHint: '每隔24小時全站搜索,以補全訂閱可能漏掉的資源', + checkLocalMedia: '檢查本地媒體庫資源', + checkLocalMediaHint: '檢查存儲盤是否存在資源,以避免重複下載', + modes: { + auto: '自動', + rss: '站點RSS', + }, + intervals: { + min5: '5分鐘', + min10: '10分鐘', + min20: '20分鐘', + min30: '半小時', + hour1: '1小時', + hour12: '12小時', + day1: '1天', + }, + saveSuccess: '訂閱站點保存成功', + saveFailed: '訂閱站點保存失敗!', + settingsSaveSuccess: '訂閱基礎設置保存成功', + settingsSaveFailed: '訂閱基礎設置保存失敗!', + }, + }, + dialog: { + progress: { + processing: '處理中', + }, + userAddEdit: { + add: '添加用戶', + edit: '編輯用戶', + username: '用戶名', + password: '密碼', + confirmPassword: '確認密碼', + email: '郵箱', + nickname: '暱稱', + status: '狀態', + active: '激活', + inactive: '已停用', + superUser: '超級用戶', + otp: '啟用二次驗證', + avatar: '頭像', + uploadAvatar: '上傳頭像', + resetDefaultAvatar: '重置默認頭像', + restoreCurrentAvatar: '還原當前頭像', + notifications: '通知', + wechat: '微信UserID', + telegram: 'Telegram UserID', + slack: 'Slack UserID', + vocechat: 'VoceChat UserID', + synologyChat: 'SynologyChat UserID', + webPush: 'WebPush', + creatingUser: '正在創建【{name}】用戶,請稍後', + updatingUser: '正在更新【{name}】用戶,請稍後', + usernameRequired: '用戶名不能為空', + usernameExists: '用戶名已存在', + passwordMismatch: '兩次輸入的密碼不一致', + userCreated: '用戶【{name}】創建成功', + userCreateFailed: '創建用戶失敗:{message}', + userUpdateSuccess: '用戶【{name}】更新成功', + userUpdateFailed: '更新用戶失敗:{message}', + userDeleteSuccess: '用戶【{name}】刪除成功', + userDeleteFailed: '刪除用戶失敗:{message}', + invalidFile: '上傳的文件不符合要求,請重新選擇頭像', + fileSizeLimit: '文件大小不得大於800KB', + avatarUploadSuccess: '新頭像上傳成功,待保存後生效!', + resetAvatarSuccess: '已重置為默認頭像,待保存後生效!', + restoreAvatarSuccess: '已還原當前使用頭像!', + deleteConfirm: '確認刪除用戶【{name}】嗎?', + saveUserInfo: '保存用戶信息', + cannotDeleteCurrentUser: '不能刪除當前登錄用戶', + deleteUser: '刪除用戶', + }, + searchBar: { + search: '搜索', + searchPlaceholder: '搜索功能、訂閱、設置...', + recentSearches: '最近搜索', + noRecentSearches: '沒有最近搜索記錄', + functions: '功能', + noFunctionsFound: '沒有匹配的功能', + plugins: '插件', + noPluginsFound: '沒有匹配的插件', + subscriptions: '訂閱', + noSubscriptionsFound: '沒有匹配的訂閱', + searchSites: '搜索站點', + selectSites: '選擇站點', + collections: '系列合集', + collectionSearch: '相關的系列作品', + actorSearch: '相關的演員、導演等', + historySearch: '相關的歷史記錄', + siteResources: '站點資源', + searchInSites: '在站點中搜索種子資源', + relatedResources: '相關資源', + searchTip: '可搜索電影、電視劇、演員、資源等', + }, + searchSite: { + selectSites: '選擇站點', + siteSearch: '站點搜索', + searchAllSites: '已選擇 {selected}/{total} 個站點', + selectAll: '選擇全部', + deselectAll: '取消全選', + confirm: '確認', + cancel: '取消', + }, + importCode: { + import: '導入', + title: '導入代碼', + }, + addDownload: { + confirmDownload: '確認下載', + downloader: '下載器(默認)', + saveDirectory: '保存目錄(自動)', + defaultPlaceholder: '留空默認', + autoPlaceholder: '留空自動匹配', + downloading: '下載中...', + startDownload: '開始下載', + downloadSuccess: '{site} {title} 下載成功!', + downloadFailed: '{site} {title} 下載失敗:{message}!', + }, + subscribeShare: { + shareSubscription: '分享訂閱', + season: '第 {number} 季', + title: '標題', + description: '說明', + descriptionHint: '填寫關於該訂閱的說明,訂閱中的搜索詞、識別詞等將會默認包含在分享中', + shareUser: '分享用戶', + shareUserHint: '分享人的暱稱', + confirmShare: '確認分享', + shareSuccess: '{name} 分享成功!', + shareFailed: '{name} 分享失敗:{message}!', + }, + u115Auth: { + loginTitle: '115網盤登錄', + scanQrCode: '請使用微信或115客戶端掃碼', + scanned: '已掃碼,請確認登錄', + complete: '完成', + }, + aliyunAuth: { + loginTitle: '阿里雲盤登錄', + scanQrCode: '請用阿里雲盤 App 掃碼', + scanned: '已掃碼', + complete: '完成', + }, + rcloneConfig: { + title: 'RClone配置', + filePath: 'rclone配置文件路徑', + fileContent: 'rclone配置文件內容', + defaultContent: '# 請在此處填寫rclone配置文件內容 \n# 請參考 https://rclone.org/docs/ \n# 存儲節點名必須為:MP', + complete: '完成', + }, + alistConfig: { + title: 'Alist配置', + serverUrl: 'Alist服務地址', + username: '用戶名', + password: '密碼', + tokenUrl: '獲取Token地址', + loginType: '登錄方式', + loginTypeOptions: { + guest: '訪客', + username: '用戶名密碼', + token: 'Token', + }, + complete: '完成', + }, + workflowAddEdit: { + addTitle: '新增工作流', + editTitle: '編輯工作流', + name: '名稱', + namePlaceholder: '工作流名稱', + desc: '描述', + descPlaceholder: '工作流描述', + enabled: '啟用', + schedule: '定時執行', + cronExpr: 'Cron表達式', + cronExprDesc: '工作流定時執行的cron表達式', + nameRequired: '請填寫完整資訊!', + addSuccess: '建立任務成功,請編輯流程!', + addFailed: '建立任務失敗:{message}', + editSuccess: '修改任務成功!', + editFailed: '修改任務失敗:{message}', + cancel: '取消', + confirm: '確認', + }, + workflowActions: { + title: '編輯流程', + noActionsMessage: '工作流沒有動作,請新增動作', + addAction: '新增動作', + editAction: '編輯動作', + deleteAction: '刪除動作', + moveUp: '上移', + moveDown: '下移', + nameLabel: '動作名稱', + nameRequired: '動作名稱不能為空', + typeLabel: '動作類型', + typeRequired: '動作類型不能為空', + paramsLabel: '動作參數', + outputLabel: '動作輸出', + saveAction: '儲存動作', + cancelAction: '取消', + confirmDeleteTitle: '確認刪除動作', + confirmDeleteMessage: '確定要刪除此動作嗎?此操作無法復原。', + yesDelete: '是的,刪除', + noCancel: '取消', + invalidConnection: '非法連接:不能連接自身或同類型端口!', + componentNotFound: '組件 {component} 未找到', + componentAdded: '已新增組件到畫布', + saveSuccess: '儲存任務流程成功!', + saveFailed: '儲存任務流程失敗:{message}', + importTitle: '匯入任務流程', + importSuccess: '匯入成功!', + importFailed: '匯入失敗!', + codeCopied: '任務流程代碼已複製到剪貼簿!', + }, + siteCookieUpdate: { + title: '更新站點Cookie', + checkHint: '正在檢查登入狀態,請稍候...', + confirmUpdateTitle: '確認更新', + confirmUpdateMessage: '是否要用本地Cookie更新該站點的Cookie?', + processing: '處理中...', + success: '更新Cookie成功', + failed: '更新Cookie失敗', + confirm: '確認', + cancel: '取消', + }, + siteAddEdit: { + addTitle: '新增站點', + editTitle: '編輯站點', + nameLabel: '站點名稱', + urlLabel: '站點URL', + iconLabel: '站點圖標', + uploadIcon: '上傳圖標', + cookie: 'Cookie', + rssUrl: 'RSS連結', + enableLabel: '啟用', + pubEnableLabel: '資源公開', + priorityLabel: '優先級', + signInLabel: '簽到', + proxies: '代理', + userInfo: '用戶資訊', + cancel: '取消', + confirm: '儲存', + }, + pluginConfig: { + title: '插件配置', + save: '儲存', + close: '關閉', + }, + pluginData: { + title: '插件數據', + save: '儲存', + close: '關閉', + }, + pluginMarketSetting: { + title: '插件市場設置', + repoUrl: '插件倉庫地址', + repoPlaceholder: '格式:https://github.com/jxxghp/MoviePilot-Plugins/,https://github.com/xxxx/xxxxxx/', + repoHint: '多個地址使用逗號分隔,僅支援Github倉庫', + close: '關閉', + save: '儲存', + saveSuccess: '插件倉庫儲存成功', + saveFailed: '插件倉庫儲存失敗:{message}!', + }, + userAuth: { + title: '用戶認證', + codeLabel: '認證碼', + codePlaceholder: '請輸入認證碼', + authBtn: '開始認證', + closeBtn: '關閉', + selectSite: '選擇認證站點', + selectSiteRequired: '請選擇認證站點!', + siteConfigNotExist: '站點配置不存在!', + fieldRequired: '請輸入{name}!', + authSuccess: '用戶認證成功,請重新登入!', + authFailed: '認證失敗:{message}', + }, + transferQueue: { + title: '整理隊列', + name: '名稱', + type: '類型', + state: '狀態', + progress: '進度', + startTime: '開始時間', + speedTitle: '速度', + pathTitle: '路徑', + sizeTitle: '大小', + waitingState: '等待中', + runningState: '正在整理', + finishedState: '完成', + failedState: '失敗', + cancelledState: '已取消', + noTasks: '沒有正在整理的任務', + processing: '請稍候 ...', + stopAll: '全部停止', + startAll: '全部開始', + refresh: '刷新', + close: '關閉', + }, + reorganize: { + title: '整理', + sourceTitle: '源文件', + targetTitle: '目標文件', + processingTitle: '處理中', + confirmTitle: '確認', + selectFile: '選擇文件', + selectTarget: '選擇目標', + selectMediaType: '選擇媒體類型', + movie: '電影', + tv: '電視劇', + selectTmdbId: '選擇TMDB ID', + selectMediaInfo: '選擇媒體資訊', + selectTargetPath: '選擇目標路徑', + selectTargetDir: '選擇目標目錄', + selectFileName: '選擇文件名', + confirmMoving: '請確認移動!', + sourceLabel: '源文件:', + targetLabel: '目標目錄:', + filenameLabel: '文件名:', + close: '關閉', + next: '下一步', + previous: '上一步', + confirm: '確認', + manualTitle: '手動整理', + multipleItemsTitle: '整理 - 共 {count} 項', + singleItemTitle: '整理 - {path}', + targetStorage: '目的存儲', + targetStorageHint: '整理目的存儲', + transferType: '整理方式', + transferTypeHint: '文件操作整理方式', + targetPath: '目的路徑', + targetPathHint: '整理目的路徑,留空將自動匹配', + targetPathPlaceholder: '留空自動', + mediaType: '類型', + mediaTypeHint: '文件的媒體類型', + tmdbId: 'TheMovieDb編號', + doubanId: '豆瓣編號', + mediaIdHint: '按名稱查詢媒體編號,留空自動識別', + mediaIdPlaceholder: '留空自動識別', + episodeGroup: '劇集組編號', + episodeGroupHint: '指定劇集組', + episodeGroupPlaceholder: '手動查詢劇集組', + season: '季', + seasonHint: '第幾季', + episodeDetail: '集', + episodeDetailHint: '集數或範圍,如1或1,2', + episodeDetailPlaceholder: '起始集,終止集', + episodeFormat: '集數定位', + episodeFormatHint: '使用{ep}定位文件名中的集數部分以輔助識別', + episodeFormatPlaceholder: '使用{ep}定位集數', + episodeOffset: '集數偏移', + episodeOffsetHint: '集數偏移運算,如-10或EP*2', + episodeOffsetPlaceholder: '如-10', + episodePart: '指定Part', + episodePartHint: '指定Part,如part1', + episodePartPlaceholder: '如part1', + minFileSize: '最小文件大小(MB)', + minFileSizeHint: '只整理大於最小文件大小的文件', + typeFolderOption: '按類型分類', + typeFolderHint: '整理時目的路徑下按媒體類型新增子目錄', + categoryFolderOption: '按類別分類', + categoryFolderHint: '整理時在目的路徑下按媒體類別新增子目錄', + scrapeOption: '刮削元數據', + scrapeHint: '整理完成後自動刮削元數據', + fromHistoryOption: '復用歷史識別資訊', + fromHistoryHint: '使用歷史整理記錄中已識別的媒體資訊', + addToQueue: '加入整理隊列', + reorganizeNow: '立即整理', + auto: '自動', + processing: '正在處理 ...', + successMessage: '文件 {name} 已加入整理隊列!', + }, + subscribeEdit: { + titleDefault: '默認訂閱規則', + titleEditFormat: '編輯訂閱 - {name} {season}', + seasonFormat: '第 {number} 季', + tabs: { + basic: '基礎', + advance: '進階', + }, + searchKeyword: '搜索關鍵詞', + searchKeywordHint: '指定搜索站點時使用的關鍵詞', + totalEpisode: '總集數', + totalEpisodeHint: '劇集總集數', + startEpisode: '開始集數', + startEpisodeHint: '開始訂閱集數', + quality: '質量', + qualityHint: '訂閱資源質量', + resolution: '分辨率', + resolutionHint: '訂閱資源分辨率', + effect: '特效', + effectHint: '訂閱資源特效', + subscribeSites: '訂閱站點', + subscribeSitesHint: '訂閱的站點範圍,不選使用系統設置', + downloader: '下載器', + downloaderHint: '指定該訂閱使用的下載器', + savePath: '儲存路徑', + savePathHint: '指定該訂閱的下載儲存路徑,留空自動使用設定的下載目錄', + bestVersion: '洗版', + bestVersionHint: '根據洗版優先級進行洗版訂閱', + searchImdbid: '使用 ImdbID 搜索', + searchImdbidHint: '開使用 ImdbID 精確搜索資源', + showEditDialog: '訂閱時編輯更多規則', + showEditDialogHint: '新增訂閱時顯示此編輯訂閱對話框', + include: '包含(關鍵字、正則式)', + includeHint: '包含規則,支援正則表達式', + exclude: '排除(關鍵字、正則式)', + excludeHint: '排除規則,支援正則表達式', + filterGroups: '優先級規則組', + filterGroupsHint: '按選定的過濾規則組對訂閱進行過濾', + episodeGroup: '指定劇集組', + episodeGroupHint: '按特定劇集組識別和刮削', + season: '指定季', + seasonHint: '指定任意季訂閱', + mediaCategory: '自定義類別', + mediaCategoryHint: '指定類別名稱,留空自動識別', + customWords: '自定義識別詞', + customWordsHint: '只對該訂閱使用的識別詞', + customWordsPlaceholder: + '屏蔽詞\n被替換詞 => 替換詞\n前定位詞 <> 後定位詞 >> 集偏移量(EP)\n被替換詞 => 替換詞 && 前定位詞 <> 後定位詞 >> 集偏移量(EP)\n其中替換詞支援格式:{ tmdbid/doubanid=xxx;type=movie/tv;s=xxx;e=xxx } 直接指定TMDBID/豆瓣ID識別,其中s、e為季數和集數(可選)', + cancelSubscribe: '取消訂閱', + save: '儲存', + cancelSubscribeConfirm: '是否確認取消訂閱?', + }, + subscribeFiles: { + title: '已下載文件', + noFilesMessage: '暫無文件', + close: '關閉', + downloadTab: '下載文件', + libraryTab: '媒體庫文件', + episodeColumn: '集', + torrentColumn: '種子', + fileColumn: '文件', + itemsPerPage: '每頁條數', + pageText: '{0}-{1} 共 {2} 條', + loadingText: '載入中...', + noData: '沒有數據', + season: '第 {number} 季', + }, + subscribeHistory: { + title: '訂閱歷史', + name: '名稱', + time: '時間', + type: '類型', + mediaName: '媒體名稱', + message: '消息', + torrents: '種子', + episodes: '集數', + noRecords: '無記錄', + close: '關閉', + }, + subscribeSeason: { + title: '選擇季', + seasonTitle: '第 {number} 季', + close: '關閉', + confirm: '確認', + }, + siteUserData: { + title: '站點用戶數據', + updateTime: '更新時間', + username: '用戶名', + uploadTitle: '上傳量', + uploadTotal: '總上傳量', + downloadTitle: '下載量', + downloadTotal: '總下載量', + seedingTitle: '做種數', + seedingCount: '總做種數', + seedingSize: '總做種體積', + userLevel: '用戶等級', + msgCount: '未讀消息', + inviteCount: '邀請數', + bonus: '積分', + ratio: '分享率', + joinTime: '加入時間', + trafficHistory: '歷史流量', + seedingDistribution: '做種分佈', + volumeTitle: '體積', + countTitle: '數量:', + noData: '無', + refreshing: '正在刷新站點數據...', + close: '關閉', + }, + siteResource: { + title: '站點資源', + searchHint: '搜索資源', + close: '關閉', + }, + forkSubscribe: { + title: '複製訂閱', + selectSubscriber: '選擇複製目標', + overwriteExisting: '覆蓋現有訂閱', + overwriteExistingHint: '目標用戶已存在該訂閱時,是否覆蓋', + confirm: '確認', + cancel: '取消', + }, + }, + file: { + newFolder: '新建文件夾', + createFolder: '創建文件夾', + fileName: '文件名', + fileSize: '文件大小', + fileType: '文件類型', + lastModified: '修改時間', + actions: '操作', + rename: '重命名', + delete: '刪除', + confirmDelete: '確認刪除', + upload: '上傳', + download: '下載', + preview: '預覽', + selectAll: '全選', + deselectAll: '取消全選', + moveUp: '返回上一級', + sortByName: '按名稱排序', + sortByTime: '按時間排序', + currentName: '當前名稱', + newName: '新名稱', + includeSubfolders: '自動重命名目錄內所有媒體文件', + emptyFolder: '空文件夾', + noFilesInFolder: '該文件夾內沒有文件', + autoRecognize: '自動識別名稱', + directoryTree: '目錄樹', + rootDirectory: '根目錄', + noDirectories: '沒有可用的目錄', + }, + person: { + alias: '別名:', + credits: '參演作品', + biography: '個人簡介', + birthday: '出生日期', + placeOfBirth: '出生地', + }, + error: { + title: '出錯啦!', + networkError: '無法獲取到媒體信息,請檢查網絡連接。', + serverError: '服務器錯誤,請稍後重試。', + notFound: '找不到請求的資源。', + }, + plugin: { + sort: { + popular: '熱門', + name: '插件名稱', + author: '作者', + repository: '插件倉庫', + latest: '最新發布', + }, + installingPlugin: '正在安裝插件...', + installing: '正在安裝 {name} v{version} ...', + installSuccess: '插件 {name} 安裝成功!', + installFailed: '插件 {name} 安裝失敗:{message}', + uninstalling: '正在卸載 {name} ...', + uninstallSuccess: '插件 {name} 卸載成功!', + uninstallFailed: '插件 {name} 卸載失敗:{message}', + updating: '正在更新 {name} 至 v{version} ...', + updateSuccess: '插件 {name} 更新成功!', + updateFailed: '插件 {name} 更新失敗:{message}', + noPlugins: '沒有安裝插件', + installed: '已安裝', + notInstalled: '未安裝', + hasUpdate: '有更新', + configuring: '配置', + enable: '啟用', + disable: '禁用', + settings: '設置', + }, + profile: { + personalInfo: '個人信息', + uploadNewAvatar: '上傳新頭像', + avatarFormatError: '上傳的文件不符合要求,請重新選擇頭像', + avatarSizeError: '文件大小不得大於800KB', + avatarUploadSuccess: '新頭像上傳成功,待保存後生效!', + resetAvatarSuccess: '已重置為默認頭像,待保存後生效!', + restoreAvatarSuccess: '已還原當前使用頭像!', + savingInProgress: '正在保存中,請稍後...', + usernameRequired: '用戶名不能為空', + passwordMismatch: '兩次輸入的密碼不一致', + usernameChangeSuccess: '【{oldName}】更名【{newName}】,用戶信息保存成功!', + saveSuccess: '用戶信息保存成功!', + saveFailedWithNameChange: '【{oldName}】更名【{newName}】,信息保存失敗:{message}!', + saveFailed: '用戶信息保存失敗:{message}!', + nickname: '暱稱', + nicknamePlaceholder: '顯示暱稱,優先於用戶名顯示', + accountBinding: '賬號綁定', + wechatUser: '微信用戶', + telegramUser: 'Telegram用戶', + slackUser: 'Slack用戶', + vocechatUser: 'VoceChat用戶', + synologychatUser: 'SynologyChat用戶', + doubanUser: '豆瓣用戶', + twoFactorAuthentication: '登錄雙重驗證', + enableTwoFactor: '開啟雙重驗證', + disableTwoFactor: '關閉雙重驗證', + otpGenerateFailed: '獲取otp uri失敗:{message}!', + otpDisableSuccess: '關閉登錄雙重驗證成功!', + otpDisableFailed: '關閉otp失敗:{message}!', + otpCodeRequired: '請填寫6位驗證碼', + otpEnableSuccess: '開啟登錄雙重驗證成功!', + otpEnableFailed: '開啟otp失敗:{message}!', + authenticatorApp: '身份驗證器', + authenticatorAppDescription: + '使用像Google Authenticator、Microsoft Authenticator、Authy或1Password這樣的身份驗證器應用程序,掃描二維碼。它將為您生成一個6位數的代碼,供您在下方輸入。', + secretKeyTip: '如果您在使用二維碼時遇到困難,請在您的應用程序中選擇手動輸入以上代碼。', + enterVerificationCode: '輸入驗證碼以確認開啟雙重驗證', + avatarFormatTip: '允許 JPG、PNG、GIF、WEBP 格式, 最大尺寸 800KB。', + }, +} diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 7e091b5e..dd610e9f 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -4,6 +4,7 @@ import { SUPPORTED_LOCALES, SupportedLocale } from '@/types/i18n' // 导入语言文件 import zhCN from '@/locales/zh-CN' +import zhTW from '@/locales/zh-TW' import enUS from '@/locales/en-US' // 创建 i18n 实例 @@ -13,6 +14,7 @@ const i18n = createI18n({ fallbackLocale: 'zh-CN', // 回退语言 messages: { 'zh-CN': zhCN, + 'zh-TW': zhTW, 'en-US': enUS, }, silentTranslationWarn: true, diff --git a/src/types/colorthief.d.ts b/src/types/colorthief.d.ts deleted file mode 100644 index 0519ecba..00000000 --- a/src/types/colorthief.d.ts +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/types/i18n-type.ts b/src/types/i18n-type.ts new file mode 100644 index 00000000..751778e8 --- /dev/null +++ b/src/types/i18n-type.ts @@ -0,0 +1,23 @@ +// 将中文标签转换为当前语言的标签 +export function getMeidaTypeText(label: string | undefined) { + if (!label) return '' + + const { t } = useI18n() + + // 常见的媒体类型及其映射 + const typeMap: Record = { + '电影': 'mediaType.movie', + '电视剧': 'mediaType.tv', + '动漫': 'mediaType.anime', + '合集': 'mediaType.collection', + '未知': 'mediaType.unknown', + } + + // 如果是已知类型,使用i18n翻译 + if (label in typeMap) { + return t(typeMap[label]) + } + + // 对于未知的类型,直接返回原始标签 + return label +} diff --git a/src/types/i18n.ts b/src/types/i18n.ts index f25d21f4..9c080774 100644 --- a/src/types/i18n.ts +++ b/src/types/i18n.ts @@ -1,9 +1,3 @@ -import zhCN from '@/locales/zh-CN' - -// 导出类型和常量,而不是作为语言消息文件 -export type MessageSchema = typeof zhCN -export type LocaleKey = keyof typeof zhCN - export interface LocaleInfo { name: string title: string @@ -16,6 +10,11 @@ export const SUPPORTED_LOCALES: Record = { title: '简体中文', flag: '🇨🇳', }, + 'zh-TW': { + name: 'zh-TW', + title: '繁體中文', + flag: '🇨🇳', + }, 'en-US': { name: 'en-US', title: 'English', diff --git a/tsconfig.json b/tsconfig.json index d0f4b28f..8c6b444e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,8 +3,8 @@ "baseUrl": "./", "target": "esnext", "useDefineForClassFields": true, - "module": "Node16", - "moduleResolution": "node16", + "module": "ESNext", + "moduleResolution": "bundler", "isolatedModules": true, "strict": true, "jsx": "preserve", @@ -73,4 +73,4 @@ "node_modules", "src/@iconify/*" ] -} +} \ No newline at end of file