mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-07-07 23:41:28 +08:00
更新国际化支持
This commit is contained in:
@@ -14,14 +14,18 @@ export default {
|
||||
inputMessage: 'Enter message or command',
|
||||
send: 'Send',
|
||||
noData: 'No Data',
|
||||
noContent: 'No Content Found',
|
||||
noContent: 'No relevant content found',
|
||||
all: 'All',
|
||||
default: 'Default',
|
||||
name: 'Name',
|
||||
create: 'Create',
|
||||
saving: 'Saving',
|
||||
reset: 'Reset',
|
||||
},
|
||||
theme: {
|
||||
light: 'Light',
|
||||
dark: 'Dark',
|
||||
auto: 'Auto',
|
||||
auto: 'Follow System',
|
||||
transparent: 'Transparent',
|
||||
purple: 'Purple',
|
||||
custom: 'Custom Theme',
|
||||
@@ -36,22 +40,22 @@ export default {
|
||||
selectLanguage: 'Select Language',
|
||||
logout: 'Logout',
|
||||
restarting: 'Restarting...',
|
||||
confirmRestart: 'Confirm Restart?',
|
||||
restartTip: 'After restarting, you will be logged out and need to log in again.',
|
||||
confirmRestart: 'Confirm restart system?',
|
||||
restartTip: 'After restart, you will be logged out and need to log in again.',
|
||||
},
|
||||
login: {
|
||||
wallpapers: 'wallpapers',
|
||||
wallpapers: 'Wallpapers',
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
otpCode: 'OTP Code',
|
||||
otpCode: 'Two-Factor Code',
|
||||
stayLoggedIn: 'Stay Logged In',
|
||||
login: 'Login',
|
||||
networkError: 'Login failed, please check your network connection!',
|
||||
authFailure: 'Login failed, please check your username, password or OTP code!',
|
||||
authFailure: 'Login failed, please check your username, password or two-factor authentication!',
|
||||
permissionDenied: 'Login failed, you do not have permission to access!',
|
||||
serverError: 'Login failed, server error!',
|
||||
loginFailed: 'Login Failed',
|
||||
checkCredentials: 'Please check your username, password or OTP code!',
|
||||
checkCredentials: 'Please check your username, password or two-factor authentication code!',
|
||||
},
|
||||
menu: {
|
||||
start: 'Start',
|
||||
@@ -71,7 +75,7 @@ export default {
|
||||
movieSubscribe: 'Movie Subscription',
|
||||
tvSubscribe: 'TV Subscription',
|
||||
history: 'History',
|
||||
transfer: 'Transfer',
|
||||
transfer: 'Organize',
|
||||
rename: 'Rename',
|
||||
statistic: 'Statistics',
|
||||
setting: 'Settings',
|
||||
@@ -84,11 +88,11 @@ export default {
|
||||
workflow: 'Workflow',
|
||||
calendar: 'Calendar',
|
||||
downloadManager: 'Download Manager',
|
||||
mediaOrganize: 'Media Organizer',
|
||||
mediaOrganize: 'Media Organize',
|
||||
fileManager: 'File Manager',
|
||||
pluginManager: 'Plugins',
|
||||
siteManager: 'Site Manager',
|
||||
userManager: 'User Manager',
|
||||
siteManager: 'Site Management',
|
||||
userManager: 'User Management',
|
||||
settings: 'Settings',
|
||||
},
|
||||
settingTabs: {
|
||||
@@ -98,7 +102,7 @@ export default {
|
||||
},
|
||||
directory: {
|
||||
title: 'Storage & Directories',
|
||||
description: 'Download directories, media library directories, organization, metadata scraping',
|
||||
description: 'Download directory, media library directory, organization, scraping',
|
||||
},
|
||||
site: {
|
||||
title: 'Sites',
|
||||
@@ -110,15 +114,15 @@ export default {
|
||||
},
|
||||
search: {
|
||||
title: 'Search & Download',
|
||||
description: 'Search data sources (TheMovieDb, Douban, Bangumi), download task labels, search sites',
|
||||
description: 'Search data sources (TheMovieDb, Douban, Bangumi), download task tags, search sites',
|
||||
},
|
||||
subscribe: {
|
||||
title: 'Subscription',
|
||||
description: 'Subscription sites, subscription modes, subscription rules, upgrade rules',
|
||||
description: 'Subscription sites, subscription mode, subscription rules, version upgrade rules',
|
||||
},
|
||||
scheduler: {
|
||||
title: 'Services',
|
||||
description: 'Scheduled tasks',
|
||||
description: 'Scheduled jobs',
|
||||
},
|
||||
notification: {
|
||||
title: 'Notifications',
|
||||
@@ -126,7 +130,7 @@ export default {
|
||||
},
|
||||
words: {
|
||||
title: 'Word Lists',
|
||||
description: 'Custom recognition words, custom groups, custom placeholders, file organization filter words',
|
||||
description: 'Custom recognition words, custom production/subtitle groups, custom placeholders, file organization block words',
|
||||
},
|
||||
about: {
|
||||
title: 'About',
|
||||
@@ -136,12 +140,12 @@ export default {
|
||||
subscribeTabs: {
|
||||
movie: {
|
||||
mysub: 'My Subscriptions',
|
||||
popular: 'Popular',
|
||||
popular: 'Popular Subscriptions',
|
||||
},
|
||||
tv: {
|
||||
mysub: 'My Subscriptions',
|
||||
popular: 'Popular',
|
||||
share: 'Shared',
|
||||
popular: 'Popular Subscriptions',
|
||||
share: 'Subscription Shares',
|
||||
},
|
||||
},
|
||||
pluginTabs: {
|
||||
@@ -155,12 +159,26 @@ export default {
|
||||
},
|
||||
user: {
|
||||
admin: 'Administrator',
|
||||
normalUser: 'Normal User',
|
||||
normalUser: 'Regular User',
|
||||
profile: 'Profile',
|
||||
systemSettings: 'System Settings',
|
||||
siteAuth: 'User Authentication',
|
||||
helpDocs: 'Help Docs',
|
||||
helpDocs: 'Help Documents',
|
||||
restart: 'Restart',
|
||||
management: 'User Management',
|
||||
noUsers: 'No Users',
|
||||
clickToAddUser: 'Click Add User card to add users',
|
||||
addUser: 'Add User',
|
||||
editUser: 'Edit User',
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
confirmPassword: 'Confirm Password',
|
||||
role: 'Role',
|
||||
email: 'Email',
|
||||
enabled: 'Enabled',
|
||||
disabled: 'Disabled',
|
||||
status: 'Status',
|
||||
operations: 'Operations',
|
||||
},
|
||||
nav: {
|
||||
more: 'More',
|
||||
@@ -178,7 +196,7 @@ export default {
|
||||
},
|
||||
rule: {
|
||||
title: 'Rules',
|
||||
subtitle: 'Rule Test',
|
||||
subtitle: 'Rule Testing',
|
||||
},
|
||||
log: {
|
||||
title: 'Logs',
|
||||
@@ -186,7 +204,7 @@ export default {
|
||||
},
|
||||
network: {
|
||||
title: 'Network',
|
||||
subtitle: 'Speed & Connectivity Test',
|
||||
subtitle: 'Network Speed and Connectivity Test',
|
||||
},
|
||||
system: {
|
||||
title: 'System',
|
||||
@@ -202,7 +220,7 @@ export default {
|
||||
clickToAdd: 'Click to Add',
|
||||
dragToCanvas: 'Drag to Canvas',
|
||||
tapComponentHint: 'Tap component to add to canvas',
|
||||
dragComponentHint: 'Drag components to canvas',
|
||||
dragComponentHint: 'Drag component to canvas',
|
||||
},
|
||||
dashboard: {
|
||||
storage: 'Storage Space',
|
||||
@@ -224,9 +242,9 @@ export default {
|
||||
tv: 'TV Show',
|
||||
},
|
||||
subscribe: {
|
||||
normalSub: 'Subscription',
|
||||
versionSub: 'Version Upgrade',
|
||||
addSuccess: '{name} added successfully!',
|
||||
normalSub: 'Subscribe',
|
||||
versionSub: 'Version Upgrade Subscribe',
|
||||
addSuccess: 'Added {name} successfully!',
|
||||
addFailed: 'Failed to add {name}: {message}!',
|
||||
cancelSuccess: 'Subscription cancelled!',
|
||||
cancelFailed: 'Failed to cancel subscription: {message}!',
|
||||
@@ -234,18 +252,16 @@ export default {
|
||||
name: 'Name',
|
||||
searchShares: 'Search Subscription Shares',
|
||||
keyword: 'Keyword',
|
||||
noShareData:
|
||||
'No shared subscription data available, data sharing is not enabled or the server cannot be connected.',
|
||||
noPopularData:
|
||||
'No popular subscription data available, data sharing is not enabled or the server cannot be connected.',
|
||||
noFilterData: 'No matching content found. Please change the filter criteria.',
|
||||
noShareData: 'No shared subscription data received, data sharing not enabled or server cannot connect.',
|
||||
noPopularData: 'No popular subscription data received, data sharing not enabled or server cannot connect.',
|
||||
noFilterData: 'No related content found with current filters, please change filter conditions.',
|
||||
noSubscribeData: 'Please search to add movie or TV show subscriptions.',
|
||||
sharer: 'Shared by',
|
||||
sharer: 'Sharer',
|
||||
follow: 'Follow',
|
||||
unfollow: 'Unfollow',
|
||||
recognitionWords: 'Recognition Words',
|
||||
cancelShare: 'Cancel Share',
|
||||
usageCount: 'Used {count} times',
|
||||
usageCount: '{count} Uses',
|
||||
},
|
||||
recommend: {
|
||||
all: 'All',
|
||||
@@ -255,7 +271,7 @@ export default {
|
||||
categoryRankings: 'Rankings',
|
||||
trendingNow: 'Trending Now',
|
||||
nowShowing: 'Now Showing',
|
||||
bangumiDaily: 'Bangumi Daily',
|
||||
bangumiDaily: 'Bangumi Daily Release',
|
||||
tmdbHotMovies: 'TMDB Hot Movies',
|
||||
tmdbHotTVShows: 'TMDB Hot TV Shows',
|
||||
doubanHotMovies: 'Douban Hot Movies',
|
||||
@@ -263,13 +279,13 @@ export default {
|
||||
doubanHotAnime: 'Douban Hot Anime',
|
||||
doubanNewMovies: 'Douban New Movies',
|
||||
doubanNewTVShows: 'Douban New TV Shows',
|
||||
doubanTop250: 'Douban Movie TOP250',
|
||||
doubanTop250: 'Douban Top 250 Movies',
|
||||
doubanChineseTVRankings: 'Douban Chinese TV Rankings',
|
||||
doubanGlobalTVRankings: 'Douban Global TV Rankings',
|
||||
noCategoryContent: 'No content to display in this category',
|
||||
configureContent: 'Configure Content',
|
||||
noCategoryContent: 'No content to display in current category',
|
||||
configureContent: 'Configure Display Content',
|
||||
customizeContent: 'Customize Content',
|
||||
selectContentToDisplay: 'Select the content you want to display',
|
||||
selectContentToDisplay: 'Select content you want to display on the page',
|
||||
selectAll: 'Select All',
|
||||
selectNone: 'Select None',
|
||||
},
|
||||
@@ -278,8 +294,8 @@ export default {
|
||||
dragToReorder: 'Drag to reorder tabs',
|
||||
},
|
||||
downloading: {
|
||||
noDownloader: 'No Downloaders',
|
||||
configureDownloader: 'Please configure and enable downloaders in settings first.',
|
||||
noDownloader: 'No Downloader',
|
||||
configureDownloader: 'Please configure and enable a downloader in settings first.',
|
||||
},
|
||||
resource: {
|
||||
searchResults: 'Resource Search Results',
|
||||
@@ -301,8 +317,8 @@ export default {
|
||||
},
|
||||
notFound: {
|
||||
title: 'Page Not Found ⚠️',
|
||||
description: 'The page you are trying to access does not exist. Please check the URL.',
|
||||
backButton: 'Back',
|
||||
description: 'The page you tried to access does not exist. Please check if the address is correct.',
|
||||
backButton: 'Go Back',
|
||||
},
|
||||
torrent: {
|
||||
sortDefault: 'Default',
|
||||
@@ -310,9 +326,9 @@ export default {
|
||||
sortSize: 'Size',
|
||||
sortSeeder: 'Seeders',
|
||||
filterSite: 'Site',
|
||||
filterSeason: 'Season',
|
||||
filterFreeState: 'Promotion',
|
||||
filterVideoCode: 'Video Code',
|
||||
filterSeason: 'Season/Episode',
|
||||
filterFreeState: 'Promotion Status',
|
||||
filterVideoCode: 'Video Codec',
|
||||
filterEdition: 'Quality',
|
||||
filterResolution: 'Resolution',
|
||||
filterReleaseGroup: 'Release Group',
|
||||
@@ -325,15 +341,15 @@ export default {
|
||||
episode: 'Episode {number}',
|
||||
},
|
||||
storage: {
|
||||
usedPercent: 'Used {percent}%',
|
||||
usedPercent: '{percent}% Used',
|
||||
},
|
||||
site: {
|
||||
noSites: 'No Sites',
|
||||
sitesWillBeShownHere: 'Added and supported sites will be displayed here.',
|
||||
sitesWillBeShownHere: 'Added and supported sites will be shown here.',
|
||||
},
|
||||
message: {
|
||||
loadMore: 'Load More',
|
||||
noMoreData: 'No More Data',
|
||||
noMoreData: 'No more data',
|
||||
},
|
||||
logging: {
|
||||
level: 'Level',
|
||||
@@ -833,7 +849,7 @@ export default {
|
||||
otp: 'Enable Two-Factor Authentication',
|
||||
avatar: 'Avatar',
|
||||
uploadAvatar: 'Upload Avatar',
|
||||
resetDefaultAvatar: 'Reset to Default Avatar',
|
||||
resetDefaultAvatar: 'Reset Default Avatar',
|
||||
restoreCurrentAvatar: 'Restore Current Avatar',
|
||||
notifications: 'Notifications',
|
||||
wechat: 'WeChat UserID',
|
||||
@@ -846,28 +862,28 @@ export default {
|
||||
updatingUser: 'Updating user [{name}], please wait',
|
||||
usernameRequired: 'Username cannot be empty',
|
||||
usernameExists: 'Username already exists',
|
||||
passwordMismatch: 'Passwords do not match',
|
||||
passwordMismatch: 'The two passwords do not match',
|
||||
userCreated: 'User [{name}] created successfully',
|
||||
userCreateFailed: 'Failed to create user: {message}',
|
||||
userUpdateSuccess: 'User [{name}] updated successfully',
|
||||
userUpdateFailed: 'Failed to update user: {message}',
|
||||
userDeleteSuccess: 'User [{name}] deleted successfully',
|
||||
userDeleteFailed: 'Failed to delete user: {message}',
|
||||
invalidFile: 'The uploaded file does not meet requirements, please select another avatar',
|
||||
fileSizeLimit: 'File size cannot exceed 800KB',
|
||||
invalidFile: 'The uploaded file does not meet the requirements, please choose a new avatar',
|
||||
fileSizeLimit: 'File size must not exceed 800KB',
|
||||
avatarUploadSuccess: 'New avatar uploaded successfully, will take effect after saving!',
|
||||
resetAvatarSuccess: 'Reset to default avatar, will take effect after saving!',
|
||||
restoreAvatarSuccess: 'Current avatar restored!',
|
||||
restoreAvatarSuccess: 'Restored current avatar!',
|
||||
deleteConfirm: 'Confirm delete user [{name}]?',
|
||||
saveUserInfo: 'Save User Information',
|
||||
cannotDeleteCurrentUser: 'Cannot delete the currently logged-in user',
|
||||
cannotDeleteCurrentUser: 'Cannot delete current logged-in user',
|
||||
deleteUser: 'Delete User',
|
||||
},
|
||||
searchBar: {
|
||||
search: 'Search',
|
||||
searchPlaceholder: 'Search functions, subscriptions, settings...',
|
||||
searchPlaceholder: 'Search features, subscriptions, settings...',
|
||||
recentSearches: 'Recent Searches',
|
||||
noRecentSearches: 'No recent searches',
|
||||
noRecentSearches: 'No recent search history',
|
||||
functions: 'Functions',
|
||||
noFunctionsFound: 'No matching functions',
|
||||
plugins: 'Plugins',
|
||||
@@ -877,13 +893,13 @@ export default {
|
||||
searchSites: 'Search Sites',
|
||||
selectSites: 'Select Sites',
|
||||
collections: 'Collections',
|
||||
collectionSearch: 'related collections',
|
||||
actorSearch: 'related actors, directors, etc.',
|
||||
historySearch: 'related history records',
|
||||
collectionSearch: 'Related series works',
|
||||
actorSearch: 'Related actors, directors, etc.',
|
||||
historySearch: 'Related history records',
|
||||
siteResources: 'Site Resources',
|
||||
searchInSites: 'Search for torrents in sites',
|
||||
relatedResources: 'related resources',
|
||||
searchTip: 'Search for movies, TV shows, actors, resources, etc.',
|
||||
searchInSites: 'Search for torrent resources in sites',
|
||||
relatedResources: 'Related Resources',
|
||||
searchTip: 'You can search for movies, TV shows, actors, resources, etc.',
|
||||
},
|
||||
searchSite: {
|
||||
selectSites: 'Select Sites',
|
||||
@@ -903,7 +919,7 @@ export default {
|
||||
downloader: 'Downloader (Default)',
|
||||
saveDirectory: 'Save Directory (Auto)',
|
||||
defaultPlaceholder: 'Leave empty for default',
|
||||
autoPlaceholder: 'Leave empty for auto match',
|
||||
autoPlaceholder: 'Leave empty for auto-match',
|
||||
downloading: 'Downloading...',
|
||||
startDownload: 'Start Download',
|
||||
downloadSuccess: '{site} {title} downloaded successfully!',
|
||||
@@ -914,41 +930,39 @@ export default {
|
||||
season: 'Season {number}',
|
||||
title: 'Title',
|
||||
description: 'Description',
|
||||
descriptionHint:
|
||||
'Fill in the description of the subscription. Search terms and identification terms in the subscription will be included in the share by default',
|
||||
descriptionHint: 'Add a description about this subscription. Search terms, recognition words, etc. will be included in the share by default',
|
||||
shareUser: 'Share User',
|
||||
shareUserHint: 'Nickname of the sharer',
|
||||
shareUserHint: 'Sharer\'s nickname',
|
||||
confirmShare: 'Confirm Share',
|
||||
shareSuccess: '{name} shared successfully!',
|
||||
shareFailed: '{name} share failed: {message}!',
|
||||
},
|
||||
u115Auth: {
|
||||
loginTitle: '115 Cloud Login',
|
||||
scanQrCode: 'Please scan the QR code with WeChat or 115 client',
|
||||
scanned: 'QR code scanned, please confirm login',
|
||||
scanQrCode: 'Please scan with WeChat or 115 client',
|
||||
scanned: 'Scanned, please confirm login',
|
||||
complete: 'Complete',
|
||||
},
|
||||
aliyunAuth: {
|
||||
loginTitle: 'Aliyun Drive Login',
|
||||
scanQrCode: 'Please scan with Aliyun Drive App',
|
||||
scanned: 'QR code scanned',
|
||||
scanned: 'Scanned',
|
||||
complete: 'Complete',
|
||||
},
|
||||
rcloneConfig: {
|
||||
title: 'RClone Configuration',
|
||||
filePath: 'Rclone Config File Path',
|
||||
fileContent: 'Rclone Config File Content',
|
||||
defaultContent:
|
||||
'# Please fill in the rclone configuration file content here \n# Please refer to https://rclone.org/docs/ \n# Storage node name must be: MP',
|
||||
filePath: 'rclone config file path',
|
||||
fileContent: 'rclone config file content',
|
||||
defaultContent: '# Please fill in your rclone config file content here \n# Please refer to https://rclone.org/docs/ \n# Storage node name must be: MP',
|
||||
complete: 'Complete',
|
||||
},
|
||||
alistConfig: {
|
||||
title: 'Alist Configuration',
|
||||
serverUrl: 'Alist Server URL',
|
||||
serverUrl: 'Alist server address',
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
tokenUrl: 'Token URL',
|
||||
loginType: 'Login Type',
|
||||
tokenUrl: 'Token acquisition address',
|
||||
loginType: 'Login method',
|
||||
loginTypeOptions: {
|
||||
guest: 'Guest',
|
||||
username: 'Username & Password',
|
||||
@@ -967,17 +981,17 @@ export default {
|
||||
schedule: 'Schedule',
|
||||
cronExpr: 'Cron Expression',
|
||||
cronExprDesc: 'Cron expression for workflow scheduling',
|
||||
nameRequired: 'Please fill in all required information!',
|
||||
addSuccess: 'Workflow created successfully. Please edit the process!',
|
||||
addFailed: 'Failed to create workflow: {message}',
|
||||
editSuccess: 'Workflow modified successfully!',
|
||||
editFailed: 'Failed to modify workflow: {message}',
|
||||
nameRequired: 'Please fill in complete information!',
|
||||
addSuccess: 'Task created successfully, please edit the workflow!',
|
||||
addFailed: 'Failed to create task: {message}',
|
||||
editSuccess: 'Task modified successfully!',
|
||||
editFailed: 'Failed to modify task: {message}',
|
||||
cancel: 'Cancel',
|
||||
confirm: 'Confirm',
|
||||
},
|
||||
workflowActions: {
|
||||
title: 'Edit Workflow',
|
||||
noActionsMessage: 'No actions in the workflow, please add actions',
|
||||
noActionsMessage: 'Workflow has no actions, please add actions',
|
||||
addAction: 'Add Action',
|
||||
editAction: 'Edit Action',
|
||||
deleteAction: 'Delete Action',
|
||||
@@ -995,24 +1009,24 @@ export default {
|
||||
confirmDeleteMessage: 'Are you sure you want to delete this action? This operation cannot be undone.',
|
||||
yesDelete: 'Yes, Delete',
|
||||
noCancel: 'Cancel',
|
||||
invalidConnection: 'Invalid connection: Cannot connect to self or same type port!',
|
||||
invalidConnection: 'Invalid connection: cannot connect to self or ports of the same type!',
|
||||
componentNotFound: 'Component {component} not found',
|
||||
componentAdded: 'Component added to canvas',
|
||||
saveSuccess: 'Workflow saved successfully!',
|
||||
saveFailed: 'Failed to save workflow: {message}',
|
||||
importTitle: 'Import Workflow',
|
||||
saveSuccess: 'Task workflow saved successfully!',
|
||||
saveFailed: 'Failed to save task workflow: {message}',
|
||||
importTitle: 'Import Task Workflow',
|
||||
importSuccess: 'Import successful!',
|
||||
importFailed: 'Import failed!',
|
||||
codeCopied: 'Workflow code copied to clipboard!',
|
||||
codeCopied: 'Task workflow code copied to clipboard!',
|
||||
},
|
||||
siteCookieUpdate: {
|
||||
title: 'Update Site Cookie',
|
||||
checkHint: 'Checking login status, please wait...',
|
||||
confirmUpdateTitle: 'Confirm Update',
|
||||
confirmUpdateMessage: "Do you want to update this site's cookie with the local cookie?",
|
||||
confirmUpdateMessage: 'Do you want to update this site\'s cookie with the local cookie?',
|
||||
processing: 'Processing...',
|
||||
success: 'Cookie updated successfully',
|
||||
failed: 'Cookie update failed',
|
||||
failed: 'Failed to update cookie',
|
||||
confirm: 'Confirm',
|
||||
cancel: 'Cancel',
|
||||
},
|
||||
@@ -1024,7 +1038,7 @@ export default {
|
||||
iconLabel: 'Site Icon',
|
||||
uploadIcon: 'Upload Icon',
|
||||
cookie: 'Cookie',
|
||||
rssUrl: 'RSS URL',
|
||||
rssUrl: 'RSS Link',
|
||||
enableLabel: 'Enable',
|
||||
pubEnableLabel: 'Public Resources',
|
||||
priorityLabel: 'Priority',
|
||||
@@ -1048,7 +1062,7 @@ export default {
|
||||
title: 'Plugin Market Settings',
|
||||
repoUrl: 'Plugin Repository URL',
|
||||
repoPlaceholder: 'Format: https://github.com/jxxghp/MoviePilot-Plugins/,https://github.com/xxxx/xxxxxx/',
|
||||
repoHint: 'Multiple addresses separated by commas, only supports Github repositories',
|
||||
repoHint: 'Multiple URLs separated by commas, only Github repositories are supported',
|
||||
close: 'Close',
|
||||
save: 'Save',
|
||||
saveSuccess: 'Plugin repository saved successfully',
|
||||
@@ -1057,21 +1071,21 @@ export default {
|
||||
userAuth: {
|
||||
title: 'User Authentication',
|
||||
codeLabel: 'Authentication Code',
|
||||
codePlaceholder: 'Please enter the authentication code',
|
||||
authBtn: 'Authenticate',
|
||||
codePlaceholder: 'Please enter authentication code',
|
||||
authBtn: 'Start Authentication',
|
||||
closeBtn: 'Close',
|
||||
selectSite: 'Select Authentication Site',
|
||||
selectSiteRequired: 'Please select an authentication site!',
|
||||
selectSiteRequired: 'Please select authentication site!',
|
||||
siteConfigNotExist: 'Site configuration does not exist!',
|
||||
fieldRequired: 'Please enter {name}!',
|
||||
authSuccess: 'User authentication successful, please login again!',
|
||||
authSuccess: 'User authentication successful, please log in again!',
|
||||
authFailed: 'Authentication failed: {message}',
|
||||
},
|
||||
transferQueue: {
|
||||
title: 'Transfer Queue',
|
||||
title: 'Organization Queue',
|
||||
name: 'Name',
|
||||
type: 'Type',
|
||||
state: 'State',
|
||||
state: 'Status',
|
||||
progress: 'Progress',
|
||||
startTime: 'Start Time',
|
||||
speedTitle: 'Speed',
|
||||
@@ -1090,9 +1104,9 @@ export default {
|
||||
close: 'Close',
|
||||
},
|
||||
reorganize: {
|
||||
title: 'Reorganize',
|
||||
sourceTitle: 'Source Files',
|
||||
targetTitle: 'Target Files',
|
||||
title: 'Organize',
|
||||
sourceTitle: 'Source File',
|
||||
targetTitle: 'Target File',
|
||||
processingTitle: 'Processing',
|
||||
confirmTitle: 'Confirm',
|
||||
selectFile: 'Select File',
|
||||
@@ -1105,120 +1119,119 @@ export default {
|
||||
selectTargetPath: 'Select Target Path',
|
||||
selectTargetDir: 'Select Target Directory',
|
||||
selectFileName: 'Select Filename',
|
||||
confirmMoving: 'Please confirm moving!',
|
||||
sourceLabel: 'Source:',
|
||||
targetLabel: 'Target Directory:',
|
||||
confirmMoving: 'Please confirm move!',
|
||||
sourceLabel: 'Source file:',
|
||||
targetLabel: 'Target directory:',
|
||||
filenameLabel: 'Filename:',
|
||||
close: 'Close',
|
||||
next: 'Next',
|
||||
previous: 'Previous',
|
||||
confirm: 'Confirm',
|
||||
manualTitle: 'Manual Reorganize',
|
||||
multipleItemsTitle: 'Reorganize - {count} Items',
|
||||
singleItemTitle: 'Reorganize - {path}',
|
||||
manualTitle: 'Manual Organization',
|
||||
multipleItemsTitle: 'Organize - {count} Items',
|
||||
singleItemTitle: 'Organize - {path}',
|
||||
targetStorage: 'Target Storage',
|
||||
targetStorageHint: 'Storage for reorganization',
|
||||
transferType: 'Transfer Method',
|
||||
transferTypeHint: 'File operation method',
|
||||
targetStorageHint: 'Organization target storage',
|
||||
transferType: 'Organization Method',
|
||||
transferTypeHint: 'File operation organization method',
|
||||
targetPath: 'Target Path',
|
||||
targetPathHint: 'Target path for reorganization, leave empty for automatic matching',
|
||||
targetPathPlaceholder: 'Leave empty for automatic',
|
||||
targetPathHint: 'Organization target path, leave empty for auto-match',
|
||||
targetPathPlaceholder: 'Leave empty for auto',
|
||||
mediaType: 'Type',
|
||||
mediaTypeHint: 'Media type of the file',
|
||||
mediaTypeHint: 'File media type',
|
||||
tmdbId: 'TheMovieDb ID',
|
||||
doubanId: 'Douban ID',
|
||||
mediaIdHint: 'Search media ID by name, leave empty for automatic recognition',
|
||||
mediaIdPlaceholder: 'Leave empty for automatic recognition',
|
||||
mediaIdHint: 'Query media ID by name, leave empty for auto recognition',
|
||||
mediaIdPlaceholder: 'Leave empty for auto recognition',
|
||||
episodeGroup: 'Episode Group ID',
|
||||
episodeGroupHint: 'Specify episode group',
|
||||
episodeGroupPlaceholder: 'Manually search episode group',
|
||||
episodeGroupPlaceholder: 'Manually query episode group',
|
||||
season: 'Season',
|
||||
seasonHint: 'Which season',
|
||||
episodeDetail: 'Episode',
|
||||
episodeDetailHint: 'Episode number or range, e.g., 1 or 1,2',
|
||||
episodeDetailPlaceholder: 'Start episode,end episode',
|
||||
episodeFormat: 'Episode Format',
|
||||
episodeFormatHint: 'Use {ep} to locate the episode part in the filename for recognition',
|
||||
episodeFormatPlaceholder: 'Use {ep} to locate episode',
|
||||
episodeDetailHint: 'Episode number or range, e.g. 1 or 1,2',
|
||||
episodeDetailPlaceholder: 'Start episode,End episode',
|
||||
episodeFormat: 'Episode Positioning',
|
||||
episodeFormatHint: 'Use {ep} to position episode number part in filename to assist recognition',
|
||||
episodeFormatPlaceholder: 'Use {ep} to position episode',
|
||||
episodeOffset: 'Episode Offset',
|
||||
episodeOffsetHint: 'Episode offset calculation, e.g., -10 or EP*2',
|
||||
episodeOffsetPlaceholder: 'e.g., -10',
|
||||
episodeOffsetHint: 'Episode offset calculation, e.g. -10 or EP*2',
|
||||
episodeOffsetPlaceholder: 'e.g. -10',
|
||||
episodePart: 'Specify Part',
|
||||
episodePartHint: 'Specify part, e.g., part1',
|
||||
episodePartPlaceholder: 'e.g., part1',
|
||||
minFileSize: 'Minimum File Size (MB)',
|
||||
minFileSizeHint: 'Only reorganize files larger than the minimum file size',
|
||||
typeFolderOption: 'Categorize by Type',
|
||||
typeFolderHint: 'Add subdirectories by media type in the target path during reorganization',
|
||||
categoryFolderOption: 'Categorize by Category',
|
||||
categoryFolderHint: 'Add subdirectories by media category in the target path during reorganization',
|
||||
episodePartHint: 'Specify part, e.g. part1',
|
||||
episodePartPlaceholder: 'e.g. part1',
|
||||
minFileSize: 'Min File Size (MB)',
|
||||
minFileSizeHint: 'Only organize files larger than minimum file size',
|
||||
typeFolderOption: 'Classify by Type',
|
||||
typeFolderHint: 'Add subdirectory by media type in target path during organization',
|
||||
categoryFolderOption: 'Classify by Category',
|
||||
categoryFolderHint: 'Add subdirectory by media category in target path during organization',
|
||||
scrapeOption: 'Scrape Metadata',
|
||||
scrapeHint: 'Automatically scrape metadata after reorganization',
|
||||
scrapeHint: 'Automatically scrape metadata after organization',
|
||||
fromHistoryOption: 'Reuse Historical Recognition Info',
|
||||
fromHistoryHint: 'Use media information recognized in historical reorganization records',
|
||||
addToQueue: 'Add to Queue',
|
||||
reorganizeNow: 'Reorganize Now',
|
||||
fromHistoryHint: 'Use media info already recognized in historical organization records',
|
||||
addToQueue: 'Add to Organization Queue',
|
||||
reorganizeNow: 'Organize Now',
|
||||
auto: 'Auto',
|
||||
processing: 'Processing ...',
|
||||
successMessage: 'File {name} has been added to the reorganization queue!',
|
||||
successMessage: 'File {name} has been added to the organization queue!',
|
||||
},
|
||||
subscribeEdit: {
|
||||
titleDefault: 'Default Subscription Rule',
|
||||
titleDefault: 'Default Subscription Rules',
|
||||
titleEditFormat: 'Edit Subscription - {name} {season}',
|
||||
seasonFormat: 'Season {number}',
|
||||
tabs: {
|
||||
basic: 'Basic',
|
||||
advance: 'Advanced',
|
||||
},
|
||||
searchKeyword: 'Search Keyword',
|
||||
searchKeywordHint: 'Keyword used when searching sites',
|
||||
searchKeyword: 'Search Keywords',
|
||||
searchKeywordHint: 'Specify keywords used when searching sites',
|
||||
totalEpisode: 'Total Episodes',
|
||||
totalEpisodeHint: 'Total number of episodes',
|
||||
startEpisode: 'Start Episode',
|
||||
startEpisodeHint: 'Episode number to start subscription',
|
||||
startEpisodeHint: 'Starting episode number to subscribe',
|
||||
quality: 'Quality',
|
||||
qualityHint: 'Resource quality for subscription',
|
||||
qualityHint: 'Subscription resource quality',
|
||||
resolution: 'Resolution',
|
||||
resolutionHint: 'Resource resolution for subscription',
|
||||
effect: 'Effect',
|
||||
effectHint: 'Resource effect for subscription',
|
||||
subscribeSites: 'Subscribe Sites',
|
||||
subscribeSitesHint: 'Sites to subscribe from, use system settings if none selected',
|
||||
resolutionHint: 'Subscription resource resolution',
|
||||
effect: 'Effects',
|
||||
effectHint: 'Subscription resource effects',
|
||||
subscribeSites: 'Subscription Sites',
|
||||
subscribeSitesHint: 'Range of sites for subscription, use system settings if none selected',
|
||||
downloader: 'Downloader',
|
||||
downloaderHint: 'Specify which downloader to use for this subscription',
|
||||
downloaderHint: 'Specify downloader for this subscription',
|
||||
savePath: 'Save Path',
|
||||
savePathHint: 'Specify download path for this subscription, leave empty to use default directories',
|
||||
savePathHint: 'Specify download save path for this subscription, leave empty to use default download directory',
|
||||
bestVersion: 'Version Upgrade',
|
||||
bestVersionHint: 'Enable version upgrade based on priority',
|
||||
searchImdbid: 'Use ImdbID Search',
|
||||
bestVersionHint: 'Perform version upgrade subscription based on upgrade priorities',
|
||||
searchImdbid: 'Search Using ImdbID',
|
||||
searchImdbidHint: 'Use ImdbID for precise resource searching',
|
||||
showEditDialog: 'Edit More Rules When Subscribing',
|
||||
showEditDialogHint: 'Show this edit dialog when adding subscription',
|
||||
showEditDialogHint: 'Show this edit subscription dialog when adding subscription',
|
||||
include: 'Include (Keywords, Regex)',
|
||||
includeHint: 'Include rules, supports regex',
|
||||
includeHint: 'Include rules, supports regular expressions',
|
||||
exclude: 'Exclude (Keywords, Regex)',
|
||||
excludeHint: 'Exclude rules, supports regex',
|
||||
excludeHint: 'Exclude rules, supports regular expressions',
|
||||
filterGroups: 'Priority Rule Groups',
|
||||
filterGroupsHint: 'Filter subscription based on selected rule groups',
|
||||
episodeGroup: 'Episode Group',
|
||||
episodeGroupHint: 'Recognize and scrape based on specific episode group',
|
||||
season: 'Season',
|
||||
seasonHint: 'Specify season for subscription',
|
||||
filterGroupsHint: 'Filter subscriptions by selected filter rule groups',
|
||||
episodeGroup: 'Specify Episode Group',
|
||||
episodeGroupHint: 'Recognize and scrape by specific episode group',
|
||||
season: 'Specify Season',
|
||||
seasonHint: 'Specify any season for subscription',
|
||||
mediaCategory: 'Custom Category',
|
||||
mediaCategoryHint: 'Specify category name, auto-detect if empty',
|
||||
mediaCategoryHint: 'Specify category name, leave empty for auto-recognition',
|
||||
customWords: 'Custom Recognition Words',
|
||||
customWordsHint: 'Recognition words only for this subscription',
|
||||
customWordsPlaceholder:
|
||||
'Filter word\nReplaced word => Replacement\nFront position word <> Back position word >> Episode offset (EP)\nReplaced word => Replacement && Front position word <> Back position word >> Episode offset (EP)\nReplacement format: {[tmdbid/doubanid=xxx;type=movie/tv;s=xxx;e=xxx]} to specify TMDBID/Douban ID, where s and e are season and episode (optional)',
|
||||
customWordsHint: 'Recognition words only used for this subscription',
|
||||
customWordsPlaceholder: 'Block word\nReplaced word => Replacement word\nPrefix <> Suffix >> Episode offset (EP)\nReplaced word => Replacement word && Prefix <> Suffix >> Episode offset (EP)\nReplacement word supports format: { tmdbid/doubanid=xxx;type=movie/tv;s=xxx;e=xxx } to directly specify TMDBID/Douban ID recognition, where s, e are season and episode numbers (optional)',
|
||||
cancelSubscribe: 'Cancel Subscription',
|
||||
cancelSubscribeConfirm: 'Are you sure you want to cancel this subscription?',
|
||||
save: 'Save',
|
||||
cancelSubscribeConfirm: 'Are you sure you want to cancel the subscription?',
|
||||
},
|
||||
subscribeFiles: {
|
||||
title: 'Downloaded Files',
|
||||
noFilesMessage: 'No files',
|
||||
close: 'Close',
|
||||
downloadTab: 'Downloaded Files',
|
||||
downloadTab: 'Download Files',
|
||||
libraryTab: 'Media Library Files',
|
||||
episodeColumn: 'Episode',
|
||||
torrentColumn: 'Torrent',
|
||||
@@ -1262,28 +1275,136 @@ export default {
|
||||
msgCount: 'Unread Messages',
|
||||
inviteCount: 'Invites',
|
||||
bonus: 'Bonus Points',
|
||||
ratio: 'Share Ratio',
|
||||
ratio: 'Ratio',
|
||||
joinTime: 'Join Time',
|
||||
trafficHistory: 'Traffic History',
|
||||
seedingDistribution: 'Seeding Distribution',
|
||||
volumeTitle: 'Volume',
|
||||
countTitle: 'Count: ',
|
||||
countTitle: 'Count:',
|
||||
noData: 'None',
|
||||
refreshing: 'Refreshing site data...',
|
||||
close: 'Close',
|
||||
},
|
||||
siteResource: {
|
||||
title: 'Site Resources',
|
||||
searchHint: 'Search Resources',
|
||||
searchHint: 'Search resources',
|
||||
close: 'Close',
|
||||
},
|
||||
forkSubscribe: {
|
||||
title: 'Fork Subscription',
|
||||
selectSubscriber: 'Select Target User',
|
||||
overwriteExisting: 'Overwrite Existing',
|
||||
overwriteExistingHint: 'Whether to overwrite if the target user already has this subscription',
|
||||
title: 'Copy Subscription',
|
||||
selectSubscriber: 'Select Copy Target',
|
||||
overwriteExisting: 'Overwrite Existing Subscription',
|
||||
overwriteExistingHint: 'Whether to overwrite when target user already has this subscription',
|
||||
confirm: 'Confirm',
|
||||
cancel: 'Cancel',
|
||||
},
|
||||
},
|
||||
}
|
||||
file: {
|
||||
newFolder: 'New Folder',
|
||||
createFolder: 'Create Folder',
|
||||
fileName: 'Filename',
|
||||
fileSize: 'File Size',
|
||||
fileType: 'File Type',
|
||||
lastModified: 'Last Modified',
|
||||
actions: 'Actions',
|
||||
rename: 'Rename',
|
||||
delete: 'Delete',
|
||||
confirmDelete: 'Confirm Delete',
|
||||
upload: 'Upload',
|
||||
download: 'Download',
|
||||
preview: 'Preview',
|
||||
selectAll: 'Select All',
|
||||
deselectAll: 'Deselect All',
|
||||
moveUp: 'Go Up',
|
||||
sortByName: 'Sort by Name',
|
||||
sortByTime: 'Sort by Time',
|
||||
currentName: 'Current Name',
|
||||
newName: 'New Name',
|
||||
includeSubfolders: 'Auto rename all media files in directory',
|
||||
emptyFolder: 'Empty Folder',
|
||||
noFilesInFolder: 'No files in this folder',
|
||||
autoRecognize: 'Auto Recognize Name',
|
||||
directoryTree: 'Directory Tree',
|
||||
rootDirectory: 'Root Directory',
|
||||
noDirectories: 'No directories available',
|
||||
},
|
||||
person: {
|
||||
alias: 'Also Known As:',
|
||||
credits: 'Credits',
|
||||
biography: 'Biography',
|
||||
birthday: 'Birthday',
|
||||
placeOfBirth: 'Place of Birth',
|
||||
},
|
||||
error: {
|
||||
title: 'Error!',
|
||||
networkError: 'Unable to get media information, please check your network connection.',
|
||||
serverError: 'Server error, please try again later.',
|
||||
notFound: 'Requested resource not found.',
|
||||
},
|
||||
plugin: {
|
||||
sort: {
|
||||
popular: 'Popular',
|
||||
name: 'Plugin Name',
|
||||
author: 'Author',
|
||||
repository: 'Plugin Repository',
|
||||
latest: 'Latest Release',
|
||||
},
|
||||
installingPlugin: 'Installing plugin...',
|
||||
installing: 'Installing {name} v{version} ...',
|
||||
installSuccess: 'Plugin {name} installed successfully!',
|
||||
installFailed: 'Plugin {name} installation failed: {message}',
|
||||
uninstalling: 'Uninstalling {name} ...',
|
||||
uninstallSuccess: 'Plugin {name} uninstalled successfully!',
|
||||
uninstallFailed: 'Plugin {name} uninstallation failed: {message}',
|
||||
updating: 'Updating {name} to v{version} ...',
|
||||
updateSuccess: 'Plugin {name} updated successfully!',
|
||||
updateFailed: 'Plugin {name} update failed: {message}',
|
||||
noPlugins: 'No plugins installed',
|
||||
installed: 'Installed',
|
||||
notInstalled: 'Not Installed',
|
||||
hasUpdate: 'Update Available',
|
||||
configuring: 'Configuring',
|
||||
enable: 'Enable',
|
||||
disable: 'Disable',
|
||||
settings: 'Settings',
|
||||
},
|
||||
profile: {
|
||||
personalInfo: 'Personal Information',
|
||||
uploadNewAvatar: 'Upload New Avatar',
|
||||
avatarFormatError: 'The uploaded file does not meet requirements, please select a new avatar',
|
||||
avatarSizeError: 'File size must not exceed 800KB',
|
||||
avatarUploadSuccess: 'New avatar uploaded successfully, will take effect after saving!',
|
||||
resetAvatarSuccess: 'Reset to default avatar, will take effect after saving!',
|
||||
restoreAvatarSuccess: 'Restored current avatar!',
|
||||
savingInProgress: 'Saving in progress, please wait...',
|
||||
usernameRequired: 'Username cannot be empty',
|
||||
passwordMismatch: 'The two passwords do not match',
|
||||
usernameChangeSuccess: '[{oldName}] renamed to [{newName}], user information saved successfully!',
|
||||
saveSuccess: 'User information saved successfully!',
|
||||
saveFailedWithNameChange: '[{oldName}] renamed to [{newName}], information save failed: {message}!',
|
||||
saveFailed: 'User information save failed: {message}!',
|
||||
nickname: 'Nickname',
|
||||
nicknamePlaceholder: 'Display nickname, takes precedence over username',
|
||||
accountBinding: 'Account Binding',
|
||||
wechatUser: 'WeChat User',
|
||||
telegramUser: 'Telegram User',
|
||||
slackUser: 'Slack User',
|
||||
vocechatUser: 'VoceChat User',
|
||||
synologychatUser: 'SynologyChat User',
|
||||
doubanUser: 'Douban User',
|
||||
twoFactorAuthentication: 'Two-Factor Authentication',
|
||||
enableTwoFactor: 'Enable Two-Factor Authentication',
|
||||
disableTwoFactor: 'Disable Two-Factor Authentication',
|
||||
otpGenerateFailed: 'Failed to get OTP URI: {message}!',
|
||||
otpDisableSuccess: 'Two-factor authentication disabled successfully!',
|
||||
otpDisableFailed: 'Failed to disable OTP: {message}!',
|
||||
otpCodeRequired: 'Please enter the 6-digit verification code',
|
||||
otpEnableSuccess: 'Two-factor authentication enabled successfully!',
|
||||
otpEnableFailed: 'Failed to enable OTP: {message}!',
|
||||
authenticatorApp: 'Authenticator App',
|
||||
authenticatorAppDescription: 'Use an authenticator app like Google Authenticator, Microsoft Authenticator, Authy, or 1Password to scan the QR code. It will generate a 6-digit code for you to enter below.',
|
||||
secretKeyTip: 'If you\'re having trouble with the QR code, select manual entry in your app and enter the code above.',
|
||||
enterVerificationCode: 'Enter verification code to confirm enabling two-factor authentication',
|
||||
avatarFormatTip: 'JPG, PNG, GIF, WEBP formats allowed, maximum size 800KB.',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -17,6 +17,10 @@ export default {
|
||||
noContent: '没有找到相关内容',
|
||||
all: '全部',
|
||||
default: '默认',
|
||||
name: '名称',
|
||||
create: '新建',
|
||||
saving: '保存中',
|
||||
reset: '重置',
|
||||
},
|
||||
theme: {
|
||||
light: '浅色',
|
||||
@@ -161,6 +165,20 @@ export default {
|
||||
siteAuth: '用户认证',
|
||||
helpDocs: '帮助文档',
|
||||
restart: '重启',
|
||||
management: '用户管理',
|
||||
noUsers: '没有用户',
|
||||
clickToAddUser: '点击添加用户卡片添加用户',
|
||||
addUser: '添加用户',
|
||||
editUser: '编辑用户',
|
||||
username: '用户名',
|
||||
password: '密码',
|
||||
confirmPassword: '确认密码',
|
||||
role: '角色',
|
||||
email: '邮箱',
|
||||
enabled: '启用',
|
||||
disabled: '禁用',
|
||||
status: '状态',
|
||||
operations: '操作',
|
||||
},
|
||||
nav: {
|
||||
more: '更多',
|
||||
@@ -1187,7 +1205,7 @@ export default {
|
||||
customWords: '自定义识别词',
|
||||
customWordsHint: '只对该订阅使用的识别词',
|
||||
customWordsPlaceholder:
|
||||
'屏蔽词\n被替换词 => 替换词\n前定位词 <> 后定位词 >> 集偏移量(EP)\n被替换词 => 替换词 && 前定位词 <> 后定位词 >> 集偏移量(EP)\n其中替换词支持格式:{[tmdbid/doubanid=xxx;type=movie/tv;s=xxx;e=xxx]} 直接指定TMDBID/豆瓣ID识别,其中s、e为季数和集数(可选)',
|
||||
'屏蔽词\n被替换词 => 替换词\n前定位词 <> 后定位词 >> 集偏移量(EP)\n被替换词 => 替换词 && 前定位词 <> 后定位词 >> 集偏移量(EP)\n其中替换词支持格式:{ tmdbid/doubanid=xxx;type=movie/tv;s=xxx;e=xxx } 直接指定TMDBID/豆瓣ID识别,其中s、e为季数和集数(可选)',
|
||||
cancelSubscribe: '取消订阅',
|
||||
save: '保存',
|
||||
cancelSubscribeConfirm: '是否确认取消订阅?',
|
||||
@@ -1264,4 +1282,113 @@ export default {
|
||||
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。',
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user