feat: Add cht language support.
This commit is contained in:
@@ -756,6 +756,12 @@ const App: React.FC = () => {
|
|||||||
>
|
>
|
||||||
简体中文
|
简体中文
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
onClick={() => { setLanguage('cht'); setIsLangMenuOpen(false); }}
|
||||||
|
className={`w-full px-4 py-2 text-sm text-left hover:bg-gray-700 transition-colors ${language === 'cht' ? 'text-plex-orange font-bold' : 'text-gray-300'}`}
|
||||||
|
>
|
||||||
|
繁體中文
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -0,0 +1,161 @@
|
|||||||
|
export const cht = {
|
||||||
|
app: {
|
||||||
|
title: 'PlexSync',
|
||||||
|
manager: '管理',
|
||||||
|
footer: '© {year} PMS Playlist Sync。已連線至 Docker 後端。',
|
||||||
|
},
|
||||||
|
common: {
|
||||||
|
save: '儲存',
|
||||||
|
cancel: '取消',
|
||||||
|
revert: '還原',
|
||||||
|
delete: '刪除',
|
||||||
|
done: '完成',
|
||||||
|
loading: '載入中…',
|
||||||
|
refresh: '重新整理',
|
||||||
|
close: '關閉',
|
||||||
|
none: '無',
|
||||||
|
disabled: '已停用',
|
||||||
|
add: '新增',
|
||||||
|
switchLanguage: '切換語言',
|
||||||
|
},
|
||||||
|
server: {
|
||||||
|
local: '本機伺服器',
|
||||||
|
cloud: '雲端伺服器',
|
||||||
|
playlists: '{count} 個播放清單',
|
||||||
|
notConnected: '未連線',
|
||||||
|
connectionFailed: '連線失敗',
|
||||||
|
connecting: '連線中…',
|
||||||
|
waiting: '等待中…',
|
||||||
|
syncing: '同步中…',
|
||||||
|
noPlaylists: '找不到播放清單。',
|
||||||
|
cancelRefresh: '取消重新整理',
|
||||||
|
refreshPlaylists: '重新整理播放清單',
|
||||||
|
},
|
||||||
|
playlist: {
|
||||||
|
trackCount: '曲目數',
|
||||||
|
lastUpdated: '上次更新',
|
||||||
|
},
|
||||||
|
dashboard: {
|
||||||
|
mapping: '路徑對應',
|
||||||
|
backup: '備份',
|
||||||
|
autoSync: '自動同步',
|
||||||
|
watch: '監看',
|
||||||
|
watchModeActive: '監看模式:啟用',
|
||||||
|
watchModeDisabled: '監看模式:停用',
|
||||||
|
notSet: '未設定',
|
||||||
|
retain: '保留:{count}',
|
||||||
|
keep: '保留 {count}',
|
||||||
|
connected: '已連線至 Plex',
|
||||||
|
disconnected: '未連線',
|
||||||
|
synchronizing: 'SYNCHRONIZING',
|
||||||
|
syncComplete: 'SYNC COMPLETE',
|
||||||
|
},
|
||||||
|
strategies: {
|
||||||
|
title: '同步策略',
|
||||||
|
localOverwrite: {
|
||||||
|
label: '本機覆寫',
|
||||||
|
desc: '本機播放清單完全覆寫雲端。(無 Diff)',
|
||||||
|
},
|
||||||
|
cloudOverwrite: {
|
||||||
|
label: '雲端覆寫',
|
||||||
|
desc: '雲端播放清單完全覆寫本機。(無 Diff)',
|
||||||
|
},
|
||||||
|
mergeLocal: {
|
||||||
|
label: '雙向合併(本機優先)',
|
||||||
|
desc: '合併兩端。衝突以本機版本為準。',
|
||||||
|
},
|
||||||
|
mergeCloud: {
|
||||||
|
label: '雙向合併(雲端優先)',
|
||||||
|
desc: '合併兩端。衝突以雲端版本為準。',
|
||||||
|
},
|
||||||
|
syncNow: '立即同步',
|
||||||
|
syncing: '同步進行中…',
|
||||||
|
saveWarning: '同步前請先儲存待處理的變更(備份/路徑對應)。',
|
||||||
|
},
|
||||||
|
mapping: {
|
||||||
|
title: '路徑對應',
|
||||||
|
simple: '簡易對應',
|
||||||
|
regex: 'Regex 規則',
|
||||||
|
simpleTitle: '路徑對應',
|
||||||
|
simpleSubtitle: '使用簡單字串比對將本機路徑對應到雲端路徑',
|
||||||
|
regexPre: '前處理(同步前)',
|
||||||
|
regexPost: '後處理(同步後 / 結果)',
|
||||||
|
localPath: '本機路徑',
|
||||||
|
cloudPath: '雲端路徑',
|
||||||
|
pattern: '模式',
|
||||||
|
replace: '取代',
|
||||||
|
saveRules: '儲存規則',
|
||||||
|
noRules: '尚未定義規則。',
|
||||||
|
},
|
||||||
|
backup: {
|
||||||
|
title: '備份保留',
|
||||||
|
enable: '啟用備份',
|
||||||
|
enableDesc: '變更前建立副本',
|
||||||
|
maxVersions: '保留的最大版本數:',
|
||||||
|
noAutoDelete: '不自動刪除',
|
||||||
|
autoDelete: '自動刪除最舊版本',
|
||||||
|
},
|
||||||
|
schedule: {
|
||||||
|
title: '排程任務',
|
||||||
|
cron: 'Cron',
|
||||||
|
daily: '每日',
|
||||||
|
weekly: '每週',
|
||||||
|
weekdaysNarrow: {
|
||||||
|
0: '日',
|
||||||
|
1: '一',
|
||||||
|
2: '二',
|
||||||
|
3: '三',
|
||||||
|
4: '四',
|
||||||
|
5: '五',
|
||||||
|
6: '六',
|
||||||
|
},
|
||||||
|
enableCron: '啟用 Cron 排程',
|
||||||
|
enableDaily: '啟用每日執行',
|
||||||
|
enableWeekly: '啟用每週執行',
|
||||||
|
watchLocal: '監看本機變更',
|
||||||
|
watchDesc: '本機播放清單更新時自動同步',
|
||||||
|
schedule: '排程',
|
||||||
|
notConfigured: '尚未設定',
|
||||||
|
today: '今天',
|
||||||
|
tomorrow: '明天',
|
||||||
|
},
|
||||||
|
connection: {
|
||||||
|
titleConnected: '伺服器已連線',
|
||||||
|
titleConnect: '連線 Plex 伺服器',
|
||||||
|
serverDetails: '伺服器詳細資訊',
|
||||||
|
authentication: '驗證',
|
||||||
|
protocol: '通訊協定',
|
||||||
|
address: 'IP 位址或網域',
|
||||||
|
port: '連接埠',
|
||||||
|
token: 'X-Plex-Token(選填)',
|
||||||
|
username: '使用者名稱 / 電子郵件',
|
||||||
|
password: '密碼',
|
||||||
|
advanced: '進階選項',
|
||||||
|
timeout: '連線逾時(秒)',
|
||||||
|
connectBtn: '連線伺服器',
|
||||||
|
connecting: '連線中…',
|
||||||
|
connectedSuccess: '連線成功',
|
||||||
|
selectLibrary: '選擇要同步的媒體庫',
|
||||||
|
},
|
||||||
|
toasts: {
|
||||||
|
localRefreshCancelled: '已取消本機重新整理。',
|
||||||
|
cloudRefreshCancelled: '已取消雲端重新整理。',
|
||||||
|
strategySaved: '已儲存選擇的策略「{strategy}」。',
|
||||||
|
strategySaveFailed: '儲存同步策略失敗。',
|
||||||
|
mappingSaved: '已儲存路徑對應規則。',
|
||||||
|
mappingSaveFailed: '儲存路徑對應規則失敗。',
|
||||||
|
backupSaved: '已儲存備份設定。',
|
||||||
|
backupFailed: '儲存備份設定失敗。',
|
||||||
|
scheduleDisabled: '已停用排程任務。',
|
||||||
|
scheduleEmpty: '已停用排程任務(Cron 為空)。',
|
||||||
|
scheduleStarted: '排程任務更新成功。',
|
||||||
|
scheduleFailed: '更新排程失敗。',
|
||||||
|
syncFailed: '同步失敗。請檢查連線。',
|
||||||
|
backgroundSyncSuccess: '背景同步已成功完成。',
|
||||||
|
backgroundSyncFailed: '背景同步失敗:{error}',
|
||||||
|
librarySwitched: '媒體庫已切換為 {library}',
|
||||||
|
connectedTo: '已成功連線到 {name}',
|
||||||
|
connectionCancelled: '使用者已取消連線。',
|
||||||
|
librarySaveFailed: '儲存媒體庫選擇失敗。',
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
import { en } from './locales/en';
|
import { en } from './locales/en';
|
||||||
import { es } from './locales/es';
|
import { es } from './locales/es';
|
||||||
import { zh as chs } from './locales/zh';
|
import { zh as chs } from './locales/zh';
|
||||||
|
import { cht } from './locales/cht';
|
||||||
|
|
||||||
export const translations = {
|
export const translations = {
|
||||||
en,
|
en,
|
||||||
es,
|
es,
|
||||||
chs,
|
chs,
|
||||||
|
cht,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Language = keyof typeof translations;
|
export type Language = keyof typeof translations;
|
||||||
|
|||||||
Reference in New Issue
Block a user