Feature(custom): split i18n in main and renderer, use vue-i18n

This commit is contained in:
Kuingsmile
2025-08-01 13:10:05 +08:00
parent ff95e0f6fe
commit 236b7c6e7d
76 changed files with 4310 additions and 5986 deletions

View File

@@ -22,7 +22,7 @@ import { IPasteStyle, IWindowList } from '#/types/enum'
import { IBounds, ImgInfo } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { buildPicBedListMenu } from '~/events/remotes/menu'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
import clipboardPoll from '~/utils/clipboardPoll'
import { ensureFilePath, handleCopyUrl, setTray, tray } from '~/utils/common'
import { isMacOSVersionGreaterThanOrEqualTo } from '~/utils/getMacOSVersion'
@@ -40,11 +40,11 @@ export function setDockMenu () {
const isListeningClipboard = db.get(configPaths.settings.isListeningClipboard) || false
const dockMenu = Menu.buildFromTemplate([
{
label: T('OPEN_MAIN_WINDOW'),
label: $t('OPEN_MAIN_WINDOW'),
click: openMainWindow
},
{
label: T('START_WATCH_CLIPBOARD'),
label: $t('START_WATCH_CLIPBOARD'),
click () {
db.set(configPaths.settings.isListeningClipboard, true)
clipboardPoll.startListening()
@@ -57,7 +57,7 @@ export function setDockMenu () {
visible: !isListeningClipboard
},
{
label: T('STOP_WATCH_CLIPBOARD'),
label: $t('STOP_WATCH_CLIPBOARD'),
click () {
db.set(configPaths.settings.isListeningClipboard, false)
clipboardPoll.stopListening()
@@ -76,9 +76,9 @@ export function createMenu () {
{
label: 'PicList',
submenu: [
{ label: T('OPEN_MAIN_WINDOW'), click: openMainWindow },
{ label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow },
{
label: T('RELOAD_APP'),
label: $t('RELOAD_APP'),
click () {
app.relaunch()
app.exit(0)
@@ -86,7 +86,7 @@ export function createMenu () {
}
]
},
{ label: T('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu },
{ label: $t('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu },
{
label: 'Edit',
submenu: [
@@ -100,8 +100,8 @@ export function createMenu () {
]
},
{
label: T('QUIT'),
submenu: [{ label: T('QUIT'), role: 'quit' }]
label: $t('QUIT'),
submenu: [{ label: $t('QUIT'), role: 'quit' }]
}
])
Menu.setApplicationMenu(appMenu)
@@ -133,40 +133,40 @@ export function createContextMenu () {
if (process.platform === 'darwin' || process.platform === 'win32') {
const submenu = buildPicBedListMenu()
const template: (MenuItemConstructorOptions | MenuItem)[] = [
{ label: T('OPEN_MAIN_WINDOW'), click: openMainWindow },
{ label: T('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu },
{ label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow },
{ label: $t('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu },
{
label: T('START_WATCH_CLIPBOARD'),
label: $t('START_WATCH_CLIPBOARD'),
click: startWatchClipboard,
visible: !isListeningClipboard
},
{
label: T('STOP_WATCH_CLIPBOARD'),
label: $t('STOP_WATCH_CLIPBOARD'),
click: stopWatchClipboard,
visible: isListeningClipboard
},
{
label: T('RELOAD_APP'),
label: $t('RELOAD_APP'),
click () {
app.relaunch()
app.exit(0)
}
},
{ label: T('QUIT'), role: 'quit' }
{ label: $t('QUIT'), role: 'quit' }
]
if (process.platform === 'win32') {
template.splice(
2,
0,
{
label: T('OPEN_MINI_WINDOW'),
label: $t('OPEN_MINI_WINDOW'),
click () {
openMiniWindow(false)
},
visible: !isMiniWindowVisible
},
{
label: T('HIDE_MINI_WINDOW'),
label: $t('HIDE_MINI_WINDOW'),
click: hideMiniWindow,
visible: isMiniWindowVisible
}
@@ -182,31 +182,31 @@ export function createContextMenu () {
// 目前的实现无法正常工作
contextMenu = Menu.buildFromTemplate([
{ label: T('OPEN_MAIN_WINDOW'), click: openMainWindow },
{ label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow },
{
label: T('OPEN_MINI_WINDOW'),
label: $t('OPEN_MINI_WINDOW'),
click () {
openMiniWindow(false)
},
visible: !isMiniWindowVisible
},
{
label: T('HIDE_MINI_WINDOW'),
label: $t('HIDE_MINI_WINDOW'),
click: hideMiniWindow,
visible: isMiniWindowVisible
},
{
label: T('START_WATCH_CLIPBOARD'),
label: $t('START_WATCH_CLIPBOARD'),
click: startWatchClipboard,
visible: !isListeningClipboard
},
{
label: T('STOP_WATCH_CLIPBOARD'),
label: $t('STOP_WATCH_CLIPBOARD'),
click: stopWatchClipboard,
visible: isListeningClipboard
},
{
label: T('ABOUT'),
label: $t('ABOUT'),
click () {
dialog.showMessageBox({
title: 'PicList',
@@ -216,7 +216,7 @@ export function createContextMenu () {
})
}
},
{ label: T('QUIT'), role: 'quit' }
{ label: $t('QUIT'), role: 'quit' }
])
}
}
@@ -343,7 +343,7 @@ export function createTray (tooltip: string) {
: !!db.get(configPaths.settings.uploadResultNotification)
if (isShowResultNotification) {
const notification = new Notification({
title: T('UPLOAD_SUCCEED'),
title: $t('UPLOAD_SUCCEED'),
body: shortUrl || imgs[i].imgUrl!
// icon: files[i]
})

View File

@@ -10,7 +10,7 @@ import { IPicGo } from 'piclist'
import { IPasteStyle, IWindowList } from '#/types/enum'
import { IFileWithPath, ImgInfo, IStringKeyMap, IUploadOption } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { T } from '~/i18n/index'
import { T as $t } from '~/i18n/index'
import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/utils/common'
import { changeCurrentUploader } from '~/utils/handleUploaderConfig'
import pasteTemplate from '~/utils/pasteTemplate'
@@ -61,7 +61,7 @@ export const uploadClipboardFiles = async (): Promise<IStringKeyMap> => {
: !!db.get(configPaths.settings.uploadResultNotification)
if (isShowResultNotification) {
const notification = new Notification({
title: T('UPLOAD_SUCCEED'),
title: $t('UPLOAD_SUCCEED'),
body: shortUrl || img[0].imgUrl!
// icon: img[0].imgUrl
})
@@ -82,8 +82,8 @@ export const uploadClipboardFiles = async (): Promise<IStringKeyMap> => {
}
} else {
const notification = new Notification({
title: T('UPLOAD_FAILED'),
body: T('TIPS_UPLOAD_NOT_PICTURES')
title: $t('UPLOAD_FAILED'),
body: $t('TIPS_UPLOAD_NOT_PICTURES')
})
notification.show()
return {
@@ -141,7 +141,7 @@ export const uploadChoosedFiles = async (
: !!db.get(configPaths.settings.uploadResultNotification)
if (isShowResultNotification) {
const notification = new Notification({
title: T('UPLOAD_SUCCEED'),
title: $t('UPLOAD_SUCCEED'),
body: shortUrl || imgs[i].imgUrl!
// icon: files[i].path
})

View File

@@ -11,13 +11,13 @@ import fs from 'fs-extra'
import { IPicGo } from 'piclist'
import writeFile from 'write-file-atomic'
import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME, TALKING_DATA_EVENT } from '#/events/constants'
import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME } from '#/events/constants'
import { ICOREBuildInEvent, IWindowList } from '#/types/enum'
import { IAnalyticsData, ImgInfo, ITalkingDataOptions, IUploadOption } from '#/types/types'
import { ImgInfo, IUploadOption } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { CLIPBOARD_IMAGE_FOLDER } from '#/utils/static'
import { T } from '~/i18n'
import { calcDurationRange, getClipboardFilePath, showNotification } from '~/utils/common'
import { T as $t } from '~/i18n'
import { getClipboardFilePath, showNotification } from '~/utils/common'
const waitForRename = (window: BrowserWindow, id: number): Promise<string | null> => {
return new Promise(resolve => {
@@ -33,21 +33,6 @@ const waitForRename = (window: BrowserWindow, id: number): Promise<string | null
})
}
const handleTalkingData = (webContents: WebContents, options: IAnalyticsData) => {
const { type, fromClipboard, count, duration } = options
const data: ITalkingDataOptions = {
EventId: 'upload',
Label: type,
MapKv: {
by: fromClipboard ? 'clipboard' : 'files',
count,
duration: calcDurationRange(duration || 0),
type
}
}
webContents.send(TALKING_DATA_EVENT, data)
}
class Uploader {
private webContents: WebContents | null = null
@@ -67,8 +52,8 @@ class Uploader {
picgo.on(ICOREBuildInEvent.BEFORE_TRANSFORM, () => {
if (db.get(configPaths.settings.uploadNotification)) {
const notification = new Notification({
title: T('UPLOAD_PROGRESS'),
body: T('UPLOADING')
title: $t('UPLOAD_PROGRESS'),
body: $t('UPLOADING')
})
notification.show()
}
@@ -164,19 +149,9 @@ class Uploader {
async uploadReturnCtx (img?: IUploadOption, skipProcess = false): Promise<IPicGo | false> {
try {
const startTime = Date.now()
const ctx = await picgo.uploadReturnCtx(img, skipProcess)
if (!Array.isArray(ctx.output) || !ctx.output.some((item: ImgInfo) => item.imgUrl)) return false
if (this.webContents) {
handleTalkingData(this.webContents, {
fromClipboard: !img,
type: db.get(configPaths.picBed.uploader) || db.get(configPaths.picBed.current) || 'smms',
count: img ? img.length : 1,
duration: Date.now() - startTime
} as IAnalyticsData)
}
ctx.output.forEach((item: ImgInfo) => {
item.config = JSON.parse(JSON.stringify(db.get(`picBed.${item.type}`)))
})
@@ -186,7 +161,7 @@ class Uploader {
logger.error(e)
setTimeout(() => {
showNotification({
title: T('UPLOAD_FAILED'),
title: $t('UPLOAD_FAILED'),
body: util.format(e.stack),
clickToCopy: true
})
@@ -199,18 +174,8 @@ class Uploader {
async upload (img?: IUploadOption): Promise<ImgInfo[] | false> {
try {
const startTime = Date.now()
const output = await picgo.upload(img)
if (!Array.isArray(output) || !output.some((item: ImgInfo) => item.imgUrl)) return false
if (this.webContents) {
handleTalkingData(this.webContents, {
fromClipboard: !img,
type: db.get(configPaths.picBed.uploader) || db.get(configPaths.picBed.current) || 'smms',
count: img ? img.length : 1,
duration: Date.now() - startTime
} as IAnalyticsData)
}
output.forEach((item: ImgInfo) => {
item.config = JSON.parse(JSON.stringify(db.get(`picBed.${item.type}`)))
})
@@ -219,7 +184,7 @@ class Uploader {
logger.error(e)
setTimeout(() => {
showNotification({
title: T('UPLOAD_FAILED'),
title: $t('UPLOAD_FAILED'),
body: util.format(e.stack),
clickToCopy: true
})

View File

@@ -10,7 +10,7 @@ import { IWindowListItem } from '#/types/electron'
import { IWindowList } from '#/types/enum'
import { IBrowserWindowOptions } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
import logo from '../../../../../resources/logo.png?asset'
import {
@@ -171,7 +171,7 @@ const toolboxWindowOptions = {
center: true,
fullscreenable: false,
resizable: false,
title: `PicList ${T('TOOLBOX')}`,
title: `PicList ${$t('TOOLBOX')}`,
vibrancy: 'ultra-dark',
icon: logo,
webPreferences: {

View File

@@ -7,7 +7,7 @@ import fs from 'fs-extra'
import writeFile from 'write-file-atomic'
import { notificationList } from '#/utils/notification'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
const STORE_PATH = app.getPath('userData')
@@ -19,8 +19,8 @@ let _configFilePath = ''
let hasCheckPath = false
const errorMsg = {
broken: T('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'),
brokenButBackup: T('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP')
broken: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'),
brokenButBackup: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP')
}
function dbChecker () {
@@ -41,7 +41,7 @@ function dbChecker () {
}
let configFile: string = '{}'
const optionsTpl = {
title: T('TIPS_NOTICE'),
title: $t('TIPS_NOTICE'),
body: ''
}
// config save bak
@@ -58,7 +58,7 @@ function dbChecker () {
JSON.parse(configFile)
writeFile.sync(configFilePath, configFile, { encoding: 'utf-8' })
const stats = fs.statSync(configFileBackupPath)
optionsTpl.body = `${errorMsg.brokenButBackup}\n${T('TIPS_PICGO_BACKUP_FILE_VERSION', {
optionsTpl.body = `${errorMsg.brokenButBackup}\n${$t('TIPS_PICGO_BACKUP_FILE_VERSION', {
v: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss')
})}`
notificationList.push(optionsTpl)
@@ -108,8 +108,8 @@ function dbPathChecker (): string {
const logger = getLogger(piclistLogPath, 'PicList')
if (!hasCheckPath) {
const optionsTpl = {
title: T('TIPS_NOTICE'),
body: T('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR')
title: $t('TIPS_NOTICE'),
body: $t('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR')
}
notificationList.push(optionsTpl)
hasCheckPath = true

View File

@@ -4,7 +4,7 @@ import fs from 'fs-extra'
import { IConfig } from 'piclist'
import { configPaths } from '#/utils/configPaths'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
interface IJSON {
[propsName: string]: string | number | IJSON
}
@@ -37,7 +37,7 @@ class ConfigStore {
enable: true,
key: 'CommandOrControl+Alt+P',
name: 'upload',
label: T('QUICK_UPLOAD')
label: $t('QUICK_UPLOAD')
})
}
this.read()

View File

@@ -12,7 +12,7 @@ import { SHOW_INPUT_BOX } from '#/events/constants'
import { IPasteStyle } from '#/types/enum'
import { IGuiApi, ImgInfo, IShowFileExplorerOption, IShowInputBoxOption, IShowMessageBoxOption, IShowMessageBoxResult, IShowNotificationOption, IUploadOption } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
import { handleCopyUrl } from '~/utils/common'
import pasteTemplate from '~/utils/pasteTemplate'
@@ -104,7 +104,7 @@ class GuiApi implements IGuiApi {
: !!db.get(configPaths.settings.uploadResultNotification)
if (isShowResultNotification) {
const notification = new Notification({
title: T('UPLOAD_SUCCEED'),
title: $t('UPLOAD_SUCCEED'),
body: shortUrl || (imgs[i].imgUrl! as string)
// icon: imgs[i].imgUrl
})
@@ -179,8 +179,8 @@ class GuiApi implements IGuiApi {
const guiApi = GuiApi.getInstance()
guiApi
.showMessageBox({
title: T('TIPS_WARNING'),
message: T('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'),
title: $t('TIPS_WARNING'),
message: $t('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'),
type: 'info',
buttons: ['Yes', 'No']
})
@@ -202,8 +202,8 @@ class GuiApi implements IGuiApi {
const guiApi = GuiApi.getInstance()
guiApi
.showMessageBox({
title: T('TIPS_WARNING'),
message: T('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'),
title: $t('TIPS_WARNING'),
message: $t('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'),
type: 'info',
buttons: ['Yes', 'No']
})

View File

@@ -18,7 +18,7 @@ import { IWindowList } from '#/types/enum'
import { IPicGoPlugin, IUploaderConfig } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { handlePluginUninstall, handlePluginUpdate } from '~/events/rpc/routes/plugin/utils'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
import clipboardPoll from '~/utils/clipboardPoll'
import { setTrayToolTip } from '~/utils/common'
import getPicBeds from '~/utils/getPicBeds'
@@ -36,28 +36,28 @@ const buildMiniPageMenu = () => {
const submenu = buildPicBedListMenu()
const template: (MenuItemConstructorOptions | MenuItem)[] = [
{
label: T('OPEN_MAIN_WINDOW'),
label: $t('OPEN_MAIN_WINDOW'),
click: openMainWindow
},
{
label: T('CHOOSE_DEFAULT_PICBED'),
label: $t('CHOOSE_DEFAULT_PICBED'),
type: 'submenu',
submenu
},
{
label: T('UPLOAD_BY_CLIPBOARD'),
label: $t('UPLOAD_BY_CLIPBOARD'),
click () {
uploadClipboardFiles()
}
},
{
label: T('HIDE_MINI_WINDOW'),
label: $t('HIDE_MINI_WINDOW'),
click () {
BrowserWindow.getFocusedWindow()!.hide()
}
},
{
label: T('START_WATCH_CLIPBOARD'),
label: $t('START_WATCH_CLIPBOARD'),
click () {
db.set(configPaths.settings.isListeningClipboard, true)
ClipboardWatcher.startListening()
@@ -70,7 +70,7 @@ const buildMiniPageMenu = () => {
visible: !isListeningClipboard
},
{
label: T('STOP_WATCH_CLIPBOARD'),
label: $t('STOP_WATCH_CLIPBOARD'),
click () {
db.set(configPaths.settings.isListeningClipboard, false)
ClipboardWatcher.stopListening()
@@ -80,7 +80,7 @@ const buildMiniPageMenu = () => {
visible: isListeningClipboard
},
{
label: T('RELOAD_APP'),
label: $t('RELOAD_APP'),
click () {
app.relaunch()
app.exit(0)
@@ -88,7 +88,7 @@ const buildMiniPageMenu = () => {
},
{
role: 'quit',
label: T('QUIT')
label: $t('QUIT')
}
]
return Menu.buildFromTemplate(template)
@@ -97,7 +97,7 @@ const buildMiniPageMenu = () => {
const buildMainPageMenu = (win: BrowserWindow) => {
const template = [
{
label: T('ABOUT'),
label: $t('ABOUT'),
click () {
dialog.showMessageBox({
title: 'PicList',
@@ -107,26 +107,26 @@ const buildMainPageMenu = (win: BrowserWindow) => {
}
},
{
label: T('SHOW_PICBED_QRCODE'),
label: $t('SHOW_PICBED_QRCODE'),
click () {
win?.webContents?.send(SHOW_MAIN_PAGE_QRCODE)
}
},
{
label: T('OPEN_TOOLBOX'),
label: $t('OPEN_TOOLBOX'),
click () {
const window = windowManager.create(IWindowList.TOOLBOX_WINDOW)
window?.show()
}
},
{
label: T('SHOW_DEVTOOLS'),
label: $t('SHOW_DEVTOOLS'),
click () {
win?.webContents?.openDevTools({ mode: 'detach' })
}
},
{
label: T('FEEDBACK'),
label: $t('FEEDBACK'),
click () {
const url = 'https://github.com/Kuingsmile/PicList/issues'
shell.openExternal(url)
@@ -144,7 +144,7 @@ const buildSecondPicBedMenu = () => {
const picBedConfigList = picgo.getConfig<IUploaderConfig>('uploader')
const currentPicBedMenuItem = [
{
label: `${T('CURRENT_SECOND_PICBED')} - ${currentPicBedName || 'None'}`,
label: `${$t('CURRENT_SECOND_PICBED')} - ${currentPicBedName || 'None'}`,
enabled: false
},
{
@@ -196,7 +196,7 @@ const buildPicBedListMenu = () => {
const picBedConfigList = picgo.getConfig<IUploaderConfig>('uploader')
const currentPicBedMenuItem = [
{
label: `${T('CURRENT_PICBED')} - ${currentPicBedName}`,
label: `${$t('CURRENT_PICBED')} - ${currentPicBedName}`,
enabled: false
},
{
@@ -276,7 +276,7 @@ const handleRestoreState = (item: string, name: string): void => {
const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
const menu = [
{
label: T('ENABLE_PLUGIN'),
label: $t('ENABLE_PLUGIN'),
enabled: !plugin.enabled,
click () {
picgo.saveConfig({
@@ -287,7 +287,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
}
},
{
label: T('DISABLE_PLUGIN'),
label: $t('DISABLE_PLUGIN'),
enabled: plugin.enabled,
click () {
picgo.saveConfig({
@@ -306,7 +306,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
}
},
{
label: T('UNINSTALL_PLUGIN'),
label: $t('UNINSTALL_PLUGIN'),
click () {
const window = windowManager.get(IWindowList.SETTING_WINDOW)!
window.webContents.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName)
@@ -314,7 +314,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
}
},
{
label: T('UPDATE_PLUGIN'),
label: $t('UPDATE_PLUGIN'),
click () {
const window = windowManager.get(IWindowList.SETTING_WINDOW)!
window.webContents.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName)
@@ -325,7 +325,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
for (const i in plugin.config) {
if (plugin.config[i].config.length > 0) {
const obj = {
label: T('CONFIG_THING', {
label: $t('CONFIG_THING', {
c: `${i} - ${plugin.config[i].fullName || plugin.config[i].name}`
}),
click () {
@@ -345,7 +345,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
const currentTransformer = picgo.getConfig<string>(configPaths.picBed.transformer) || 'path'
const pluginTransformer = plugin.config.transformer.name
const obj = {
label: `${currentTransformer === pluginTransformer ? T('DISABLE') : T('ENABLE')}transformer - ${plugin.config.transformer.name}`,
label: `${currentTransformer === pluginTransformer ? $t('DISABLE') : $t('ENABLE')}transformer - ${plugin.config.transformer.name}`,
click () {
const transformer = plugin.config.transformer.name
const currentTransformer = picgo.getConfig<string>(configPaths.picBed.transformer) || 'path'

View File

@@ -1,20 +1,13 @@
import { GalleryDB } from '@core/datastore'
import picgo from '@core/picgo'
import logger from '@core/picgo/logger'
import GuiApi from 'apis/gui'
import { clipboard } from 'electron'
import { ICOREBuildInEvent, IPasteStyle, IRPCActionType, IRPCType } from '#/types/enum'
import { IIPCEvent } from '#/types/rpc'
import { ILogType, ImgInfo, ISftpPlistConfig, IStringKeyMap } from '#/types/types'
import { ImgInfo } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { RPCRouter } from '~/events/rpc/router'
import {
removeFileFromDogeInMain,
removeFileFromHuaweiInMain,
removeFileFromS3InMain,
removeFileFromSFTPInMain
} from '~/utils/deleteFunc'
import pasteTemplate from '~/utils/pasteTemplate'
interface IFilter {
orderBy?: 'asc' | 'desc'
@@ -98,43 +91,6 @@ const galleryRoutes = [
return await dbStore.insertMany(args[0])
},
type: IRPCType.INVOKE
},
{
action: IRPCActionType.GALLERY_LOG_DELETE_MSG,
handler: async (_: IIPCEvent, args: [msg: string, logLevel: ILogType]) => {
const [msg, logLevel] = args
console.log(msg, logLevel)
logger[logLevel](msg)
}
},
{
action: IRPCActionType.GALLERY_DELETE_SFTP_FILE,
handler: async (_: IIPCEvent, args: [config: ISftpPlistConfig, fileName: string]) => {
const [config, fileName] = args
return await removeFileFromSFTPInMain(config, fileName)
},
type: IRPCType.INVOKE
},
{
action: IRPCActionType.GALLERY_DELETE_AWS_S3_FILE,
handler: async (_: IIPCEvent, args: [configMap: IStringKeyMap]) => {
return await removeFileFromS3InMain(args[0])
},
type: IRPCType.INVOKE
},
{
action: IRPCActionType.GALLERY_DELETE_DOGE_FILE,
handler: async (_: IIPCEvent, args: [configMap: IStringKeyMap]) => {
return await removeFileFromDogeInMain(args[0])
},
type: IRPCType.INVOKE
},
{
action: IRPCActionType.GALLERY_DELETE_HUAWEI_OSS_FILE,
handler: async (_: IIPCEvent, args: [configMap: IStringKeyMap]) => {
return await removeFileFromHuaweiInMain(args[0])
},
type: IRPCType.INVOKE
}
]

View File

@@ -12,7 +12,7 @@ import { ICOREBuildInEvent, IPicGoHelperType, IWindowList } from '#/types/enum'
import { IIPCEvent } from '#/types/rpc'
import { IDispose, IPicGoPlugin } from '#/types/types'
import { handleStreamlinePluginName, simpleClone } from '#/utils/common'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
import { showNotification } from '~/utils/common'
const STORE_PATH = dbPathDir()
@@ -108,8 +108,8 @@ const handleNPMError = (): IDispose => {
if (msg === 'NPM is not installed') {
dialog
.showMessageBox({
title: T('TIPS_ERROR'),
message: T('TIPS_INSTALL_NODE_AND_RELOAD_PICGO'),
title: $t('TIPS_ERROR'),
message: $t('TIPS_INSTALL_NODE_AND_RELOAD_PICGO'),
buttons: ['Yes']
})
.then(res => {
@@ -131,7 +131,7 @@ export const handlePluginUpdate = async (fullName: string | string[]) => {
window.webContents.send('updateSuccess', res.body[0])
} else {
showNotification({
title: T('PLUGIN_UPDATE_FAILED'),
title: $t('PLUGIN_UPDATE_FAILED'),
body: res.body as string
})
}
@@ -148,7 +148,7 @@ export const handlePluginUninstall = async (fullName: string) => {
shortKeyHandler.unregisterPluginShortKey(res.body[0])
} else {
showNotification({
title: T('PLUGIN_UNINSTALL_FAILED'),
title: $t('PLUGIN_UNINSTALL_FAILED'),
body: res.body as string
})
}
@@ -165,7 +165,7 @@ export const pluginGetListFunc = async (event: IIPCEvent) => {
} catch (e: any) {
event.sender.send('pluginList', [])
showNotification({
title: T('TIPS_GET_PLUGIN_LIST_FAILED'),
title: $t('TIPS_GET_PLUGIN_LIST_FAILED'),
body: e.message
})
picgo.log.error(e)
@@ -185,7 +185,7 @@ export const pluginInstallFunc = async (event: IIPCEvent, args: [fullName: strin
await shortKeyHandler.registerPluginShortKey(res.body[0])
} else {
showNotification({
title: T('PLUGIN_INSTALL_FAILED'),
title: $t('PLUGIN_INSTALL_FAILED'),
body: res.body as string
})
}
@@ -208,17 +208,17 @@ export const pluginImportLocalFunc = async (event: IIPCEvent) => {
} catch (e: any) {
event.sender.send('pluginList', [])
showNotification({
title: T('TIPS_GET_PLUGIN_LIST_FAILED'),
title: $t('TIPS_GET_PLUGIN_LIST_FAILED'),
body: e.message
})
}
showNotification({
title: T('PLUGIN_IMPORT_SUCCEED'),
title: $t('PLUGIN_IMPORT_SUCCEED'),
body: ''
})
} else {
showNotification({
title: T('PLUGIN_IMPORT_FAILED'),
title: $t('PLUGIN_IMPORT_FAILED'),
body: res.body as string
})
}

View File

@@ -6,12 +6,12 @@ import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
import { IRPCActionType, IRPCType } from '#/types/enum'
import { IIPCEvent } from '#/types/rpc'
import { IShortKeyConfig } from '#/types/types'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
const notificationFunc = (result: boolean) => {
const notification = new Notification({
title: T(`OPERATION_${result ? 'SUCCEED' : 'FAILED'}`),
body: T(`TIPS_SHORTCUT_MODIFIED_${result ? 'SUCCEED' : 'CONFLICT'}`)
title: $t(`OPERATION_${result ? 'SUCCEED' : 'FAILED'}`),
body: $t(`TIPS_SHORTCUT_MODIFIED_${result ? 'SUCCEED' : 'CONFLICT'}`)
})
notification.show()
}

View File

@@ -1,10 +1,8 @@
import picgo from '@core/picgo'
import windowManager from 'apis/app/window/windowManager'
import { app, IpcMainEvent, shell } from 'electron'
import { IIPCEvent } from 'root/src/universal/types/rpc'
import { SET_CURRENT_LANGUAGE } from '#/events/constants'
import { IRPCActionType, IWindowList } from '#/types/enum'
import { IRPCActionType } from '#/types/enum'
import { IIPCEvent } from '#/types/rpc'
import { i18nManager } from '~/i18n'
export default [
@@ -33,35 +31,12 @@ export default [
shell.openExternal(args[0])
}
},
{
action: IRPCActionType.GET_LANGUAGE_LIST,
handler: async (event: IIPCEvent) => {
(event as IpcMainEvent).returnValue = i18nManager.languageList
}
},
{
action: IRPCActionType.GET_CURRENT_LANGUAGE,
handler: async (event: IIPCEvent) => {
const { lang, locales } = i18nManager.getCurrentLocales()
;(event as IpcMainEvent).returnValue = [lang, locales]
}
},
{
action: IRPCActionType.SET_CURRENT_LANGUAGE,
handler: async (_: IIPCEvent, args: [language: string]) => {
i18nManager.setCurrentLanguage(args[0])
const { lang, locales } = i18nManager.getCurrentLocales()
const { lang } = i18nManager.getCurrentLocales()
picgo.i18n.setLanguage(lang)
if (process.platform === 'darwin') {
const trayWindow = windowManager.get(IWindowList.TRAY_WINDOW)
trayWindow?.webContents.send(SET_CURRENT_LANGUAGE, lang, locales)
}
const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW)
settingWindow?.webContents.send(SET_CURRENT_LANGUAGE, lang, locales)
if (windowManager.has(IWindowList.MINI_WINDOW)) {
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)
miniWindow?.webContents.send(SET_CURRENT_LANGUAGE, lang, locales)
}
}
}
]

View File

@@ -7,7 +7,7 @@ import { IToolboxItemCheckStatus, IToolboxItemType } from '#/types/enum'
import { IToolboxCheckerMap, IToolboxFixMap } from '#/types/rpc'
import { CLIPBOARD_IMAGE_FOLDER } from '#/utils/static'
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
const sendToolboxRes = sendToolboxResWithType(IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD)
@@ -25,7 +25,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<IToolboxItemType.HAS_PR
if (fs.existsSync(clipboardImagePath)) {
sendToolboxRes(event, {
status: IToolboxItemCheckStatus.SUCCESS,
msg: T('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS', {
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS', {
path: clipboardImagePath
}),
value: clipboardImagePath
@@ -33,7 +33,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<IToolboxItemType.HAS_PR
} else {
sendToolboxRes(event, {
status: IToolboxItemCheckStatus.ERROR,
msg: T('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS', {
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS', {
path: clipboardImagePath
}),
value: path.dirname(clipboardImagePath)
@@ -42,7 +42,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<IToolboxItemType.HAS_PR
} else {
sendToolboxRes(event, {
status: IToolboxItemCheckStatus.ERROR,
msg: T('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS', {
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS', {
path: defaultClipboardImagePath
}),
value: path.dirname(defaultClipboardImagePath)
@@ -66,7 +66,7 @@ export const fixClipboardUploadMap: IToolboxFixMap<IToolboxItemType.HAS_PROBLEM_
return {
type: IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD,
status: IToolboxItemCheckStatus.ERROR,
msg: T('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS', {
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS', {
path: clipboardImagePath
}),
value: path.dirname(clipboardImagePath)

View File

@@ -2,13 +2,13 @@ import path from 'node:path'
import { DB_PATH, GalleryDB } from '@core/datastore'
import { dbPathChecker } from '@core/datastore/dbChecker'
import { IpcMainEvent } from 'electron'
import type { IpcMainEvent } from 'electron'
import fs from 'fs-extra'
import { IToolboxItemCheckStatus, IToolboxItemType } from '#/types/enum'
import { IToolboxCheckerMap, IToolboxFixMap } from '#/types/rpc'
import type { IToolboxCheckerMap, IToolboxFixMap } from '#/types/rpc'
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
export const checkFileMap: IToolboxCheckerMap<
IToolboxItemType.IS_CONFIG_FILE_BROKEN | IToolboxItemType.IS_GALLERY_FILE_BROKEN
@@ -24,7 +24,7 @@ export const checkFileMap: IToolboxCheckerMap<
await fs.readJSON(configFilePath)
sendToolboxRes(event, {
status: IToolboxItemCheckStatus.SUCCESS,
msg: T('TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS', {
msg: $t('TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS', {
path: configFilePath
}),
value: configFilePath
@@ -33,7 +33,7 @@ export const checkFileMap: IToolboxCheckerMap<
} catch (e) {
sendToolboxRes(event, {
status: IToolboxItemCheckStatus.ERROR,
msg: T('TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS'),
msg: $t('TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS'),
value: path.dirname(configFilePath)
})
}
@@ -47,7 +47,7 @@ export const checkFileMap: IToolboxCheckerMap<
if (galleryDB.errorList.length === 0) {
sendToolboxRes(event, {
status: IToolboxItemCheckStatus.SUCCESS,
msg: T('TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS', {
msg: $t('TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS', {
path: DB_PATH
}),
value: path.dirname(DB_PATH)
@@ -55,7 +55,7 @@ export const checkFileMap: IToolboxCheckerMap<
} else {
sendToolboxRes(event, {
status: IToolboxItemCheckStatus.ERROR,
msg: T('TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS'),
msg: $t('TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS'),
value: path.dirname(DB_PATH)
})
}

View File

@@ -7,7 +7,7 @@ import tunnel from 'tunnel'
import { IToolboxItemCheckStatus, IToolboxItemType } from '#/types/enum'
import { IToolboxCheckerMap } from '#/types/rpc'
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
function getProxy (proxyStr: string): AxiosRequestConfig['proxy'] | null {
if (proxyStr) {
@@ -39,7 +39,7 @@ export const checkProxyMap: IToolboxCheckerMap<IToolboxItemType.HAS_PROBLEM_WITH
if (!config) {
return sendToolboxRes(event, {
status: IToolboxItemCheckStatus.SUCCESS,
msg: T('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS')
msg: $t('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS')
})
}
@@ -47,14 +47,14 @@ export const checkProxyMap: IToolboxCheckerMap<IToolboxItemType.HAS_PROBLEM_WITH
if (!proxy) {
return sendToolboxRes(event, {
status: IToolboxItemCheckStatus.SUCCESS,
msg: T('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS')
msg: $t('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS')
})
} else {
const proxyOptions = getProxy(proxy)
if (!proxyOptions) {
return sendToolboxRes(event, {
status: IToolboxItemCheckStatus.ERROR,
msg: T('TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT')
msg: $t('TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT')
})
} else {
const httpsAgent = tunnel.httpsOverHttp({
@@ -69,13 +69,13 @@ export const checkProxyMap: IToolboxCheckerMap<IToolboxItemType.HAS_PROBLEM_WITH
})
return sendToolboxRes(event, {
status: IToolboxItemCheckStatus.SUCCESS,
msg: T('TOOLBOX_CHECK_PROXY_SUCCESS_TIPS')
msg: $t('TOOLBOX_CHECK_PROXY_SUCCESS_TIPS')
})
} catch (e) {
console.log(e)
return sendToolboxRes(event, {
status: IToolboxItemCheckStatus.ERROR,
msg: T('TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING')
msg: $t('TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING')
})
}
}
@@ -84,7 +84,7 @@ export const checkProxyMap: IToolboxCheckerMap<IToolboxItemType.HAS_PROBLEM_WITH
sendToolboxRes(event, {
status: IToolboxItemCheckStatus.SUCCESS,
msg: T('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS')
msg: $t('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS')
})
}
}

View File

@@ -7,7 +7,7 @@ import { IPasteStyle, IRPCActionType, IRPCType, IWindowList } from '#/types/enum
import { IIPCEvent } from '#/types/rpc'
import { configPaths } from '#/utils/configPaths'
import { RPCRouter } from '~/events/rpc/router'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
import { generateShortUrl, handleCopyUrl, setTrayToolTip } from '~/utils/common'
import pasteTemplate from '~/utils/pasteTemplate'
@@ -44,7 +44,7 @@ const trayRoutes = [
: !!db.get(configPaths.settings.uploadResultNotification)
if (isShowResultNotification) {
const notification = new Notification({
title: T('UPLOAD_SUCCEED'),
title: $t('UPLOAD_SUCCEED'),
body: shortUrl || img[0].imgUrl!
// icon: file[0]
// icon: img[0].imgUrl

View File

@@ -23,7 +23,7 @@ import { CLIPBOARD_IMAGE_FOLDER } from '#/utils/static'
import busEventList from '~/events/busEventList'
import { rpcServer } from '~/events/rpc'
import { startFileServer, stopFileServer } from '~/fileServer'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
import fixPath from '~/lifeCycle/fixPath'
import UpDownTaskQueue from '~/manage/datastore/upDownTaskQueue'
import getManageApi from '~/manage/Main'
@@ -95,16 +95,16 @@ updater.autoUpdater.on('update-available', async (info: updater.UpdateInfo) => {
dialog
.showMessageBox({
type: 'info',
title: T('FIND_NEW_VERSION'),
title: $t('FIND_NEW_VERSION'),
buttons: ['Yes', 'Go to download page'],
message:
T('TIPS_FIND_NEW_VERSION', {
$t('TIPS_FIND_NEW_VERSION', {
v: info.version
}) +
'\n\n' +
displayLog +
truncatedNote,
checkboxLabel: T('NO_MORE_NOTICE'),
checkboxLabel: $t('NO_MORE_NOTICE'),
checkboxChecked: false
})
.then(result => {
@@ -132,9 +132,9 @@ updater.autoUpdater.on('update-downloaded', () => {
dialog
.showMessageBox({
type: 'info',
title: T('UPDATE_DOWNLOADED'),
title: $t('UPDATE_DOWNLOADED'),
buttons: ['Yes', 'No'],
message: T('TIPS_UPDATE_DOWNLOADED')
message: $t('TIPS_UPDATE_DOWNLOADED')
})
.then(result => {
const window = windowManager.get(IWindowList.SETTING_WINDOW)!

View File

@@ -7,7 +7,7 @@ import fs from 'fs-extra'
import writeFile from 'write-file-atomic'
import { notificationList } from '#/utils/notification'
import { T } from '~/i18n'
import { T as $t } from '~/i18n'
const STORE_PATH = app.getPath('userData')
const manageConfigFilePath = path.join(STORE_PATH, 'manage.json')
@@ -17,8 +17,8 @@ let _configFilePath = ''
let hasCheckPath = false
const errorMsg = {
broken: T('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'),
brokenButBackup: T('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP')
broken: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'),
brokenButBackup: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP')
}
function manageDbChecker () {
@@ -29,7 +29,7 @@ function manageDbChecker () {
}
let configFile: string = '{}'
const optionsTpl = {
title: T('TIPS_NOTICE'),
title: $t('TIPS_NOTICE'),
body: ''
}
// config save bak
@@ -48,7 +48,7 @@ function manageDbChecker () {
encoding: 'utf-8'
})
const stats = fs.statSync(manageConfigFileBackupPath)
optionsTpl.body = `${errorMsg.brokenButBackup}\n${T('TIPS_PICGO_BACKUP_FILE_VERSION', {
optionsTpl.body = `${errorMsg.brokenButBackup}\n${$t('TIPS_PICGO_BACKUP_FILE_VERSION', {
v: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss')
})}`
notificationList.push(optionsTpl)
@@ -101,8 +101,8 @@ function managePathChecker (): string {
const logger = getLogger(manageLogPath, 'Manage')
if (!hasCheckPath) {
const optionsTpl = {
title: T('TIPS_NOTICE'),
body: T('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR')
title: $t('TIPS_NOTICE'),
body: $t('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR')
}
notificationList?.push(optionsTpl)
hasCheckPath = true

View File

@@ -10,7 +10,7 @@ import { ICOREBuildInEvent, IWindowList } from '#/types/enum'
import { IHttpResponse, ImgInfo, IObj } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { picBedsCanbeDeleted } from '#/utils/static'
import { T } from '~/i18n/index'
import { T as $t } from '~/i18n/index'
export const handleResponse = ({
response,
@@ -54,8 +54,8 @@ export const deleteChoosedFiles = async (list: ImgInfo[]): Promise<boolean[]> =>
if (item.type !== undefined && picBedsCanbeDeleted.includes(item.type)) {
const noteFunc = (value: boolean) => {
const notification = new Notification({
title: T('MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2'),
body: T(value ? 'GALLERY_SYNC_DELETE_NOTICE_SUCCEED' : 'GALLERY_SYNC_DELETE_NOTICE_FAILED')
title: $t('MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2'),
body: $t(value ? 'GALLERY_SYNC_DELETE_NOTICE_SUCCEED' : 'GALLERY_SYNC_DELETE_NOTICE_FAILED')
})
notification.show()
}

View File

@@ -81,20 +81,6 @@ export const showMessageBox = (options: any) => {
})
}
export const calcDurationRange = (duration: number) => {
if (duration < 1000) return 500
if (duration < 1500) return 1000
if (duration < 3000) return 2000
if (duration < 5000) return 3000
if (duration < 7000) return 5000
if (duration < 10000) return 8000
if (duration < 12000) return 10000
if (duration < 20000) return 15000
if (duration < 30000) return 20000
// max range
return 100000
}
/**
* macOS public.file-url will get encoded file path,
* so we need to decode it

View File

@@ -1,7 +1,6 @@
import crypto from 'node:crypto'
import path from 'node:path'
import { I18n, ObjectAdapter } from '@piclist/i18n'
import { clipboard, contextBridge, ipcRenderer, webFrame } from 'electron'
import fs from 'fs-extra'
import yaml from 'js-yaml'
@@ -11,10 +10,6 @@ import { isReactive, isRef, toRaw, unref } from 'vue'
import { RPC_ACTIONS, RPC_ACTIONS_INVOKE } from '#/events/constants'
import { IpcRendererListener } from '#/types/electron'
import { IRPCActionType } from '#/types/enum'
import { ILocales, ILocalesKey } from '#/types/i18n'
import { IStringKeyMap } from '#/types/types'
let i18nObj: I18n | null = null
export const getRawData = (args: any): any => {
if (isRef(args)) return unref(args)
@@ -94,21 +89,6 @@ try {
lookup: mime.lookup
}
})
contextBridge.exposeInMainWorld('i18n', {
setLocales: (lang: string, locales: ILocales) => {
const objectAdapter = new ObjectAdapter({
[lang]: locales
})
i18nObj = new I18n({
adapter: objectAdapter,
defaultLanguage: lang
})
},
translate: (key: ILocalesKey, args: IStringKeyMap = {}): string => {
return i18nObj?.translate(key, args) || key
}
})
} catch (error) {
console.error(error)
}

View File

@@ -1,29 +0,0 @@
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1523001890286'); /* IE9*/
src: url('iconfont.eot?t=1523001890286#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAApcAAsAAAAADqAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kmaY21hcAAAAYAAAACMAAAB5Jz6bNVnbHlmAAACDAAABisAAAfkf7GmJ2hlYWQAAAg4AAAALwAAADYQ+dpBaGhlYQAACGgAAAAcAAAAJAfeA4lobXR4AAAIhAAAABQAAAAgH+kAAGxvY2EAAAiYAAAAEgAAABII+gbebWF4cAAACKwAAAAfAAAAIAEYAMxuYW1lAAAIzAAAAUUAAAJtPlT+fXBvc3QAAAoUAAAASAAAAF2Rted1eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/ss4gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDxfzdzwv4EhhrmBoQEozAiSAwAxwA0deJzFkdEJwzAMRE9ymoRiSv+TETpK6BQZwvSr+2QvZYz0ZLmFTpAzz/gOGRkLwAVAIg/SAfKGwPViKjVPuNa8w5M+Y4TyXExttmXfjoNpMbHp574SVmfccOdy12Ngv8TbStvjNMl5rf+V6742N5DS4BOtwX+DaeA1NgU+O5sDn6Etgc9x3wLoBwU0H794nG1VXYwcRxHu6p7unt+enf/9m9293buZde5u97w/M3Zs7xof2AoJPsLJ4JMR52AUEUgiJcLxQ2znEEIkEEQiJGOQIl0QCDlKpCgP5MXipAiJl5N44S0IAvjVQkGKBUIs9OzFEkjslGqner7pmar6vhpEEfr3n8htUkYe6qLD6JPoswgBW4a2wDEspKMeXoZggQaRL0jaSRd4p90jJyBqMz8cZKMkYpzZIKABw4VBlvZwCuPRBB+DQRgDVGrVTXep7pJXQC+njW/PPo1/CkGzU7cnq7OHVqb+oOWpV0zXrbjuyyqjVMVYsQU8FYUa1XQ2+xm1q8Ht5iHcBLOSVh/Zslo197EXR0/HS5EGsLMDXq0lfjF1qo60q9XQcyu8ZKnlqtVZ9OHKHaPsmXHyFyR/IHP9DXmP5GhdBgJ4A6IwS8csyXvAkyxqQNCAfAIyTEeZ9HkSRtkgmgAPmUQH83tiYOEBCKO9GcW3XirZ8MUJLrVwtaK0O62zgWLrG8+Tcki5A8dP5t/ITx4Hh9OwTK6eNV2wnRdvYTojOZ3t3bzTJ7a+KSY0rYOvAU3JGphhQ6UXri+diLRpn6iHbPuQSvpTLTqxdP0C1Q+1ntdt0r9zc29W5MXmed0jWyhEPfQw+gK6hJ6UGfqsnaR5RybDxz0YZVPZpOgwbyfjUZEh6xSL+bBYDHzGi/y5mJu8mmdunoWc8QnIdXpQrXnWRF6VJzIUkN6nAflIhAIA8EuPq5ppaurVn5MbhsDKtK9QQ8iFM9vYvtJIRj1Cnjj/4Ksbb/6TQfSvM0fOYyArF3vThdmPX7ilKLde2Cn87voWxlvrpwp/LozjlTjGC4ZtG8qTPyDyMSIQGJS3vtWwDUYPnyIY7FBg/JWHFcM+rWjidHZs90i3D+SNndJ3oOrw/indrNVVcWkDP3d+6zLGl7fOPze7CZuTySbM/W5ztSkNIVwUlXyEP0Cvob0DpgiwD/64wHNPAj8KZWGGgyyfKAUdRknao2lSKCDpQ/Ix3iapLJe0ZJRPyHAQNkHWawqyZH0oliV0LLswIVOYSM3ILaU1YVBsOcjmmLlJXBFAgwSSiwfvIoXHWmnRWAnOpjgL4XfNMyFXmKgtW1xlinfE1lvML5l0fXnoXvr97aeZs8itmpmugKYQsLnhirrgbFEjRjSo+HpDCybR5742XrBj3n3QUAittAdR/WhtrChO4HBDjWhiV5dMZlK93F4JAu61PSte9a2KZmCTVayKzhlRMYms0lo5wrxW/RSMa4stGzChhiq6PjXLq7O7Xs3fI3WdcuGwNn6f1koKlnsebdiVqARlTY1ZPU7a3vb6A7ZKACuawhy99aWhc1hjPNZc1yxToli44J3GlRIvHYk2Hh/JCPi4ay1bfrfu1ip9InxXxQb3adPwBCWgLOpuq1lmFMtxwyPHjG1HngLTbVUQtWG7S4aBsaYqs10eJN16ydZLoeZWFQwFrua/qwSUEEpBDhVF6m+XfEAuIhOV0SKaILQk2zicwCiRg5RBiKIM5QlKGYruK0dqLGey1ccg8EM5LbN8XHBJdjxpc/g1lKzjluNYx01ndoGCvb8PNqWzD/f3Zx/m9O4779ylc39PEFwyLsyBsGWUMBEvmy3zWRmBU3GklzfQ/97g/p3S/80JDXGjeMwNYYTO65ZVzEjJ/b/iX6I1yfyMFYOvXTAw6hXan7NTWh5KysohmRwwsQCEw8WMvO+VFfzHf2x8QnRjunMZcGhd+y5zTH9j8/PbluWDGrZyXVxa9mtC0hbt48t9UMR7wl47ybazHarYj7x76tFXGkcbGMdrR39icd1tf9+xHMu9tmGYf74/x39LfkVOo20ZJGky/wB1Pn4XKUt5yK+SfOEsTbK5kKTgChxnbnFxLpjhfIjLJJLikJWX048daKtTCKvA5RkmUK7oPntWq9i60X2o6vsYjDLFnhss6UIFJap2Lo4D68uU6tfunXti+XvVuubzZ7SqMHSJDzyJjyjxPD/RBFfC2hz+GGPa9b+f+2of/8GRfVF/ZJiStkmnNl2wqFn1mowGK55uPvDo4mofnG+qLul85uuvzt5+xi/9D7xt/l+4o3TOPvVD2JDl+g9+5y00AHicY2BkYGAA4vdhFhPj+W2+MnCzMIDAtbfeSgj6/wIWBuYEIJeDgQkkCgAriQovAHicY2BkYGBu+N/AEMPCAAJAkpEBFXAAAEcOAnF4nGNhYGBgfsnAwMKAHQMAGtcBCQAAAAAAdgDiAYoCogMIA1oD8gAAeJxjYGRgYOBgOMDAxgACTEDMBYQMDP/BfAYAHGwB5QB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxtyMEOQDAQBNCZslX+UhE2kbaSbvD3JK7e8cHhM+BfoGPDlkLPjoE9ePlV62ZRzkVjljrdlryVPY+zHJrUxMpbwANFHA6a') format('woff'),
url('iconfont.ttf?t=1523001890286') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('iconfont.svg?t=1523001890286#iconfont') format('svg'); /* iOS 4.1- */
}
[class*=" el-icon-ui"], [class^=el-icon-ui] {
font-family:"iconfont" !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.el-icon-ui-github:before { content: "\e7ab"; }
.el-icon-ui-weibo:before { content: "\e61c"; }
.el-icon-ui-tcyun:before { content: "\e64c"; }
.el-icon-ui-upload:before { content: "\e61b"; }
.el-icon-ui-qiniu:before { content: "\e601"; }
.el-icon-ui-upyun:before { content: "\e602"; }

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

View File

@@ -12,14 +12,14 @@
size="small"
>
<el-form-item
:label="$T('UPLOADER_CONFIG_NAME')"
:label="$t('UPLOADER_CONFIG_NAME')"
required
prop="_configName"
>
<el-input
v-model="ruleForm._configName"
type="input"
:placeholder="$T('UPLOADER_CONFIG_PLACEHOLDER')"
:placeholder="$t('UPLOADER_CONFIG_PLACEHOLDER')"
/>
</el-form-item>
<!-- dynamic config -->
@@ -109,7 +109,6 @@ import { marked } from 'marked'
import { reactive, ref, toRefs, watch } from 'vue'
import { useRoute } from 'vue-router'
import { T as $T } from '@/i18n/index'
import { getConfig } from '@/utils/dataSender'
import { IPicGoPluginConfig, IStringKeyMap } from '#/types/types'

View File

@@ -11,14 +11,14 @@
size="small"
>
<el-form-item
:label="$T('UPLOADER_CONFIG_NAME')"
:label="$t('UPLOADER_CONFIG_NAME')"
required
prop="_configName"
>
<el-input
v-model="ruleForm._configName"
type="input"
:placeholder="$T('UPLOADER_CONFIG_PLACEHOLDER')"
:placeholder="$t('UPLOADER_CONFIG_PLACEHOLDER')"
/>
</el-form-item>
<!-- dynamic config -->
@@ -82,7 +82,6 @@ import type { FormInstance } from 'element-plus'
import { cloneDeep, union } from 'lodash-es'
import { reactive, ref, watch } from 'vue'
import { T as $T } from '@/i18n'
import { getConfig } from '@/utils/dataSender'
import { IPicGoPluginConfig, IStringKeyMap } from '#/types/types'

View File

@@ -6,17 +6,17 @@
size="default"
:model="waterMarkForm"
>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST')">
<el-input
v-model="skipProcessForm.skipProcessExtList"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }"
/>
<div class="text-xs text-gray-500">
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS') }}
{{ $t('UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS') }}
</div>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM')">
<el-switch
v-model="waterMarkForm.isAddWatermark"
:style="switchStyle"
@@ -24,20 +24,20 @@
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE')"
>
<el-radio-group v-model="waterMarkForm.watermarkType">
<el-radio value="text">
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT') }}
{{ $t('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT') }}
</el-radio>
<el-radio value="image">
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE') }}
{{ $t('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE') }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM')"
>
<el-switch
v-model="waterMarkForm.isFullScreenWatermark"
@@ -46,7 +46,7 @@
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE')"
>
<el-input-number
v-model="waterMarkForm.watermarkDegree"
@@ -55,19 +55,19 @@
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark && waterMarkForm.watermarkType === 'text'"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT')"
>
<el-input v-model="waterMarkForm.watermarkText" />
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark && waterMarkForm.watermarkType === 'text'"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH')"
>
<el-input v-model="waterMarkForm.watermarkFontPath" />
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO')"
>
<el-input-number
v-model="waterMarkForm.watermarkScaleRatio"
@@ -78,7 +78,7 @@
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark && waterMarkForm.watermarkType === 'text'"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR')"
>
<el-color-picker
v-model="waterMarkForm.watermarkColor"
@@ -87,13 +87,13 @@
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark && waterMarkForm.watermarkType === 'image'"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_WMPATH')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_WMPATH')"
>
<el-input v-model="waterMarkForm.watermarkImagePath" />
</el-form-item>
<el-form-item
v-show="waterMarkForm.isAddWatermark"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION')"
>
<el-radio-group v-model="waterMarkForm.watermarkPosition">
<el-radio
@@ -105,13 +105,13 @@
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF')">
<el-switch
v-model="compressForm.isRemoveExif"
:style="switchStyle"
/>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_QUALITY')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_QUALITY')">
<el-input-number
v-model="compressForm.quality"
:min="1"
@@ -119,7 +119,7 @@
:step="1"
/>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT')">
<el-switch
v-model="compressForm.isConvert"
:style="switchStyle"
@@ -127,7 +127,7 @@
</el-form-item>
<el-form-item
v-show="compressForm.isConvert"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT')"
>
<el-select
v-model="compressForm.convertFormat"
@@ -144,7 +144,7 @@
</el-form-item>
<el-form-item
v-show="compressForm.isConvert"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC')"
>
<el-input
v-model="formatConvertObj"
@@ -153,19 +153,19 @@
:autosize="{ minRows: 2, maxRows: 4 }"
/>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP')">
<el-switch
v-model="compressForm.isFlip"
:style="switchStyle"
/>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP')">
<el-switch
v-model="compressForm.isFlop"
:style="switchStyle"
/>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE')">
<el-switch
v-model="compressForm.isReSize"
:style="switchStyle"
@@ -173,7 +173,7 @@
</el-form-item>
<el-form-item
v-show="compressForm.isReSize"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH')"
>
<el-input-number
v-model="compressForm.reSizeWidth"
@@ -182,7 +182,7 @@
</el-form-item>
<el-form-item
v-show="compressForm.isReSize"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT')"
>
<el-input-number
v-model="compressForm.reSizeHeight"
@@ -191,7 +191,7 @@
</el-form-item>
<el-form-item
v-show="compressForm.isReSize && compressForm.reSizeHeight! > 0 && compressForm.reSizeWidth === 0"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT')"
>
<el-switch
v-model="compressForm.skipReSizeOfSmallImg"
@@ -200,14 +200,14 @@
</el-form-item>
<el-form-item
v-show="compressForm.isReSize && compressForm.reSizeWidth! > 0 && compressForm.reSizeHeight === 0"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH')"
>
<el-switch
v-model="compressForm.skipReSizeOfSmallImg"
:style="switchStyle"
/>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT')">
<el-switch
v-model="compressForm.isReSizeByPercent"
:style="switchStyle"
@@ -215,14 +215,14 @@
</el-form-item>
<el-form-item
v-show="compressForm.isReSizeByPercent"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT')"
>
<el-input-number
v-model="compressForm.reSizePercent"
:min="0"
/>
</el-form-item>
<el-form-item :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE')">
<el-form-item :label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE')">
<el-switch
v-model="compressForm.isRotate"
:style="switchStyle"
@@ -230,7 +230,7 @@
</el-form-item>
<el-form-item
v-show="compressForm.isRotate"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE')"
:label="$t('UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE')"
>
<el-input-number
v-model="compressForm.rotateDegree"
@@ -242,10 +242,10 @@
type="primary"
@click="handleSaveConfig"
>
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM') }}
{{ $t('UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM') }}
</el-button>
<el-button @click="closeDialog">
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_CANCEL') }}
{{ $t('UPLOAD_PAGE_IMAGE_PROCESS_CANCEL') }}
</el-button>
</el-form-item>
</el-form>
@@ -254,23 +254,23 @@
<script lang="ts" setup>
import type { IBuildInCompressOptions, IBuildInWaterMarkOptions } from 'piclist'
import { onBeforeMount, reactive, ref, toRaw } from 'vue'
import { useI18n } from 'vue-i18n'
import { T as $T } from '@/i18n/index'
import { getConfig, saveConfig } from '@/utils/dataSender'
import { configPaths } from '#/utils/configPaths'
const { t } = useI18n()
const imageProcessDialogVisible = defineModel<boolean>()
const waterMarkPositionMap = new Map([
['north', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP')],
['northeast', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT')],
['southeast', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT')],
['south', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM')],
['southwest', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT')],
['northwest', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT')],
['west', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT')],
['east', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT')],
['centre', $T('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER')]
['north', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP')],
['northeast', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT')],
['southeast', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT')],
['south', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM')],
['southwest', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT')],
['northwest', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT')],
['west', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT')],
['east', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT')],
['centre', t('UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER')]
])
const imageExtList = ['jpg', 'jpeg', 'png', 'webp', 'bmp', 'tiff', 'tif', 'svg', 'ico', 'avif', 'heif', 'heic']
const availableFormat = [

View File

@@ -1,7 +1,7 @@
<template>
<el-dialog
v-model="showInputBoxVisible"
:title="inputBoxOptions.title || $T('INPUT')"
:title="inputBoxOptions.title || $t('INPUT')"
:modal-append-to-body="false"
append-to-body
>
@@ -14,14 +14,14 @@
round
@click="handleInputBoxCancel"
>
{{ $T('CANCEL') }}
{{ $t('CANCEL') }}
</el-button>
<el-button
type="primary"
round
@click="handleInputBoxConfirm"
>
{{ $T('CONFIRM') }}
{{ $t('CONFIRM') }}
</el-button>
</template>
</el-dialog>
@@ -31,7 +31,6 @@
import type { IpcRendererEvent } from 'electron'
import { onBeforeMount, onBeforeUnmount, reactive, ref } from 'vue'
import { T as $T } from '@/i18n/index'
import $bus from '@/utils/bus'
import { SHOW_INPUT_BOX, SHOW_INPUT_BOX_RESPONSE } from '#/events/constants'
import { IShowInputBoxOption } from '#/types/types'

View File

@@ -1,53 +1,5 @@
import { ILocales, ILocalesKey } from 'root/src/universal/types/i18n'
import { updatePageReloadCount } from '@/utils/global'
import { SET_CURRENT_LANGUAGE } from '#/events/constants'
import { builtinI18nList } from '#/i18n'
import { IRPCActionType } from '#/types/enum'
import { II18nItem, IStringKeyMap } from '#/types/types'
export class I18nManager {
#i18nFileList: II18nItem[] = builtinI18nList
constructor () {
this.#getCurrentLanguage()
this.#getLanguageList()
window.electron.ipcRendererOn(SET_CURRENT_LANGUAGE, (_, lang: string, locales: ILocales) => {
this.#setLocales(lang, locales)
updatePageReloadCount()
})
}
#getLanguageList () {
this.#i18nFileList = window.electron.sendRpcSync(IRPCActionType.GET_LANGUAGE_LIST)
}
#getCurrentLanguage () {
const [lang, locales] = window.electron.sendRpcSync(IRPCActionType.GET_CURRENT_LANGUAGE)
this.#setLocales(lang, locales)
}
#setLocales (lang: string, locales: ILocales) {
window.i18n.setLocales(lang, locales)
}
T (key: ILocalesKey, args: IStringKeyMap = {}): string {
return window.i18n?.translate(key, args) || key
}
setCurrentLanguage (lang: string) {
window.electron.sendRPC(IRPCActionType.SET_CURRENT_LANGUAGE, lang)
}
get languageList () {
return this.#i18nFileList
}
export function setCurrentLanguage (lang: string) {
window.electron.sendRPC(IRPCActionType.SET_CURRENT_LANGUAGE, lang)
}
const i18nManager = new I18nManager()
const T = (key: ILocalesKey, args: IStringKeyMap = {}): string => {
return i18nManager.T(key, args)
}
export { i18nManager, T }

View File

@@ -0,0 +1,876 @@
{
"OPEN_MAIN_WINDOW": "Open Main Window",
"OPERATION_SUCCEED": "Operation Succeed",
"QUICK_UPLOAD": "Quick Upload",
"PICBED_QRCODE": "Picbed Qrcode",
"CONFIG_THING": "Config ${c}",
"TOOLBOX_TITLE": "Troubleshoot PicList runtime issues",
"TOOLBOX_SUB_TITLE": "Scan the following items immediately to fix usage issues",
"TOOLBOX_CHECK_CONFIG_FILE_BROKEN": "Check if the configuration file is damaged",
"TOOLBOX_CHECK_GALLERY_FILE_BROKEN": "Check if the album file is damaged",
"TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD": "Check if there is a problem with clipboard picture upload",
"TOOLBOX_CHECK_PROBLEM_WITH_PROXY": "Check if the proxy settings are normal",
"TOOLBOX_FIX_DONE_NEED_RELOAD": "Repair completed, need to restart to take effect, restart or not",
"TOOLBOX_CANT_AUTO_FIX": "Unable to automatically repair, please repair the following problems yourself",
"TOOLBOX_START_SCAN": "Start scanning",
"TOOLBOX_RE_SCAN": "Re scanning",
"TOOLBOX_START_FIX": "Start fixing",
"TOOLBOX_SUCCESS_TIPS": "Congratulations, no problems were found",
"MANUAL_PAGE_OPEN_TIP": "Please select the way to open the manual",
"MANUAL_PAGE_OPEN_TIP_TITLE": "Tips",
"MANUAL_PAGE_OPEN_BY_BROWSER": "Browser",
"MANUAL_PAGE_OPEN_BY_BUILD_IN": "Built-in Window",
"MANUAL_PAGE_OPEN_SETTING_TIP": "Select the way to open the manual",
"UPLOAD_AREA": "Upload",
"UPLOAD_VIEW_HINT": "Click to open picbeds settings",
"MANAGE_PAGE": "Manage",
"GALLERY": "Gallery",
"REFRESH": "Refresh",
"MANUAL": "Manual",
"PICBEDS_SETTINGS": "Picbeds",
"PICLIST_SETTINGS": "Settings",
"PLUGIN_SETTINGS": "Plugins",
"CHOOSE_PICBED": "Choose Picbed",
"COPY_PICBED_CONFIG": "Copy Picbed Config",
"COPY_PICBED_CONFIG_SUCCEED": "Copy Picbed Config Succeed",
"INPUT": "Input",
"CANCEL": "Cancel",
"CONFIRM": "Confirm",
"RESET_PICBED_CONFIG": "Reset",
"CHOOSE_SHOWED_PICBED": "Choose Showed Picbed",
"CHOOSE_PASTE_FORMAT": "Choose Paste Format",
"COPY": "Copy",
"DELETE": "Delete",
"SELECT_ALL": "Select All",
"CHANGE_IMAGE_URL": "Change Image URL",
"CHANGE_IMAGE_URL_SUCCEED": "Change Image URL Succeed",
"COPY_LINK_SUCCEED": "Copy Link Succeed",
"BATCH_COPY_LINK_SUCCEED": "Batch Copy Link Succeed",
"FILE_RENAME": "File Rename",
"OPEN_FILE_PATH": "Open file path",
"GALLERY_SYNC_DELETE": "Cloud Sync Delete",
"GALLERY_SYNC_DELETE_NOTICE_TITLE": "Notice",
"GALLERY_SYNC_DELETE_NOTICE_SUCCEED": "Cloud Delete Succeed",
"GALLERY_SYNC_DELETE_NOTICE_FAILED": "Cloud Delete Failed",
"GALLERY_CHANGE_URL": "Rename",
"GALLERY_SEARCH_FILENAME": "Search by Filename",
"GALLERY_SEARCH_URL": "Search by URL",
"GALLERY_MATCHED": " Matched: ",
"UPLOAD_PAGE_COPY_UPLOAD_API": "Copy Upload API",
"UPLOAD_PAGE_IMAGE_PROCESS_NAME": "Image Processing",
"UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE": "Image Processing Settings",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST": "Skip Process Ext List",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS": "Enter the file extensions to skip processing, separated by commas (e.g., jpg,png,gif)",
"UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM": "Add Watermark",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE": "Watermark Type",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT": "Text",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE": "Image",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM": "Full-Screen Watermark",
"UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE": "Watermark Angle",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT": "Watermark Text",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH": "Watermark Font Path (download font file for the first time)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO": "Watermark Size Ratio",
"UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR": "Watermark Color, Please select from the color picker",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPATH": "Watermark Image Path (leave blank to use default image)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION": "Watermark Position",
"UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF": "Remove EXIF Info",
"UPLOAD_PAGE_IMAGE_PROCESS_QUALITY": "Compression Quality(1-100)",
"UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT": "Convert Format",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT": "Destination Format",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC": "Specific Format, Please enter in json format, e.g. {\"png\": \"jpg\"}",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP": "Whether to flip vertically",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP": "Whether to flip horizontally",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE": "Resize to fixed size",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH": "Width(Set to 0 to scale by height)",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT": "Height(Set to 0 to scale by width)",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT": "Skip resize when image height is smaller than target height",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH": "Skip resize when image width is smaller than target width",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT": "Resize by percentage (Higher priority)",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT": "Resize Percentage, enter 50 for 50%",
"UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE": "Rotate",
"UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE": "Rotation Angle",
"UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM": "Save",
"UPLOAD_PAGE_IMAGE_PROCESS_CANCEL": "Cancel",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP": "top",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM": "bottom",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT": "left",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT": "right",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT": "top left",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT": "top right",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT": "bottom left",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT": "bottom right",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER": "center",
"UPLOAD_SHORT_URL": "Short",
"UPLOAD_NORMAL_URL": "Long",
"SETTINGS": "Settings",
"SETTINGS_OPEN_CONFIG_FILE": "Open Config File",
"SETTINGS_MIGRATE_FROM_PICGO": "Migrate from PicGo",
"SETTINGS_MIGRATE_FROM_PICGO_TITLE": "Notice",
"SETTINGS_MIGRATE_FROM_PICGO_CONTENT": "Migrate from PicGo will overwrite your current settings and gallery, do you want to continue?",
"SETTINGS_MIGRATE_FROM_PICGO_SUCCESS": "Import succeed, please restart PicList",
"SETTINGS_MIGRATE_FROM_PICGO_FAILED": "Import failed",
"SETTINGS_START_MODE": "Default Start Mode",
"SETTINGS_START_MODE_MINI": "Mini Window",
"SETTINGS_START_MODE_MAIN": "Main Window",
"SETTINGS_START_MODE_NO_TRAY": "No Tray",
"SETTINGS_START_MODE_QUIET": "Quiet Mode",
"SETTINGS_CLICK_TO_OPEN": "Click to Open",
"SETTINGS_SET_LOG_FILE": "Set Log File",
"SETTINGS_CLICK_TO_SET": "Click to Set",
"SETTINGS_CLICK_TO_CHECK": "Click to Check",
"SETTINGS_SET_SHORTCUT": "Set Shortcut",
"SETTINGS_CUSTOM_LINK_FORMAT": "Custom Link Format",
"SETTINGS_SET_PROXY_AND_MIRROR": "Set Proxy and Mirror",
"SETTINGS_SET_SERVER": "Set Server",
"SETTINGS_CHECK_UPDATE": "Check Update",
"SETTINGS_OPEN_UPDATE_HELPER": "Open Update Helper",
"SETTINGS_OPEN": "Open",
"SETTINGS_CLOSE": "Close",
"SETTINGS_CLOSE_MINI_WINDOW_SYNC": "Close Mini Window When open Main Window",
"SETTINGS_CLOSE_MAIN_WINDOW_SYNC": "Close Main Window When open Mini Window",
"SETTINGS_LAUNCH_ON_BOOT": "Launch On Boot",
"SETTINGS_RENAME_BEFORE_UPLOAD": "Manual Rename",
"SETTINGS_TIMESTAMP_RENAME": "Timestamp Rename",
"SETTINGS_ADVANCED_RENAME": "Advanced Rename",
"SETTINGS_ADVANCED_RENAME_ENABLE": "Enable Advanced Rename",
"SETTINGS_ADVANCED_RENAME_FORMAT": "Advanced Rename Format",
"SETTINGS_ENABLE_SECOND_PICBED": "Enable Second Picbed",
"SETTINGS_SET_SECOND_PICBED": "Set Second Picbed",
"SETTINGS_OPEN_UPLOAD_TIPS": "Open Upload Tips",
"SETTINGS_OPEN_UPLOAD_RESULT_TIPS": "Open Upload Result Tips",
"SETTINGS_MINI_WINDOW_ON_TOP": "Mini Window On Top",
"SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD": "Auto Copy URL After Upload",
"SETTINGS_TIPS_PLACEHOLDER_URL": "Use $url to represent url position",
"SETTINGS_TIPS_PLACEHOLDER_FILENAME": "Use $fileName to represent file name position",
"SETTINGS_TIPS_PLACEHOLDER_EXTNAME": "Use $extName to represent file's ext position",
"SETTINGS_TIPS_SUCH_AS": "Such as: $url/$fileName",
"SETTINGS_UPLOAD_PROXY": "Upload Proxy",
"SETTINGS_PLUGIN_INSTALL_PROXY": "Proxy for Plugin Install",
"SETTINGS_PLUGIN_INSTALL_MIRROR": "Mirror for Plugin Install",
"SETTINGS_CURRENT_VERSION": "Current Version",
"SETTINGS_NEWEST_VERSION": "Newest Version",
"SETTINGS_GETING": "Getting...",
"SETTINGS_TIPS_HAS_NEW_VERSION": "PicList has a new version, please click confirm to restart",
"SETTINGS_LOG_FILE_PATH": "Log File Path",
"SETTINGS_CONFIG_FILE_PATH": "Config File Path",
"SETTINGS_LOG_FILE": "Log File",
"SETTINGS_GUI_LOG_FILE": "GUI Log File",
"SETTINGS_MANAGE_LOG_FILE": "Manage Log File",
"SETTINGS_LOG_LEVEL": "Log Level",
"SETTINGS_LOG_FILE_SIZE": "Log File Size",
"SETTINGS_SET_PICGO_SERVER": "Set PicGo Server",
"SETTINGS_TIPS_SERVER_NOTICE": "If you don't know what is the server's function, please read the document, or don't modify the configuration.",
"SETTINGS_ENABLE_SERVER": "Enable Server",
"SETTINGS_SET_SERVER_HOST": "Set Server Host",
"SETTINGS_SET_SERVER_PORT": "Set Server Port",
"SETTINGS_SET_SERVER_KEY": "Set Auth Key",
"SETTINGS_SET_WEB_SERVER": "Set Web Server",
"SETTINGS_TIPS_WEB_SERVER_NOTICE": "If you don't know what is the web server's function, please read the document, or don't modify the configuration.",
"SETTINGS_SET_ENABLE_WEB_SERVER": "Enable Web Server",
"SETTINGS_SET_WEB_SERVER_HOST": "Set Web Server Host",
"SETTINGS_SET_WEB_SERVER_PORT": "Set Web Server Port",
"SETTINGS_SET_WEB_SERVER_PATH": "Set Web Server Path",
"SETTINGS_TIP_PLACEHOLDER_WEB_HOST": "Default:127.0.0.1",
"SETTINGS_TIP_PLACEHOLDER_WEB_PORT": "Default:37777",
"SETTINGS_TIP_PLACEHOLDER_HOST": "Default:127.0.0.1",
"SETTINGS_TIP_PLACEHOLDER_PORT": "Default:36677",
"SETTINGS_TIP_PLACEHOLDER_KEY": "This key is used to avoid malicious requests, through urlParams '?key=xxx' to pass",
"SETTINGS_SET_SERVER_AES_KEY": "Set AES Key for server response",
"SETTINGS_LOG_LEVEL_ALL": "All",
"SETTINGS_LOG_LEVEL_SUCCESS": "Success",
"SETTINGS_LOG_LEVEL_ERROR": "Error",
"SETTINGS_LOG_LEVEL_INFO": "Info",
"SETTINGS_LOG_LEVEL_WARN": "Warn",
"SETTINGS_LOG_LEVEL_NONE": "None",
"SETTINGS_RESULT": "Result",
"SETTINGS_DEFAULT_PICBED": "Default Picbed",
"SETTINGS_SET_DEFAULT_PICBED": "Set Default Picbed",
"SETTINGS_NOT_CONFIG_OPTIONS": "Not Config Options",
"SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD": "Use Builtin Clipboard to Upload",
"SETTINGS_CHOOSE_LANGUAGE": "Choose Language",
"UPLOADER_CONFIG_NAME": "Configuration Name",
"UPLOADER_CONFIG_PLACEHOLDER": "Please Enter Configuration Name",
"SELECTED_SETTING_HINT": "Selected",
"SETTINGS_MAIN_WINDOW_SIZE": "Default Main Window Size",
"SETTINGS_MAIN_WINDOW_SIZE_WIDTH": "Default Main Window Width",
"SETTINGS_MAIN_WINDOW_WIDTH_HINT": "Default: 1200",
"SETTINGS_MAIN_WINDOW_SIZE_HEIGHT": "Default Main Window Height",
"SETTINGS_MAIN_WINDOW_HEIGHT_HINT": "Default: 800",
"SETTINGS_RAW_PICGO_SIZE": "Raw PicGo Size",
"SETTINGS_CUSTOM_MINI_ICON_PATH": "Custom Mini Window Icon Path",
"SETTINGS_CUSTOM_MINI_ICON": "Custom Mini Window Icon",
"SETTINGS_COMPRESS_AND_WATERMARK": "Compress and Watermark",
"SETTINGS_SYNC_DELETE_CLOUD": "Sync delete from cloud storage of gallery",
"SETTINGS_ISHIDEDOCK": "Hide Dock Icon",
"SETTINGS_ISHIDEDOCK_TIPS": "Not support hide dock and tray at the same time",
"SETTINGS_ENCODE_OUTPUT_URL": "Encode Output(or Copyed) URL",
"SETTINGS_WATCH_CLIPBOARD": "Watch clipboard when software start",
"SETTINGS_SHORT_URL": "Use short url",
"SETTINGS_SHORT_URL_SERVER": "Short url server",
"SETTINGS_SHORT_URL_C1N_TOKEN": "C1N Token",
"SETTINGS_SHORT_URL_YOURLS_DOMAIN": "YOURLS domain",
"SETTINGS_SHORT_URL_YOURLS_SIGNATURE": "YOURLS signature",
"SETTINGS_SHORT_URL_CF_WORKER_HOST": "Cloudflare Worker Host",
"SETTINGS_SHORT_SINK_DOMAIN": "sink domain",
"SETTINGS_SHORT_SINK_TOKEN": "sink token",
"SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD": "Delete local file after upload",
"SETTINGS_SYNC_CONFIG": "Settings Sync Configuration",
"SETTINGS_SYNC_CONFIG_TITLE": "Sync Settings",
"SETTINGS_SYNC_CONFIG_NOTE": "The files to be synchronized are configuration files.",
"SETTINGS_SYNC_CONFIG_SELECT_TYPE": "Select sync method",
"SETTINGS_SYNC_CONFIG_SELECT_FILE": "Select files to sync",
"SETTINGS_SYNC_CONFIG_SELECT_CONFIG": "Configuration files only",
"SETTINGS_SYNC_CONFIG_SELECT_GALLERY": "Gallery files only",
"SETTINGS_SYNC_CONFIG_SELECT_BOTH": "Both configuration and gallery files",
"SETTINGS_SYNC_CONFIG_GITEA_HOST": "Gitea Host",
"SETTINGS_SYNC_CONFIG_GITHUB_USERNAME": "username",
"SETTINGS_SYNC_CONFIG_GITEA_USERNAME": "username",
"SETTINGS_SYNC_CONFIG_GITEE_USERNAME": "username",
"SETTINGS_SYNC_CONFIG_GITHUB_REPO": "repository (private)",
"SETTINGS_SYNC_CONFIG_GITEA_REPO": "repository",
"SETTINGS_SYNC_CONFIG_GITEE_REPO": "repository path",
"SETTINGS_SYNC_CONFIG_GITHUB_BRANCH": "branch",
"SETTINGS_SYNC_CONFIG_GITEA_BRANCH": "branch",
"SETTINGS_SYNC_CONFIG_GITEE_BRANCH": "branch",
"SETTINGS_SYNC_CONFIG_GITHUB_TOKEN": "Token",
"SETTINGS_SYNC_CONFIG_GITEA_TOKEN": "Token",
"SETTINGS_SYNC_CONFIG_GITEE_TOKEN": "Token",
"SETTINGS_SYNC_CONFIG_PROXY": "Proxy",
"SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER": "Please enter GitHub username",
"SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER": "Please enter Gitea username",
"SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER": "Please enter Gitee username",
"SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER": "Please enter GitHub repository name",
"SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER": "Please enter Gitea repository name",
"SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER": "Please enter Gitee repository name",
"SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER": "Please enter GitHub branch name",
"SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER": "Please enter Gitee branch name",
"SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER": "Please enter Gitea branch name",
"SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER": "Please enter GitHub Token",
"SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER": "Please enter Gitea Token",
"SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER": "Please enter Gitee Token",
"SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER": "Please enter proxy",
"SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT": "WebDAV Endpoint",
"SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER": "Please enter WebDAV endpoint URL",
"SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME": "Username",
"SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER": "Please enter WebDAV username",
"SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD": "Password",
"SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER": "Please enter WebDAV password",
"SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE": "Authentication Type",
"SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED": "Enable SSL/HTTPS",
"SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH": "Save Path",
"SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER": "Please select save path for sync files",
"SETTINGS_UP_DOWN_DESC": "Upload and download configuration files",
"SETTINGS_SYNC_UPLOAD": "Upload",
"SETTINGS_SYNC_DOWNLOAD": "Download",
"SETTINGS_SYNC_UPLOAD_ALL": "Upload all",
"SETTINGS_SYNC_DOWNLOAD_ALL": "Download all",
"SETTINGS_SYNC_UPLOAD_SUCCESS": "Successfully uploaded",
"SETTINGS_SYNC_UPLOAD_FAILED": "Upload failed",
"SETTINGS_SYNC_DOWNLOAD_SUCCESS": "Successfully downloaded",
"SETTINGS_SYNC_DOWNLOAD_FAILED": "Download failed",
"SETTINGS_SYNC_COMMON_CONFIG": "Common configuration",
"SETTINGS_SYNC_MANAGE_CONFIG": "Manage configuration",
"SETTINGS_AUTO_IMPORT": "Auto import config in manage page",
"SETTINGS_AUTO_IMPORT_SELECT_PICBED": "Select picbed",
"SETTINGS_TAB_SYSTEM": "System",
"SETTINGS_TAB_SYNC_CONFIG": "Configuration",
"SETTINGS_TAB_UPLOAD": "Upload",
"SETTINGS_TAB_ADVANCED": "Advanced",
"SETTINGS_TAB_UPDATE": "Update",
"BUILTIN_CLIPBOARD_TIPS": "Use builtin clipboard function to upload instead of using scripts",
"SHORTCUT_NAME": "Shortcut Name",
"SHORTCUT_BIND": "Shortcut Binding",
"SHORTCUT_STATUS": "Status",
"SHORTCUT_ENABLED": "Enabled",
"SHORTCUT_DISABLED": "Disabled",
"SHORTCUT_SOURCE": "Source",
"SHORTCUT_HANDLE": "Handle",
"SHORTCUT_ENABLE": "Enable",
"SHORTCUT_DISABLE": "Disable",
"SHORTCUT_EDIT": "Edit",
"SHORTCUT_CHANGE_UPLOAD": "Change Upload Shortcut",
"WAIT_TO_UPLOAD": "Wait to Upload",
"ALREADY_UPLOAD": "Already Uploaded",
"DRAG_FILE_TO_HERE": "Drag file to here, or",
"CLICK_TO_UPLOAD": "click to upload",
"LINK_FORMAT": "Link Format",
"CLIPBOARD_PICTURE": "Clipboard",
"TIPS_DRAG_VALID_PICTURE_OR_URL": "Drag valid picture or url to here",
"TIPS_INPUT_URL": "Input URL",
"TIPS_HTTP_PREFIX": "http:// or https://",
"TIPS_INPUT_VALID_URL": "Input valid URL",
"PLUGIN_SEARCH_PLACEHOLDER": "Search picgo plugins on npm, or click the button to view the awesome plugins list",
"PLUGIN_INSTALL": "Install",
"PLUGIN_INSTALLING": "Installing...",
"PLUGIN_INSTALLED": "Installed",
"PLUGIN_DOING_SOMETHING": "Doing...",
"PLUGIN_LIST": "Plugin List",
"PLUGIN_IMPORT_LOCAL": "Import Local Plugins",
"PLUGIN_UPDATE_ALL": "Update All Plugins",
"TIPS_REMOVE_LINK": "This operation will remove the picture from the album, continue?",
"TIPS_WILL_REMOVE_CHOOSED_IMAGES": "This operation will remove the picture from the album, continue?",
"TIPS_MUST_CONTAINS_URL": "Must contains $url or $fileName or $extName",
"TIPS_NETWORK_ERROR": "Network Error",
"TIPS_NEED_RELOAD": "Need Reload App",
"TIPS_PLEASE_CHOOSE_LOG_LEVEL": "Please choose log level",
"TIPS_SET_SUCCEED": "Set successfully",
"TIPS_RESET_SUCCEED": "Reset successfully",
"TIPS_PLUGIN_NOT_GUI_IMPLEMENT": "This plugin is not optimized for the GUI, continue?",
"MANAGE_SETTING_TITLE": "Manage Setting",
"MANAGE_SETTING_ISAUTOREFRESH_TITLE": "Auto refresh file list when entering new directory",
"MANAGE_SETTING_ISAUTOREFRESH_TIPS": "Only applies to non-paginated mode, data is cached to indexdb to speed up loading speed",
"MANAGE_SETTING_CLEAR_CACHE_TITLE": "Clear file list cache database, currently in use:",
"MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE": "Available:",
"MANAGE_SETTING_CLEAR_CACHE_TIPS": "After clearing, the file list will be reloaded when entering a new directory next time",
"MANAGE_SETTING_CLEAR_CACHE_PROMPT": "Are you sure you want to clear the file list cache database?",
"MANAGE_SETTING_CLEAR_CACHE_BUTTON": "Clear",
"MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE": "Display the original image instead of format icon (requires public access permissions)",
"MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE": "Use presigned URL for image display",
"MANAGE_SETTING_ISSHOWLIST_TITLE": "Default display mode for the file list",
"MANAGE_SETTING_ISSHOWLIST_ON": "List",
"MANAGE_SETTING_ISSHOWLIST_OFF": "Card",
"MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE": "Force custom URL to use HTTPS",
"MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS": "After enabling, all operations will automatically add the https prefix to custom domains",
"MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE": "Preserve directory structure when uploading",
"MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS": "After disabling, all files will be expanded to the specified directory",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A": "Download",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B": " File ",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C": "will preserve the directory structure",
"MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D": " Folder ",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS": "After enabling, the original directory structure will be preserved",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE": "Maximum number of files to download simultaneously (1-9999)",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS": "Not work on Tencent",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS": "Please enter the maximum number of files to download simultaneously",
"MANAGE_SETTING_ISIGNORECASE_TITLE": "Should file search be case-insensitive",
"MANAGE_SETTING_ISIGNORECASE_TIPS": "After enabling, the search will be case-insensitive",
"MANAGE_SETTING_TIMESTAMPRENAME_TITLE": "Rename uploaded files with timestamp - (highest priority)",
"MANAGE_SETTING_TIMESTAMPRENAME_TIPS": "After enabling, the uploaded file will be renamed with the timestamp",
"MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE": "Rename uploaded files with random strings - (medium priority)",
"MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS": "Random string length is 20",
"MANAGE_SETTING_CUSTOMRENAME_TITLE": "Rename uploaded files with custom names - (lowest priority)",
"MANAGE_SETTING_CUSTOMRENAME_TIPS": "After enabling, the uploaded file will be renamed with the custom pattern",
"MANAGE_SETTING_CUSTOM_PATTERN_TITLE": "Custom rename format, placeholders can be freely combined, please refer to the table below",
"MANAGE_SETTING_CUSTOM_PATTERN_TIPS": "Please enter the custom rename format",
"MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE": "Placeholder",
"MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS": "Description",
"MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE": "Presigned URL expiration time (seconds)",
"MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS": "Please enter the presigned URL expiration time",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE": "Select default link format for copying",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN": "Markdown",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK": "Markdown with link",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL": "Raw URL",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML": "HTML",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE": "BBCode",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM": "Custom",
"MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE": "Custom link format($url -> raw url, $fileName -> raw fileName)",
"MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS": "Please enter the custom link format",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE": "Choose default download folder",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS": "System default download directory",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON": "Choose folder",
"MANAGE_SETTING_COPY_MESSAGE": "Copied",
"MANAGE_SETTING_CLEAR_CACHE_SUCCESS": "Cleared successfully",
"MANAGE_SETTING_CLEAR_CACHE_FAILED": "Clear failed",
"MANAGE_SETTING_ISENCODEURL_TITLE": "Encode URL when copy",
"MANAGE_SETTING_ISENCODEURL_TIPS": "After enabling, the URL will be encoded when copying",
"MANAGE_NO_DATA": "No data",
"MANAGE_MAIN_PAGE_NEW_BUCKET": "New Bucket",
"MANAGE_MAIN_PAGE_BACK_TO_HOME": "Home",
"MANAGE_MAIN_PAGE_SWITCH_PICBED": "Switch",
"MANAGE_MAIN_PAGE_SETTING": "Setting",
"MANAGE_MAIN_PAGE_SUBMIT": "Submit",
"MANAGE_MAIN_PAGE_TIPS": "Tips",
"MANAGE_MAIN_PAGE_TIPS_SUCCESS": "Created successfully",
"MANAGE_MAIN_PAGE_TIPS_FAILED": "Create failed",
"MANAGE_MAIN_PAGE_BUCKET": "Bucket",
"MANAGE_MAIN_PAGE_GALLERY": "Album",
"MANAGE_MAIN_PAGE_REPOSITORY": "Repo",
"MANAGE_CONSTANT_BASE_RULE": "Please enter ",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A": "Please enter the number of items displayed per page.",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B": "The number of items displayed per page must be a number.",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C": "The number of items displayed per page must be between 20 and 1000.",
"MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A": "Please enter the alias, which is the unique identifier for this configuration.",
"MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B": "The alias can only contain Chinese, English, numbers, underscores, and hyphens.",
"MANAGE_CONSTANT_ALIAS_TOOLTIP": "The alias can only contain Chinese, English, numbers, underscores, and hyphens.",
"MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP": "The number of items displayed per page must be between 20 and 1000.",
"MANAGE_CONSTANT_PAGING_TOOLTIP": "When paging is turned off, the directory list will use database caching to optimize performance.",
"MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP": "Separated by commas, e.g., bucket1,bucket2,bucket3, and corresponding to the starting directory order one by one.",
"MANAGE_CONSTANT_BASE_DIR_TOOLTIP": "Separated by commas, e.g., /dir1,/dir2,/dir3, corresponding to the storage bucket order one by one.",
"MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP": "When turned on, the domainbound to bucket will be automatically obtained. Else, it can be manually filled in.",
"MANAGE_CONSTANT_SMMS_ALIAS_DESC": "Alias - required",
"MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER": "Unique identifier of this configuration",
"MANAGE_CONSTANT_SMMS_TOKEN_DESC": "Token - required",
"MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER": "Please fill in your token",
"MANAGE_CONSTANT_SMMS_PAGING_DESC": "Whether to enable pagination",
"MANAGE_CONSTANT_SMMS_EXPLAIN": "For users in mainland China, please visit the backup domain https://smms.app. Do not upload images in large quantities.",
"MANAGE_CONSTANT_SMMS_REFER_TEXT": "Refer to: ",
"MANAGE_CONSTANT_QINIU_NAME": "Qiniu",
"MANAGE_CONSTANT_QINIU_ALIAS_DESC": "Alias - Required",
"MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER": "Unique identifier for this configuration",
"MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC": "accessKey - Required",
"MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER": "Please enter the accessKey",
"MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC": "secretKey - Required",
"MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER": "Please enter the secretKey",
"MANAGE_CONSTANT_QINIU_BUCKET_DESC": "space name - Optional",
"MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER": "English comma separated, for example: bucket1, bucket2",
"MANAGE_CONSTANT_QINIU_BASE_DIR_DESC": "Base directory - Optional",
"MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER": "English comma separated, for example: /dir1, /dir2",
"MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC": "Automatically get the bound domain name",
"MANAGE_CONSTANT_QINIU_PAGING_DESC": "Enable pagination",
"MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC": "Number of items displayed per page",
"MANAGE_CONSTANT_QINIU_EXPLAIN": "When configuring space name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value.",
"MANAGE_CONSTANT_QINIU_REFER_TEXT": "Refer to: ",
"MANAGE_CONSTANT_GITHUB_ALIAS_DESC": "Alias - Required",
"MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER": "Unique identifier for this configuration",
"MANAGE_CONSTANT_GITHUB_TOKEN_DESC": "Token - Required",
"MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER": "Please enter the Token",
"MANAGE_CONSTANT_GITHUB_TOKEN_TIPS": "Please provide a token with full repo permissions",
"MANAGE_CONSTANT_GITHUB_USER_DESC": "Username - Required",
"MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER": "Please enter the Username",
"MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE": "Username",
"MANAGE_CONSTANT_GITHUB_PROXY_DESC": "Proxy address - Optional",
"MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER": "For example: http://127.0.0.1:1080",
"MANAGE_CONSTANT_GITHUB_PROXY_TIPS": "If the access speed is slow, you can try configuring a proxy",
"MANAGE_CONSTANT_GITHUB_PAGING_DESC": "Enable pagination",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC": "CDN acceleration domain name - Optional",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER": "Support using {username}, {repo}, {branch}, and {path} as replacement placeholders",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS": "For example: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A": "The acceleration domain name must start with http:// or https://",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B": "The braces in the acceleration domain name must appear in pairs",
"MANAGE_CONSTANT_GITHUB_EXPLAIN": "There is an hourly limit for API calls, and uploading files larger than 100M is not supported",
"MANAGE_CONSTANT_GITHUB_REFER_TEXT": "Refer to:",
"MANAGE_CONSTANT_ALIYUN_NAME": "Ali Cloud",
"MANAGE_CONSTANT_ALIYUN_ALIAS_DESC": "Alias - required",
"MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER": "The unique identifier of this configuration",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC": "AccessKeyId - required",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC": "AccessKeySecret - required",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER": "Please fill in AccessKeySecret",
"MANAGE_CONSTANT_ALIYUN_BUCKET_DESC": "Bucket name - optional",
"MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER": "Separated by commas in English, for example: bucket1, bucket2",
"MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC": "Base directory - optional",
"MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER": "Separated by commas in English, for example: /dir1, /dir2",
"MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC": "Automatically obtain bound domain name",
"MANAGE_CONSTANT_ALIYUN_PAGING_DESC": "Whether to enable pagination",
"MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC": "Number of items displayed per page",
"MANAGE_CONSTANT_ALIYUN_EXPLAIN": "When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value.",
"MANAGE_CONSTANT_ALIYUN_REFER_TEXT": "Refer to: ",
"MANAGE_CONSTANT_TENCENT_NAME": "Tencent",
"MANAGE_CONSTANT_TENCENT_ALIAS_DESC": "Alias - Required",
"MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER": "Unique identifier for this configuration",
"MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC": "SecretID - Required",
"MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER": "Please fill in the SecretID",
"MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC": "SecretKey - Required",
"MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER": "Please fill in the SecretKey",
"MANAGE_CONSTANT_TENCENT_APPID_DESC": "App ID - Required",
"MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER": "Please fill in the App ID",
"MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP": "For example: 1250000000",
"MANAGE_CONSTANT_TENCENT_BUCKET_DESC": "Bucket name - Optional (note the App ID must be included)",
"MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER": "Comma-separated list of bucket names, for example: bucket1-1250000000, bucket2-1250000000",
"MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC": "Starting directory - Optional",
"MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER": "Comma-separated list of directories, for example: /dir1, /dir2",
"MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC": "Automatically obtain binding domain name",
"MANAGE_CONSTANT_TENCENT_PAGING_DESC": "Enable paging",
"MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC": "Number of items to display per page",
"MANAGE_CONSTANT_TENCENT_EXPLAIN": "When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value.",
"MANAGE_CONSTANT_TENCENT_REFER_TEXT": "Refer to: ",
"MANAGE_CONSTANT_UPYUN_NAME": "Upyun",
"MANAGE_CONSTANT_UPYUN_ALIAS_DESC": "Alias - required",
"MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER": "Unique identifier of the configuration",
"MANAGE_CONSTANT_UPYUN_BUCKET_DESC": "Service name - required",
"MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER": "Name of the storage bucket corresponding to other object storage",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC": "Operator name - required",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER": "It is recommended to use an operator with full read, write, and delete permissions",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE": "Operator",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC": "Operator password - required",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER": "Please enter the password",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE": "Operator password",
"MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC": "Base directory - optional",
"MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER": "Initial directory when reading files",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC": "Acceleration domain name - required",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER": "Please start with http:// or https://",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A": "Acceleration domain name cannot be empty",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B": "Please start the custom domain name with http:// or https://",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC": "Anti-leech key - optional",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER": "Please enter the anti-leech key",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP": "If you do not need to use anti-leech, please leave it blank",
"MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC": "Expiration time(s) - optional",
"MANAGE_CONSTANT_UPYUN_PAGING": "Whether to enable pagination",
"MANAGE_CONSTANT_UPYUN_ITEMS_PAGE": "Number of items displayed per page",
"MANAGE_CONSTANT_UPYUN_EXPLAIN": "It is necessary to fill in the acceleration domain name of Upyun image bed, otherwise it cannot be used normally.",
"MANAGE_CONSTANT_UPYUN_REFER_TEXT": "Refer to: ",
"MANAGE_CONSTANT_IMGUR_NAME": "Imgur",
"MANAGE_CONSTANT_IMGUR_ALIAS_DESC": "Alias - required",
"MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER": "Unique identifier of the configuration",
"MANAGE_CONSTANT_IMGUR_USERNAME_DESC": "Imgur username - required",
"MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER": "Please enter the Imgur username",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC": "Access token - required",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER": "Please enter the access token",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP": "Not the client ID, please refer to the configuration tutorial",
"MANAGE_CONSTANT_IMGUR_PROXY_DESC": "Proxy - optional",
"MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER": "For example: http://127.0.0.1:1080",
"MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP": "Please use a proxy in mainland China, otherwise it cannot be used normally",
"MANAGE_CONSTANT_IMGUR_EXPLAIN": "Please use a proxy in mainland China, API calls have restrictions, please pay attention to usage frequency",
"MANAGE_CONSTANT_IMGUR_REFER_TEXT": "Refer to: ",
"MANAGE_CONSTANT_S3_NAME": "S3-Compatible",
"MANAGE_CONSTANT_S3_ALIAS_DESC": "Alias - Required",
"MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER": "Unique identifier for this configuration",
"MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC": "Access Key ID - Required",
"MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER": "Please enter Access Key ID",
"MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC": "Secret Access Key - Required",
"MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER": "Please enter Secret Access Key",
"MANAGE_CONSTANT_S3_ENDPOINT_DESC": "Endpoint - Optional",
"MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER": "e.g. s3.us-east-1.amazonaws.com",
"MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP": "If left blank, AWS S3 is accessed by default. Provide the root API endpoint",
"MANAGE_CONSTANT_S3_SSLENABLED_DESC": "Use HTTPS connection",
"MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP": "Disable this option if not supported by your platform.",
"MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC": "Enable S3 Path style",
"MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP": "Required when using Minio, for example.",
"MANAGE_CONSTANT_S3_PROXY_DESC": "Proxy - Optional",
"MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER": "e.g. http://127.0.0.1:1080",
"MANAGE_CONSTANT_S3_PROXY_TOOLTIP": "Use proxy if unable to access in some parts of Mainland China",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC": "Permission for uploaded files",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE": "Private",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ": "Public read",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE": "Public read and write",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ": "Authenticated read",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ": "Bucket owner read",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL": "Bucket owner full control",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ": "AWS execution read",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP": "Permission options for uploaded files",
"MANAGE_CONSTANT_S3_BUCKET_DESC": "Bucket name - Optional",
"MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER": "English comma-separated list, e.g. bucket1,bucket2",
"MANAGE_CONSTANT_S3_BASE_DIR_DESC": "Base directory - Optional",
"MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER": "English comma-separated list, e.g. /dir1,/dir2",
"MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC": "Enable Doge Cloud API",
"MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP": "Support Doge Cloud API",
"MANAGE_CONSTANT_S3_PAGING_DESC": "Enable pagination",
"MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC": "Items per page",
"MANAGE_CONSTANT_S3_EXPLAIN": "When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value.",
"MANAGE_CONSTANT_S3_REFER_TEXT": "Refer to: ",
"MANAGE_CONSTANT_WEBDAV_ALIAS_DESC": "Alias - Required",
"MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER": "Unique identifier for this configuration",
"MANAGE_CONSTANT_WEBDAV_HOST_DESC": "Address - Required",
"MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER": "e.g. https://example.com/dav",
"MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP": "Please enter the complete WebDAV address",
"MANAGE_CONSTANT_WEBDAV_USERNAME_DESC": "Username - Required",
"MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER": "Please enter your username",
"MANAGE_CONSTANT_WEBDAV_BUCKET_DESC": "Special Configuration",
"MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER": "e.g. bucket1",
"MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP": "This cannot be modified, only for software compatibility consideration",
"MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC": "Password - Required",
"MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER": "Please enter your password",
"MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC": "Base Directory - Optional",
"MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER": "e.g. /dir1",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC": "Custom Domain - Optional",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER": "e.g. https://example.com",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP": "If your WebDAV server supports custom domains, please fill in",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE": "Custom domain should start with http:// or https://",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH": "Web Path - Optional",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER": "e.g. test/ttc",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP": "Used to generate URL",
"MANAGE_CONSTANT_WEBDAV_PROXY_DESC": "Proxy - Optional",
"MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER": "e.g. http://127.0.0.1:1080",
"MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP": "If special network environment is required to access, please use proxy",
"MANAGE_CONSTANT_WEBDAV_SSL_DESC": "Use HTTPS Connection",
"MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP": "Depending on the configuration of your WebDAV server, if your server does not support HTTPS, please turn off this option",
"MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC": "Authentication Type",
"MANAGE_CONSTANT_WEBDAV_EXPLAIN": "WebDAV Configuration",
"MANAGE_CONSTANT_WEBDAV_REFER_TEXT": "Refer to:",
"MANAGE_CONSTANT_LOCAL_NAME": "Local",
"MANAGE_CONSTANT_LOCAL_ALIAS_DESC": "Alias - Required",
"MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER": "Unique identifier for this configuration",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC": "Base directory - Required",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER": "e.g. /dir1",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC": "Custom Domain - Optional",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER": "e.g. https://example.com",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP": "If your local path supports custom domains, please fill in",
"MANAGE_CONSTANT_LOCAL_WEB_PATH": "Web Path - Optional",
"MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER": "e.g. test/ttc",
"MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP": "Used to generate URL",
"MANAGE_CONSTANT_LOCAL_EXPLAIN": "Local Configuration",
"MANAGE_CONSTANT_LOCAL_REFER_TEXT": "Refer to:",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE": "baseDir cannot be empty",
"MANAGE_CONSTANT_LOCAL_BUCKET_DESC": "Special Configuration",
"MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER": "bucket1",
"MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP": "This cannot be modified, only for software compatibility consideration",
"MANAGE_CONSTANT_SFTP_NAME": "SFTP",
"MANAGE_CONSTANT_SFTP_ALIAS_DESC": "Alias - Required",
"MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER": "Unique identifier for this configuration",
"MANAGE_CONSTANT_SFTP_HOST_DESC": "SSH Host - Required",
"MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER": "e.g. 233.233.233.233",
"MANAGE_CONSTANT_SFTP_PORT_DESC": "SSH Port - Required",
"MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER": "e.g. 22",
"MANAGE_CONSTANT_SFTP_USERNAME_DESC": "Username",
"MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER": "Please enter your username",
"MANAGE_CONSTANT_SFTP_PASSWORD_DESC": "Password",
"MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER": "Please enter your password",
"MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC": "Private Key",
"MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER": "Please enter your private key",
"MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC": "Private Key Password",
"MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER": "Please enter your private key password",
"MANAGE_CONSTANT_SFTP_BASE_DIR_DESC": "Base Directory",
"MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER": "e.g. /dir1",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC": "Custom Domain",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER": "e.g. https://example.com",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP": "If your SFTP server supports custom domains, please fill in",
"MANAGE_CONSTANT_SFTP_WEB_PATH": "Web Path",
"MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER": "e.g. test/ttc",
"MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP": "Used to generate URL",
"MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC": "File mode",
"MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER": "e.g. 0644",
"MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC": "Directory mode",
"MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER": "e.g. 0755",
"MANAGE_CONSTANT_SFTP_EXPLAIN": "SFTP Configuration",
"MANAGE_CONSTANT_SFTP_REFER_TEXT": "Refer to:",
"MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE": "baseDir cannot be empty",
"MANAGE_CONSTANT_SFTP_BUCKET_DESC": "Special Configuration",
"MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER": "e.g. bucket1",
"MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP": "This cannot be modified, only for software compatibility consideration",
"MANAGE_LOGIN_PAGE_PANE_NAME": "Saved Config",
"MANAGE_LOGIN_PAGE_PANE_KEY_NAME": "Configuration",
"MANAGE_LOGIN_PAGE_PANE_KEY_VALUE": "Value",
"MANAGE_LOGIN_PAGE_PANE_ENTER": "Enter",
"MANAGE_LOGIN_PAGE_PANE_DELETE": "Delete",
"MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER": "Please select",
"MANAGE_LOGIN_PAGE_PANE_IMPORT": "Import",
"MANAGE_LOGIN_PAGE_PANE_SAVE": "Save",
"MANAGE_LOGIN_PAGE_PANE_RESET": "Reset",
"MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE": "Existing configurations, click to copy corresponding cell data",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A": "Please fill in",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE": "The alias can only contain Chinese, English, numbers, underscores, and hyphens",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE": "The number of items per page must be between 20-1000",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE": "Custom domain name should start with http:// or https://",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME": "Notice",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE": "Alias overwritten: ",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B": "Alias saved: ",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C": "Alias deleted: ",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D": "Configuration with alias: ",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E": " failed to delete",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS": "Copied ",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE": "Are you sure to delete this?",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP": "Tip",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM": "Confirm",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL": "Cancel",
"MANAGE_BUCKET_PAGE_LOADING_TEXT": "Loading...",
"MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER": "Please select a custom domain",
"MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER": "Please enter a custom domain",
"MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP": "Upload files",
"MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP": "Upload from URL",
"MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP": "Create folder",
"MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP": "Download page",
"MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP": "Batch rename",
"MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP": "Batch copy URL",
"MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP": "Copy file information",
"MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP": "Force refresh file list",
"MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER": "Search files",
"MANAGE_BUCKET_PAGE_ROOT_FOLDER": "Root folder",
"MANAGE_BUCKET_PAGE_FILE_NUMBER": "Number of files: ",
"MANAGE_BUCKET_PAGE_FILE_SIZE": "Total size: ",
"MANAGE_BUCKET_PAGE_SELECT_ALL": "Select all",
"MANAGE_BUCKET_PAGE_SELECT_NONE": "Deselect all",
"MANAGE_BUCKET_PAGE_SELECT_INVERT": "Invert selection",
"MANAGE_BUCKET_DOWNLOAD_BTN": "Download",
"MANAGE_BUCKET_DELETE_BTN": "Delete",
"MANAGE_BUCKET_SORT_TITLE": "Sort",
"MANAGE_BUCKET_SORT_NAME": "Name",
"MANAGE_BUCKET_SORT_SIZE": "Size",
"MANAGE_BUCKET_SORT_EXT": "Type",
"MANAGE_BUCKET_SORT_TIME": "Time",
"MANAGE_BUCKET_SORT_CHECK": "Selected status",
"MANAGE_BUCKET_SORT_INIT": "Init",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE": "Please enter URL(s), support multiple URLs separated by line breaks",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM": "Confirm",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL": "Cancel",
"MANAGE_BUCKET_URL_FORMAT_MARKDOWN": "Markdown",
"MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK": "Markdown-link",
"MANAGE_BUCKET_URL_FORMAT_URL": "Url",
"MANAGE_BUCKET_URL_FORMAT_HTML": "Html",
"MANAGE_BUCKET_URL_FORMAT_BBCODE": "BBCode",
"MANAGE_BUCKET_URL_FORMAT_CUSTOM": "Custom",
"MANAGE_BUCKET_URL_FORMAT_PRESIGN": "Presigned link",
"MANAGE_BUCKET_FILE_INFO_TITLE": "File information",
"MANAGE_BUCKET_FILE_INFO_COPY_TIPS": "Copy in JSON format",
"MANAGE_BUCKET_FILE_LIST_LOADING": "Loading, click to cancel",
"MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE": "Preparing to download, click to cancel",
"MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE": "Keep folder structure",
"MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE": "Do not keep folder structure",
"MANAGE_BUCKET_UPLOAD_AREA_TITLE": "Drag and drop to upload, support recursive upload of folders",
"MANAGE_BUCKET_UPLOAD_AREA_TEXT": "Or: click to select file (folders are not supported)",
"MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING": "Loading files",
"MANAGE_BUCKET_UPLOAD_AREA_BTN": "Upload",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR": "Clear",
"MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING": "Uploading",
"MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK": "Copy upload task information",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK": "Clear completed tasks",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK": "Clear all tasks",
"MANAGE_BUCKET_UPLOAD_AREA_SUCCESS": "Success",
"MANAGE_BUCKET_UPLOAD_AREA_FAILED": "Failed",
"MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE": "Download page",
"MANAGE_BUCKET_DOWNLOADING": "Downloading",
"MANAGE_BUCKET_DOWNLOAD_COPY_TASK": "Copy download task information",
"MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK": "Clear completed tasks",
"MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK": "Clear all tasks",
"MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER": "Open download folder",
"MANAGE_BUCKET_DOWNLOAD_SUCCESS": "Success",
"MANAGE_BUCKET_DOWNLOAD_FAILED": "Failed",
"MANAGE_BUCKET_MARKDOWN_PREVIEW": "Preview",
"MANAGE_BUCKET_PLAY": "Play",
"MANAGE_BUCKET_RENAME_FILE": "Rename file",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A": "String or JS regular expression for matching during replacement",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS": "Directly enter the regular expression, no need to add /",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER": "For example: ^\\d{4}-\\d{2}-\\d{2} ",
"MANAGE_BUCKET_RENAME_FILE_INPUT_B": "String for replacement, placeholders from custom",
"MANAGE_BUCKET_RENAME_FILE_TABLE_IID": "Auto-incrementing number",
"MANAGE_BUCKET_RENAME_FILE_EXT": "Replace extension if it matches",
"MANAGE_BUCKET_RENAME_FILE_EXT_TIPS": "Check this option if you want to modify the extension",
"MANAGE_BUCKET_RENAME_FILE_EXT_YES": "Yes",
"MANAGE_BUCKET_RENAME_FILE_EXT_NO": "No",
"MANAGE_BUCKET_RENAME_FILE_CANCEL": "Cancel",
"MANAGE_BUCKET_RENAME_FILE_CONFIRM": "Confirm",
"MANAGE_BUCKET_COPY_SUCCESS": "Copy success",
"MANAGE_BUCKET_START_LOADING_MESSAGE": "Start getting files",
"MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL": "Failed to get file content",
"MANAGE_BUCKET_LAST_PAGE_TITLE": "Tip",
"MANAGE_BUCKET_LAST_PAGE_MSG": "This is the last page",
"MANAGE_BUCKET_GET_LIST_FAIL_TITLE": "Tip",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG": "Failed to get file list",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG2": "Getting file list in the background, please do not switch pages",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG3": "Loading file list, please try again later",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE": "Are you sure you want to download this folder?",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP": "Tip",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM": "Confirm",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL": "Cancel",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS": "Successfully obtained download list",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL": "Failed to obtain download list",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL": "Canceled",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE": "Please enter the folder name",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP": "Create folder",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM": "Confirm",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL": "Cancel",
"MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG": "Folder name can only contain Chinese, English, numbers, underscores, and slashes",
"MANAGE_BUCKET_CREATE_FOLDER_SUCCESS": "Successfully created, please refresh",
"MANAGE_BUCKET_CREATE_FOLDER_FAIL": "Failed to create",
"MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ": "Please enter a valid URL",
"MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE": "Tip",
"MANAGE_BUCKET_UPLOAD_URL_NOT_MSG": "Starting background download, automatic upload after success",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG": "Please enter the matching string",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2": "No matching files found",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3": "No files need to be renamed",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A": "Detected",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B": "files are duplicated. Do you want to continue?",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C": "Tip",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM": "Confirm",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL": "Cancel",
"MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A": "Rename successful",
"MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B": "Failed",
"MANAGE_BUCKET_BATCH_RENAME_CANCEL": "Canceled",
"MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG": "Please select the file first",
"MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A": "Copied",
"MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B": "file(s) information",
"MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG": "Please select the file first",
"MANAGE_BUCKET_BATCH_COPY_URL_MSG_A": "Copied",
"MANAGE_BUCKET_BATCH_COPY_URL_MSG_B": "file(s) link",
"MANAGE_BUCKET_CANCEL_LOADING_TITLE": "Stop getting file list?",
"MANAGE_BUCKET_CANCEL_LOADING_MSG": "Tip",
"MANAGE_BUCKET_CANCEL_LOADING_CONFIRM": "Confirm",
"MANAGE_BUCKET_CANCEL_LOADING_CANCEL": "Cancel",
"MANAGE_BUCKET_CANCEL_LOADING_SUCCESS": "File list retrieval has been stopped",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE": "Stop downloading file retrieval?",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG": "Prompt",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM": "Confirm",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL": "Cancel",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS": "Download file retrieval has been stopped",
"MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE": "Prompt",
"MANAGE_BUCKET_GET_FILE_BS_NOT_MSG": "Successfully retrieved file list",
"MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2": "Some files failed to retrieve",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A": "Permanently delete",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B": "files, continue?",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG": "Prompt",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM": "Confirm",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL": "Cancel",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE": "Prompt",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG": "Deletion failed",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2": "Deletion successful",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3": "Failed",
"MANAGE_BUCKET_BATCH_DELETE_CANCEL": "Deletion has been cancelled",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE": "Permanently delete",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER": "folder",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A": "and all files in this directory",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE": "file",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C": "Continue?",
"MANAGE_BUCKET_DELETE_CONFIRM_MSG": "Prompt",
"MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM": "Confirm",
"MANAGE_BUCKET_DELETE_CONFIRM_CANCEL": "Cancel",
"MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE": "Prompt",
"MANAGE_BUCKET_DELETE_ERROR_MSG_MSG": "Deleting a folder may take some time, please be patient",
"MANAGE_BUCKET_DELETE_SUCCESS": "Deletion successful",
"MANAGE_BUCKET_DELETE_FAIL": "Deletion failed",
"MANAGE_BUCKET_DELETE_CANCEL": "Deletion has been cancelled",
"MANAGE_BUCKET_RENAME_INFO_MSG": "The new file name is the same as the original file name, no need to rename",
"MANAGE_BUCKET_RENAME_SUCCESS": "Rename successful",
"MANAGE_BUCKET_RENAME_ERROR_MSG": "Rename failed",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME": "File name",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME": "Completion time",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS": "Status",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS": "Success",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL": "Failed",
"MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME": "File name",
"MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH": "Upload path",
"MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME": "Completion time",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS": "Status",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS": "Success",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL": "Failed",
"MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME": "File name",
"MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS": "Progress",
"MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME": "File name",
"MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS": "Progress",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME": "File name",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE": "Size",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM": "Number of files",
"MANAGE_BUCKET_FILE_COLUMN_FILENAME": "FileName",
"MANAGE_BUCKET_FILE_COLUMN_COPY_URL": "Copy link",
"MANAGE_BUCKET_FILE_COLUMN_INFO": "File Info",
"MANAGE_BUCKET_FILE_COLUMN_FILESIZE": "Size",
"MANAGE_BUCKET_FILE_COLUMN_TIME": "Time",
"MANAGE_NEW_BUCKET_TCYUN_NAME": "Tencent Cloud",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC": "Bucket Name",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER": "Please enter the Bucket name",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A": "Bucket name can't be empty",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B": "Bucket name length cannot exceed 23 characters",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C": "Bucket name can only contain lowercase letters, numbers, and hyphens, and cannot begin or end with a hyphen",
"MANAGE_NEW_BUCKET_TCYUN_REGION": "Region",
"MANAGE_NEW_BUCKET_TCYUN_ACL_DESC": "Access Control",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW": "Public Read and Write",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R": "Public Read",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE": "Private",
"MANAGE_NEW_BUCKET_ALIYUN_NAME": "Alibaba Cloud",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC": "Bucket Name",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER": "Please enter the Bucket name",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A": "Bucket name can't be empty",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B": "Bucket name length cannot exceed 63 characters",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C": "Bucket name can only contain lowercase letters, numbers, and hyphens, and cannot begin or end with a hyphen",
"MANAGE_NEW_BUCKET_ALIYUN_REGION": "Region",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC": "Access Control",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW": "Public Read and Write",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R": "Public Read",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE": "Private",
"MANAGE_NEW_BUCKET_QINIU_NAME": "Qiniu Cloud",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC": "Bucket Name",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER": "Please enter the Bucket name",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A": "Bucket name can't be empty",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B": "Bucket name length cannot exceed 63 characters",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C": "Bucket names can only contain lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen.",
"MANAGE_NEW_BUCKET_QINIU_REGION": "Region",
"MANAGE_NEW_BUCKET_QINIU_ACL_DESC": "Public Access",
"MANAGE_NEW_BUCKET_S3PLIST_NAME": "S3-Compatible",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC": "Bucket Name",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER": "Please enter the Bucket name",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A": "Bucket name can't be empty",
"MANAGE_NEW_BUCKET_S3PLIST_REGION": "Region",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC": "Access Control",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW": "Public Read and Write",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R": "Public Read",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE": "Private",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ": "Authenticated Read",
"PLUGIN_UPDATE_SUCCEED": "Plugin update succeed",
"TIPS_NOTICE": "Tips"
}

View File

@@ -0,0 +1,876 @@
{
"OPEN_MAIN_WINDOW": "打开主窗口",
"OPERATION_SUCCEED": "操作成功",
"QUICK_UPLOAD": "快捷上传",
"PICBED_QRCODE": "图床配置二维码",
"CONFIG_THING": "配置${c}",
"TOOLBOX_TITLE": "排查 PicList 运行时问题",
"TOOLBOX_SUB_TITLE": "立即扫描以下项目,修复使用问题",
"TOOLBOX_CHECK_CONFIG_FILE_BROKEN": "检查配置文件是否损坏",
"TOOLBOX_CHECK_GALLERY_FILE_BROKEN": "检查相册文件是否损坏",
"TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD": "检查剪贴板图片上传是否存在问题",
"TOOLBOX_CHECK_PROBLEM_WITH_PROXY": "检查代理设置是否正常",
"TOOLBOX_FIX_DONE_NEED_RELOAD": "修复完成,需要重启生效,是否重启",
"TOOLBOX_CANT_AUTO_FIX": "无法自动修复,请自行修复以下问题",
"TOOLBOX_START_SCAN": "开始扫描",
"TOOLBOX_RE_SCAN": "重新扫描",
"TOOLBOX_START_FIX": "开始修复",
"TOOLBOX_SUCCESS_TIPS": "恭喜你,没有检查出问题",
"MANUAL_PAGE_OPEN_TIP": "请选择打开方式",
"MANUAL_PAGE_OPEN_TIP_TITLE": "Tips",
"MANUAL_PAGE_OPEN_BY_BROWSER": "浏览器",
"MANUAL_PAGE_OPEN_BY_BUILD_IN": "内置窗口",
"MANUAL_PAGE_OPEN_SETTING_TIP": "选择手册打开方式",
"UPLOAD_AREA": "上传",
"UPLOAD_VIEW_HINT": "点击打开图床设置",
"MANAGE_PAGE": "管理",
"GALLERY": "相册",
"REFRESH": "刷新",
"MANUAL": "手册",
"PICBEDS_SETTINGS": "图床",
"PICLIST_SETTINGS": "设置",
"PLUGIN_SETTINGS": "插件",
"CHOOSE_PICBED": "选择图床",
"COPY_PICBED_CONFIG": "复制图床配置",
"COPY_PICBED_CONFIG_SUCCEED": "复制图床配置成功",
"INPUT": "输入框",
"CANCEL": "取消",
"CONFIRM": "确定",
"RESET_PICBED_CONFIG": "重置",
"CHOOSE_SHOWED_PICBED": "请选择显示的图床",
"CHOOSE_PASTE_FORMAT": "请选择粘贴的格式",
"COPY": "复制",
"DELETE": "删除",
"SELECT_ALL": "全选",
"CHANGE_IMAGE_URL": "修改图片URL",
"CHANGE_IMAGE_URL_SUCCEED": "修改图片URL成功",
"COPY_LINK_SUCCEED": "复制链接成功",
"BATCH_COPY_LINK_SUCCEED": "批量复制链接成功",
"FILE_RENAME": "文件改名",
"OPEN_FILE_PATH": "打开文件路径",
"GALLERY_SYNC_DELETE": "删除云端",
"GALLERY_SYNC_DELETE_NOTICE_TITLE": "通知",
"GALLERY_SYNC_DELETE_NOTICE_SUCCEED": "云端删除成功",
"GALLERY_SYNC_DELETE_NOTICE_FAILED": "云端删除失败",
"GALLERY_CHANGE_URL": "修改",
"GALLERY_SEARCH_FILENAME": "搜索文件名",
"GALLERY_SEARCH_URL": "搜索URL",
"GALLERY_MATCHED": " 匹配到: ",
"UPLOAD_PAGE_COPY_UPLOAD_API": "复制上传API",
"UPLOAD_PAGE_IMAGE_PROCESS_NAME": "图片处理",
"UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE": "图片处理设置",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST": "跳过处理的文件扩展名列表",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS": "请填写需要跳过处理的文件扩展名列表, 以英文逗号分隔, 如: jpg,png,gif",
"UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM": "是否添加水印",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE": "水印类型",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT": "文字",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE": "图片",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM": "是否全屏水印",
"UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE": "水印角度",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT": "水印文字",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH": "水印字体路径(第一次需下载字体文件)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO": "水印占原图比例",
"UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR": "水印颜色,请从取色器中选择",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPATH": "水印图片路径(留空使用默认图片)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION": "水印位置",
"UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF": "是否移除EXIF信息",
"UPLOAD_PAGE_IMAGE_PROCESS_QUALITY": "压缩质量(1-100)",
"UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT": "是否转换格式",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT": "转换目的格式",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC": "精细化转换格式, 请输入JSON格式如: {\"png\": \"jpg\"}",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP": "是否进行垂直翻转",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP": "是否进行水平翻转",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE": "是否按固定尺寸调整图片",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH": "调整尺寸宽度(设为0则按高度等比缩放)",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT": "调整尺寸高度(设为0则按宽度等比缩放)",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT": "当图片高度小于设定高度时跳过缩放",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH": "当图片宽度小于设定宽度时跳过缩放",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT": "是否按比例调整尺寸,优先级更高",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT": "调整尺寸比例, 输入50表示50%",
"UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE": "是否旋转",
"UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE": "旋转角度",
"UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM": "保存",
"UPLOAD_PAGE_IMAGE_PROCESS_CANCEL": "取消",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP": "上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM": "下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT": "左",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT": "右",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT": "左上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT": "右上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT": "左下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT": "右下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER": "中",
"UPLOAD_SHORT_URL": "短链接",
"UPLOAD_NORMAL_URL": "长链接",
"SETTINGS": "设置",
"SETTINGS_OPEN_CONFIG_FILE": "打开配置文件",
"SETTINGS_MIGRATE_FROM_PICGO": "从PicGo迁移",
"SETTINGS_MIGRATE_FROM_PICGO_TITLE": "通知",
"SETTINGS_MIGRATE_FROM_PICGO_CONTENT": "即将导入PicGo的配置文件和相册, 这将覆盖当前的配置文件和相册, 是否继续?",
"SETTINGS_MIGRATE_FROM_PICGO_SUCCESS": "导入成功, 请重启PicList生效",
"SETTINGS_MIGRATE_FROM_PICGO_FAILED": "导入失败",
"SETTINGS_START_MODE": "启动模式",
"SETTINGS_START_MODE_MINI": "mini窗口",
"SETTINGS_START_MODE_MAIN": "主窗口",
"SETTINGS_START_MODE_NO_TRAY": "隐藏托盘",
"SETTINGS_START_MODE_QUIET": "静默启动",
"SETTINGS_CLICK_TO_OPEN": "点击打开",
"SETTINGS_SET_LOG_FILE": "设置日志文件",
"SETTINGS_CLICK_TO_SET": "点击设置",
"SETTINGS_CLICK_TO_CHECK": "点击检查",
"SETTINGS_SET_SHORTCUT": "设置快捷键",
"SETTINGS_CUSTOM_LINK_FORMAT": "自定义链接格式",
"SETTINGS_SET_PROXY_AND_MIRROR": "设置代理和镜像地址",
"SETTINGS_SET_SERVER": "设置Server",
"SETTINGS_CHECK_UPDATE": "检查更新",
"SETTINGS_OPEN_UPDATE_HELPER": "打开更新助手",
"SETTINGS_OPEN": "开",
"SETTINGS_CLOSE": "关",
"SETTINGS_CLOSE_MINI_WINDOW_SYNC": "打开主窗口时关闭mini窗口",
"SETTINGS_CLOSE_MAIN_WINDOW_SYNC": "打开mini窗口时关闭主窗口",
"SETTINGS_LAUNCH_ON_BOOT": "开机自启",
"SETTINGS_RENAME_BEFORE_UPLOAD": "手动重命名",
"SETTINGS_TIMESTAMP_RENAME": "时间戳重命名",
"SETTINGS_ADVANCED_RENAME": "高级重命名",
"SETTINGS_ADVANCED_RENAME_ENABLE": "开启高级重命名",
"SETTINGS_ADVANCED_RENAME_FORMAT": "重命名格式",
"SETTINGS_ENABLE_SECOND_PICBED": "启用第二图床同步上传",
"SETTINGS_SET_SECOND_PICBED": "设置第二图床",
"SETTINGS_OPEN_UPLOAD_TIPS": "开启上传进度提示",
"SETTINGS_OPEN_UPLOAD_RESULT_TIPS": "开启上传结果提示",
"SETTINGS_MINI_WINDOW_ON_TOP": "Mini窗口置顶",
"SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD": "上传后自动复制URL",
"SETTINGS_TIPS_PLACEHOLDER_URL": "用占位符 $url 来表示url的位置",
"SETTINGS_TIPS_PLACEHOLDER_FILENAME": "用占位符 $fileName 来表示文件名的位置",
"SETTINGS_TIPS_PLACEHOLDER_EXTNAME": "用占位符 $extName 来表示文件格式的位置",
"SETTINGS_TIPS_SUCH_AS": "如",
"SETTINGS_UPLOAD_PROXY": "上传代理",
"SETTINGS_PLUGIN_INSTALL_PROXY": "插件安装代理",
"SETTINGS_PLUGIN_INSTALL_MIRROR": "插件安装镜像",
"SETTINGS_CURRENT_VERSION": "当前版本",
"SETTINGS_NEWEST_VERSION": "最新版本",
"SETTINGS_GETING": "正在获取中",
"SETTINGS_TIPS_HAS_NEW_VERSION": "PicList更新啦请点击确定重启触发更新",
"SETTINGS_LOG_FILE_PATH": "日志文件路径",
"SETTINGS_CONFIG_FILE_PATH": "配置文件路径",
"SETTINGS_LOG_FILE": "常规日志文件",
"SETTINGS_GUI_LOG_FILE": "GUI日志文件",
"SETTINGS_MANAGE_LOG_FILE": "管理日志文件",
"SETTINGS_LOG_LEVEL": "日志记录等级",
"SETTINGS_LOG_FILE_SIZE": "日志文件大小",
"SETTINGS_SET_PICGO_SERVER": "设置PicGo-Server",
"SETTINGS_TIPS_SERVER_NOTICE": "如果你不知道Server的作用请阅读文档或者不用修改配置。",
"SETTINGS_ENABLE_SERVER": "是否开启Server",
"SETTINGS_SET_SERVER_HOST": "设置监听地址",
"SETTINGS_SET_SERVER_PORT": "设置监听端口",
"SETTINGS_SET_SERVER_KEY": "设置鉴权密钥",
"SETTINGS_SET_WEB_SERVER": "设置Web服务",
"SETTINGS_TIPS_WEB_SERVER_NOTICE": "如果你不知道Web服务的作用请阅读文档或者不用修改配置。",
"SETTINGS_SET_ENABLE_WEB_SERVER": "是否开启Web服务",
"SETTINGS_SET_WEB_SERVER_HOST": "设置Web服务监听地址",
"SETTINGS_SET_WEB_SERVER_PORT": "设置Web服务监听端口",
"SETTINGS_SET_WEB_SERVER_PATH": "设置Web服务路径",
"SETTINGS_TIP_PLACEHOLDER_WEB_HOST": "推荐默认地址:127.0.0.1",
"SETTINGS_TIP_PLACEHOLDER_WEB_PORT": "推荐默认端口:37777",
"SETTINGS_TIP_PLACEHOLDER_HOST": "推荐默认地址:127.0.0.1",
"SETTINGS_TIP_PLACEHOLDER_PORT": "推荐默认端口:36677",
"SETTINGS_TIP_PLACEHOLDER_KEY": "用于接口鉴权, 通过url参数添加'?key=xxx'",
"SETTINGS_SET_SERVER_AES_KEY": "设置接口数据加密密钥",
"SETTINGS_LOG_LEVEL_ALL": "全部-All",
"SETTINGS_LOG_LEVEL_SUCCESS": "成功-Success",
"SETTINGS_LOG_LEVEL_ERROR": "错误-Error",
"SETTINGS_LOG_LEVEL_INFO": "普通-Info",
"SETTINGS_LOG_LEVEL_WARN": "提醒-Warn",
"SETTINGS_LOG_LEVEL_NONE": "不记录日志-None",
"SETTINGS_RESULT": "设置结果",
"SETTINGS_DEFAULT_PICBED": "设置默认图床",
"SETTINGS_SET_DEFAULT_PICBED": "设为默认图床",
"SETTINGS_NOT_CONFIG_OPTIONS": "暂无配置项",
"SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD": "使用内置剪贴板上传",
"SETTINGS_CHOOSE_LANGUAGE": "选择语言",
"BUILTIN_CLIPBOARD_TIPS": "使用内置剪贴板函数而不是调用脚本获取剪贴板图片",
"UPLOADER_CONFIG_NAME": "图床配置名",
"UPLOADER_CONFIG_PLACEHOLDER": "请输入配置名称",
"SELECTED_SETTING_HINT": "已选中",
"SETTINGS_MAIN_WINDOW_SIZE": "默认主窗口大小(需重启)",
"SETTINGS_MAIN_WINDOW_SIZE_WIDTH": "默认主窗口宽度",
"SETTINGS_MAIN_WINDOW_WIDTH_HINT": "默认宽度: 1200",
"SETTINGS_MAIN_WINDOW_SIZE_HEIGHT": "默认主窗口高度",
"SETTINGS_MAIN_WINDOW_HEIGHT_HINT": "默认高度: 800",
"SETTINGS_RAW_PICGO_SIZE": "原PicGo大小",
"SETTINGS_CUSTOM_MINI_ICON_PATH": "自定义Mini窗口图标路径",
"SETTINGS_CUSTOM_MINI_ICON": "是否自定义Mini窗口图标",
"SETTINGS_COMPRESS_AND_WATERMARK": "设置图片水印和压缩-格式转换等参数",
"SETTINGS_SYNC_DELETE_CLOUD": "相册内删除时同步删除云端文件",
"SETTINGS_ISHIDEDOCK": "是否隐藏dock图标",
"SETTINGS_ISHIDEDOCK_TIPS": "不支持同时隐藏dock和托盘",
"SETTINGS_ENCODE_OUTPUT_URL": "输出(复制) URL 时进行转义",
"SETTINGS_WATCH_CLIPBOARD": "软件启动时自动监听剪贴板上传",
"SETTINGS_SHORT_URL": "使用短链接",
"SETTINGS_SHORT_URL_SERVER": "短链接服务",
"SETTINGS_SHORT_URL_C1N_TOKEN": "C1N Token",
"SETTINGS_SHORT_URL_YOURLS_DOMAIN": "YOURLS域名",
"SETTINGS_SHORT_URL_YOURLS_SIGNATURE": "YOURLS signature",
"SETTINGS_SHORT_URL_CF_WORKER_HOST": "Cloudflare Worker域名",
"SETTINGS_SHORT_SINK_DOMAIN": "sink域名",
"SETTINGS_SHORT_SINK_TOKEN": "sink token",
"SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD": "上传后删除本地文件",
"SETTINGS_SYNC_CONFIG": "设置配置同步",
"SETTINGS_SYNC_CONFIG_TITLE": "同步设置",
"SETTINGS_SYNC_CONFIG_NOTE": "同步的文件为配置文件",
"SETTINGS_SYNC_CONFIG_SELECT_TYPE": "选择同步方式",
"SETTINGS_SYNC_CONFIG_SELECT_FILE": "选择同步文件",
"SETTINGS_SYNC_CONFIG_SELECT_CONFIG": "仅配置文件",
"SETTINGS_SYNC_CONFIG_SELECT_GALLERY": "仅相册文件",
"SETTINGS_SYNC_CONFIG_SELECT_BOTH": "配置文件和相册文件",
"SETTINGS_SYNC_CONFIG_GITEA_HOST": "Gitea 网址",
"SETTINGS_SYNC_CONFIG_GITHUB_USERNAME": "GitHub用户名",
"SETTINGS_SYNC_CONFIG_GITEA_USERNAME": "Gitea用户名",
"SETTINGS_SYNC_CONFIG_GITEE_USERNAME": "Gitee用户名",
"SETTINGS_SYNC_CONFIG_GITHUB_REPO": "仓库(私有)",
"SETTINGS_SYNC_CONFIG_GITEA_REPO": "仓库",
"SETTINGS_SYNC_CONFIG_GITEE_REPO": "仓库路径名",
"SETTINGS_SYNC_CONFIG_GITHUB_BRANCH": "GitHub分支",
"SETTINGS_SYNC_CONFIG_GITEA_BRANCH": "Gitea分支",
"SETTINGS_SYNC_CONFIG_GITEE_BRANCH": "Gitee分支",
"SETTINGS_SYNC_CONFIG_GITHUB_TOKEN": "GitHub Token",
"SETTINGS_SYNC_CONFIG_GITEA_TOKEN": "Gitea Token",
"SETTINGS_SYNC_CONFIG_GITEE_TOKEN": "Gitee Token",
"SETTINGS_SYNC_CONFIG_PROXY": "代理",
"SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER": "请输入GitHub用户名",
"SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER": "请输入Gitea用户名",
"SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER": "请输入Gitee用户名",
"SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER": "请输入GitHub仓库名",
"SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER": "请输入Gitea仓库名",
"SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER": "请输入Gitee仓库名",
"SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER": "请输入GitHub分支名",
"SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER": "请输入Gitea分支名",
"SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER": "请输入Gitee分支名",
"SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER": "请输入GitHub Token",
"SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER": "请输入Gitea Token",
"SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER": "请输入Gitee Token",
"SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER": "请输入代理地址",
"SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT": "WebDAV端点",
"SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER": "请输入WebDAV端点URL",
"SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME": "用户名",
"SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER": "请输入WebDAV用户名",
"SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD": "密码",
"SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER": "请输入WebDAV密码",
"SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE": "认证类型",
"SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED": "启用SSL/HTTPS",
"SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH": "保存路径",
"SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER": "请选择同步文件的保存路径",
"SETTINGS_UP_DOWN_DESC": "上传下载配置文件",
"SETTINGS_SYNC_UPLOAD": "上传",
"SETTINGS_SYNC_DOWNLOAD": "下载",
"SETTINGS_SYNC_UPLOAD_ALL": "上传所有",
"SETTINGS_SYNC_DOWNLOAD_ALL": "下载所有",
"SETTINGS_SYNC_UPLOAD_SUCCESS": "上传成功",
"SETTINGS_SYNC_UPLOAD_FAILED": "上传失败",
"SETTINGS_SYNC_DOWNLOAD_SUCCESS": "下载成功",
"SETTINGS_SYNC_DOWNLOAD_FAILED": "下载失败",
"SETTINGS_SYNC_COMMON_CONFIG": "通用配置",
"SETTINGS_SYNC_MANAGE_CONFIG": "管理配置",
"SETTINGS_AUTO_IMPORT": "管理页面自动导入配置",
"SETTINGS_AUTO_IMPORT_SELECT_PICBED": "选择需要开启自动导入的图床",
"SETTINGS_TAB_SYSTEM": "系统设置",
"SETTINGS_TAB_SYNC_CONFIG": "同步与配置",
"SETTINGS_TAB_UPLOAD": "上传设置",
"SETTINGS_TAB_ADVANCED": "高级设置",
"SETTINGS_TAB_UPDATE": "更新",
"SHORTCUT_NAME": "快捷键名称",
"SHORTCUT_BIND": "快捷键绑定",
"SHORTCUT_STATUS": "状态",
"SHORTCUT_ENABLED": "已启用",
"SHORTCUT_DISABLED": "已禁用",
"SHORTCUT_SOURCE": "来源",
"SHORTCUT_HANDLE": "操作",
"SHORTCUT_ENABLE": "启用",
"SHORTCUT_DISABLE": "禁用",
"SHORTCUT_EDIT": "编辑",
"SHORTCUT_CHANGE_UPLOAD": "修改上传快捷键",
"WAIT_TO_UPLOAD": "等待上传",
"ALREADY_UPLOAD": "已上传",
"DRAG_FILE_TO_HERE": "将文件拖拽到此处,或",
"CLICK_TO_UPLOAD": "点击上传",
"LINK_FORMAT": "链接格式",
"CLIPBOARD_PICTURE": "剪贴板",
"TIPS_DRAG_VALID_PICTURE_OR_URL": "请拖入合法的图片文件或者图片URL地址",
"TIPS_INPUT_URL": "请输入URL",
"TIPS_HTTP_PREFIX": "http://或者https://开头",
"TIPS_INPUT_VALID_URL": "请输入合法的URL",
"PLUGIN_SEARCH_PLACEHOLDER": "搜索npm上的PicGo插件或者点击上方按钮查看优秀插件列表",
"PLUGIN_INSTALL": "安装",
"PLUGIN_INSTALLING": "安装中",
"PLUGIN_INSTALLED": "已安装",
"PLUGIN_DOING_SOMETHING": "进行中",
"PLUGIN_LIST": "插件列表",
"PLUGIN_IMPORT_LOCAL": "导入本地插件",
"PLUGIN_UPDATE_ALL": "更新全部插件",
"TIPS_REMOVE_LINK": "此操作将把该图片移出相册, 是否继续?",
"TIPS_WILL_REMOVE_CHOOSED_IMAGES": "将在相册中移除刚才选中的 ${m} 张图片,是否继续?",
"TIPS_MUST_CONTAINS_URL": "必须含有$url 或 $fileName 或 $extName",
"TIPS_NETWORK_ERROR": "网络错误暂时无法获取",
"TIPS_NEED_RELOAD": "需要重启生效",
"TIPS_PLEASE_CHOOSE_LOG_LEVEL": "请选择日志记录等级",
"TIPS_SET_SUCCEED": "设置成功",
"TIPS_RESET_SUCCEED": "重置成功",
"TIPS_PLUGIN_NOT_GUI_IMPLEMENT": "该插件未对可视化界面进行优化, 是否继续安装?",
"MANAGE_SETTING_TITLE": "管理页面设置",
"MANAGE_SETTING_ISAUTOREFRESH_TITLE": "每次进入新目录时,是否自动刷新文件列表",
"MANAGE_SETTING_ISAUTOREFRESH_TIPS": "仅对不分页模式有效,默认在加载过一次后自动缓存到数据库来加快下次加载速度",
"MANAGE_SETTING_CLEAR_CACHE_TITLE": "清空文件列表缓存数据库 已占用:",
"MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE": "剩余可用:",
"MANAGE_SETTING_CLEAR_CACHE_TIPS": "清空后下次进入新目录时将会重新加载文件列表",
"MANAGE_SETTING_CLEAR_CACHE_PROMPT": "确定要清空文件列表缓存数据库吗?",
"MANAGE_SETTING_CLEAR_CACHE_BUTTON": "清空",
"MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE": "图片显示为原图而非默认文件格式图标(需要存储桶可公开访问)",
"MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE": "使用预签名URL预览图片",
"MANAGE_SETTING_ISSHOWLIST_TITLE": "文件列表默认显示方式",
"MANAGE_SETTING_ISSHOWLIST_ON": "列表",
"MANAGE_SETTING_ISSHOWLIST_OFF": "卡片",
"MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE": "为自定义域名开启强制HTTPS",
"MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS": "开启后, 复制链接等操作将会自动为自定义域名添加https前缀",
"MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE": "上传时保留目录结构",
"MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS": "关闭后会将所有文件展开到指定目录下",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A": "下载",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B": "文件",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C": "时保留目录结构",
"MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D": "文件夹",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS": "开启后,下载时会保留原始目录结构",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE": "最大同时下载文件数(1-9999)",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS": "腾讯云由于后端实现不同,该设置不生效",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS": "请输入最大同时下载文件数",
"MANAGE_SETTING_ISIGNORECASE_TITLE": "文件搜索时,是否忽略大小写",
"MANAGE_SETTING_ISIGNORECASE_TIPS": "开启后,搜索时会忽略大小写",
"MANAGE_SETTING_TIMESTAMPRENAME_TITLE": "上传文件时间戳重命名--(优先级最高)",
"MANAGE_SETTING_TIMESTAMPRENAME_TIPS": "开启后,上传文件时会自动重命名为时间戳",
"MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE": "上传文件随机字符串重命名--(优先级中)",
"MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS": "随机字符串长度为20",
"MANAGE_SETTING_CUSTOMRENAME_TITLE": "上传文件自定义重命名--(优先级最低)",
"MANAGE_SETTING_CUSTOMRENAME_TIPS": "请填写自定义重命名格式",
"MANAGE_SETTING_CUSTOM_PATTERN_TITLE": "自定义重命名格式,占位符请参考下表,可自由组合",
"MANAGE_SETTING_CUSTOM_PATTERN_TIPS": "请填写自定义重命名格式",
"MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE": "占位符",
"MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS": "描述",
"MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE": "预签名URL过期时间(单位:秒)",
"MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS": "请填写预签名URL过期时间",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE": "选择默认复制的链接格式",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN": "Markdown",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK": "Markdown(带链接)",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL": "原始链接",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML": "HTML格式",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE": "BBCode格式",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM": "自定义格式",
"MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE": "自定义链接格式($url为链接,$fileName为文件名)",
"MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS": "请填写自定义链接格式",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE": "选择下载目录",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS": "系统默认下载目录",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON": "选择目录",
"MANAGE_SETTING_COPY_MESSAGE": "已复制",
"MANAGE_SETTING_CLEAR_CACHE_SUCCESS": "清除成功",
"MANAGE_SETTING_CLEAR_CACHE_FAILED": "清除失败",
"MANAGE_SETTING_ISENCODEURL_TITLE": "复制链接时进行URL编码",
"MANAGE_SETTING_ISENCODEURL_TIPS": "根据平台选择是否开启",
"MANAGE_NO_DATA": "暂无数据",
"MANAGE_MAIN_PAGE_NEW_BUCKET": "新建存储桶",
"MANAGE_MAIN_PAGE_BACK_TO_HOME": "返回首页",
"MANAGE_MAIN_PAGE_SWITCH_PICBED": "切换图床",
"MANAGE_MAIN_PAGE_SETTING": "设置",
"MANAGE_MAIN_PAGE_SUBMIT": "提交",
"MANAGE_MAIN_PAGE_TIPS": "提示",
"MANAGE_MAIN_PAGE_TIPS_SUCCESS": "创建成功",
"MANAGE_MAIN_PAGE_TIPS_FAILED": "创建失败",
"MANAGE_MAIN_PAGE_BUCKET": "存储桶",
"MANAGE_MAIN_PAGE_GALLERY": "相册",
"MANAGE_MAIN_PAGE_REPOSITORY": "仓库",
"MANAGE_CONSTANT_BASE_RULE": "请输入",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A": "请输入每页显示数量",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B": "每页显示数量必须为数字",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C": "每页显示数量必须在20-1000之间",
"MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A": "请输入别名, 该配置的唯一标识",
"MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B": "别名只能包含中文、英文、数字、下划线和中划线",
"MANAGE_CONSTANT_ALIAS_TOOLTIP": "别名只能包含中文、英文、数字、下划线和中划线",
"MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP": "每页显示数量必须在20-1000之间",
"MANAGE_CONSTANT_PAGING_TOOLTIP": "关闭分页时,目录列表将使用数据库缓存以优化性能",
"MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP": "英文逗号分隔bucket1,bucket2,bucket3和起始目录顺序一一对应",
"MANAGE_CONSTANT_BASE_DIR_TOOLTIP": "英文逗号分隔,如:/dir1,/dir2,/dir3, 和存储桶顺序一一对应",
"MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP": "开启时,将自动获取存储桶绑定的域名,关闭时可手动填写",
"MANAGE_CONSTANT_SMMS_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_SMMS_TOKEN_DESC": "Token-必需",
"MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER": "请填写Token",
"MANAGE_CONSTANT_SMMS_PAGING_DESC": "是否开启分页",
"MANAGE_CONSTANT_SMMS_EXPLAIN": "大陆地区请访问备用域名https://smms.app, 请勿大批量上传图片否则API接口会被限制",
"MANAGE_CONSTANT_SMMS_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_QINIU_NAME": "七牛云",
"MANAGE_CONSTANT_QINIU_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC": "accessKey-必需",
"MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER": "请填写accessKey",
"MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC": "secretKey-必需",
"MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER": "请填写secretKey",
"MANAGE_CONSTANT_QINIU_BUCKET_DESC": "空间名-可选",
"MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER": "英文逗号分隔例如bucket1,bucket2",
"MANAGE_CONSTANT_QINIU_BASE_DIR_DESC": "起始目录-可选",
"MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER": "英文逗号分隔,例如:/dir1,/dir2",
"MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC": "是否自动获取绑定域名",
"MANAGE_CONSTANT_QINIU_PAGING_DESC": "是否开启分页",
"MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC": "每页显示数量",
"MANAGE_CONSTANT_QINIU_EXPLAIN": "空间名和起始目录配置时可通过英文逗号分隔设置,顺序必须一致,逗号间留空或缺失项使用默认值",
"MANAGE_CONSTANT_QINIU_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_GITHUB_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_GITHUB_TOKEN_DESC": "Token-必需",
"MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER": "请填写Token",
"MANAGE_CONSTANT_GITHUB_TOKEN_TIPS": "请提供具有完整repo权限的token否则部分功能可能无法使用",
"MANAGE_CONSTANT_GITHUB_USER_DESC": "用户名-必需",
"MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER": "请填写用户名",
"MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE": "用户名",
"MANAGE_CONSTANT_GITHUB_PROXY_DESC": "代理地址-可选",
"MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER": "例如http://127.0.0.1:1080",
"MANAGE_CONSTANT_GITHUB_PROXY_TIPS": "如果访问速度较慢,可以尝试配置代理",
"MANAGE_CONSTANT_GITHUB_PAGING_DESC": "是否开启分页",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC": "CDN加速域名-可选",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER": "支持使用{username}、{repo}、{branch}和{path}作为替换占位符,用于适配不同仓库和分支",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS": "例如: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A": "加速域名请以http://或https://开头",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B": "加速域名中的大括号必须成对出现",
"MANAGE_CONSTANT_GITHUB_EXPLAIN": "API调用有每小时上限此外不支持上传超过100M的文件",
"MANAGE_CONSTANT_GITHUB_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_ALIYUN_NAME": "阿里云",
"MANAGE_CONSTANT_ALIYUN_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC": "accessKeyId-必需",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC": "accessKeySecret-必需",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER": "请填写accessKeySecret",
"MANAGE_CONSTANT_ALIYUN_BUCKET_DESC": "存储桶名-可选",
"MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER": "英文逗号分隔例如bucket1,bucket2",
"MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC": "起始目录-可选",
"MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER": "英文逗号分隔,例如:/dir1,/dir2",
"MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC": "是否自动获取绑定域名",
"MANAGE_CONSTANT_ALIYUN_PAGING_DESC": "是否开启分页",
"MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC": "每页显示数量",
"MANAGE_CONSTANT_ALIYUN_EXPLAIN": "存储桶名和起始目录配置时可通过英文逗号分隔不同存储桶的设置,顺序必须一致,逗号间留空或缺失项使用默认值",
"MANAGE_CONSTANT_ALIYUN_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_TENCENT_NAME": "腾讯云",
"MANAGE_CONSTANT_TENCENT_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC": "secretId-必需",
"MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER": "请填写secretId",
"MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC": "secretKey-必需",
"MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER": "请填写secretKey",
"MANAGE_CONSTANT_TENCENT_APPID_DESC": "appId-必需",
"MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER": "请填写appId",
"MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP": "例如1250000000",
"MANAGE_CONSTANT_TENCENT_BUCKET_DESC": "存储桶名-可选(注意包含AppId)",
"MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER": "英文逗号分隔例如bucket1-1250000000,bucket2-1250000000",
"MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC": "起始目录-可选",
"MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER": "英文逗号分隔,例如:/dir1,/dir2",
"MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC": "是否自动获取绑定域名",
"MANAGE_CONSTANT_TENCENT_PAGING_DESC": "是否开启分页",
"MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC": "每页显示数量",
"MANAGE_CONSTANT_TENCENT_EXPLAIN": "存储桶名和起始目录配置时可通过英文逗号分隔不同存储桶的设置,顺序必须一致,逗号间留空或缺失项使用默认值",
"MANAGE_CONSTANT_TENCENT_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_UPYUN_NAME": "又拍云",
"MANAGE_CONSTANT_UPYUN_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_UPYUN_BUCKET_DESC": "服务名-必需",
"MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER": "对应其它对象存储的存储桶名",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC": "操作员名-必需",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER": "推荐使用具有读取、写入和删除完整权限的操作员",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE": "操作员",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC": "操作员密码-必需",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER": "请填写密码",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE": "操作员密码",
"MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC": "起始目录-可选",
"MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER": "读取文件时的初始目录",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC": "加速域名-必需",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER": "请以http://或https://开头",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A": "加速域名不能为空",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B": "自定义域名请以http://或https://开头",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC": "防盗链密钥-可选",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER": "请填写防盗链密钥",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP": "如果不填写,默认不启用防盗链",
"MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC": "防盗链过期时间(秒)-可选",
"MANAGE_CONSTANT_UPYUN_PAGING": "是否开启分页",
"MANAGE_CONSTANT_UPYUN_ITEMS_PAGE": "每页显示数量",
"MANAGE_CONSTANT_UPYUN_EXPLAIN": "又拍云图床务必填写加速域名,否则无法正常使用",
"MANAGE_CONSTANT_UPYUN_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_IMGUR_NAME": "Imgur",
"MANAGE_CONSTANT_IMGUR_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_IMGUR_USERNAME_DESC": "imgur用户名-必需",
"MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER": "请填写imgur用户名",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC": "access token-必需",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER": "请填写access token",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP": "不是clientID,请参考配置教程",
"MANAGE_CONSTANT_IMGUR_PROXY_DESC": "代理-可选",
"MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER": "例如http://127.0.0.1:1080",
"MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP": "大陆地区请使用代理,否则无法正常使用",
"MANAGE_CONSTANT_IMGUR_EXPLAIN": "大陆地区请使用代理API调用存在限制请注意使用频率",
"MANAGE_CONSTANT_IMGUR_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_S3_NAME": "S3兼容云",
"MANAGE_CONSTANT_S3_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC": "accessKeyId-必需",
"MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER": "请填写accessKeyId",
"MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC": "secretAccessKey-必需",
"MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER": "请填写secretAccessKey",
"MANAGE_CONSTANT_S3_ENDPOINT_DESC": "endpoint-可选",
"MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER": "例如s3.us-east-1.amazonaws.com",
"MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP": "如果不填写,默认访问 AWS S3请提供根API endpoint",
"MANAGE_CONSTANT_S3_SSLENABLED_DESC": "使用HTTPS连接",
"MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP": "如果您的平台不支持,请关闭该选项",
"MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC": "启用 S3 Path style",
"MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP": "例如使用 minio 时需要启用",
"MANAGE_CONSTANT_S3_PROXY_DESC": "代理-可选",
"MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER": "例如http://127.0.0.1:1080",
"MANAGE_CONSTANT_S3_PROXY_TOOLTIP": "如果部分平台大陆地区无法访问,请使用代理",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC": "上传文件的权限",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE": "私有",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ": "公共读",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE": "公共读写",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ": "授权读",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ": "桶所有者读",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL": "桶所有者完全控制",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ": "AWS执行读",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP": "上传文件的权限可选值private、public-read、public-read-write、authenticated-read、bucket-owner-read、bucket-owner-full-control、aws-exec-read",
"MANAGE_CONSTANT_S3_BUCKET_DESC": "存储桶名-可选",
"MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER": "英文逗号分隔例如bucket1,bucket2",
"MANAGE_CONSTANT_S3_BASE_DIR_DESC": "起始目录-可选",
"MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER": "英文逗号分隔,例如:/dir1,/dir2",
"MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC": "是否使用Doge Cloud",
"MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP": "开启后将使用Doge Cloud的API",
"MANAGE_CONSTANT_S3_PAGING_DESC": "是否开启分页",
"MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC": "每页显示数量",
"MANAGE_CONSTANT_S3_EXPLAIN": "存储桶名和起始目录配置时可通过英文逗号分隔不同存储桶的设置,顺序必须一致,逗号间留空或缺失项使用默认值",
"MANAGE_CONSTANT_S3_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_WEBDAV_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_WEBDAV_HOST_DESC": "地址-必需",
"MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER": "例如https://example.com/dav",
"MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP": "请填写完整的WebDAV地址",
"MANAGE_CONSTANT_WEBDAV_USERNAME_DESC": "用户名-必需",
"MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER": "请填写用户名",
"MANAGE_CONSTANT_WEBDAV_BUCKET_DESC": "特殊配置",
"MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER": "例如bucket1",
"MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP": "此处不可修改,仅为软件兼容性考虑",
"MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC": "密码-必需",
"MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER": "请填写密码",
"MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC": "起始目录-可选",
"MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER": "例如:/dir1",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC": "自定义域名-可选",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER": "例如https://example.com",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP": "如果您的WebDAV服务器支持自定义域名请填写",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE": "自定义域名请以http://或https://开头",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH": "网址拼接用起始路径",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER": "例如test/ttc",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP": "用于拼接网址",
"MANAGE_CONSTANT_WEBDAV_PROXY_DESC": "代理-可选",
"MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER": "例如http://127.0.0.1:1080",
"MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP": "如果需要特殊网络环境才能访问,请使用代理",
"MANAGE_CONSTANT_WEBDAV_SSL_DESC": "使用HTTPS连接",
"MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP": "根据WebDAV服务器的配置如果您的服务器不支持HTTPS请关闭该选项",
"MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC": "认证类型",
"MANAGE_CONSTANT_WEBDAV_EXPLAIN": "WebDAV配置",
"MANAGE_CONSTANT_WEBDAV_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_LOCAL_NAME": "本地存储",
"MANAGE_CONSTANT_LOCAL_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC": "起始目录-必需",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER": "请填写起始目录",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC": "自定义域名-可选",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER": "例如https://example.com",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP": "如果您的本地存储支持自定义域名,请填写",
"MANAGE_CONSTANT_LOCAL_WEB_PATH": "网址拼接用起始路径",
"MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER": "例如test/ttc",
"MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP": "用于拼接网址",
"MANAGE_CONSTANT_LOCAL_EXPLAIN": "本地存储配置",
"MANAGE_CONSTANT_LOCAL_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE": "起始目录不能为空",
"MANAGE_CONSTANT_LOCAL_BUCKET_DESC": "特殊配置",
"MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER": "例如bucket1",
"MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP": "此处不可修改,仅为软件兼容性考虑",
"MANAGE_CONSTANT_SFTP_NAME": "SFTP",
"MANAGE_CONSTANT_SFTP_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER": "该配置的唯一标识",
"MANAGE_CONSTANT_SFTP_HOST_DESC": "SSH地址-必需",
"MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER": "例如233.233.233.233",
"MANAGE_CONSTANT_SFTP_PORT_DESC": "SSH端口-必需",
"MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER": "例如22",
"MANAGE_CONSTANT_SFTP_USERNAME_DESC": "用户名",
"MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER": "请填写用户名",
"MANAGE_CONSTANT_SFTP_PASSWORD_DESC": "密码",
"MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER": "请填写密码",
"MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC": "私钥地址",
"MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER": "请填写私钥地址",
"MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC": "私钥密码",
"MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER": "请填写私钥密码",
"MANAGE_CONSTANT_SFTP_BASE_DIR_DESC": "起始目录-可选",
"MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER": "例如:/dir1",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC": "自定义域名-可选",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER": "例如https://example.com",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP": "如果您的对应路径支持域名访问,请填写",
"MANAGE_CONSTANT_SFTP_WEB_PATH": "网址拼接用起始路径",
"MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER": "例如test/ttc",
"MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP": "用于拼接网址",
"MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC": "文件权限",
"MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER": "例如0644",
"MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC": "目录权限",
"MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER": "例如0755",
"MANAGE_CONSTANT_SFTP_EXPLAIN": "SFTP配置",
"MANAGE_CONSTANT_SFTP_REFER_TEXT": "配置教程请参考: ",
"MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE": "起始目录不能为空",
"MANAGE_CONSTANT_SFTP_BUCKET_DESC": "特殊配置",
"MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER": "例如bucket1",
"MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP": "此处不可修改,仅为软件兼容性考虑",
"MANAGE_LOGIN_PAGE_PANE_NAME": "已保存配置",
"MANAGE_LOGIN_PAGE_PANE_KEY_NAME": "配置项",
"MANAGE_LOGIN_PAGE_PANE_KEY_VALUE": "值",
"MANAGE_LOGIN_PAGE_PANE_ENTER": "进入",
"MANAGE_LOGIN_PAGE_PANE_DELETE": "删除",
"MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER": "请选择",
"MANAGE_LOGIN_PAGE_PANE_IMPORT": "导入",
"MANAGE_LOGIN_PAGE_PANE_SAVE": "保存",
"MANAGE_LOGIN_PAGE_PANE_RESET": "重置",
"MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE": "已有配置,单击可复制对应单元格数据",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A": "请填写",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE": "别名只能包含中文、英文、数字、下划线和中划线",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE": "每页数量必须在20-1000之间",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE": "自定义域名请以http://或https://开头",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME": "通知",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE": "已覆盖别名",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B": "已保存别名",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C": "已删除别名",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D": "删除别名为",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E": "的配置失败",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS": "已复制",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE": "确定要删除配置么?",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP": "提示",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM": "确定",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL": "取消",
"MANAGE_BUCKET_PAGE_LOADING_TEXT": "加载文件中...",
"MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER": "请选择自定义域名",
"MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER": "请输入自定义域名",
"MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP": "文件上传(支持多选)",
"MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP": "从URL上传",
"MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP": "创建文件夹",
"MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP": "下载页面",
"MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP": "批量重命名",
"MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP": "批量复制URL",
"MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP": "复制文件信息",
"MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP": "强制刷新文件列表",
"MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER": "搜索文件",
"MANAGE_BUCKET_PAGE_ROOT_FOLDER": "根目录",
"MANAGE_BUCKET_PAGE_FILE_NUMBER": "文件数: ",
"MANAGE_BUCKET_PAGE_FILE_SIZE": "总大小: ",
"MANAGE_BUCKET_PAGE_SELECT_ALL": "全选",
"MANAGE_BUCKET_PAGE_SELECT_NONE": "取消",
"MANAGE_BUCKET_PAGE_SELECT_INVERT": "反选",
"MANAGE_BUCKET_DOWNLOAD_BTN": "下载",
"MANAGE_BUCKET_DELETE_BTN": "删除",
"MANAGE_BUCKET_SORT_TITLE": "排序",
"MANAGE_BUCKET_SORT_NAME": "文件名",
"MANAGE_BUCKET_SORT_SIZE": "大小",
"MANAGE_BUCKET_SORT_EXT": "类型",
"MANAGE_BUCKET_SORT_TIME": "时间",
"MANAGE_BUCKET_SORT_CHECK": "选中状态",
"MANAGE_BUCKET_SORT_INIT": "初始化",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE": "请输入URL支持多个URL以换行分隔",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM": "确定",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL": "取消",
"MANAGE_BUCKET_URL_FORMAT_MARKDOWN": "Markdown",
"MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK": "Markdown-link",
"MANAGE_BUCKET_URL_FORMAT_URL": "Url",
"MANAGE_BUCKET_URL_FORMAT_HTML": "Html",
"MANAGE_BUCKET_URL_FORMAT_BBCODE": "BBCode",
"MANAGE_BUCKET_URL_FORMAT_CUSTOM": "自定义",
"MANAGE_BUCKET_URL_FORMAT_PRESIGN": "预签名链接",
"MANAGE_BUCKET_FILE_INFO_TITLE": "文件信息",
"MANAGE_BUCKET_FILE_INFO_COPY_TIPS": "复制JSON格式信息",
"MANAGE_BUCKET_FILE_LIST_LOADING": "加载中,点击取消",
"MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE": "准备下载中,点击取消",
"MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE": "保持目录结构",
"MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE": "不保持目录结构",
"MANAGE_BUCKET_UPLOAD_AREA_TITLE": "拖放上传支持递归上传文件夹",
"MANAGE_BUCKET_UPLOAD_AREA_TEXT": "或:点击选择文件(不支持文件夹)",
"MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING": "读取文件中",
"MANAGE_BUCKET_UPLOAD_AREA_BTN": "上传",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR": "清空",
"MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING": "上传中",
"MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK": "复制上传任务信息",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK": "清空已完成任务",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK": "清空所有任务",
"MANAGE_BUCKET_UPLOAD_AREA_SUCCESS": "成功",
"MANAGE_BUCKET_UPLOAD_AREA_FAILED": "失败",
"MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE": "下载页面",
"MANAGE_BUCKET_DOWNLOADING": "下载中",
"MANAGE_BUCKET_DOWNLOAD_COPY_TASK": "复制下载任务信息",
"MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK": "清空已完成任务",
"MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK": "清空所有任务",
"MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER": "打开下载目录",
"MANAGE_BUCKET_DOWNLOAD_SUCCESS": "成功",
"MANAGE_BUCKET_DOWNLOAD_FAILED": "失败",
"MANAGE_BUCKET_MARKDOWN_PREVIEW": "预览",
"MANAGE_BUCKET_PLAY": "播放",
"MANAGE_BUCKET_RENAME_FILE": "文件重命名",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A": "进行替换时匹配的字符串或js正则表达式",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS": "正则表达式请直接输入,不需要加上/",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER": "例如:^\\d{4}-\\d{2}-\\d{2} ",
"MANAGE_BUCKET_RENAME_FILE_INPUT_B": "需要替换的字符串,可使用自定义重命名规则中的占位符",
"MANAGE_BUCKET_RENAME_FILE_TABLE_IID": "自增数字",
"MANAGE_BUCKET_RENAME_FILE_EXT": "是否匹配扩展名进行替换",
"MANAGE_BUCKET_RENAME_FILE_EXT_TIPS": "如果希望修改扩展名,请勾选此项",
"MANAGE_BUCKET_RENAME_FILE_EXT_YES": "是",
"MANAGE_BUCKET_RENAME_FILE_EXT_NO": "否",
"MANAGE_BUCKET_RENAME_FILE_CANCEL": "取消",
"MANAGE_BUCKET_RENAME_FILE_CONFIRM": "确定",
"MANAGE_BUCKET_COPY_SUCCESS": "复制成功",
"MANAGE_BUCKET_START_LOADING_MESSAGE": "开始获取文件",
"MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL": "获取文件内容失败",
"MANAGE_BUCKET_LAST_PAGE_TITLE": "提示",
"MANAGE_BUCKET_LAST_PAGE_MSG": "已经是最后一页了",
"MANAGE_BUCKET_GET_LIST_FAIL_TITLE": "提示",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG": "获取文件列表失败",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG2": "正在后台获取文件列表,请不要切换页面",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG3": "正在加载文件列表,请稍后再试",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE": "确定要下载该文件夹吗?",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP": "提示",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM": "确定",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL": "取消",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS": "获取下载列表成功",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL": "获取失败",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL": "已取消",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE": "请输入文件夹名称",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP": "新建文件夹",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM": "确定",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL": "取消",
"MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG": "文件夹名称只能包含中文、英文、数字、下划线和斜杠",
"MANAGE_BUCKET_CREATE_FOLDER_SUCCESS": "创建成功, 请刷新",
"MANAGE_BUCKET_CREATE_FOLDER_FAIL": "创建失败",
"MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ": "请输入有效的URL",
"MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE": "提示",
"MANAGE_BUCKET_UPLOAD_URL_NOT_MSG": "开始后台下载,成功后自动上传",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG": "请输入匹配字符串",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2": "没有匹配到文件",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3": "没有需要重命名的文件",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A": "检测到有",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B": "个文件重复,是否继续",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C": "提示",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM": "确定",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL": "取消",
"MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A": "重命名成功",
"MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B": "失败",
"MANAGE_BUCKET_BATCH_RENAME_CANCEL": "已取消",
"MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG": "请先选择文件",
"MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A": "已复制",
"MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B": "个文件信息",
"MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG": "请先选择文件",
"MANAGE_BUCKET_BATCH_COPY_URL_MSG_A": "已复制",
"MANAGE_BUCKET_BATCH_COPY_URL_MSG_B": "个链接",
"MANAGE_BUCKET_CANCEL_LOADING_TITLE": "是否停止获取文件列表?",
"MANAGE_BUCKET_CANCEL_LOADING_MSG": "提示",
"MANAGE_BUCKET_CANCEL_LOADING_CONFIRM": "确定",
"MANAGE_BUCKET_CANCEL_LOADING_CANCEL": "取消",
"MANAGE_BUCKET_CANCEL_LOADING_SUCCESS": "文件列表获取已停止",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE": "是否停止下载文件获取?",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG": "提示",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM": "确定",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL": "取消",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS": "下载文件获取已停止",
"MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE": "提示",
"MANAGE_BUCKET_GET_FILE_BS_NOT_MSG": "获取文件列表成功",
"MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2": "部分文件获取失败",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A": "将永久删除",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B": "个文件,是否继续?",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG": "提示",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM": "确定",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL": "取消",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE": "提示",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG": "删除失败",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2": "删除成功",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3": "失败",
"MANAGE_BUCKET_BATCH_DELETE_CANCEL": "已取消删除",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE": "将永久删除",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER": "文件夹",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A": "和该目录下的所有文件",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE": "文件",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C": "是否继续",
"MANAGE_BUCKET_DELETE_CONFIRM_MSG": "提示",
"MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM": "确定",
"MANAGE_BUCKET_DELETE_CONFIRM_CANCEL": "取消",
"MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE": "提示",
"MANAGE_BUCKET_DELETE_ERROR_MSG_MSG": "删除文件夹可能需要一段时间,请耐心等待",
"MANAGE_BUCKET_DELETE_SUCCESS": "删除成功",
"MANAGE_BUCKET_DELETE_FAIL": "删除失败",
"MANAGE_BUCKET_DELETE_CANCEL": "已取消删除",
"MANAGE_BUCKET_RENAME_INFO_MSG": "新文件名与原文件名相同,无需重命名",
"MANAGE_BUCKET_RENAME_SUCCESS": "重命名成功",
"MANAGE_BUCKET_RENAME_ERROR_MSG": "重命名失败",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME": "完成时间",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS": "状态",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS": "成功",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL": "失败",
"MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH": "上传路径",
"MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME": "完成时间",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS": "状态",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS": "成功",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL": "失败",
"MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS": "进度",
"MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS": "进度",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE": "大小",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM": "文件数",
"MANAGE_BUCKET_FILE_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_FILE_COLUMN_COPY_URL": "复制链接",
"MANAGE_BUCKET_FILE_COLUMN_INFO": "文件信息",
"MANAGE_BUCKET_FILE_COLUMN_FILESIZE": "大小",
"MANAGE_BUCKET_FILE_COLUMN_TIME": "修改时间",
"MANAGE_NEW_BUCKET_TCYUN_NAME": "腾讯云",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC": "Bucket名",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER": "请输入Bucket名",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A": "Bucket名不能为空",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B": "Bucket名称长度不能超过23个字符",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C": "Bucket名称只能包含小写字母、数字和中划线且不能以中划线开头和结尾",
"MANAGE_NEW_BUCKET_TCYUN_REGION": "区域",
"MANAGE_NEW_BUCKET_TCYUN_ACL_DESC": "访问权限",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW": "公共读写",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R": "公共读",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE": "私有",
"MANAGE_NEW_BUCKET_ALIYUN_NAME": "阿里云",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC": "Bucket名",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER": "请输入Bucket名",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A": "Bucket名不能为空",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B": "Bucket名称长度不能超过63个字符",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C": "Bucket名称只能包含小写字母、数字和中划线且不能以中划线开头和结尾",
"MANAGE_NEW_BUCKET_ALIYUN_REGION": "区域",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC": "访问权限",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW": "公共读写",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R": "公共读",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE": "私有",
"MANAGE_NEW_BUCKET_QINIU_NAME": "七牛云",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC": "Bucket名",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER": "请输入Bucket名",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A": "Bucket名不能为空",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B": "Bucket名称长度不能超过63个字符",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C": "Bucket名称只能包含小写字母、数字和中划线且不能以中划线开头和结尾",
"MANAGE_NEW_BUCKET_QINIU_REGION": "区域",
"MANAGE_NEW_BUCKET_QINIU_ACL_DESC": "公开访问",
"MANAGE_NEW_BUCKET_S3PLIST_NAME": "S3兼容云",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC": "Bucket名",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER": "请输入Bucket名",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A": "Bucket名不能为空",
"MANAGE_NEW_BUCKET_S3PLIST_REGION": "区域",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC": "访问权限",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW": "公共读写",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R": "公共读",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE": "私有",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ": "授权读",
"PLUGIN_UPDATE_SUCCEED": "插件更新成功",
"TIPS_NOTICE": "注意"
}

View File

@@ -0,0 +1,876 @@
{
"OPEN_MAIN_WINDOW": "打開主視窗",
"OPERATION_SUCCEED": "操作成功",
"QUICK_UPLOAD": "快速上傳",
"PICBED_QRCODE": "圖床配置 QRCODE",
"CONFIG_THING": "設定${c}",
"TOOLBOX_TITLE": "排查 PicList 執行時問題",
"TOOLBOX_SUB_TITLE": "立即掃描以下項目,修復使用問題",
"TOOLBOX_CHECK_CONFIG_FILE_BROKEN": "檢查配置文件是否損壞",
"TOOLBOX_CHECK_GALLERY_FILE_BROKEN": "檢查相冊文件是否損壞",
"TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD": "檢查剪貼板圖片上傳是否存在問題",
"TOOLBOX_CHECK_PROBLEM_WITH_PROXY": "檢查代理設置是否正常",
"TOOLBOX_FIX_DONE_NEED_RELOAD": "修復完成,需要重啓生效,是否重啓",
"TOOLBOX_CANT_AUTO_FIX": "無法自動修復,請自行修復以下問題",
"TOOLBOX_START_SCAN": "開始掃描",
"TOOLBOX_RE_SCAN": "重新掃描",
"TOOLBOX_START_FIX": "開始修復",
"TOOLBOX_SUCCESS_TIPS": "恭喜你,沒有檢查出問題",
"MANUAL_PAGE_OPEN_TIP": "請選擇打開方式",
"MANUAL_PAGE_OPEN_TIP_TITLE": "Tips",
"MANUAL_PAGE_OPEN_BY_BROWSER": "瀏覽器",
"MANUAL_PAGE_OPEN_BY_BUILD_IN": "內置窗口",
"MANUAL_PAGE_OPEN_SETTING_TIP": "選擇打開手冊方式",
"UPLOAD_AREA": "上傳",
"UPLOAD_VIEW_HINT": "點擊打開圖床設定",
"MANAGE_PAGE": "管理",
"GALLERY": "相簿",
"REFRESH": "刷新",
"MANUAL": "手冊",
"PICBEDS_SETTINGS": "圖床",
"PICLIST_SETTINGS": "設定",
"PLUGIN_SETTINGS": "插件",
"CHOOSE_PICBED": "選擇圖床",
"COPY_PICBED_CONFIG": "複製圖床設定",
"COPY_PICBED_CONFIG_SUCCEED": "複製圖床設定成功",
"INPUT": "輸入框",
"CANCEL": "取消",
"CONFIRM": "確定",
"RESET_PICBED_CONFIG": "重置",
"CHOOSE_SHOWED_PICBED": "請選擇顯示的圖床",
"CHOOSE_PASTE_FORMAT": "請選擇貼上的格式",
"COPY": "複製",
"DELETE": "刪除",
"SELECT_ALL": "全選",
"CHANGE_IMAGE_URL": "修改圖片URL",
"CHANGE_IMAGE_URL_SUCCEED": "修改圖片URL成功",
"COPY_LINK_SUCCEED": "複製連結成功",
"BATCH_COPY_LINK_SUCCEED": "批量複製連結成功",
"FILE_RENAME": "檔案改名",
"OPEN_FILE_PATH": "打開檔案路徑",
"GALLERY_SYNC_DELETE": "刪除雲端",
"GALLERY_SYNC_DELETE_NOTICE_TITLE": "通知",
"GALLERY_SYNC_DELETE_NOTICE_SUCCEED": "雲端刪除成功",
"GALLERY_SYNC_DELETE_NOTICE_FAILED": "雲端刪除失敗",
"GALLERY_CHANGE_URL": "修改",
"GALLERY_SEARCH_FILENAME": "搜尋文件名",
"GALLERY_SEARCH_URL": "搜尋URL",
"GALLERY_MATCHED": " 匹配到: ",
"UPLOAD_PAGE_COPY_UPLOAD_API": "複製上傳API",
"UPLOAD_PAGE_IMAGE_PROCESS_NAME": "圖片處理",
"UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE": "圖片處理設置",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST": "跳過處理的文件擴展名列表",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS": "請填寫需要跳過處理的文件擴展名列表, 以英文逗號分隔, 如: jpg,png,gif",
"UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM": "是否添加水印",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE": "水印類型",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT": "文字",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE": "圖片",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM": "是否全屏水印",
"UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE": "水印角度",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT": "水印文字",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH": "水印字體路徑(第一次需下載字體文件)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO": "水印占原圖比例",
"UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR": "水印顏色,請從取色器中選擇",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPATH": "水印圖片路徑(留空使用預設圖片)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION": "水印位置",
"UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF": "是否移除EXIF信息",
"UPLOAD_PAGE_IMAGE_PROCESS_QUALITY": "壓縮質量(1-100)",
"UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT": "是否轉換格式",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT": "轉換目的格式",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC": "指定格式, 请输入JSON格式配置如{\"jpg\":\"png\"}",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP": "是否進行垂直翻轉",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP": "是否進行水平翻轉",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE": "是否按固定尺寸調整圖片",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH": "調整尺寸寬度(設為0則按高度等比縮放)",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT": "調整尺寸高度(設為0則按寬度等比縮放)",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT": "當圖片高度小於設定高度時跳過縮放",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH": "當圖片寬度小於設定寬度時跳過縮放",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT": "是否按比例調整尺寸,優先級更高",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT": "調整尺寸比例輸入50表示50%",
"UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE": "是否旋轉",
"UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE": "旋轉角度",
"UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM": "儲存",
"UPLOAD_PAGE_IMAGE_PROCESS_CANCEL": "取消",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP": "上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM": "下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT": "左",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT": "右",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT": "左上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT": "右上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT": "左下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT": "右下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER": "中",
"UPLOAD_SHORT_URL": "短連結",
"UPLOAD_NORMAL_URL": "长連結",
"SETTINGS": "設定",
"SETTINGS_OPEN_CONFIG_FILE": "打開設定檔案",
"SETTINGS_MIGRATE_FROM_PICGO": "從PicGo導入設定",
"SETTINGS_MIGRATE_FROM_PICGO_TITLE": "通知",
"SETTINGS_MIGRATE_FROM_PICGO_CONTENT": "即將導入PicGo的設定文件和相冊, 這將會覆蓋當前的設定, 是否繼續?",
"SETTINGS_MIGRATE_FROM_PICGO_SUCCESS": "導入成功, 請重啟應用",
"SETTINGS_MIGRATE_FROM_PICGO_FAILED": "導入失敗",
"SETTINGS_START_MODE": "啟動模式",
"SETTINGS_START_MODE_MINI": "mini視窗",
"SETTINGS_START_MODE_MAIN": "主視窗",
"SETTINGS_START_MODE_QUIET": "靜默啟動",
"SETTINGS_START_MODE_NO_TRAY": "隐藏托盘",
"SETTINGS_CLICK_TO_OPEN": "點擊打開",
"SETTINGS_SET_LOG_FILE": "設定記錄檔案",
"SETTINGS_CLICK_TO_SET": "點擊設定",
"SETTINGS_CLICK_TO_CHECK": "點擊檢查",
"SETTINGS_SET_SHORTCUT": "設定快捷鍵",
"SETTINGS_CUSTOM_LINK_FORMAT": "自訂連結格式",
"SETTINGS_SET_PROXY_AND_MIRROR": "設定PROXY和鏡像地址",
"SETTINGS_SET_SERVER": "設定Server",
"SETTINGS_CHECK_UPDATE": "檢查更新",
"SETTINGS_OPEN_UPDATE_HELPER": "打開更新助手",
"SETTINGS_OPEN": "開",
"SETTINGS_CLOSE": "關",
"SETTINGS_CLOSE_MINI_WINDOW_SYNC": "開主窗口同步關閉mini窗口",
"SETTINGS_CLOSE_MAIN_WINDOW_SYNC": "關mini窗口同步關閉主窗口",
"SETTINGS_LAUNCH_ON_BOOT": "開機時啟動",
"SETTINGS_RENAME_BEFORE_UPLOAD": "手動重新命名",
"SETTINGS_TIMESTAMP_RENAME": "以時間戳命名",
"SETTINGS_ADVANCED_RENAME": "高級命名",
"SETTINGS_ADVANCED_RENAME_ENABLE": "啟用高級命名",
"SETTINGS_ADVANCED_RENAME_FORMAT": "高級命名格式",
"SETTINGS_ENABLE_SECOND_PICBED": "啟用第二圖床同步上傳",
"SETTINGS_SET_SECOND_PICBED": "設定第二圖床",
"SETTINGS_OPEN_UPLOAD_TIPS": "開啟上傳提示",
"SETTINGS_OPEN_UPLOAD_RESULT_TIPS": "開啟上傳結果提示",
"SETTINGS_MINI_WINDOW_ON_TOP": "Mini視窗置頂",
"SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD": "上傳後自動複製URL",
"SETTINGS_TIPS_PLACEHOLDER_URL": "用佔位符 $url 來表示URL的位置",
"SETTINGS_TIPS_PLACEHOLDER_FILENAME": "用佔位符 $fileName 來表示檔案名稱的位置",
"SETTINGS_TIPS_PLACEHOLDER_EXTNAME": "用佔位符 $extName 來表示檔案格式的位置",
"SETTINGS_TIPS_SUCH_AS": "如",
"SETTINGS_UPLOAD_PROXY": "上傳PROXY",
"SETTINGS_PLUGIN_INSTALL_PROXY": "插件安裝PROXY",
"SETTINGS_PLUGIN_INSTALL_MIRROR": "插件安裝鏡像",
"SETTINGS_CURRENT_VERSION": "當前版本",
"SETTINGS_NEWEST_VERSION": "最新版本",
"SETTINGS_GETING": "正在取得中",
"SETTINGS_TIPS_HAS_NEW_VERSION": "PicList更新啦請點擊確定重启應用",
"SETTINGS_LOG_FILE_PATH": "記錄檔案路徑",
"SETTINGS_CONFIG_FILE_PATH": "設定檔案路徑",
"SETTINGS_LOG_FILE": "記錄檔案",
"SETTINGS_GUI_LOG_FILE": "GUI記錄檔案",
"SETTINGS_MANAGE_LOG_FILE": "管理記錄檔案",
"SETTINGS_LOG_LEVEL": "記錄等级",
"SETTINGS_LOG_FILE_SIZE": "記錄檔案大小",
"SETTINGS_SET_PICGO_SERVER": "設定PicGo-Server",
"SETTINGS_TIPS_SERVER_NOTICE": "如果你不知道Server的作用請閱讀文檔或者不用修改設定。",
"SETTINGS_ENABLE_SERVER": "是否開啟Server",
"SETTINGS_SET_SERVER_HOST": "設定監聽地址",
"SETTINGS_SET_SERVER_PORT": "設定監聽端口",
"SETTINGS_SET_SERVER_KEY": "設定鑒權密鑰",
"SETTINGS_SET_WEB_SERVER": "設定Web服務",
"SETTINGS_TIPS_WEB_SERVER_NOTICE": "如果你不知道Web服務的作用請閱讀文檔或者不用修改設定。",
"SETTINGS_SET_ENABLE_WEB_SERVER": "是否開啟Web服務",
"SETTINGS_SET_WEB_SERVER_HOST": "設定Web服務地",
"SETTINGS_SET_WEB_SERVER_PORT": "設定Web服務端口",
"SETTINGS_SET_WEB_SERVER_PATH": "設定Web服務路徑",
"SETTINGS_TIP_PLACEHOLDER_WEB_HOST": "推薦預設地址:127.0.0.1",
"SETTINGS_TIP_PLACEHOLDER_WEB_PORT": "推薦預設端口:37777",
"SETTINGS_TIP_PLACEHOLDER_HOST": "推薦預設地址:127.0.0.1",
"SETTINGS_TIP_PLACEHOLDER_PORT": "推薦預設端口:36677",
"SETTINGS_TIP_PLACEHOLDER_KEY": "用於接口鑒權, 通過url參數添加'?key=xxx'",
"SETTINGS_SET_SERVER_AES_KEY": "設定AES加密密鑰",
"SETTINGS_LOG_LEVEL_ALL": "全部-All",
"SETTINGS_LOG_LEVEL_SUCCESS": "成功-Success",
"SETTINGS_LOG_LEVEL_ERROR": "錯誤-Error",
"SETTINGS_LOG_LEVEL_INFO": "普通-Info",
"SETTINGS_LOG_LEVEL_WARN": "提醒-Warn",
"SETTINGS_LOG_LEVEL_NONE": "不記錄-None",
"SETTINGS_RESULT": "設定結果",
"SETTINGS_DEFAULT_PICBED": "設定預設圖床",
"SETTINGS_SET_DEFAULT_PICBED": "設為預設圖床",
"SETTINGS_NOT_CONFIG_OPTIONS": "暫無設定選項",
"SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD": "使用內建剪貼簿上傳",
"SETTINGS_CHOOSE_LANGUAGE": "選擇語言",
"BUILTIN_CLIPBOARD_TIPS": "使用內建剪貼簿函數而不是調用腳本取得剪貼簿內的照片",
"UPLOADER_CONFIG_NAME": "圖床配置名",
"UPLOADER_CONFIG_PLACEHOLDER": "請輸入配置名稱",
"SELECTED_SETTING_HINT": "已選中",
"SETTINGS_MAIN_WINDOW_SIZE": "默認主視窗大小",
"SETTINGS_MAIN_WINDOW_SIZE_WIDTH": "默認主視窗寬度",
"SETTINGS_MAIN_WINDOW_WIDTH_HINT": "默認: 1200",
"SETTINGS_MAIN_WINDOW_SIZE_HEIGHT": "默認主視窗高度",
"SETTINGS_MAIN_WINDOW_HEIGHT_HINT": "默認: 800",
"SETTINGS_RAW_PICGO_SIZE": "原PicGo大小",
"SETTINGS_CUSTOM_MINI_ICON_PATH": "自訂Mini視窗圖示路徑",
"SETTINGS_CUSTOM_MINI_ICON": "自訂Mini視窗圖示",
"SETTINGS_COMPRESS_AND_WATERMARK": "設置圖片浮水印和壓縮-格式轉換等參數",
"SETTINGS_SYNC_DELETE_CLOUD": "從相簿中刪除並同步從雲端刪除",
"SETTINGS_ISHIDEDOCK": "是否隱藏dock圖示",
"SETTINGS_ISHIDEDOCK_TIPS": "不支持同時隱藏dock和托盘",
"SETTINGS_ENCODE_OUTPUT_URL": "輸出(複製) URL 時進行轉義",
"SETTINGS_WATCH_CLIPBOARD": "軟體啟動時自動監聽剪貼簿上傳",
"SETTINGS_SHORT_URL": "使用短網址",
"SETTINGS_SHORT_URL_SERVER": "短網址服務",
"SETTINGS_SHORT_URL_C1N_TOKEN": "C1N Token",
"SETTINGS_SHORT_URL_YOURLS_DOMAIN": "YOURLS域名",
"SETTINGS_SHORT_URL_YOURLS_SIGNATURE": "YOURLS signature",
"SETTINGS_SHORT_URL_CF_WORKER_HOST": "Cloudflare Worker Host",
"SETTINGS_SHORT_SINK_DOMAIN": "sink域名",
"SETTINGS_SHORT_SINK_TOKEN": "sink token",
"SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD": "上傳後刪除本地檔案",
"SETTINGS_SYNC_CONFIG": "設置同步配置",
"SETTINGS_SYNC_CONFIG_TITLE": "同步設置",
"SETTINGS_SYNC_CONFIG_NOTE": "同步的檔案为配置檔案",
"SETTINGS_SYNC_CONFIG_SELECT_TYPE": "選擇同步方式",
"SETTINGS_SYNC_CONFIG_SELECT_FILE": "選擇同步檔案",
"SETTINGS_SYNC_CONFIG_SELECT_CONFIG": "僅配置檔案",
"SETTINGS_SYNC_CONFIG_SELECT_GALLERY": "僅相簿檔案",
"SETTINGS_SYNC_CONFIG_SELECT_BOTH": "配置檔案和相簿檔案",
"SETTINGS_SYNC_CONFIG_GITEA_HOST": "Gitea Host",
"SETTINGS_SYNC_CONFIG_GITHUB_USERNAME": "用戶名",
"SETTINGS_SYNC_CONFIG_GITEA_USERNAME": "用戶名",
"SETTINGS_SYNC_CONFIG_GITEE_USERNAME": "用戶名",
"SETTINGS_SYNC_CONFIG_GITHUB_REPO": "儲存庫(私有)",
"SETTINGS_SYNC_CONFIG_GITEA_REPO": "儲存庫",
"SETTINGS_SYNC_CONFIG_GITEE_REPO": "儲存庫路径",
"SETTINGS_SYNC_CONFIG_GITHUB_BRANCH": "GitHub 分支",
"SETTINGS_SYNC_CONFIG_GITEA_BRANCH": "Gitea 分支",
"SETTINGS_SYNC_CONFIG_GITEE_BRANCH": "Gitee 分支",
"SETTINGS_SYNC_CONFIG_GITHUB_TOKEN": "GitHub Token",
"SETTINGS_SYNC_CONFIG_GITEA_TOKEN": "Gitea Token",
"SETTINGS_SYNC_CONFIG_GITEE_TOKEN": "Gitee Token",
"SETTINGS_SYNC_CONFIG_PROXY": "代理",
"SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER": "請輸入 GitHub 用戶名",
"SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER": "請輸入 Gitea 用戶名",
"SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER": "請輸入 Gitee 用戶名",
"SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER": "請輸入 GitHub 儲存庫名稱",
"SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER": "請輸入 Gitea 儲存庫名稱",
"SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER": "請輸入 Gitee 儲存庫名稱",
"SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER": "請輸入 GitHub 分支名稱",
"SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER": "請輸入 Gitea 分支名稱",
"SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER": "請輸入 Gitee 分支名稱",
"SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER": "請輸入 GitHub Token",
"SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER": "請輸入 Gitea Token",
"SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER": "請輸入 Gitee Token",
"SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER": "請輸入代理地址",
"SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT": "WebDAV端點",
"SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER": "請輸入WebDAV端點URL",
"SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME": "用戶名",
"SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER": "請輸入WebDAV用戶名",
"SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD": "密碼",
"SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER": "請輸入WebDAV密碼",
"SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE": "認證類型",
"SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED": "啟用SSL/HTTPS",
"SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH": "保存路徑",
"SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER": "請選擇同步檔案的保存路徑",
"SETTINGS_UP_DOWN_DESC": "上傳和下載配置檔案",
"SETTINGS_SYNC_UPLOAD": "上傳",
"SETTINGS_SYNC_DOWNLOAD": "下載",
"SETTINGS_SYNC_UPLOAD_ALL": "上傳全部",
"SETTINGS_SYNC_DOWNLOAD_ALL": "下載全部",
"SETTINGS_SYNC_UPLOAD_SUCCESS": "上傳成功",
"SETTINGS_SYNC_UPLOAD_FAILED": "上傳失敗",
"SETTINGS_SYNC_DOWNLOAD_SUCCESS": "下載成功",
"SETTINGS_SYNC_DOWNLOAD_FAILED": "下載失敗",
"SETTINGS_SYNC_COMMON_CONFIG": "通用配置",
"SETTINGS_SYNC_MANAGE_CONFIG": "管理配置",
"SETTINGS_AUTO_IMPORT": "管理頁面自動導入配置",
"SETTINGS_AUTO_IMPORT_SELECT_PICBED": "選擇需要開啟自動導入的圖床",
"SETTINGS_TAB_SYSTEM": "系統設置",
"SETTINGS_TAB_SYNC_CONFIG": "同步與配置",
"SETTINGS_TAB_UPLOAD": "上傳設置",
"SETTINGS_TAB_ADVANCED": "高級設置",
"SETTINGS_TAB_UPDATE": "更新",
"SHORTCUT_NAME": "快捷鍵名稱",
"SHORTCUT_BIND": "快捷鍵綁定",
"SHORTCUT_STATUS": "狀態",
"SHORTCUT_ENABLED": "已啟用",
"SHORTCUT_DISABLED": "已禁用",
"SHORTCUT_SOURCE": "來源",
"SHORTCUT_HANDLE": "操作",
"SHORTCUT_ENABLE": "啟用",
"SHORTCUT_DISABLE": "禁用",
"SHORTCUT_EDIT": "編輯",
"SHORTCUT_CHANGE_UPLOAD": "修改上傳快捷鍵",
"WAIT_TO_UPLOAD": "等待上傳",
"ALREADY_UPLOAD": "已上傳",
"DRAG_FILE_TO_HERE": "將檔案拖曳到此處,或",
"CLICK_TO_UPLOAD": "點擊上傳",
"LINK_FORMAT": "連結格式",
"CLIPBOARD_PICTURE": "剪貼簿",
"TIPS_DRAG_VALID_PICTURE_OR_URL": "請拖入合法的圖片檔案或者圖片URL地址",
"TIPS_INPUT_URL": "請輸入URL",
"TIPS_HTTP_PREFIX": "http://或者https://開頭",
"TIPS_INPUT_VALID_URL": "請輸入合法的URL",
"PLUGIN_SEARCH_PLACEHOLDER": "搜尋npm上的PicGo插件或者點擊上方按鈕查看優秀插件列表",
"PLUGIN_INSTALL": "安裝",
"PLUGIN_INSTALLING": "安裝中",
"PLUGIN_INSTALLED": "已安裝",
"PLUGIN_DOING_SOMETHING": "進行中",
"PLUGIN_LIST": "插件列表",
"PLUGIN_IMPORT_LOCAL": "導入本地插件",
"PLUGIN_UPDATE_ALL": "更新全部插件",
"TIPS_REMOVE_LINK": "此操作將在相簿中移除該圖片,是否繼續?",
"TIPS_WILL_REMOVE_CHOOSED_IMAGES": "將在相簿中移除剛才選中的 ${m} 張圖片,是否繼續?",
"TIPS_MUST_CONTAINS_URL": "必須含有$url 或 $fileName 或 $extName",
"TIPS_NETWORK_ERROR": "網路錯誤,暫時無法取得",
"TIPS_NEED_RELOAD": "需要重新啟動生效",
"TIPS_PLEASE_CHOOSE_LOG_LEVEL": "請選擇記錄等級",
"TIPS_SET_SUCCEED": "設定成功",
"TIPS_RESET_SUCCEED": "重置成功",
"TIPS_PLUGIN_NOT_GUI_IMPLEMENT": "該插件未對GUI進行優化是否繼續安裝",
"MANAGE_SETTING_TITLE": "管理設定",
"MANAGE_SETTING_ISAUTOREFRESH_TITLE": "每次進入新目錄時,是否自動重新整理檔案列表",
"MANAGE_SETTING_ISAUTOREFRESH_TIPS": "僅對不分頁模式有效,預設會在載入後自動快取至資料庫以提升下次載入速度",
"MANAGE_SETTING_CLEAR_CACHE_TITLE": "清空檔案列表快取資料庫 已佔用:",
"MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE": "剩餘可用:",
"MANAGE_SETTING_CLEAR_CACHE_TIPS": "清空後下次進入新目錄時將會重新載入檔案列表",
"MANAGE_SETTING_CLEAR_CACHE_PROMPT": "確定要清空檔案列表快取資料庫嗎?",
"MANAGE_SETTING_CLEAR_CACHE_BUTTON": "清空",
"MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE": "顯示圖片的原始圖像而非預設的檔案格式圖示(需要存儲桶公開訪問權限)",
"MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE": "使用預簽名URL预览圖片",
"MANAGE_SETTING_ISSHOWLIST_TITLE": "檔案列表預設顯示方式",
"MANAGE_SETTING_ISSHOWLIST_ON": "列表",
"MANAGE_SETTING_ISSHOWLIST_OFF": "卡片",
"MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE": "自定義域名啟用強制 HTTPS",
"MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS": "開啟後,複製鏈結等操作將會自動為自定義域名添加 HTTPS 前綴",
"MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE": "保留上傳時的目錄結構",
"MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS": "停用後,所有文件將會展開到指定目錄下",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A": "下載",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B": "文件",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C": "時保留目錄結構",
"MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D": "目錄",
"MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS": "啟用後,下載時會保留原始目錄結構",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE": "最大同時下載檔案數量(1-9999)",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS": "由於後端實現方式不同,此設定在腾讯云上不生效",
"MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS": "請輸入最大同時下載檔案數量",
"MANAGE_SETTING_ISIGNORECASE_TITLE": "搜尋檔案時,是否忽略大小寫",
"MANAGE_SETTING_ISIGNORECASE_TIPS": "啟用後,搜尋時將會忽略大小寫",
"MANAGE_SETTING_TIMESTAMPRENAME_TITLE": "上傳檔案時間戳重新命名--(最高優先級)",
"MANAGE_SETTING_TIMESTAMPRENAME_TIPS": "啟用後,上傳檔案時將會使用時間戳重新命名",
"MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE": "上傳檔案隨機字符串重新命名--(中優先級)",
"MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS": "隨機字符串長度為20",
"MANAGE_SETTING_CUSTOMRENAME_TITLE": "上傳檔案自定義重新命名--(最低優先級)",
"MANAGE_SETTING_CUSTOMRENAME_TIPS": "啟用後,上傳檔案時將會使用自定義重新命名",
"MANAGE_SETTING_CUSTOM_PATTERN_TITLE": "自訂重新命名格式,占位符請參考下表,可自由組合",
"MANAGE_SETTING_CUSTOM_PATTERN_TIPS": "請輸入自訂重新命名格式",
"MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE": "占位符",
"MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS": "說明",
"MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE": "預設下載鏈結有效期(秒)",
"MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS": "請輸入下載鏈結有效期",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE": "選擇預設複製的連結格式",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN": "Markdown",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK": "Markdown(帶連結)",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL": "原始鏈結",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML": "HTML格式",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE": "BBCode格式",
"MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM": "自定義格式",
"MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE": "自定義鏈結格式($url為原始鏈結,$fileName為檔案名稱)",
"MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS": "請輸入自定義鏈結格式",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE": "選擇下載目錄",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS": "系統預設下載目錄",
"MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON": "選擇目錄",
"MANAGE_SETTING_COPY_MESSAGE": "已複製",
"MANAGE_SETTING_CLEAR_CACHE_SUCCESS": "清除成功",
"MANAGE_SETTING_CLEAR_CACHE_FAILED": "清除失敗",
"MANAGE_SETTING_ISENCODEURL_TITLE": "複製鏈結時編碼",
"MANAGE_SETTING_ISENCODEURL_TIPS": "啟用後,複製鏈結時將會編碼",
"MANAGE_NO_DATA": "暫無數據",
"MANAGE_MAIN_PAGE_NEW_BUCKET": "新建存儲桶",
"MANAGE_MAIN_PAGE_BACK_TO_HOME": "返回首頁",
"MANAGE_MAIN_PAGE_SWITCH_PICBED": "切換圖床",
"MANAGE_MAIN_PAGE_SETTING": "設定",
"MANAGE_MAIN_PAGE_SUBMIT": "提交",
"MANAGE_MAIN_PAGE_TIPS": "提示",
"MANAGE_MAIN_PAGE_TIPS_SUCCESS": "創建成功",
"MANAGE_MAIN_PAGE_TIPS_FAILED": "創建失敗",
"MANAGE_MAIN_PAGE_BUCKET": "存儲桶",
"MANAGE_MAIN_PAGE_GALLERY": "圖庫",
"MANAGE_MAIN_PAGE_REPOSITORY": "倉庫",
"MANAGE_CONSTANT_BASE_RULE": "請輸入",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A": "請輸入每頁顯示數量",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B": "每頁顯示數量必須為數字",
"MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C": "每頁顯示數量必須在20-1000之間",
"MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A": "請輸入別名,該配置的唯一標識",
"MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B": "別名只能包含中文、英文、數字、下劃線和中劃線",
"MANAGE_CONSTANT_ALIAS_TOOLTIP": "別名只能包含中文、英文、數字、下劃線和中劃線",
"MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP": "每頁顯示數量必須在20-1000之間",
"MANAGE_CONSTANT_PAGING_TOOLTIP": "關閉分頁時,目錄列表將使用數據庫緩存以優化性能",
"MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP": "英文逗號分隔bucket1,bucket2,bucket3和起始目錄順序一一對應",
"MANAGE_CONSTANT_BASE_DIR_TOOLTIP": "英文逗號分隔,如:/dir1,/dir2,/dir3, 和存儲桶順序一一對應",
"MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP": "開啟時,將自動獲取存儲桶綁定的域名,關閉時可手動填寫",
"MANAGE_CONSTANT_SMMS_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_SMMS_TOKEN_DESC": "Token-必需",
"MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER": "請填寫Token",
"MANAGE_CONSTANT_SMMS_PAGING_DESC": "是否開啟分頁",
"MANAGE_CONSTANT_SMMS_EXPLAIN": "大陸地區請訪問備用域名https://smms.app請勿大批量上傳圖片否則API接口會被限制",
"MANAGE_CONSTANT_SMMS_REFER_TEXT": "配置教程請參考:",
"MANAGE_CONSTANT_QINIU_NAME": "七牛雲",
"MANAGE_CONSTANT_QINIU_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC": "accessKey-必需",
"MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER": "請填寫 accessKey",
"MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC": "secretKey-必需",
"MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER": "請填寫 secretKey",
"MANAGE_CONSTANT_QINIU_BUCKET_DESC": "空間名-可選",
"MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER": "英文逗號分隔例如bucket1,bucket2",
"MANAGE_CONSTANT_QINIU_BASE_DIR_DESC": "起始目錄-可選",
"MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER": "英文逗號分隔,例如:/dir1,/dir2",
"MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC": "是否自動獲取綁定域名",
"MANAGE_CONSTANT_QINIU_PAGING_DESC": "是否開啟分頁",
"MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC": "每頁顯示數量",
"MANAGE_CONSTANT_QINIU_EXPLAIN": "空間名和起始目錄配置時可通過英文逗號分隔設置,順序必須一致,逗號間留空或缺失項使用默認值",
"MANAGE_CONSTANT_QINIU_REFER_TEXT": "配置教程請參考: ",
"MANAGE_CONSTANT_GITHUB_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_GITHUB_TOKEN_DESC": "Token-必需",
"MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER": "請填寫Token",
"MANAGE_CONSTANT_GITHUB_TOKEN_TIPS": "請提供具有完整repo權限的token否則部分功能可能無法使用",
"MANAGE_CONSTANT_GITHUB_USER_DESC": "用戶名-必需",
"MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER": "請填寫用戶名",
"MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE": "用戶名",
"MANAGE_CONSTANT_GITHUB_PROXY_DESC": "代理地址-可選",
"MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER": "例如http://127.0.0.1:1080",
"MANAGE_CONSTANT_GITHUB_PROXY_TIPS": "如果訪問速度較慢,可以嘗試配置代理",
"MANAGE_CONSTANT_GITHUB_PAGING_DESC": "是否開啟分頁",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC": "CDN加速域名-可選",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER": "支持使用{username}、{repo}、{branch}和{path}作為替換占位符,用於適配不同倉庫和分支",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS": "例如: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A": "加速域名請以http://或https://開頭",
"MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B": "加速域名中的大括號必須成對出現",
"MANAGE_CONSTANT_GITHUB_EXPLAIN": "API調用有每小時上限此外不支持上傳超過100M的文件",
"MANAGE_CONSTANT_GITHUB_REFER_TEXT": "配置教程請參考:",
"MANAGE_CONSTANT_ALIYUN_NAME": "阿里雲",
"MANAGE_CONSTANT_ALIYUN_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC": "accessKeyId-必需",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC": "accessKeySecret-必需",
"MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER": "請填寫accessKeySecret",
"MANAGE_CONSTANT_ALIYUN_BUCKET_DESC": "儲存桶名-可選",
"MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER": "英文逗號分隔例如bucket1,bucket2",
"MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC": "起始目錄-可選",
"MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER": "英文逗號分隔,例如:/dir1,/dir2",
"MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC": "是否自動獲取綁定域名",
"MANAGE_CONSTANT_ALIYUN_PAGING_DESC": "是否開啟分頁",
"MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC": "每頁顯示數量",
"MANAGE_CONSTANT_ALIYUN_EXPLAIN": "儲存桶名和起始目錄配置時可通過英文逗號分隔不同儲存桶的設置,順序必須一致,逗號間留空或缺失項使用默認值",
"MANAGE_CONSTANT_ALIYUN_REFER_TEXT": "配置教程請參考: ",
"MANAGE_CONSTANT_TENCENT_NAME": "腾讯雲",
"MANAGE_CONSTANT_TENCENT_ALIAS_DESC": "配置别名-必需",
"MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC": "secretId-必需",
"MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER": "請填寫 secretId",
"MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC": "secretKey-必需",
"MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER": "請填寫 secretKey",
"MANAGE_CONSTANT_TENCENT_APPID_DESC": "appId-必需",
"MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER": "請填寫 appId",
"MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP": "例如1250000000",
"MANAGE_CONSTANT_TENCENT_BUCKET_DESC": "存儲桶名-可選(注意包含AppId)",
"MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER": "英文逗號分隔例如bucket1-1250000000,bucket2-1250000000",
"MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC": "起始目錄-可選",
"MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER": "英文逗號分隔,例如:/dir1,/dir2",
"MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC": "是否自動獲取綁定域名",
"MANAGE_CONSTANT_TENCENT_PAGING_DESC": "是否開啟分頁",
"MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC": "每頁顯示數量",
"MANAGE_CONSTANT_TENCENT_EXPLAIN": "存儲桶名和起始目錄配置時可通過英文逗號分隔不同存儲桶的設置,順序必須一致,逗號間留空或缺失項使用默認值",
"MANAGE_CONSTANT_TENCENT_REFER_TEXT": "配置教程請參考: ",
"MANAGE_CONSTANT_UPYUN_NAME": "又拍雲",
"MANAGE_CONSTANT_UPYUN_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_UPYUN_BUCKET_DESC": "服務名-必需",
"MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER": "對應其它對象存儲的存儲桶名",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC": "操作員名-必需",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER": "推薦使用具有讀取、寫入和刪除完整權限的操作員",
"MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE": "操作員",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC": "操作員密碼-必需",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER": "請填寫密碼",
"MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE": "操作員密碼",
"MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC": "起始目錄-可選",
"MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER": "讀取文件時的初始目錄",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC": "加速域名-必需",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER": "請以http://或https://開頭",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A": "加速域名不能為空",
"MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B": "自定義域名請以http://或https://開頭",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC": "防盗链密钥-可選",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER": "請填寫防盗链密钥",
"MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP": "如果不填寫,則不啟用防盗链",
"MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC": "防盗链有效期(秒)-可選",
"MANAGE_CONSTANT_UPYUN_PAGING": "是否開啟分頁",
"MANAGE_CONSTANT_UPYUN_ITEMS_PAGE": "每頁顯示數量",
"MANAGE_CONSTANT_UPYUN_EXPLAIN": "又拍雲圖床必須填寫加速域名,否則無法正常使用",
"MANAGE_CONSTANT_UPYUN_REFER_TEXT": "配置教程請參考: ",
"MANAGE_CONSTANT_IMGUR_NAME": "Imgur",
"MANAGE_CONSTANT_IMGUR_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_IMGUR_USERNAME_DESC": "Imgur用戶名-必需",
"MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER": "請填寫Imgur用戶名",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC": "Access Token-必需",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER": "請填寫Access Token",
"MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP": "不是client ID請參考配置教程",
"MANAGE_CONSTANT_IMGUR_PROXY_DESC": "代理-可選",
"MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER": "例如http://127.0.0.1:1080",
"MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP": "大陸地區請使用代理,否則無法正常使用",
"MANAGE_CONSTANT_IMGUR_EXPLAIN": "大陸地區請使用代理API調用存在限制請注意使用頻率",
"MANAGE_CONSTANT_IMGUR_REFER_TEXT": "配置教程請參考:",
"MANAGE_CONSTANT_S3_NAME": "S3兼容雲",
"MANAGE_CONSTANT_S3_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC": "accessKeyId-必需",
"MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER": "請填寫accessKeyId",
"MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC": "secretAccessKey-必需",
"MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER": "請填寫secretAccessKey",
"MANAGE_CONSTANT_S3_ENDPOINT_DESC": "endpoint-可選",
"MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER": "例如s3.us-east-1.amazonaws.com",
"MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP": "如果不填寫,默認訪問 AWS S3請提供根API endpoint",
"MANAGE_CONSTANT_S3_SSLENABLED_DESC": "使用HTTPS連接",
"MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP": "如果您的平臺不支持,請關閉該選項",
"MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC": "啟用 S3 Path style",
"MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP": "例如使用 minio 時需要啟用",
"MANAGE_CONSTANT_S3_PROXY_DESC": "代理-可選",
"MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER": "例如http://127.0.0.1:1080",
"MANAGE_CONSTANT_S3_PROXY_TOOLTIP": "如果部分平臺大陸地區無法訪問,請使用代理",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC": "上傳文件的權限",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE": "私有",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ": "公共讀",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE": "公共讀寫",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ": "授權讀",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ": "桶所有者讀",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL": "桶所有者完全控制",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ": "AWS執行讀",
"MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP": "上傳文件的權限可選值private、public-read、public-read-write、authenticated-read、bucket-owner-read、bucket-owner-full-control、aws-exec-read",
"MANAGE_CONSTANT_S3_BUCKET_DESC": "存儲桶名-可選",
"MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER": "英文逗號分隔例如bucket1,bucket2",
"MANAGE_CONSTANT_S3_BASE_DIR_DESC": "起始目錄-可選",
"MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER": "英文逗號分隔,例如:/dir1,/dir2",
"MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC": "啟用 Doge Cloud 支援",
"MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP": "啟用後將會啟用Doge Cloud API",
"MANAGE_CONSTANT_S3_PAGING_DESC": "是否開啟分頁",
"MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC": "每頁顯示數量",
"MANAGE_CONSTANT_S3_EXPLAIN": "存儲桶名和起始目錄配置時可通過英文逗號分隔不同存儲桶的設置,順序必須一致,逗號間留空或缺失項使用默認值",
"MANAGE_CONSTANT_S3_REFER_TEXT": "配置教程請參考:",
"MANAGE_CONSTANT_WEBDAV_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_WEBDAV_HOST_DESC": "地址-必需",
"MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER": "例如https://example.com/dav",
"MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP": "請填寫完整的WebDAV地址",
"MANAGE_CONSTANT_WEBDAV_USERNAME_DESC": "使用者名稱-必需",
"MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER": "請填寫使用者名稱",
"MANAGE_CONSTANT_WEBDAV_BUCKET_DESC": "特殊配置",
"MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER": "例如bucket1",
"MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP": "此處不可修改,僅為軟體相容性考量",
"MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC": "密碼-必需",
"MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER": "請填寫密碼",
"MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC": "起始目錄-可選",
"MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER": "例如:/dir1",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC": "自訂網域名稱-可選",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER": "例如https://example.com",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP": "如果您的WebDAV伺服器支援自訂網域名稱請填寫",
"MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE": "自訂網域名稱請以http://或https://開頭",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH": "WebDAV網路路徑-可選",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER": "例如test/ttc",
"MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP": "用於拼接網址",
"MANAGE_CONSTANT_WEBDAV_PROXY_DESC": "代理-可選",
"MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER": "例如http://127.0.0.1:1080",
"MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP": "如果需要特殊網路環境才能訪問,請使用代理",
"MANAGE_CONSTANT_WEBDAV_SSL_DESC": "使用HTTPS連線",
"MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP": "根據WebDAV伺服器的配置如果您的伺服器不支援HTTPS請關閉該選項",
"MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC": "認證類型",
"MANAGE_CONSTANT_WEBDAV_EXPLAIN": "WebDAV配置",
"MANAGE_CONSTANT_WEBDAV_REFER_TEXT": "配置教程請參考: ",
"MANAGE_CONSTANT_LOCAL_NAME": "本地",
"MANAGE_CONSTANT_LOCAL_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC": "起始目錄-必需",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER": "請填寫起始目錄",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC": "自定義網域-可選",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER": "例如https://example.com",
"MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP": "如果您的目錄支援自定義網域,請填寫",
"MANAGE_CONSTANT_LOCAL_WEB_PATH": "網路路徑-可選",
"MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER": "例如test/ttc",
"MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP": "用於拼接網址",
"MANAGE_CONSTANT_LOCAL_EXPLAIN": "本地配置",
"MANAGE_CONSTANT_LOCAL_REFER_TEXT": "配置教程請參考: ",
"MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE": "起始目錄不能為空",
"MANAGE_CONSTANT_LOCAL_BUCKET_DESC": "特殊配置",
"MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER": "例如bucket1",
"MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP": "此處不可修改,僅為軟體相容性考量",
"MANAGE_CONSTANT_SFTP_NAME": "SFTP",
"MANAGE_CONSTANT_SFTP_ALIAS_DESC": "配置別名-必需",
"MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER": "該配置的唯一標識",
"MANAGE_CONSTANT_SFTP_HOST_DESC": "地址-必需",
"MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER": "例如233.233.233.233",
"MANAGE_CONSTANT_SFTP_PORT_DESC": "端口-必需",
"MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER": "例如22",
"MANAGE_CONSTANT_SFTP_USERNAME_DESC": "用戶名",
"MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER": "請填寫用戶名",
"MANAGE_CONSTANT_SFTP_PASSWORD_DESC": "密碼",
"MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER": "請填寫密碼",
"MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC": "私鑰地址",
"MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER": "請填寫私鑰地址",
"MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC": "私鑰密碼",
"MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER": "請填寫私鑰密碼",
"MANAGE_CONSTANT_SFTP_BASE_DIR_DESC": "起始目錄-可選",
"MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER": "例如:/dir1",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC": "自定義網域-可選",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER": "例如https://example.com",
"MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP": "如果您的目錄支援自定義網域,請填寫",
"MANAGE_CONSTANT_SFTP_WEB_PATH": "網路路徑-可選",
"MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER": "例如test/ttc",
"MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP": "用於拼接網址",
"MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC": "文件權限",
"MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER": "例如0644",
"MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC": "目錄權限",
"MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER": "例如0755",
"MANAGE_CONSTANT_SFTP_EXPLAIN": "SFTP配置",
"MANAGE_CONSTANT_SFTP_REFER_TEXT": "配置教程請參考: ",
"MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE": "起始目錄不能為空",
"MANAGE_CONSTANT_SFTP_BUCKET_DESC": "特殊配置",
"MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER": "例如bucket1",
"MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP": "此處不可修改,僅為軟體相容性考量",
"MANAGE_LOGIN_PAGE_PANE_NAME": "已保存配置",
"MANAGE_LOGIN_PAGE_PANE_KEY_NAME": "配置項",
"MANAGE_LOGIN_PAGE_PANE_KEY_VALUE": "值",
"MANAGE_LOGIN_PAGE_PANE_ENTER": "進入",
"MANAGE_LOGIN_PAGE_PANE_DELETE": "刪除",
"MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER": "請選擇",
"MANAGE_LOGIN_PAGE_PANE_IMPORT": "導入",
"MANAGE_LOGIN_PAGE_PANE_SAVE": "保存",
"MANAGE_LOGIN_PAGE_PANE_RESET": "重置",
"MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE": "已有配置,單擊可複製對應儲存格資料",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A": "請填寫",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE": "別名只能包含中文、英文、數字、下劃線和中劃線",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE": "每頁數量必須在20-1000之間",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE": "自定義網域請以http://或https://開頭",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME": "通知",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE": "已覆蓋別名",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B": "已保存別名",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C": "已刪除別名",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D": "刪除別名為",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E": "的配置失敗",
"MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS": "已複製",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE": "確定要删除嗎??",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP": "提示",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM": "確定",
"MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL": "取消",
"MANAGE_BUCKET_PAGE_LOADING_TEXT": "載入檔案中...",
"MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER": "請選擇自訂域名",
"MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER": "請輸入自訂域名",
"MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP": "檔案上傳(支援多選)",
"MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP": "從 URL 上傳",
"MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP": "建立資料夾",
"MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP": "下載頁面",
"MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP": "批次重新命名",
"MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP": "批次複製 URL",
"MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP": "複製檔案資訊",
"MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP": "強制重新整理檔案列表",
"MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER": "搜尋檔案",
"MANAGE_BUCKET_PAGE_ROOT_FOLDER": "根目錄",
"MANAGE_BUCKET_PAGE_FILE_NUMBER": "檔案數:",
"MANAGE_BUCKET_PAGE_FILE_SIZE": "總大小:",
"MANAGE_BUCKET_PAGE_SELECT_ALL": "全選",
"MANAGE_BUCKET_PAGE_SELECT_NONE": "取消選擇",
"MANAGE_BUCKET_PAGE_SELECT_INVERT": "反選",
"MANAGE_BUCKET_DOWNLOAD_BTN": "下載",
"MANAGE_BUCKET_DELETE_BTN": "刪除",
"MANAGE_BUCKET_SORT_TITLE": "排序",
"MANAGE_BUCKET_SORT_NAME": "檔案名稱",
"MANAGE_BUCKET_SORT_SIZE": "大小",
"MANAGE_BUCKET_SORT_EXT": "類型",
"MANAGE_BUCKET_SORT_TIME": "時間",
"MANAGE_BUCKET_SORT_CHECK": "選取狀態",
"MANAGE_BUCKET_SORT_INIT": "初始化",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE": "請輸入 URL支援多個 URL以換行分隔",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM": "確定",
"MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL": "取消",
"MANAGE_BUCKET_URL_FORMAT_MARKDOWN": "Markdown",
"MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK": "Markdown-link",
"MANAGE_BUCKET_URL_FORMAT_URL": "Url",
"MANAGE_BUCKET_URL_FORMAT_HTML": "Html",
"MANAGE_BUCKET_URL_FORMAT_BBCODE": "BBCode",
"MANAGE_BUCKET_URL_FORMAT_CUSTOM": "自訂",
"MANAGE_BUCKET_URL_FORMAT_PRESIGN": "預簽名連結",
"MANAGE_BUCKET_FILE_INFO_TITLE": "檔案資訊",
"MANAGE_BUCKET_FILE_INFO_COPY_TIPS": "複製 JSON 格式資訊",
"MANAGE_BUCKET_FILE_LIST_LOADING": "載入中,點擊取消",
"MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE": "準備下載中,點擊取消",
"MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE": "保持目錄結構",
"MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE": "不保持目錄結構",
"MANAGE_BUCKET_UPLOAD_AREA_TITLE": "拖放上傳支援遞歸上傳資料夾",
"MANAGE_BUCKET_UPLOAD_AREA_TEXT": "或:點選選擇檔案(不支援資料夾)",
"MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING": "讀取檔案中",
"MANAGE_BUCKET_UPLOAD_AREA_BTN": "上傳",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR": "清空",
"MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING": "上傳中",
"MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK": "複製上傳任務資訊",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK": "清空已完成任務",
"MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK": "清空所有任務",
"MANAGE_BUCKET_UPLOAD_AREA_SUCCESS": "成功",
"MANAGE_BUCKET_UPLOAD_AREA_FAILED": "失敗",
"MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE": "下載頁面",
"MANAGE_BUCKET_DOWNLOADING": "下載中",
"MANAGE_BUCKET_DOWNLOAD_COPY_TASK": "複製下載任務資訊",
"MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK": "清空已完成任務",
"MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK": "清空所有任務",
"MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER": "開啟下載目錄",
"MANAGE_BUCKET_DOWNLOAD_SUCCESS": "成功",
"MANAGE_BUCKET_DOWNLOAD_FAILED": "失敗",
"MANAGE_BUCKET_MARKDOWN_PREVIEW": "預覽",
"MANAGE_BUCKET_PLAY": "播放",
"MANAGE_BUCKET_RENAME_FILE": "檔案重新命名",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A": "進行替換時匹配的字串或 JS 正則表達式",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS": "正則表達式請直接輸入,不需要加上 /",
"MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER": "例如:^\\d{4}-\\d{2}-\\d{2}",
"MANAGE_BUCKET_RENAME_FILE_INPUT_B": "需要替換的字串,可使用自訂重新命名規則中的佔位符",
"MANAGE_BUCKET_RENAME_FILE_TABLE_IID": "自增數字",
"MANAGE_BUCKET_RENAME_FILE_EXT": "是否匹配副檔名進行替換",
"MANAGE_BUCKET_RENAME_FILE_EXT_TIPS": "如果希望修改副檔名,請勾選此項",
"MANAGE_BUCKET_RENAME_FILE_EXT_YES": "是",
"MANAGE_BUCKET_RENAME_FILE_EXT_NO": "否",
"MANAGE_BUCKET_RENAME_FILE_CANCEL": "取消",
"MANAGE_BUCKET_RENAME_FILE_CONFIRM": "確定",
"MANAGE_BUCKET_COPY_SUCCESS": "複製成功",
"MANAGE_BUCKET_START_LOADING_MESSAGE": "開始取得檔案",
"MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL": "取得檔案內容失敗",
"MANAGE_BUCKET_LAST_PAGE_TITLE": "提示",
"MANAGE_BUCKET_LAST_PAGE_MSG": "已經是最後一頁了",
"MANAGE_BUCKET_GET_LIST_FAIL_TITLE": "提示",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG": "獲取檔案列表失敗",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG2": "正在後台獲取檔案列表,請勿切換頁面",
"MANAGE_BUCKET_GET_LIST_FAIL_MSG3": "正在載入檔案列表,請稍後再試",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE": "確定要下載該資料夾嗎?",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP": "提示",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM": "確定",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL": "取消",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS": "獲取下載列表成功",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL": "獲取失敗",
"MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL": "已取消",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE": "請輸入資料夾名稱",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP": "新建資料夾",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM": "確定",
"MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL": "取消",
"MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG": "資料夾名稱只能包含中文、英文、數字、下劃線和斜線",
"MANAGE_BUCKET_CREATE_FOLDER_SUCCESS": "創建成功,請刷新",
"MANAGE_BUCKET_CREATE_FOLDER_FAIL": "創建失敗",
"MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ": "請輸入有效的URL",
"MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE": "提示",
"MANAGE_BUCKET_UPLOAD_URL_NOT_MSG": "開始後台下載,成功後自動上傳",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG": "請輸入匹配字串",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2": "沒有匹配到檔案",
"MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3": "沒有需要重命名的檔案",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A": "檢測到有",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B": "個檔案重複,是否繼續",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C": "提示",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM": "確定",
"MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL": "取消",
"MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A": "重命名成功",
"MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B": "失敗",
"MANAGE_BUCKET_BATCH_RENAME_CANCEL": "已取消",
"MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG": "請先選擇檔案",
"MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A": "已複製",
"MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B": "個檔案資訊",
"MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG": "請先選擇檔案",
"MANAGE_BUCKET_BATCH_COPY_URL_MSG_A": "已複製",
"MANAGE_BUCKET_BATCH_COPY_URL_MSG_B": "個連結",
"MANAGE_BUCKET_CANCEL_LOADING_TITLE": "是否停止獲取檔案列表?",
"MANAGE_BUCKET_CANCEL_LOADING_MSG": "提示",
"MANAGE_BUCKET_CANCEL_LOADING_CONFIRM": "确定",
"MANAGE_BUCKET_CANCEL_LOADING_CANCEL": "取消",
"MANAGE_BUCKET_CANCEL_LOADING_SUCCESS": "文件列表获取已停止",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE": "是否停止下载文件获取?",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG": "提示",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM": "确定",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL": "取消",
"MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS": "下载文件获取已停止",
"MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE": "提示",
"MANAGE_BUCKET_GET_FILE_BS_NOT_MSG": "获取文件列表成功",
"MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2": "部分文件获取失败",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A": "将永久删除",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B": "个文件,是否继续?",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG": "提示",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM": "确定",
"MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL": "取消",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE": "提示",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG": "删除失败",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2": "删除成功",
"MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3": "失败",
"MANAGE_BUCKET_BATCH_DELETE_CANCEL": "已取消删除",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE": "将永久删除",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER": "文件夹",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A": "和该目录下的所有文件",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE": "文件",
"MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C": "是否继续",
"MANAGE_BUCKET_DELETE_CONFIRM_MSG": "提示",
"MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM": "确定",
"MANAGE_BUCKET_DELETE_CONFIRM_CANCEL": "取消",
"MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE": "提示",
"MANAGE_BUCKET_DELETE_ERROR_MSG_MSG": "删除文件夹可能需要一段时间,请耐心等待",
"MANAGE_BUCKET_DELETE_SUCCESS": "刪除成功",
"MANAGE_BUCKET_DELETE_FAIL": "刪除失敗",
"MANAGE_BUCKET_DELETE_CANCEL": "已取消删除",
"MANAGE_BUCKET_RENAME_INFO_MSG": "新文件名和原文件名相同,無需重命名",
"MANAGE_BUCKET_RENAME_SUCCESS": "重命名成功",
"MANAGE_BUCKET_RENAME_ERROR_MSG": "重命名失敗",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME": "完成時間",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS": "狀態",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS": "成功",
"MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL": "失敗",
"MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH": "上傳路徑",
"MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME": "完成時間",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS": "狀態",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS": "成功",
"MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL": "失敗",
"MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS": "進度",
"MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS": "進度",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE": "大小",
"MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM": "文件數",
"MANAGE_BUCKET_FILE_COLUMN_FILENAME": "文件名",
"MANAGE_BUCKET_FILE_COLUMN_COPY_URL": "複製鏈接",
"MANAGE_BUCKET_FILE_COLUMN_INFO": "文件信息",
"MANAGE_BUCKET_FILE_COLUMN_FILESIZE": "大小",
"MANAGE_BUCKET_FILE_COLUMN_TIME": "修改時間",
"MANAGE_NEW_BUCKET_TCYUN_NAME": "腾讯雲",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC": "Bucket名稱",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER": "請輸入Bucket名稱",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A": "Bucket名稱不能為空",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B": "Bucket名稱長度不能超過23個字符",
"MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C": "Bucket名稱只能包含小寫字母、數字和中橫線且不能以中橫線開頭和結尾",
"MANAGE_NEW_BUCKET_TCYUN_REGION": "區域",
"MANAGE_NEW_BUCKET_TCYUN_ACL_DESC": "訪問權限",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW": "公共讀寫",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R": "公共讀",
"MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE": "私有",
"MANAGE_NEW_BUCKET_ALIYUN_NAME": "阿里雲",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC": "Bucket名稱",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER": "請輸入Bucket名稱",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A": "Bucket名稱不能為空",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B": "Bucket名稱長度不能超過63個字符",
"MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C": "Bucket名稱只能包含小寫字母、數字和中橫線且不能以中橫線開頭和結尾",
"MANAGE_NEW_BUCKET_ALIYUN_REGION": "區域",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC": "訪問權限",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW": "公共讀寫",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R": "公共讀",
"MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE": "私有",
"MANAGE_NEW_BUCKET_QINIU_NAME": "七牛雲",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC": "Bucket名稱",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER": "請輸入Bucket名稱",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A": "Bucket名稱不能為空",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B": "Bucket名稱長度不能超過63個字符",
"MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C": "Bucket名稱只能包含小寫字母、數字和中橫線且不能以中橫線開頭和結尾",
"MANAGE_NEW_BUCKET_QINIU_REGION": "區域",
"MANAGE_NEW_BUCKET_QINIU_ACL_DESC": "公開訪問",
"MANAGE_NEW_BUCKET_S3PLIST_NAME": "S3兼容雲",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC": "Bucket名稱",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER": "請輸入Bucket名稱",
"MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A": "Bucket名稱不能為空",
"MANAGE_NEW_BUCKET_S3PLIST_REGION": "區域",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC": "訪問權限",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW": "公共讀寫",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R": "公共讀",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE": "私有",
"MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ": "授權讀",
"PLUGIN_UPDATE_SUCCEED": "插件更新成功",
"TIPS_NOTICE": "注意"
}

View File

@@ -69,19 +69,19 @@
<el-icon>
<UploadFilled />
</el-icon>
<span>{{ $T('UPLOAD_AREA') }}</span>
<span>{{ $t('UPLOAD_AREA') }}</span>
</el-menu-item>
<el-menu-item :index="routerConfig.MANAGE_LOGIN_PAGE">
<el-icon>
<PieChart />
</el-icon>
<span>{{ $T('MANAGE_PAGE') }}</span>
<span>{{ $t('MANAGE_PAGE') }}</span>
</el-menu-item>
<el-menu-item :index="routerConfig.GALLERY_PAGE">
<el-icon>
<PictureFilled />
</el-icon>
<span>{{ $T('GALLERY') }}</span>
<span>{{ $t('GALLERY') }}</span>
</el-menu-item>
<el-sub-menu
index="sub-menu"
@@ -93,7 +93,7 @@
<el-icon>
<Menu />
</el-icon>
<span>{{ $T('PICBEDS_SETTINGS') }}</span>
<span>{{ $t('PICBEDS_SETTINGS') }}</span>
</template>
<template v-for="item in picBedGlobal">
<el-menu-item
@@ -109,19 +109,19 @@
<el-icon>
<Tools />
</el-icon>
<span>{{ $T('PICLIST_SETTINGS') }}</span>
<span>{{ $t('PICLIST_SETTINGS') }}</span>
</el-menu-item>
<el-menu-item :index="routerConfig.PLUGIN_PAGE">
<el-icon>
<Share />
</el-icon>
<span>{{ $T('PLUGIN_SETTINGS') }}</span>
<span>{{ $t('PLUGIN_SETTINGS') }}</span>
</el-menu-item>
<el-menu-item :index="routerConfig.DocumentPage">
<el-icon>
<Link />
</el-icon>
<span>{{ $T('MANUAL') }}</span>
<span>{{ $t('MANUAL') }}</span>
</el-menu-item>
</el-menu>
<el-icon
@@ -154,7 +154,7 @@
class="qrcode-dialog"
top="3vh"
width="60%"
:title="$T('PICBED_QRCODE')"
:title="$t('PICBED_QRCODE')"
:modal-append-to-body="false"
lock-scroll
append-to-body
@@ -164,7 +164,7 @@
label-width="70px"
size="small"
>
<el-form-item :label="$T('CHOOSE_PICBED')">
<el-form-item :label="$t('CHOOSE_PICBED')">
<el-select
v-model="choosedPicBedForQRCode"
multiple
@@ -186,7 +186,7 @@
class="copy-picbed-config"
@click="handleCopyPicBedConfig"
>
{{ $T('COPY_PICBED_CONFIG') }}
{{ $t('COPY_PICBED_CONFIG') }}
</el-button>
</el-form-item>
</el-form>
@@ -223,10 +223,10 @@ import { pick } from 'lodash-es'
import QrcodeVue from 'qrcode.vue'
import pkg from 'root/package.json'
import { nextTick, onBeforeMount, onBeforeUnmount, reactive, Ref, ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { onBeforeRouteUpdate, useRouter } from 'vue-router'
import InputBoxDialog from '@/components/InputBoxDialog.vue'
import { T as $T } from '@/i18n/index'
import * as config from '@/router/config'
import { getConfig, saveConfig } from '@/utils/dataSender'
import { osGlobal, picBedGlobal, updatePicBedGlobal } from '@/utils/global'
@@ -234,6 +234,7 @@ import { SHOW_MAIN_PAGE_QRCODE } from '#/events/constants'
import { II18nLanguage, IRPCActionType } from '#/types/enum'
import { configPaths, manualPageOpenType } from '#/utils/configPaths'
const { t } = useI18n()
const version = ref(pkg.version)
const routerConfig = reactive(config)
const defaultActive = ref(routerConfig.UPLOAD_PAGE)
@@ -291,9 +292,9 @@ const handleSelect = async (index: string) => {
)
if (!manualPageOpenSetting) {
ElMessageBox.confirm($T('MANUAL_PAGE_OPEN_TIP'), $T('MANUAL_PAGE_OPEN_TIP_TITLE'), {
confirmButtonText: $T('MANUAL_PAGE_OPEN_BY_BROWSER'),
cancelButtonText: $T('MANUAL_PAGE_OPEN_BY_BUILD_IN'),
ElMessageBox.confirm(t('MANUAL_PAGE_OPEN_TIP'), t('MANUAL_PAGE_OPEN_TIP_TITLE'), {
confirmButtonText: t('MANUAL_PAGE_OPEN_BY_BROWSER'),
cancelButtonText: t('MANUAL_PAGE_OPEN_BY_BUILD_IN'),
type: 'info',
center: true
})
@@ -344,7 +345,7 @@ function openMiniWindow () {
function handleCopyPicBedConfig () {
window.electron.clipboard.writeText(picBedConfigString.value)
$message.success($T('COPY_PICBED_CONFIG_SUCCEED'))
$message.success(t('COPY_PICBED_CONFIG_SUCCEED'))
}
function setAlwaysOnTop () {

View File

@@ -10,26 +10,38 @@ import ElementUI from 'element-plus'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
import { createApp } from 'vue'
import { createI18n } from 'vue-i18n'
import VueLazyLoad from 'vue3-lazyload'
import vue3PhotoPreview from 'vue3-photo-preview'
import App from '@/App.vue'
import { T } from '@/i18n/index'
import en from '@/i18n/locales/en.json'
import zhCN from '@/i18n/locales/zh-CN.json'
import zhTW from '@/i18n/locales/zh-TW.json'
import router from '@/router'
import { store } from '@/store'
import { initTalkingData } from '@/utils/analytic'
import db from '@/utils/db'
type MessageSchema = typeof en
window.electron.setVisualZoomLevelLimits(1, 1)
const app = createApp(App)
app.config.globalProperties.$$db = db
app.config.globalProperties.$T = T
app.config.globalProperties.triggerRPC = window.electron.triggerRPC
app.config.globalProperties.sendRPC = window.electron.sendRPC
app.config.globalProperties.sendToMain = window.electron.sendToMain
const i18n = createI18n<MessageSchema, 'en' | 'zh-CN' | 'zh-TW'>({
locale: localStorage.getItem('currentLanguage') || 'zh-CN',
fallbackLocale: 'zh-CN',
messages: {
en,
'zh-CN': zhCN,
'zh-TW': zhTW
}
})
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)
app.use(VueLazyLoad, {
@@ -37,6 +49,7 @@ app.use(VueLazyLoad, {
error: '/unknown-file-type.svg',
delay: 500
})
app.use(i18n)
app.use(ElementUI)
app.use(router)
app.use(store)
@@ -45,5 +58,3 @@ app.use(pinia)
app.use(hljsVuePlugin)
app.use(VueVideoPlayer)
app.mount('#app')
initTalkingData()

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,6 @@
<template>
<el-empty :description="$T('MANAGE_NO_DATA')" />
<el-empty :description="$t('MANAGE_NO_DATA')" />
</template>
<script lang="ts" setup>
import { T as $T } from '@/i18n'
</script>

View File

@@ -11,7 +11,7 @@
>
<el-tab-pane
name="login"
:label="$T('MANAGE_LOGIN_PAGE_PANE_NAME')"
:label="$t('MANAGE_LOGIN_PAGE_PANE_NAME')"
style="width: 100%; overflow-y: scroll; height: calc(100vh - 50px)"
lazy
>
@@ -46,12 +46,12 @@
>
<el-table-column
prop="key"
:label="$T('MANAGE_LOGIN_PAGE_PANE_KEY_NAME')"
:label="$t('MANAGE_LOGIN_PAGE_PANE_KEY_NAME')"
width="100"
/>
<el-table-column
prop="value"
:label="$T('MANAGE_LOGIN_PAGE_PANE_KEY_VALUE')"
:label="$t('MANAGE_LOGIN_PAGE_PANE_KEY_VALUE')"
/>
</el-table>
<template #reference>
@@ -92,7 +92,7 @@
plain
@click="handleConfigClick(item)"
>
{{ $T('MANAGE_LOGIN_PAGE_PANE_ENTER') }}
{{ $t('MANAGE_LOGIN_PAGE_PANE_ENTER') }}
</el-button>
<el-button
type="warning"
@@ -100,7 +100,7 @@
plain
@click="handleConfigRemove(item.alias)"
>
{{ $T('MANAGE_LOGIN_PAGE_PANE_DELETE') }}
{{ $t('MANAGE_LOGIN_PAGE_PANE_DELETE') }}
</el-button>
</el-button-group>
</el-card>
@@ -182,7 +182,7 @@
<el-select
v-else-if="supportedPicBedList[item.icon].configOptions[option].type === 'select'"
v-model="configResult[item.icon + '.' + option]"
:placeholder="$T('MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER')"
:placeholder="$t('MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER')"
:persistent="false"
teleported
>
@@ -204,7 +204,7 @@
:disabled="currentAliasList.length === 0"
teleported
>
{{ $T('MANAGE_LOGIN_PAGE_PANE_IMPORT') }}
{{ $t('MANAGE_LOGIN_PAGE_PANE_IMPORT') }}
<template #dropdown>
<el-dropdown-item
v-for="i in currentAliasList"
@@ -222,7 +222,7 @@
plain
@click="handleConfigChange(item.icon)"
>
{{ $T('MANAGE_LOGIN_PAGE_PANE_SAVE') }}
{{ $t('MANAGE_LOGIN_PAGE_PANE_SAVE') }}
</el-button>
<el-button
type="danger"
@@ -231,12 +231,12 @@
plain
@click="handleConfigReset(item.icon)"
>
{{ $T('MANAGE_LOGIN_PAGE_PANE_RESET') }}
{{ $t('MANAGE_LOGIN_PAGE_PANE_RESET') }}
</el-button>
</div>
<br>
<el-alert
:title="$T('MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE')"
:title="$t('MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE')"
type="success"
center
:closable="false"
@@ -266,9 +266,9 @@
import { Delete, Edit, InfoFilled, Pointer } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
import { computed, onMounted, reactive, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router'
import { T as $T } from '@/i18n'
import { useManageStore } from '@/manage/store/manageStore'
import { formObjToTableData } from '@/manage/utils/common'
import { supportedPicBedList } from '@/manage/utils/constants'
@@ -278,6 +278,7 @@ import { IRPCActionType } from '#/types/enum'
import { IStringKeyMap, IUploaderConfigListItem } from '#/types/types'
import { formatEndpoint, isNeedToShorten, safeSliceF } from '#/utils/common'
const { t } = useI18n()
const manageStore = useManageStore()
const router = useRouter()
@@ -362,13 +363,13 @@ async function handleConfigChange (name: string) {
if (supportedPicBedList[name].configOptions[key].required) {
if (supportedPicBedList[name].configOptions[key].type !== 'boolean' && !configResult[resultKey]) {
ElMessage.error(
`${$T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A')} ${supportedPicBedList[name].configOptions[key].description}`
`${t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A')} ${supportedPicBedList[name].configOptions[key].description}`
)
return
}
}
if (key === 'alias' && configResult[resultKey] !== undefined && !reg.test(configResult[resultKey])) {
ElMessage.error($T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE'))
ElMessage.error(t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE'))
return
}
if (
@@ -376,13 +377,13 @@ async function handleConfigChange (name: string) {
configResult[resultKey] !== undefined &&
(configResult[resultKey] < 20 || configResult[resultKey] > 1000)
) {
ElMessage.error($T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE'))
ElMessage.error(t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE'))
return
}
if (key === 'customUrl' && configResult[resultKey] !== undefined && configResult[resultKey] !== '') {
if (name !== 'upyun') {
if (!/^https?:\/\//.test(configResult[resultKey])) {
ElMessage.error($T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE'))
ElMessage.error(t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE'))
return
}
}
@@ -438,8 +439,8 @@ async function handleConfigChange (name: string) {
getDataForTable()
if (aliasList.includes(resultMap.alias)) {
ElNotification({
title: $T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME'),
message: `${$T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE')}${resultMap.alias}`,
title: t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME'),
message: `${t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE')}${resultMap.alias}`,
type: 'warning',
duration: 500,
customClass: 'notification',
@@ -447,8 +448,8 @@ async function handleConfigChange (name: string) {
})
} else {
ElNotification({
title: $T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME'),
message: `${$T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B')}${resultMap.alias}`,
title: t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME'),
message: `${t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B')}${resultMap.alias}`,
type: 'success',
duration: 2000,
customClass: 'notification',
@@ -471,16 +472,16 @@ const handleConfigReset = (name: string) => {
const handleConfigRemove = (name: string) => {
ElMessageBox.confirm(
$T('MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE'),
$T('MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP'),
t('MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE'),
t('MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP'),
{
confirmButtonText: $T('MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM'),
cancelButtonText: $T('MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL'),
confirmButtonText: t('MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM'),
cancelButtonText: t('MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL'),
type: 'warning'
}
).then(async () => {
const commonNoticeConfig = {
title: $T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME'),
title: t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME'),
duration: 2000,
customClass: 'notification',
offset: 100
@@ -489,7 +490,7 @@ const handleConfigRemove = (name: string) => {
removeConfig('picBed', name)
ElNotification({
...commonNoticeConfig,
message: `${$T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C')}${name}`,
message: `${t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C')}${name}`,
type: 'success',
position: 'bottom-right'
})
@@ -498,7 +499,7 @@ const handleConfigRemove = (name: string) => {
} catch (error) {
ElNotification({
...commonNoticeConfig,
message: `${$T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D')}${name}${$T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E')}`,
message: `${t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D')}${name}${t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E')}`,
type: 'error',
position: 'bottom-right'
})
@@ -523,7 +524,7 @@ const getAllConfigAliasArray = async () => {
const handleCellClick = (row: any, column: any) => {
navigator.clipboard.writeText(row[column.property])
ElMessage.success(`${$T('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS')}${row[column.property]}`)
ElMessage.success(`${t('MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS')}${row[column.property]}`)
}
const handleReferenceClick = (url: string) => window.electron.sendRPC(IRPCActionType.OPEN_URL, url)

View File

@@ -23,7 +23,7 @@
<el-tooltip
v-if="showNewIconList.includes(currentPicBedName)"
effect="dark"
:content="$T('MANAGE_MAIN_PAGE_NEW_BUCKET')"
:content="$t('MANAGE_MAIN_PAGE_NEW_BUCKET')"
placement="right"
:persistent="false"
teleported
@@ -101,7 +101,7 @@
<el-icon class="layout__menu__setting__item__icon">
<HomeFilled />
</el-icon>
{{ $T('MANAGE_MAIN_PAGE_BACK_TO_HOME') }}
{{ $t('MANAGE_MAIN_PAGE_BACK_TO_HOME') }}
</span>
</el-menu-item>
<el-menu-item
@@ -113,7 +113,7 @@
<el-icon class="layout__menu__setting__item__icon">
<Switch />
</el-icon>
{{ $T('MANAGE_MAIN_PAGE_SWITCH_PICBED') }}
{{ $t('MANAGE_MAIN_PAGE_SWITCH_PICBED') }}
</span>
</el-menu-item>
<el-menu-item
@@ -125,7 +125,7 @@
<el-icon class="layout__menu__setting__item__icon">
<Tools />
</el-icon>
{{ $T('MANAGE_MAIN_PAGE_SETTING') }}
{{ $t('MANAGE_MAIN_PAGE_SETTING') }}
</span>
</el-menu-item>
</el-menu>
@@ -158,7 +158,7 @@
<ChromeFilled />
</el-icon>
<span style="font-size: 13px; margin-top: 5px; color: red">
{{ $T('MANAGE_MAIN_PAGE_BACK_TO_HOME') }}
{{ $t('MANAGE_MAIN_PAGE_BACK_TO_HOME') }}
</span>
</div>
</el-card>
@@ -258,7 +258,7 @@
style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%)"
@click="createNewBucket(currentPicBedName)"
>
{{ $T('MANAGE_MAIN_PAGE_SUBMIT') }}
{{ $t('MANAGE_MAIN_PAGE_SUBMIT') }}
</el-button>
</div>
</el-form>
@@ -281,14 +281,15 @@ import {
import { ElNotification } from 'element-plus'
import { IRPCActionType } from 'root/src/universal/types/enum'
import { computed, onBeforeMount, reactive, ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { useRoute, useRouter } from 'vue-router'
import { T as $T } from '@/i18n'
import { useManageStore } from '@/manage/store/manageStore'
import { supportedPicBedList } from '@/manage/utils/constants'
import { newBucketConfig } from '@/manage/utils/newBucketConfig'
import { IStringKeyMap } from '#/types/types'
const { t } = useI18n()
const manageStore = useManageStore() as any
const route = useRoute()
const router = useRouter()
@@ -336,9 +337,9 @@ const urlMap: IStringKeyMap = {
const showNewIconList = ['aliyun', 'qiniu', 'tcyun', 's3plist']
const bucketT = $T('MANAGE_MAIN_PAGE_BUCKET')
const galleryT = $T('MANAGE_MAIN_PAGE_GALLERY')
const repositoryT = $T('MANAGE_MAIN_PAGE_REPOSITORY')
const bucketT = t('MANAGE_MAIN_PAGE_BUCKET')
const galleryT = t('MANAGE_MAIN_PAGE_GALLERY')
const repositoryT = t('MANAGE_MAIN_PAGE_REPOSITORY')
const menuTitleMap: IStringKeyMap = {
aliyun: bucketT,
@@ -401,8 +402,8 @@ function createNewBucket (picBedName: string) {
window.electron.triggerRPC(IRPCActionType.MANAGE_CREATE_BUCKET, currentAlias, resultMap).then((result: any) => {
if (result) {
ElNotification({
title: $T('MANAGE_MAIN_PAGE_TIPS'),
message: $T('MANAGE_MAIN_PAGE_TIPS_SUCCESS'),
title: t('MANAGE_MAIN_PAGE_TIPS'),
message: t('MANAGE_MAIN_PAGE_TIPS_SUCCESS'),
type: 'success'
})
nweBucketDrawerVisible.value = false
@@ -411,8 +412,8 @@ function createNewBucket (picBedName: string) {
}, 2000)
} else {
ElNotification({
title: $T('MANAGE_MAIN_PAGE_TIPS'),
message: $T('MANAGE_MAIN_PAGE_TIPS_FAILED'),
title: t('MANAGE_MAIN_PAGE_TIPS'),
message: t('MANAGE_MAIN_PAGE_TIPS_FAILED'),
type: 'error'
})
}

View File

@@ -6,7 +6,7 @@
justify="center"
style="font-size: 20px; color: black"
>
{{ $T('MANAGE_SETTING_TITLE') }}
{{ $t('MANAGE_SETTING_TITLE') }}
</el-row>
<el-row class="setting-list">
<el-col
@@ -23,13 +23,13 @@
<el-form-item>
<template #label>
<span style="position: absolute; left: 0">
<span>{{ $T('MANAGE_SETTING_CLEAR_CACHE_TITLE') }} </span>
<span>{{ $t('MANAGE_SETTING_CLEAR_CACHE_TITLE') }} </span>
<span style="color: #ff4949">{{ formatFileSize(dbSize) === '' ? 0 : formatFileSize(dbSize) }} </span>
<span> &nbsp;{{ $T('MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE') }} </span>
<span> &nbsp;{{ $t('MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE') }} </span>
<span style="color: #ff4949">{{ dbSizeAvailableRate }} %</span>
<el-tooltip
effect="dark"
:content="$T('MANAGE_SETTING_CLEAR_CACHE_TIPS')"
:content="$t('MANAGE_SETTING_CLEAR_CACHE_TIPS')"
placement="right"
:persistent="false"
teleported
@@ -41,9 +41,9 @@
</span>
</template>
<el-popconfirm
:title="$T('MANAGE_SETTING_CLEAR_CACHE_PROMPT')"
:confirm-button-text="$T('CONFIRM')"
:cancel-button-text="$T('CANCEL')"
:title="$t('MANAGE_SETTING_CLEAR_CACHE_PROMPT')"
:confirm-button-text="$t('CONFIRM')"
:cancel-button-text="$t('CANCEL')"
hide-icon
:persistent="false"
teleported
@@ -55,7 +55,7 @@
plain
style="position: absolute; right: 0"
>
{{ $T('MANAGE_SETTING_CLEAR_CACHE_BUTTON') }}
{{ $t('MANAGE_SETTING_CLEAR_CACHE_BUTTON') }}
</el-button>
</template>
</el-popconfirm>
@@ -75,12 +75,12 @@
style="margin-top: 10px; margin-bottom: 10px; color: #409eff"
:underline="false"
>
{{ $T('MANAGE_SETTING_CUSTOM_PATTERN_TITLE') }}
{{ $t('MANAGE_SETTING_CUSTOM_PATTERN_TITLE') }}
</el-link>
<el-input
v-if="form.customRename"
v-model="form.customRenameFormat"
:placeholder="$T('MANAGE_SETTING_CUSTOM_PATTERN_TIPS')"
:placeholder="$t('MANAGE_SETTING_CUSTOM_PATTERN_TIPS')"
style="width: 100%"
/>
<el-table
@@ -95,7 +95,7 @@
v-for="prop in ['placeholder', 'description', 'placeholderB', 'descriptionB']"
:key="prop"
:prop="prop"
:label="$T('MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE' as any)"
:label="$t('MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE' as any)"
width="150"
/>
</el-table>
@@ -111,10 +111,10 @@
<el-form-item>
<template #label>
<span style="position: absolute; left: 0">
{{ $T('MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE') }}
{{ $t('MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE') }}
<el-tooltip
effect="dark"
:content="$T('MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS')"
:content="$t('MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS')"
placement="right"
:persistent="false"
teleported
@@ -128,7 +128,7 @@
<el-input-number
v-model="form.maxDownloadFileCount"
style="position: absolute; right: 0"
:placeholder="$T('MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS')"
:placeholder="$t('MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS')"
:min="1"
:max="9999"
:step="1"
@@ -137,10 +137,10 @@
<el-form-item>
<template #label>
<span style="position: absolute; left: 0">
{{ $T('MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE') }}
{{ $t('MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE') }}
<el-tooltip
effect="dark"
:content="$T('MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS')"
:content="$t('MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS')"
placement="right"
:persistent="false"
teleported
@@ -154,7 +154,7 @@
<el-input-number
v-model="form.PreSignedExpire"
style="position: absolute; right: 0"
:placeholder="$T('MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS')"
:placeholder="$t('MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS')"
:min="1"
:step="1"
/>
@@ -163,7 +163,7 @@
style="margin-top: 10px; margin-bottom: 10px; color: #409eff"
:underline="false"
>
{{ $T('MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE') }}
{{ $t('MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE') }}
</el-link>
<br>
<el-radio-group v-model="form.pasteFormat">
@@ -172,7 +172,7 @@
:key="item"
:value="item"
>
{{ $T(`MANAGE_SETTING_CHOOSE_COPY_FORMAT_${item.toUpperCase().replace(/-/g, '_')}` as any) }}
{{ $t(`MANAGE_SETTING_CHOOSE_COPY_FORMAT_${item.toUpperCase().replace(/-/g, '_')}` as any) }}
</el-radio>
</el-radio-group>
<el-link
@@ -180,12 +180,12 @@
style="margin-top: 10px; margin-bottom: 10px; color: #409eff"
:underline="false"
>
{{ $T('MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE') }}
{{ $t('MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE') }}
</el-link>
<el-input
v-if="form.pasteFormat === 'custom'"
v-model="form.customPasteFormat"
:placeholder="$T('MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS')"
:placeholder="$t('MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS')"
style="width: 100%"
/>
<div>
@@ -193,13 +193,13 @@
style="margin-top: 10px; margin-bottom: 10px; color: #409eff"
:underline="false"
>
{{ $T('MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE') }}
{{ $t('MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE') }}
</el-link>
</div>
<el-input
v-model="form.downloadDir"
disabled
:placeholder="$T('MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS')"
:placeholder="$t('MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS')"
style="width: 100%; margin-top: 10px"
>
<template #append>
@@ -210,7 +210,7 @@
<el-icon>
<Folder />
</el-icon>
{{ $T('MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON') }}
{{ $t('MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON') }}
</el-button>
</template>
</el-input>
@@ -227,14 +227,15 @@ import { Folder, InfoFilled } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
import { IRPCActionType } from 'root/src/universal/types/enum'
import { onBeforeMount, ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { T as $T } from '@/i18n'
import DynamicSwitch from '@/manage/components/DynamicSwitch.vue'
import { fileCacheDbInstance } from '@/manage/store/bucketFileDb'
import { customRenameFormatTable, formatFileSize } from '@/manage/utils/common'
import { getConfig, saveConfig } from '@/manage/utils/dataSender'
import { IStringKeyMap } from '#/types/types'
const { t } = useI18n()
const form = ref<IStringKeyMap>({
timestampRename: false,
randomStringRename: false,
@@ -291,16 +292,16 @@ const switchFieldsConfigList = switchFieldsList.map(item => ({
configName: item,
segments: [
{
text: $T(`MANAGE_SETTING_${item.toUpperCase()}_TITLE` as any),
text: t(`MANAGE_SETTING_${item.toUpperCase()}_TITLE` as any),
style: 'color: black;'
}
],
tooltip: switchFieldsNoTipsList.includes(item) ? undefined : $T(`MANAGE_SETTING_${item.toUpperCase()}_TIPS` as any),
tooltip: switchFieldsNoTipsList.includes(item) ? undefined : t(`MANAGE_SETTING_${item.toUpperCase()}_TIPS` as any),
activeText: switchFieldsHasActiveTextList.includes(item)
? $T(`MANAGE_SETTING_${item.toUpperCase()}_ON` as any)
? t(`MANAGE_SETTING_${item.toUpperCase()}_ON` as any)
: undefined,
inactiveText: switchFieldsHasActiveTextList.includes(item)
? $T(`MANAGE_SETTING_${item.toUpperCase()}_OFF` as any)
? t(`MANAGE_SETTING_${item.toUpperCase()}_OFF` as any)
: undefined
}))
@@ -309,37 +310,37 @@ const switchFieldsSpecialList = [
configName: 'isDownloadFileKeepDirStructure',
segments: [
{
text: $T('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A'),
text: t('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A'),
style: 'color: black;'
},
{
text: $T('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B'),
text: t('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B'),
style: 'color: orange;'
},
{
text: $T('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C'),
text: t('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C'),
style: 'color: black;'
}
],
tooltip: $T('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS')
tooltip: t('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS')
},
{
configName: 'isDownloadFolderKeepDirStructure',
segments: [
{
text: $T('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A'),
text: t('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A'),
style: 'color: black;'
},
{
text: $T('MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D'),
text: t('MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D'),
style: 'color: coral;'
},
{
text: $T('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C'),
text: t('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C'),
style: 'color: black;'
}
],
tooltip: $T('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS')
tooltip: t('MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS')
}
]
@@ -359,7 +360,7 @@ async function handleDownloadDirClick () {
const handleCellClick = (row: any, column: any) => {
navigator.clipboard.writeText(row[column.property])
ElMessage.success(`${$T('MANAGE_SETTING_COPY_MESSAGE')}${row[column.property]}`)
ElMessage.success(`${t('MANAGE_SETTING_COPY_MESSAGE')}${row[column.property]}`)
}
function handleClearDb () {
@@ -367,10 +368,10 @@ function handleClearDb () {
.delete()
.then(() => {
getIndexDbSize()
ElMessage.success($T('MANAGE_SETTING_CLEAR_CACHE_SUCCESS'))
ElMessage.success(t('MANAGE_SETTING_CLEAR_CACHE_SUCCESS'))
})
.catch(() => {
ElMessage.error($T('MANAGE_SETTING_CLEAR_CACHE_FAILED'))
ElMessage.error(t('MANAGE_SETTING_CLEAR_CACHE_FAILED'))
})
}

View File

@@ -1,72 +1,72 @@
import { IStringKeyMap } from '#/types/types'
const AliyunAreaCodeName: IStringKeyMap = {
'oss-cn-hangzhou': '华东1(杭州)',
'oss-cn-shanghai': '华东2(上海)',
'oss-cn-nanjing': '华东5(南京)',
'oss-cn-fuzhou': '华东6(福州)',
'oss-cn-wuhan': '华中1(武汉)',
'oss-cn-qingdao': '华北1(青岛)',
'oss-cn-beijing': '华北2(北京)',
'oss-cn-zhangjiakou': '华北3(张家口)',
'oss-cn-huhehaote': '华北5(呼和浩特)',
'oss-cn-wulanchabu': '华北6(乌兰察布)',
'oss-cn-shenzhen': '华南1(深圳)',
'oss-cn-heyuan': '华南2(河源)',
'oss-cn-guangzhou': '华南3(广州)',
'oss-cn-chengdu': '西南1(成都)',
'oss-cn-hongkong': '中国香港',
'oss-us-west-1': '美国(硅谷)',
'oss-us-east-1': '美国(弗吉尼亚)',
'oss-ap-northeast-1': '日本(东京)',
'oss-ap-northeast-2': '韩国(首尔)',
'oss-ap-southeast-1': '新加坡',
'oss-ap-southeast-2': '澳大利亚(悉尼)',
'oss-ap-southeast-3': '马来西亚(吉隆坡)',
'oss-ap-southeast-5': '印度尼西亚(雅加达)',
'oss-ap-southeast-6': '菲律宾(马尼拉)',
'oss-ap-southeast-7': '泰国(曼谷)',
'oss-ap-south-1': '印度(孟买)',
'oss-eu-central-1': '德国(法兰克福)',
'oss-eu-west-1': '英国(伦敦)',
'oss-me-east-1': '阿联酋(迪拜)',
'oss-rg-china-mainland': '无地域属性'
}
const QiniuAreaCodeName: IStringKeyMap = {
z0: '华东-浙江',
'cn-east-2': '华东 浙江2',
z1: '华北-河北',
z2: '华南-广东',
na0: '北美-洛杉矶',
as0: '亚太-新加坡',
'ap-northeast-1': '亚太-首尔',
'ap-southeast-2': '亚太-河内'
}
const TencentAreaCodeName: IStringKeyMap = {
'ap-beijing-1': '北京一区',
'ap-beijing': '北京',
'ap-nanjing': '南京',
'ap-shanghai': '上海',
'ap-guangzhou': '广州',
'ap-chengdu': '成都',
'ap-chongqing': '重庆',
'ap-shenzhen-fsi': '深圳金融',
'ap-shagnhai-fsi': '上海金融',
'ap-beijing-fsi': '北京金融',
'ap-hongkong': '香港',
'ap-singapore': '新加坡',
'ap-mumbai': '孟买',
'ap-jakarta': '雅加达',
'ap-seoul': '首尔',
'ap-bangkok': '曼谷',
'ap-tokyo': '东京',
'na-siliconvalley': '硅谷(美西)',
'na-ashburn': '弗吉尼亚(美东)',
'na-toronto': '多伦多',
'sa-saopaulo': '圣保罗',
'eu-frankfurt': '法兰克福'
}
export { AliyunAreaCodeName, QiniuAreaCodeName, TencentAreaCodeName }
import { IStringKeyMap } from '#/types/types'
const AliyunAreaCodeName: IStringKeyMap = {
'oss-cn-hangzhou': '华东1(杭州)',
'oss-cn-shanghai': '华东2(上海)',
'oss-cn-nanjing': '华东5(南京)',
'oss-cn-fuzhou': '华东6(福州)',
'oss-cn-wuhan': '华中1(武汉)',
'oss-cn-qingdao': '华北1(青岛)',
'oss-cn-beijing': '华北2(北京)',
'oss-cn-zhangjiakou': '华北3(张家口)',
'oss-cn-huhehaote': '华北5(呼和浩特)',
'oss-cn-wulanchabu': '华北6(乌兰察布)',
'oss-cn-shenzhen': '华南1(深圳)',
'oss-cn-heyuan': '华南2(河源)',
'oss-cn-guangzhou': '华南3(广州)',
'oss-cn-chengdu': '西南1(成都)',
'oss-cn-hongkong': '中国香港',
'oss-us-west-1': '美国(硅谷)',
'oss-us-east-1': '美国(弗吉尼亚)',
'oss-ap-northeast-1': '日本(东京)',
'oss-ap-northeast-2': '韩国(首尔)',
'oss-ap-southeast-1': '新加坡',
'oss-ap-southeast-2': '澳大利亚(悉尼)',
'oss-ap-southeast-3': '马来西亚(吉隆坡)',
'oss-ap-southeast-5': '印度尼西亚(雅加达)',
'oss-ap-southeast-6': '菲律宾(马尼拉)',
'oss-ap-southeast-7': '泰国(曼谷)',
'oss-ap-south-1': '印度(孟买)',
'oss-eu-central-1': '德国(法兰克福)',
'oss-eu-west-1': '英国(伦敦)',
'oss-me-east-1': '阿联酋(迪拜)',
'oss-rg-china-mainland': '无地域属性'
}
const QiniuAreaCodeName: IStringKeyMap = {
z0: '华东-浙江',
'cn-east-2': '华东 浙江2',
z1: '华北-河北',
z2: '华南-广东',
na0: '北美-洛杉矶',
as0: '亚太-新加坡',
'ap-northeast-1': '亚太-首尔',
'ap-southeast-2': '亚太-河内'
}
const TencentAreaCodeName: IStringKeyMap = {
'ap-beijing-1': '北京一区',
'ap-beijing': '北京',
'ap-nanjing': '南京',
'ap-shanghai': '上海',
'ap-guangzhou': '广州',
'ap-chengdu': '成都',
'ap-chongqing': '重庆',
'ap-shenzhen-fsi': '深圳金融',
'ap-shagnhai-fsi': '上海金融',
'ap-beijing-fsi': '北京金融',
'ap-hongkong': '香港',
'ap-singapore': '新加坡',
'ap-mumbai': '孟买',
'ap-jakarta': '雅加达',
'ap-seoul': '首尔',
'ap-bangkok': '曼谷',
'ap-tokyo': '东京',
'na-siliconvalley': '硅谷(美西)',
'na-ashburn': '弗吉尼亚(美东)',
'na-toronto': '多伦多',
'sa-saopaulo': '圣保罗',
'eu-frankfurt': '法兰克福'
}
export { AliyunAreaCodeName, QiniuAreaCodeName, TencentAreaCodeName }

File diff suppressed because it is too large Load Diff

View File

@@ -1,32 +1,36 @@
import { T as $T } from '@/i18n'
import { useI18n } from 'vue-i18n'
import { IStringKeyMap } from '#/types/types'
import { AliyunAreaCodeName, QiniuAreaCodeName, TencentAreaCodeName } from '~/manage/utils/constants'
import { AliyunAreaCodeName, QiniuAreaCodeName, TencentAreaCodeName } from './bucketConfigCons'
const { t } = useI18n()
export const newBucketConfig: IStringKeyMap = {
tcyun: {
name: $T('MANAGE_NEW_BUCKET_TCYUN_NAME'),
name: t('MANAGE_NEW_BUCKET_TCYUN_NAME'),
icon: 'tcyun',
configOptions: {
BucketName: {
required: true,
description: $T('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC'),
placeholder: $T('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER'),
description: t('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC'),
placeholder: t('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER'),
paraType: 'string',
component: 'input',
default: 'piclist',
rule: [
{
required: true,
message: $T('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A'),
message: t('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A'),
trigger: 'blur'
},
{
validator: (rule: any, value: any, callback: any) => {
const reg = /^[a-z0-9][a-z0-9-]{1,21}[a-z0-9]$/
if (value.length > 23) {
callback(new Error($T('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B')))
callback(new Error(t('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B')))
} else if (!reg.test(value)) {
callback(new Error($T('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C')))
callback(new Error(t('MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C')))
} else {
callback()
}
@@ -37,7 +41,7 @@ export const newBucketConfig: IStringKeyMap = {
},
region: {
required: true,
description: $T('MANAGE_NEW_BUCKET_TCYUN_REGION'),
description: t('MANAGE_NEW_BUCKET_TCYUN_REGION'),
paraType: 'string',
component: 'select',
default: 'ap-nanjing',
@@ -45,43 +49,43 @@ export const newBucketConfig: IStringKeyMap = {
},
acl: {
required: true,
description: $T('MANAGE_NEW_BUCKET_TCYUN_ACL_DESC'),
description: t('MANAGE_NEW_BUCKET_TCYUN_ACL_DESC'),
paraType: 'string',
component: 'select',
default: 'private',
options: {
private: $T('MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE'),
'public-read': $T('MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R'),
'public-read-write': $T('MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW')
private: t('MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE'),
'public-read': t('MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R'),
'public-read-write': t('MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW')
}
}
},
options: ['BucketName', 'region', 'acl']
},
aliyun: {
name: $T('MANAGE_NEW_BUCKET_ALIYUN_NAME'),
name: t('MANAGE_NEW_BUCKET_ALIYUN_NAME'),
icon: 'aliyun',
configOptions: {
BucketName: {
required: true,
description: $T('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC'),
placeholder: $T('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER'),
description: t('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC'),
placeholder: t('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER'),
paraType: 'string',
component: 'input',
default: 'piclist',
rule: [
{
required: true,
message: $T('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A'),
message: t('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A'),
trigger: 'blur'
},
{
validator: (rule: any, value: any, callback: any) => {
const reg = /^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/
if (value.length > 63) {
callback(new Error($T('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B')))
callback(new Error(t('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B')))
} else if (!reg.test(value)) {
callback(new Error($T('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C')))
callback(new Error(t('MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C')))
} else {
callback()
}
@@ -92,7 +96,7 @@ export const newBucketConfig: IStringKeyMap = {
},
region: {
required: true,
description: $T('MANAGE_NEW_BUCKET_ALIYUN_REGION'),
description: t('MANAGE_NEW_BUCKET_ALIYUN_REGION'),
paraType: 'string',
component: 'select',
default: 'oss-cn-hangzhou',
@@ -100,43 +104,43 @@ export const newBucketConfig: IStringKeyMap = {
},
acl: {
required: true,
description: $T('MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC'),
description: t('MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC'),
paraType: 'string',
component: 'select',
default: 'private',
options: {
private: $T('MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE'),
publicRead: $T('MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R'),
publicReadWrite: $T('MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW')
private: t('MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE'),
publicRead: t('MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R'),
publicReadWrite: t('MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW')
}
}
},
options: ['BucketName', 'region', 'acl']
},
qiniu: {
name: $T('MANAGE_NEW_BUCKET_QINIU_NAME'),
name: t('MANAGE_NEW_BUCKET_QINIU_NAME'),
icon: 'qiniu',
configOptions: {
BucketName: {
required: true,
description: $T('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC'),
placeholder: $T('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER'),
description: t('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC'),
placeholder: t('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER'),
paraType: 'string',
component: 'input',
default: 'piclist',
rule: [
{
required: true,
message: $T('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A'),
message: t('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A'),
trigger: 'blur'
},
{
validator: (rule: any, value: any, callback: any) => {
const reg = /^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/
if (value.length > 63) {
callback(new Error($T('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B')))
callback(new Error(t('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B')))
} else if (!reg.test(value)) {
callback(new Error($T('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C')))
callback(new Error(t('MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C')))
} else {
callback()
}
@@ -147,7 +151,7 @@ export const newBucketConfig: IStringKeyMap = {
},
region: {
required: true,
description: $T('MANAGE_NEW_BUCKET_QINIU_REGION'),
description: t('MANAGE_NEW_BUCKET_QINIU_REGION'),
paraType: 'string',
component: 'select',
default: 'z0',
@@ -155,7 +159,7 @@ export const newBucketConfig: IStringKeyMap = {
},
acl: {
required: true,
description: $T('MANAGE_NEW_BUCKET_QINIU_ACL_DESC'),
description: t('MANAGE_NEW_BUCKET_QINIU_ACL_DESC'),
paraType: 'boolean',
component: 'switch',
default: false
@@ -164,42 +168,42 @@ export const newBucketConfig: IStringKeyMap = {
options: ['BucketName', 'region', 'acl']
},
s3plist: {
name: $T('MANAGE_NEW_BUCKET_S3PLIST_NAME'),
name: t('MANAGE_NEW_BUCKET_S3PLIST_NAME'),
icon: 's3plist',
configOptions: {
BucketName: {
required: true,
description: $T('MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC'),
placeholder: $T('MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER'),
description: t('MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC'),
placeholder: t('MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER'),
paraType: 'string',
component: 'input',
default: 'piclist',
rule: [
{
required: true,
message: $T('MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A'),
message: t('MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A'),
trigger: 'blur'
}
]
},
region: {
required: true,
description: $T('MANAGE_NEW_BUCKET_S3PLIST_REGION'),
description: t('MANAGE_NEW_BUCKET_S3PLIST_REGION'),
paraType: 'string',
component: 'input',
default: 'us-east-1'
},
acl: {
required: true,
description: $T('MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC'),
description: t('MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC'),
paraType: 'string',
component: 'select',
default: 'private',
options: {
private: $T('MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE'),
'public-read': $T('MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R'),
'public-read-write': $T('MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW'),
'authenticated-read': $T('MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ')
private: t('MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE'),
'public-read': t('MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R'),
'public-read-write': t('MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW'),
'authenticated-read': t('MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ')
}
}
},

View File

@@ -4,7 +4,7 @@
:style="handleBarActive ? 'height: 85%;' : 'height: 95%;'"
>
<div class="view-title">
{{ $T('GALLERY') }} - {{ filterList.length }}
{{ $t('GALLERY') }} - {{ filterList.length }}
<el-icon
style="margin-left: 4px"
class="cursor-pointer"
@@ -14,11 +14,11 @@
<CaretTop v-show="handleBarActive" />
</el-icon>
<span style="position: absolute; right: 0; top: 0; margin-right: 20px; font-size: 0.8em; color: #fff">
{{ $T('GALLERY_SYNC_DELETE') }}
{{ $t('GALLERY_SYNC_DELETE') }}
<el-switch
v-model="deleteCloud"
:active-text="$T('SETTINGS_OPEN')"
:inactive-text="$T('SETTINGS_CLOSE')"
:active-text="$t('SETTINGS_OPEN')"
:inactive-text="$t('SETTINGS_CLOSE')"
@change="handleDeleteCloudFile"
/>
<el-button
@@ -29,7 +29,7 @@
<el-tooltip
class="item"
effect="dark"
:content="$T('REFRESH')"
:content="$t('REFRESH')"
placement="bottom"
:persistent="false"
teleported
@@ -61,7 +61,7 @@
collapse-tags
size="small"
style="width: 100%"
:placeholder="$T('CHOOSE_SHOWED_PICBED')"
:placeholder="$t('CHOOSE_SHOWED_PICBED')"
:persistent="false"
teleported
>
@@ -97,7 +97,7 @@
v-model="pasteStyle"
size="small"
style="width: 100%"
:placeholder="$T('CHOOSE_PASTE_FORMAT')"
:placeholder="$t('CHOOSE_PASTE_FORMAT')"
:persistent="false"
teleported
@change="handlePasteStyleChange"
@@ -135,20 +135,20 @@
type="primary"
:icon="Sort"
>
{{ $T('MANAGE_BUCKET_SORT_TITLE') }}
{{ $t('MANAGE_BUCKET_SORT_TITLE') }}
</el-button>
<template #dropdown>
<el-dropdown-item @click="sortFile('name')">
{{ $T('MANAGE_BUCKET_SORT_NAME') }}
{{ $t('MANAGE_BUCKET_SORT_NAME') }}
</el-dropdown-item>
<el-dropdown-item @click="sortFile('ext')">
{{ $T('MANAGE_BUCKET_SORT_EXT') }}
{{ $t('MANAGE_BUCKET_SORT_EXT') }}
</el-dropdown-item>
<el-dropdown-item @click="sortFile('time')">
{{ $T('MANAGE_BUCKET_SORT_TIME') }}
{{ $t('MANAGE_BUCKET_SORT_TIME') }}
</el-dropdown-item>
<el-dropdown-item @click="sortFile('check')">
{{ $T('MANAGE_BUCKET_SORT_CHECK') }}
{{ $t('MANAGE_BUCKET_SORT_CHECK') }}
</el-dropdown-item>
</template>
</el-dropdown>
@@ -161,7 +161,7 @@
<el-col :span="5">
<el-input
v-model="searchText"
:placeholder="$T('GALLERY_SEARCH_FILENAME')"
:placeholder="$t('GALLERY_SEARCH_FILENAME')"
size="small"
>
<template #suffix>
@@ -178,7 +178,7 @@
<el-col :span="6">
<el-input
v-model="searchTextURL"
:placeholder="$T('GALLERY_SEARCH_URL')"
:placeholder="$t('GALLERY_SEARCH_URL')"
size="small"
>
<template #suffix>
@@ -205,7 +205,7 @@
:class="{ active: isMultiple(choosedList) }"
@click="multiCopy"
>
{{ $T('COPY') }}
{{ $t('COPY') }}
</div>
</el-col>
<el-col :span="3">
@@ -214,7 +214,7 @@
:class="{ active: filterList.length > 0 }"
@click="() => (isShowBatchRenameDialog = true)"
>
{{ $T('GALLERY_CHANGE_URL') }}
{{ $t('GALLERY_CHANGE_URL') }}
</div>
</el-col>
<el-col :span="3">
@@ -223,7 +223,7 @@
:class="{ active: isMultiple(choosedList) }"
@click="multiRemove"
>
{{ $T('DELETE') }}
{{ $t('DELETE') }}
</div>
</el-col>
<el-col :span="3">
@@ -232,7 +232,7 @@
:class="{ active: filterList.length > 0 }"
@click="toggleSelectAll"
>
{{ isAllSelected ? $T('CANCEL') : $T('SELECT_ALL') }}
{{ isAllSelected ? $t('CANCEL') : $t('SELECT_ALL') }}
</div>
</el-col>
</el-row>
@@ -320,7 +320,7 @@
</el-row>
<el-dialog
v-model="dialogVisible"
:title="$T('CHANGE_IMAGE_URL')"
:title="$t('CHANGE_IMAGE_URL')"
width="500px"
:modal-append-to-body="false"
append-to-body
@@ -328,19 +328,19 @@
<el-input v-model="imgInfo.imgUrl" />
<template #footer>
<el-button @click="dialogVisible = false">
{{ $T('CANCEL') }}
{{ $t('CANCEL') }}
</el-button>
<el-button
type="primary"
@click="confirmModify"
>
{{ $T('CONFIRM') }}
{{ $t('CONFIRM') }}
</el-button>
</template>
</el-dialog>
<el-dialog
v-model="isShowBatchRenameDialog"
:title="$T('CHANGE_IMAGE_URL')"
:title="$t('CHANGE_IMAGE_URL')"
center
align-center
draggable
@@ -352,10 +352,10 @@
style="margin-bottom: 10px"
>
<span>
{{ $T('MANAGE_BUCKET_RENAME_FILE_INPUT_A') + $T('GALLERY_MATCHED') + mathcedCount + ' ' }}
{{ $t('MANAGE_BUCKET_RENAME_FILE_INPUT_A') + $t('GALLERY_MATCHED') + mathcedCount + ' ' }}
<el-tooltip
effect="dark"
:content="$T('MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS')"
:content="$t('MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS')"
placement="right"
:persistent="false"
teleported
@@ -368,7 +368,7 @@
</el-link>
<el-input
v-model="batchRenameMatch"
:placeholder="$T('MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER')"
:placeholder="$t('MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER')"
clearable
/>
<el-link
@@ -376,7 +376,7 @@
style="margin-bottom: 10px; margin-top: 10px"
>
<span>
{{ $T('MANAGE_BUCKET_RENAME_FILE_INPUT_B') }}
{{ $t('MANAGE_BUCKET_RENAME_FILE_INPUT_B') }}
<el-popover
effect="light"
placement="right"
@@ -417,7 +417,7 @@
align="center"
label-style="width: 100px;"
>
{{ $T('MANAGE_BUCKET_RENAME_FILE_TABLE_IID') }}
{{ $t('MANAGE_BUCKET_RENAME_FILE_TABLE_IID') }}
</el-descriptions-item>
</el-descriptions>
</el-popover>
@@ -440,7 +440,7 @@
}
"
>
{{ $T('MANAGE_BUCKET_RENAME_FILE_CANCEL') }}
{{ $t('MANAGE_BUCKET_RENAME_FILE_CANCEL') }}
</el-button>
<el-button
type="primary"
@@ -448,7 +448,7 @@
:icon="Edit"
@click="handleBatchRename()"
>
{{ $T('MANAGE_BUCKET_RENAME_FILE_CONFIRM') }}
{{ $t('MANAGE_BUCKET_RENAME_FILE_CONFIRM') }}
</el-button>
</div>
</el-dialog>
@@ -470,10 +470,10 @@ import {
} from '@element-plus/icons-vue'
import { CheckboxValueType, ElMessage, ElMessageBox, ElNotification } from 'element-plus'
import { computed, nextTick, onActivated, onBeforeMount, onBeforeUnmount, reactive, ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { onBeforeRouteUpdate } from 'vue-router'
import ALLApi from '@/apis/allApi'
import { T as $T } from '@/i18n/index'
import { customRenameFormatTable, customStrMatch, customStrReplace } from '@/manage/utils/common'
import { getConfig, saveConfig } from '@/utils/dataSender'
import $$db from '@/utils/db'
@@ -482,6 +482,8 @@ import { IPasteStyle, IRPCActionType } from '#/types/enum'
import { ICheckBoxValueType, IGalleryItem, ImgInfo, IObj, IObjT } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { picBedsCanbeDeleted } from '#/utils/static'
const { t } = useI18n()
type IResult<T> = T & {
id: string
createdAt: number
@@ -516,8 +518,8 @@ const pasteStyleMap = {
}
const useShortUrl = ref<string>('')
const shortURLMap = {
[$T('UPLOAD_SHORT_URL')]: $T('UPLOAD_SHORT_URL'),
[$T('UPLOAD_NORMAL_URL')]: $T('UPLOAD_NORMAL_URL')
[t('UPLOAD_SHORT_URL')]: t('UPLOAD_SHORT_URL'),
[t('UPLOAD_NORMAL_URL')]: t('UPLOAD_NORMAL_URL')
}
const fileSortNameReverse = ref(false)
const fileSortTimeReverse = ref(false)
@@ -722,7 +724,7 @@ async function copy (item: ImgInfo) {
})
}
const obj = {
title: $T('COPY_LINK_SUCCEED'),
title: t('COPY_LINK_SUCCEED'),
body: result ? result[0] : ''
}
const myNotification = new Notification(obj.title, obj)
@@ -734,9 +736,9 @@ async function copy (item: ImgInfo) {
function remove (item: ImgInfo) {
if (!item.id) return
$confirm($T('TIPS_REMOVE_LINK'), $T('TIPS_NOTICE'), {
confirmButtonText: $T('CONFIRM'),
cancelButtonText: $T('CANCEL'),
$confirm(t('TIPS_REMOVE_LINK'), t('TIPS_NOTICE'), {
confirmButtonText: t('CONFIRM'),
cancelButtonText: t('CANCEL'),
type: 'warning'
})
.then(async () => {
@@ -748,14 +750,14 @@ function remove (item: ImgInfo) {
const result = await ALLApi.delete(item)
if (result) {
ElNotification({
title: $T('GALLERY_SYNC_DELETE_NOTICE_TITLE'),
message: `${item.fileName} ${$T('GALLERY_SYNC_DELETE_NOTICE_SUCCEED')}`,
title: t('GALLERY_SYNC_DELETE_NOTICE_TITLE'),
message: `${item.fileName} ${t('GALLERY_SYNC_DELETE_NOTICE_SUCCEED')}`,
type: 'success'
})
} else {
ElNotification({
title: $T('GALLERY_SYNC_DELETE_NOTICE_TITLE'),
message: `${item.fileName} ${$T('GALLERY_SYNC_DELETE_NOTICE_FAILED')}`,
title: t('GALLERY_SYNC_DELETE_NOTICE_TITLE'),
message: `${item.fileName} ${t('GALLERY_SYNC_DELETE_NOTICE_FAILED')}`,
type: 'error'
})
return true
@@ -764,7 +766,7 @@ function remove (item: ImgInfo) {
await $$db.removeById(item.id!)
window.electron.sendRPC(IRPCActionType.GALLERY_REMOVE_FILES, [file])
const obj = {
title: $T('OPERATION_SUCCEED'),
title: t('OPERATION_SUCCEED'),
body: ''
}
const myNotification = new Notification(obj.title, obj)
@@ -796,7 +798,7 @@ async function confirmModify () {
imgUrl: imgInfo.imgUrl
})
const obj = {
title: $T('CHANGE_IMAGE_URL_SUCCEED'),
title: t('CHANGE_IMAGE_URL_SUCCEED'),
body: imgInfo.imgUrl
}
const myNotification = new Notification(obj.title, obj)
@@ -830,13 +832,13 @@ function multiRemove () {
const multiRemoveNumber = Object.values(choosedList).filter(item => item).length
if (multiRemoveNumber) {
$confirm(
$T('TIPS_WILL_REMOVE_CHOOSED_IMAGES', {
t('TIPS_WILL_REMOVE_CHOOSED_IMAGES', {
m: multiRemoveNumber
}),
$T('TIPS_NOTICE'),
t('TIPS_NOTICE'),
{
confirmButtonText: $T('CONFIRM'),
cancelButtonText: $T('CANCEL'),
confirmButtonText: t('CONFIRM'),
cancelButtonText: t('CANCEL'),
type: 'warning'
}
)
@@ -854,8 +856,8 @@ function multiRemove () {
const result = await ALLApi.delete(file)
if (result) {
ElNotification({
title: $T('GALLERY_SYNC_DELETE'),
message: `${file.fileName} ${$T('GALLERY_SYNC_DELETE_NOTICE_SUCCEED')}`,
title: t('GALLERY_SYNC_DELETE'),
message: `${file.fileName} ${t('GALLERY_SYNC_DELETE_NOTICE_SUCCEED')}`,
type: 'success',
duration: multiRemoveNumber > 5 ? 1000 : 2000
})
@@ -863,8 +865,8 @@ function multiRemove () {
await $$db.removeById(key)
} else {
ElNotification({
title: $T('GALLERY_SYNC_DELETE'),
message: `${file.fileName} ${$T('GALLERY_SYNC_DELETE_NOTICE_FAILED')}`,
title: t('GALLERY_SYNC_DELETE'),
message: `${file.fileName} ${t('GALLERY_SYNC_DELETE_NOTICE_FAILED')}`,
type: 'error',
duration: multiRemoveNumber > 5 ? 1000 : 2000
})
@@ -892,7 +894,7 @@ function multiRemove () {
// TODO: check this
// choosedList = {} // 只有删除才能将这个置空
const obj = {
title: $T('OPERATION_SUCCEED'),
title: t('OPERATION_SUCCEED'),
body: ''
}
window.electron.sendRPC(IRPCActionType.GALLERY_REMOVE_FILES, files)
@@ -930,7 +932,7 @@ async function multiCopy () {
}
}
const obj = {
title: $T('BATCH_COPY_LINK_SUCCEED'),
title: t('BATCH_COPY_LINK_SUCCEED'),
body: copyString.join('\n')
}
const myNotification = new Notification(obj.title, obj)
@@ -952,7 +954,7 @@ async function handlePasteStyleChange (val: string) {
}
function handleUseShortUrlChange (value: string) {
saveConfig(configPaths.settings.useShortUrl, value === $T('UPLOAD_SHORT_URL'))
saveConfig(configPaths.settings.useShortUrl, value === t('UPLOAD_SHORT_URL'))
useShortUrl.value = value
}
@@ -1005,7 +1007,7 @@ function sortFile (type: 'name' | 'time' | 'ext' | 'check') {
function handleBatchRename () {
isShowBatchRenameDialog.value = false
if (batchRenameMatch.value === '') {
ElMessage.warning($T('MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG'))
ElMessage.warning(t('MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG'))
return
}
let matchedFiles = [] as any[]
@@ -1015,7 +1017,7 @@ function handleBatchRename () {
}
})
if (matchedFiles.length === 0) {
ElMessage.warning($T('MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2'))
ElMessage.warning(t('MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2'))
return
}
for (const matchedFile of matchedFiles) {
@@ -1023,7 +1025,7 @@ function handleBatchRename () {
}
matchedFiles = matchedFiles.filter((item: any) => item.imgUrl !== item.newUrl)
if (matchedFiles.length === 0) {
ElMessage.warning($T('MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3'))
ElMessage.warning(t('MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3'))
}
for (let i = 0; i < matchedFiles.length; i++) {
matchedFiles[i].newUrl = matchedFiles[i].newUrl.replaceAll('{auto}', (i + 1).toString())
@@ -1044,7 +1046,7 @@ function handleBatchRename () {
Promise.all(promiseList)
.then(() => {
const obj = {
title: $T('OPERATION_SUCCEED'),
title: t('OPERATION_SUCCEED'),
body: ''
}
const myNotification = new Notification(obj.title, obj)
@@ -1059,11 +1061,11 @@ function handleBatchRename () {
}
if (duplicateFilesNum > 0) {
ElMessageBox.confirm(
`${$T('MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A')} ${duplicateFilesNum} ${$T('MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B')}`,
$T('MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C'),
`${t('MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A')} ${duplicateFilesNum} ${t('MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B')}`,
t('MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C'),
{
confirmButtonText: $T('MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM'),
cancelButtonText: $T('MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL'),
confirmButtonText: t('MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM'),
cancelButtonText: t('MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL'),
type: 'warning'
}
)
@@ -1071,7 +1073,7 @@ function handleBatchRename () {
rename()
})
.catch(() => {
ElMessage.info($T('MANAGE_BUCKET_BATCH_RENAME_CANCEL'))
ElMessage.info(t('MANAGE_BUCKET_BATCH_RENAME_CANCEL'))
})
} else {
rename()
@@ -1085,8 +1087,8 @@ onBeforeUnmount(() => {
onActivated(async () => {
pasteStyle.value = (await getConfig(configPaths.settings.pasteStyle)) || IPasteStyle.MARKDOWN
useShortUrl.value = (await getConfig(configPaths.settings.useShortUrl))
? $T('UPLOAD_SHORT_URL')
: $T('UPLOAD_NORMAL_URL')
? t('UPLOAD_SHORT_URL')
: t('UPLOAD_NORMAL_URL')
initDeleteCloud()
})
</script>

View File

@@ -33,18 +33,19 @@
</template>
<script lang="ts" setup>
import { IpcRendererEvent } from 'electron'
import type { IpcRendererEvent } from 'electron'
import { ElMessage as $message } from 'element-plus'
import type { IConfig } from 'piclist'
import { onBeforeMount, onBeforeUnmount, ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { T as $T } from '@/i18n/index'
import { getConfig } from '@/utils/dataSender'
import { osGlobal } from '@/utils/global'
import { IRPCActionType } from '#/types/enum'
import { IFileWithPath } from '#/types/types'
import { isUrl } from '#/utils/common'
const { t } = useI18n()
const logoPath = ref('')
const dragover = ref(false)
const progress = ref(0)
@@ -114,7 +115,7 @@ function onDrop (e: DragEvent) {
if (isUrl(str)) {
window.electron.sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, [{ path: str }])
} else {
$message.error($T('TIPS_DRAG_VALID_PICTURE_OR_URL'))
$message.error(t('TIPS_DRAG_VALID_PICTURE_OR_URL'))
}
}
}
@@ -132,7 +133,7 @@ function handleURLDrag (items: DataTransferItemList, dataTransfer: DataTransfer)
}
])
} else {
$message.error($T('TIPS_DRAG_VALID_PICTURE_OR_URL'))
$message.error(t('TIPS_DRAG_VALID_PICTURE_OR_URL'))
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
<template>
<div id="plugin-view">
<div class="view-title">
{{ $T('PLUGIN_SETTINGS') }} -
{{ $t('PLUGIN_SETTINGS') }} -
<el-tooltip
:content="pluginListToolTip"
placement="right"
@@ -48,7 +48,7 @@
>
<el-input
v-model="searchText"
:placeholder="$T('PLUGIN_SEARCH_PLACEHOLDER')"
:placeholder="$t('PLUGIN_SEARCH_PLACEHOLDER')"
size="small"
>
<template #suffix>
@@ -132,20 +132,20 @@
class="config-button install"
@click="installPlugin(item)"
>
{{ $T('PLUGIN_INSTALL') }}
{{ $t('PLUGIN_INSTALL') }}
</span>
<span
v-else-if="item.ing"
class="config-button ing"
>
{{ $T('PLUGIN_INSTALLING') }}
{{ $t('PLUGIN_INSTALLING') }}
</span>
</template>
<span
v-else
class="config-button ing"
>
{{ $T('PLUGIN_INSTALLED') }}
{{ $t('PLUGIN_INSTALLED') }}
</span>
</template>
<template v-else>
@@ -153,7 +153,7 @@
v-if="item.ing"
class="config-button ing"
>
{{ $T('PLUGIN_DOING_SOMETHING') }}
{{ $t('PLUGIN_DOING_SOMETHING') }}
</span>
<template v-else>
<el-icon
@@ -190,14 +190,14 @@
round
@click="reloadApp"
>
{{ $T('TIPS_NEED_RELOAD') }}
{{ $t('TIPS_NEED_RELOAD') }}
</el-button>
</el-row>
<el-dialog
v-model="dialogVisible"
:modal-append-to-body="false"
:title="
$T('CONFIG_THING', {
$t('CONFIG_THING', {
c: configName
})
"
@@ -216,14 +216,14 @@
round
@click="dialogVisible = false"
>
{{ $T('CANCEL') }}
{{ $t('CANCEL') }}
</el-button>
<el-button
type="primary"
round
@click="handleConfirmConfig"
>
{{ $T('CONFIRM') }}
{{ $t('CONFIRM') }}
</el-button>
</template>
</el-dialog>
@@ -236,9 +236,9 @@ import type { IpcRendererEvent } from 'electron'
import { ElMessageBox } from 'element-plus'
import { debounce, DebouncedFunc } from 'lodash-es'
import { computed, onBeforeMount, onBeforeUnmount, onMounted, reactive, ref, toRaw, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import ConfigForm from '@/components/ConfigFormForPlugin.vue'
import { T as $T } from '@/i18n/index'
import { getConfig, saveConfig } from '@/utils/dataSender'
import { osGlobal, updatePicBedGlobal } from '@/utils/global'
import {
@@ -252,6 +252,7 @@ import { INPMSearchResultObject, IPicGoPlugin } from '#/types/types'
import { handleStreamlinePluginName } from '#/utils/common'
import { configPaths } from '#/utils/configPaths'
const { t } = useI18n()
const $confirm = ElMessageBox.confirm
const searchText = ref('')
const pluginList = ref<IPicGoPlugin[]>([])
@@ -263,9 +264,9 @@ const pluginNameList = ref<string[]>([])
const loading = ref(true)
const needReload = ref(false)
const latestVersionMap = reactive<{ [key: string]: string }>({})
const pluginListToolTip = $T('PLUGIN_LIST')
const importLocalPluginToolTip = $T('PLUGIN_IMPORT_LOCAL')
const updateAllToolTip = $T('PLUGIN_UPDATE_ALL')
const pluginListToolTip = t('PLUGIN_LIST')
const importLocalPluginToolTip = t('PLUGIN_IMPORT_LOCAL')
const updateAllToolTip = t('PLUGIN_UPDATE_ALL')
const defaultLogo = ref('this.src=\'/roundLogo.png\'')
const $configForm = ref<InstanceType<typeof ConfigForm> | null>(null)
const npmSearchText = computed(() => {
@@ -440,9 +441,9 @@ function getPluginList () {
function installPlugin (item: IPicGoPlugin) {
if (!item.gui) {
$confirm($T('TIPS_PLUGIN_NOT_GUI_IMPLEMENT'), $T('TIPS_NOTICE'), {
confirmButtonText: $T('CONFIRM'),
cancelButtonText: $T('CANCEL'),
$confirm(t('TIPS_PLUGIN_NOT_GUI_IMPLEMENT'), t('TIPS_NOTICE'), {
confirmButtonText: t('CONFIRM'),
cancelButtonText: t('CANCEL'),
type: 'warning'
})
.then(() => {
@@ -467,8 +468,8 @@ async function handleReload () {
needReload: true
})
needReload.value = true
const successNotification = new Notification($T('PLUGIN_UPDATE_SUCCEED'), {
body: $T('TIPS_NEED_RELOAD')
const successNotification = new Notification(t('PLUGIN_UPDATE_SUCCEED'), {
body: t('TIPS_NEED_RELOAD')
})
successNotification.onclick = () => {
reloadApp()
@@ -499,8 +500,8 @@ async function handleConfirmConfig () {
})
break
}
const successNotification = new Notification($T('SETTINGS_RESULT'), {
body: $T('TIPS_SET_SUCCEED')
const successNotification = new Notification(t('SETTINGS_RESULT'), {
body: t('TIPS_SET_SUCCEED')
})
successNotification.onclick = () => {
return true

View File

@@ -6,7 +6,7 @@
@submit.prevent
>
<el-form-item
:label="$T('FILE_RENAME')"
:label="$t('FILE_RENAME')"
prop="fileName"
:rules="[{ required: true, message: 'file name is required', trigger: 'blur' }]"
>
@@ -35,7 +35,7 @@
size="small"
@click="cancel"
>
{{ $T('CANCEL') }}
{{ $t('CANCEL') }}
</el-button>
<el-button
type="primary"
@@ -43,7 +43,7 @@
size="small"
@click="confirmName"
>
{{ $T('CONFIRM') }}
{{ $t('CONFIRM') }}
</el-button>
</div>
</el-row>
@@ -56,7 +56,6 @@ import type { IpcRendererEvent } from 'electron'
import type { FormInstance } from 'element-plus'
import { onBeforeMount, onBeforeUnmount, reactive, ref } from 'vue'
import { T as $T } from '@/i18n/index'
import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME } from '#/events/constants'
const id = ref<string | null>(null)

View File

@@ -1,7 +1,7 @@
<template>
<div id="shortcut-page">
<div class="view-title">
{{ $T('SETTINGS_SET_SHORTCUT') }}
{{ $t('SETTINGS_SET_SHORTCUT') }}
</div>
<el-row>
<el-col
@@ -15,28 +15,28 @@
header-cell-class-name="shortcut-page-table-border"
cell-class-name="shortcut-page-table-border"
>
<el-table-column :label="$T('SHORTCUT_NAME')">
<el-table-column :label="$t('SHORTCUT_NAME')">
<template #default="scope">
{{ scope.row.label ? scope.row.label : scope.row.name }}
</template>
</el-table-column>
<el-table-column
width="160px"
:label="$T('SHORTCUT_BIND')"
:label="$t('SHORTCUT_BIND')"
prop="key"
/>
<el-table-column :label="$T('SHORTCUT_STATUS')">
<el-table-column :label="$t('SHORTCUT_STATUS')">
<template #default="scope">
<el-tag
size="small"
:type="scope.row.enable ? 'success' : 'danger'"
>
{{ scope.row.enable ? $T('SHORTCUT_ENABLED') : $T('SHORTCUT_DISABLED') }}
{{ scope.row.enable ? $t('SHORTCUT_ENABLED') : $t('SHORTCUT_DISABLED') }}
</el-tag>
</template>
</el-table-column>
<el-table-column
:label="$T('SHORTCUT_SOURCE')"
:label="$t('SHORTCUT_SOURCE')"
width="100px"
>
<template #default="scope">
@@ -44,7 +44,7 @@
</template>
</el-table-column>
<el-table-column
:label="$T('SHORTCUT_HANDLE')"
:label="$t('SHORTCUT_HANDLE')"
width="100px"
>
<template #default="scope">
@@ -58,7 +58,7 @@
:link="true"
@click="toggleEnable(scope.row)"
>
{{ scope.row.enable ? $T('SHORTCUT_DISABLE') : $T('SHORTCUT_ENABLE') }}
{{ scope.row.enable ? $t('SHORTCUT_DISABLE') : $t('SHORTCUT_ENABLE') }}
</el-button>
<el-button
class="edit"
@@ -67,7 +67,7 @@
:link="true"
@click="openKeyBindingDialog(scope.row, scope.$index)"
>
{{ $T('SHORTCUT_EDIT') }}
{{ $t('SHORTCUT_EDIT') }}
</el-button>
</el-row>
</template>
@@ -77,7 +77,7 @@
</el-row>
<el-dialog
v-model="keyBindingVisible"
:title="$T('SHORTCUT_CHANGE_UPLOAD')"
:title="$t('SHORTCUT_CHANGE_UPLOAD')"
:modal-append-to-body="false"
append-to-body
>
@@ -99,14 +99,14 @@
round
@click="cancelKeyBinding"
>
{{ $T('CANCEL') }}
{{ $t('CANCEL') }}
</el-button>
<el-button
type="primary"
round
@click="confirmKeyBinding"
>
{{ $T('CONFIRM') }}
{{ $t('CONFIRM') }}
</el-button>
</template>
</el-dialog>
@@ -116,7 +116,6 @@
<script lang="ts" setup>
import { onBeforeMount, onBeforeUnmount, ref, watch } from 'vue'
import { T as $T } from '@/i18n'
import { getConfig } from '@/utils/dataSender'
import keyBinding from '@/utils/key-binding'
import { IRPCActionType } from '#/types/enum'

View File

@@ -9,10 +9,10 @@
>
<el-row class="toolbox-header__text">
<el-row class="toolbox-header__title">
{{ $T('TOOLBOX_TITLE') }}
{{ $t('TOOLBOX_TITLE') }}
</el-row>
<el-row class="toolbox-header__sub-title">
{{ $T('TOOLBOX_SUB_TITLE') }}
{{ $t('TOOLBOX_SUB_TITLE') }}
</el-row>
</el-row>
</el-row>
@@ -24,12 +24,12 @@
:disabled="isLoading"
@click="handleCheck"
>
{{ $T('TOOLBOX_START_SCAN') }}
{{ $t('TOOLBOX_START_SCAN') }}
</el-button>
</template>
<template v-else-if="isAllSuccess">
<div class="toolbox-tips">
{{ $T('TOOLBOX_SUCCESS_TIPS') }}
{{ $t('TOOLBOX_SUCCESS_TIPS') }}
</div>
</template>
<template v-else-if="!isAllSuccess">
@@ -39,19 +39,19 @@
round
@click="handleFix"
>
{{ $T('TOOLBOX_START_FIX') }}
{{ $t('TOOLBOX_START_FIX') }}
</el-button>
</template>
<template v-else>
<div class="toolbox-cant-fix toolbox-tips">
{{ $T('TOOLBOX_CANT_AUTO_FIX') }}
{{ $t('TOOLBOX_CANT_AUTO_FIX') }}
<el-button
type="primary"
round
class="toolbox-cant-fix__btn"
@click="handleCheck"
>
{{ $T('TOOLBOX_RE_SCAN') }}
{{ $t('TOOLBOX_RE_SCAN') }}
</el-button>
</div>
</template>
@@ -95,41 +95,42 @@
<script lang="ts" setup>
import { ElMessageBox } from 'element-plus'
import { IToolboxCheckRes } from 'root/src/universal/types/rpc'
import { IToolboxMap } from 'root/src/universal/types/view'
import { computed, onUnmounted, reactive, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import ToolboxHandler from '@/components/ToolboxHandler.vue'
import ToolboxStatusIcon from '@/components/ToolboxStatusIcon.vue'
import { T as $T } from '@/i18n'
import { IRPCActionType, IToolboxItemCheckStatus, IToolboxItemType } from '#/types/enum'
import { IToolboxCheckRes } from '#/types/rpc'
import { IToolboxMap } from '#/types/view'
const { t } = useI18n()
const $confirm = ElMessageBox.confirm
const defaultLogo = ref('/roundLogo.png')
const activeTypes = ref<IToolboxItemType[]>([])
const fixList = reactive<IToolboxMap>({
[IToolboxItemType.IS_CONFIG_FILE_BROKEN]: {
title: $T('TOOLBOX_CHECK_CONFIG_FILE_BROKEN'),
title: t('TOOLBOX_CHECK_CONFIG_FILE_BROKEN'),
status: IToolboxItemCheckStatus.INIT,
handlerText: $T('SETTINGS_OPEN_CONFIG_FILE'),
handlerText: t('SETTINGS_OPEN_CONFIG_FILE'),
handler (value: string) {
window.electron.sendRPC(IRPCActionType.OPEN_FILE, value)
}
},
[IToolboxItemType.IS_GALLERY_FILE_BROKEN]: {
title: $T('TOOLBOX_CHECK_GALLERY_FILE_BROKEN'),
title: t('TOOLBOX_CHECK_GALLERY_FILE_BROKEN'),
status: IToolboxItemCheckStatus.INIT
},
[IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD]: {
title: $T('TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD'), // picgo-image-clipboard folder
title: t('TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD'), // picgo-image-clipboard folder
status: IToolboxItemCheckStatus.INIT,
handlerText: $T('OPEN_FILE_PATH'),
handlerText: t('OPEN_FILE_PATH'),
handler (value: string) {
window.electron.sendRPC(IRPCActionType.OPEN_FILE, value)
}
},
[IToolboxItemType.HAS_PROBLEM_WITH_PROXY]: {
title: $T('TOOLBOX_CHECK_PROBLEM_WITH_PROXY'),
title: t('TOOLBOX_CHECK_PROBLEM_WITH_PROXY'),
status: IToolboxItemCheckStatus.INIT,
hasNoFixMethod: true
}
@@ -210,9 +211,9 @@ const handleFix = async () => {
}
})
$confirm($T('TOOLBOX_FIX_DONE_NEED_RELOAD'), $T('TIPS_NOTICE'), {
confirmButtonText: $T('CONFIRM'),
cancelButtonText: $T('CANCEL'),
$confirm(t('TOOLBOX_FIX_DONE_NEED_RELOAD'), t('TIPS_NOTICE'), {
confirmButtonText: t('CONFIRM'),
cancelButtonText: t('CANCEL'),
type: 'info'
})
.then(() => {

View File

@@ -4,7 +4,7 @@
class="open-main-window"
@click="openSettingWindow"
>
{{ $T('OPEN_MAIN_WINDOW') }}
{{ $t('OPEN_MAIN_WINDOW') }}
</div>
<div class="content">
<div
@@ -12,7 +12,7 @@
class="wait-upload-img"
>
<div class="list-title">
{{ $T('WAIT_TO_UPLOAD') }}
{{ $t('WAIT_TO_UPLOAD') }}
</div>
<div
v-for="(item, index) in clipboardFiles"
@@ -33,7 +33,7 @@
</div>
<div class="uploaded-img">
<div class="list-title">
{{ $T('ALREADY_UPLOAD') }}
{{ $t('ALREADY_UPLOAD') }}
</div>
<div
v-for="item in files"
@@ -64,8 +64,8 @@
<script lang="ts" setup>
import type { IpcRendererEvent } from 'electron'
import { onBeforeMount, onBeforeUnmount, reactive, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import { T as $T } from '@/i18n/index'
import { getConfig } from '@/utils/dataSender'
import $$db from '@/utils/db'
import { IPasteStyle, IRPCActionType, IWindowList } from '#/types/enum'
@@ -73,6 +73,8 @@ import { ImgInfo } from '#/types/types'
import { handleUrlEncode } from '#/utils/common'
import { configPaths } from '#/utils/configPaths'
const { t } = useI18n()
type IResult<T> = T & {
id: string
createdAt: number
@@ -80,7 +82,7 @@ type IResult<T> = T & {
}
const files = ref<IResult<ImgInfo>[]>([])
const notification = reactive({
title: $T('COPY_LINK_SUCCEED'),
title: t('COPY_LINK_SUCCEED'),
body: ''
})

View File

@@ -9,7 +9,7 @@
<el-tooltip
placement="top"
effect="light"
:content="$T('UPLOAD_VIEW_HINT')"
:content="$t('UPLOAD_VIEW_HINT')"
:persistent="false"
teleported
>
@@ -34,7 +34,7 @@
style="margin-left: 6px"
@click="handleImageProcess"
>
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_NAME') }}
{{ $t('UPLOAD_PAGE_IMAGE_PROCESS_NAME') }}
</el-button>
</div>
<div
@@ -52,8 +52,8 @@
<UploadFilled />
</el-icon>
<div class="upload-dragger__text">
{{ $T('DRAG_FILE_TO_HERE') }}
<span>{{ $T('CLICK_TO_UPLOAD') }}</span>
{{ $t('DRAG_FILE_TO_HERE') }}
<span>{{ $t('CLICK_TO_UPLOAD') }}</span>
</div>
<input
id="file-uploader"
@@ -73,7 +73,7 @@
<div class="paste-style">
<div class="el-col-12">
<div class="paste-style__text">
{{ $T('LINK_FORMAT') }}
{{ $t('LINK_FORMAT') }}
</div>
<el-radio-group
v-model="pasteStyle"
@@ -98,19 +98,19 @@
:value="true"
style="border-radius: 5px"
>
{{ $T('UPLOAD_SHORT_URL') }}
{{ $t('UPLOAD_SHORT_URL') }}
</el-radio-button>
<el-radio-button
:value="false"
style="border-radius: 5px"
>
{{ $T('UPLOAD_NORMAL_URL') }}
{{ $t('UPLOAD_NORMAL_URL') }}
</el-radio-button>
</el-radio-group>
</div>
<div class="el-col-8">
<div class="paste-style__text">
{{ $T('QUICK_UPLOAD') }}
{{ $t('QUICK_UPLOAD') }}
</div>
<el-button
type="primary"
@@ -120,7 +120,7 @@
style="width: 50%"
@click="uploadClipboardFiles"
>
{{ $T('CLIPBOARD_PICTURE') }}
{{ $t('CLIPBOARD_PICTURE') }}
</el-button>
<el-button
type="primary"
@@ -138,7 +138,7 @@
</el-row>
<el-dialog
v-model="imageProcessDialogVisible"
:title="$T('UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE')"
:title="$t('UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE')"
width="50%"
draggable
center
@@ -155,10 +155,10 @@ import { CaretBottom, UploadFilled } from '@element-plus/icons-vue'
import type { IpcRendererEvent } from 'electron'
import { ElMessage as $message } from 'element-plus'
import { onBeforeMount, onBeforeUnmount, ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router'
import ImageProcessSetting from '@/components/ImageProcessSetting.vue'
import { T as $T } from '@/i18n'
import { PICBEDS_PAGE } from '@/router/config'
import $bus from '@/utils/bus'
import { getConfig, saveConfig } from '@/utils/dataSender'
@@ -170,6 +170,7 @@ import { IFileWithPath, IUploaderConfigItem } from '#/types/types'
import { isUrl } from '#/utils/common'
import { configPaths } from '#/utils/configPaths'
const { t } = useI18n()
useDragEventListeners()
const $router = useRouter()
@@ -277,7 +278,7 @@ function onDrop (e: DragEvent) {
if (isUrl(str)) {
window.electron.sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, [{ path: str }])
} else {
$message.error($T('TIPS_DRAG_VALID_PICTURE_OR_URL'))
$message.error(t('TIPS_DRAG_VALID_PICTURE_OR_URL'))
}
}
}
@@ -295,7 +296,7 @@ function handleURLDrag (items: DataTransferItemList, dataTransfer: DataTransfer)
}
])
} else {
$message.error($T('TIPS_DRAG_VALID_PICTURE_OR_URL'))
$message.error(t('TIPS_DRAG_VALID_PICTURE_OR_URL'))
}
}
@@ -349,8 +350,8 @@ async function uploadURLFiles () {
const str = await navigator.clipboard.readText()
$bus.emit(SHOW_INPUT_BOX, {
value: isUrl(str) ? str : '',
title: $T('TIPS_INPUT_URL'),
placeholder: $T('TIPS_HTTP_PREFIX')
title: t('TIPS_INPUT_URL'),
placeholder: t('TIPS_HTTP_PREFIX')
})
}
@@ -363,7 +364,7 @@ function handleInputBoxValue (val: string) {
}
])
} else {
$message.error($T('TIPS_INPUT_VALID_URL'))
$message.error(t('TIPS_INPUT_VALID_URL'))
}
}

View File

@@ -1,7 +1,7 @@
<template>
<div id="config-list-view">
<div class="view-title">
{{ $T('SETTINGS') }}
{{ $t('SETTINGS') }}
</div>
<el-row
:gutter="15"
@@ -34,7 +34,7 @@
v-if="defaultConfigId === item._id"
class="default-text"
>
{{ $T('SELECTED_SETTING_HINT') }}
{{ $t('SELECTED_SETTING_HINT') }}
</div>
<div class="operation-container">
<el-icon
@@ -84,7 +84,7 @@
:disabled="store?.state.defaultPicBed === type"
@click="setDefaultPicBed(type)"
>
{{ $T('SETTINGS_SET_DEFAULT_PICBED') }}
{{ $t('SETTINGS_SET_DEFAULT_PICBED') }}
</el-button>
</el-row>
</div>
@@ -94,16 +94,17 @@
import { Delete, Edit, Plus } from '@element-plus/icons-vue'
import dayjs from 'dayjs'
import { onBeforeMount, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import { onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router'
import { useStore } from '@/hooks/useStore'
import { T as $T } from '@/i18n/index'
import { PICBEDS_PAGE, UPLOADER_CONFIG_PAGE } from '@/router/config'
import { saveConfig } from '@/utils/dataSender'
import { IRPCActionType } from '#/types/enum'
import { IStringKeyMap, IUploaderConfigItem } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
@@ -185,8 +186,8 @@ function setDefaultPicBed (type: string) {
store?.setDefaultPicBed(type)
const currentConfigName = curConfigList.value.find(item => item._id === defaultConfigId.value)?._configName
window.electron.sendRPC(IRPCActionType.TRAY_SET_TOOL_TIP, `${type} ${currentConfigName || ''}`)
const successNotification = new Notification($T('SETTINGS_DEFAULT_PICBED'), {
body: $T('TIPS_SET_SUCCEED')
const successNotification = new Notification(t('SETTINGS_DEFAULT_PICBED'), {
body: t('TIPS_SET_SUCCEED')
})
successNotification.onclick = () => {
return true

View File

@@ -12,7 +12,7 @@
<span
class="view-title-text"
@click="handleNameClick"
> {{ picBedName }} {{ $T('SETTINGS') }}</span>
> {{ picBedName }} {{ $t('SETTINGS') }}</span>
<el-icon>
<Link />
</el-icon>
@@ -23,7 +23,7 @@
style="margin-left: 6px"
@click="handleCopyApi"
>
{{ $T('UPLOAD_PAGE_COPY_UPLOAD_API') }}
{{ $t('UPLOAD_PAGE_COPY_UPLOAD_API') }}
</el-button>
</div>
<config-form
@@ -40,14 +40,14 @@
round
@click="handleReset"
>
{{ $T('RESET_PICBED_CONFIG') }}
{{ $t('RESET_PICBED_CONFIG') }}
</el-button>
<el-button
type="success"
round
@click="handleConfirm"
>
{{ $T('CONFIRM') }}
{{ $t('CONFIRM') }}
</el-button>
<el-button
round
@@ -62,7 +62,7 @@
:disabled="picBedConfigList.length === 0"
teleported
>
{{ $T('MANAGE_LOGIN_PAGE_PANE_IMPORT') }}
{{ $t('MANAGE_LOGIN_PAGE_PANE_IMPORT') }}
<template #dropdown>
<el-dropdown-item
v-for="i in picBedConfigList"
@@ -82,7 +82,7 @@
class="single"
>
<div class="notice">
{{ $T('SETTINGS_NOT_CONFIG_OPTIONS') }}
{{ $t('SETTINGS_NOT_CONFIG_OPTIONS') }}
</div>
</div>
</el-col>
@@ -95,16 +95,17 @@ import { Link } from '@element-plus/icons-vue'
import dayjs from 'dayjs'
import { ElDropdown, ElMessage } from 'element-plus'
import { onBeforeMount, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import { useRoute, useRouter } from 'vue-router'
import ConfigForm from '@/components/ConfigForm.vue'
import { T as $T } from '@/i18n/index'
import { getConfig } from '@/utils/dataSender'
import { II18nLanguage, IRPCActionType } from '#/types/enum'
import { IPicGoPluginConfig, IStringKeyMap, IUploaderConfigItem, IUploaderConfigListItem } from '#/types/types'
import { configPaths } from '#/utils/configPaths'
import { picBedManualUrlList } from '#/utils/static'
const { t } = useI18n()
const type = ref('')
const config = ref<IPicGoPluginConfig[]>([])
const picBedConfigList = ref<IUploaderConfigListItem[]>([])
@@ -124,8 +125,8 @@ const handleConfirm = async () => {
const result = (await $configForm.value?.validate()) || false
if (result !== false) {
await window.electron.triggerRPC<void>(IRPCActionType.UPLOADER_UPDATE_CONFIG, type.value, result?._id, result)
const successNotification = new Notification($T('SETTINGS_RESULT'), {
body: $T('TIPS_SET_SUCCEED')
const successNotification = new Notification(t('SETTINGS_RESULT'), {
body: t('TIPS_SET_SUCCEED')
})
successNotification.onclick = () => {
return true
@@ -167,8 +168,8 @@ async function handleConfigImport (configItem: IUploaderConfigListItem) {
const handleReset = async () => {
await window.electron.triggerRPC<void>(IRPCActionType.UPLOADER_RESET_CONFIG, type.value, $route.params.configId)
const successNotification = new Notification($T('SETTINGS_RESULT'), {
body: $T('TIPS_RESET_SUCCEED')
const successNotification = new Notification(t('SETTINGS_RESULT'), {
body: t('TIPS_RESET_SUCCEED')
})
successNotification.onclick = () => {
return true
@@ -197,7 +198,7 @@ async function handleCopyApi () {
}
const apiUrl = `http://${host === '0.0.0.0' ? '127.0.0.1' : host}:${port}/upload?picbed=${$route.params.type}&configName=${picBedConfig._configName}${serverKey ? `&key=${serverKey}` : ''}`
window.electron.clipboard.writeText(apiUrl)
ElMessage.success(`${$T('MANAGE_BUCKET_COPY_SUCCESS')} ${apiUrl}`)
ElMessage.success(`${t('MANAGE_BUCKET_COPY_SUCCESS')} ${apiUrl}`)
} catch (error) {
console.log(error)
ElMessage.error('Copy failed')

View File

@@ -1,22 +0,0 @@
import pkg from 'root/package.json'
import { handleTalkingDataEvent } from '@/utils/common'
import { TALKING_DATA_APPID, TALKING_DATA_EVENT } from '#/events/constants'
import { ITalkingDataOptions } from '#/types/types'
const { version } = pkg
export const initTalkingData = () => {
setTimeout(() => {
const talkingDataScript = document.createElement('script')
talkingDataScript.src = `http://sdk.talkingdata.com/app/h5/v1?appid=${TALKING_DATA_APPID}&vn=${version}&vc=${version}`
const head = document.getElementsByTagName('head')[0]
head.appendChild(talkingDataScript)
}, 0)
}
window.electron.ipcRendererOn(TALKING_DATA_EVENT, (_, data: ITalkingDataOptions) => {
handleTalkingDataEvent(data)
})

View File

@@ -1,17 +1,5 @@
import { isReactive, isRef, toRaw, unref } from 'vue'
import { ITalkingDataOptions } from '#/types/types'
export const handleTalkingDataEvent = (data: ITalkingDataOptions) => {
try {
const { EventId, Label = '', MapKv = {} } = data
MapKv.from = window.location.href
window.TDAPP.onEvent(EventId, Label, MapKv)
} catch (e) {
console.error(e)
}
}
/**
* get raw data from reactive or ref
*/

View File

@@ -1,5 +1,4 @@
import { IRPCActionType } from 'root/src/universal/types/enum'
import { IRPCActionType } from '#/types/enum'
import { IObj } from '#/types/types'
export function saveConfig (config: IObj | string, value?: any) {

View File

@@ -1,14 +0,0 @@
import { ILogType, IRPCActionType } from '#/types/enum'
export const deleteLog = (fileName?: string, type?: string, isSuccess = true, msg?: string) => {
window.electron.sendRPC(
IRPCActionType.GALLERY_LOG_DELETE_MSG,
msg || `Delete ${fileName} on ${type} success`,
isSuccess ? ILogType.success : ILogType.error
)
}
export const deleteFailedLog = (fileName: string, type: string, error: any) => {
deleteLog(fileName, type, false)
window.electron.sendRPC(IRPCActionType.GALLERY_LOG_DELETE_MSG, error, ILogType.error)
}

View File

@@ -1,9 +1,6 @@
export const SHOW_INPUT_BOX = 'SHOW_INPUT_BOX'
export const SHOW_INPUT_BOX_RESPONSE = 'SHOW_INPUT_BOX_RESPONSE'
export const TOGGLE_SHORTKEY_MODIFIED_MODE = 'TOGGLE_SHORTKEY_MODIFIED_MODE'
// talking data
export const TALKING_DATA_APPID = 'B743C16E2989419A9B02EDE9D1E6A530'
export const TALKING_DATA_EVENT = 'TALKING_DATA_EVENT'
// picgo plugin
export const PICGO_CONFIG_PLUGIN = 'PICGO_CONFIG_PLUGIN'
export const PICGO_HANDLE_PLUGIN_ING = 'PICGO_HANDLE_PLUGIN_ING'

View File

@@ -79,8 +79,6 @@ export enum IRPCActionType {
OPEN_URL = 'OPEN_URL',
OPEN_FILE = 'OPEN_FILE',
HIDE_DOCK = 'HIDE_DOCK',
GET_LANGUAGE_LIST = 'GET_LANGUAGE_LIST',
GET_CURRENT_LANGUAGE = 'GET_CURRENT_LANGUAGE',
SET_CURRENT_LANGUAGE = 'SET_CURRENT_LANGUAGE',
OPEN_WINDOW = 'OPEN_WINDOW',
OPEN_MINI_WINDOW = 'OPEN_MINI_WINDOW',
@@ -154,12 +152,6 @@ export enum IRPCActionType {
GALLERY_REMOVE_BY_ID_DB = 'GALLERY_REMOVE_BY_ID_DB',
GALLERY_INSERT_DB = 'GALLERY_INSERT_DB',
GALLERY_INSERT_DB_BATCH = 'GALLERY_INSERT_DB_BATCH',
GALLERY_LOG_DELETE_MSG = 'GALLERY_LOG_DELETE_MSG',
GALLERY_DELETE_SFTP_FILE = 'GALLERY_DELETE_SFTP_FILE',
GALLERY_DELETE_AWS_S3_FILE = 'GALLERY_DELETE_AWS_S3_FILE',
GALLERY_DELETE_DOGE_FILE = 'GALLERY_DELETE_DOGE_FILE',
GALLERY_DELETE_HUAWEI_OSS_FILE = 'GALLERY_DELETE_HUAWEI_OSS_FILE',
// plugin rpc
PLUGIN_GET_LIST = 'PLUGIN_GET_LIST',
PLUGIN_INSTALL = 'PLUGIN_INSTALL',

View File

@@ -9,13 +9,10 @@ export interface ILocales {
UPLOAD_SUCCEED: string
UPLOAD_FAILED: string
UPLOAD_PROGRESS: string
OPERATION_SUCCEED: string
OPERATION_FAILED: string
UPLOADING: string
QUICK_UPLOAD: string
UPLOAD_BY_CLIPBOARD: string
SHOW_PICBED_QRCODE: string
PICBED_QRCODE: string
ENABLE: string
DISABLE: string
CONFIG_THING: string
@@ -29,18 +26,6 @@ export interface ILocales {
STOP_WATCH_CLIPBOARD: string
OPEN_TOOLBOX: string
TOOLBOX: string
TOOLBOX_TITLE: string
TOOLBOX_SUB_TITLE: string
TOOLBOX_CHECK_CONFIG_FILE_BROKEN: string
TOOLBOX_CHECK_GALLERY_FILE_BROKEN: string
TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD: string
TOOLBOX_CHECK_PROBLEM_WITH_PROXY: string
TOOLBOX_FIX_DONE_NEED_RELOAD: string
TOOLBOX_CANT_AUTO_FIX: string
TOOLBOX_START_SCAN: string
TOOLBOX_RE_SCAN: string
TOOLBOX_START_FIX: string
TOOLBOX_SUCCESS_TIPS: string
TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: string
TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: string
TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: string
@@ -52,865 +37,12 @@ export interface ILocales {
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS: string
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS: string
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS: string
MANUAL_PAGE_OPEN_TIP: string
MANUAL_PAGE_OPEN_TIP_TITLE: string
MANUAL_PAGE_OPEN_BY_BROWSER: string
MANUAL_PAGE_OPEN_BY_BUILD_IN: string
MANUAL_PAGE_OPEN_SETTING_TIP: string
UPLOAD_AREA: string
UPLOAD_VIEW_HINT: string
MANAGE_PAGE: string
GALLERY: string
REFRESH: string
MANUAL: string
PICBEDS_SETTINGS: string
PICLIST_SETTINGS: string
PLUGIN_SETTINGS: string
CHOOSE_PICBED: string
COPY_PICBED_CONFIG: string
COPY_PICBED_CONFIG_SUCCEED: string
INPUT: string
CANCEL: string
CONFIRM: string
RESET_PICBED_CONFIG: string
CHOOSE_SHOWED_PICBED: string
CHOOSE_PASTE_FORMAT: string
COPY: string
DELETE: string
SELECT_ALL: string
CHANGE_IMAGE_URL: string
CHANGE_IMAGE_URL_SUCCEED: string
COPY_LINK_SUCCEED: string
BATCH_COPY_LINK_SUCCEED: string
FILE_RENAME: string
OPEN_FILE_PATH: string
GALLERY_SYNC_DELETE: string
GALLERY_SYNC_DELETE_NOTICE_TITLE: string
GALLERY_SYNC_DELETE_NOTICE_SUCCEED: string
GALLERY_SYNC_DELETE_NOTICE_FAILED: string
GALLERY_CHANGE_URL: string
GALLERY_SEARCH_FILENAME: string
GALLERY_SEARCH_URL: string
GALLERY_MATCHED: string
UPLOAD_PAGE_COPY_UPLOAD_API: string
UPLOAD_PAGE_IMAGE_PROCESS_NAME: string
UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: string
UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: string
UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: string
UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: string
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: string
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: string
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE: string
UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM: string
UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE: string
UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT: string
UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH: string
UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO: string
UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR: string
UPLOAD_PAGE_IMAGE_PROCESS_WMPATH: string
UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION: string
UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF: string
UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: string
UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: string
UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: string
UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: string
UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: string
UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: string
UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: string
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH: string
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT: string
UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT: string
UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH: string
UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT: string
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT: string
UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE: string
UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE: string
UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM: string
UPLOAD_PAGE_IMAGE_PROCESS_CANCEL: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT: string
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER: string
UPLOAD_SHORT_URL: string
UPLOAD_NORMAL_URL: string
SETTINGS: string
SETTINGS_OPEN_CONFIG_FILE: string
SETTINGS_MIGRATE_FROM_PICGO: string
SETTINGS_MIGRATE_FROM_PICGO_TITLE: string
SETTINGS_MIGRATE_FROM_PICGO_CONTENT: string
SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: string
SETTINGS_MIGRATE_FROM_PICGO_FAILED: string
SETTINGS_START_MODE: string
SETTINGS_START_MODE_MINI: string
SETTINGS_START_MODE_MAIN: string
SETTINGS_START_MODE_NO_TRAY: string
SETTINGS_START_MODE_QUIET: string
SETTINGS_CLICK_TO_OPEN: string
SETTINGS_SET_LOG_FILE: string
SETTINGS_CLICK_TO_SET: string
SETTINGS_CLICK_TO_CHECK: string
SETTINGS_SET_SHORTCUT: string
SETTINGS_CUSTOM_LINK_FORMAT: string
SETTINGS_SET_PROXY_AND_MIRROR: string
SETTINGS_SET_SERVER: string
SETTINGS_CHECK_UPDATE: string
SETTINGS_OPEN_UPDATE_HELPER: string
SETTINGS_OPEN: string
SETTINGS_CLOSE: string
SETTINGS_CLOSE_MINI_WINDOW_SYNC: string
SETTINGS_CLOSE_MAIN_WINDOW_SYNC: string
SETTINGS_LAUNCH_ON_BOOT: string
SETTINGS_RENAME_BEFORE_UPLOAD: string
SETTINGS_TIMESTAMP_RENAME: string
SETTINGS_ADVANCED_RENAME: string
SETTINGS_ADVANCED_RENAME_ENABLE: string
SETTINGS_ADVANCED_RENAME_FORMAT: string
SETTINGS_ENABLE_SECOND_PICBED: string
SETTINGS_SET_SECOND_PICBED: string
SETTINGS_OPEN_UPLOAD_TIPS: string
SETTINGS_OPEN_UPLOAD_RESULT_TIPS: string
SETTINGS_MINI_WINDOW_ON_TOP: string
SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD: string
SETTINGS_TIPS_PLACEHOLDER_URL: string
SETTINGS_TIPS_PLACEHOLDER_FILENAME: string
SETTINGS_TIPS_PLACEHOLDER_EXTNAME: string
SETTINGS_TIPS_SUCH_AS: string
SETTINGS_UPLOAD_PROXY: string
SETTINGS_PLUGIN_INSTALL_PROXY: string
SETTINGS_PLUGIN_INSTALL_MIRROR: string
SETTINGS_CURRENT_VERSION: string
SETTINGS_NEWEST_VERSION: string
SETTINGS_GETING: string
SETTINGS_TIPS_HAS_NEW_VERSION: string
SETTINGS_LOG_FILE_PATH: string
SETTINGS_CONFIG_FILE_PATH: string
SETTINGS_LOG_FILE: string
SETTINGS_GUI_LOG_FILE: string
SETTINGS_MANAGE_LOG_FILE: string
SETTINGS_LOG_LEVEL: string
SETTINGS_LOG_FILE_SIZE: string
SETTINGS_SET_PICGO_SERVER: string
SETTINGS_TIPS_SERVER_NOTICE: string
SETTINGS_ENABLE_SERVER: string
SETTINGS_SET_SERVER_HOST: string
SETTINGS_SET_SERVER_PORT: string
SETTINGS_SET_SERVER_KEY: string
SETTINGS_SET_WEB_SERVER: string
SETTINGS_TIPS_WEB_SERVER_NOTICE: string
SETTINGS_SET_ENABLE_WEB_SERVER: string
SETTINGS_SET_WEB_SERVER_HOST: string
SETTINGS_SET_WEB_SERVER_PORT: string
SETTINGS_SET_WEB_SERVER_PATH: string
SETTINGS_TIP_PLACEHOLDER_WEB_HOST: string
SETTINGS_TIP_PLACEHOLDER_WEB_PORT: string
SETTINGS_TIP_PLACEHOLDER_HOST: string
SETTINGS_TIP_PLACEHOLDER_PORT: string
SETTINGS_TIP_PLACEHOLDER_KEY: string
SETTINGS_SET_SERVER_AES_KEY: string
SETTINGS_LOG_LEVEL_ALL: string
SETTINGS_LOG_LEVEL_SUCCESS: string
SETTINGS_LOG_LEVEL_ERROR: string
SETTINGS_LOG_LEVEL_INFO: string
SETTINGS_LOG_LEVEL_WARN: string
SETTINGS_LOG_LEVEL_NONE: string
SETTINGS_RESULT: string
SETTINGS_DEFAULT_PICBED: string
SETTINGS_SET_DEFAULT_PICBED: string
SETTINGS_NOT_CONFIG_OPTIONS: string
SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD: string
SETTINGS_CHOOSE_LANGUAGE: string
BUILTIN_CLIPBOARD_TIPS: string
UPLOADER_CONFIG_NAME: string
UPLOADER_CONFIG_PLACEHOLDER: string
SELECTED_SETTING_HINT: string
SETTINGS_MAIN_WINDOW_SIZE: string
SETTINGS_MAIN_WINDOW_SIZE_WIDTH: string
SETTINGS_MAIN_WINDOW_WIDTH_HINT: string
SETTINGS_MAIN_WINDOW_SIZE_HEIGHT: string
SETTINGS_MAIN_WINDOW_HEIGHT_HINT: string
SETTINGS_RAW_PICGO_SIZE: string
SETTINGS_CUSTOM_MINI_ICON_PATH: string
SETTINGS_CUSTOM_MINI_ICON: string
SETTINGS_COMPRESS_AND_WATERMARK: string
SETTINGS_SYNC_DELETE_CLOUD: string
SETTINGS_ISHIDEDOCK: string
SETTINGS_ISHIDEDOCK_TIPS: string
SETTINGS_ENCODE_OUTPUT_URL: string
SETTINGS_WATCH_CLIPBOARD: string
SETTINGS_SHORT_URL: string
SETTINGS_SHORT_URL_SERVER: string
SETTINGS_SHORT_URL_C1N_TOKEN: string
SETTINGS_SHORT_URL_YOURLS_DOMAIN: string
SETTINGS_SHORT_URL_YOURLS_SIGNATURE: string
SETTINGS_SHORT_URL_CF_WORKER_HOST: string
SETTINGS_SHORT_SINK_DOMAIN: string
SETTINGS_SHORT_SINK_TOKEN: string
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: string
SETTINGS_SYNC_CONFIG: string
SETTINGS_SYNC_CONFIG_TITLE: string
SETTINGS_SYNC_CONFIG_NOTE: string
SETTINGS_SYNC_CONFIG_SELECT_TYPE: string
SETTINGS_SYNC_CONFIG_SELECT_FILE: string
SETTINGS_SYNC_CONFIG_SELECT_CONFIG: string
SETTINGS_SYNC_CONFIG_SELECT_GALLERY: string
SETTINGS_SYNC_CONFIG_SELECT_BOTH: string
SETTINGS_SYNC_CONFIG_GITEA_HOST: string
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: string
SETTINGS_SYNC_CONFIG_GITEA_USERNAME: string
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: string
SETTINGS_SYNC_CONFIG_GITHUB_REPO: string
SETTINGS_SYNC_CONFIG_GITEA_REPO: string
SETTINGS_SYNC_CONFIG_GITEE_REPO: string
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: string
SETTINGS_SYNC_CONFIG_GITEA_BRANCH: string
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: string
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: string
SETTINGS_SYNC_CONFIG_GITEA_TOKEN: string
SETTINGS_SYNC_CONFIG_GITEE_TOKEN: string
SETTINGS_SYNC_CONFIG_PROXY: string
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: string
SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: string
SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: string
SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: string
SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: string
SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: string
SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: string
SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: string
SETTINGS_UP_DOWN_DESC: string
SETTINGS_SYNC_UPLOAD: string
SETTINGS_SYNC_DOWNLOAD: string
SETTINGS_SYNC_UPLOAD_ALL: string
SETTINGS_SYNC_DOWNLOAD_ALL: string
SETTINGS_SYNC_UPLOAD_SUCCESS: string
SETTINGS_SYNC_UPLOAD_FAILED: string
SETTINGS_SYNC_DOWNLOAD_SUCCESS: string
SETTINGS_SYNC_DOWNLOAD_FAILED: string
SETTINGS_SYNC_COMMON_CONFIG: string
SETTINGS_SYNC_MANAGE_CONFIG: string
SETTINGS_AUTO_IMPORT: string
SETTINGS_AUTO_IMPORT_SELECT_PICBED: string
SETTINGS_TAB_SYSTEM: string
SETTINGS_TAB_SYNC_CONFIG: string
SETTINGS_TAB_UPLOAD: string
SETTINGS_TAB_ADVANCED: string
SETTINGS_TAB_UPDATE: string
SHORTCUT_NAME: string
SHORTCUT_BIND: string
SHORTCUT_STATUS: string
SHORTCUT_ENABLED: string
SHORTCUT_DISABLED: string
SHORTCUT_SOURCE: string
SHORTCUT_HANDLE: string
SHORTCUT_ENABLE: string
SHORTCUT_DISABLE: string
SHORTCUT_EDIT: string
SHORTCUT_CHANGE_UPLOAD: string
WAIT_TO_UPLOAD: string
ALREADY_UPLOAD: string
DRAG_FILE_TO_HERE: string
CLICK_TO_UPLOAD: string
LINK_FORMAT: string
CLIPBOARD_PICTURE: string
TIPS_DRAG_VALID_PICTURE_OR_URL: string
TIPS_INPUT_URL: string
TIPS_HTTP_PREFIX: string
TIPS_INPUT_VALID_URL: string
PLUGIN_SEARCH_PLACEHOLDER: string
PLUGIN_INSTALL: string
PLUGIN_INSTALLING: string
PLUGIN_INSTALLED: string
PLUGIN_DOING_SOMETHING: string
PLUGIN_LIST: string
PLUGIN_IMPORT_LOCAL: string
PLUGIN_UPDATE_ALL: string
TIPS_REMOVE_LINK: string
TIPS_WILL_REMOVE_CHOOSED_IMAGES: string
TIPS_MUST_CONTAINS_URL: string
TIPS_NETWORK_ERROR: string
TIPS_NEED_RELOAD: string
TIPS_PLEASE_CHOOSE_LOG_LEVEL: string
TIPS_SET_SUCCEED: string
TIPS_RESET_SUCCEED: string
TIPS_PLUGIN_NOT_GUI_IMPLEMENT: string
TIPS_GET_PLUGIN_LIST_FAILED: string
MANAGE_SETTING_TITLE: string
MANAGE_SETTING_ISAUTOREFRESH_TITLE: string
MANAGE_SETTING_ISAUTOREFRESH_TIPS: string
MANAGE_SETTING_CLEAR_CACHE_TITLE: string
MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE: string
MANAGE_SETTING_CLEAR_CACHE_TIPS: string
MANAGE_SETTING_CLEAR_CACHE_PROMPT: string
MANAGE_SETTING_CLEAR_CACHE_BUTTON: string
MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE: string
MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE: string
MANAGE_SETTING_ISSHOWLIST_TITLE: string
MANAGE_SETTING_ISSHOWLIST_ON: string
MANAGE_SETTING_ISSHOWLIST_OFF: string
MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE: string
MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS: string
MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE: string
MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS: string
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A: string
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B: string
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C: string
MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D: string
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS: string
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE: string
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS: string
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS: string
MANAGE_SETTING_ISIGNORECASE_TITLE: string
MANAGE_SETTING_ISIGNORECASE_TIPS: string
MANAGE_SETTING_TIMESTAMPRENAME_TITLE: string
MANAGE_SETTING_TIMESTAMPRENAME_TIPS: string
MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE: string
MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS: string
MANAGE_SETTING_CUSTOMRENAME_TITLE: string
MANAGE_SETTING_CUSTOMRENAME_TIPS: string
MANAGE_SETTING_CUSTOM_PATTERN_TITLE: string
MANAGE_SETTING_CUSTOM_PATTERN_TIPS: string
MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE: string
MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS: string
MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE: string
MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS: string
MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE: string
MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN: string
MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK: string
MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL: string
MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML: string
MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE: string
MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM: string
MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE: string
MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS: string
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE: string
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS: string
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: string
MANAGE_SETTING_COPY_MESSAGE: string
MANAGE_SETTING_CLEAR_CACHE_SUCCESS: string
MANAGE_SETTING_CLEAR_CACHE_FAILED: string
MANAGE_SETTING_ISENCODEURL_TITLE: string
MANAGE_SETTING_ISENCODEURL_TIPS: string
MANAGE_NO_DATA: string
MANAGE_MAIN_PAGE_NEW_BUCKET: string
MANAGE_MAIN_PAGE_BACK_TO_HOME: string
MANAGE_MAIN_PAGE_SWITCH_PICBED: string
MANAGE_MAIN_PAGE_SETTING: string
MANAGE_MAIN_PAGE_SUBMIT: string
MANAGE_MAIN_PAGE_TIPS: string
MANAGE_MAIN_PAGE_TIPS_SUCCESS: string
MANAGE_MAIN_PAGE_TIPS_FAILED: string
MANAGE_MAIN_PAGE_BUCKET: string
MANAGE_MAIN_PAGE_GALLERY: string
MANAGE_MAIN_PAGE_REPOSITORY: string
MANAGE_CONSTANT_BASE_RULE: string
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A: string
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B: string
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C: string
MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A: string
MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B: string
MANAGE_CONSTANT_ALIAS_TOOLTIP: string
MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP: string
MANAGE_CONSTANT_PAGING_TOOLTIP: string
MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP: string
MANAGE_CONSTANT_BASE_DIR_TOOLTIP: string
MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP: string
MANAGE_CONSTANT_SMMS_ALIAS_DESC: string
MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_SMMS_TOKEN_DESC: string
MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER: string
MANAGE_CONSTANT_SMMS_PAGING_DESC: string
MANAGE_CONSTANT_SMMS_EXPLAIN: string
MANAGE_CONSTANT_SMMS_REFER_TEXT: string
MANAGE_CONSTANT_QINIU_NAME: string
MANAGE_CONSTANT_QINIU_ALIAS_DESC: string
MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC: string
MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER: string
MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC: string
MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER: string
MANAGE_CONSTANT_QINIU_BUCKET_DESC: string
MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER: string
MANAGE_CONSTANT_QINIU_BASE_DIR_DESC: string
MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER: string
MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC: string
MANAGE_CONSTANT_QINIU_PAGING_DESC: string
MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC: string
MANAGE_CONSTANT_QINIU_EXPLAIN: string
MANAGE_CONSTANT_QINIU_REFER_TEXT: string
MANAGE_CONSTANT_GITHUB_ALIAS_DESC: string
MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_GITHUB_TOKEN_DESC: string
MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER: string
MANAGE_CONSTANT_GITHUB_TOKEN_TIPS: string
MANAGE_CONSTANT_GITHUB_USER_DESC: string
MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER: string
MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE: string
MANAGE_CONSTANT_GITHUB_PROXY_DESC: string
MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER: string
MANAGE_CONSTANT_GITHUB_PROXY_TIPS: string
MANAGE_CONSTANT_GITHUB_PAGING_DESC: string
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC: string
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER: string
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS: string
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A: string
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B: string
MANAGE_CONSTANT_GITHUB_EXPLAIN: string
MANAGE_CONSTANT_GITHUB_REFER_TEXT: string
MANAGE_CONSTANT_ALIYUN_NAME: string
MANAGE_CONSTANT_ALIYUN_ALIAS_DESC: string
MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC: string
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC: string
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER: string
MANAGE_CONSTANT_ALIYUN_BUCKET_DESC: string
MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER: string
MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC: string
MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER: string
MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC: string
MANAGE_CONSTANT_ALIYUN_PAGING_DESC: string
MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC: string
MANAGE_CONSTANT_ALIYUN_EXPLAIN: string
MANAGE_CONSTANT_ALIYUN_REFER_TEXT: string
MANAGE_CONSTANT_TENCENT_NAME: string
MANAGE_CONSTANT_TENCENT_ALIAS_DESC: string
MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC: string
MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER: string
MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC: string
MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER: string
MANAGE_CONSTANT_TENCENT_APPID_DESC: string
MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER: string
MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP: string
MANAGE_CONSTANT_TENCENT_BUCKET_DESC: string
MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER: string
MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC: string
MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER: string
MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC: string
MANAGE_CONSTANT_TENCENT_PAGING_DESC: string
MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC: string
MANAGE_CONSTANT_TENCENT_EXPLAIN: string
MANAGE_CONSTANT_TENCENT_REFER_TEXT: string
MANAGE_CONSTANT_UPYUN_NAME: string
MANAGE_CONSTANT_UPYUN_ALIAS_DESC: string
MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_BUCKET_DESC: string
MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC: string
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE: string
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC: string
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE: string
MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC: string
MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC: string
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A: string
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B: string
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC: string
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP: string
MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC: string
MANAGE_CONSTANT_UPYUN_PAGING: string
MANAGE_CONSTANT_UPYUN_ITEMS_PAGE: string
MANAGE_CONSTANT_UPYUN_EXPLAIN: string
MANAGE_CONSTANT_UPYUN_REFER_TEXT: string
MANAGE_CONSTANT_IMGUR_NAME: string
MANAGE_CONSTANT_IMGUR_ALIAS_DESC: string
MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_IMGUR_USERNAME_DESC: string
MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER: string
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC: string
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER: string
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP: string
MANAGE_CONSTANT_IMGUR_PROXY_DESC: string
MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER: string
MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP: string
MANAGE_CONSTANT_IMGUR_EXPLAIN: string
MANAGE_CONSTANT_IMGUR_REFER_TEXT: string
MANAGE_CONSTANT_S3_NAME: string
MANAGE_CONSTANT_S3_ALIAS_DESC: string
MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC: string
MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER: string
MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC: string
MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER: string
MANAGE_CONSTANT_S3_ENDPOINT_DESC: string
MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER: string
MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP: string
MANAGE_CONSTANT_S3_SSLENABLED_DESC: string
MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP: string
MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC: string
MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP: string
MANAGE_CONSTANT_S3_PROXY_DESC: string
MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER: string
MANAGE_CONSTANT_S3_PROXY_TOOLTIP: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ: string
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP: string
MANAGE_CONSTANT_S3_BUCKET_DESC: string
MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER: string
MANAGE_CONSTANT_S3_BASE_DIR_DESC: string
MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER: string
MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC: string
MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP: string
MANAGE_CONSTANT_S3_PAGING_DESC: string
MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC: string
MANAGE_CONSTANT_S3_EXPLAIN: string
MANAGE_CONSTANT_S3_REFER_TEXT: string
MANAGE_CONSTANT_WEBDAV_ALIAS_DESC: string
MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_HOST_DESC: string
MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP: string
MANAGE_CONSTANT_WEBDAV_USERNAME_DESC: string
MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_BUCKET_DESC: string
MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP: string
MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC: string
MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC: string
MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC: string
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP: string
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE: string
MANAGE_CONSTANT_WEBDAV_WEB_PATH: string
MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP: string
MANAGE_CONSTANT_WEBDAV_PROXY_DESC: string
MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER: string
MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP: string
MANAGE_CONSTANT_WEBDAV_SSL_DESC: string
MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP: string
MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC: string
MANAGE_CONSTANT_WEBDAV_EXPLAIN: string
MANAGE_CONSTANT_WEBDAV_REFER_TEXT: string
MANAGE_CONSTANT_LOCAL_NAME: string
MANAGE_CONSTANT_LOCAL_ALIAS_DESC: string
MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC: string
MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER: string
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC: string
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER: string
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP: string
MANAGE_CONSTANT_LOCAL_WEB_PATH: string
MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER: string
MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP: string
MANAGE_CONSTANT_LOCAL_EXPLAIN: string
MANAGE_CONSTANT_LOCAL_REFER_TEXT: string
MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE: string
MANAGE_CONSTANT_LOCAL_BUCKET_DESC: string
MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: string
MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: string
MANAGE_CONSTANT_SFTP_NAME: string
MANAGE_CONSTANT_SFTP_ALIAS_DESC: string
MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_HOST_DESC: string
MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_PORT_DESC: string
MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_USERNAME_DESC: string
MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_PASSWORD_DESC: string
MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: string
MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: string
MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: string
MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: string
MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: string
MANAGE_CONSTANT_SFTP_WEB_PATH: string
MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: string
MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: string
MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: string
MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_EXPLAIN: string
MANAGE_CONSTANT_SFTP_REFER_TEXT: string
MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: string
MANAGE_CONSTANT_SFTP_BUCKET_DESC: string
MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: string
MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: string
MANAGE_LOGIN_PAGE_PANE_NAME: string
MANAGE_LOGIN_PAGE_PANE_KEY_NAME: string
MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: string
MANAGE_LOGIN_PAGE_PANE_ENTER: string
MANAGE_LOGIN_PAGE_PANE_DELETE: string
MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER: string
MANAGE_LOGIN_PAGE_PANE_IMPORT: string
MANAGE_LOGIN_PAGE_PANE_SAVE: string
MANAGE_LOGIN_PAGE_PANE_RESET: string
MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E: string
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS: string
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE: string
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP: string
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM: string
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL: string
MANAGE_BUCKET_PAGE_LOADING_TEXT: string
MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER: string
MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER: string
MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP: string
MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP: string
MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP: string
MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP: string
MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP: string
MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP: string
MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP: string
MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP: string
MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER: string
MANAGE_BUCKET_PAGE_ROOT_FOLDER: string
MANAGE_BUCKET_PAGE_FILE_NUMBER: string
MANAGE_BUCKET_PAGE_FILE_SIZE: string
MANAGE_BUCKET_PAGE_SELECT_ALL: string
MANAGE_BUCKET_PAGE_SELECT_NONE: string
MANAGE_BUCKET_PAGE_SELECT_INVERT: string
MANAGE_BUCKET_DOWNLOAD_BTN: string
MANAGE_BUCKET_DELETE_BTN: string
MANAGE_BUCKET_SORT_TITLE: string
MANAGE_BUCKET_SORT_NAME: string
MANAGE_BUCKET_SORT_SIZE: string
MANAGE_BUCKET_SORT_EXT: string
MANAGE_BUCKET_SORT_TIME: string
MANAGE_BUCKET_SORT_CHECK: string
MANAGE_BUCKET_SORT_INIT: string
MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: string
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: string
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: string
MANAGE_BUCKET_URL_FORMAT_MARKDOWN: string
MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK: string
MANAGE_BUCKET_URL_FORMAT_URL: string
MANAGE_BUCKET_URL_FORMAT_HTML: string
MANAGE_BUCKET_URL_FORMAT_BBCODE: string
MANAGE_BUCKET_URL_FORMAT_CUSTOM: string
MANAGE_BUCKET_URL_FORMAT_PRESIGN: string
MANAGE_BUCKET_FILE_INFO_TITLE: string
MANAGE_BUCKET_FILE_INFO_COPY_TIPS: string
MANAGE_BUCKET_FILE_LIST_LOADING: string
MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE: string
MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE: string
MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE: string
MANAGE_BUCKET_UPLOAD_AREA_TITLE: string
MANAGE_BUCKET_UPLOAD_AREA_TEXT: string
MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING: string
MANAGE_BUCKET_UPLOAD_AREA_BTN: string
MANAGE_BUCKET_UPLOAD_AREA_CLEAR: string
MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING: string
MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK: string
MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK: string
MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK: string
MANAGE_BUCKET_UPLOAD_AREA_SUCCESS: string
MANAGE_BUCKET_UPLOAD_AREA_FAILED: string
MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE: string
MANAGE_BUCKET_DOWNLOADING: string
MANAGE_BUCKET_DOWNLOAD_COPY_TASK: string
MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK: string
MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK: string
MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER: string
MANAGE_BUCKET_DOWNLOAD_SUCCESS: string
MANAGE_BUCKET_DOWNLOAD_FAILED: string
MANAGE_BUCKET_MARKDOWN_PREVIEW: string
MANAGE_BUCKET_PLAY: string
MANAGE_BUCKET_RENAME_FILE: string
MANAGE_BUCKET_RENAME_FILE_INPUT_A: string
MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS: string
MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER: string
MANAGE_BUCKET_RENAME_FILE_INPUT_B: string
MANAGE_BUCKET_RENAME_FILE_TABLE_IID: string
MANAGE_BUCKET_RENAME_FILE_EXT: string
MANAGE_BUCKET_RENAME_FILE_EXT_TIPS: string
MANAGE_BUCKET_RENAME_FILE_EXT_YES: string
MANAGE_BUCKET_RENAME_FILE_EXT_NO: string
MANAGE_BUCKET_RENAME_FILE_CANCEL: string
MANAGE_BUCKET_RENAME_FILE_CONFIRM: string
MANAGE_BUCKET_COPY_SUCCESS: string
MANAGE_BUCKET_START_LOADING_MESSAGE: string
MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL: string
MANAGE_BUCKET_LAST_PAGE_TITLE: string
MANAGE_BUCKET_LAST_PAGE_MSG: string
MANAGE_BUCKET_GET_LIST_FAIL_TITLE: string
MANAGE_BUCKET_GET_LIST_FAIL_MSG: string
MANAGE_BUCKET_GET_LIST_FAIL_MSG2: string
MANAGE_BUCKET_GET_LIST_FAIL_MSG3: string
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE: string
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP: string
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM: string
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL: string
MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS: string
MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL: string
MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL: string
MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE: string
MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP: string
MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM: string
MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL: string
MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG: string
MANAGE_BUCKET_CREATE_FOLDER_SUCCESS: string
MANAGE_BUCKET_CREATE_FOLDER_FAIL: string
MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ: string
MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE: string
MANAGE_BUCKET_UPLOAD_URL_NOT_MSG: string
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG: string
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2: string
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3: string
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A: string
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B: string
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C: string
MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM: string
MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL: string
MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A: string
MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B: string
MANAGE_BUCKET_BATCH_RENAME_CANCEL: string
MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG: string
MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A: string
MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B: string
MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG: string
MANAGE_BUCKET_BATCH_COPY_URL_MSG_A: string
MANAGE_BUCKET_BATCH_COPY_URL_MSG_B: string
MANAGE_BUCKET_CANCEL_LOADING_TITLE: string
MANAGE_BUCKET_CANCEL_LOADING_MSG: string
MANAGE_BUCKET_CANCEL_LOADING_CONFIRM: string
MANAGE_BUCKET_CANCEL_LOADING_CANCEL: string
MANAGE_BUCKET_CANCEL_LOADING_SUCCESS: string
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE: string
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG: string
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM: string
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL: string
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS: string
MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE: string
MANAGE_BUCKET_GET_FILE_BS_NOT_MSG: string
MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2: string
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A: string
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B: string
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG: string
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM: string
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL: string
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE: string
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG: string
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: string
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3: string
MANAGE_BUCKET_BATCH_DELETE_CANCEL: string
MANAGE_BUCKET_DELETE_CONFIRM_TITLE: string
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER: string
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A: string
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE: string
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C: string
MANAGE_BUCKET_DELETE_CONFIRM_MSG: string
MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM: string
MANAGE_BUCKET_DELETE_CONFIRM_CANCEL: string
MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE: string
MANAGE_BUCKET_DELETE_ERROR_MSG_MSG: string
MANAGE_BUCKET_DELETE_SUCCESS: string
MANAGE_BUCKET_DELETE_FAIL: string
MANAGE_BUCKET_DELETE_CANCEL: string
MANAGE_BUCKET_RENAME_INFO_MSG: string
MANAGE_BUCKET_RENAME_SUCCESS: string
MANAGE_BUCKET_RENAME_ERROR_MSG: string
MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME: string
MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME: string
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS: string
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS: string
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL: string
MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME: string
MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH: string
MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME: string
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS: string
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS: string
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL: string
MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME: string
MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS: string
MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME: string
MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS: string
MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME: string
MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE: string
MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM: string
MANAGE_BUCKET_FILE_COLUMN_FILENAME: string
MANAGE_BUCKET_FILE_COLUMN_COPY_URL: string
MANAGE_BUCKET_FILE_COLUMN_INFO: string
MANAGE_BUCKET_FILE_COLUMN_FILESIZE: string
MANAGE_BUCKET_FILE_COLUMN_TIME: string
MANAGE_NEW_BUCKET_TCYUN_NAME: string
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC: string
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER: string
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A: string
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B: string
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C: string
MANAGE_NEW_BUCKET_TCYUN_REGION: string
MANAGE_NEW_BUCKET_TCYUN_ACL_DESC: string
MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW: string
MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R: string
MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE: string
MANAGE_NEW_BUCKET_ALIYUN_NAME: string
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC: string
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER: string
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A: string
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B: string
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C: string
MANAGE_NEW_BUCKET_ALIYUN_REGION: string
MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC: string
MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW: string
MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R: string
MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE: string
MANAGE_NEW_BUCKET_QINIU_NAME: string
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC: string
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER: string
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A: string
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B: string
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C: string
MANAGE_NEW_BUCKET_QINIU_REGION: string
MANAGE_NEW_BUCKET_QINIU_ACL_DESC: string
MANAGE_NEW_BUCKET_S3PLIST_NAME: string
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC: string
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER: string
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A: string
MANAGE_NEW_BUCKET_S3PLIST_REGION: string
MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC: string
MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW: string
MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R: string
MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE: string
MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ: string
PLUGIN_INSTALL_FAILED: string
PLUGIN_UNINSTALL_FAILED: string
PLUGIN_UPDATE_SUCCEED: string
PLUGIN_UPDATE_FAILED: string
PLUGIN_IMPORT_SUCCEED: string
PLUGIN_IMPORT_FAILED: string

View File

@@ -67,8 +67,5 @@ declare global {
setLocales: (lang: string, locales: ILocales) => void
translate: (key: ILocalesKey, args?: IStringKeyMap) => string
}
TDAPP: {
onEvent: (EventId: string, Label?: string, MapKv?: IStringKeyMap) => void
}
}
}

View File

@@ -153,12 +153,6 @@ export interface IBounds {
y: number
}
export interface ITalkingDataOptions {
EventId: string
Label?: string
MapKv?: IStringKeyMap
}
// PicGo Types
export type ICtx = PicGo
export interface IPicGoPlugin {
@@ -457,13 +451,6 @@ export interface IAppNotification {
icon?: string
}
export interface IAnalyticsData {
fromClipboard: boolean
type: string
count: number
duration?: number // 耗时
}
export interface IStringKeyMap {
[propName: string]: any
}