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