mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-05-22 16:50:35 +08:00
🔨 Refactor(custom): use i18next for main process
This commit is contained in:
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -49,7 +49,7 @@
|
|||||||
},
|
},
|
||||||
"eslint.validate": ["javascript", "javascriptreact", "vue", "typescript", "typescriptreact", "json", "jsonc"],
|
"eslint.validate": ["javascript", "javascriptreact", "vue", "typescript", "typescriptreact", "json", "jsonc"],
|
||||||
"githubPullRequests.ignoredPullRequestBranches": ["dev"],
|
"githubPullRequests.ignoredPullRequestBranches": ["dev"],
|
||||||
"i18n-ally.localesPaths": ["src\\renderer\\i18n\\locales", "resources\\i18n"],
|
"i18n-ally.localesPaths": ["src\\renderer\\i18n\\locales", "resources\\i18n", "src\\main\\i18n\\locales"],
|
||||||
"i18n-ally.keystyle": "nested",
|
"i18n-ally.keystyle": "nested",
|
||||||
"i18n-ally.sortKeys": true,
|
"i18n-ally.sortKeys": true,
|
||||||
"i18n-ally.namespace": true,
|
"i18n-ally.namespace": true,
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"i18n-ally.displayLanguage": "zh-CN",
|
"i18n-ally.displayLanguage": "zh-CN",
|
||||||
"i18n-ally.enabledFrameworks": ["vue"],
|
"i18n-ally.enabledFrameworks": ["vue"],
|
||||||
"i18n-ally.editor.preferEditor": true,
|
"i18n-ally.editor.preferEditor": true,
|
||||||
"typescript.tsdk": "node_modules\\typescript\\lib",
|
"js/ts.tsdk.path": "node_modules\\typescript\\lib",
|
||||||
"css.validate": false,
|
"css.validate": false,
|
||||||
"scss.validate": false,
|
"scss.validate": false,
|
||||||
"less.validate": false
|
"less.validate": false
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ export default defineConfig(
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
files: ['src/renderer/i18n/**/*.json'],
|
files: ['src/renderer/i18n/**/*.json', 'src/main/i18n/locales/**/*.json'],
|
||||||
rules: {
|
rules: {
|
||||||
'jsonc/sort-keys': [
|
'jsonc/sort-keys': [
|
||||||
'error',
|
'error',
|
||||||
|
|||||||
@@ -63,7 +63,6 @@
|
|||||||
"@aws-sdk/s3-request-presigner": "^3.1016.0",
|
"@aws-sdk/s3-request-presigner": "^3.1016.0",
|
||||||
"@nodelib/fs.walk": "^3.0.1",
|
"@nodelib/fs.walk": "^3.0.1",
|
||||||
"@octokit/rest": "^22.0.1",
|
"@octokit/rest": "^22.0.1",
|
||||||
"@piclist/i18n": "^2.0.0",
|
|
||||||
"@piclist/store": "^3.0.1",
|
"@piclist/store": "^3.0.1",
|
||||||
"@smithy/node-http-handler": "^4.5.0",
|
"@smithy/node-http-handler": "^4.5.0",
|
||||||
"adm-zip": "^0.5.16",
|
"adm-zip": "^0.5.16",
|
||||||
@@ -80,6 +79,7 @@
|
|||||||
"fs-extra": "^11.3.4",
|
"fs-extra": "^11.3.4",
|
||||||
"got": "^14.6.6",
|
"got": "^14.6.6",
|
||||||
"hpagent": "^1.2.0",
|
"hpagent": "^1.2.0",
|
||||||
|
"i18next": "^25.10.9",
|
||||||
"lodash-es": "^4.17.23",
|
"lodash-es": "^4.17.23",
|
||||||
"marked": "^17.0.5",
|
"marked": "^17.0.5",
|
||||||
"mime": "^4.1.0",
|
"mime": "^4.1.0",
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
LANG_DISPLAY_LABEL: 'English'
|
|
||||||
ABOUT: About
|
|
||||||
OPEN_MAIN_WINDOW: Open Main Window
|
|
||||||
OPEN_MINI_WINDOW: Open Mini Window
|
|
||||||
HIDE_MINI_WINDOW: Hide Mini Window
|
|
||||||
CHOOSE_DEFAULT_PICBED: Choose Default Picbed
|
|
||||||
RELOAD_APP: Reload App
|
|
||||||
UPLOAD_SUCCEED: Upload Succeed
|
|
||||||
MULTI_UPLOAD_SUCCEED: ${n} Images Uploaded Succeed
|
|
||||||
UPLOAD_FAILED: Upload Failed
|
|
||||||
UPLOAD_PROGRESS: Upload Progress
|
|
||||||
UPLOADING: Uploading
|
|
||||||
QUICK_UPLOAD: Quick Upload
|
|
||||||
UPLOAD_BY_CLIPBOARD: Upload by Clipboard
|
|
||||||
SHOW_PICBED_QRCODE: Show Picbed Qrcode
|
|
||||||
SHOW_FIRST_TIME_GUIDE: Show First-Time Guide
|
|
||||||
ENABLE: Enable
|
|
||||||
DISABLE: Disable
|
|
||||||
CONFIG_THING: Config ${c}
|
|
||||||
FIND_NEW_VERSION: Find New Version
|
|
||||||
NO_MORE_NOTICE: No More Notice
|
|
||||||
SHOW_DEVTOOLS: Show Devtools
|
|
||||||
FEEDBACK: Feedback
|
|
||||||
CURRENT_PICBED: Current Picbed
|
|
||||||
CURRENT_SECOND_PICBED: Current
|
|
||||||
START_WATCH_CLIPBOARD: Start Watch Clipboard
|
|
||||||
STOP_WATCH_CLIPBOARD: Stop Watch Clipboard
|
|
||||||
OPEN_TOOLBOX: Open Toolbox
|
|
||||||
TOOLBOX: Toolbox
|
|
||||||
TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: 'The configuration file path is: ${path}'
|
|
||||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: The configuration file is damaged
|
|
||||||
TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: 'The album file path is: ${path}'
|
|
||||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS: The album file is damaged
|
|
||||||
TOOLBOX_CHECK_PROXY_SUCCESS_TIPS: Proxy settings normal
|
|
||||||
TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS: No proxy settings
|
|
||||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT: Proxy settings incorrect
|
|
||||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING: Proxy settings unavailable
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS: 'The temporary folder path for clipboard pictures is: ${path}'
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS: 'The temporary folder for clipboard pictures does not exist: ${path}'
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS: 'Please create the folder yourself: ${path}'
|
|
||||||
GALLERY_SYNC_DELETE_NOTICE_SUCCEED: Cloud Delete Succeed
|
|
||||||
GALLERY_SYNC_DELETE_NOTICE_FAILED: Cloud Delete Failed
|
|
||||||
TIPS_GET_PLUGIN_LIST_FAILED: Get plugin list failed
|
|
||||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: Deletion successful
|
|
||||||
PLUGIN_INSTALL_FAILED: Plugin install failed
|
|
||||||
PLUGIN_UNINSTALL_FAILED: Plugin uninstall failed
|
|
||||||
PLUGIN_UPDATE_FAILED: Plugin update failed
|
|
||||||
PLUGIN_IMPORT_SUCCEED: Plugin import succeed
|
|
||||||
PLUGIN_IMPORT_FAILED: Plugin import failed
|
|
||||||
ENABLE_PLUGIN: Enable Plugin
|
|
||||||
DISABLE_PLUGIN: Disable Plugin
|
|
||||||
UNINSTALL_PLUGIN: Uninstall Plugin
|
|
||||||
UPDATE_PLUGIN: Update Plugin
|
|
||||||
TIPS_NOTICE: Tips
|
|
||||||
TIPS_WARNING: Warning
|
|
||||||
TIPS_ERROR: Error
|
|
||||||
TIPS_INSTALL_NODE_AND_RELOAD_PICGO: Please install Node.js and restart PicList to continue
|
|
||||||
TIPS_PLUGIN_REMOVE_GALLERY_ITEM: Plugin is trying to remove some images from the album gallery, continue?
|
|
||||||
TIPS_UPLOAD_NOT_PICTURES: The latest clipboard item is not a picture
|
|
||||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT: PicList config file broken, has been restored to default
|
|
||||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP: PicList config file broken, has been restored to backup
|
|
||||||
TIPS_PICGO_BACKUP_FILE_VERSION: 'Backup file version: ${v}'
|
|
||||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: Shortcut modified successfully
|
|
||||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: Shortcut conflict, please reset
|
|
||||||
TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: Custom config file parse error, please check the path content
|
|
||||||
TIPS_FIND_NEW_VERSION: Find new version ${v}, update many new features, do you want to download the latest version in the background?
|
|
||||||
UPDATE_DOWNLOADED: Update downloaded
|
|
||||||
UPDATE: Update
|
|
||||||
TIPS_UPDATE_DOWNLOADED: The update has been downloaded and will be installed on the next app restart. Would you like to restart now?
|
|
||||||
QUIT: Quit
|
|
||||||
OPERATION_SUCCEED: "Operation Succeed"
|
|
||||||
OPERATION_FAILED: "Operation Failed"
|
|
||||||
UPLOAD_TASK_COMPLETED: "Upload Task Completed"
|
|
||||||
UPLOAD_TASK_COMPLETED_BODY: "${completed} succeeded, ${failed} failed"
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
LANG_DISPLAY_LABEL: 中文
|
|
||||||
ABOUT: 关于
|
|
||||||
OPEN_MAIN_WINDOW: 打开主窗口
|
|
||||||
OPEN_MINI_WINDOW: 打开mini窗口
|
|
||||||
HIDE_MINI_WINDOW: 隐藏mini窗口
|
|
||||||
CHOOSE_DEFAULT_PICBED: 选择默认图床
|
|
||||||
RELOAD_APP: 重启应用
|
|
||||||
UPLOAD_SUCCEED: 上传成功
|
|
||||||
MULTI_UPLOAD_SUCCEED: ${n} 张图片上传成功
|
|
||||||
UPLOAD_FAILED: 上传失败
|
|
||||||
UPLOAD_PROGRESS: 上传进度
|
|
||||||
UPLOADING: 正在上传
|
|
||||||
QUICK_UPLOAD: 快捷上传
|
|
||||||
UPLOAD_BY_CLIPBOARD: 剪贴板图片上传
|
|
||||||
SHOW_PICBED_QRCODE: 生成图床配置二维码
|
|
||||||
SHOW_FIRST_TIME_GUIDE: 显示新手指南
|
|
||||||
ENABLE: 启用
|
|
||||||
DISABLE: 禁用
|
|
||||||
CONFIG_THING: 配置${c}
|
|
||||||
FIND_NEW_VERSION: 发现新版本
|
|
||||||
NO_MORE_NOTICE: 以后不再提醒
|
|
||||||
SHOW_DEVTOOLS: 打开开发者工具
|
|
||||||
FEEDBACK: 反馈问题
|
|
||||||
CURRENT_PICBED: 当前图床
|
|
||||||
CURRENT_SECOND_PICBED: 当前
|
|
||||||
START_WATCH_CLIPBOARD: 开始监听剪贴板
|
|
||||||
STOP_WATCH_CLIPBOARD: 停止监听剪贴板
|
|
||||||
OPEN_TOOLBOX: 打开修复工具箱
|
|
||||||
TOOLBOX: 工具箱
|
|
||||||
TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: 配置文件路径是:${path}
|
|
||||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: 配置文件已损坏
|
|
||||||
TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: 相册文件路径是:${path}
|
|
||||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS: 相册文件已损坏
|
|
||||||
TOOLBOX_CHECK_PROXY_SUCCESS_TIPS: 代理设置正常
|
|
||||||
TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS: 无代理设置
|
|
||||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT: 代理设置不正确
|
|
||||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING: 代理设置不可用
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS: 剪贴板图片临时文件夹路径是:${path}
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS: 剪贴板图片临时文件夹不存在:${path}
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS: 请自行创建文件夹:${path}
|
|
||||||
GALLERY_SYNC_DELETE_NOTICE_SUCCEED: 云端删除成功
|
|
||||||
GALLERY_SYNC_DELETE_NOTICE_FAILED: 云端删除失败
|
|
||||||
TIPS_GET_PLUGIN_LIST_FAILED: 获取插件列表失败
|
|
||||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: 删除成功
|
|
||||||
PLUGIN_INSTALL_FAILED: 插件安装失败
|
|
||||||
PLUGIN_UNINSTALL_FAILED: 插件卸载失败
|
|
||||||
PLUGIN_UPDATE_FAILED: 插件更新失败
|
|
||||||
PLUGIN_IMPORT_SUCCEED: 插件导入成功
|
|
||||||
PLUGIN_IMPORT_FAILED: 插件导入失败
|
|
||||||
ENABLE_PLUGIN: 启用插件
|
|
||||||
DISABLE_PLUGIN: 禁用插件
|
|
||||||
UNINSTALL_PLUGIN: 卸载插件
|
|
||||||
UPDATE_PLUGIN: 更新插件
|
|
||||||
TIPS_NOTICE: 注意
|
|
||||||
TIPS_WARNING: 警告
|
|
||||||
TIPS_ERROR: 发生错误
|
|
||||||
TIPS_INSTALL_NODE_AND_RELOAD_PICGO: 请安装Node.js并重启PicList再继续操作
|
|
||||||
TIPS_PLUGIN_REMOVE_GALLERY_ITEM: 有插件正在试图删除一些相册图片,是否继续
|
|
||||||
TIPS_UPLOAD_NOT_PICTURES: 剪贴板最新的一条记录不是图片
|
|
||||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT: PicList 配置文件损坏,已经恢复为默认配置
|
|
||||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP: PicList 配置文件损坏,已经恢复为备份配置
|
|
||||||
TIPS_PICGO_BACKUP_FILE_VERSION: '备份文件版本: ${v}'
|
|
||||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: 快捷键已经修改成功
|
|
||||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: 快捷键冲突,请重新设置
|
|
||||||
TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: 自定义文件解析出错,请检查路径内容是否正确
|
|
||||||
TIPS_FIND_NEW_VERSION: 发现新版本${v},更新了很多功能,是否后台下载最新的版本?
|
|
||||||
UPDATE_DOWNLOADED: 更新已下载
|
|
||||||
TIPS_UPDATE_DOWNLOADED: 更新已下载,将在下次启动时安装,是否现在重启?
|
|
||||||
UPDATE: 更新
|
|
||||||
QUIT: 退出
|
|
||||||
OPERATION_SUCCEED: "操作成功"
|
|
||||||
OPERATION_FAILED: "操作失败"
|
|
||||||
UPLOAD_TASK_COMPLETED: "上传任务完成"
|
|
||||||
UPLOAD_TASK_COMPLETED_BODY: "${completed} 成功, ${failed} 失败"
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
LANG_DISPLAY_LABEL: 繁體中文
|
|
||||||
ABOUT: 關於
|
|
||||||
OPEN_MAIN_WINDOW: 打開主視窗
|
|
||||||
OPEN_MINI_WINDOW: 打開mini視窗
|
|
||||||
HIDE_MINI_WINDOW: 隱藏mini視窗
|
|
||||||
CHOOSE_DEFAULT_PICBED: 選擇預設圖床
|
|
||||||
RELOAD_APP: 重啟程式
|
|
||||||
UPLOAD_SUCCEED: 上傳成功
|
|
||||||
MULTI_UPLOAD_SUCCEED: ${n} 張圖片上傳成功
|
|
||||||
UPLOAD_FAILED: 上傳失敗
|
|
||||||
UPLOAD_PROGRESS: 上傳進度
|
|
||||||
UPLOADING: 正在上傳
|
|
||||||
QUICK_UPLOAD: 快速上傳
|
|
||||||
UPLOAD_BY_CLIPBOARD: 剪貼簿圖片上傳
|
|
||||||
SHOW_PICBED_QRCODE: 產生圖床配置 QRCODE
|
|
||||||
SHOW_FIRST_TIME_GUIDE: 顯示新手指南
|
|
||||||
ENABLE: 啟用
|
|
||||||
DISABLE: 禁用
|
|
||||||
CONFIG_THING: 設定${c}
|
|
||||||
FIND_NEW_VERSION: 發現新版本
|
|
||||||
NO_MORE_NOTICE: 以後不再提醒
|
|
||||||
SHOW_DEVTOOLS: 開啟開發者工具
|
|
||||||
FEEDBACK: 問題反饋
|
|
||||||
CURRENT_PICBED: 當前圖床
|
|
||||||
CURRENT_SECOND_PICBED: 當前
|
|
||||||
START_WATCH_CLIPBOARD: 開始監聽剪貼簿
|
|
||||||
STOP_WATCH_CLIPBOARD: 停止監聽剪貼簿
|
|
||||||
OPEN_TOOLBOX: 開啟修復工具箱
|
|
||||||
TOOLBOX: 工具箱
|
|
||||||
TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: 配置文件路徑是:${path}
|
|
||||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: 配置文件已損壞
|
|
||||||
TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: 相冊文件路徑是:${path}
|
|
||||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS: 相冊文件已損壞
|
|
||||||
TOOLBOX_CHECK_PROXY_SUCCESS_TIPS: 代理設置正常
|
|
||||||
TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS: 無代理設置
|
|
||||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT: 代理設置不正確
|
|
||||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING: 代理設置不可用
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS: 剪貼板圖片臨時文件夾路徑是:${path}
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS: 剪貼板圖片臨時文件夾不存在:${path}
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS: 請自行創建文件夾:${path}
|
|
||||||
GALLERY_SYNC_DELETE_NOTICE_SUCCEED: 雲端刪除成功
|
|
||||||
GALLERY_SYNC_DELETE_NOTICE_FAILED: 雲端刪除失敗
|
|
||||||
TIPS_GET_PLUGIN_LIST_FAILED: 取得插件列表失敗
|
|
||||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: 删除成功
|
|
||||||
PLUGIN_INSTALL_FAILED: 插件安裝失敗
|
|
||||||
PLUGIN_UNINSTALL_FAILED: 插件卸載失敗
|
|
||||||
PLUGIN_UPDATE_FAILED: 插件更新失敗
|
|
||||||
PLUGIN_IMPORT_SUCCEED: 插件導入成功
|
|
||||||
PLUGIN_IMPORT_FAILED: 插件導入失敗
|
|
||||||
ENABLE_PLUGIN: 啟用插件
|
|
||||||
DISABLE_PLUGIN: 禁用插件
|
|
||||||
UNINSTALL_PLUGIN: 卸載插件
|
|
||||||
UPDATE_PLUGIN: 更新插件
|
|
||||||
TIPS_NOTICE: 注意
|
|
||||||
TIPS_WARNING: 警告
|
|
||||||
TIPS_ERROR: 發生錯誤
|
|
||||||
TIPS_INSTALL_NODE_AND_RELOAD_PICGO: 請安裝Node.js並重新啟動PicList再繼續操作
|
|
||||||
TIPS_PLUGIN_REMOVE_GALLERY_ITEM: 有插件正在試圖刪除一些相簿圖片,是否繼續?
|
|
||||||
TIPS_UPLOAD_NOT_PICTURES: 剪貼簿最新的一條記錄不是圖片
|
|
||||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT: PicList設定檔案已損壞,已經恢復為預設設定
|
|
||||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP: PicList 設定檔案已損壞,已經恢復為備份設定
|
|
||||||
TIPS_PICGO_BACKUP_FILE_VERSION: '備份檔案版本: ${v}'
|
|
||||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: 快捷鍵已經修改成功
|
|
||||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: 快捷鍵衝突,請重新設定
|
|
||||||
TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: 自訂設定檔案解析出錯,請檢查路徑內容是否正確
|
|
||||||
TIPS_FIND_NEW_VERSION: 發現新版本${v},更新了很多功能,是否後台下載最新的版本?
|
|
||||||
UPDATE_DOWNLOADED: 更新已下載
|
|
||||||
TIPS_UPDATE_DOWNLOADED: 更新已下載,将在下次啟動時安裝,是否立即重啟?
|
|
||||||
UPDATE: 更新
|
|
||||||
QUIT: 退出
|
|
||||||
OPERATION_SUCCEED: "操作成功"
|
|
||||||
OPERATION_FAILED: "操作失敗"
|
|
||||||
UPLOAD_TASK_COMPLETED: "上傳任務完成"
|
|
||||||
UPLOAD_TASK_COMPLETED_BODY: "${completed} 成功, ${failed} 失敗"
|
|
||||||
@@ -19,7 +19,7 @@ import { cloneDeep } from 'lodash-es'
|
|||||||
import pkg from 'root/package.json'
|
import pkg from 'root/package.json'
|
||||||
|
|
||||||
import { buildPicBedListMenu } from '~/events/remotes/menu'
|
import { buildPicBedListMenu } from '~/events/remotes/menu'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import clipboardPoll from '~/utils/clipboardPoll'
|
import clipboardPoll from '~/utils/clipboardPoll'
|
||||||
import { ensureFilePath, handleCopyUrl, setTray, tray } from '~/utils/common'
|
import { ensureFilePath, handleCopyUrl, setTray, tray } from '~/utils/common'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
@@ -40,11 +40,11 @@ export function setDockMenu() {
|
|||||||
const isListeningClipboard = picgo.getConfig<boolean | undefined>(configPaths.settings.isListeningClipboard) || false
|
const isListeningClipboard = picgo.getConfig<boolean | undefined>(configPaths.settings.isListeningClipboard) || false
|
||||||
const dockMenu = Menu.buildFromTemplate([
|
const dockMenu = Menu.buildFromTemplate([
|
||||||
{
|
{
|
||||||
label: $t('OPEN_MAIN_WINDOW'),
|
label: t('main.menu.openMainWindow'),
|
||||||
click: openMainWindow,
|
click: openMainWindow,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('START_WATCH_CLIPBOARD'),
|
label: t('main.menu.startWatchClipboard'),
|
||||||
click() {
|
click() {
|
||||||
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: true })
|
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: true })
|
||||||
clipboardPoll.startListening()
|
clipboardPoll.startListening()
|
||||||
@@ -57,7 +57,7 @@ export function setDockMenu() {
|
|||||||
visible: !isListeningClipboard,
|
visible: !isListeningClipboard,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('STOP_WATCH_CLIPBOARD'),
|
label: t('main.menu.stopWatchClipboard'),
|
||||||
click() {
|
click() {
|
||||||
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: false })
|
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: false })
|
||||||
clipboardPoll.stopListening()
|
clipboardPoll.stopListening()
|
||||||
@@ -76,9 +76,9 @@ export function createMenu() {
|
|||||||
{
|
{
|
||||||
label: 'PicList',
|
label: 'PicList',
|
||||||
submenu: [
|
submenu: [
|
||||||
{ label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow },
|
{ label: t('main.menu.openMainWindow'), click: openMainWindow },
|
||||||
{
|
{
|
||||||
label: $t('RELOAD_APP'),
|
label: t('main.menu.restartApp'),
|
||||||
click() {
|
click() {
|
||||||
app.relaunch()
|
app.relaunch()
|
||||||
app.exit(0)
|
app.exit(0)
|
||||||
@@ -86,7 +86,7 @@ export function createMenu() {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{ label: $t('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu },
|
{ label: t('main.menu.chooseDefaultPicBed'), type: 'submenu', submenu },
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
submenu: [
|
submenu: [
|
||||||
@@ -100,8 +100,8 @@ export function createMenu() {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('QUIT'),
|
label: t('main.menu.quit'),
|
||||||
submenu: [{ label: $t('QUIT'), role: 'quit' }],
|
submenu: [{ label: t('main.menu.quit'), role: 'quit' }],
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
Menu.setApplicationMenu(appMenu)
|
Menu.setApplicationMenu(appMenu)
|
||||||
@@ -132,40 +132,40 @@ export function createContextMenu() {
|
|||||||
if (process.platform === 'darwin' || process.platform === 'win32') {
|
if (process.platform === 'darwin' || process.platform === 'win32') {
|
||||||
const submenu = buildPicBedListMenu()
|
const submenu = buildPicBedListMenu()
|
||||||
const template: (MenuItemConstructorOptions | MenuItem)[] = [
|
const template: (MenuItemConstructorOptions | MenuItem)[] = [
|
||||||
{ label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow },
|
{ label: t('main.menu.openMainWindow'), click: openMainWindow },
|
||||||
{ label: $t('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu },
|
{ label: t('main.menu.chooseDefaultPicBed'), type: 'submenu', submenu },
|
||||||
{
|
{
|
||||||
label: $t('START_WATCH_CLIPBOARD'),
|
label: t('main.menu.startWatchClipboard'),
|
||||||
click: startWatchClipboard,
|
click: startWatchClipboard,
|
||||||
visible: !isListeningClipboard,
|
visible: !isListeningClipboard,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('STOP_WATCH_CLIPBOARD'),
|
label: t('main.menu.stopWatchClipboard'),
|
||||||
click: stopWatchClipboard,
|
click: stopWatchClipboard,
|
||||||
visible: isListeningClipboard,
|
visible: isListeningClipboard,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('RELOAD_APP'),
|
label: t('main.menu.restartApp'),
|
||||||
click() {
|
click() {
|
||||||
app.relaunch()
|
app.relaunch()
|
||||||
app.exit(0)
|
app.exit(0)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ label: $t('QUIT'), role: 'quit' },
|
{ label: t('main.menu.quit'), role: 'quit' },
|
||||||
]
|
]
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
template.splice(
|
template.splice(
|
||||||
2,
|
2,
|
||||||
0,
|
0,
|
||||||
{
|
{
|
||||||
label: $t('OPEN_MINI_WINDOW'),
|
label: t('main.menu.openMiniWindow'),
|
||||||
click() {
|
click() {
|
||||||
openMiniWindow(false)
|
openMiniWindow(false)
|
||||||
},
|
},
|
||||||
visible: !isMiniWindowVisible,
|
visible: !isMiniWindowVisible,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('HIDE_MINI_WINDOW'),
|
label: t('main.menu.hideMiniWindow'),
|
||||||
click: hideMiniWindow,
|
click: hideMiniWindow,
|
||||||
visible: isMiniWindowVisible,
|
visible: isMiniWindowVisible,
|
||||||
},
|
},
|
||||||
@@ -181,31 +181,31 @@ export function createContextMenu() {
|
|||||||
// 目前的实现无法正常工作
|
// 目前的实现无法正常工作
|
||||||
|
|
||||||
contextMenu = Menu.buildFromTemplate([
|
contextMenu = Menu.buildFromTemplate([
|
||||||
{ label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow },
|
{ label: t('main.menu.openMainWindow'), click: openMainWindow },
|
||||||
{
|
{
|
||||||
label: $t('OPEN_MINI_WINDOW'),
|
label: t('main.menu.openMiniWindow'),
|
||||||
click() {
|
click() {
|
||||||
openMiniWindow(false)
|
openMiniWindow(false)
|
||||||
},
|
},
|
||||||
visible: !isMiniWindowVisible,
|
visible: !isMiniWindowVisible,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('HIDE_MINI_WINDOW'),
|
label: t('main.menu.hideMiniWindow'),
|
||||||
click: hideMiniWindow,
|
click: hideMiniWindow,
|
||||||
visible: isMiniWindowVisible,
|
visible: isMiniWindowVisible,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('START_WATCH_CLIPBOARD'),
|
label: t('main.menu.startWatchClipboard'),
|
||||||
click: startWatchClipboard,
|
click: startWatchClipboard,
|
||||||
visible: !isListeningClipboard,
|
visible: !isListeningClipboard,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('STOP_WATCH_CLIPBOARD'),
|
label: t('main.menu.stopWatchClipboard'),
|
||||||
click: stopWatchClipboard,
|
click: stopWatchClipboard,
|
||||||
visible: isListeningClipboard,
|
visible: isListeningClipboard,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('ABOUT'),
|
label: t('main.menu.about'),
|
||||||
click() {
|
click() {
|
||||||
dialog.showMessageBox({
|
dialog.showMessageBox({
|
||||||
title: 'PicList',
|
title: 'PicList',
|
||||||
@@ -215,7 +215,7 @@ export function createContextMenu() {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ label: $t('QUIT'), role: 'quit' },
|
{ label: t('main.menu.quit'), role: 'quit' },
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -327,7 +327,7 @@ export function createTray(tooltip: string) {
|
|||||||
: !!allConfig.settings?.uploadResultNotification
|
: !!allConfig.settings?.uploadResultNotification
|
||||||
if (isShowResultNotification) {
|
if (isShowResultNotification) {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('UPLOAD_SUCCEED'),
|
title: t('main.notification.uploadSuccess'),
|
||||||
body: shortUrl || imgs[i].imgUrl!,
|
body: shortUrl || imgs[i].imgUrl!,
|
||||||
// icon: files[i]
|
// icon: files[i]
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { Notification, WebContents } from 'electron'
|
|||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
|
|
||||||
import { T as $t } from '~/i18n/index'
|
import { t } from '~/i18n'
|
||||||
import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/utils/common'
|
import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/utils/common'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
import { IPasteStyle, IWindowList } from '~/utils/enum'
|
import { IPasteStyle, IWindowList } from '~/utils/enum'
|
||||||
@@ -45,7 +45,7 @@ export const uploadClipboardFiles = async (): Promise<IStringKeyMap> => {
|
|||||||
: !!allConfig.settings?.uploadResultNotification
|
: !!allConfig.settings?.uploadResultNotification
|
||||||
if (isShowResultNotification) {
|
if (isShowResultNotification) {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('UPLOAD_SUCCEED'),
|
title: t('main.notification.uploadSuccess'),
|
||||||
body: shortUrl || img[0].imgUrl!,
|
body: shortUrl || img[0].imgUrl!,
|
||||||
// icon: img[0].imgUrl
|
// icon: img[0].imgUrl
|
||||||
})
|
})
|
||||||
@@ -72,8 +72,8 @@ export const uploadClipboardFiles = async (): Promise<IStringKeyMap> => {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('UPLOAD_FAILED'),
|
title: t('main.notification.uploadFailed'),
|
||||||
body: $t('TIPS_UPLOAD_NOT_PICTURES'),
|
body: t('main.notification.uploadNotPicturesTips'),
|
||||||
})
|
})
|
||||||
notification.show()
|
notification.show()
|
||||||
return {
|
return {
|
||||||
@@ -125,7 +125,7 @@ export const uploadChoosedFiles = async (
|
|||||||
if (isShowResultNotification) {
|
if (isShowResultNotification) {
|
||||||
if (imgLength <= 3) {
|
if (imgLength <= 3) {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('UPLOAD_SUCCEED'),
|
title: t('main.notification.uploadSuccess'),
|
||||||
body: shortUrl || imgs[i].imgUrl!,
|
body: shortUrl || imgs[i].imgUrl!,
|
||||||
// icon: files[i].path
|
// icon: files[i].path
|
||||||
})
|
})
|
||||||
@@ -134,7 +134,7 @@ export const uploadChoosedFiles = async (
|
|||||||
}, i * 100)
|
}, i * 100)
|
||||||
} else if (i === imgLength - 1) {
|
} else if (i === imgLength - 1) {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('MULTI_UPLOAD_SUCCEED', { n: imgLength }),
|
title: t('main.notification.multipleUploadSuccess', { num: imgLength }),
|
||||||
body: '',
|
body: '',
|
||||||
})
|
})
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import type { IPicGo } from 'piclist'
|
|||||||
import writeFile from 'write-file-atomic'
|
import writeFile from 'write-file-atomic'
|
||||||
|
|
||||||
import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME } from '~/events/constant'
|
import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME } from '~/events/constant'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { getClipboardFilePath, getUploaderType, showNotification } from '~/utils/common'
|
import { getClipboardFilePath, getUploaderType, showNotification } from '~/utils/common'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
import { ICOREBuildInEvent, IWindowList } from '~/utils/enum'
|
import { ICOREBuildInEvent, IWindowList } from '~/utils/enum'
|
||||||
@@ -50,8 +50,8 @@ class Uploader {
|
|||||||
picgo.on(ICOREBuildInEvent.BEFORE_TRANSFORM, () => {
|
picgo.on(ICOREBuildInEvent.BEFORE_TRANSFORM, () => {
|
||||||
if (picgo.getConfig<boolean | undefined>(configPaths.settings.uploadNotification)) {
|
if (picgo.getConfig<boolean | undefined>(configPaths.settings.uploadNotification)) {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('UPLOAD_PROGRESS'),
|
title: t('main.notification.uploadProgress'),
|
||||||
body: $t('UPLOADING'),
|
body: t('main.notification.uploading'),
|
||||||
})
|
})
|
||||||
notification.show()
|
notification.show()
|
||||||
}
|
}
|
||||||
@@ -158,7 +158,7 @@ class Uploader {
|
|||||||
logger.error(e)
|
logger.error(e)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
showNotification({
|
showNotification({
|
||||||
title: $t('UPLOAD_FAILED'),
|
title: t('main.notification.uploadFailed'),
|
||||||
body: util.format(e.stack),
|
body: util.format(e.stack),
|
||||||
clickToCopy: true,
|
clickToCopy: true,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import picgo from '@core/picgo'
|
|||||||
import { app, BrowserWindow, Rectangle } from 'electron'
|
import { app, BrowserWindow, Rectangle } from 'electron'
|
||||||
|
|
||||||
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '~/events/constant'
|
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '~/events/constant'
|
||||||
import { T as $t } from '~/i18n'
|
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
import { IWindowList } from '~/utils/enum'
|
import { IWindowList } from '~/utils/enum'
|
||||||
|
|
||||||
@@ -150,7 +149,7 @@ const toolboxWindowOptions = {
|
|||||||
center: true,
|
center: true,
|
||||||
fullscreenable: false,
|
fullscreenable: false,
|
||||||
resizable: false,
|
resizable: false,
|
||||||
title: `PicList ${$t('TOOLBOX')}`,
|
title: 'PicList TOOLBOX',
|
||||||
backgroundColor: '#ebeef5',
|
backgroundColor: '#ebeef5',
|
||||||
icon: logo,
|
icon: logo,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ import dayjs from 'dayjs'
|
|||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import writeFile from 'write-file-atomic'
|
import writeFile from 'write-file-atomic'
|
||||||
|
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { notificationList } from '~/utils/notification'
|
import { notificationList } from '~/utils/notification'
|
||||||
|
|
||||||
const configFileBackupPath = appConfigBackupPath()
|
const configFileBackupPath = appConfigBackupPath()
|
||||||
|
|
||||||
const errorMsg = {
|
const errorMsg = {
|
||||||
broken: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'),
|
broken: t('main.notification.configFileBrokenDefaultTips'),
|
||||||
brokenButBackup: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP'),
|
brokenButBackup: t('main.notification.configFileBrokenBackupTips'),
|
||||||
}
|
}
|
||||||
|
|
||||||
function dbChecker() {
|
function dbChecker() {
|
||||||
@@ -32,7 +32,7 @@ function dbChecker() {
|
|||||||
}
|
}
|
||||||
let configFile: string
|
let configFile: string
|
||||||
const optionsTpl = {
|
const optionsTpl = {
|
||||||
title: $t('TIPS_NOTICE'),
|
title: t('main.notification.notice'),
|
||||||
body: '',
|
body: '',
|
||||||
}
|
}
|
||||||
// config save bak
|
// config save bak
|
||||||
@@ -49,8 +49,8 @@ function dbChecker() {
|
|||||||
JSON.parse(configFile)
|
JSON.parse(configFile)
|
||||||
writeFile.sync(configFilePath, configFile, { encoding: 'utf-8' })
|
writeFile.sync(configFilePath, configFile, { encoding: 'utf-8' })
|
||||||
const stats = fs.statSync(configFileBackupPath)
|
const stats = fs.statSync(configFileBackupPath)
|
||||||
optionsTpl.body = `${errorMsg.brokenButBackup}\n${$t('TIPS_PICGO_BACKUP_FILE_VERSION', {
|
optionsTpl.body = `${errorMsg.brokenButBackup}\n${t('main.notification.backupConfigFileVersion', {
|
||||||
v: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss'),
|
version: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss'),
|
||||||
})}`
|
})}`
|
||||||
notificationList.push(optionsTpl)
|
notificationList.push(optionsTpl)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { getLogger } from '@core/utils/localLogger'
|
|||||||
import { app } from 'electron'
|
import { app } from 'electron'
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
|
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { notificationList } from '~/utils/notification'
|
import { notificationList } from '~/utils/notification'
|
||||||
|
|
||||||
let _configFilePath = ''
|
let _configFilePath = ''
|
||||||
@@ -84,8 +84,8 @@ export function appConfigPath() {
|
|||||||
const logger = getLogger(piclistLogPath, 'PicList')
|
const logger = getLogger(piclistLogPath, 'PicList')
|
||||||
if (!hasCheckPath) {
|
if (!hasCheckPath) {
|
||||||
const optionsTpl = {
|
const optionsTpl = {
|
||||||
title: $t('TIPS_NOTICE'),
|
title: t('main.notification.notice'),
|
||||||
body: $t('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR'),
|
body: t('main.notification.customConfigFilePathError'),
|
||||||
}
|
}
|
||||||
notificationList.push(optionsTpl)
|
notificationList.push(optionsTpl)
|
||||||
hasCheckPath = true
|
hasCheckPath = true
|
||||||
@@ -134,8 +134,8 @@ export function manageConfigPath() {
|
|||||||
const logger = getLogger(manageLogPath, 'Manage')
|
const logger = getLogger(manageLogPath, 'Manage')
|
||||||
if (!hasCheckManagePath) {
|
if (!hasCheckManagePath) {
|
||||||
const optionsTpl = {
|
const optionsTpl = {
|
||||||
title: $t('TIPS_NOTICE'),
|
title: t('main.notification.notice'),
|
||||||
body: $t('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR'),
|
body: t('main.notification.customConfigFilePathError'),
|
||||||
}
|
}
|
||||||
notificationList.push(optionsTpl)
|
notificationList.push(optionsTpl)
|
||||||
hasCheckManagePath = true
|
hasCheckManagePath = true
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { appConfigPath } from '@core/datastore/dirs'
|
|||||||
import { PicGo } from 'piclist'
|
import { PicGo } from 'piclist'
|
||||||
import pkg from 'root/package.json'
|
import pkg from 'root/package.json'
|
||||||
|
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
const CONFIG_PATH = appConfigPath()
|
const CONFIG_PATH = appConfigPath()
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ if (!shortKeySetting) {
|
|||||||
enable: true,
|
enable: true,
|
||||||
key: 'CommandOrControl+Alt+P',
|
key: 'CommandOrControl+Alt+P',
|
||||||
name: 'upload',
|
name: 'upload',
|
||||||
label: $t('QUICK_UPLOAD'),
|
label: t('main.strings.quickUpload'),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import fs from 'fs-extra'
|
|||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
|
|
||||||
import { SHOW_INPUT_BOX } from '~/events/constant'
|
import { SHOW_INPUT_BOX } from '~/events/constant'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { handleCopyUrl } from '~/utils/common'
|
import { handleCopyUrl } from '~/utils/common'
|
||||||
import { IPasteStyle } from '~/utils/enum'
|
import { IPasteStyle } from '~/utils/enum'
|
||||||
import pasteTemplate from '~/utils/pasteTemplate'
|
import pasteTemplate from '~/utils/pasteTemplate'
|
||||||
@@ -96,7 +96,7 @@ class GuiApi implements IGuiApi {
|
|||||||
: !!allConfig.settings?.uploadResultNotification
|
: !!allConfig.settings?.uploadResultNotification
|
||||||
if (isShowResultNotification) {
|
if (isShowResultNotification) {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('UPLOAD_SUCCEED'),
|
title: t('main.notification.uploadSuccess'),
|
||||||
body: shortUrl || (imgs[i].imgUrl! as string),
|
body: shortUrl || (imgs[i].imgUrl! as string),
|
||||||
// icon: imgs[i].imgUrl
|
// icon: imgs[i].imgUrl
|
||||||
})
|
})
|
||||||
@@ -179,8 +179,8 @@ class GuiApi implements IGuiApi {
|
|||||||
const guiApi = GuiApi.getInstance()
|
const guiApi = GuiApi.getInstance()
|
||||||
guiApi
|
guiApi
|
||||||
.showMessageBox({
|
.showMessageBox({
|
||||||
title: $t('TIPS_WARNING'),
|
title: t('main.notification.warning'),
|
||||||
message: $t('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'),
|
message: t('main.notification.pluginRemoveGalleryItem'),
|
||||||
type: 'info',
|
type: 'info',
|
||||||
buttons: ['Yes', 'No'],
|
buttons: ['Yes', 'No'],
|
||||||
})
|
})
|
||||||
@@ -202,8 +202,8 @@ class GuiApi implements IGuiApi {
|
|||||||
const guiApi = GuiApi.getInstance()
|
const guiApi = GuiApi.getInstance()
|
||||||
guiApi
|
guiApi
|
||||||
.showMessageBox({
|
.showMessageBox({
|
||||||
title: $t('TIPS_WARNING'),
|
title: t('main.notification.warning'),
|
||||||
message: $t('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'),
|
message: t('main.notification.pluginRemoveGalleryItem'),
|
||||||
type: 'info',
|
type: 'info',
|
||||||
buttons: ['Yes', 'No'],
|
buttons: ['Yes', 'No'],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import {
|
|||||||
SHOW_MAIN_PAGE_QRCODE,
|
SHOW_MAIN_PAGE_QRCODE,
|
||||||
} from '~/events/constant'
|
} from '~/events/constant'
|
||||||
import { handlePluginUninstall, handlePluginUpdate } from '~/events/rpc/routes/plugin/utils'
|
import { handlePluginUninstall, handlePluginUpdate } from '~/events/rpc/routes/plugin/utils'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import clipboardPoll from '~/utils/clipboardPoll'
|
import clipboardPoll from '~/utils/clipboardPoll'
|
||||||
import { setTrayToolTip } from '~/utils/common'
|
import { setTrayToolTip } from '~/utils/common'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
@@ -35,29 +35,29 @@ const buildMiniPageMenu = () => {
|
|||||||
const submenu = buildPicBedListMenu()
|
const submenu = buildPicBedListMenu()
|
||||||
const template: (MenuItemConstructorOptions | MenuItem)[] = [
|
const template: (MenuItemConstructorOptions | MenuItem)[] = [
|
||||||
{
|
{
|
||||||
label: $t('OPEN_MAIN_WINDOW'),
|
label: t('main.menu.openMainWindow'),
|
||||||
click: openMainWindow,
|
click: openMainWindow,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('CHOOSE_DEFAULT_PICBED'),
|
label: t('main.menu.chooseDefaultPicBed'),
|
||||||
type: 'submenu',
|
type: 'submenu',
|
||||||
submenu,
|
submenu,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('UPLOAD_BY_CLIPBOARD'),
|
label: t('main.menu.uploadClipboardImage'),
|
||||||
click() {
|
click() {
|
||||||
uploadClipboardFiles()
|
uploadClipboardFiles()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('HIDE_MINI_WINDOW'),
|
label: t('main.menu.hideMiniWindow'),
|
||||||
click() {
|
click() {
|
||||||
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)
|
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)
|
||||||
miniWindow?.close()
|
miniWindow?.close()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('START_WATCH_CLIPBOARD'),
|
label: t('main.menu.startWatchClipboard'),
|
||||||
click() {
|
click() {
|
||||||
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: true })
|
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: true })
|
||||||
ClipboardWatcher.startListening()
|
ClipboardWatcher.startListening()
|
||||||
@@ -70,7 +70,7 @@ const buildMiniPageMenu = () => {
|
|||||||
visible: !isListeningClipboard,
|
visible: !isListeningClipboard,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('STOP_WATCH_CLIPBOARD'),
|
label: t('main.menu.stopWatchClipboard'),
|
||||||
click() {
|
click() {
|
||||||
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: false })
|
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: false })
|
||||||
ClipboardWatcher.stopListening()
|
ClipboardWatcher.stopListening()
|
||||||
@@ -80,7 +80,7 @@ const buildMiniPageMenu = () => {
|
|||||||
visible: isListeningClipboard,
|
visible: isListeningClipboard,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('RELOAD_APP'),
|
label: t('main.menu.restartApp'),
|
||||||
click() {
|
click() {
|
||||||
app.relaunch()
|
app.relaunch()
|
||||||
app.exit(0)
|
app.exit(0)
|
||||||
@@ -88,7 +88,7 @@ const buildMiniPageMenu = () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
role: 'quit',
|
role: 'quit',
|
||||||
label: $t('QUIT'),
|
label: t('main.menu.quit'),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
return Menu.buildFromTemplate(template)
|
return Menu.buildFromTemplate(template)
|
||||||
@@ -97,7 +97,7 @@ const buildMiniPageMenu = () => {
|
|||||||
const buildMainPageMenu = (win: BrowserWindow | undefined) => {
|
const buildMainPageMenu = (win: BrowserWindow | undefined) => {
|
||||||
const template = [
|
const template = [
|
||||||
{
|
{
|
||||||
label: $t('ABOUT'),
|
label: t('main.menu.about'),
|
||||||
click() {
|
click() {
|
||||||
dialog.showMessageBox({
|
dialog.showMessageBox({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
@@ -108,31 +108,31 @@ const buildMainPageMenu = (win: BrowserWindow | undefined) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('SHOW_PICBED_QRCODE'),
|
label: t('main.menu.generateConfigQrCode'),
|
||||||
click() {
|
click() {
|
||||||
win?.webContents?.send(SHOW_MAIN_PAGE_QRCODE)
|
win?.webContents?.send(SHOW_MAIN_PAGE_QRCODE)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('SHOW_FIRST_TIME_GUIDE'),
|
label: t('main.menu.showFirstRunGuide'),
|
||||||
click() {
|
click() {
|
||||||
win?.webContents?.send(SHOW_FIRST_TIME_GUIDE)
|
win?.webContents?.send(SHOW_FIRST_TIME_GUIDE)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('OPEN_TOOLBOX'),
|
label: t('main.menu.openToolBox'),
|
||||||
click() {
|
click() {
|
||||||
windowManager.create(IWindowList.TOOLBOX_WINDOW)
|
windowManager.create(IWindowList.TOOLBOX_WINDOW)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('SHOW_DEVTOOLS'),
|
label: t('main.menu.openDeveloperTools'),
|
||||||
click() {
|
click() {
|
||||||
win?.webContents?.openDevTools({ mode: 'detach' })
|
win?.webContents?.openDevTools({ mode: 'detach' })
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('FEEDBACK'),
|
label: t('main.menu.feedback'),
|
||||||
click() {
|
click() {
|
||||||
const url = 'https://github.com/Kuingsmile/PicList/issues'
|
const url = 'https://github.com/Kuingsmile/PicList/issues'
|
||||||
shell.openExternal(url)
|
shell.openExternal(url)
|
||||||
@@ -153,7 +153,10 @@ const buildSecondPicBedMenu = () => {
|
|||||||
const picBedConfigList = allConfig.uploader
|
const picBedConfigList = allConfig.uploader
|
||||||
const currentPicBedMenuItem = [
|
const currentPicBedMenuItem = [
|
||||||
{
|
{
|
||||||
label: `${$t('CURRENT_SECOND_PICBED')} - ${currentPicBedName || 'None'} - ${defaultSecondUploaderName}`,
|
label: t('main.menu.currentSecondaryPicBed', {
|
||||||
|
picBedName: currentPicBedName || 'None',
|
||||||
|
uploaderName: defaultSecondUploaderName,
|
||||||
|
}),
|
||||||
enabled: false,
|
enabled: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -207,7 +210,7 @@ const buildPicBedListMenu = () => {
|
|||||||
const picBedConfigList = allConfig.uploader
|
const picBedConfigList = allConfig.uploader
|
||||||
const currentPicBedMenuItem = [
|
const currentPicBedMenuItem = [
|
||||||
{
|
{
|
||||||
label: `${$t('CURRENT_PICBED')} - ${currentPicBedName}`,
|
label: t('main.menu.currentPicBed', { picBedName: currentPicBedName }),
|
||||||
enabled: false,
|
enabled: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -283,7 +286,7 @@ const handleRestoreState = (item: string, name: string): void => {
|
|||||||
const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
||||||
const menu = [
|
const menu = [
|
||||||
{
|
{
|
||||||
label: $t('ENABLE_PLUGIN'),
|
label: t('main.menu.enablePlugin'),
|
||||||
enabled: !plugin.enabled,
|
enabled: !plugin.enabled,
|
||||||
click() {
|
click() {
|
||||||
picgo.saveConfig({
|
picgo.saveConfig({
|
||||||
@@ -293,7 +296,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('DISABLE_PLUGIN'),
|
label: t('main.menu.disablePlugin'),
|
||||||
enabled: plugin.enabled,
|
enabled: plugin.enabled,
|
||||||
click() {
|
click() {
|
||||||
picgo.saveConfig({
|
picgo.saveConfig({
|
||||||
@@ -312,7 +315,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('UNINSTALL_PLUGIN'),
|
label: t('main.menu.uninstallPlugin'),
|
||||||
click() {
|
click() {
|
||||||
const window = windowManager.get(IWindowList.SETTING_WINDOW)
|
const window = windowManager.get(IWindowList.SETTING_WINDOW)
|
||||||
window?.webContents?.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName)
|
window?.webContents?.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName)
|
||||||
@@ -320,7 +323,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: $t('UPDATE_PLUGIN'),
|
label: t('main.menu.updatePlugin'),
|
||||||
click() {
|
click() {
|
||||||
const window = windowManager.get(IWindowList.SETTING_WINDOW)
|
const window = windowManager.get(IWindowList.SETTING_WINDOW)
|
||||||
window?.webContents?.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName)
|
window?.webContents?.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName)
|
||||||
@@ -331,8 +334,8 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
|||||||
for (const i in plugin.config) {
|
for (const i in plugin.config) {
|
||||||
if (plugin.config[i].config.length > 0) {
|
if (plugin.config[i].config.length > 0) {
|
||||||
const obj = {
|
const obj = {
|
||||||
label: $t('CONFIG_THING', {
|
label: t('main.menu.configPlugin', {
|
||||||
c: `${i} - ${plugin.config[i].fullName || plugin.config[i].name}`,
|
config: `${i} - ${plugin.config[i].fullName || plugin.config[i].name}`,
|
||||||
}),
|
}),
|
||||||
click() {
|
click() {
|
||||||
const window = windowManager.get(IWindowList.SETTING_WINDOW)
|
const window = windowManager.get(IWindowList.SETTING_WINDOW)
|
||||||
@@ -351,7 +354,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
|||||||
const currentTransformer = picgo.getConfig<string>(configPaths.picBed.transformer) || 'path'
|
const currentTransformer = picgo.getConfig<string>(configPaths.picBed.transformer) || 'path'
|
||||||
const pluginTransformer = plugin.config.transformer.name
|
const pluginTransformer = plugin.config.transformer.name
|
||||||
const obj = {
|
const obj = {
|
||||||
label: `${currentTransformer === pluginTransformer ? $t('DISABLE') : $t('ENABLE')}transformer - ${plugin.config.transformer.name}`,
|
label: `${currentTransformer === pluginTransformer ? t('main.menu.disable') : t('main.menu.enable')}transformer - ${plugin.config.transformer.name}`,
|
||||||
click() {
|
click() {
|
||||||
const transformer = plugin.config.transformer.name
|
const transformer = plugin.config.transformer.name
|
||||||
const currentTransformer = picgo.getConfig<string>(configPaths.picBed.transformer) || 'path'
|
const currentTransformer = picgo.getConfig<string>(configPaths.picBed.transformer) || 'path'
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { dialog, shell } from 'electron'
|
|||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import { IGuiMenuItem, PicGo as PicGoCore } from 'piclist'
|
import { IGuiMenuItem, PicGo as PicGoCore } from 'piclist'
|
||||||
|
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { handleStreamlinePluginName, showNotification, simpleClone } from '~/utils/common'
|
import { handleStreamlinePluginName, showNotification, simpleClone } from '~/utils/common'
|
||||||
import { ICOREBuildInEvent, IPicGoHelperType, IWindowList } from '~/utils/enum'
|
import { ICOREBuildInEvent, IPicGoHelperType, IWindowList } from '~/utils/enum'
|
||||||
|
|
||||||
@@ -109,8 +109,8 @@ const handleNPMError = (): IDispose => {
|
|||||||
if (msg === 'NPM is not installed') {
|
if (msg === 'NPM is not installed') {
|
||||||
dialog
|
dialog
|
||||||
.showMessageBox({
|
.showMessageBox({
|
||||||
title: $t('TIPS_ERROR'),
|
title: t('main.notification.error'),
|
||||||
message: $t('TIPS_INSTALL_NODE_AND_RELOAD_PICGO'),
|
message: t('main.notification.InstallNodeAndRestart'),
|
||||||
buttons: ['Yes'],
|
buttons: ['Yes'],
|
||||||
})
|
})
|
||||||
.then(res => {
|
.then(res => {
|
||||||
@@ -132,7 +132,7 @@ export const handlePluginUpdate = async (fullName: string | string[]) => {
|
|||||||
window?.webContents?.send('updateSuccess', res.body[0])
|
window?.webContents?.send('updateSuccess', res.body[0])
|
||||||
} else {
|
} else {
|
||||||
showNotification({
|
showNotification({
|
||||||
title: $t('PLUGIN_UPDATE_FAILED'),
|
title: t('main.notification.updatePluginFailed'),
|
||||||
body: res.body as string,
|
body: res.body as string,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -149,7 +149,7 @@ export const handlePluginUninstall = async (fullName: string) => {
|
|||||||
shortKeyHandler.unregisterPluginShortKey(res.body[0])
|
shortKeyHandler.unregisterPluginShortKey(res.body[0])
|
||||||
} else {
|
} else {
|
||||||
showNotification({
|
showNotification({
|
||||||
title: $t('PLUGIN_UNINSTALL_FAILED'),
|
title: t('main.notification.uninstallPluginFailed'),
|
||||||
body: res.body as string,
|
body: res.body as string,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -166,7 +166,7 @@ export const pluginGetListFunc = async (event: IIPCEvent) => {
|
|||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
event.sender.send('pluginList', [])
|
event.sender.send('pluginList', [])
|
||||||
showNotification({
|
showNotification({
|
||||||
title: $t('TIPS_GET_PLUGIN_LIST_FAILED'),
|
title: t('main.notification.getPluginListFailed'),
|
||||||
body: e.message,
|
body: e.message,
|
||||||
})
|
})
|
||||||
picgo.log.error(e)
|
picgo.log.error(e)
|
||||||
@@ -186,7 +186,7 @@ export const pluginInstallFunc = async (event: IIPCEvent, args: [fullName: strin
|
|||||||
await shortKeyHandler.registerPluginShortKey(res.body[0])
|
await shortKeyHandler.registerPluginShortKey(res.body[0])
|
||||||
} else {
|
} else {
|
||||||
showNotification({
|
showNotification({
|
||||||
title: $t('PLUGIN_INSTALL_FAILED'),
|
title: t('main.notification.installPluginFailed'),
|
||||||
body: res.body as string,
|
body: res.body as string,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -210,17 +210,17 @@ export const pluginImportLocalFunc = async (event: IIPCEvent) => {
|
|||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
event.sender.send('pluginList', [])
|
event.sender.send('pluginList', [])
|
||||||
showNotification({
|
showNotification({
|
||||||
title: $t('TIPS_GET_PLUGIN_LIST_FAILED'),
|
title: t('main.notification.getPluginListFailed'),
|
||||||
body: e.message,
|
body: e.message,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
showNotification({
|
showNotification({
|
||||||
title: $t('PLUGIN_IMPORT_SUCCEED'),
|
title: t('main.notification.importPluginSuccess'),
|
||||||
body: '',
|
body: '',
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
showNotification({
|
showNotification({
|
||||||
title: $t('PLUGIN_IMPORT_FAILED'),
|
title: t('main.notification.importPluginFailed'),
|
||||||
body: res.body as string,
|
body: res.body as string,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler'
|
|||||||
import { Notification } from 'electron'
|
import { Notification } from 'electron'
|
||||||
|
|
||||||
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '~/events/constant'
|
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '~/events/constant'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { IRPCActionType, IRPCType } from '~/utils/enum'
|
import { IRPCActionType, IRPCType } from '~/utils/enum'
|
||||||
|
|
||||||
const notificationFunc = (result: boolean) => {
|
const notificationFunc = (result: boolean) => {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t(`OPERATION_${result ? 'SUCCEED' : 'FAILED'}`),
|
title: result ? t('main.strings.operationSuccess') : t('main.strings.operationFailed'),
|
||||||
body: $t(`TIPS_SHORTCUT_MODIFIED_${result ? 'SUCCEED' : 'CONFLICT'}`),
|
body: result ? t('main.strings.shortcutModifiedSuccess') : t('main.strings.shortcutModifiedConflict'),
|
||||||
})
|
})
|
||||||
notification.show()
|
notification.show()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { app, nativeTheme, shell } from 'electron'
|
|||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
|
|
||||||
import { applyTheme, fetchThemes, importThemes, readTheme, resolveThemes } from '~/apis/app/theme'
|
import { applyTheme, fetchThemes, importThemes, readTheme, resolveThemes } from '~/apis/app/theme'
|
||||||
import { i18nManager } from '~/i18n'
|
import { initializeI18n } from '~/i18n'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
import { IRPCActionType, IRPCType } from '~/utils/enum'
|
import { IRPCActionType, IRPCType } from '~/utils/enum'
|
||||||
|
|
||||||
@@ -33,9 +33,8 @@ export default [
|
|||||||
{
|
{
|
||||||
action: IRPCActionType.SET_CURRENT_LANGUAGE,
|
action: IRPCActionType.SET_CURRENT_LANGUAGE,
|
||||||
handler: async (_: IIPCEvent, args: [language: string]) => {
|
handler: async (_: IIPCEvent, args: [language: string]) => {
|
||||||
i18nManager.setCurrentLanguage(args[0])
|
initializeI18n(args[0])
|
||||||
const { lang } = i18nManager.getCurrentLocales()
|
picgo.i18n.setLanguage(args[0])
|
||||||
picgo.i18n.setLanguage(lang)
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { appConfigPath, defaultDir } from '@core/datastore/dirs'
|
|||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
|
|
||||||
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
|
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { IToolboxItemCheckStatus, IToolboxItemType } from '~/utils/enum'
|
import { IToolboxItemCheckStatus, IToolboxItemType } from '~/utils/enum'
|
||||||
import { CLIPBOARD_IMAGE_FOLDER } from '~/utils/static'
|
import { CLIPBOARD_IMAGE_FOLDER } from '~/utils/static'
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<string> = {
|
|||||||
if (fs.existsSync(clipboardImagePath)) {
|
if (fs.existsSync(clipboardImagePath)) {
|
||||||
sendToolboxRes(event, {
|
sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.SUCCESS,
|
status: IToolboxItemCheckStatus.SUCCESS,
|
||||||
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS', {
|
msg: t('main.toolbox.checkClipboardFilePathTips', {
|
||||||
path: clipboardImagePath,
|
path: clipboardImagePath,
|
||||||
}),
|
}),
|
||||||
value: clipboardImagePath,
|
value: clipboardImagePath,
|
||||||
@@ -32,7 +32,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<string> = {
|
|||||||
} else {
|
} else {
|
||||||
sendToolboxRes(event, {
|
sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.ERROR,
|
status: IToolboxItemCheckStatus.ERROR,
|
||||||
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS', {
|
msg: t('main.toolbox.clipboardFilePathNotExistTips', {
|
||||||
path: clipboardImagePath,
|
path: clipboardImagePath,
|
||||||
}),
|
}),
|
||||||
value: path.dirname(clipboardImagePath),
|
value: path.dirname(clipboardImagePath),
|
||||||
@@ -41,7 +41,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<string> = {
|
|||||||
} else {
|
} else {
|
||||||
sendToolboxRes(event, {
|
sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.ERROR,
|
status: IToolboxItemCheckStatus.ERROR,
|
||||||
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS', {
|
msg: t('main.toolbox.clipboardFilePathNotExistTips', {
|
||||||
path: defaultClipboardImagePath,
|
path: defaultClipboardImagePath,
|
||||||
}),
|
}),
|
||||||
value: path.dirname(defaultClipboardImagePath),
|
value: path.dirname(defaultClipboardImagePath),
|
||||||
@@ -65,7 +65,7 @@ export const fixClipboardUploadMap: IToolboxFixMap<string> = {
|
|||||||
return {
|
return {
|
||||||
type: IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD,
|
type: IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD,
|
||||||
status: IToolboxItemCheckStatus.ERROR,
|
status: IToolboxItemCheckStatus.ERROR,
|
||||||
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS', {
|
msg: t('main.toolbox.createClipboardFilePathManuallyTips', {
|
||||||
path: clipboardImagePath,
|
path: clipboardImagePath,
|
||||||
}),
|
}),
|
||||||
value: path.dirname(clipboardImagePath),
|
value: path.dirname(clipboardImagePath),
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import type { IpcMainEvent } from 'electron'
|
|||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
|
|
||||||
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
|
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { IToolboxItemCheckStatus, IToolboxItemType } from '~/utils/enum'
|
import { IToolboxItemCheckStatus, IToolboxItemType } from '~/utils/enum'
|
||||||
|
|
||||||
export const checkFileMap: IToolboxCheckerMap<string> = {
|
export const checkFileMap: IToolboxCheckerMap<string> = {
|
||||||
@@ -21,7 +21,7 @@ export const checkFileMap: IToolboxCheckerMap<string> = {
|
|||||||
await fs.readJSON(configFilePath)
|
await fs.readJSON(configFilePath)
|
||||||
sendToolboxRes(event, {
|
sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.SUCCESS,
|
status: IToolboxItemCheckStatus.SUCCESS,
|
||||||
msg: $t('TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS', {
|
msg: t('main.toolbox.checkConfigFilePathTips', {
|
||||||
path: configFilePath,
|
path: configFilePath,
|
||||||
}),
|
}),
|
||||||
value: configFilePath,
|
value: configFilePath,
|
||||||
@@ -30,7 +30,7 @@ export const checkFileMap: IToolboxCheckerMap<string> = {
|
|||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
sendToolboxRes(event, {
|
sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.ERROR,
|
status: IToolboxItemCheckStatus.ERROR,
|
||||||
msg: $t('TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS'),
|
msg: t('main.toolbox.configFileBrokenTips'),
|
||||||
value: path.dirname(configFilePath),
|
value: path.dirname(configFilePath),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ export const checkFileMap: IToolboxCheckerMap<string> = {
|
|||||||
if (galleryDB.errorList.length === 0) {
|
if (galleryDB.errorList.length === 0) {
|
||||||
sendToolboxRes(event, {
|
sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.SUCCESS,
|
status: IToolboxItemCheckStatus.SUCCESS,
|
||||||
msg: $t('TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS', {
|
msg: t('main.toolbox.checkGalleryFilePathTips', {
|
||||||
path: DB_PATH,
|
path: DB_PATH,
|
||||||
}),
|
}),
|
||||||
value: path.dirname(DB_PATH),
|
value: path.dirname(DB_PATH),
|
||||||
@@ -52,7 +52,7 @@ export const checkFileMap: IToolboxCheckerMap<string> = {
|
|||||||
} else {
|
} else {
|
||||||
sendToolboxRes(event, {
|
sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.ERROR,
|
status: IToolboxItemCheckStatus.ERROR,
|
||||||
msg: $t('TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS'),
|
msg: t('main.toolbox.galleryFileBrokenTips'),
|
||||||
value: path.dirname(DB_PATH),
|
value: path.dirname(DB_PATH),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { IConfig } from 'piclist'
|
|||||||
import tunnel from 'tunnel'
|
import tunnel from 'tunnel'
|
||||||
|
|
||||||
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
|
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { IToolboxItemCheckStatus, IToolboxItemType } from '~/utils/enum'
|
import { IToolboxItemCheckStatus, IToolboxItemType } from '~/utils/enum'
|
||||||
|
|
||||||
function getProxy(proxyStr: string): AxiosRequestConfig['proxy'] | null {
|
function getProxy(proxyStr: string): AxiosRequestConfig['proxy'] | null {
|
||||||
@@ -38,7 +38,7 @@ export const checkProxyMap: IToolboxCheckerMap<string> = {
|
|||||||
if (!config) {
|
if (!config) {
|
||||||
return sendToolboxRes(event, {
|
return sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.SUCCESS,
|
status: IToolboxItemCheckStatus.SUCCESS,
|
||||||
msg: $t('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS'),
|
msg: t('main.toolbox.noProxy'),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,14 +46,14 @@ export const checkProxyMap: IToolboxCheckerMap<string> = {
|
|||||||
if (!proxy) {
|
if (!proxy) {
|
||||||
return sendToolboxRes(event, {
|
return sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.SUCCESS,
|
status: IToolboxItemCheckStatus.SUCCESS,
|
||||||
msg: $t('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS'),
|
msg: t('main.toolbox.noProxy'),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const proxyOptions = getProxy(proxy)
|
const proxyOptions = getProxy(proxy)
|
||||||
if (!proxyOptions) {
|
if (!proxyOptions) {
|
||||||
return sendToolboxRes(event, {
|
return sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.ERROR,
|
status: IToolboxItemCheckStatus.ERROR,
|
||||||
msg: $t('TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT'),
|
msg: t('main.toolbox.incorrectProxyTips'),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const httpsAgent = tunnel.httpsOverHttp({
|
const httpsAgent = tunnel.httpsOverHttp({
|
||||||
@@ -68,12 +68,12 @@ export const checkProxyMap: IToolboxCheckerMap<string> = {
|
|||||||
})
|
})
|
||||||
return sendToolboxRes(event, {
|
return sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.SUCCESS,
|
status: IToolboxItemCheckStatus.SUCCESS,
|
||||||
msg: $t('TOOLBOX_CHECK_PROXY_SUCCESS_TIPS'),
|
msg: t('main.toolbox.checkProxySuccessTips'),
|
||||||
})
|
})
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
return sendToolboxRes(event, {
|
return sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.ERROR,
|
status: IToolboxItemCheckStatus.ERROR,
|
||||||
msg: $t('TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING'),
|
msg: t('main.toolbox.checkProxyFailedTips'),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ export const checkProxyMap: IToolboxCheckerMap<string> = {
|
|||||||
|
|
||||||
sendToolboxRes(event, {
|
sendToolboxRes(event, {
|
||||||
status: IToolboxItemCheckStatus.SUCCESS,
|
status: IToolboxItemCheckStatus.SUCCESS,
|
||||||
msg: $t('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS'),
|
msg: t('main.toolbox.noProxy'),
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import windowManager from 'apis/app/window/windowManager'
|
|||||||
import { Notification } from 'electron'
|
import { Notification } from 'electron'
|
||||||
|
|
||||||
import { RPCRouter } from '~/events/rpc/router'
|
import { RPCRouter } from '~/events/rpc/router'
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { generateShortUrl, handleCopyUrl, setTrayToolTip } from '~/utils/common'
|
import { generateShortUrl, handleCopyUrl, setTrayToolTip } from '~/utils/common'
|
||||||
import { IPasteStyle, IRPCActionType, IRPCType, IWindowList } from '~/utils/enum'
|
import { IPasteStyle, IRPCActionType, IRPCType, IWindowList } from '~/utils/enum'
|
||||||
import pasteTemplate from '~/utils/pasteTemplate'
|
import pasteTemplate from '~/utils/pasteTemplate'
|
||||||
@@ -46,7 +46,7 @@ const trayRoutes = [
|
|||||||
: !!allConfig.settings?.uploadResultNotification
|
: !!allConfig.settings?.uploadResultNotification
|
||||||
if (isShowResultNotification) {
|
if (isShowResultNotification) {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('UPLOAD_SUCCEED'),
|
title: t('main.notification.uploadSuccess'),
|
||||||
body: shortUrl || img[0].imgUrl!,
|
body: shortUrl || img[0].imgUrl!,
|
||||||
// icon: file[0]
|
// icon: file[0]
|
||||||
// icon: img[0].imgUrl
|
// icon: img[0].imgUrl
|
||||||
|
|||||||
@@ -1,107 +1,26 @@
|
|||||||
import path from 'node:path'
|
import i18next from 'i18next'
|
||||||
import { fileURLToPath } from 'node:url'
|
|
||||||
|
|
||||||
import { I18n, ObjectAdapter } from '@piclist/i18n'
|
import en from '~/i18n/locales/en.json'
|
||||||
import fs from 'fs-extra'
|
import zhCN from '~/i18n/locales/zh-CN.json'
|
||||||
import yaml from 'yaml'
|
import zhTW from '~/i18n/locales/zh-TW.json'
|
||||||
|
|
||||||
const dirname = path.dirname(fileURLToPath(import.meta.url))
|
export function initializeI18n(lang: string) {
|
||||||
|
i18next.init({
|
||||||
const builtinI18nList: II18nItem[] = [
|
resources: {
|
||||||
{
|
en: {
|
||||||
label: '简体中文',
|
translation: en,
|
||||||
value: 'zh-CN',
|
},
|
||||||
},
|
'zh-CN': {
|
||||||
{
|
translation: zhCN,
|
||||||
label: '繁體中文',
|
},
|
||||||
value: 'zh-TW',
|
'zh-TW': {
|
||||||
},
|
translation: zhTW,
|
||||||
{
|
},
|
||||||
label: 'English',
|
},
|
||||||
value: 'en',
|
lng: lang,
|
||||||
},
|
fallbackLng: 'zh-CN',
|
||||||
]
|
})
|
||||||
class I18nManager {
|
|
||||||
private i18n: I18n | null = null
|
|
||||||
private builtinI18nFolder = path.join(dirname, '../../resources', 'i18n').replace('app.asar', 'app.asar.unpacked')
|
|
||||||
private outterI18nFolder = ''
|
|
||||||
private localesMap = new Map<string, ILocales>()
|
|
||||||
private currentLanguage: string = 'zh-CN'
|
|
||||||
readonly defaultLanguage: string = 'zh-CN'
|
|
||||||
private i18nFileList: II18nItem[] = builtinI18nList
|
|
||||||
|
|
||||||
setOutterI18nFolder(folder: string) {
|
|
||||||
this.outterI18nFolder = folder
|
|
||||||
}
|
|
||||||
|
|
||||||
addI18nFile(file: string, label: string) {
|
|
||||||
this.i18nFileList.push({
|
|
||||||
label,
|
|
||||||
value: file,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private getLocales(lang: string): ILocales {
|
|
||||||
if (this.localesMap.has(lang)) {
|
|
||||||
return this.localesMap.get(lang)!
|
|
||||||
}
|
|
||||||
let localesPath = path.join(this.builtinI18nFolder, `${lang}.yml`)
|
|
||||||
if (!fs.existsSync(localesPath)) {
|
|
||||||
localesPath = path.join(this.outterI18nFolder, `${lang}.yml`)
|
|
||||||
if (!fs.existsSync(localesPath)) {
|
|
||||||
localesPath = path.join(this.builtinI18nFolder, `${this.defaultLanguage}.yml`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
const localesString = fs.readFileSync(localesPath, 'utf8')
|
|
||||||
const locales = yaml.parseDocument(localesString).toJSON() as unknown as ILocales
|
|
||||||
this.localesMap.set(lang, locales)
|
|
||||||
return locales
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e)
|
|
||||||
// if error, use default language
|
|
||||||
localesPath = path.join(this.builtinI18nFolder, `${this.defaultLanguage}.yml`)
|
|
||||||
const localesString = fs.readFileSync(localesPath, 'utf8')
|
|
||||||
const locales = yaml.parseDocument(localesString).toJSON() as unknown as ILocales
|
|
||||||
this.localesMap.set(lang, locales)
|
|
||||||
return locales
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setCurrentLanguage(lang: string) {
|
|
||||||
const locales = this.getLocales(lang)
|
|
||||||
this.currentLanguage = lang
|
|
||||||
this.initI18n(lang, locales)
|
|
||||||
}
|
|
||||||
|
|
||||||
private initI18n(lang: string = this.defaultLanguage, locales: ILocales) {
|
|
||||||
const objectAdapter = new ObjectAdapter({
|
|
||||||
[lang]: locales,
|
|
||||||
})
|
|
||||||
this.i18n = new I18n({
|
|
||||||
adapter: objectAdapter,
|
|
||||||
defaultLanguage: lang,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
T(key: ILocalesKey, args: IStringKeyMap = {}): string {
|
|
||||||
return this.i18n?.translate(key, args) || key
|
|
||||||
}
|
|
||||||
|
|
||||||
get languageList() {
|
|
||||||
return this.i18nFileList
|
|
||||||
}
|
|
||||||
|
|
||||||
getCurrentLocales() {
|
|
||||||
return {
|
|
||||||
lang: this.currentLanguage,
|
|
||||||
locales: this.getLocales(this.currentLanguage),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
initializeI18n('zh-CN')
|
||||||
|
|
||||||
export const T = (key: ILocalesKey, args: IStringKeyMap = {}): string => {
|
export const t = i18next.t.bind(i18next)
|
||||||
return i18nManager.T(key, args)
|
|
||||||
}
|
|
||||||
|
|
||||||
export const i18nManager = new I18nManager()
|
|
||||||
|
|||||||
78
src/main/i18n/locales/en.json
Normal file
78
src/main/i18n/locales/en.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"menu": {
|
||||||
|
"about": "About",
|
||||||
|
"chooseDefaultPicBed": "Choose Default PicBed",
|
||||||
|
"configPlugin": "Configure {{config}}",
|
||||||
|
"currentPicBed": "Current PicBed - {{picBedName}}",
|
||||||
|
"currentSecondaryPicBed": "Current - {{picBedName}} - {{uploaderName}}",
|
||||||
|
"disable": "Disable",
|
||||||
|
"disablePlugin": "Disable Plugin",
|
||||||
|
"enable": "Enable",
|
||||||
|
"enablePlugin": "Enable Plugin",
|
||||||
|
"feedback": "Feedback",
|
||||||
|
"generateConfigQrCode": "Generate Config QR Code",
|
||||||
|
"hideMiniWindow": "Hide Mini Window",
|
||||||
|
"openDeveloperTools": "Open Developer Tools",
|
||||||
|
"openMainWindow": "Open Main Window",
|
||||||
|
"openMiniWindow": "Open Mini Window",
|
||||||
|
"openToolBox": "Open ToolBox",
|
||||||
|
"quit": "Quit",
|
||||||
|
"restartApp": "Restart App",
|
||||||
|
"showFirstRunGuide": "Show First Run Guide",
|
||||||
|
"startWatchClipboard": "Start Watch Clipboard",
|
||||||
|
"stopWatchClipboard": "Stop Watch Clipboard",
|
||||||
|
"uninstallPlugin": "Uninstall Plugin",
|
||||||
|
"updatePlugin": "Update Plugin",
|
||||||
|
"uploadClipboardImage": "Upload Clipboard Image"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"backupConfigFileVersion": "Backup Config File Version: {{version}}",
|
||||||
|
"cloudSyncDeleteFailed": "Cloud Sync Delete Failed",
|
||||||
|
"cloudSyncDeleteSucceed": "Cloud Sync Delete Succeed",
|
||||||
|
"configFileBrokenBackupTips": "Config file is broken, restored from backup",
|
||||||
|
"configFileBrokenDefaultTips": "Config file is broken, reset to default",
|
||||||
|
"customConfigFilePathError": "Custom config file path error",
|
||||||
|
"deleteSuccess": "Delete Success",
|
||||||
|
"error": "Error",
|
||||||
|
"getPluginListFailed": "Failed to get plugin list",
|
||||||
|
"importPluginFailed": "Failed to import plugin",
|
||||||
|
"importPluginSuccess": "Successfully imported plugin",
|
||||||
|
"InstallNodeAndRestart": "Install Node.js and restart PicList",
|
||||||
|
"installPluginFailed": "Install Plugin Failed",
|
||||||
|
"multipleUploadSuccess": "Successfully uploaded {{num}} images",
|
||||||
|
"notice": "Notice",
|
||||||
|
"pluginRemoveGalleryItem": "A plugin is attempting to delete some gallery items, do you allow it?",
|
||||||
|
"taskSuccessMsg": "{{completed}} Success, {{failed}} Failed",
|
||||||
|
"uninstallPluginFailed": "Uninstall Plugin Failed",
|
||||||
|
"updatePluginFailed": "Update Plugin Failed",
|
||||||
|
"uploadFailed": "Upload Failed",
|
||||||
|
"uploading": "Uploading",
|
||||||
|
"uploadNotPicturesTips": "Latest items in clipboard are not pictures",
|
||||||
|
"uploadProgress": "Upload Progress",
|
||||||
|
"uploadSuccess": "Upload Success",
|
||||||
|
"uploadTaskComplete": "Upload Task Complete",
|
||||||
|
"warning": "Warning"
|
||||||
|
},
|
||||||
|
"strings": {
|
||||||
|
"operationFailed": "Operation Failed",
|
||||||
|
"operationSuccess": "Operation Success",
|
||||||
|
"quickUpload": "Quick Upload",
|
||||||
|
"shortcutModifiedConflict": "Shortcut Conflict, Failed to Modify",
|
||||||
|
"shortcutModifiedSuccess": "Shortcut Modified Successfully"
|
||||||
|
},
|
||||||
|
"toolbox": {
|
||||||
|
"checkClipboardFilePathTips": "Clipboard image temporary folder path is {{path}}",
|
||||||
|
"checkConfigFilePathTips": "Config file path is {{path}}",
|
||||||
|
"checkGalleryFilePathTips": "Gallery image folder path is {{path}}",
|
||||||
|
"checkProxyFailedTips": "Current proxy setting is not working",
|
||||||
|
"checkProxySuccessTips": "Current proxy setting is working",
|
||||||
|
"clipboardFilePathNotExistTips": "Clipboard image temporary folder path {{path}} does not exist",
|
||||||
|
"configFileBrokenTips": "Config file is broken",
|
||||||
|
"createClipboardFilePathManuallyTips": "Please manually create the clipboard image temporary folder path {{path}}",
|
||||||
|
"galleryFileBrokenTips": "Gallery file is broken",
|
||||||
|
"incorrectProxyTips": "Current proxy setting is incorrect",
|
||||||
|
"noProxy": "No proxy is set"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
78
src/main/i18n/locales/zh-CN.json
Normal file
78
src/main/i18n/locales/zh-CN.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"menu": {
|
||||||
|
"about": "关于",
|
||||||
|
"chooseDefaultPicBed": "选择默认图床",
|
||||||
|
"configPlugin": "配置{{config}}",
|
||||||
|
"currentPicBed": "当前图床 - {{picBedName}}",
|
||||||
|
"currentSecondaryPicBed": "当前 - {{picBedName}} - {{uploaderName}}",
|
||||||
|
"disable": "禁用",
|
||||||
|
"disablePlugin": "禁用插件",
|
||||||
|
"enable": "启用",
|
||||||
|
"enablePlugin": "启用插件",
|
||||||
|
"feedback": "反馈",
|
||||||
|
"generateConfigQrCode": "生成配置二维码",
|
||||||
|
"hideMiniWindow": "隐藏迷你窗口",
|
||||||
|
"openDeveloperTools": "打开开发者工具",
|
||||||
|
"openMainWindow": "打开主窗口",
|
||||||
|
"openMiniWindow": "打开迷你窗口",
|
||||||
|
"openToolBox": "打开工具箱",
|
||||||
|
"quit": "退出",
|
||||||
|
"restartApp": "重启应用",
|
||||||
|
"showFirstRunGuide": "显示首次使用指南",
|
||||||
|
"startWatchClipboard": "开始监视剪贴板",
|
||||||
|
"stopWatchClipboard": "停止监视剪贴板",
|
||||||
|
"uninstallPlugin": "卸载插件",
|
||||||
|
"updatePlugin": "更新插件",
|
||||||
|
"uploadClipboardImage": "上传剪贴板图片"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"backupConfigFileVersion": "备份配置文件版本: {{version}}",
|
||||||
|
"cloudSyncDeleteFailed": "云端删除失败",
|
||||||
|
"cloudSyncDeleteSucceed": "云端删除成功",
|
||||||
|
"configFileBrokenBackupTips": "配置文件损坏,已恢复为备份配置",
|
||||||
|
"configFileBrokenDefaultTips": "配置文件损坏,已重置为默认配置",
|
||||||
|
"customConfigFilePathError": "自定义配置文件路径错误",
|
||||||
|
"deleteSuccess": "删除成功",
|
||||||
|
"error": "错误",
|
||||||
|
"getPluginListFailed": "获取插件列表失败",
|
||||||
|
"importPluginFailed": "导入插件失败",
|
||||||
|
"importPluginSuccess": "成功导入插件",
|
||||||
|
"InstallNodeAndRestart": "安装 Node.js 并重启 PicList",
|
||||||
|
"installPluginFailed": "安装插件失败",
|
||||||
|
"multipleUploadSuccess": "成功上传 {{num}} 张图片",
|
||||||
|
"notice": "通知",
|
||||||
|
"pluginRemoveGalleryItem": "有插件正在试图删除一些相册图片,是否允许?",
|
||||||
|
"taskSuccessMsg": "{{completed}} 成功,{{failed}} 失败",
|
||||||
|
"uninstallPluginFailed": "卸载插件失败",
|
||||||
|
"updatePluginFailed": "更新插件失败",
|
||||||
|
"uploadFailed": "上传失败",
|
||||||
|
"uploading": "上传中",
|
||||||
|
"uploadNotPicturesTips": "剪贴板最新内容不是图片",
|
||||||
|
"uploadProgress": "上传进度",
|
||||||
|
"uploadSuccess": "上传成功",
|
||||||
|
"uploadTaskComplete": "上传任务完成",
|
||||||
|
"warning": "警告"
|
||||||
|
},
|
||||||
|
"strings": {
|
||||||
|
"operationFailed": "操作失败",
|
||||||
|
"operationSuccess": "操作成功",
|
||||||
|
"quickUpload": "快捷上传",
|
||||||
|
"shortcutModifiedConflict": "快捷键冲突,修改失败",
|
||||||
|
"shortcutModifiedSuccess": "快捷键修改成功"
|
||||||
|
},
|
||||||
|
"toolbox": {
|
||||||
|
"checkClipboardFilePathTips": "剪贴板图片临时文件夹路径是 {{path}}",
|
||||||
|
"checkConfigFilePathTips": "配置文件路径是 {{path}}",
|
||||||
|
"checkGalleryFilePathTips": "相册图片文件夹路径是 {{path}}",
|
||||||
|
"checkProxyFailedTips": "当前代理设置无法使用",
|
||||||
|
"checkProxySuccessTips": "当前代理设置正常",
|
||||||
|
"clipboardFilePathNotExistTips": "剪贴板图片临时文件夹路径 {{path}} 不存在",
|
||||||
|
"configFileBrokenTips": "配置文件损坏",
|
||||||
|
"createClipboardFilePathManuallyTips": "请手动创建剪贴板图片临时文件夹路径 {{path}}",
|
||||||
|
"galleryFileBrokenTips": "相册文件已损坏",
|
||||||
|
"incorrectProxyTips": "当前代理设置不正确",
|
||||||
|
"noProxy": "当前未设置代理"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
78
src/main/i18n/locales/zh-TW.json
Normal file
78
src/main/i18n/locales/zh-TW.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"menu": {
|
||||||
|
"about": "關於",
|
||||||
|
"chooseDefaultPicBed": "選擇默認圖床",
|
||||||
|
"configPlugin": "配置{{config}}",
|
||||||
|
"currentPicBed": "當前圖床 - {{picBedName}}",
|
||||||
|
"currentSecondaryPicBed": "當前 - {{picBedName}} - {{uploaderName}}",
|
||||||
|
"disable": "禁用",
|
||||||
|
"disablePlugin": "禁用插件",
|
||||||
|
"enable": "啟用",
|
||||||
|
"enablePlugin": "啟用插件",
|
||||||
|
"feedback": "反饋",
|
||||||
|
"generateConfigQrCode": "生成配置 QR Code",
|
||||||
|
"hideMiniWindow": "隱藏迷你窗口",
|
||||||
|
"openDeveloperTools": "打開開發者工具",
|
||||||
|
"openMainWindow": "打開主窗口",
|
||||||
|
"openMiniWindow": "打開迷你窗口",
|
||||||
|
"openToolBox": "打開工具箱",
|
||||||
|
"quit": "退出",
|
||||||
|
"restartApp": "重啟應用",
|
||||||
|
"showFirstRunGuide": "顯示首次使用指南",
|
||||||
|
"startWatchClipboard": "開始監視剪貼板",
|
||||||
|
"stopWatchClipboard": "停止監視剪貼板",
|
||||||
|
"uninstallPlugin": "卸載插件",
|
||||||
|
"updatePlugin": "更新插件",
|
||||||
|
"uploadClipboardImage": "上傳剪貼板圖片"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"backupConfigFileVersion": "備份配置文件版本: {{version}}",
|
||||||
|
"cloudSyncDeleteFailed": "雲端刪除失敗",
|
||||||
|
"cloudSyncDeleteSucceed": "雲端刪除成功",
|
||||||
|
"configFileBrokenBackupTips": "配置文件損壞,已恢復為備份配置",
|
||||||
|
"configFileBrokenDefaultTips": "配置文件損壞,已重置為默認配置",
|
||||||
|
"customConfigFilePathError": "自定義配置文件路徑錯誤",
|
||||||
|
"deleteSuccess": "刪除成功",
|
||||||
|
"error": "錯誤",
|
||||||
|
"getPluginListFailed": "獲取插件列表失敗",
|
||||||
|
"importPluginFailed": "導入插件失敗",
|
||||||
|
"importPluginSuccess": "成功導入插件",
|
||||||
|
"InstallNodeAndRestart": "安裝 Node.js 並重啟 PicList",
|
||||||
|
"installPluginFailed": "安裝插件失敗",
|
||||||
|
"multipleUploadSuccess": "成功上傳 {{num}} 張圖片",
|
||||||
|
"notice": "通知",
|
||||||
|
"pluginRemoveGalleryItem": "有插件正在試圖刪除一些相冊圖片,是否允許?",
|
||||||
|
"taskSuccessMsg": "{{completed}} 成功,{{failed}} 失敗",
|
||||||
|
"uninstallPluginFailed": "卸載插件失敗",
|
||||||
|
"updatePluginFailed": "更新插件失敗",
|
||||||
|
"uploadFailed": "上傳失敗",
|
||||||
|
"uploading": "上傳中",
|
||||||
|
"uploadNotPicturesTips": "剪貼板最新內容不是圖片",
|
||||||
|
"uploadProgress": "上傳進度",
|
||||||
|
"uploadSuccess": "上傳成功",
|
||||||
|
"uploadTaskComplete": "上傳任務完成",
|
||||||
|
"warning": "警告"
|
||||||
|
},
|
||||||
|
"strings": {
|
||||||
|
"operationFailed": "操作失敗",
|
||||||
|
"operationSuccess": "操作成功",
|
||||||
|
"quickUpload": "快捷上傳",
|
||||||
|
"shortcutModifiedConflict": "快捷鍵衝突,修改失敗",
|
||||||
|
"shortcutModifiedSuccess": "快捷鍵修改成功"
|
||||||
|
},
|
||||||
|
"toolbox": {
|
||||||
|
"checkClipboardFilePathTips": "剪貼板圖片臨時文件夾路徑是 {{path}}",
|
||||||
|
"checkConfigFilePathTips": "配置文件路徑是 {{path}}",
|
||||||
|
"checkGalleryFilePathTips": "相冊圖片文件夾路徑是 {{path}}",
|
||||||
|
"checkProxyFailedTips": "當前代理設置無法使用",
|
||||||
|
"checkProxySuccessTips": "當前代理設置正常",
|
||||||
|
"clipboardFilePathNotExistTips": "剪貼板圖片臨時文件夾路徑 {{path}} 不存在",
|
||||||
|
"configFileBrokenTips": "配置文件損壞",
|
||||||
|
"createClipboardFilePathManuallyTips": "請手動創建剪貼板圖片臨時文件夾路徑 {{path}}",
|
||||||
|
"galleryFileBrokenTips": "相冊文件已損壞",
|
||||||
|
"incorrectProxyTips": "當前代理設置不正確",
|
||||||
|
"noProxy": "當前未設置代理"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@ import fs from 'fs-extra'
|
|||||||
import busEventList from '~/events/busEventList'
|
import busEventList from '~/events/busEventList'
|
||||||
import { rpcServer } from '~/events/rpc'
|
import { rpcServer } from '~/events/rpc'
|
||||||
import { startFileServer, stopFileServer } from '~/fileServer'
|
import { startFileServer, stopFileServer } from '~/fileServer'
|
||||||
import { i18nManager } from '~/i18n'
|
import { initializeI18n } from '~/i18n'
|
||||||
import { setupAutoUpdater } from '~/lifeCycle/autoUpdater'
|
import { setupAutoUpdater } from '~/lifeCycle/autoUpdater'
|
||||||
import fixPath from '~/lifeCycle/fixPath'
|
import fixPath from '~/lifeCycle/fixPath'
|
||||||
import UpDownTaskQueue from '~/manage/datastore/upDownTaskQueue'
|
import UpDownTaskQueue from '~/manage/datastore/upDownTaskQueue'
|
||||||
@@ -123,12 +123,14 @@ class LifeCycle {
|
|||||||
const locale = app.getLocale() || 'zh-CN'
|
const locale = app.getLocale() || 'zh-CN'
|
||||||
if (allConfig.settings?.language === undefined) {
|
if (allConfig.settings?.language === undefined) {
|
||||||
if (locale.startsWith('zh')) {
|
if (locale.startsWith('zh')) {
|
||||||
i18nManager.setCurrentLanguage(II18nLanguage.ZH_CN)
|
initializeI18n(II18nLanguage.ZH_CN)
|
||||||
picgo.saveConfig({ [configPaths.settings.language]: 'zh-CN' })
|
picgo.saveConfig({ [configPaths.settings.language]: 'zh-CN' })
|
||||||
} else {
|
} else {
|
||||||
i18nManager.setCurrentLanguage(II18nLanguage.EN)
|
initializeI18n(II18nLanguage.EN)
|
||||||
picgo.saveConfig({ [configPaths.settings.language]: 'en' })
|
picgo.saveConfig({ [configPaths.settings.language]: 'en' })
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
initializeI18n(allConfig.settings.language)
|
||||||
}
|
}
|
||||||
const isHideDock = allConfig.settings?.isHideDock || false
|
const isHideDock = allConfig.settings?.isHideDock || false
|
||||||
|
|
||||||
|
|||||||
@@ -3,15 +3,15 @@ import dayjs from 'dayjs'
|
|||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import writeFile from 'write-file-atomic'
|
import writeFile from 'write-file-atomic'
|
||||||
|
|
||||||
import { T as $t } from '~/i18n'
|
import { t } from '~/i18n'
|
||||||
import { notificationList } from '~/utils/notification'
|
import { notificationList } from '~/utils/notification'
|
||||||
|
|
||||||
const manageConfigFilePath = manageConfigPath()
|
const manageConfigFilePath = manageConfigPath()
|
||||||
const manageConfigFileBackupPath = manageConfigBackupPath()
|
const manageConfigFileBackupPath = manageConfigBackupPath()
|
||||||
|
|
||||||
const errorMsg = {
|
const errorMsg = {
|
||||||
broken: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'),
|
broken: t('main.notification.configFileBrokenDefaultTips'),
|
||||||
brokenButBackup: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP'),
|
brokenButBackup: t('main.notification.configFileBrokenBackupTips'),
|
||||||
}
|
}
|
||||||
|
|
||||||
function manageDbChecker() {
|
function manageDbChecker() {
|
||||||
@@ -21,7 +21,7 @@ function manageDbChecker() {
|
|||||||
}
|
}
|
||||||
let configFile: string
|
let configFile: string
|
||||||
const optionsTpl = {
|
const optionsTpl = {
|
||||||
title: $t('TIPS_NOTICE'),
|
title: t('main.notification.notice'),
|
||||||
body: '',
|
body: '',
|
||||||
}
|
}
|
||||||
// config save bak
|
// config save bak
|
||||||
@@ -40,8 +40,8 @@ function manageDbChecker() {
|
|||||||
encoding: 'utf-8',
|
encoding: 'utf-8',
|
||||||
})
|
})
|
||||||
const stats = fs.statSync(manageConfigFileBackupPath)
|
const stats = fs.statSync(manageConfigFileBackupPath)
|
||||||
optionsTpl.body = `${errorMsg.brokenButBackup}\n${$t('TIPS_PICGO_BACKUP_FILE_VERSION', {
|
optionsTpl.body = `${errorMsg.brokenButBackup}\n${t('main.notification.backupConfigFileVersion', {
|
||||||
v: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss'),
|
version: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss'),
|
||||||
})}`
|
})}`
|
||||||
notificationList.push(optionsTpl)
|
notificationList.push(optionsTpl)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import ALLApi from 'apis/delete/allApi'
|
|||||||
import GuiApi from 'apis/gui'
|
import GuiApi from 'apis/gui'
|
||||||
import { Notification } from 'electron'
|
import { Notification } from 'electron'
|
||||||
|
|
||||||
import { T as $t } from '~/i18n/index'
|
import { t } from '~/i18n/index'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
import { ICOREBuildInEvent, IWindowList } from '~/utils/enum'
|
import { ICOREBuildInEvent, IWindowList } from '~/utils/enum'
|
||||||
import { picBedsCanbeDeleted } from '~/utils/static'
|
import { picBedsCanbeDeleted } from '~/utils/static'
|
||||||
@@ -53,8 +53,10 @@ export const deleteChoosedFiles = async (list: ImgInfo[]): Promise<boolean[]> =>
|
|||||||
if (item.type !== undefined && picBedsCanbeDeleted.includes(item.type)) {
|
if (item.type !== undefined && picBedsCanbeDeleted.includes(item.type)) {
|
||||||
const noteFunc = (value: boolean) => {
|
const noteFunc = (value: boolean) => {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2'),
|
title: t('main.notification.deleteSuccess'),
|
||||||
body: $t(value ? 'GALLERY_SYNC_DELETE_NOTICE_SUCCEED' : 'GALLERY_SYNC_DELETE_NOTICE_FAILED'),
|
body: value
|
||||||
|
? t('main.notification.cloudSyncDeleteSucceed')
|
||||||
|
: t('main.notification.cloudSyncDeleteFailed'),
|
||||||
})
|
})
|
||||||
notification.show()
|
notification.show()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,6 @@ import { fileURLToPath } from 'node:url'
|
|||||||
|
|
||||||
import { appConfigPath, themesDir } from '@core/datastore/dirs'
|
import { appConfigPath, themesDir } from '@core/datastore/dirs'
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import yaml from 'yaml'
|
|
||||||
|
|
||||||
import { i18nManager } from '~/i18n'
|
|
||||||
|
|
||||||
const configPath = appConfigPath()
|
const configPath = appConfigPath()
|
||||||
const CONFIG_DIR = path.dirname(configPath)
|
const CONFIG_DIR = path.dirname(configPath)
|
||||||
@@ -18,7 +15,6 @@ function beforeOpen() {
|
|||||||
}
|
}
|
||||||
resolveClipboardImageGenerator()
|
resolveClipboardImageGenerator()
|
||||||
resolveCss()
|
resolveCss()
|
||||||
resolveOtherI18nFiles()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function copyFileOutsideOfElectronAsar(sourceInAsarArchive: string, destOutsideAsarArchive: string) {
|
function copyFileOutsideOfElectronAsar(sourceInAsarArchive: string, destOutsideAsarArchive: string) {
|
||||||
@@ -113,32 +109,4 @@ function resolveCss() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化其他语言文件
|
|
||||||
*/
|
|
||||||
function resolveOtherI18nFiles() {
|
|
||||||
const i18nFolder = path.join(CONFIG_DIR, 'i18n')
|
|
||||||
if (!fs.pathExistsSync(i18nFolder)) {
|
|
||||||
fs.mkdirSync(i18nFolder)
|
|
||||||
}
|
|
||||||
i18nManager.setOutterI18nFolder(i18nFolder)
|
|
||||||
const i18nFiles = fs.readdirSync(path.join(CONFIG_DIR, 'i18n'), {
|
|
||||||
withFileTypes: true,
|
|
||||||
})
|
|
||||||
i18nFiles.forEach(item => {
|
|
||||||
if (item.isFile() && item.name?.endsWith('.yml')) {
|
|
||||||
const i18nFilePath = path.join(i18nFolder, item.name)
|
|
||||||
const i18nFile = fs.readFileSync(i18nFilePath, 'utf8')
|
|
||||||
try {
|
|
||||||
const i18nFileObj = yaml.parseDocument(i18nFile).toJSON() as unknown as ILocales
|
|
||||||
if (i18nFileObj?.LANG_DISPLAY_LABEL) {
|
|
||||||
i18nManager.addI18nFile(item.name.replace('.yml', ''), i18nFileObj.LANG_DISPLAY_LABEL)
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export default beforeOpen
|
export default beforeOpen
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import picgo from '@core/picgo'
|
import picgo from '@core/picgo'
|
||||||
|
|
||||||
import { i18nManager } from '~/i18n'
|
import { initializeI18n } from '~/i18n'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
import { II18nLanguage } from '~/utils/enum'
|
import { II18nLanguage } from '~/utils/enum'
|
||||||
|
|
||||||
export const initI18n = () => {
|
export const initI18n = () => {
|
||||||
const currentLanguage = picgo.getConfig<string>(configPaths.settings.language) || II18nLanguage.ZH_CN
|
const currentLanguage = picgo.getConfig<string>(configPaths.settings.language) || II18nLanguage.ZH_CN
|
||||||
i18nManager.setCurrentLanguage(currentLanguage)
|
initializeI18n(currentLanguage)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import fs from 'fs-extra'
|
|||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
import { v4 as uuid } from 'uuid'
|
import { v4 as uuid } from 'uuid'
|
||||||
|
|
||||||
import { T as $t } from '~/i18n/index'
|
import { t } from '~/i18n/index'
|
||||||
import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/utils/common'
|
import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/utils/common'
|
||||||
import { configPaths } from '~/utils/configPaths'
|
import { configPaths } from '~/utils/configPaths'
|
||||||
import { IPasteStyle, IWindowList } from '~/utils/enum'
|
import { IPasteStyle, IWindowList } from '~/utils/enum'
|
||||||
@@ -566,8 +566,8 @@ class UploadTaskQueueManager {
|
|||||||
|
|
||||||
if (isShowResultNotification) {
|
if (isShowResultNotification) {
|
||||||
const notification = new Notification({
|
const notification = new Notification({
|
||||||
title: $t('UPLOAD_TASK_COMPLETED'),
|
title: t('main.notification.uploadTaskComplete'),
|
||||||
body: $t('UPLOAD_TASK_COMPLETED_BODY', { completed: stats.completed, failed: stats.failed }),
|
body: t('main.notification.taskSuccessMsg', { completed: stats.completed, failed: stats.failed }),
|
||||||
})
|
})
|
||||||
notification.show()
|
notification.show()
|
||||||
}
|
}
|
||||||
|
|||||||
77
src/universal/types/i18nt.d.ts
vendored
77
src/universal/types/i18nt.d.ts
vendored
@@ -1,77 +0,0 @@
|
|||||||
interface ILocales {
|
|
||||||
LANG_DISPLAY_LABEL: string
|
|
||||||
ABOUT: string
|
|
||||||
OPEN_MAIN_WINDOW: string
|
|
||||||
OPEN_MINI_WINDOW: string
|
|
||||||
HIDE_MINI_WINDOW: string
|
|
||||||
CHOOSE_DEFAULT_PICBED: string
|
|
||||||
RELOAD_APP: string
|
|
||||||
UPLOAD_SUCCEED: string
|
|
||||||
MULTI_UPLOAD_SUCCEED: string
|
|
||||||
UPLOAD_FAILED: string
|
|
||||||
UPLOAD_PROGRESS: string
|
|
||||||
UPLOADING: string
|
|
||||||
QUICK_UPLOAD: string
|
|
||||||
UPLOAD_BY_CLIPBOARD: string
|
|
||||||
SHOW_PICBED_QRCODE: string
|
|
||||||
ENABLE: string
|
|
||||||
DISABLE: string
|
|
||||||
CONFIG_THING: string
|
|
||||||
FIND_NEW_VERSION: string
|
|
||||||
NO_MORE_NOTICE: string
|
|
||||||
SHOW_DEVTOOLS: string
|
|
||||||
FEEDBACK: string
|
|
||||||
CURRENT_PICBED: string
|
|
||||||
CURRENT_SECOND_PICBED: string
|
|
||||||
START_WATCH_CLIPBOARD: string
|
|
||||||
STOP_WATCH_CLIPBOARD: string
|
|
||||||
OPEN_TOOLBOX: string
|
|
||||||
TOOLBOX: string
|
|
||||||
TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: string
|
|
||||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: string
|
|
||||||
TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: string
|
|
||||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS: string
|
|
||||||
TOOLBOX_CHECK_PROXY_SUCCESS_TIPS: string
|
|
||||||
TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS: string
|
|
||||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT: string
|
|
||||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING: string
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS: string
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS: string
|
|
||||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS: string
|
|
||||||
GALLERY_SYNC_DELETE_NOTICE_SUCCEED: string
|
|
||||||
GALLERY_SYNC_DELETE_NOTICE_FAILED: string
|
|
||||||
TIPS_GET_PLUGIN_LIST_FAILED: string
|
|
||||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: string
|
|
||||||
PLUGIN_INSTALL_FAILED: string
|
|
||||||
PLUGIN_UNINSTALL_FAILED: string
|
|
||||||
PLUGIN_UPDATE_FAILED: string
|
|
||||||
PLUGIN_IMPORT_SUCCEED: string
|
|
||||||
PLUGIN_IMPORT_FAILED: string
|
|
||||||
ENABLE_PLUGIN: string
|
|
||||||
DISABLE_PLUGIN: string
|
|
||||||
UNINSTALL_PLUGIN: string
|
|
||||||
UPDATE_PLUGIN: string
|
|
||||||
TIPS_NOTICE: string
|
|
||||||
TIPS_WARNING: string
|
|
||||||
TIPS_ERROR: string
|
|
||||||
TIPS_INSTALL_NODE_AND_RELOAD_PICGO: string
|
|
||||||
TIPS_PLUGIN_REMOVE_GALLERY_ITEM: string
|
|
||||||
TIPS_UPLOAD_NOT_PICTURES: string
|
|
||||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT: string
|
|
||||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP: string
|
|
||||||
TIPS_PICGO_BACKUP_FILE_VERSION: string
|
|
||||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: string
|
|
||||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: string
|
|
||||||
TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: string
|
|
||||||
TIPS_FIND_NEW_VERSION: string
|
|
||||||
UPDATE_DOWNLOADED: string
|
|
||||||
SHOW_FIRST_TIME_GUIDE: string
|
|
||||||
UPDATE: string
|
|
||||||
TIPS_UPDATE_DOWNLOADED: string
|
|
||||||
QUIT: string
|
|
||||||
OPERATION_SUCCEED: string
|
|
||||||
OPERATION_FAILED: string
|
|
||||||
UPLOAD_TASK_COMPLETED: string
|
|
||||||
UPLOAD_TASK_COMPLETED_BODY: string
|
|
||||||
}
|
|
||||||
type ILocalesKey = keyof ILocales
|
|
||||||
4
src/universal/types/shims-tsx.d.ts
vendored
4
src/universal/types/shims-tsx.d.ts
vendored
@@ -63,9 +63,5 @@ declare global {
|
|||||||
from: typeof Buffer.from
|
from: typeof Buffer.from
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i18n: {
|
|
||||||
setLocales: (lang: string, locales: ILocales) => void
|
|
||||||
translate: (key: ILocalesKey, args?: IStringKeyMap) => string
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -799,7 +799,7 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime "^0.13.11"
|
regenerator-runtime "^0.13.11"
|
||||||
|
|
||||||
"@babel/runtime@^7.28.4":
|
"@babel/runtime@^7.28.4", "@babel/runtime@^7.29.2":
|
||||||
version "7.29.2"
|
version "7.29.2"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e"
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e"
|
||||||
integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==
|
integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==
|
||||||
@@ -8049,6 +8049,13 @@ husky@^9.1.7:
|
|||||||
resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d"
|
resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d"
|
||||||
integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==
|
integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==
|
||||||
|
|
||||||
|
i18next@^25.10.9:
|
||||||
|
version "25.10.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/i18next/-/i18next-25.10.9.tgz#ecc1397a05cd69a479ac672348b9c2df153f984f"
|
||||||
|
integrity sha512-hQY9/bFoQKGlSKMlaCuLR8w1h5JjieqrsnZvEmj1Ja6Ec7fbyc4cTrCsY9mb9Sd8YQ/swsrKz1S9M8AcvVI70w==
|
||||||
|
dependencies:
|
||||||
|
"@babel/runtime" "^7.29.2"
|
||||||
|
|
||||||
iconv-corefoundation@^1.1.7:
|
iconv-corefoundation@^1.1.7:
|
||||||
version "1.1.7"
|
version "1.1.7"
|
||||||
resolved "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a"
|
resolved "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a"
|
||||||
|
|||||||
Reference in New Issue
Block a user