mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-05-06 20:42:57 +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"],
|
||||
"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.sortKeys": true,
|
||||
"i18n-ally.namespace": true,
|
||||
@@ -58,7 +58,7 @@
|
||||
"i18n-ally.displayLanguage": "zh-CN",
|
||||
"i18n-ally.enabledFrameworks": ["vue"],
|
||||
"i18n-ally.editor.preferEditor": true,
|
||||
"typescript.tsdk": "node_modules\\typescript\\lib",
|
||||
"js/ts.tsdk.path": "node_modules\\typescript\\lib",
|
||||
"css.validate": false,
|
||||
"scss.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: {
|
||||
'jsonc/sort-keys': [
|
||||
'error',
|
||||
|
||||
@@ -63,7 +63,6 @@
|
||||
"@aws-sdk/s3-request-presigner": "^3.1016.0",
|
||||
"@nodelib/fs.walk": "^3.0.1",
|
||||
"@octokit/rest": "^22.0.1",
|
||||
"@piclist/i18n": "^2.0.0",
|
||||
"@piclist/store": "^3.0.1",
|
||||
"@smithy/node-http-handler": "^4.5.0",
|
||||
"adm-zip": "^0.5.16",
|
||||
@@ -80,6 +79,7 @@
|
||||
"fs-extra": "^11.3.4",
|
||||
"got": "^14.6.6",
|
||||
"hpagent": "^1.2.0",
|
||||
"i18next": "^25.10.9",
|
||||
"lodash-es": "^4.17.23",
|
||||
"marked": "^17.0.5",
|
||||
"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 { buildPicBedListMenu } from '~/events/remotes/menu'
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import clipboardPoll from '~/utils/clipboardPoll'
|
||||
import { ensureFilePath, handleCopyUrl, setTray, tray } from '~/utils/common'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
@@ -40,11 +40,11 @@ export function setDockMenu() {
|
||||
const isListeningClipboard = picgo.getConfig<boolean | undefined>(configPaths.settings.isListeningClipboard) || false
|
||||
const dockMenu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: $t('OPEN_MAIN_WINDOW'),
|
||||
label: t('main.menu.openMainWindow'),
|
||||
click: openMainWindow,
|
||||
},
|
||||
{
|
||||
label: $t('START_WATCH_CLIPBOARD'),
|
||||
label: t('main.menu.startWatchClipboard'),
|
||||
click() {
|
||||
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: true })
|
||||
clipboardPoll.startListening()
|
||||
@@ -57,7 +57,7 @@ export function setDockMenu() {
|
||||
visible: !isListeningClipboard,
|
||||
},
|
||||
{
|
||||
label: $t('STOP_WATCH_CLIPBOARD'),
|
||||
label: t('main.menu.stopWatchClipboard'),
|
||||
click() {
|
||||
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: false })
|
||||
clipboardPoll.stopListening()
|
||||
@@ -76,9 +76,9 @@ export function createMenu() {
|
||||
{
|
||||
label: 'PicList',
|
||||
submenu: [
|
||||
{ label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow },
|
||||
{ label: t('main.menu.openMainWindow'), click: openMainWindow },
|
||||
{
|
||||
label: $t('RELOAD_APP'),
|
||||
label: t('main.menu.restartApp'),
|
||||
click() {
|
||||
app.relaunch()
|
||||
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',
|
||||
submenu: [
|
||||
@@ -100,8 +100,8 @@ export function createMenu() {
|
||||
],
|
||||
},
|
||||
{
|
||||
label: $t('QUIT'),
|
||||
submenu: [{ label: $t('QUIT'), role: 'quit' }],
|
||||
label: t('main.menu.quit'),
|
||||
submenu: [{ label: t('main.menu.quit'), role: 'quit' }],
|
||||
},
|
||||
])
|
||||
Menu.setApplicationMenu(appMenu)
|
||||
@@ -132,40 +132,40 @@ export function createContextMenu() {
|
||||
if (process.platform === 'darwin' || process.platform === 'win32') {
|
||||
const submenu = buildPicBedListMenu()
|
||||
const template: (MenuItemConstructorOptions | MenuItem)[] = [
|
||||
{ label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow },
|
||||
{ label: $t('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu },
|
||||
{ label: t('main.menu.openMainWindow'), click: openMainWindow },
|
||||
{ label: t('main.menu.chooseDefaultPicBed'), type: 'submenu', submenu },
|
||||
{
|
||||
label: $t('START_WATCH_CLIPBOARD'),
|
||||
label: t('main.menu.startWatchClipboard'),
|
||||
click: startWatchClipboard,
|
||||
visible: !isListeningClipboard,
|
||||
},
|
||||
{
|
||||
label: $t('STOP_WATCH_CLIPBOARD'),
|
||||
label: t('main.menu.stopWatchClipboard'),
|
||||
click: stopWatchClipboard,
|
||||
visible: isListeningClipboard,
|
||||
},
|
||||
{
|
||||
label: $t('RELOAD_APP'),
|
||||
label: t('main.menu.restartApp'),
|
||||
click() {
|
||||
app.relaunch()
|
||||
app.exit(0)
|
||||
},
|
||||
},
|
||||
{ label: $t('QUIT'), role: 'quit' },
|
||||
{ label: t('main.menu.quit'), role: 'quit' },
|
||||
]
|
||||
if (process.platform === 'win32') {
|
||||
template.splice(
|
||||
2,
|
||||
0,
|
||||
{
|
||||
label: $t('OPEN_MINI_WINDOW'),
|
||||
label: t('main.menu.openMiniWindow'),
|
||||
click() {
|
||||
openMiniWindow(false)
|
||||
},
|
||||
visible: !isMiniWindowVisible,
|
||||
},
|
||||
{
|
||||
label: $t('HIDE_MINI_WINDOW'),
|
||||
label: t('main.menu.hideMiniWindow'),
|
||||
click: hideMiniWindow,
|
||||
visible: isMiniWindowVisible,
|
||||
},
|
||||
@@ -181,31 +181,31 @@ export function createContextMenu() {
|
||||
// 目前的实现无法正常工作
|
||||
|
||||
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() {
|
||||
openMiniWindow(false)
|
||||
},
|
||||
visible: !isMiniWindowVisible,
|
||||
},
|
||||
{
|
||||
label: $t('HIDE_MINI_WINDOW'),
|
||||
label: t('main.menu.hideMiniWindow'),
|
||||
click: hideMiniWindow,
|
||||
visible: isMiniWindowVisible,
|
||||
},
|
||||
{
|
||||
label: $t('START_WATCH_CLIPBOARD'),
|
||||
label: t('main.menu.startWatchClipboard'),
|
||||
click: startWatchClipboard,
|
||||
visible: !isListeningClipboard,
|
||||
},
|
||||
{
|
||||
label: $t('STOP_WATCH_CLIPBOARD'),
|
||||
label: t('main.menu.stopWatchClipboard'),
|
||||
click: stopWatchClipboard,
|
||||
visible: isListeningClipboard,
|
||||
},
|
||||
{
|
||||
label: $t('ABOUT'),
|
||||
label: t('main.menu.about'),
|
||||
click() {
|
||||
dialog.showMessageBox({
|
||||
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
|
||||
if (isShowResultNotification) {
|
||||
const notification = new Notification({
|
||||
title: $t('UPLOAD_SUCCEED'),
|
||||
title: t('main.notification.uploadSuccess'),
|
||||
body: shortUrl || imgs[i].imgUrl!,
|
||||
// icon: files[i]
|
||||
})
|
||||
|
||||
@@ -6,7 +6,7 @@ import { Notification, WebContents } from 'electron'
|
||||
import fs from 'fs-extra'
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
|
||||
import { T as $t } from '~/i18n/index'
|
||||
import { t } from '~/i18n'
|
||||
import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/utils/common'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
import { IPasteStyle, IWindowList } from '~/utils/enum'
|
||||
@@ -45,7 +45,7 @@ export const uploadClipboardFiles = async (): Promise<IStringKeyMap> => {
|
||||
: !!allConfig.settings?.uploadResultNotification
|
||||
if (isShowResultNotification) {
|
||||
const notification = new Notification({
|
||||
title: $t('UPLOAD_SUCCEED'),
|
||||
title: t('main.notification.uploadSuccess'),
|
||||
body: shortUrl || img[0].imgUrl!,
|
||||
// icon: img[0].imgUrl
|
||||
})
|
||||
@@ -72,8 +72,8 @@ export const uploadClipboardFiles = async (): Promise<IStringKeyMap> => {
|
||||
}
|
||||
} else {
|
||||
const notification = new Notification({
|
||||
title: $t('UPLOAD_FAILED'),
|
||||
body: $t('TIPS_UPLOAD_NOT_PICTURES'),
|
||||
title: t('main.notification.uploadFailed'),
|
||||
body: t('main.notification.uploadNotPicturesTips'),
|
||||
})
|
||||
notification.show()
|
||||
return {
|
||||
@@ -125,7 +125,7 @@ export const uploadChoosedFiles = async (
|
||||
if (isShowResultNotification) {
|
||||
if (imgLength <= 3) {
|
||||
const notification = new Notification({
|
||||
title: $t('UPLOAD_SUCCEED'),
|
||||
title: t('main.notification.uploadSuccess'),
|
||||
body: shortUrl || imgs[i].imgUrl!,
|
||||
// icon: files[i].path
|
||||
})
|
||||
@@ -134,7 +134,7 @@ export const uploadChoosedFiles = async (
|
||||
}, i * 100)
|
||||
} else if (i === imgLength - 1) {
|
||||
const notification = new Notification({
|
||||
title: $t('MULTI_UPLOAD_SUCCEED', { n: imgLength }),
|
||||
title: t('main.notification.multipleUploadSuccess', { num: imgLength }),
|
||||
body: '',
|
||||
})
|
||||
setTimeout(() => {
|
||||
|
||||
@@ -11,7 +11,7 @@ import type { IPicGo } from 'piclist'
|
||||
import writeFile from 'write-file-atomic'
|
||||
|
||||
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 { configPaths } from '~/utils/configPaths'
|
||||
import { ICOREBuildInEvent, IWindowList } from '~/utils/enum'
|
||||
@@ -50,8 +50,8 @@ class Uploader {
|
||||
picgo.on(ICOREBuildInEvent.BEFORE_TRANSFORM, () => {
|
||||
if (picgo.getConfig<boolean | undefined>(configPaths.settings.uploadNotification)) {
|
||||
const notification = new Notification({
|
||||
title: $t('UPLOAD_PROGRESS'),
|
||||
body: $t('UPLOADING'),
|
||||
title: t('main.notification.uploadProgress'),
|
||||
body: t('main.notification.uploading'),
|
||||
})
|
||||
notification.show()
|
||||
}
|
||||
@@ -158,7 +158,7 @@ class Uploader {
|
||||
logger.error(e)
|
||||
setTimeout(() => {
|
||||
showNotification({
|
||||
title: $t('UPLOAD_FAILED'),
|
||||
title: t('main.notification.uploadFailed'),
|
||||
body: util.format(e.stack),
|
||||
clickToCopy: true,
|
||||
})
|
||||
|
||||
@@ -7,7 +7,6 @@ import picgo from '@core/picgo'
|
||||
import { app, BrowserWindow, Rectangle } from 'electron'
|
||||
|
||||
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '~/events/constant'
|
||||
import { T as $t } from '~/i18n'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
import { IWindowList } from '~/utils/enum'
|
||||
|
||||
@@ -150,7 +149,7 @@ const toolboxWindowOptions = {
|
||||
center: true,
|
||||
fullscreenable: false,
|
||||
resizable: false,
|
||||
title: `PicList ${$t('TOOLBOX')}`,
|
||||
title: 'PicList TOOLBOX',
|
||||
backgroundColor: '#ebeef5',
|
||||
icon: logo,
|
||||
webPreferences: {
|
||||
|
||||
@@ -3,14 +3,14 @@ import dayjs from 'dayjs'
|
||||
import fs from 'fs-extra'
|
||||
import writeFile from 'write-file-atomic'
|
||||
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { notificationList } from '~/utils/notification'
|
||||
|
||||
const configFileBackupPath = appConfigBackupPath()
|
||||
|
||||
const errorMsg = {
|
||||
broken: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'),
|
||||
brokenButBackup: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP'),
|
||||
broken: t('main.notification.configFileBrokenDefaultTips'),
|
||||
brokenButBackup: t('main.notification.configFileBrokenBackupTips'),
|
||||
}
|
||||
|
||||
function dbChecker() {
|
||||
@@ -32,7 +32,7 @@ function dbChecker() {
|
||||
}
|
||||
let configFile: string
|
||||
const optionsTpl = {
|
||||
title: $t('TIPS_NOTICE'),
|
||||
title: t('main.notification.notice'),
|
||||
body: '',
|
||||
}
|
||||
// config save bak
|
||||
@@ -49,8 +49,8 @@ function dbChecker() {
|
||||
JSON.parse(configFile)
|
||||
writeFile.sync(configFilePath, configFile, { encoding: 'utf-8' })
|
||||
const stats = fs.statSync(configFileBackupPath)
|
||||
optionsTpl.body = `${errorMsg.brokenButBackup}\n${$t('TIPS_PICGO_BACKUP_FILE_VERSION', {
|
||||
v: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss'),
|
||||
optionsTpl.body = `${errorMsg.brokenButBackup}\n${t('main.notification.backupConfigFileVersion', {
|
||||
version: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss'),
|
||||
})}`
|
||||
notificationList.push(optionsTpl)
|
||||
return
|
||||
|
||||
@@ -4,7 +4,7 @@ import { getLogger } from '@core/utils/localLogger'
|
||||
import { app } from 'electron'
|
||||
import fs from 'fs-extra'
|
||||
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { notificationList } from '~/utils/notification'
|
||||
|
||||
let _configFilePath = ''
|
||||
@@ -84,8 +84,8 @@ export function appConfigPath() {
|
||||
const logger = getLogger(piclistLogPath, 'PicList')
|
||||
if (!hasCheckPath) {
|
||||
const optionsTpl = {
|
||||
title: $t('TIPS_NOTICE'),
|
||||
body: $t('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR'),
|
||||
title: t('main.notification.notice'),
|
||||
body: t('main.notification.customConfigFilePathError'),
|
||||
}
|
||||
notificationList.push(optionsTpl)
|
||||
hasCheckPath = true
|
||||
@@ -134,8 +134,8 @@ export function manageConfigPath() {
|
||||
const logger = getLogger(manageLogPath, 'Manage')
|
||||
if (!hasCheckManagePath) {
|
||||
const optionsTpl = {
|
||||
title: $t('TIPS_NOTICE'),
|
||||
body: $t('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR'),
|
||||
title: t('main.notification.notice'),
|
||||
body: t('main.notification.customConfigFilePathError'),
|
||||
}
|
||||
notificationList.push(optionsTpl)
|
||||
hasCheckManagePath = true
|
||||
|
||||
@@ -3,7 +3,7 @@ import { appConfigPath } from '@core/datastore/dirs'
|
||||
import { PicGo } from 'piclist'
|
||||
import pkg from 'root/package.json'
|
||||
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
const CONFIG_PATH = appConfigPath()
|
||||
|
||||
@@ -24,7 +24,7 @@ if (!shortKeySetting) {
|
||||
enable: true,
|
||||
key: 'CommandOrControl+Alt+P',
|
||||
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 { SHOW_INPUT_BOX } from '~/events/constant'
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { handleCopyUrl } from '~/utils/common'
|
||||
import { IPasteStyle } from '~/utils/enum'
|
||||
import pasteTemplate from '~/utils/pasteTemplate'
|
||||
@@ -96,7 +96,7 @@ class GuiApi implements IGuiApi {
|
||||
: !!allConfig.settings?.uploadResultNotification
|
||||
if (isShowResultNotification) {
|
||||
const notification = new Notification({
|
||||
title: $t('UPLOAD_SUCCEED'),
|
||||
title: t('main.notification.uploadSuccess'),
|
||||
body: shortUrl || (imgs[i].imgUrl! as string),
|
||||
// icon: imgs[i].imgUrl
|
||||
})
|
||||
@@ -179,8 +179,8 @@ class GuiApi implements IGuiApi {
|
||||
const guiApi = GuiApi.getInstance()
|
||||
guiApi
|
||||
.showMessageBox({
|
||||
title: $t('TIPS_WARNING'),
|
||||
message: $t('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'),
|
||||
title: t('main.notification.warning'),
|
||||
message: t('main.notification.pluginRemoveGalleryItem'),
|
||||
type: 'info',
|
||||
buttons: ['Yes', 'No'],
|
||||
})
|
||||
@@ -202,8 +202,8 @@ class GuiApi implements IGuiApi {
|
||||
const guiApi = GuiApi.getInstance()
|
||||
guiApi
|
||||
.showMessageBox({
|
||||
title: $t('TIPS_WARNING'),
|
||||
message: $t('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'),
|
||||
title: t('main.notification.warning'),
|
||||
message: t('main.notification.pluginRemoveGalleryItem'),
|
||||
type: 'info',
|
||||
buttons: ['Yes', 'No'],
|
||||
})
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
SHOW_MAIN_PAGE_QRCODE,
|
||||
} from '~/events/constant'
|
||||
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 { setTrayToolTip } from '~/utils/common'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
@@ -35,29 +35,29 @@ const buildMiniPageMenu = () => {
|
||||
const submenu = buildPicBedListMenu()
|
||||
const template: (MenuItemConstructorOptions | MenuItem)[] = [
|
||||
{
|
||||
label: $t('OPEN_MAIN_WINDOW'),
|
||||
label: t('main.menu.openMainWindow'),
|
||||
click: openMainWindow,
|
||||
},
|
||||
{
|
||||
label: $t('CHOOSE_DEFAULT_PICBED'),
|
||||
label: t('main.menu.chooseDefaultPicBed'),
|
||||
type: 'submenu',
|
||||
submenu,
|
||||
},
|
||||
{
|
||||
label: $t('UPLOAD_BY_CLIPBOARD'),
|
||||
label: t('main.menu.uploadClipboardImage'),
|
||||
click() {
|
||||
uploadClipboardFiles()
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('HIDE_MINI_WINDOW'),
|
||||
label: t('main.menu.hideMiniWindow'),
|
||||
click() {
|
||||
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)
|
||||
miniWindow?.close()
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('START_WATCH_CLIPBOARD'),
|
||||
label: t('main.menu.startWatchClipboard'),
|
||||
click() {
|
||||
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: true })
|
||||
ClipboardWatcher.startListening()
|
||||
@@ -70,7 +70,7 @@ const buildMiniPageMenu = () => {
|
||||
visible: !isListeningClipboard,
|
||||
},
|
||||
{
|
||||
label: $t('STOP_WATCH_CLIPBOARD'),
|
||||
label: t('main.menu.stopWatchClipboard'),
|
||||
click() {
|
||||
picgo.saveConfig({ [configPaths.settings.isListeningClipboard]: false })
|
||||
ClipboardWatcher.stopListening()
|
||||
@@ -80,7 +80,7 @@ const buildMiniPageMenu = () => {
|
||||
visible: isListeningClipboard,
|
||||
},
|
||||
{
|
||||
label: $t('RELOAD_APP'),
|
||||
label: t('main.menu.restartApp'),
|
||||
click() {
|
||||
app.relaunch()
|
||||
app.exit(0)
|
||||
@@ -88,7 +88,7 @@ const buildMiniPageMenu = () => {
|
||||
},
|
||||
{
|
||||
role: 'quit',
|
||||
label: $t('QUIT'),
|
||||
label: t('main.menu.quit'),
|
||||
},
|
||||
]
|
||||
return Menu.buildFromTemplate(template)
|
||||
@@ -97,7 +97,7 @@ const buildMiniPageMenu = () => {
|
||||
const buildMainPageMenu = (win: BrowserWindow | undefined) => {
|
||||
const template = [
|
||||
{
|
||||
label: $t('ABOUT'),
|
||||
label: t('main.menu.about'),
|
||||
click() {
|
||||
dialog.showMessageBox({
|
||||
type: 'info',
|
||||
@@ -108,31 +108,31 @@ const buildMainPageMenu = (win: BrowserWindow | undefined) => {
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('SHOW_PICBED_QRCODE'),
|
||||
label: t('main.menu.generateConfigQrCode'),
|
||||
click() {
|
||||
win?.webContents?.send(SHOW_MAIN_PAGE_QRCODE)
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('SHOW_FIRST_TIME_GUIDE'),
|
||||
label: t('main.menu.showFirstRunGuide'),
|
||||
click() {
|
||||
win?.webContents?.send(SHOW_FIRST_TIME_GUIDE)
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('OPEN_TOOLBOX'),
|
||||
label: t('main.menu.openToolBox'),
|
||||
click() {
|
||||
windowManager.create(IWindowList.TOOLBOX_WINDOW)
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('SHOW_DEVTOOLS'),
|
||||
label: t('main.menu.openDeveloperTools'),
|
||||
click() {
|
||||
win?.webContents?.openDevTools({ mode: 'detach' })
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('FEEDBACK'),
|
||||
label: t('main.menu.feedback'),
|
||||
click() {
|
||||
const url = 'https://github.com/Kuingsmile/PicList/issues'
|
||||
shell.openExternal(url)
|
||||
@@ -153,7 +153,10 @@ const buildSecondPicBedMenu = () => {
|
||||
const picBedConfigList = allConfig.uploader
|
||||
const currentPicBedMenuItem = [
|
||||
{
|
||||
label: `${$t('CURRENT_SECOND_PICBED')} - ${currentPicBedName || 'None'} - ${defaultSecondUploaderName}`,
|
||||
label: t('main.menu.currentSecondaryPicBed', {
|
||||
picBedName: currentPicBedName || 'None',
|
||||
uploaderName: defaultSecondUploaderName,
|
||||
}),
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
@@ -207,7 +210,7 @@ const buildPicBedListMenu = () => {
|
||||
const picBedConfigList = allConfig.uploader
|
||||
const currentPicBedMenuItem = [
|
||||
{
|
||||
label: `${$t('CURRENT_PICBED')} - ${currentPicBedName}`,
|
||||
label: t('main.menu.currentPicBed', { picBedName: currentPicBedName }),
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
@@ -283,7 +286,7 @@ const handleRestoreState = (item: string, name: string): void => {
|
||||
const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
||||
const menu = [
|
||||
{
|
||||
label: $t('ENABLE_PLUGIN'),
|
||||
label: t('main.menu.enablePlugin'),
|
||||
enabled: !plugin.enabled,
|
||||
click() {
|
||||
picgo.saveConfig({
|
||||
@@ -293,7 +296,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('DISABLE_PLUGIN'),
|
||||
label: t('main.menu.disablePlugin'),
|
||||
enabled: plugin.enabled,
|
||||
click() {
|
||||
picgo.saveConfig({
|
||||
@@ -312,7 +315,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
||||
},
|
||||
},
|
||||
{
|
||||
label: $t('UNINSTALL_PLUGIN'),
|
||||
label: t('main.menu.uninstallPlugin'),
|
||||
click() {
|
||||
const window = windowManager.get(IWindowList.SETTING_WINDOW)
|
||||
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() {
|
||||
const window = windowManager.get(IWindowList.SETTING_WINDOW)
|
||||
window?.webContents?.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName)
|
||||
@@ -331,8 +334,8 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => {
|
||||
for (const i in plugin.config) {
|
||||
if (plugin.config[i].config.length > 0) {
|
||||
const obj = {
|
||||
label: $t('CONFIG_THING', {
|
||||
c: `${i} - ${plugin.config[i].fullName || plugin.config[i].name}`,
|
||||
label: t('main.menu.configPlugin', {
|
||||
config: `${i} - ${plugin.config[i].fullName || plugin.config[i].name}`,
|
||||
}),
|
||||
click() {
|
||||
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 pluginTransformer = plugin.config.transformer.name
|
||||
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() {
|
||||
const transformer = plugin.config.transformer.name
|
||||
const currentTransformer = picgo.getConfig<string>(configPaths.picBed.transformer) || 'path'
|
||||
|
||||
@@ -8,7 +8,7 @@ import { dialog, shell } from 'electron'
|
||||
import fs from 'fs-extra'
|
||||
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 { ICOREBuildInEvent, IPicGoHelperType, IWindowList } from '~/utils/enum'
|
||||
|
||||
@@ -109,8 +109,8 @@ const handleNPMError = (): IDispose => {
|
||||
if (msg === 'NPM is not installed') {
|
||||
dialog
|
||||
.showMessageBox({
|
||||
title: $t('TIPS_ERROR'),
|
||||
message: $t('TIPS_INSTALL_NODE_AND_RELOAD_PICGO'),
|
||||
title: t('main.notification.error'),
|
||||
message: t('main.notification.InstallNodeAndRestart'),
|
||||
buttons: ['Yes'],
|
||||
})
|
||||
.then(res => {
|
||||
@@ -132,7 +132,7 @@ export const handlePluginUpdate = async (fullName: string | string[]) => {
|
||||
window?.webContents?.send('updateSuccess', res.body[0])
|
||||
} else {
|
||||
showNotification({
|
||||
title: $t('PLUGIN_UPDATE_FAILED'),
|
||||
title: t('main.notification.updatePluginFailed'),
|
||||
body: res.body as string,
|
||||
})
|
||||
}
|
||||
@@ -149,7 +149,7 @@ export const handlePluginUninstall = async (fullName: string) => {
|
||||
shortKeyHandler.unregisterPluginShortKey(res.body[0])
|
||||
} else {
|
||||
showNotification({
|
||||
title: $t('PLUGIN_UNINSTALL_FAILED'),
|
||||
title: t('main.notification.uninstallPluginFailed'),
|
||||
body: res.body as string,
|
||||
})
|
||||
}
|
||||
@@ -166,7 +166,7 @@ export const pluginGetListFunc = async (event: IIPCEvent) => {
|
||||
} catch (e: any) {
|
||||
event.sender.send('pluginList', [])
|
||||
showNotification({
|
||||
title: $t('TIPS_GET_PLUGIN_LIST_FAILED'),
|
||||
title: t('main.notification.getPluginListFailed'),
|
||||
body: e.message,
|
||||
})
|
||||
picgo.log.error(e)
|
||||
@@ -186,7 +186,7 @@ export const pluginInstallFunc = async (event: IIPCEvent, args: [fullName: strin
|
||||
await shortKeyHandler.registerPluginShortKey(res.body[0])
|
||||
} else {
|
||||
showNotification({
|
||||
title: $t('PLUGIN_INSTALL_FAILED'),
|
||||
title: t('main.notification.installPluginFailed'),
|
||||
body: res.body as string,
|
||||
})
|
||||
}
|
||||
@@ -210,17 +210,17 @@ export const pluginImportLocalFunc = async (event: IIPCEvent) => {
|
||||
} catch (e: any) {
|
||||
event.sender.send('pluginList', [])
|
||||
showNotification({
|
||||
title: $t('TIPS_GET_PLUGIN_LIST_FAILED'),
|
||||
title: t('main.notification.getPluginListFailed'),
|
||||
body: e.message,
|
||||
})
|
||||
}
|
||||
showNotification({
|
||||
title: $t('PLUGIN_IMPORT_SUCCEED'),
|
||||
title: t('main.notification.importPluginSuccess'),
|
||||
body: '',
|
||||
})
|
||||
} else {
|
||||
showNotification({
|
||||
title: $t('PLUGIN_IMPORT_FAILED'),
|
||||
title: t('main.notification.importPluginFailed'),
|
||||
body: res.body as string,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -3,13 +3,13 @@ import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler'
|
||||
import { Notification } from 'electron'
|
||||
|
||||
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '~/events/constant'
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { IRPCActionType, IRPCType } from '~/utils/enum'
|
||||
|
||||
const notificationFunc = (result: boolean) => {
|
||||
const notification = new Notification({
|
||||
title: $t(`OPERATION_${result ? 'SUCCEED' : 'FAILED'}`),
|
||||
body: $t(`TIPS_SHORTCUT_MODIFIED_${result ? 'SUCCEED' : 'CONFLICT'}`),
|
||||
title: result ? t('main.strings.operationSuccess') : t('main.strings.operationFailed'),
|
||||
body: result ? t('main.strings.shortcutModifiedSuccess') : t('main.strings.shortcutModifiedConflict'),
|
||||
})
|
||||
notification.show()
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import { app, nativeTheme, shell } from 'electron'
|
||||
import fs from 'fs-extra'
|
||||
|
||||
import { applyTheme, fetchThemes, importThemes, readTheme, resolveThemes } from '~/apis/app/theme'
|
||||
import { i18nManager } from '~/i18n'
|
||||
import { initializeI18n } from '~/i18n'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
import { IRPCActionType, IRPCType } from '~/utils/enum'
|
||||
|
||||
@@ -33,9 +33,8 @@ export default [
|
||||
{
|
||||
action: IRPCActionType.SET_CURRENT_LANGUAGE,
|
||||
handler: async (_: IIPCEvent, args: [language: string]) => {
|
||||
i18nManager.setCurrentLanguage(args[0])
|
||||
const { lang } = i18nManager.getCurrentLocales()
|
||||
picgo.i18n.setLanguage(lang)
|
||||
initializeI18n(args[0])
|
||||
picgo.i18n.setLanguage(args[0])
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@ import { appConfigPath, defaultDir } from '@core/datastore/dirs'
|
||||
import fs from 'fs-extra'
|
||||
|
||||
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 { CLIPBOARD_IMAGE_FOLDER } from '~/utils/static'
|
||||
|
||||
@@ -24,7 +24,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<string> = {
|
||||
if (fs.existsSync(clipboardImagePath)) {
|
||||
sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.SUCCESS,
|
||||
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS', {
|
||||
msg: t('main.toolbox.checkClipboardFilePathTips', {
|
||||
path: clipboardImagePath,
|
||||
}),
|
||||
value: clipboardImagePath,
|
||||
@@ -32,7 +32,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<string> = {
|
||||
} else {
|
||||
sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.ERROR,
|
||||
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS', {
|
||||
msg: t('main.toolbox.clipboardFilePathNotExistTips', {
|
||||
path: clipboardImagePath,
|
||||
}),
|
||||
value: path.dirname(clipboardImagePath),
|
||||
@@ -41,7 +41,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap<string> = {
|
||||
} else {
|
||||
sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.ERROR,
|
||||
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS', {
|
||||
msg: t('main.toolbox.clipboardFilePathNotExistTips', {
|
||||
path: defaultClipboardImagePath,
|
||||
}),
|
||||
value: path.dirname(defaultClipboardImagePath),
|
||||
@@ -65,7 +65,7 @@ export const fixClipboardUploadMap: IToolboxFixMap<string> = {
|
||||
return {
|
||||
type: IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD,
|
||||
status: IToolboxItemCheckStatus.ERROR,
|
||||
msg: $t('TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS', {
|
||||
msg: t('main.toolbox.createClipboardFilePathManuallyTips', {
|
||||
path: clipboardImagePath,
|
||||
}),
|
||||
value: path.dirname(clipboardImagePath),
|
||||
|
||||
@@ -6,7 +6,7 @@ import type { IpcMainEvent } from 'electron'
|
||||
import fs from 'fs-extra'
|
||||
|
||||
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { IToolboxItemCheckStatus, IToolboxItemType } from '~/utils/enum'
|
||||
|
||||
export const checkFileMap: IToolboxCheckerMap<string> = {
|
||||
@@ -21,7 +21,7 @@ export const checkFileMap: IToolboxCheckerMap<string> = {
|
||||
await fs.readJSON(configFilePath)
|
||||
sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.SUCCESS,
|
||||
msg: $t('TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS', {
|
||||
msg: t('main.toolbox.checkConfigFilePathTips', {
|
||||
path: configFilePath,
|
||||
}),
|
||||
value: configFilePath,
|
||||
@@ -30,7 +30,7 @@ export const checkFileMap: IToolboxCheckerMap<string> = {
|
||||
} catch (_e) {
|
||||
sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.ERROR,
|
||||
msg: $t('TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS'),
|
||||
msg: t('main.toolbox.configFileBrokenTips'),
|
||||
value: path.dirname(configFilePath),
|
||||
})
|
||||
}
|
||||
@@ -44,7 +44,7 @@ export const checkFileMap: IToolboxCheckerMap<string> = {
|
||||
if (galleryDB.errorList.length === 0) {
|
||||
sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.SUCCESS,
|
||||
msg: $t('TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS', {
|
||||
msg: t('main.toolbox.checkGalleryFilePathTips', {
|
||||
path: DB_PATH,
|
||||
}),
|
||||
value: path.dirname(DB_PATH),
|
||||
@@ -52,7 +52,7 @@ export const checkFileMap: IToolboxCheckerMap<string> = {
|
||||
} else {
|
||||
sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.ERROR,
|
||||
msg: $t('TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS'),
|
||||
msg: t('main.toolbox.galleryFileBrokenTips'),
|
||||
value: path.dirname(DB_PATH),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IConfig } from 'piclist'
|
||||
import tunnel from 'tunnel'
|
||||
|
||||
import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils'
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { IToolboxItemCheckStatus, IToolboxItemType } from '~/utils/enum'
|
||||
|
||||
function getProxy(proxyStr: string): AxiosRequestConfig['proxy'] | null {
|
||||
@@ -38,7 +38,7 @@ export const checkProxyMap: IToolboxCheckerMap<string> = {
|
||||
if (!config) {
|
||||
return sendToolboxRes(event, {
|
||||
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) {
|
||||
return sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.SUCCESS,
|
||||
msg: $t('TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS'),
|
||||
msg: t('main.toolbox.noProxy'),
|
||||
})
|
||||
} else {
|
||||
const proxyOptions = getProxy(proxy)
|
||||
if (!proxyOptions) {
|
||||
return sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.ERROR,
|
||||
msg: $t('TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT'),
|
||||
msg: t('main.toolbox.incorrectProxyTips'),
|
||||
})
|
||||
} else {
|
||||
const httpsAgent = tunnel.httpsOverHttp({
|
||||
@@ -68,12 +68,12 @@ export const checkProxyMap: IToolboxCheckerMap<string> = {
|
||||
})
|
||||
return sendToolboxRes(event, {
|
||||
status: IToolboxItemCheckStatus.SUCCESS,
|
||||
msg: $t('TOOLBOX_CHECK_PROXY_SUCCESS_TIPS'),
|
||||
msg: t('main.toolbox.checkProxySuccessTips'),
|
||||
})
|
||||
} catch (_e) {
|
||||
return sendToolboxRes(event, {
|
||||
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, {
|
||||
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 { RPCRouter } from '~/events/rpc/router'
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { generateShortUrl, handleCopyUrl, setTrayToolTip } from '~/utils/common'
|
||||
import { IPasteStyle, IRPCActionType, IRPCType, IWindowList } from '~/utils/enum'
|
||||
import pasteTemplate from '~/utils/pasteTemplate'
|
||||
@@ -46,7 +46,7 @@ const trayRoutes = [
|
||||
: !!allConfig.settings?.uploadResultNotification
|
||||
if (isShowResultNotification) {
|
||||
const notification = new Notification({
|
||||
title: $t('UPLOAD_SUCCEED'),
|
||||
title: t('main.notification.uploadSuccess'),
|
||||
body: shortUrl || img[0].imgUrl!,
|
||||
// icon: file[0]
|
||||
// icon: img[0].imgUrl
|
||||
|
||||
@@ -1,107 +1,26 @@
|
||||
import path from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import i18next from 'i18next'
|
||||
|
||||
import { I18n, ObjectAdapter } from '@piclist/i18n'
|
||||
import fs from 'fs-extra'
|
||||
import yaml from 'yaml'
|
||||
import en from '~/i18n/locales/en.json'
|
||||
import zhCN from '~/i18n/locales/zh-CN.json'
|
||||
import zhTW from '~/i18n/locales/zh-TW.json'
|
||||
|
||||
const dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
const builtinI18nList: II18nItem[] = [
|
||||
{
|
||||
label: '简体中文',
|
||||
value: 'zh-CN',
|
||||
export function initializeI18n(lang: string) {
|
||||
i18next.init({
|
||||
resources: {
|
||||
en: {
|
||||
translation: en,
|
||||
},
|
||||
{
|
||||
label: '繁體中文',
|
||||
value: 'zh-TW',
|
||||
'zh-CN': {
|
||||
translation: zhCN,
|
||||
},
|
||||
{
|
||||
label: 'English',
|
||||
value: 'en',
|
||||
'zh-TW': {
|
||||
translation: zhTW,
|
||||
},
|
||||
]
|
||||
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,
|
||||
},
|
||||
lng: lang,
|
||||
fallbackLng: 'zh-CN',
|
||||
})
|
||||
}
|
||||
initializeI18n('zh-CN')
|
||||
|
||||
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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const T = (key: ILocalesKey, args: IStringKeyMap = {}): string => {
|
||||
return i18nManager.T(key, args)
|
||||
}
|
||||
|
||||
export const i18nManager = new I18nManager()
|
||||
export const t = i18next.t.bind(i18next)
|
||||
|
||||
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 { rpcServer } from '~/events/rpc'
|
||||
import { startFileServer, stopFileServer } from '~/fileServer'
|
||||
import { i18nManager } from '~/i18n'
|
||||
import { initializeI18n } from '~/i18n'
|
||||
import { setupAutoUpdater } from '~/lifeCycle/autoUpdater'
|
||||
import fixPath from '~/lifeCycle/fixPath'
|
||||
import UpDownTaskQueue from '~/manage/datastore/upDownTaskQueue'
|
||||
@@ -123,12 +123,14 @@ class LifeCycle {
|
||||
const locale = app.getLocale() || 'zh-CN'
|
||||
if (allConfig.settings?.language === undefined) {
|
||||
if (locale.startsWith('zh')) {
|
||||
i18nManager.setCurrentLanguage(II18nLanguage.ZH_CN)
|
||||
initializeI18n(II18nLanguage.ZH_CN)
|
||||
picgo.saveConfig({ [configPaths.settings.language]: 'zh-CN' })
|
||||
} else {
|
||||
i18nManager.setCurrentLanguage(II18nLanguage.EN)
|
||||
initializeI18n(II18nLanguage.EN)
|
||||
picgo.saveConfig({ [configPaths.settings.language]: 'en' })
|
||||
}
|
||||
} else {
|
||||
initializeI18n(allConfig.settings.language)
|
||||
}
|
||||
const isHideDock = allConfig.settings?.isHideDock || false
|
||||
|
||||
|
||||
@@ -3,15 +3,15 @@ import dayjs from 'dayjs'
|
||||
import fs from 'fs-extra'
|
||||
import writeFile from 'write-file-atomic'
|
||||
|
||||
import { T as $t } from '~/i18n'
|
||||
import { t } from '~/i18n'
|
||||
import { notificationList } from '~/utils/notification'
|
||||
|
||||
const manageConfigFilePath = manageConfigPath()
|
||||
const manageConfigFileBackupPath = manageConfigBackupPath()
|
||||
|
||||
const errorMsg = {
|
||||
broken: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'),
|
||||
brokenButBackup: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP'),
|
||||
broken: t('main.notification.configFileBrokenDefaultTips'),
|
||||
brokenButBackup: t('main.notification.configFileBrokenBackupTips'),
|
||||
}
|
||||
|
||||
function manageDbChecker() {
|
||||
@@ -21,7 +21,7 @@ function manageDbChecker() {
|
||||
}
|
||||
let configFile: string
|
||||
const optionsTpl = {
|
||||
title: $t('TIPS_NOTICE'),
|
||||
title: t('main.notification.notice'),
|
||||
body: '',
|
||||
}
|
||||
// config save bak
|
||||
@@ -40,8 +40,8 @@ function manageDbChecker() {
|
||||
encoding: 'utf-8',
|
||||
})
|
||||
const stats = fs.statSync(manageConfigFileBackupPath)
|
||||
optionsTpl.body = `${errorMsg.brokenButBackup}\n${$t('TIPS_PICGO_BACKUP_FILE_VERSION', {
|
||||
v: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss'),
|
||||
optionsTpl.body = `${errorMsg.brokenButBackup}\n${t('main.notification.backupConfigFileVersion', {
|
||||
version: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss'),
|
||||
})}`
|
||||
notificationList.push(optionsTpl)
|
||||
return
|
||||
|
||||
@@ -6,7 +6,7 @@ import ALLApi from 'apis/delete/allApi'
|
||||
import GuiApi from 'apis/gui'
|
||||
import { Notification } from 'electron'
|
||||
|
||||
import { T as $t } from '~/i18n/index'
|
||||
import { t } from '~/i18n/index'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
import { ICOREBuildInEvent, IWindowList } from '~/utils/enum'
|
||||
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)) {
|
||||
const noteFunc = (value: boolean) => {
|
||||
const notification = new Notification({
|
||||
title: $t('MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2'),
|
||||
body: $t(value ? 'GALLERY_SYNC_DELETE_NOTICE_SUCCEED' : 'GALLERY_SYNC_DELETE_NOTICE_FAILED'),
|
||||
title: t('main.notification.deleteSuccess'),
|
||||
body: value
|
||||
? t('main.notification.cloudSyncDeleteSucceed')
|
||||
: t('main.notification.cloudSyncDeleteFailed'),
|
||||
})
|
||||
notification.show()
|
||||
}
|
||||
|
||||
@@ -4,9 +4,6 @@ import { fileURLToPath } from 'node:url'
|
||||
|
||||
import { appConfigPath, themesDir } from '@core/datastore/dirs'
|
||||
import fs from 'fs-extra'
|
||||
import yaml from 'yaml'
|
||||
|
||||
import { i18nManager } from '~/i18n'
|
||||
|
||||
const configPath = appConfigPath()
|
||||
const CONFIG_DIR = path.dirname(configPath)
|
||||
@@ -18,7 +15,6 @@ function beforeOpen() {
|
||||
}
|
||||
resolveClipboardImageGenerator()
|
||||
resolveCss()
|
||||
resolveOtherI18nFiles()
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import picgo from '@core/picgo'
|
||||
|
||||
import { i18nManager } from '~/i18n'
|
||||
import { initializeI18n } from '~/i18n'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
import { II18nLanguage } from '~/utils/enum'
|
||||
|
||||
export const initI18n = () => {
|
||||
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 { v4 as uuid } from 'uuid'
|
||||
|
||||
import { T as $t } from '~/i18n/index'
|
||||
import { t } from '~/i18n/index'
|
||||
import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/utils/common'
|
||||
import { configPaths } from '~/utils/configPaths'
|
||||
import { IPasteStyle, IWindowList } from '~/utils/enum'
|
||||
@@ -566,8 +566,8 @@ class UploadTaskQueueManager {
|
||||
|
||||
if (isShowResultNotification) {
|
||||
const notification = new Notification({
|
||||
title: $t('UPLOAD_TASK_COMPLETED'),
|
||||
body: $t('UPLOAD_TASK_COMPLETED_BODY', { completed: stats.completed, failed: stats.failed }),
|
||||
title: t('main.notification.uploadTaskComplete'),
|
||||
body: t('main.notification.taskSuccessMsg', { completed: stats.completed, failed: stats.failed }),
|
||||
})
|
||||
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
|
||||
}
|
||||
}
|
||||
i18n: {
|
||||
setLocales: (lang: string, locales: ILocales) => void
|
||||
translate: (key: ILocalesKey, args?: IStringKeyMap) => string
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -799,7 +799,7 @@
|
||||
dependencies:
|
||||
regenerator-runtime "^0.13.11"
|
||||
|
||||
"@babel/runtime@^7.28.4":
|
||||
"@babel/runtime@^7.28.4", "@babel/runtime@^7.29.2":
|
||||
version "7.29.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e"
|
||||
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"
|
||||
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:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a"
|
||||
|
||||
Reference in New Issue
Block a user