diff --git a/.github/workflows/i18n-check.yml b/.github/workflows/i18n-check.yml deleted file mode 100644 index 238eb84a..00000000 --- a/.github/workflows/i18n-check.yml +++ /dev/null @@ -1,326 +0,0 @@ -name: 'I18n Check - Find Unused Translation Keys' - -on: - workflow_dispatch: - inputs: - auto_fix: - description: 'Automatically remove unused keys and create PR' - required: false - default: false - type: boolean - pull_request: - branches: [ main, dev ] - paths: - - 'src/**/*.vue' - - 'src/**/*.ts' - - 'src/**/*.js' - - 'public/i18n/**/*.yml' - - 'scripts/find-unused-i18n.mjs' - - '.github/workflows/i18n-check.yml' - push: - branches: [ main, dev ] - paths: - - 'public/i18n/**/*.yml' - -env: - NODE_OPTIONS: '--max-old-space-size=4096' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - i18n-check: - name: Check for Unused I18n Keys - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '18' - cache: 'yarn' - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Run i18n unused keys check - id: i18n-check - run: | - echo "Running i18n unused keys analysis..." - - # Run the script and capture output - OUTPUT=$(node scripts/find-unused-i18n.mjs 2>&1) - EXIT_CODE=$? - - # Save the output to a file for the job summary - echo "$OUTPUT" > i18n-check-output.txt - - # Also output to console - echo "$OUTPUT" - - # Check if there are unused keys by looking for the specific pattern in output - if echo "$OUTPUT" | grep -q "đŸ—‘ī¸ Unused I18n Keys:"; then - echo "unused_keys_found=true" >> $GITHUB_OUTPUT - echo "❌ Found unused i18n keys!" - exit 1 - else - echo "unused_keys_found=false" >> $GITHUB_OUTPUT - echo "✅ No unused i18n keys found!" - exit 0 - fi - - - name: Generate Job Summary - if: always() - run: | - echo "## 🌐 I18n Keys Analysis Report" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - - if [ -f i18n-check-output.txt ]; then - echo "### 📊 Analysis Results" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY - cat i18n-check-output.txt >> $GITHUB_STEP_SUMMARY - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - fi - - if [ "${{ steps.i18n-check.outputs.unused_keys_found }}" = "true" ]; then - echo "### ❌ Action Required" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "Unused i18n keys were found. Consider:" >> $GITHUB_STEP_SUMMARY - echo "- Removing unused keys from locale files" >> $GITHUB_STEP_SUMMARY - echo "- Verifying that the keys are actually unused" >> $GITHUB_STEP_SUMMARY - echo "- Adding usage for keys that should be kept" >> $GITHUB_STEP_SUMMARY - else - echo "### ✅ All Clear" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "No unused i18n keys found. Great job maintaining clean translations! 🎉" >> $GITHUB_STEP_SUMMARY - fi - - echo "" >> $GITHUB_STEP_SUMMARY - echo "### 💡 Tips" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "- Run \`yarn i18n:check\` locally to check for unused keys" >> $GITHUB_STEP_SUMMARY - echo "- Run \`yarn i18n:check:verbose\` for detailed usage information" >> $GITHUB_STEP_SUMMARY - echo "- This check runs automatically on PRs that modify Vue, TS, JS, or i18n files" >> $GITHUB_STEP_SUMMARY - - - name: Upload analysis results - if: always() - uses: actions/upload-artifact@v4 - with: - name: i18n-analysis-results - path: i18n-check-output.txt - retention-days: 7 - - - name: Comment on PR (if unused keys found) - if: github.event_name == 'pull_request' && steps.i18n-check.outputs.unused_keys_found == 'true' - uses: actions/github-script@v7 - with: - script: | - const fs = require('fs'); - - let output = ''; - try { - output = fs.readFileSync('i18n-check-output.txt', 'utf8'); - } catch (error) { - output = 'Unable to read analysis output'; - } - - const body = `## 🌐 I18n Analysis Report - - ❌ **Unused i18n keys were found in this PR** - -
- 📊 Click to view detailed analysis - - \`\`\` - ${output} - \`\`\` -
- - ### 🔧 Action Required - - Please review the unused keys listed above and consider: - - **Removing** keys that are truly unused - - **Verifying** that the detection is correct (some dynamic key usage might not be detected) - - **Adding usage** for keys that should be kept - - ### 💡 Local Testing - - You can run this analysis locally using: - \`\`\`bash - yarn i18n:check # Basic check - yarn i18n:check:verbose # Detailed output with usage examples - \`\`\` - - --- - *This comment was automatically generated by the I18n Check workflow.*`; - - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: body - }); - - locale-consistency-check: - name: Check Locale File Consistency - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '18' - cache: 'yarn' - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Check locale files consistency - run: | - echo "Checking if all locale files have the same structure..." - - # Run the i18n script in verbose mode to also check for inconsistencies - node scripts/find-unused-i18n.mjs --verbose > locale-check.txt 2>&1 - - # Check if there are inconsistencies reported - if grep -q "âš ī¸ Locale Inconsistencies:" locale-check.txt; then - echo "❌ Found locale inconsistencies!" - cat locale-check.txt - exit 1 - else - echo "✅ All locale files are consistent!" - fi - - - name: Generate Consistency Report - if: always() - run: | - echo "## 🔄 Locale Consistency Check" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - - if grep -q "âš ī¸ Locale Inconsistencies:" locale-check.txt 2>/dev/null; then - echo "### ❌ Inconsistencies Found" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "Some keys exist in one locale but not others:" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY - cat locale-check.txt >> $GITHUB_STEP_SUMMARY - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY - else - echo "### ✅ All Locale Files Consistent" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "All locale files have matching key structures. Perfect! 🎉" >> $GITHUB_STEP_SUMMARY - fi - - auto-fix: - name: Auto-fix Unused I18n Keys - runs-on: ubuntu-latest - if: github.event_name == 'workflow_dispatch' && github.event.inputs.auto_fix == 'true' - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '18' - cache: 'yarn' - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Check for unused keys before deletion - id: check-before - run: | - echo "Checking for unused keys..." - - # Check if there are unused keys - if node scripts/find-unused-i18n.mjs | grep -q "đŸ—‘ī¸ Unused I18n Keys:"; then - echo "unused_keys_found=true" >> $GITHUB_OUTPUT - echo "✅ Found unused keys to clean up" - else - echo "unused_keys_found=false" >> $GITHUB_OUTPUT - echo "â„šī¸ No unused keys found" - fi - - - name: Delete unused keys - if: steps.check-before.outputs.unused_keys_found == 'true' - run: | - echo "đŸ—‘ī¸ Removing unused i18n keys..." - node scripts/find-unused-i18n.mjs --delete - - - name: Regenerate TypeScript types - if: steps.check-before.outputs.unused_keys_found == 'true' - run: | - echo "🔄 Regenerating TypeScript types..." - yarn i18n - - - name: Create Pull Request - if: steps.check-before.outputs.unused_keys_found == 'true' - uses: peter-evans/create-pull-request@v5 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: 'feat(i18n): remove unused translation keys' - title: 'đŸ—‘ī¸ Remove unused i18n translation keys' - body: | - ## đŸ—‘ī¸ Automated I18n Cleanup - - This PR automatically removes unused translation keys that were detected by the i18n analysis script. - - ### ✨ Changes Made - - - Removed unused translation keys from all locale files - - Regenerated TypeScript type definitions - - ### 🔍 Analysis Details - - The unused keys were identified by scanning the entire codebase for i18n usage patterns including: - - `$T('KEY')` - Template usage - - `T('KEY')` - Script usage - - `i18nManager.T('KEY')` - Direct manager usage - - Dynamic patterns with template literals - - ### âš ī¸ Review Required - - Please review the changes to ensure: - - No keys were removed that are used in ways not detected by the script - - All locale files maintain consistency - - The TypeScript types were properly regenerated - - --- - *This PR was automatically created by the I18n Auto-fix workflow.* - branch: feat/cleanup-unused-i18n-keys - delete-branch: true - - - name: Generate Summary - run: | - if [ "${{ steps.check-before.outputs.unused_keys_found }}" = "true" ]; then - echo "## đŸ—‘ī¸ I18n Auto-fix Completed" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "✅ Successfully removed unused translation keys and created a pull request." >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "### 📝 Next Steps" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "1. Review the created pull request" >> $GITHUB_STEP_SUMMARY - echo "2. Verify that no important keys were removed" >> $GITHUB_STEP_SUMMARY - echo "3. Test the application to ensure everything works correctly" >> $GITHUB_STEP_SUMMARY - echo "4. Merge the pull request when ready" >> $GITHUB_STEP_SUMMARY - else - echo "## â„šī¸ No Action Needed" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "No unused i18n keys were found. Your translations are already clean! 🎉" >> $GITHUB_STEP_SUMMARY - fi diff --git a/electron.vite.config.js b/electron.vite.config.js index 1f65d201..1f9118af 100644 --- a/electron.vite.config.js +++ b/electron.vite.config.js @@ -1,8 +1,9 @@ -import { resolve } from 'node:path' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' import vue from '@vitejs/plugin-vue' import { defineConfig, externalizeDepsPlugin } from 'electron-vite' - export default defineConfig({ main: { // Main process configuration @@ -22,7 +23,13 @@ export default defineConfig({ }, preload: { // Preload scripts configuration - plugins: [externalizeDepsPlugin()], + plugins: [externalizeDepsPlugin(), + VueI18nPlugin({ + /* options */ + // locale messages resource pre-compile option + include: resolve(dirname(fileURLToPath(import.meta.url)), './src/renderer/i18n/locales/**') + }) + ], resolve: { alias: { '@': resolve('src/renderer'), diff --git a/package.json b/package.json index d2a0d472..b4d73303 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,6 @@ "cz": "git-cz", "dev": "electron-vite dev --watch", "i18n": "node ./scripts/gen-i18n-types.js", - "i18n:check": "node ./scripts/find-unused-i18n.js", - "i18n:check:verbose": "node ./scripts/find-unused-i18n.js --verbose", - "i18n:clean": "node ./scripts/find-unused-i18n.js --delete", - "i18n:clean:dry-run": "node ./scripts/find-unused-i18n.js --delete --dry-run", "link": "node ./scripts/link.js", "lint": "eslint --ext .js,.jsx,.ts,.tsx,.vue src/", "lint:dpdm": "dpdm -T --tsconfig ./tsconfig.json --no-tree --no-warning --exit-code circular:1 src/main/index.ts", @@ -78,8 +74,8 @@ "node-ssh-no-cpu-features": "^2.0.0", "nodejs-file-downloader": "^4.13.0", "piclist": "file:../piclist-core", - "pinia": "^2.1.7", - "pinia-plugin-persistedstate": "^3.2.1", + "pinia": "^3.0.3", + "pinia-plugin-persistedstate": "^4.4.1", "proxy-agent": "^6.5.0", "qiniu": "7.14.0", "qrcode.vue": "^3.6.0", @@ -91,6 +87,7 @@ "uuid": "^11.1.0", "video.js": "^8.23.3", "vue": "^3.5.18", + "vue-i18n": "^11.1.11", "vue-router": "^4.5.1", "vue3-lazyload": "^0.3.8", "vue3-photo-preview": "^0.3.0", @@ -100,6 +97,7 @@ "devDependencies": { "@electron/notarize": "^3.0.1", "@eslint/js": "^9.32.0", + "@intlify/unplugin-vue-i18n": "^6.0.8", "@types/ali-oss": "^6.16.11", "@types/fs-extra": "^11.0.4", "@types/js-yaml": "^4.0.9", @@ -125,7 +123,7 @@ "eslint-plugin-prettier": "^5.5.3", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unicorn": "^60.0.0", - "eslint-plugin-vue": "^10.3.0", + "eslint-plugin-vue": "^10.4.0", "husky": "^9.1.7", "node-bump-version": "^2.0.0", "npm-check-updates": "^18.0.2", diff --git a/resources/i18n/en.yml b/resources/i18n/en.yml index 0ad8d9c1..0301eeac 100644 --- a/resources/i18n/en.yml +++ b/resources/i18n/en.yml @@ -5,16 +5,13 @@ OPEN_MINI_WINDOW: Open Mini Window HIDE_MINI_WINDOW: Hide Mini Window CHOOSE_DEFAULT_PICBED: Choose Default Picbed RELOAD_APP: Reload App -UPLOAD_FAILED: Upload Failed UPLOAD_SUCCEED: Upload Succeed +UPLOAD_FAILED: Upload Failed UPLOAD_PROGRESS: Upload Progress -OPERATION_SUCCEED: Operation Succeed -OPERATION_FAILED: Operation Failed UPLOADING: Uploading QUICK_UPLOAD: Quick Upload UPLOAD_BY_CLIPBOARD: Upload by Clipboard SHOW_PICBED_QRCODE: Show Picbed Qrcode -PICBED_QRCODE: Picbed Qrcode ENABLE: Enable DISABLE: Disable CONFIG_THING: Config ${c} @@ -28,18 +25,6 @@ START_WATCH_CLIPBOARD: Start Watch Clipboard STOP_WATCH_CLIPBOARD: Stop Watch Clipboard OPEN_TOOLBOX: Open Toolbox TOOLBOX: Toolbox -TOOLBOX_TITLE: Troubleshoot PicList runtime issues -TOOLBOX_SUB_TITLE: Scan the following items immediately to fix usage issues -TOOLBOX_CHECK_CONFIG_FILE_BROKEN: Check if the configuration file is damaged -TOOLBOX_CHECK_GALLERY_FILE_BROKEN: Check if the album file is damaged -TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD: Check if there is a problem with clipboard picture upload -TOOLBOX_CHECK_PROBLEM_WITH_PROXY: Check if the proxy settings are normal -TOOLBOX_FIX_DONE_NEED_RELOAD: Repair completed, need to restart to take effect, restart or not -TOOLBOX_CANT_AUTO_FIX: Unable to automatically repair, please repair the following problems yourself -TOOLBOX_START_SCAN: Start scanning -TOOLBOX_RE_SCAN: Re scanning -TOOLBOX_START_FIX: Start fixing -TOOLBOX_SUCCESS_TIPS: Congratulations, no problems were found 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}' @@ -51,865 +36,12 @@ 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}' -MANUAL_PAGE_OPEN_TIP: Please select the way to open the manual -MANUAL_PAGE_OPEN_TIP_TITLE: Tips -MANUAL_PAGE_OPEN_BY_BROWSER: Browser -MANUAL_PAGE_OPEN_BY_BUILD_IN: Built-in Window -MANUAL_PAGE_OPEN_SETTING_TIP: Select the way to open the manual -UPLOAD_AREA: Upload -UPLOAD_VIEW_HINT: Click to open picbeds settings -MANAGE_PAGE: Manage -GALLERY: Gallery -REFRESH: Refresh -MANUAL: Manual -PICBEDS_SETTINGS: Picbeds -PICLIST_SETTINGS: Settings -PLUGIN_SETTINGS: Plugins -CHOOSE_PICBED: Choose Picbed -COPY_PICBED_CONFIG: Copy Picbed Config -COPY_PICBED_CONFIG_SUCCEED: Copy Picbed Config Succeed -INPUT: Input -CANCEL: Cancel -CONFIRM: Confirm -RESET_PICBED_CONFIG: Reset -CHOOSE_SHOWED_PICBED: Choose Showed Picbed -CHOOSE_PASTE_FORMAT: Choose Paste Format -COPY: Copy -DELETE: Delete -SELECT_ALL: Select All -CHANGE_IMAGE_URL: Change Image URL -CHANGE_IMAGE_URL_SUCCEED: Change Image URL Succeed -COPY_LINK_SUCCEED: Copy Link Succeed -BATCH_COPY_LINK_SUCCEED: Batch Copy Link Succeed -FILE_RENAME: File Rename -OPEN_FILE_PATH: Open file path -GALLERY_SYNC_DELETE: Cloud Sync Delete -GALLERY_SYNC_DELETE_NOTICE_TITLE: Notice GALLERY_SYNC_DELETE_NOTICE_SUCCEED: Cloud Delete Succeed GALLERY_SYNC_DELETE_NOTICE_FAILED: Cloud Delete Failed -GALLERY_CHANGE_URL: Rename -GALLERY_SEARCH_FILENAME: Search by Filename -GALLERY_SEARCH_URL: Search by URL -GALLERY_MATCHED: ' Matched: ' -UPLOAD_PAGE_COPY_UPLOAD_API: Copy Upload API -UPLOAD_PAGE_IMAGE_PROCESS_NAME: Image Processing -UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: Image Processing Settings -UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: Skip Process Ext List -UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: Enter the file extensions to skip processing, separated by commas (e.g., jpg,png,gif) -UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: Add Watermark -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: Watermark Type -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: Text -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE: Image -UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM: Full-Screen Watermark -UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE: Watermark Angle -UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT: Watermark Text -UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH: Watermark Font Path (download font file for the first time) -UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO: Watermark Size Ratio -UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR: Watermark Color, Please select from the color picker -UPLOAD_PAGE_IMAGE_PROCESS_WMPATH: Watermark Image Path (leave blank to use default image) -UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION: Watermark Position -UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF: Remove EXIF Info -UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: Compression Quality(1-100) -UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: Convert Format -UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: Destination Format -UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: 'Specific Format, Please enter in json format, e.g. {"png": "jpg"}' -UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: Whether to flip vertically -UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: Whether to flip horizontally -UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: Resize to fixed size -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH: Width(Set to 0 to scale by height) -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT: Height(Set to 0 to scale by width) -UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT: Skip resize when image height is smaller than target height -UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH: Skip resize when image width is smaller than target width -UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT: Resize by percentage (Higher priority) -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT: Resize Percentage, enter 50 for 50% -UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE: Rotate -UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE: Rotation Angle -UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM: Save -UPLOAD_PAGE_IMAGE_PROCESS_CANCEL: Cancel -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP: top -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM: bottom -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT: left -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT: right -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT: top left -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT: top right -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT: bottom left -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT: bottom right -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER: center -UPLOAD_SHORT_URL: Short -UPLOAD_NORMAL_URL: Long -SETTINGS: Settings -SETTINGS_OPEN_CONFIG_FILE: Open Config File -SETTINGS_MIGRATE_FROM_PICGO: Migrate from PicGo -SETTINGS_MIGRATE_FROM_PICGO_TITLE: Notice -SETTINGS_MIGRATE_FROM_PICGO_CONTENT: Migrate from PicGo will overwrite your current settings and gallery, do you want to continue? -SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: Import succeed, please restart PicList -SETTINGS_MIGRATE_FROM_PICGO_FAILED: Import failed -SETTINGS_START_MODE: Default Start Mode -SETTINGS_START_MODE_MINI: Mini Window -SETTINGS_START_MODE_MAIN: Main Window -SETTINGS_START_MODE_NO_TRAY: No Tray -SETTINGS_START_MODE_QUIET: Quiet Mode -SETTINGS_CLICK_TO_OPEN: Click to Open -SETTINGS_SET_LOG_FILE: Set Log File -SETTINGS_CLICK_TO_SET: Click to Set -SETTINGS_CLICK_TO_CHECK: Click to Check -SETTINGS_SET_SHORTCUT: Set Shortcut -SETTINGS_CUSTOM_LINK_FORMAT: Custom Link Format -SETTINGS_SET_PROXY_AND_MIRROR: Set Proxy and Mirror -SETTINGS_SET_SERVER: Set Server -SETTINGS_CHECK_UPDATE: Check Update -SETTINGS_OPEN_UPDATE_HELPER: Open Update Helper -SETTINGS_OPEN: Open -SETTINGS_CLOSE: Close -SETTINGS_CLOSE_MINI_WINDOW_SYNC: Close Mini Window When open Main Window -SETTINGS_CLOSE_MAIN_WINDOW_SYNC: Close Main Window When open Mini Window -SETTINGS_LAUNCH_ON_BOOT: Launch On Boot -SETTINGS_RENAME_BEFORE_UPLOAD: Manual Rename -SETTINGS_TIMESTAMP_RENAME: Timestamp Rename -SETTINGS_ADVANCED_RENAME: Advanced Rename -SETTINGS_ADVANCED_RENAME_ENABLE: Enable Advanced Rename -SETTINGS_ADVANCED_RENAME_FORMAT: Advanced Rename Format -SETTINGS_ENABLE_SECOND_PICBED: Enable Second Picbed -SETTINGS_SET_SECOND_PICBED: Set Second Picbed -SETTINGS_OPEN_UPLOAD_TIPS: Open Upload Tips -SETTINGS_OPEN_UPLOAD_RESULT_TIPS: Open Upload Result Tips -SETTINGS_MINI_WINDOW_ON_TOP: Mini Window On Top -SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD: Auto Copy URL After Upload -SETTINGS_TIPS_PLACEHOLDER_URL: Use $url to represent url position -SETTINGS_TIPS_PLACEHOLDER_FILENAME: Use $fileName to represent file name position -SETTINGS_TIPS_PLACEHOLDER_EXTNAME: Use $extName to represent file's ext position -SETTINGS_TIPS_SUCH_AS: 'Such as: $url/$fileName' -SETTINGS_UPLOAD_PROXY: Upload Proxy -SETTINGS_PLUGIN_INSTALL_PROXY: Proxy for Plugin Install -SETTINGS_PLUGIN_INSTALL_MIRROR: Mirror for Plugin Install -SETTINGS_CURRENT_VERSION: Current Version -SETTINGS_NEWEST_VERSION: Newest Version -SETTINGS_GETING: Getting... -SETTINGS_TIPS_HAS_NEW_VERSION: PicList has a new version, please click confirm to restart -SETTINGS_LOG_FILE_PATH: Log File Path -SETTINGS_CONFIG_FILE_PATH: Config File Path -SETTINGS_LOG_FILE: Log File -SETTINGS_GUI_LOG_FILE: GUI Log File -SETTINGS_MANAGE_LOG_FILE: Manage Log File -SETTINGS_LOG_LEVEL: Log Level -SETTINGS_LOG_FILE_SIZE: Log File Size -SETTINGS_SET_PICGO_SERVER: Set PicGo Server -SETTINGS_TIPS_SERVER_NOTICE: If you don't know what is the server's function, please read the document, or don't modify the configuration. -SETTINGS_ENABLE_SERVER: Enable Server -SETTINGS_SET_SERVER_HOST: Set Server Host -SETTINGS_SET_SERVER_PORT: Set Server Port -SETTINGS_SET_SERVER_KEY: Set Auth Key -SETTINGS_SET_WEB_SERVER: Set Web Server -SETTINGS_TIPS_WEB_SERVER_NOTICE: If you don't know what is the web server's function, please read the document, or don't modify the configuration. -SETTINGS_SET_ENABLE_WEB_SERVER: Enable Web Server -SETTINGS_SET_WEB_SERVER_HOST: Set Web Server Host -SETTINGS_SET_WEB_SERVER_PORT: Set Web Server Port -SETTINGS_SET_WEB_SERVER_PATH: Set Web Server Path -SETTINGS_TIP_PLACEHOLDER_WEB_HOST: Default:127.0.0.1 -SETTINGS_TIP_PLACEHOLDER_WEB_PORT: Default:37777 -SETTINGS_TIP_PLACEHOLDER_HOST: Default:127.0.0.1 -SETTINGS_TIP_PLACEHOLDER_PORT: Default:36677 -SETTINGS_TIP_PLACEHOLDER_KEY: This key is used to avoid malicious requests, through urlParams '?key=xxx' to pass -SETTINGS_SET_SERVER_AES_KEY: Set AES Key for server response -SETTINGS_LOG_LEVEL_ALL: All -SETTINGS_LOG_LEVEL_SUCCESS: Success -SETTINGS_LOG_LEVEL_ERROR: Error -SETTINGS_LOG_LEVEL_INFO: Info -SETTINGS_LOG_LEVEL_WARN: Warn -SETTINGS_LOG_LEVEL_NONE: None -SETTINGS_RESULT: Result -SETTINGS_DEFAULT_PICBED: Default Picbed -SETTINGS_SET_DEFAULT_PICBED: Set Default Picbed -SETTINGS_NOT_CONFIG_OPTIONS: Not Config Options -SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD: Use Builtin Clipboard to Upload -SETTINGS_CHOOSE_LANGUAGE: Choose Language -UPLOADER_CONFIG_NAME: Configuration Name -UPLOADER_CONFIG_PLACEHOLDER: Please Enter Configuration Name -SELECTED_SETTING_HINT: Selected -SETTINGS_MAIN_WINDOW_SIZE: Default Main Window Size -SETTINGS_MAIN_WINDOW_SIZE_WIDTH: Default Main Window Width -SETTINGS_MAIN_WINDOW_WIDTH_HINT: 'Default: 1200' -SETTINGS_MAIN_WINDOW_SIZE_HEIGHT: Default Main Window Height -SETTINGS_MAIN_WINDOW_HEIGHT_HINT: 'Default: 800' -SETTINGS_RAW_PICGO_SIZE: Raw PicGo Size -SETTINGS_CUSTOM_MINI_ICON_PATH: Custom Mini Window Icon Path -SETTINGS_CUSTOM_MINI_ICON: Custom Mini Window Icon -SETTINGS_COMPRESS_AND_WATERMARK: Compress and Watermark -SETTINGS_SYNC_DELETE_CLOUD: Sync delete from cloud storage of gallery -SETTINGS_ISHIDEDOCK: Hide Dock Icon -SETTINGS_ISHIDEDOCK_TIPS: Not support hide dock and tray at the same time -SETTINGS_ENCODE_OUTPUT_URL: Encode Output(or Copyed) URL -SETTINGS_WATCH_CLIPBOARD: Watch clipboard when software start -SETTINGS_SHORT_URL: Use short url -SETTINGS_SHORT_URL_SERVER: Short url server -SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token -SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS domain -SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature -SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker Host -SETTINGS_SHORT_SINK_DOMAIN: sink domain -SETTINGS_SHORT_SINK_TOKEN: sink token -SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: Delete local file after upload -SETTINGS_SYNC_CONFIG: Settings Sync Configuration -SETTINGS_SYNC_CONFIG_TITLE: Sync Settings -SETTINGS_SYNC_CONFIG_NOTE: The files to be synchronized are configuration files. -SETTINGS_SYNC_CONFIG_SELECT_TYPE: Select sync method -SETTINGS_SYNC_CONFIG_SELECT_FILE: Select files to sync -SETTINGS_SYNC_CONFIG_SELECT_CONFIG: Configuration files only -SETTINGS_SYNC_CONFIG_SELECT_GALLERY: Gallery files only -SETTINGS_SYNC_CONFIG_SELECT_BOTH: Both configuration and gallery files -SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea Host -SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: username -SETTINGS_SYNC_CONFIG_GITEA_USERNAME: username -SETTINGS_SYNC_CONFIG_GITEE_USERNAME: username -SETTINGS_SYNC_CONFIG_GITHUB_REPO: repository (private) -SETTINGS_SYNC_CONFIG_GITEA_REPO: repository -SETTINGS_SYNC_CONFIG_GITEE_REPO: repository path -SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: branch -SETTINGS_SYNC_CONFIG_GITEA_BRANCH: branch -SETTINGS_SYNC_CONFIG_GITEE_BRANCH: branch -SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: Token -SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Token -SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Token -SETTINGS_SYNC_CONFIG_PROXY: Proxy -SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: Please enter GitHub username -SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: Please enter Gitea username -SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: Please enter Gitee username -SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: Please enter GitHub repository name -SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: Please enter Gitea repository name -SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: Please enter Gitee repository name -SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: Please enter GitHub branch name -SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: Please enter Gitee branch name -SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: Please enter Gitea branch name -SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: Please enter GitHub Token -SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: Please enter Gitea Token -SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: Please enter Gitee Token -SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: Please enter proxy -SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAV Endpoint -SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: Please enter WebDAV endpoint URL -SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: Username -SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: Please enter WebDAV username -SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: Password -SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: Please enter WebDAV password -SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: Authentication Type -SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: Enable SSL/HTTPS -SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: Save Path -SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: Please select save path for sync files -SETTINGS_UP_DOWN_DESC: Upload and download configuration files -SETTINGS_SYNC_UPLOAD: Upload -SETTINGS_SYNC_DOWNLOAD: Download -SETTINGS_SYNC_UPLOAD_ALL: Upload all -SETTINGS_SYNC_DOWNLOAD_ALL: Download all -SETTINGS_SYNC_UPLOAD_SUCCESS: Successfully uploaded -SETTINGS_SYNC_UPLOAD_FAILED: Upload failed -SETTINGS_SYNC_DOWNLOAD_SUCCESS: Successfully downloaded -SETTINGS_SYNC_DOWNLOAD_FAILED: Download failed -SETTINGS_SYNC_COMMON_CONFIG: Common configuration -SETTINGS_SYNC_MANAGE_CONFIG: Manage configuration -SETTINGS_AUTO_IMPORT: Auto import config in manage page -SETTINGS_AUTO_IMPORT_SELECT_PICBED: Select picbed -SETTINGS_TAB_SYSTEM: System -SETTINGS_TAB_SYNC_CONFIG: Configuration -SETTINGS_TAB_UPLOAD: Upload -SETTINGS_TAB_ADVANCED: Advanced -SETTINGS_TAB_UPDATE: Update -BUILTIN_CLIPBOARD_TIPS: Use builtin clipboard function to upload instead of using scripts -SHORTCUT_NAME: Shortcut Name -SHORTCUT_BIND: Shortcut Binding -SHORTCUT_STATUS: Status -SHORTCUT_ENABLED: Enabled -SHORTCUT_DISABLED: Disabled -SHORTCUT_SOURCE: Source -SHORTCUT_HANDLE: Handle -SHORTCUT_ENABLE: Enable -SHORTCUT_DISABLE: Disable -SHORTCUT_EDIT: Edit -SHORTCUT_CHANGE_UPLOAD: Change Upload Shortcut -WAIT_TO_UPLOAD: Wait to Upload -ALREADY_UPLOAD: Already Uploaded -DRAG_FILE_TO_HERE: Drag file to here, or -CLICK_TO_UPLOAD: click to upload -LINK_FORMAT: Link Format -CLIPBOARD_PICTURE: Clipboard -TIPS_DRAG_VALID_PICTURE_OR_URL: Drag valid picture or url to here -TIPS_INPUT_URL: Input URL -TIPS_HTTP_PREFIX: http:// or https:// -TIPS_INPUT_VALID_URL: Input valid URL -PLUGIN_SEARCH_PLACEHOLDER: Search picgo plugins on npm, or click the button to view the awesome plugins list -PLUGIN_INSTALL: Install -PLUGIN_INSTALLING: Installing... -PLUGIN_INSTALLED: Installed -PLUGIN_DOING_SOMETHING: Doing... -PLUGIN_LIST: Plugin List -PLUGIN_IMPORT_LOCAL: Import Local Plugins -PLUGIN_UPDATE_ALL: Update All Plugins -TIPS_REMOVE_LINK: This operation will remove the picture from the album, continue? -TIPS_WILL_REMOVE_CHOOSED_IMAGES: This operation will remove the picture from the album, continue? -TIPS_MUST_CONTAINS_URL: Must contains $url or $fileName or $extName -TIPS_NETWORK_ERROR: Network Error -TIPS_NEED_RELOAD: Need Reload App -TIPS_PLEASE_CHOOSE_LOG_LEVEL: Please choose log level -TIPS_SET_SUCCEED: Set successfully -TIPS_RESET_SUCCEED: Reset successfully -TIPS_PLUGIN_NOT_GUI_IMPLEMENT: This plugin is not optimized for the GUI, continue? TIPS_GET_PLUGIN_LIST_FAILED: Get plugin list failed -MANAGE_SETTING_TITLE: Manage Setting -MANAGE_SETTING_ISAUTOREFRESH_TITLE: Auto refresh file list when entering new directory -MANAGE_SETTING_ISAUTOREFRESH_TIPS: Only applies to non-paginated mode, data is cached to indexdb to speed up loading speed -MANAGE_SETTING_CLEAR_CACHE_TITLE: 'Clear file list cache database, currently in use:' -MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE: 'Available:' -MANAGE_SETTING_CLEAR_CACHE_TIPS: After clearing, the file list will be reloaded when entering a new directory next time -MANAGE_SETTING_CLEAR_CACHE_PROMPT: Are you sure you want to clear the file list cache database? -MANAGE_SETTING_CLEAR_CACHE_BUTTON: Clear -MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE: Display the original image instead of format icon (requires public access permissions) -MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE: Use presigned URL for image display -MANAGE_SETTING_ISSHOWLIST_TITLE: Default display mode for the file list -MANAGE_SETTING_ISSHOWLIST_ON: List -MANAGE_SETTING_ISSHOWLIST_OFF: Card -MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE: Force custom URL to use HTTPS -MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS: After enabling, all operations will automatically add the https prefix to custom domains -MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE: Preserve directory structure when uploading -MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS: After disabling, all files will be expanded to the specified directory -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A: Download -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B: ' File ' -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C: will preserve the directory structure -MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D: ' Folder ' -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS: After enabling, the original directory structure will be preserved -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE: Maximum number of files to download simultaneously (1-9999) -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS: Not work on Tencent -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS: Please enter the maximum number of files to download simultaneously -MANAGE_SETTING_ISIGNORECASE_TITLE: Should file search be case-insensitive -MANAGE_SETTING_ISIGNORECASE_TIPS: After enabling, the search will be case-insensitive -MANAGE_SETTING_TIMESTAMPRENAME_TITLE: Rename uploaded files with timestamp - (highest priority) -MANAGE_SETTING_TIMESTAMPRENAME_TIPS: After enabling, the uploaded file will be renamed with the timestamp -MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE: Rename uploaded files with random strings - (medium priority) -MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS: Random string length is 20 -MANAGE_SETTING_CUSTOMRENAME_TITLE: Rename uploaded files with custom names - (lowest priority) -MANAGE_SETTING_CUSTOMRENAME_TIPS: After enabling, the uploaded file will be renamed with the custom pattern -MANAGE_SETTING_CUSTOM_PATTERN_TITLE: Custom rename format, placeholders can be freely combined, please refer to the table below -MANAGE_SETTING_CUSTOM_PATTERN_TIPS: Please enter the custom rename format -MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE: Placeholder -MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS: Description -MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE: Presigned URL expiration time (seconds) -MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS: Please enter the presigned URL expiration time -MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE: Select default link format for copying -MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN: Markdown -MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK: Markdown with link -MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL: Raw URL -MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML: HTML -MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE: BBCode -MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM: Custom -MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE: Custom link format($url -> raw url, $fileName -> raw fileName) -MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS: Please enter the custom link format -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE: Choose default download folder -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS: System default download directory -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: Choose folder -MANAGE_SETTING_COPY_MESSAGE: Copied -MANAGE_SETTING_CLEAR_CACHE_SUCCESS: Cleared successfully -MANAGE_SETTING_CLEAR_CACHE_FAILED: Clear failed -MANAGE_SETTING_ISENCODEURL_TITLE: Encode URL when copy -MANAGE_SETTING_ISENCODEURL_TIPS: After enabling, the URL will be encoded when copying -MANAGE_NO_DATA: No data -MANAGE_MAIN_PAGE_NEW_BUCKET: New Bucket -MANAGE_MAIN_PAGE_BACK_TO_HOME: Home -MANAGE_MAIN_PAGE_SWITCH_PICBED: Switch -MANAGE_MAIN_PAGE_SETTING: Setting -MANAGE_MAIN_PAGE_SUBMIT: Submit -MANAGE_MAIN_PAGE_TIPS: Tips -MANAGE_MAIN_PAGE_TIPS_SUCCESS: Created successfully -MANAGE_MAIN_PAGE_TIPS_FAILED: Create failed -MANAGE_MAIN_PAGE_BUCKET: Bucket -MANAGE_MAIN_PAGE_GALLERY: Album -MANAGE_MAIN_PAGE_REPOSITORY: Repo -MANAGE_CONSTANT_BASE_RULE: 'Please enter ' -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A: Please enter the number of items displayed per page. -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B: The number of items displayed per page must be a number. -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C: The number of items displayed per page must be between 20 and 1000. -MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A: Please enter the alias, which is the unique identifier for this configuration. -MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B: The alias can only contain Chinese, English, numbers, underscores, and hyphens. -MANAGE_CONSTANT_ALIAS_TOOLTIP: The alias can only contain Chinese, English, numbers, underscores, and hyphens. -MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP: The number of items displayed per page must be between 20 and 1000. -MANAGE_CONSTANT_PAGING_TOOLTIP: When paging is turned off, the directory list will use database caching to optimize performance. -MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP: Separated by commas, e.g., bucket1,bucket2,bucket3, and corresponding to the starting directory order one by one. -MANAGE_CONSTANT_BASE_DIR_TOOLTIP: Separated by commas, e.g., /dir1,/dir2,/dir3, corresponding to the storage bucket order one by one. -MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP: When turned on, the domainbound to bucket will be automatically obtained. Else, it can be manually filled in. -MANAGE_CONSTANT_SMMS_ALIAS_DESC: Alias - required -MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER: Unique identifier of this configuration -MANAGE_CONSTANT_SMMS_TOKEN_DESC: Token - required -MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER: Please fill in your token -MANAGE_CONSTANT_SMMS_PAGING_DESC: Whether to enable pagination -MANAGE_CONSTANT_SMMS_EXPLAIN: For users in mainland China, please visit the backup domain https://smms.app. Do not upload images in large quantities. -MANAGE_CONSTANT_SMMS_REFER_TEXT: 'Refer to: ' -MANAGE_CONSTANT_QINIU_NAME: Qiniu -MANAGE_CONSTANT_QINIU_ALIAS_DESC: Alias - Required -MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER: Unique identifier for this configuration -MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC: accessKey - Required -MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER: Please enter the accessKey -MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC: secretKey - Required -MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER: Please enter the secretKey -MANAGE_CONSTANT_QINIU_BUCKET_DESC: space name - Optional -MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER: 'English comma separated, for example: bucket1, bucket2' -MANAGE_CONSTANT_QINIU_BASE_DIR_DESC: Base directory - Optional -MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER: 'English comma separated, for example: /dir1, /dir2' -MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC: Automatically get the bound domain name -MANAGE_CONSTANT_QINIU_PAGING_DESC: Enable pagination -MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC: Number of items displayed per page -MANAGE_CONSTANT_QINIU_EXPLAIN: When configuring space name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value. -MANAGE_CONSTANT_QINIU_REFER_TEXT: 'Refer to: ' -MANAGE_CONSTANT_GITHUB_ALIAS_DESC: Alias - Required -MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER: Unique identifier for this configuration -MANAGE_CONSTANT_GITHUB_TOKEN_DESC: Token - Required -MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER: Please enter the Token -MANAGE_CONSTANT_GITHUB_TOKEN_TIPS: Please provide a token with full repo permissions -MANAGE_CONSTANT_GITHUB_USER_DESC: Username - Required -MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER: Please enter the Username -MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE: Username -MANAGE_CONSTANT_GITHUB_PROXY_DESC: Proxy address - Optional -MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER: 'For example: http://127.0.0.1:1080' -MANAGE_CONSTANT_GITHUB_PROXY_TIPS: If the access speed is slow, you can try configuring a proxy -MANAGE_CONSTANT_GITHUB_PAGING_DESC: Enable pagination -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC: CDN acceleration domain name - Optional -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER: Support using {username}, {repo}, {branch}, and {path} as replacement placeholders -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS: 'For example: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}' -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A: The acceleration domain name must start with http:// or https:// -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B: The braces in the acceleration domain name must appear in pairs -MANAGE_CONSTANT_GITHUB_EXPLAIN: There is an hourly limit for API calls, and uploading files larger than 100M is not supported -MANAGE_CONSTANT_GITHUB_REFER_TEXT: 'Refer to:' -MANAGE_CONSTANT_ALIYUN_NAME: Ali Cloud -MANAGE_CONSTANT_ALIYUN_ALIAS_DESC: Alias - required -MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER: The unique identifier of this configuration -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC: AccessKeyId - required -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC: AccessKeySecret - required -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER: Please fill in AccessKeySecret -MANAGE_CONSTANT_ALIYUN_BUCKET_DESC: Bucket name - optional -MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER: 'Separated by commas in English, for example: bucket1, bucket2' -MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC: Base directory - optional -MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER: 'Separated by commas in English, for example: /dir1, /dir2' -MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC: Automatically obtain bound domain name -MANAGE_CONSTANT_ALIYUN_PAGING_DESC: Whether to enable pagination -MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC: Number of items displayed per page -MANAGE_CONSTANT_ALIYUN_EXPLAIN: When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value. -MANAGE_CONSTANT_ALIYUN_REFER_TEXT: 'Refer to: ' -MANAGE_CONSTANT_TENCENT_NAME: Tencent -MANAGE_CONSTANT_TENCENT_ALIAS_DESC: Alias - Required -MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER: Unique identifier for this configuration -MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC: SecretID - Required -MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER: Please fill in the SecretID -MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC: SecretKey - Required -MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER: Please fill in the SecretKey -MANAGE_CONSTANT_TENCENT_APPID_DESC: App ID - Required -MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER: Please fill in the App ID -MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP: 'For example: 1250000000' -MANAGE_CONSTANT_TENCENT_BUCKET_DESC: Bucket name - Optional (note the App ID must be included) -MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER: 'Comma-separated list of bucket names, for example: bucket1-1250000000, bucket2-1250000000' -MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC: Starting directory - Optional -MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER: 'Comma-separated list of directories, for example: /dir1, /dir2' -MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC: Automatically obtain binding domain name -MANAGE_CONSTANT_TENCENT_PAGING_DESC: Enable paging -MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC: Number of items to display per page -MANAGE_CONSTANT_TENCENT_EXPLAIN: When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value. -MANAGE_CONSTANT_TENCENT_REFER_TEXT: 'Refer to: ' -MANAGE_CONSTANT_UPYUN_NAME: Upyun -MANAGE_CONSTANT_UPYUN_ALIAS_DESC: Alias - required -MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER: Unique identifier of the configuration -MANAGE_CONSTANT_UPYUN_BUCKET_DESC: Service name - required -MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER: Name of the storage bucket corresponding to other object storage -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC: Operator name - required -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER: It is recommended to use an operator with full read, write, and delete permissions -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE: Operator -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC: Operator password - required -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER: Please enter the password -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE: Operator password -MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC: Base directory - optional -MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER: Initial directory when reading files -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC: Acceleration domain name - required -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER: Please start with http:// or https:// -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A: Acceleration domain name cannot be empty -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B: Please start the custom domain name with http:// or https:// -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC: Anti-leech key - optional -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER: Please enter the anti-leech key -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP: If you do not need to use anti-leech, please leave it blank -MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC: Expiration time(s) - optional -MANAGE_CONSTANT_UPYUN_PAGING: Whether to enable pagination -MANAGE_CONSTANT_UPYUN_ITEMS_PAGE: Number of items displayed per page -MANAGE_CONSTANT_UPYUN_EXPLAIN: It is necessary to fill in the acceleration domain name of Upyun image bed, otherwise it cannot be used normally. -MANAGE_CONSTANT_UPYUN_REFER_TEXT: 'Refer to: ' -MANAGE_CONSTANT_IMGUR_NAME: Imgur -MANAGE_CONSTANT_IMGUR_ALIAS_DESC: Alias - required -MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER: Unique identifier of the configuration -MANAGE_CONSTANT_IMGUR_USERNAME_DESC: Imgur username - required -MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER: Please enter the Imgur username -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC: Access token - required -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER: Please enter the access token -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP: Not the client ID, please refer to the configuration tutorial -MANAGE_CONSTANT_IMGUR_PROXY_DESC: Proxy - optional -MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER: 'For example: http://127.0.0.1:1080' -MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP: Please use a proxy in mainland China, otherwise it cannot be used normally -MANAGE_CONSTANT_IMGUR_EXPLAIN: Please use a proxy in mainland China, API calls have restrictions, please pay attention to usage frequency -MANAGE_CONSTANT_IMGUR_REFER_TEXT: 'Refer to: ' -MANAGE_CONSTANT_S3_NAME: S3-Compatible -MANAGE_CONSTANT_S3_ALIAS_DESC: Alias - Required -MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER: Unique identifier for this configuration -MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC: Access Key ID - Required -MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER: Please enter Access Key ID -MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC: Secret Access Key - Required -MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER: Please enter Secret Access Key -MANAGE_CONSTANT_S3_ENDPOINT_DESC: Endpoint - Optional -MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER: e.g. s3.us-east-1.amazonaws.com -MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP: If left blank, AWS S3 is accessed by default. Provide the root API endpoint -MANAGE_CONSTANT_S3_SSLENABLED_DESC: Use HTTPS connection -MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP: Disable this option if not supported by your platform. -MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC: Enable S3 Path style -MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP: Required when using Minio, for example. -MANAGE_CONSTANT_S3_PROXY_DESC: Proxy - Optional -MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER: e.g. http://127.0.0.1:1080 -MANAGE_CONSTANT_S3_PROXY_TOOLTIP: Use proxy if unable to access in some parts of Mainland China -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC: Permission for uploaded files -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE: Private -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ: Public read -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE: Public read and write -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ: Authenticated read -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ: Bucket owner read -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL: Bucket owner full control -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ: AWS execution read -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP: Permission options for uploaded files -MANAGE_CONSTANT_S3_BUCKET_DESC: Bucket name - Optional -MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER: English comma-separated list, e.g. bucket1,bucket2 -MANAGE_CONSTANT_S3_BASE_DIR_DESC: Base directory - Optional -MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER: English comma-separated list, e.g. /dir1,/dir2 -MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC: Enable Doge Cloud API -MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP: Support Doge Cloud API -MANAGE_CONSTANT_S3_PAGING_DESC: Enable pagination -MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC: Items per page -MANAGE_CONSTANT_S3_EXPLAIN: When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value. -MANAGE_CONSTANT_S3_REFER_TEXT: 'Refer to: ' -MANAGE_CONSTANT_WEBDAV_ALIAS_DESC: Alias - Required -MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER: Unique identifier for this configuration -MANAGE_CONSTANT_WEBDAV_HOST_DESC: Address - Required -MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER: e.g. https://example.com/dav -MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP: Please enter the complete WebDAV address -MANAGE_CONSTANT_WEBDAV_USERNAME_DESC: Username - Required -MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER: Please enter your username -MANAGE_CONSTANT_WEBDAV_BUCKET_DESC: Special Configuration -MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER: e.g. bucket1 -MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration -MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC: Password - Required -MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER: Please enter your password -MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC: Base Directory - Optional -MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER: e.g. /dir1 -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC: Custom Domain - Optional -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER: e.g. https://example.com -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP: If your WebDAV server supports custom domains, please fill in -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE: Custom domain should start with http:// or https:// -MANAGE_CONSTANT_WEBDAV_WEB_PATH: Web Path - Optional -MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER: e.g. test/ttc -MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP: Used to generate URL -MANAGE_CONSTANT_WEBDAV_PROXY_DESC: Proxy - Optional -MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER: e.g. http://127.0.0.1:1080 -MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP: If special network environment is required to access, please use proxy -MANAGE_CONSTANT_WEBDAV_SSL_DESC: Use HTTPS Connection -MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP: Depending on the configuration of your WebDAV server, if your server does not support HTTPS, please turn off this option -MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC: Authentication Type -MANAGE_CONSTANT_WEBDAV_EXPLAIN: WebDAV Configuration -MANAGE_CONSTANT_WEBDAV_REFER_TEXT: 'Refer to:' -MANAGE_CONSTANT_LOCAL_NAME: Local -MANAGE_CONSTANT_LOCAL_ALIAS_DESC: Alias - Required -MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER: Unique identifier for this configuration -MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC: Base directory - Required -MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER: e.g. /dir1 -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC: Custom Domain - Optional -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER: e.g. https://example.com -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP: If your local path supports custom domains, please fill in -MANAGE_CONSTANT_LOCAL_WEB_PATH: Web Path - Optional -MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER: e.g. test/ttc -MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP: Used to generate URL -MANAGE_CONSTANT_LOCAL_EXPLAIN: Local Configuration -MANAGE_CONSTANT_LOCAL_REFER_TEXT: 'Refer to:' -MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE: baseDir cannot be empty -MANAGE_CONSTANT_LOCAL_BUCKET_DESC: Special Configuration -MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: bucket1 -MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration -MANAGE_CONSTANT_SFTP_NAME: SFTP -MANAGE_CONSTANT_SFTP_ALIAS_DESC: Alias - Required -MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: Unique identifier for this configuration -MANAGE_CONSTANT_SFTP_HOST_DESC: SSH Host - Required -MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: e.g. 233.233.233.233 -MANAGE_CONSTANT_SFTP_PORT_DESC: SSH Port - Required -MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: e.g. 22 -MANAGE_CONSTANT_SFTP_USERNAME_DESC: Username -MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: Please enter your username -MANAGE_CONSTANT_SFTP_PASSWORD_DESC: Password -MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: Please enter your password -MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: Private Key -MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: Please enter your private key -MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: Private Key Password -MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: Please enter your private key password -MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: Base Directory -MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: e.g. /dir1 -MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: Custom Domain -MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: e.g. https://example.com -MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: If your SFTP server supports custom domains, please fill in -MANAGE_CONSTANT_SFTP_WEB_PATH: Web Path -MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: e.g. test/ttc -MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: Used to generate URL -MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: File mode -MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: e.g. 0644 -MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: Directory mode -MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: e.g. 0755 -MANAGE_CONSTANT_SFTP_EXPLAIN: SFTP Configuration -MANAGE_CONSTANT_SFTP_REFER_TEXT: 'Refer to:' -MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: baseDir cannot be empty -MANAGE_CONSTANT_SFTP_BUCKET_DESC: Special Configuration -MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: e.g. bucket1 -MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration -MANAGE_LOGIN_PAGE_PANE_NAME: Saved Config -MANAGE_LOGIN_PAGE_PANE_KEY_NAME: Configuration -MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: Value -MANAGE_LOGIN_PAGE_PANE_ENTER: Enter -MANAGE_LOGIN_PAGE_PANE_DELETE: Delete -MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER: Please select -MANAGE_LOGIN_PAGE_PANE_IMPORT: Import -MANAGE_LOGIN_PAGE_PANE_SAVE: Save -MANAGE_LOGIN_PAGE_PANE_RESET: Reset -MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE: Existing configurations, click to copy corresponding cell data -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A: Please fill in -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE: The alias can only contain Chinese, English, numbers, underscores, and hyphens -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE: The number of items per page must be between 20-1000 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE: Custom domain name should start with http:// or https:// -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME: Notice -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE: 'Alias overwritten: ' -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B: 'Alias saved: ' -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C: 'Alias deleted: ' -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D: 'Configuration with alias: ' -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E: ' failed to delete' -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS: 'Copied ' -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE: Are you sure to delete this? -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP: Tip -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM: Confirm -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL: Cancel -MANAGE_BUCKET_PAGE_LOADING_TEXT: Loading... -MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER: Please select a custom domain -MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER: Please enter a custom domain -MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP: Upload files -MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP: Upload from URL -MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP: Create folder -MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP: Download page -MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP: Batch rename -MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP: Batch copy URL -MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP: Copy file information -MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP: Force refresh file list -MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER: Search files -MANAGE_BUCKET_PAGE_ROOT_FOLDER: Root folder -MANAGE_BUCKET_PAGE_FILE_NUMBER: 'Number of files: ' -MANAGE_BUCKET_PAGE_FILE_SIZE: 'Total size: ' -MANAGE_BUCKET_PAGE_SELECT_ALL: Select all -MANAGE_BUCKET_PAGE_SELECT_NONE: Deselect all -MANAGE_BUCKET_PAGE_SELECT_INVERT: Invert selection -MANAGE_BUCKET_DOWNLOAD_BTN: Download -MANAGE_BUCKET_DELETE_BTN: Delete -MANAGE_BUCKET_SORT_TITLE: Sort -MANAGE_BUCKET_SORT_NAME: Name -MANAGE_BUCKET_SORT_SIZE: Size -MANAGE_BUCKET_SORT_EXT: Type -MANAGE_BUCKET_SORT_TIME: Time -MANAGE_BUCKET_SORT_CHECK: Selected status -MANAGE_BUCKET_SORT_INIT: Init -MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: Please enter URL(s), support multiple URLs separated by line breaks -MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: Confirm -MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: Cancel -MANAGE_BUCKET_URL_FORMAT_MARKDOWN: Markdown -MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK: Markdown-link -MANAGE_BUCKET_URL_FORMAT_URL: Url -MANAGE_BUCKET_URL_FORMAT_HTML: Html -MANAGE_BUCKET_URL_FORMAT_BBCODE: BBCode -MANAGE_BUCKET_URL_FORMAT_CUSTOM: Custom -MANAGE_BUCKET_URL_FORMAT_PRESIGN: Presigned link -MANAGE_BUCKET_FILE_INFO_TITLE: File information -MANAGE_BUCKET_FILE_INFO_COPY_TIPS: Copy in JSON format -MANAGE_BUCKET_FILE_LIST_LOADING: Loading, click to cancel -MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE: Preparing to download, click to cancel -MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE: Keep folder structure -MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE: Do not keep folder structure -MANAGE_BUCKET_UPLOAD_AREA_TITLE: Drag and drop to upload, support recursive upload of folders -MANAGE_BUCKET_UPLOAD_AREA_TEXT: 'Or: click to select file (folders are not supported)' -MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING: Loading files -MANAGE_BUCKET_UPLOAD_AREA_BTN: Upload -MANAGE_BUCKET_UPLOAD_AREA_CLEAR: Clear -MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING: Uploading -MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK: Copy upload task information -MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK: Clear completed tasks -MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK: Clear all tasks -MANAGE_BUCKET_UPLOAD_AREA_SUCCESS: Success -MANAGE_BUCKET_UPLOAD_AREA_FAILED: Failed -MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE: Download page -MANAGE_BUCKET_DOWNLOADING: Downloading -MANAGE_BUCKET_DOWNLOAD_COPY_TASK: Copy download task information -MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK: Clear completed tasks -MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK: Clear all tasks -MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER: Open download folder -MANAGE_BUCKET_DOWNLOAD_SUCCESS: Success -MANAGE_BUCKET_DOWNLOAD_FAILED: Failed -MANAGE_BUCKET_MARKDOWN_PREVIEW: Preview -MANAGE_BUCKET_PLAY: Play -MANAGE_BUCKET_RENAME_FILE: Rename file -MANAGE_BUCKET_RENAME_FILE_INPUT_A: String or JS regular expression for matching during replacement -MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS: Directly enter the regular expression, no need to add / -MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER: 'For example: ^\d{4}-\d{2}-\d{2} ' -MANAGE_BUCKET_RENAME_FILE_INPUT_B: String for replacement, placeholders from custom -MANAGE_BUCKET_RENAME_FILE_TABLE_IID: Auto-incrementing number -MANAGE_BUCKET_RENAME_FILE_EXT: Replace extension if it matches -MANAGE_BUCKET_RENAME_FILE_EXT_TIPS: Check this option if you want to modify the extension -MANAGE_BUCKET_RENAME_FILE_EXT_YES: 'Yes' -MANAGE_BUCKET_RENAME_FILE_EXT_NO: 'No' -MANAGE_BUCKET_RENAME_FILE_CANCEL: Cancel -MANAGE_BUCKET_RENAME_FILE_CONFIRM: Confirm -MANAGE_BUCKET_COPY_SUCCESS: Copy success -MANAGE_BUCKET_START_LOADING_MESSAGE: Start getting files -MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL: Failed to get file content -MANAGE_BUCKET_LAST_PAGE_TITLE: Tip -MANAGE_BUCKET_LAST_PAGE_MSG: This is the last page -MANAGE_BUCKET_GET_LIST_FAIL_TITLE: Tip -MANAGE_BUCKET_GET_LIST_FAIL_MSG: Failed to get file list -MANAGE_BUCKET_GET_LIST_FAIL_MSG2: Getting file list in the background, please do not switch pages -MANAGE_BUCKET_GET_LIST_FAIL_MSG3: Loading file list, please try again later -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE: Are you sure you want to download this folder? -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP: Tip -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM: Confirm -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL: Cancel -MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS: Successfully obtained download list -MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL: Failed to obtain download list -MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL: Canceled -MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE: Please enter the folder name -MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP: Create folder -MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM: Confirm -MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL: Cancel -MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG: Folder name can only contain Chinese, English, numbers, underscores, and slashes -MANAGE_BUCKET_CREATE_FOLDER_SUCCESS: Successfully created, please refresh -MANAGE_BUCKET_CREATE_FOLDER_FAIL: Failed to create -MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ: Please enter a valid URL -MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE: Tip -MANAGE_BUCKET_UPLOAD_URL_NOT_MSG: Starting background download, automatic upload after success -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG: Please enter the matching string -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2: No matching files found -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3: No files need to be renamed -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A: Detected -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B: files are duplicated. Do you want to continue? -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C: Tip -MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM: Confirm -MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL: Cancel -MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A: Rename successful -MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B: Failed -MANAGE_BUCKET_BATCH_RENAME_CANCEL: Canceled -MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG: Please select the file first -MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A: Copied -MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B: file(s) information -MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG: Please select the file first -MANAGE_BUCKET_BATCH_COPY_URL_MSG_A: Copied -MANAGE_BUCKET_BATCH_COPY_URL_MSG_B: file(s) link -MANAGE_BUCKET_CANCEL_LOADING_TITLE: Stop getting file list? -MANAGE_BUCKET_CANCEL_LOADING_MSG: Tip -MANAGE_BUCKET_CANCEL_LOADING_CONFIRM: Confirm -MANAGE_BUCKET_CANCEL_LOADING_CANCEL: Cancel -MANAGE_BUCKET_CANCEL_LOADING_SUCCESS: File list retrieval has been stopped -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE: Stop downloading file retrieval? -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG: Prompt -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM: Confirm -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL: Cancel -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS: Download file retrieval has been stopped -MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE: Prompt -MANAGE_BUCKET_GET_FILE_BS_NOT_MSG: Successfully retrieved file list -MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2: Some files failed to retrieve -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A: Permanently delete -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B: files, continue? -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG: Prompt -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM: Confirm -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL: Cancel -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE: Prompt -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG: Deletion failed MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: Deletion successful -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3: Failed -MANAGE_BUCKET_BATCH_DELETE_CANCEL: Deletion has been cancelled -MANAGE_BUCKET_DELETE_CONFIRM_TITLE: Permanently delete -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER: folder -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A: and all files in this directory -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE: file -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C: Continue? -MANAGE_BUCKET_DELETE_CONFIRM_MSG: Prompt -MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM: Confirm -MANAGE_BUCKET_DELETE_CONFIRM_CANCEL: Cancel -MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE: Prompt -MANAGE_BUCKET_DELETE_ERROR_MSG_MSG: Deleting a folder may take some time, please be patient -MANAGE_BUCKET_DELETE_SUCCESS: Deletion successful -MANAGE_BUCKET_DELETE_FAIL: Deletion failed -MANAGE_BUCKET_DELETE_CANCEL: Deletion has been cancelled -MANAGE_BUCKET_RENAME_INFO_MSG: The new file name is the same as the original file name, no need to rename -MANAGE_BUCKET_RENAME_SUCCESS: Rename successful -MANAGE_BUCKET_RENAME_ERROR_MSG: Rename failed -MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME: File name -MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME: Completion time -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS: Status -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS: Success -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL: Failed -MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME: File name -MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH: Upload path -MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME: Completion time -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS: Status -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS: Success -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL: Failed -MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME: File name -MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS: Progress -MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME: File name -MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS: Progress -MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME: File name -MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE: Size -MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM: Number of files -MANAGE_BUCKET_FILE_COLUMN_FILENAME: FileName -MANAGE_BUCKET_FILE_COLUMN_COPY_URL: Copy link -MANAGE_BUCKET_FILE_COLUMN_INFO: File Info -MANAGE_BUCKET_FILE_COLUMN_FILESIZE: Size -MANAGE_BUCKET_FILE_COLUMN_TIME: Time -MANAGE_NEW_BUCKET_TCYUN_NAME: Tencent Cloud -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC: Bucket Name -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER: Please enter the Bucket name -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A: Bucket name can't be empty -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B: Bucket name length cannot exceed 23 characters -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C: Bucket name can only contain lowercase letters, numbers, and hyphens, and cannot begin or end with a hyphen -MANAGE_NEW_BUCKET_TCYUN_REGION: Region -MANAGE_NEW_BUCKET_TCYUN_ACL_DESC: Access Control -MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW: Public Read and Write -MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R: Public Read -MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE: Private -MANAGE_NEW_BUCKET_ALIYUN_NAME: Alibaba Cloud -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC: Bucket Name -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER: Please enter the Bucket name -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A: Bucket name can't be empty -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B: Bucket name length cannot exceed 63 characters -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C: Bucket name can only contain lowercase letters, numbers, and hyphens, and cannot begin or end with a hyphen -MANAGE_NEW_BUCKET_ALIYUN_REGION: Region -MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC: Access Control -MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW: Public Read and Write -MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R: Public Read -MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE: Private -MANAGE_NEW_BUCKET_QINIU_NAME: Qiniu Cloud -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC: Bucket Name -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER: Please enter the Bucket name -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A: Bucket name can't be empty -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B: Bucket name length cannot exceed 63 characters -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C: Bucket names can only contain lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen. -MANAGE_NEW_BUCKET_QINIU_REGION: Region -MANAGE_NEW_BUCKET_QINIU_ACL_DESC: Public Access -MANAGE_NEW_BUCKET_S3PLIST_NAME: S3-Compatible -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC: Bucket Name -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER: Please enter the Bucket name -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A: Bucket name can't be empty -MANAGE_NEW_BUCKET_S3PLIST_REGION: Region -MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC: Access Control -MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW: Public Read and Write -MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R: Public Read -MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE: Private -MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ: Authenticated Read PLUGIN_INSTALL_FAILED: Plugin install failed PLUGIN_UNINSTALL_FAILED: Plugin uninstall failed -PLUGIN_UPDATE_SUCCEED: Plugin update succeed PLUGIN_UPDATE_FAILED: Plugin update failed PLUGIN_IMPORT_SUCCEED: Plugin import succeed PLUGIN_IMPORT_FAILED: Plugin import failed diff --git a/resources/i18n/zh-CN.yml b/resources/i18n/zh-CN.yml index c582d188..49d9e72e 100644 --- a/resources/i18n/zh-CN.yml +++ b/resources/i18n/zh-CN.yml @@ -8,13 +8,10 @@ RELOAD_APP: 重启åē”ᔍ UPLOAD_SUCCEED: 上äŧ æˆåŠŸ UPLOAD_FAILED: 上äŧ å¤ąč´Ĩ UPLOAD_PROGRESS: 上äŧ čŋ›åēĻ -OPERATION_SUCCEED: 操äŊœæˆåŠŸ -OPERATION_FAILED: 操äŊœå¤ąč´Ĩ UPLOADING: æ­Ŗåœ¨ä¸Šäŧ  QUICK_UPLOAD: åŋĢæˇä¸Šäŧ  UPLOAD_BY_CLIPBOARD: å‰Ēč´´æŋå›žį‰‡ä¸Šäŧ  SHOW_PICBED_QRCODE: į”Ÿæˆå›žåēŠé…įŊŽäēŒįģ´į  -PICBED_QRCODE: 回åēŠé…įŊŽäēŒįģ´į  ENABLE: 吝ᔍ DISABLE: įρᔍ CONFIG_THING: 配įŊŽ${c} @@ -28,18 +25,6 @@ START_WATCH_CLIPBOARD: åŧ€å§‹į›‘åŦå‰Ēč´´æŋ STOP_WATCH_CLIPBOARD: 停æ­ĸᛑåŦå‰Ēč´´æŋ OPEN_TOOLBOX: 打åŧ€äŋŽå¤åˇĨå…ˇįŽą TOOLBOX: åˇĨå…ˇįŽą -TOOLBOX_TITLE: 排æŸĨ PicList čŋčĄŒæ—ļ问éĸ˜ -TOOLBOX_SUB_TITLE: įĢ‹åŗæ‰Ģ描äģĨä¸‹éĄšį›ŽīŧŒäŋŽå¤äŊŋį”¨é—Žéĸ˜ -TOOLBOX_CHECK_CONFIG_FILE_BROKEN: æŖ€æŸĨ配įŊŽæ–‡äģ￘¯åĻ损坏 -TOOLBOX_CHECK_GALLERY_FILE_BROKEN: æŖ€æŸĨį›¸å†Œæ–‡äģ￘¯åĻ损坏 -TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD: æŖ€æŸĨå‰Ēč´´æŋå›žį‰‡ä¸Šäŧ æ˜¯åĻ存在闎éĸ˜ -TOOLBOX_CHECK_PROBLEM_WITH_PROXY: æŖ€æŸĨäģŖį†čŽžįŊŽæ˜¯åĻæ­Ŗå¸¸ -TOOLBOX_FIX_DONE_NEED_RELOAD: äŋŽå¤åŽŒæˆīŧŒéœ€čĻé‡å¯į”Ÿæ•ˆīŧŒæ˜¯åĻ重启 -TOOLBOX_CANT_AUTO_FIX: æ— æŗ•č‡Ē动äŋŽå¤īŧŒč¯ˇč‡Ē行äŋŽå¤äģĨ下问éĸ˜ -TOOLBOX_START_SCAN: åŧ€å§‹æ‰Ģ描 -TOOLBOX_RE_SCAN: 重新æ‰Ģ描 -TOOLBOX_START_FIX: åŧ€å§‹äŋŽå¤ -TOOLBOX_SUCCESS_TIPS: 恭喜äŊ īŧŒæ˛Ąæœ‰æŖ€æŸĨå‡ē问éĸ˜ TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: 配įŊŽæ–‡äģļčˇ¯åž„æ˜¯īŧš${path} TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: 配įŊŽæ–‡äģļåˇ˛æŸå TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: į›¸å†Œæ–‡äģļčˇ¯åž„æ˜¯īŧš${path} @@ -51,865 +36,12 @@ 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} -MANUAL_PAGE_OPEN_TIP: č¯ˇé€‰æ‹Šæ‰“åŧ€æ–šåŧ -MANUAL_PAGE_OPEN_TIP_TITLE: Tips -MANUAL_PAGE_OPEN_BY_BROWSER: æĩč§ˆå™¨ -MANUAL_PAGE_OPEN_BY_BUILD_IN: 内įŊŽįĒ—åŖ -MANUAL_PAGE_OPEN_SETTING_TIP: 选拊手册打åŧ€æ–šåŧ -UPLOAD_AREA: 上äŧ  -UPLOAD_VIEW_HINT: į‚šå‡ģ打åŧ€å›žåēŠčŽžįŊŽ -MANAGE_PAGE: įŽĄį† -GALLERY: į›¸å†Œ -REFRESH: åˆˇæ–° -MANUAL: 手册 -PICBEDS_SETTINGS: 回åēŠ -PICLIST_SETTINGS: 莞įŊŽ -PLUGIN_SETTINGS: 插äģļ -CHOOSE_PICBED: 选拊回åēŠ -COPY_PICBED_CONFIG: 复åˆļ回åēŠé…įŊŽ -COPY_PICBED_CONFIG_SUCCEED: 复åˆļ回åēŠé…įŊŽæˆåŠŸ -INPUT: 输å…ĨæĄ† -CANCEL: 取æļˆ -CONFIRM: įĄŽåŽš -RESET_PICBED_CONFIG: 重įŊŽ -CHOOSE_SHOWED_PICBED: č¯ˇé€‰æ‹Šæ˜žį¤ēįš„å›žåēŠ -CHOOSE_PASTE_FORMAT: č¯ˇé€‰æ‹Šį˛˜č´´įš„æ ŧåŧ -COPY: 复åˆļ -DELETE: 删除 -SELECT_ALL: 全选 -CHANGE_IMAGE_URL: äŋŽæ”šå›žį‰‡URL -CHANGE_IMAGE_URL_SUCCEED: äŋŽæ”šå›žį‰‡URL成功 -COPY_LINK_SUCCEED: 复åˆļ链æŽĨ成功 -BATCH_COPY_LINK_SUCCEED: 扚量复åˆļ链æŽĨ成功 -FILE_RENAME: 文äģļæ”šå -OPEN_FILE_PATH: 打åŧ€æ–‡äģļčˇ¯åž„ -GALLERY_SYNC_DELETE: 删除äē‘į̝ -GALLERY_SYNC_DELETE_NOTICE_TITLE: 通įŸĨ GALLERY_SYNC_DELETE_NOTICE_SUCCEED: äē‘įĢ¯åˆ é™¤æˆåŠŸ GALLERY_SYNC_DELETE_NOTICE_FAILED: äē‘įĢ¯åˆ é™¤å¤ąč´Ĩ -GALLERY_CHANGE_URL: äŋŽæ”š -GALLERY_SEARCH_FILENAME: 搜į´ĸ文äģļ名 -GALLERY_SEARCH_URL: 搜į´ĸURL -GALLERY_MATCHED: ' 匚配到: ' -UPLOAD_PAGE_COPY_UPLOAD_API: 复åˆļ上äŧ API -UPLOAD_PAGE_IMAGE_PROCESS_NAME: å›žį‰‡å¤„į† -UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: å›žį‰‡å¤„į†čŽžįŊŽ -UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: 莺čŋ‡å¤„į†įš„æ–‡äģ￉Šåą•ååˆ—čĄ¨ -UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: '蝎åĄĢ写需čρ莺čŋ‡å¤„į†įš„æ–‡äģ￉Šåą•ååˆ—čĄ¨, äģĨč‹ąæ–‡é€—åˇåˆ†éš”, åĻ‚: jpg,png,gif' -UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: 是åĻæˇģ加水印 -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: 水印įąģ型 -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: 文字 -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE: å›žį‰‡ -UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM: 是åĻå…¨åąæ°´å° -UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE: æ°´å°č§’åēĻ -UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT: 水印文字 -UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH: 水印字äŊ“čˇ¯åž„(įŦŦ一æŦĄéœ€ä¸‹čŊŊ字äŊ“æ–‡äģļ) -UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO: 水印占原回比䞋 -UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR: 水印éĸœč‰˛,蝎äģŽå–č‰˛å™¨ä¸­é€‰æ‹Š -UPLOAD_PAGE_IMAGE_PROCESS_WMPATH: æ°´å°å›žį‰‡čˇ¯åž„(į•™įŠēäŊŋᔍéģ˜čŽ¤å›žį‰‡) -UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION: 水印äŊįŊŽ -UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF: 是åĻį§ģ除EXIFäŋĄæ¯ -UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: 压įŧŠč´¨é‡(1-100) -UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: 是åĻčŊŦæĸæ ŧåŧ -UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: čŊŦæĸį›Žįš„æ ŧåŧ -UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: 'į˛žįģ†åŒ–čŊŦæĸæ ŧåŧ, č¯ˇčž“å…ĨJSONæ ŧåŧīŧŒåĻ‚: {"png": "jpg"}' -UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: 是åĻčŋ›čĄŒåž‚į›´įŋģčŊŦ -UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: 是åĻčŋ›čĄŒæ°´åšŗįŋģčŊŦ -UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: 是åĻ按å›ē厚å°ēå¯¸č°ƒæ•´å›žį‰‡ -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH: č°ƒæ•´å°ē寸åŽŊåēĻ(莞ä¸ē0则按é̘åēĻį­‰æ¯”įŧŠæ”ž) -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT: č°ƒæ•´å°ē寸é̘åēĻ(莞ä¸ē0则按åŽŊåēĻį­‰æ¯”įŧŠæ”ž) -UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT: åŊ“å›žį‰‡é̘åēĻ小äēŽčŽžåŽšé̘åēĻæ—ļ莺čŋ‡įŧŠæ”ž -UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH: åŊ“å›žį‰‡åŽŊåēĻ小äēŽčŽžåŽšåŽŊåēĻæ—ļ莺čŋ‡įŧŠæ”ž -UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT: 是åĻæŒ‰æ¯”äž‹č°ƒæ•´å°ē寸īŧŒäŧ˜å…ˆįē§æ›´é̘ -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT: č°ƒæ•´å°ē寸比䞋, 输å…Ĩ50襨į¤ē50% -UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE: 是åĻ旋čŊŦ -UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE: 旋čŊŦ角åēĻ -UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM: äŋå­˜ -UPLOAD_PAGE_IMAGE_PROCESS_CANCEL: 取æļˆ -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP: 上 -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM: 下 -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT: åˇĻ -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT: åŗ -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT: åˇĻ上 -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT: åŗä¸Š -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT: åˇĻ下 -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT: åŗä¸‹ -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER: 中 -UPLOAD_SHORT_URL: įŸ­é“žæŽĨ -UPLOAD_NORMAL_URL: é•ŋ链æŽĨ -SETTINGS: 莞įŊŽ -SETTINGS_OPEN_CONFIG_FILE: 打åŧ€é…įŊŽæ–‡äģļ -SETTINGS_MIGRATE_FROM_PICGO: äģŽPicGočŋį§ģ -SETTINGS_MIGRATE_FROM_PICGO_TITLE: 通įŸĨ -SETTINGS_MIGRATE_FROM_PICGO_CONTENT: åŗå°†å¯ŧå…ĨPicGoįš„é…įŊŽæ–‡äģļå’Œį›¸å†Œ, čŋ™å°†čφᛖåŊ“å‰įš„é…įŊŽæ–‡äģļå’Œį›¸å†Œ, 是åĻįģ§įģ­? -SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: å¯ŧå…Ĩ成功, č¯ˇé‡å¯PicListį”Ÿæ•ˆ -SETTINGS_MIGRATE_FROM_PICGO_FAILED: å¯ŧå…Ĩå¤ąč´Ĩ -SETTINGS_START_MODE: å¯åŠ¨æ¨Ąåŧ -SETTINGS_START_MODE_MINI: miniįĒ—åŖ -SETTINGS_START_MODE_MAIN: ä¸ģįĒ—åŖ -SETTINGS_START_MODE_NO_TRAY: éšč—æ‰˜į›˜ -SETTINGS_START_MODE_QUIET: 静éģ˜å¯åЍ -SETTINGS_CLICK_TO_OPEN: į‚šå‡ģ打åŧ€ -SETTINGS_SET_LOG_FILE: 莞įŊŽæ—Ĩåŋ—æ–‡äģļ -SETTINGS_CLICK_TO_SET: į‚šå‡ģ莞įŊŽ -SETTINGS_CLICK_TO_CHECK: į‚šå‡ģæŖ€æŸĨ -SETTINGS_SET_SHORTCUT: 莞įŊŽåŋĢæˇé”Ž -SETTINGS_CUSTOM_LINK_FORMAT: č‡Ē厚䚉铞æŽĨæ ŧåŧ -SETTINGS_SET_PROXY_AND_MIRROR: 莞įŊŽäģŖį†å’Œé•œåƒåœ°å€ -SETTINGS_SET_SERVER: 莞įŊŽServer -SETTINGS_CHECK_UPDATE: æŖ€æŸĨ更新 -SETTINGS_OPEN_UPDATE_HELPER: 打åŧ€æ›´æ–°åŠŠæ‰‹ -SETTINGS_OPEN: åŧ€ -SETTINGS_CLOSE: å…ŗ -SETTINGS_CLOSE_MINI_WINDOW_SYNC: 打åŧ€ä¸ģįĒ—åŖæ—ļå…ŗé—­miniįĒ—åŖ -SETTINGS_CLOSE_MAIN_WINDOW_SYNC: 打åŧ€miniįĒ—åŖæ—ļå…ŗé—­ä¸ģįĒ—åŖ -SETTINGS_LAUNCH_ON_BOOT: åŧ€æœēč‡Ē启 -SETTINGS_RENAME_BEFORE_UPLOAD: 手动重å‘Ŋ名 -SETTINGS_TIMESTAMP_RENAME: æ—ļé—´æˆŗé‡å‘Ŋ名 -SETTINGS_ADVANCED_RENAME: é̘įē§é‡å‘Ŋ名 -SETTINGS_ADVANCED_RENAME_ENABLE: åŧ€å¯é̘įē§é‡å‘Ŋ名 -SETTINGS_ADVANCED_RENAME_FORMAT: 重å‘Ŋ名æ ŧåŧ -SETTINGS_ENABLE_SECOND_PICBED: 吝ᔍįŦŦäēŒå›žåēŠåŒæ­Ĩ上äŧ  -SETTINGS_SET_SECOND_PICBED: 莞įŊŽįŦŦäēŒå›žåēŠ -SETTINGS_OPEN_UPLOAD_TIPS: åŧ€å¯ä¸Šäŧ čŋ›åēĻæį¤ē -SETTINGS_OPEN_UPLOAD_RESULT_TIPS: åŧ€å¯ä¸Šäŧ į쓿žœæį¤ē -SETTINGS_MINI_WINDOW_ON_TOP: MiniįĒ—åŖįŊŽéĄļ -SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD: 上äŧ åŽč‡Ē动复åˆļURL -SETTINGS_TIPS_PLACEHOLDER_URL: į”¨å äŊįŦĻ $url æĨ襨į¤ēurlįš„äŊįŊŽ -SETTINGS_TIPS_PLACEHOLDER_FILENAME: į”¨å äŊįŦĻ $fileName æĨ襨į¤ē文äģļåįš„äŊįŊŽ -SETTINGS_TIPS_PLACEHOLDER_EXTNAME: į”¨å äŊįŦĻ $extName æĨ襨į¤ē文äģļæ ŧåŧįš„äŊįŊŽ -SETTINGS_TIPS_SUCH_AS: åĻ‚ -SETTINGS_UPLOAD_PROXY: 上äŧ äģŖį† -SETTINGS_PLUGIN_INSTALL_PROXY: 插äģļåŽ‰čŖ…äģŖį† -SETTINGS_PLUGIN_INSTALL_MIRROR: 插äģļåŽ‰čŖ…é•œåƒ -SETTINGS_CURRENT_VERSION: åŊ“å‰į‰ˆæœŦ -SETTINGS_NEWEST_VERSION: æœ€æ–°į‰ˆæœŦ -SETTINGS_GETING: æ­Ŗåœ¨čŽˇå–ä¸­ -SETTINGS_TIPS_HAS_NEW_VERSION: PicList更新å•ĻīŧŒč¯ˇį‚šå‡ģįĄŽåŽšé‡å¯č§Ļ发更新 -SETTINGS_LOG_FILE_PATH: æ—Ĩåŋ—æ–‡äģļčˇ¯åž„ -SETTINGS_CONFIG_FILE_PATH: 配įŊŽæ–‡äģļčˇ¯åž„ -SETTINGS_LOG_FILE: 叏规æ—Ĩåŋ—æ–‡äģļ -SETTINGS_GUI_LOG_FILE: GUIæ—Ĩåŋ—æ–‡äģļ -SETTINGS_MANAGE_LOG_FILE: įŽĄį†æ—Ĩåŋ—æ–‡äģļ -SETTINGS_LOG_LEVEL: æ—Ĩåŋ—čްåŊ•į­‰įē§ -SETTINGS_LOG_FILE_SIZE: æ—Ĩåŋ—æ–‡äģļ大小 -SETTINGS_SET_PICGO_SERVER: 莞įŊŽPicGo-Server -SETTINGS_TIPS_SERVER_NOTICE: åĻ‚æžœäŊ ä¸įŸĨ道Serverįš„äŊœį”¨īŧŒč¯ˇé˜…č¯ģæ–‡æĄŖīŧŒæˆ–č€…ä¸į”¨äŋŽæ”šé…įŊŽã€‚ -SETTINGS_ENABLE_SERVER: 是åĻåŧ€å¯Server -SETTINGS_SET_SERVER_HOST: 莞įŊŽį›‘åŦ地址 -SETTINGS_SET_SERVER_PORT: 莞įŊŽį›‘åŦįĢ¯åŖ -SETTINGS_SET_SERVER_KEY: 莞įŊŽé‰´æƒå¯†é’Ĩ -SETTINGS_SET_WEB_SERVER: 莞įŊŽWebæœåŠĄ -SETTINGS_TIPS_WEB_SERVER_NOTICE: åĻ‚æžœäŊ ä¸įŸĨ道WebæœåŠĄįš„äŊœį”¨īŧŒč¯ˇé˜…č¯ģæ–‡æĄŖīŧŒæˆ–č€…ä¸į”¨äŋŽæ”šé…įŊŽã€‚ -SETTINGS_SET_ENABLE_WEB_SERVER: 是åĻåŧ€å¯WebæœåŠĄ -SETTINGS_SET_WEB_SERVER_HOST: 莞įŊŽWebæœåŠĄį›‘åŦ地址 -SETTINGS_SET_WEB_SERVER_PORT: 莞įŊŽWebæœåŠĄį›‘åŦįĢ¯åŖ -SETTINGS_SET_WEB_SERVER_PATH: 莞įŊŽWebæœåŠĄčˇ¯åž„ -SETTINGS_TIP_PLACEHOLDER_WEB_HOST: æŽ¨čéģ˜čŽ¤åœ°å€:127.0.0.1 -SETTINGS_TIP_PLACEHOLDER_WEB_PORT: æŽ¨čéģ˜čޤįĢ¯åŖ:37777 -SETTINGS_TIP_PLACEHOLDER_HOST: æŽ¨čéģ˜čŽ¤åœ°å€:127.0.0.1 -SETTINGS_TIP_PLACEHOLDER_PORT: æŽ¨čéģ˜čޤįĢ¯åŖ:36677 -SETTINGS_TIP_PLACEHOLDER_KEY: ᔍäēŽæŽĨåŖé‰´æƒ, 通čŋ‡url参数æˇģ加'?key=xxx' -SETTINGS_SET_SERVER_AES_KEY: 莞įŊŽæŽĨåŖæ•°æŽåŠ å¯†å¯†é’Ĩ -SETTINGS_LOG_LEVEL_ALL: 全部-All -SETTINGS_LOG_LEVEL_SUCCESS: 成功-Success -SETTINGS_LOG_LEVEL_ERROR: 错蝝-Error -SETTINGS_LOG_LEVEL_INFO: 晎通-Info -SETTINGS_LOG_LEVEL_WARN: 提醒-Warn -SETTINGS_LOG_LEVEL_NONE: 不记åŊ•æ—Ĩåŋ—-None -SETTINGS_RESULT: 莞įŊŽį쓿žœ -SETTINGS_DEFAULT_PICBED: 莞įŊŽéģ˜čŽ¤å›žåēŠ -SETTINGS_SET_DEFAULT_PICBED: 莞ä¸ēéģ˜čŽ¤å›žåēŠ -SETTINGS_NOT_CONFIG_OPTIONS: 暂无配įŊŽéĄš -SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD: äŊŋᔍ内įŊŽå‰Ēč´´æŋ上äŧ  -SETTINGS_CHOOSE_LANGUAGE: é€‰æ‹Šč¯­č¨€ -BUILTIN_CLIPBOARD_TIPS: äŊŋᔍ内įŊŽå‰Ēč´´æŋå‡Ŋæ•°č€Œä¸æ˜¯č°ƒį”¨č„šæœŦčŽˇå–å‰Ēč´´æŋå›žį‰‡ -UPLOADER_CONFIG_NAME: 回åēŠé…įŊŽå -UPLOADER_CONFIG_PLACEHOLDER: č¯ˇčž“å…Ĩ配įŊŽåį§° -SELECTED_SETTING_HINT: 厞选䏭 -SETTINGS_MAIN_WINDOW_SIZE: éģ˜čޤä¸ģįĒ—åŖå¤§å°(需重启) -SETTINGS_MAIN_WINDOW_SIZE_WIDTH: éģ˜čޤä¸ģįĒ—åŖåŽŊåēĻ -SETTINGS_MAIN_WINDOW_WIDTH_HINT: 'éģ˜čޤåŽŊåēĻ: 1200' -SETTINGS_MAIN_WINDOW_SIZE_HEIGHT: éģ˜čޤä¸ģįĒ—åŖé̘åēĻ -SETTINGS_MAIN_WINDOW_HEIGHT_HINT: 'éģ˜čޤé̘åēĻ: 800' -SETTINGS_RAW_PICGO_SIZE: 原PicGo大小 -SETTINGS_CUSTOM_MINI_ICON_PATH: č‡Ē厚䚉MiniįĒ—åŖå›žæ ‡čˇ¯åž„ -SETTINGS_CUSTOM_MINI_ICON: 是åĻč‡Ē厚䚉MiniįĒ—åŖå›žæ ‡ -SETTINGS_COMPRESS_AND_WATERMARK: 莞įŊŽå›žį‰‡æ°´å°å’ŒåŽ‹įŧŠ-æ ŧåŧčŊŦæĸį­‰å‚æ•° -SETTINGS_SYNC_DELETE_CLOUD: į›¸å†Œå†…åˆ é™¤æ—ļ同æ­Ĩ删除äē‘įĢ¯æ–‡äģļ -SETTINGS_ISHIDEDOCK: 是åĻ隐藏dock回标 -SETTINGS_ISHIDEDOCK_TIPS: 不支持同æ—ļ隐藏dockå’Œæ‰˜į›˜ -SETTINGS_ENCODE_OUTPUT_URL: 输å‡ēīŧˆå¤åˆļīŧ‰ URL æ—ļčŋ›čĄŒčŊŦ义 -SETTINGS_WATCH_CLIPBOARD: čŊ¯äģļ启动æ—ļč‡ĒåŠ¨į›‘åŦå‰Ēč´´æŋ上äŧ  -SETTINGS_SHORT_URL: äŊŋį”¨įŸ­é“žæŽĨ -SETTINGS_SHORT_URL_SERVER: įŸ­é“žæŽĨæœåŠĄ -SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token -SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS域名 -SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature -SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker域名 -SETTINGS_SHORT_SINK_DOMAIN: sink域名 -SETTINGS_SHORT_SINK_TOKEN: sink token -SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上äŧ åŽåˆ é™¤æœŦ地文äģļ -SETTINGS_SYNC_CONFIG: 莞įŊŽé…įŊŽåŒæ­Ĩ -SETTINGS_SYNC_CONFIG_TITLE: 同æ­Ĩ莞įŊŽ -SETTINGS_SYNC_CONFIG_NOTE: 同æ­Ĩįš„æ–‡äģļä¸ē配įŊŽæ–‡äģļ -SETTINGS_SYNC_CONFIG_SELECT_TYPE: 选拊同æ­Ĩæ–šåŧ -SETTINGS_SYNC_CONFIG_SELECT_FILE: 选拊同æ­Ĩ文äģļ -SETTINGS_SYNC_CONFIG_SELECT_CONFIG: äģ…配įŊŽæ–‡äģļ -SETTINGS_SYNC_CONFIG_SELECT_GALLERY: äģ…į›¸å†Œæ–‡äģļ -SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配įŊŽæ–‡äģļå’Œį›¸å†Œæ–‡äģļ -SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea įŊ‘址 -SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: GitHubį”¨æˆˇå -SETTINGS_SYNC_CONFIG_GITEA_USERNAME: Giteaį”¨æˆˇå -SETTINGS_SYNC_CONFIG_GITEE_USERNAME: Giteeį”¨æˆˇå -SETTINGS_SYNC_CONFIG_GITHUB_REPO: äģ“åē“(į§æœ‰) -SETTINGS_SYNC_CONFIG_GITEA_REPO: äģ“åē“ -SETTINGS_SYNC_CONFIG_GITEE_REPO: äģ“åē“čˇ¯åž„å -SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub分支 -SETTINGS_SYNC_CONFIG_GITEA_BRANCH: Gitea分支 -SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee分支 -SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token -SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Gitea Token -SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Gitee Token -SETTINGS_SYNC_CONFIG_PROXY: äģŖį† -SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: č¯ˇčž“å…ĨGitHubį”¨æˆˇå -SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: č¯ˇčž“å…ĨGiteaį”¨æˆˇå -SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: č¯ˇčž“å…ĨGiteeį”¨æˆˇå -SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: č¯ˇčž“å…ĨGitHubäģ“åē“名 -SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: č¯ˇčž“å…ĨGiteaäģ“åē“名 -SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: č¯ˇčž“å…ĨGiteeäģ“åē“名 -SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: č¯ˇčž“å…ĨGitHub分支名 -SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: č¯ˇčž“å…ĨGitea分支名 -SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: č¯ˇčž“å…ĨGitee分支名 -SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: č¯ˇčž“å…ĨGitHub Token -SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: č¯ˇčž“å…ĨGitea Token -SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: č¯ˇčž“å…ĨGitee Token -SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: č¯ˇčž“å…ĨäģŖį†åœ°å€ -SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAVįĢ¯į‚š -SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: č¯ˇčž“å…ĨWebDAVįĢ¯į‚šURL -SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: į”¨æˆˇå -SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: č¯ˇčž“å…ĨWebDAVį”¨æˆˇå -SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: 坆᠁ -SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: č¯ˇčž“å…ĨWebDAV坆᠁ -SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: čŽ¤č¯įąģ型 -SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: 吝ᔍSSL/HTTPS -SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: äŋå­˜čˇ¯åž„ -SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: č¯ˇé€‰æ‹ŠåŒæ­Ĩ文äģļįš„äŋå­˜čˇ¯åž„ -SETTINGS_UP_DOWN_DESC: 上äŧ ä¸‹čŊŊ配įŊŽæ–‡äģļ -SETTINGS_SYNC_UPLOAD: 上äŧ  -SETTINGS_SYNC_DOWNLOAD: 下čŊŊ -SETTINGS_SYNC_UPLOAD_ALL: 上äŧ æ‰€æœ‰ -SETTINGS_SYNC_DOWNLOAD_ALL: 下čŊŊ所有 -SETTINGS_SYNC_UPLOAD_SUCCESS: 上äŧ æˆåŠŸ -SETTINGS_SYNC_UPLOAD_FAILED: 上äŧ å¤ąč´Ĩ -SETTINGS_SYNC_DOWNLOAD_SUCCESS: 下čŊŊ成功 -SETTINGS_SYNC_DOWNLOAD_FAILED: 下čŊŊå¤ąč´Ĩ -SETTINGS_SYNC_COMMON_CONFIG: é€šį”¨é…įŊŽ -SETTINGS_SYNC_MANAGE_CONFIG: įŽĄį†é…įŊŽ -SETTINGS_AUTO_IMPORT: įŽĄį†éĄĩéĸč‡Ē动å¯ŧå…Ĩ配įŊŽ -SETTINGS_AUTO_IMPORT_SELECT_PICBED: 选拊需čρåŧ€å¯č‡Ē动å¯ŧå…Ĩįš„å›žåēŠ -SETTINGS_TAB_SYSTEM: įŗģįģŸčŽžįŊŽ -SETTINGS_TAB_SYNC_CONFIG: 同æ­Ĩ与配įŊŽ -SETTINGS_TAB_UPLOAD: 上äŧ čŽžįŊŽ -SETTINGS_TAB_ADVANCED: é̘įē§čŽžįŊŽ -SETTINGS_TAB_UPDATE: 更新 -SHORTCUT_NAME: åŋĢæˇé”Žåį§° -SHORTCUT_BIND: åŋĢæˇé”Žįģ‘åޚ -SHORTCUT_STATUS: įŠļ态 -SHORTCUT_ENABLED: 厞吝ᔍ -SHORTCUT_DISABLED: 厞įρᔍ -SHORTCUT_SOURCE: æĨæē -SHORTCUT_HANDLE: 操äŊœ -SHORTCUT_ENABLE: 吝ᔍ -SHORTCUT_DISABLE: įρᔍ -SHORTCUT_EDIT: įŧ–čž‘ -SHORTCUT_CHANGE_UPLOAD: äŋŽæ”šä¸Šäŧ åŋĢæˇé”Ž -WAIT_TO_UPLOAD: į­‰åž…ä¸Šäŧ  -ALREADY_UPLOAD: 厞䏊äŧ  -DRAG_FILE_TO_HERE: 将文äģļæ‹–æ‹Ŋ到此处īŧŒæˆ– -CLICK_TO_UPLOAD: į‚šå‡ģ上äŧ  -LINK_FORMAT: 链æŽĨæ ŧåŧ -CLIPBOARD_PICTURE: å‰Ēč´´æŋ -TIPS_DRAG_VALID_PICTURE_OR_URL: č¯ˇæ‹–å…Ĩåˆæŗ•įš„å›žį‰‡æ–‡äģ￈–č€…å›žį‰‡URL地址 -TIPS_INPUT_URL: č¯ˇčž“å…ĨURL -TIPS_HTTP_PREFIX: http://æˆ–č€…https://åŧ€å¤´ -TIPS_INPUT_VALID_URL: č¯ˇčž“å…Ĩåˆæŗ•įš„URL -PLUGIN_SEARCH_PLACEHOLDER: 搜į´ĸnpmä¸Šįš„PicGo插äģļīŧŒæˆ–č€…į‚šå‡ģ上斚按钎æŸĨįœ‹äŧ˜į§€æ’äģļåˆ—čĄ¨ -PLUGIN_INSTALL: åŽ‰čŖ… -PLUGIN_INSTALLING: åŽ‰čŖ…ä¸­ -PLUGIN_INSTALLED: åˇ˛åŽ‰čŖ… -PLUGIN_DOING_SOMETHING: čŋ›čĄŒä¸­ -PLUGIN_LIST: 插äģļåˆ—čĄ¨ -PLUGIN_IMPORT_LOCAL: å¯ŧå…ĨæœŦ地插äģļ -PLUGIN_UPDATE_ALL: 更新全部插äģļ -TIPS_REMOVE_LINK: 此操äŊœå°†æŠŠč¯Ĩå›žį‰‡į§ģå‡ēį›¸å†Œ, 是åĻįģ§įģ­? -TIPS_WILL_REMOVE_CHOOSED_IMAGES: å°†åœ¨į›¸å†Œä¸­į§ģé™¤åˆšæ‰é€‰ä¸­įš„ ${m} åŧ å›žį‰‡īŧŒæ˜¯åĻįģ§įģ­īŧŸ -TIPS_MUST_CONTAINS_URL: åŋ…éĄģåĢ有$url 或 $fileName 或 $extName -TIPS_NETWORK_ERROR: įŊ‘įģœé”™č¯¯æš‚æ—ļæ— æŗ•čŽˇå– -TIPS_NEED_RELOAD: 需čĻé‡å¯į”Ÿæ•ˆ -TIPS_PLEASE_CHOOSE_LOG_LEVEL: č¯ˇé€‰æ‹Šæ—Ĩåŋ—čްåŊ•į­‰įē§ -TIPS_SET_SUCCEED: 莞įŊŽæˆåŠŸ -TIPS_RESET_SUCCEED: 重įŊŽæˆåŠŸ -TIPS_PLUGIN_NOT_GUI_IMPLEMENT: č¯Ĩ插äģᅵĒå¯šå¯č§†åŒ–į•Œéĸčŋ›čĄŒäŧ˜åŒ–, 是åĻįģ§įģ­åމ誅? TIPS_GET_PLUGIN_LIST_FAILED: čŽˇå–æ’äģļåˆ—čĄ¨å¤ąč´Ĩ -MANAGE_SETTING_TITLE: įŽĄį†éĄĩéĸ莞įŊŽ -MANAGE_SETTING_ISAUTOREFRESH_TITLE: 每æŦĄčŋ›å…Ĩæ–°į›ŽåŊ•æ—ļīŧŒæ˜¯åĻč‡ĒåŠ¨åˆˇæ–°æ–‡äģļåˆ—čĄ¨ -MANAGE_SETTING_ISAUTOREFRESH_TIPS: äģ…寚不分éĄĩæ¨Ąåŧæœ‰æ•ˆīŧŒéģ˜čޤ圍加čŊŊčŋ‡ä¸€æŦĄåŽč‡Ē动įŧ“存到数捎å瓿Ĩ加åŋĢ下æŦĄåŠ čŊŊ速åēĻ -MANAGE_SETTING_CLEAR_CACHE_TITLE: '清įŠē文äģļåˆ—čĄ¨įŧ“存数捎åē“ åˇ˛å į”¨:' -MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE: '削äŊ™å¯į”¨:' -MANAGE_SETTING_CLEAR_CACHE_TIPS: 清įŠē后下æŦĄčŋ›å…Ĩæ–°į›ŽåŊ•æ—ļ将äŧšé‡æ–°åŠ čŊŊ文äģļåˆ—čĄ¨ -MANAGE_SETTING_CLEAR_CACHE_PROMPT: įĄŽåŽščĻæ¸…įŠē文äģļåˆ—čĄ¨įŧ“存数捎åē“吗? -MANAGE_SETTING_CLEAR_CACHE_BUTTON: 清įŠē -MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE: å›žį‰‡æ˜žį¤ēä¸ēåŽŸå›žč€Œéžéģ˜čŽ¤æ–‡äģļæ ŧåŧå›žæ ‡(需čĻå­˜å‚¨æĄļ可å…Ŧåŧ€čŽŋ问) -MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE: äŊŋᔍéĸ„į­žåURLéĸ„č§ˆå›žį‰‡ -MANAGE_SETTING_ISSHOWLIST_TITLE: 文äģļåˆ—čĄ¨éģ˜čŽ¤æ˜žį¤ēæ–šåŧ -MANAGE_SETTING_ISSHOWLIST_ON: åˆ—čĄ¨ -MANAGE_SETTING_ISSHOWLIST_OFF: åĄį‰‡ -MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE: ä¸ēč‡Ē厚䚉域名åŧ€å¯åŧēåˆļHTTPS -MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS: åŧ€å¯åŽ, 复åˆļ链æŽĨį­‰æ“äŊœå°†äŧšč‡Ē动ä¸ēč‡Ē厚䚉域名æˇģ加https前įŧ€ -MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE: 上äŧ æ—ļäŋį•™į›ŽåŊ•į쓿ž„ -MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS: å…ŗé—­åŽäŧšå°†æ‰€æœ‰æ–‡äģļåą•åŧ€åˆ°æŒ‡åŽšį›ŽåŊ•下 -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A: 下čŊŊ -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B: 文äģļ -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C: æ—ļäŋį•™į›ŽåŊ•į쓿ž„ -MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D: 文äģļ多 -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS: åŧ€å¯åŽīŧŒä¸‹čŊŊæ—ļäŧšäŋį•™åŽŸå§‹į›ŽåŊ•į쓿ž„ -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE: 最大同æ—ļ下čŊŊ文äģļæ•°(1-9999) -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS: č…žčŽ¯äē‘į”ąäēŽåŽįĢ¯åŽžįŽ°ä¸åŒīŧŒč¯Ĩ莞įŊŽä¸į”Ÿæ•ˆ -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS: č¯ˇčž“å…Ĩ最大同æ—ļ下čŊŊ文äģļæ•° -MANAGE_SETTING_ISIGNORECASE_TITLE: 文äģ￐œį´ĸæ—ļīŧŒæ˜¯åĻåŋŊį•Ĩ大小写 -MANAGE_SETTING_ISIGNORECASE_TIPS: åŧ€å¯åŽīŧŒæœį´ĸæ—ļäŧšåŋŊį•Ĩ大小写 -MANAGE_SETTING_TIMESTAMPRENAME_TITLE: 上äŧ æ–‡äģļæ—ļé—´æˆŗé‡å‘Ŋ名--(äŧ˜å…ˆįē§æœ€é̘) -MANAGE_SETTING_TIMESTAMPRENAME_TIPS: åŧ€å¯åŽīŧŒä¸Šäŧ æ–‡äģļæ—ļäŧšč‡Ē动重å‘Ŋ名ä¸ēæ—ļé—´æˆŗ -MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE: 上äŧ æ–‡äģļ随æœē字įŦĻ串重å‘Ŋ名--(äŧ˜å…ˆįē§ä¸­) -MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS: 随æœē字įŦĻ串é•ŋåēĻä¸ē20 -MANAGE_SETTING_CUSTOMRENAME_TITLE: 上äŧ æ–‡äģļč‡Ē厚䚉重å‘Ŋ名--(äŧ˜å…ˆįē§æœ€äŊŽ) -MANAGE_SETTING_CUSTOMRENAME_TIPS: 蝎åĄĢ写č‡Ē厚䚉重å‘Ŋ名æ ŧåŧ -MANAGE_SETTING_CUSTOM_PATTERN_TITLE: č‡Ē厚䚉重å‘Ŋ名æ ŧåŧīŧŒå äŊįŦĻč¯ˇå‚č€ƒä¸‹čĄ¨īŧŒå¯č‡Ēį”ąįģ„合 -MANAGE_SETTING_CUSTOM_PATTERN_TIPS: 蝎åĄĢ写č‡Ē厚䚉重å‘Ŋ名æ ŧåŧ -MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE: 占äŊįŦĻ -MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS: 描čŋ° -MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE: éĸ„į­žåURLčŋ‡æœŸæ—ļ间(单äŊ:į§’) -MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS: 蝎åĄĢ写éĸ„į­žåURLčŋ‡æœŸæ—ļ间 -MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE: 选拊éģ˜čŽ¤å¤åˆļįš„é“žæŽĨæ ŧåŧ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN: Markdown -MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK: Markdown(å¸Ļ链æŽĨ) -MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL: 原始铞æŽĨ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML: HTMLæ ŧåŧ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE: BBCodeæ ŧåŧ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM: č‡Ē厚䚉æ ŧåŧ -MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE: č‡Ē厚䚉铞æŽĨæ ŧåŧ($urlä¸ē链æŽĨ,$fileNameä¸ē文äģļ名) -MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS: 蝎åĄĢ写č‡Ē厚䚉铞æŽĨæ ŧåŧ -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE: 选拊下čŊŊį›ŽåŊ• -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS: įŗģįģŸéģ˜čޤ䏋čŊŊį›ŽåŊ• -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: é€‰æ‹Šį›ŽåŊ• -MANAGE_SETTING_COPY_MESSAGE: åˇ˛å¤åˆļ -MANAGE_SETTING_CLEAR_CACHE_SUCCESS: 清除成功 -MANAGE_SETTING_CLEAR_CACHE_FAILED: æ¸…é™¤å¤ąč´Ĩ -MANAGE_SETTING_ISENCODEURL_TITLE: 复åˆļ链æŽĨæ—ļčŋ›čĄŒURLįŧ–᠁ -MANAGE_SETTING_ISENCODEURL_TIPS: æ šæŽåšŗå°é€‰æ‹Šæ˜¯åĻåŧ€å¯ -MANAGE_NO_DATA: 暂无数捎 -MANAGE_MAIN_PAGE_NEW_BUCKET: 新åģē存储æĄļ -MANAGE_MAIN_PAGE_BACK_TO_HOME: čŋ”回éĻ–éĄĩ -MANAGE_MAIN_PAGE_SWITCH_PICBED: 切æĸ回åēŠ -MANAGE_MAIN_PAGE_SETTING: 莞įŊŽ -MANAGE_MAIN_PAGE_SUBMIT: 提äē¤ -MANAGE_MAIN_PAGE_TIPS: 提į¤ē -MANAGE_MAIN_PAGE_TIPS_SUCCESS: 创åģ翈åŠŸ -MANAGE_MAIN_PAGE_TIPS_FAILED: 创åģēå¤ąč´Ĩ -MANAGE_MAIN_PAGE_BUCKET: 存储æĄļ -MANAGE_MAIN_PAGE_GALLERY: į›¸å†Œ -MANAGE_MAIN_PAGE_REPOSITORY: äģ“åē“ -MANAGE_CONSTANT_BASE_RULE: č¯ˇčž“å…Ĩ -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A: č¯ˇčž“å…Ĩ每éĄĩ昞į¤ē数量 -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B: 每éĄĩ昞į¤ē数量åŋ…éĄģä¸ē数字 -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C: 每éĄĩ昞į¤ē数量åŋ…éĄģ在20-1000之间 -MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A: č¯ˇčž“å…ĨåˆĢ名, č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B: åˆĢ名åĒčƒŊ包åĢä¸­æ–‡ã€č‹ąæ–‡ã€æ•°å­—ã€ä¸‹åˆ’įēŋ和中划įēŋ -MANAGE_CONSTANT_ALIAS_TOOLTIP: åˆĢ名åĒčƒŊ包åĢä¸­æ–‡ã€č‹ąæ–‡ã€æ•°å­—ã€ä¸‹åˆ’įēŋ和中划įēŋ -MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP: 每éĄĩ昞į¤ē数量åŋ…éĄģ在20-1000之间 -MANAGE_CONSTANT_PAGING_TOOLTIP: å…ŗé—­åˆ†éĄĩæ—ļīŧŒį›ŽåŊ•åˆ—čĄ¨å°†äŊŋį”¨æ•°æŽåē“įŧ“å­˜äģĨäŧ˜åŒ–性čƒŊ -MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒåĻ‚īŧšbucket1,bucket2,bucket3īŧŒå’Œčĩˇå§‹į›ŽåŊ•éĄēåēä¸€ä¸€å¯šåē” -MANAGE_CONSTANT_BASE_DIR_TOOLTIP: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒåĻ‚īŧš/dir1,/dir2,/dir3, 和存储æĄļéĄēåēä¸€ä¸€å¯šåē” -MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP: åŧ€å¯æ—ļīŧŒå°†č‡ĒåŠ¨čŽˇå–å­˜å‚¨æĄļįģ‘åŽšįš„åŸŸåīŧŒå…ŗé—­æ—ļ可手动åĄĢ写 -MANAGE_CONSTANT_SMMS_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_SMMS_TOKEN_DESC: Token-åŋ…需 -MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER: 蝎åĄĢ写Token -MANAGE_CONSTANT_SMMS_PAGING_DESC: 是åĻåŧ€å¯åˆ†éĄĩ -MANAGE_CONSTANT_SMMS_EXPLAIN: 大陆地åŒē蝎čŽŋé—Žå¤‡į”¨åŸŸåhttps://smms.app, 蝎å‹ŋ大扚量上äŧ å›žį‰‡īŧŒåĻ则APIæŽĨåŖäŧščĸĢ限åˆļ -MANAGE_CONSTANT_SMMS_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_QINIU_NAME: ä¸ƒį‰›äē‘ -MANAGE_CONSTANT_QINIU_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC: accessKey-åŋ…需 -MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER: 蝎åĄĢ写accessKey -MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC: secretKey-åŋ…需 -MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER: 蝎åĄĢ写secretKey -MANAGE_CONSTANT_QINIU_BUCKET_DESC: įŠē间名-可选 -MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒäž‹åĻ‚īŧšbucket1,bucket2 -MANAGE_CONSTANT_QINIU_BASE_DIR_DESC: čĩˇå§‹į›ŽåŊ•-可选 -MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒäž‹åĻ‚īŧš/dir1,/dir2 -MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC: 是åĻč‡ĒåŠ¨čŽˇå–įģ‘厚域名 -MANAGE_CONSTANT_QINIU_PAGING_DESC: 是åĻåŧ€å¯åˆ†éĄĩ -MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC: 每éĄĩ昞į¤ē数量 -MANAGE_CONSTANT_QINIU_EXPLAIN: įŠē间名和čĩˇå§‹į›ŽåŊ•配įŊŽæ—ļ可通čŋ‡č‹ąæ–‡é€—åˇåˆ†éš”čŽžįŊŽīŧŒéĄēåēåŋ…éĄģ一致īŧŒé€—åˇé—´į•™įŠē或įŧēå¤ąéĄšäŊŋᔍéģ˜čޤå€ŧ -MANAGE_CONSTANT_QINIU_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_GITHUB_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_GITHUB_TOKEN_DESC: Token-åŋ…需 -MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER: 蝎åĄĢ写Token -MANAGE_CONSTANT_GITHUB_TOKEN_TIPS: č¯ˇæäž›å…ˇæœ‰åŽŒæ•´repoæƒé™įš„tokenīŧŒåĻ则部分功čƒŊ可čƒŊæ— æŗ•äŊŋᔍ -MANAGE_CONSTANT_GITHUB_USER_DESC: į”¨æˆˇå-åŋ…需 -MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER: 蝎åĄĢå†™į”¨æˆˇå -MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE: į”¨æˆˇå -MANAGE_CONSTANT_GITHUB_PROXY_DESC: äģŖį†åœ°å€-可选 -MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER: 例åĻ‚īŧšhttp://127.0.0.1:1080 -MANAGE_CONSTANT_GITHUB_PROXY_TIPS: åĻ‚æžœčŽŋ问速åēĻ螃æ…ĸīŧŒå¯äģĨå°č¯•é…įŊŽäģŖį† -MANAGE_CONSTANT_GITHUB_PAGING_DESC: 是åĻåŧ€å¯åˆ†éĄĩ -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC: CDN加速域名-可选 -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER: 支持äŊŋᔍ{username}、{repo}、{branch}和{path}äŊœä¸ēæ›ŋæĸ占äŊįŦĻīŧŒį”¨äēŽé€‚配不同äģ“åē“和分支 -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS: '例åĻ‚: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}' -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A: åŠ é€ŸåŸŸåč¯ˇäģĨhttp://或https://åŧ€å¤´ -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B: åŠ é€ŸåŸŸåä¸­įš„å¤§æ‹Ŧåˇåŋ…éĄģ成寚å‡ēįŽ° -MANAGE_CONSTANT_GITHUB_EXPLAIN: APIč°ƒį”¨æœ‰æ¯å°æ—ļ上限īŧŒæ­¤å¤–不支持上äŧ čļ…čŋ‡100Mįš„æ–‡äģļ -MANAGE_CONSTANT_GITHUB_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_ALIYUN_NAME: é˜ŋ里äē‘ -MANAGE_CONSTANT_ALIYUN_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC: accessKeyId-åŋ…需 -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC: accessKeySecret-åŋ…需 -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER: 蝎åĄĢ写accessKeySecret -MANAGE_CONSTANT_ALIYUN_BUCKET_DESC: 存储æĄļ名-可选 -MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒäž‹åĻ‚īŧšbucket1,bucket2 -MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC: čĩˇå§‹į›ŽåŊ•-可选 -MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒäž‹åĻ‚īŧš/dir1,/dir2 -MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC: 是åĻč‡ĒåŠ¨čŽˇå–įģ‘厚域名 -MANAGE_CONSTANT_ALIYUN_PAGING_DESC: 是åĻåŧ€å¯åˆ†éĄĩ -MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC: 每éĄĩ昞į¤ē数量 -MANAGE_CONSTANT_ALIYUN_EXPLAIN: 存储æĄļ名和čĩˇå§‹į›ŽåŊ•配įŊŽæ—ļ可通čŋ‡č‹ąæ–‡é€—åˇåˆ†éš”ä¸åŒå­˜å‚¨æĄļįš„čŽžįŊŽīŧŒéĄēåēåŋ…éĄģ一致īŧŒé€—åˇé—´į•™įŠē或įŧēå¤ąéĄšäŊŋᔍéģ˜čޤå€ŧ -MANAGE_CONSTANT_ALIYUN_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_TENCENT_NAME: č…žčŽ¯äē‘ -MANAGE_CONSTANT_TENCENT_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC: secretId-åŋ…需 -MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER: 蝎åĄĢ写secretId -MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC: secretKey-åŋ…需 -MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER: 蝎åĄĢ写secretKey -MANAGE_CONSTANT_TENCENT_APPID_DESC: appId-åŋ…需 -MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER: 蝎åĄĢ写appId -MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP: 例åĻ‚īŧš1250000000 -MANAGE_CONSTANT_TENCENT_BUCKET_DESC: 存储æĄļ名-可选(æŗ¨æ„åŒ…åĢAppId) -MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒäž‹åĻ‚īŧšbucket1-1250000000,bucket2-1250000000 -MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC: čĩˇå§‹į›ŽåŊ•-可选 -MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒäž‹åĻ‚īŧš/dir1,/dir2 -MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC: 是åĻč‡ĒåŠ¨čŽˇå–įģ‘厚域名 -MANAGE_CONSTANT_TENCENT_PAGING_DESC: 是åĻåŧ€å¯åˆ†éĄĩ -MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC: 每éĄĩ昞į¤ē数量 -MANAGE_CONSTANT_TENCENT_EXPLAIN: 存储æĄļ名和čĩˇå§‹į›ŽåŊ•配įŊŽæ—ļ可通čŋ‡č‹ąæ–‡é€—åˇåˆ†éš”ä¸åŒå­˜å‚¨æĄļįš„čŽžįŊŽīŧŒéĄēåēåŋ…éĄģ一致īŧŒé€—åˇé—´į•™įŠē或įŧēå¤ąéĄšäŊŋᔍéģ˜čޤå€ŧ -MANAGE_CONSTANT_TENCENT_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_UPYUN_NAME: 又拍äē‘ -MANAGE_CONSTANT_UPYUN_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_UPYUN_BUCKET_DESC: æœåŠĄå-åŋ…需 -MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER: 寚åē”å…ļåŽƒå¯ščąĄå­˜å‚¨įš„å­˜å‚¨æĄļ名 -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC: 操äŊœå‘˜å-åŋ…需 -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER: æŽ¨čäŊŋį”¨å…ˇæœ‰č¯ģ取、写å…Ĩå’Œåˆ é™¤åŽŒæ•´æƒé™įš„æ“äŊœå‘˜ -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE: 操äŊœå‘˜ -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC: 操äŊœå‘˜å¯†į -åŋ…需 -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER: 蝎åĄĢ写坆᠁ -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE: 操äŊœå‘˜å¯†į  -MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC: čĩˇå§‹į›ŽåŊ•-可选 -MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER: č¯ģ取文äģļæ—ļįš„åˆå§‹į›ŽåŊ• -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC: 加速域名-åŋ…需 -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER: 蝎äģĨhttp://或https://åŧ€å¤´ -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A: 加速域名不čƒŊä¸ēįŠē -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B: č‡ĒåŽšäš‰åŸŸåč¯ˇäģĨhttp://或https://åŧ€å¤´ -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC: é˜˛į›—é“žå¯†é’Ĩ-可选 -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER: 蝎åĄĢå†™é˜˛į›—é“žå¯†é’Ĩ -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP: åĻ‚æžœä¸åĄĢ写īŧŒéģ˜čŽ¤ä¸å¯į”¨é˜˛į›—é“ž -MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC: é˜˛į›—é“žčŋ‡æœŸæ—ļ间(į§’)-可选 -MANAGE_CONSTANT_UPYUN_PAGING: 是åĻåŧ€å¯åˆ†éĄĩ -MANAGE_CONSTANT_UPYUN_ITEMS_PAGE: 每éĄĩ昞į¤ē数量 -MANAGE_CONSTANT_UPYUN_EXPLAIN: 又拍äē‘回åēŠåŠĄåŋ…åĄĢ写加速域名īŧŒåĻåˆ™æ— æŗ•æ­Ŗå¸¸äŊŋᔍ -MANAGE_CONSTANT_UPYUN_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_IMGUR_NAME: Imgur -MANAGE_CONSTANT_IMGUR_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_IMGUR_USERNAME_DESC: imgurį”¨æˆˇå-åŋ…需 -MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER: 蝎åĄĢ写imgurį”¨æˆˇå -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC: access token-åŋ…需 -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER: 蝎åĄĢ写access token -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP: 不是clientID,č¯ˇå‚č€ƒé…įŊŽæ•™į¨‹ -MANAGE_CONSTANT_IMGUR_PROXY_DESC: äģŖį†-可选 -MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER: 例åĻ‚īŧšhttp://127.0.0.1:1080 -MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP: 大陆地åŒē蝎äŊŋᔍäģŖį†īŧŒåĻåˆ™æ— æŗ•æ­Ŗå¸¸äŊŋᔍ -MANAGE_CONSTANT_IMGUR_EXPLAIN: 大陆地åŒē蝎äŊŋᔍäģŖį†īŧŒAPIč°ƒį”¨å­˜åœ¨é™åˆļīŧŒč¯ˇæŗ¨æ„äŊŋᔍéĸ‘įŽ‡ -MANAGE_CONSTANT_IMGUR_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_S3_NAME: S3å…ŧ厚äē‘ -MANAGE_CONSTANT_S3_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC: accessKeyId-åŋ…需 -MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER: 蝎åĄĢ写accessKeyId -MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC: secretAccessKey-åŋ…需 -MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER: 蝎åĄĢ写secretAccessKey -MANAGE_CONSTANT_S3_ENDPOINT_DESC: endpoint-可选 -MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER: 例åĻ‚īŧšs3.us-east-1.amazonaws.com -MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP: åĻ‚æžœä¸åĄĢ写īŧŒéģ˜čޤčŽŋ问 AWS S3īŧŒč¯ˇæäž›æ šAPI endpoint -MANAGE_CONSTANT_S3_SSLENABLED_DESC: äŊŋᔍHTTPSčŋžæŽĨ -MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP: åĻ‚æžœæ‚¨įš„åšŗå°ä¸æ”¯æŒīŧŒč¯ˇå…ŗé—­č¯Ĩ选项 -MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC: 吝ᔍ S3 Path style -MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP: 例åĻ‚äŊŋᔍ minio æ—ļ需čρ吝ᔍ -MANAGE_CONSTANT_S3_PROXY_DESC: äģŖį†-可选 -MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER: 例åĻ‚īŧšhttp://127.0.0.1:1080 -MANAGE_CONSTANT_S3_PROXY_TOOLTIP: åĻ‚æžœéƒ¨åˆ†åšŗå°å¤§é™†åœ°åŒēæ— æŗ•čŽŋ问īŧŒč¯ˇäŊŋᔍäģŖį† -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC: 上äŧ æ–‡äģļįš„æƒé™ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE: į§æœ‰ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ: å…Ŧå…ąč¯ģ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE: å…Ŧå…ąč¯ģ写 -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ: 授权č¯ģ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ: æĄļæ‰€æœ‰č€…č¯ģ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL: æĄļæ‰€æœ‰č€…åŽŒå…¨æŽ§åˆļ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ: AWSæ‰§čĄŒč¯ģ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP: 上äŧ æ–‡äģļįš„æƒé™īŧŒå¯é€‰å€ŧīŧšprivate、public-read、public-read-write、authenticated-read、bucket-owner-read、bucket-owner-full-control、aws-exec-read -MANAGE_CONSTANT_S3_BUCKET_DESC: 存储æĄļ名-可选 -MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒäž‹åĻ‚īŧšbucket1,bucket2 -MANAGE_CONSTANT_S3_BASE_DIR_DESC: čĩˇå§‹į›ŽåŊ•-可选 -MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER: č‹ąæ–‡é€—åˇåˆ†éš”īŧŒäž‹åĻ‚īŧš/dir1,/dir2 -MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC: 是åĻäŊŋᔍDoge Cloud -MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP: åŧ€å¯åŽīŧŒå°†äŊŋᔍDoge Cloudįš„API -MANAGE_CONSTANT_S3_PAGING_DESC: 是åĻåŧ€å¯åˆ†éĄĩ -MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC: 每éĄĩ昞į¤ē数量 -MANAGE_CONSTANT_S3_EXPLAIN: 存储æĄļ名和čĩˇå§‹į›ŽåŊ•配įŊŽæ—ļ可通čŋ‡č‹ąæ–‡é€—åˇåˆ†éš”ä¸åŒå­˜å‚¨æĄļįš„čŽžįŊŽīŧŒéĄēåēåŋ…éĄģ一致īŧŒé€—åˇé—´į•™įŠē或įŧēå¤ąéĄšäŊŋᔍéģ˜čޤå€ŧ -MANAGE_CONSTANT_S3_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_WEBDAV_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_WEBDAV_HOST_DESC: 地址-åŋ…需 -MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER: 例åĻ‚īŧšhttps://example.com/dav -MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP: 蝎åĄĢå†™åŽŒæ•´įš„WebDAV地址 -MANAGE_CONSTANT_WEBDAV_USERNAME_DESC: į”¨æˆˇå-åŋ…需 -MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER: 蝎åĄĢå†™į”¨æˆˇå -MANAGE_CONSTANT_WEBDAV_BUCKET_DESC: į‰šæŽŠé…įŊŽ -MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER: 例åĻ‚īŧšbucket1 -MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP: 此处不可äŋŽæ”šīŧŒäģ…ä¸ēčŊ¯äģļå…ŧåŽšæ€§č€ƒč™‘ -MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC: 坆᠁-åŋ…需 -MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER: 蝎åĄĢ写坆᠁ -MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC: čĩˇå§‹į›ŽåŊ•-可选 -MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER: 例åĻ‚īŧš/dir1 -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC: č‡Ē厚䚉域名-可选 -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER: 例åĻ‚īŧšhttps://example.com -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP: åĻ‚æžœæ‚¨įš„WebDAVæœåŠĄå™¨æ”¯æŒč‡Ē厚䚉域名īŧŒč¯ˇåĄĢ写 -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE: č‡ĒåŽšäš‰åŸŸåč¯ˇäģĨhttp://或https://åŧ€å¤´ -MANAGE_CONSTANT_WEBDAV_WEB_PATH: įŊ‘址æ‹ŧæŽĨᔍčĩˇå§‹čˇ¯åž„ -MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER: 例åĻ‚īŧštest/ttc -MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP: ᔍäēŽæ‹ŧæŽĨįŊ‘址 -MANAGE_CONSTANT_WEBDAV_PROXY_DESC: äģŖį†-可选 -MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER: 例åĻ‚īŧšhttp://127.0.0.1:1080 -MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP: åĻ‚æžœéœ€čĻį‰šæŽŠįŊ‘įģœįޝåĸƒæ‰čƒŊčŽŋ问īŧŒč¯ˇäŊŋᔍäģŖį† -MANAGE_CONSTANT_WEBDAV_SSL_DESC: äŊŋᔍHTTPSčŋžæŽĨ -MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP: 栚捎WebDAVæœåŠĄå™¨įš„é…įŊŽīŧŒåĻ‚æžœæ‚¨įš„æœåŠĄå™¨ä¸æ”¯æŒHTTPSīŧŒč¯ˇå…ŗé—­č¯Ĩ选项 -MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC: čŽ¤č¯įąģ型 -MANAGE_CONSTANT_WEBDAV_EXPLAIN: WebDAV配įŊŽ -MANAGE_CONSTANT_WEBDAV_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_LOCAL_NAME: æœŦ地存储 -MANAGE_CONSTANT_LOCAL_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC: čĩˇå§‹į›ŽåŊ•-åŋ…需 -MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER: 蝎åĄĢ写čĩˇå§‹į›ŽåŊ• -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC: č‡Ē厚䚉域名-可选 -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER: 例åĻ‚īŧšhttps://example.com -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP: åĻ‚æžœæ‚¨įš„æœŦ地存储支持č‡Ē厚䚉域名īŧŒč¯ˇåĄĢ写 -MANAGE_CONSTANT_LOCAL_WEB_PATH: įŊ‘址æ‹ŧæŽĨᔍčĩˇå§‹čˇ¯åž„ -MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER: 例åĻ‚īŧštest/ttc -MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP: ᔍäēŽæ‹ŧæŽĨįŊ‘址 -MANAGE_CONSTANT_LOCAL_EXPLAIN: æœŦ地存储配įŊŽ -MANAGE_CONSTANT_LOCAL_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE: čĩˇå§‹į›ŽåŊ•不čƒŊä¸ēįŠē -MANAGE_CONSTANT_LOCAL_BUCKET_DESC: į‰šæŽŠé…įŊŽ -MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: 例åĻ‚īŧšbucket1 -MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: 此处不可äŋŽæ”šīŧŒäģ…ä¸ēčŊ¯äģļå…ŧåŽšæ€§č€ƒč™‘ -MANAGE_CONSTANT_SFTP_NAME: SFTP -MANAGE_CONSTANT_SFTP_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: č¯Ĩ配įŊŽįš„å”¯ä¸€æ ‡č¯† -MANAGE_CONSTANT_SFTP_HOST_DESC: SSH地址-åŋ…需 -MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: 例åĻ‚īŧš233.233.233.233 -MANAGE_CONSTANT_SFTP_PORT_DESC: SSHįĢ¯åŖ-åŋ…需 -MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: 例åĻ‚īŧš22 -MANAGE_CONSTANT_SFTP_USERNAME_DESC: į”¨æˆˇå -MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: 蝎åĄĢå†™į”¨æˆˇå -MANAGE_CONSTANT_SFTP_PASSWORD_DESC: 坆᠁ -MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: 蝎åĄĢ写坆᠁ -MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: ᧁé’Ĩ地址 -MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: 蝎åĄĢ写ᧁé’Ĩ地址 -MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: ᧁé’Ĩ坆᠁ -MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: 蝎åĄĢ写ᧁé’Ĩ坆᠁ -MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: čĩˇå§‹į›ŽåŊ•-可选 -MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: 例åĻ‚īŧš/dir1 -MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: č‡Ē厚䚉域名-可选 -MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: 例åĻ‚īŧšhttps://example.com -MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: åĻ‚æžœæ‚¨įš„å¯šåē”čˇ¯åž„æ”¯æŒåŸŸåčŽŋ问īŧŒč¯ˇåĄĢ写 -MANAGE_CONSTANT_SFTP_WEB_PATH: įŊ‘址æ‹ŧæŽĨᔍčĩˇå§‹čˇ¯åž„ -MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: 例åĻ‚īŧštest/ttc -MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: ᔍäēŽæ‹ŧæŽĨįŊ‘址 -MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: 文äģļæƒé™ -MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: 例åĻ‚īŧš0644 -MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: į›ŽåŊ•权限 -MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: 例åĻ‚īŧš0755 -MANAGE_CONSTANT_SFTP_EXPLAIN: SFTP配įŊŽ -MANAGE_CONSTANT_SFTP_REFER_TEXT: '配įŊŽæ•™į¨‹č¯ˇå‚č€ƒ: ' -MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: čĩˇå§‹į›ŽåŊ•不čƒŊä¸ēįŠē -MANAGE_CONSTANT_SFTP_BUCKET_DESC: į‰šæŽŠé…įŊŽ -MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: 例åĻ‚īŧšbucket1 -MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: 此处不可äŋŽæ”šīŧŒäģ…ä¸ēčŊ¯äģļå…ŧåŽšæ€§č€ƒč™‘ -MANAGE_LOGIN_PAGE_PANE_NAME: 厞äŋå­˜é…įŊŽ -MANAGE_LOGIN_PAGE_PANE_KEY_NAME: 配įŊŽéĄš -MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: å€ŧ -MANAGE_LOGIN_PAGE_PANE_ENTER: čŋ›å…Ĩ -MANAGE_LOGIN_PAGE_PANE_DELETE: 删除 -MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER: č¯ˇé€‰æ‹Š -MANAGE_LOGIN_PAGE_PANE_IMPORT: å¯ŧå…Ĩ -MANAGE_LOGIN_PAGE_PANE_SAVE: äŋå­˜ -MANAGE_LOGIN_PAGE_PANE_RESET: 重įŊŽ -MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE: åˇ˛æœ‰é…įŊŽīŧŒå•å‡ģ可复åˆļ寚åē”单元æ ŧ数捎 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A: 蝎åĄĢ写 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE: åˆĢ名åĒčƒŊ包åĢä¸­æ–‡ã€č‹ąæ–‡ã€æ•°å­—ã€ä¸‹åˆ’įēŋ和中划įēŋ -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE: 每éĄĩ数量åŋ…éĄģ在20-1000之间 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE: č‡ĒåŽšäš‰åŸŸåč¯ˇäģĨhttp://或https://åŧ€å¤´ -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME: 通įŸĨ -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE: 厞čφᛖåˆĢ名 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B: 厞äŋå­˜åˆĢ名 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C: åˇ˛åˆ é™¤åˆĢ名 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D: 删除åˆĢ名ä¸ē -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E: įš„é…įŊŽå¤ąč´Ĩ -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS: åˇ˛å¤åˆļ -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE: įĄŽåŽščĻåˆ é™¤é…įŊŽäšˆ? -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP: 提į¤ē -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM: įĄŽåŽš -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL: 取æļˆ -MANAGE_BUCKET_PAGE_LOADING_TEXT: 加čŊŊ文äģļ中... -MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER: č¯ˇé€‰æ‹Šč‡Ē厚䚉域名 -MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER: č¯ˇčž“å…Ĩč‡Ē厚䚉域名 -MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP: 文äģļ上äŧ (支持多选) -MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP: äģŽURL上äŧ  -MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP: 创åģēæ–‡äģļ多 -MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP: 下čŊŊéĄĩéĸ -MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP: 扚量重å‘Ŋ名 -MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP: 扚量复åˆļURL -MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP: 复åˆļ文äģļäŋĄæ¯ -MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP: åŧēåˆļåˆˇæ–°æ–‡äģļåˆ—čĄ¨ -MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER: 搜į´ĸ文äģļ -MANAGE_BUCKET_PAGE_ROOT_FOLDER: æ šį›ŽåŊ• -MANAGE_BUCKET_PAGE_FILE_NUMBER: '文äģļæ•°: ' -MANAGE_BUCKET_PAGE_FILE_SIZE: 'æ€ģ大小: ' -MANAGE_BUCKET_PAGE_SELECT_ALL: 全选 -MANAGE_BUCKET_PAGE_SELECT_NONE: 取æļˆ -MANAGE_BUCKET_PAGE_SELECT_INVERT: 反选 -MANAGE_BUCKET_DOWNLOAD_BTN: 下čŊŊ -MANAGE_BUCKET_DELETE_BTN: 删除 -MANAGE_BUCKET_SORT_TITLE: 排åē -MANAGE_BUCKET_SORT_NAME: 文äģļ名 -MANAGE_BUCKET_SORT_SIZE: 大小 -MANAGE_BUCKET_SORT_EXT: įąģ型 -MANAGE_BUCKET_SORT_TIME: æ—ļ间 -MANAGE_BUCKET_SORT_CHECK: 选中įŠļ态 -MANAGE_BUCKET_SORT_INIT: 初始化 -MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: č¯ˇčž“å…ĨURLīŧŒæ”¯æŒå¤šä¸ĒURLīŧŒäģĨæĸčĄŒåˆ†éš” -MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: 取æļˆ -MANAGE_BUCKET_URL_FORMAT_MARKDOWN: Markdown -MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK: Markdown-link -MANAGE_BUCKET_URL_FORMAT_URL: Url -MANAGE_BUCKET_URL_FORMAT_HTML: Html -MANAGE_BUCKET_URL_FORMAT_BBCODE: BBCode -MANAGE_BUCKET_URL_FORMAT_CUSTOM: č‡Ē厚䚉 -MANAGE_BUCKET_URL_FORMAT_PRESIGN: éĸ„į­žåé“žæŽĨ -MANAGE_BUCKET_FILE_INFO_TITLE: 文äģļäŋĄæ¯ -MANAGE_BUCKET_FILE_INFO_COPY_TIPS: 复åˆļJSONæ ŧåŧäŋĄæ¯ -MANAGE_BUCKET_FILE_LIST_LOADING: 加čŊŊ中īŧŒį‚šå‡ģ取æļˆ -MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE: 准备下čŊŊ中īŧŒį‚šå‡ģ取æļˆ -MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE: äŋæŒį›ŽåŊ•į쓿ž„ -MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE: 不äŋæŒį›ŽåŊ•į쓿ž„ -MANAGE_BUCKET_UPLOAD_AREA_TITLE: 拖攞上äŧ æ”¯æŒé€’åŊ’上äŧ æ–‡äģļ多 -MANAGE_BUCKET_UPLOAD_AREA_TEXT: 或īŧšį‚šå‡ģ选拊文äģļ(不支持文äģļ多) -MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING: č¯ģ取文äģļ中 -MANAGE_BUCKET_UPLOAD_AREA_BTN: 上äŧ  -MANAGE_BUCKET_UPLOAD_AREA_CLEAR: 清įŠē -MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING: 上äŧ ä¸­ -MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK: 复åˆļ上äŧ äģģåŠĄäŋĄæ¯ -MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK: 清įŠēåˇ˛åŽŒæˆäģģåŠĄ -MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK: 清įŠē所有äģģåŠĄ -MANAGE_BUCKET_UPLOAD_AREA_SUCCESS: 成功 -MANAGE_BUCKET_UPLOAD_AREA_FAILED: å¤ąč´Ĩ -MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE: 下čŊŊéĄĩéĸ -MANAGE_BUCKET_DOWNLOADING: 下čŊŊ中 -MANAGE_BUCKET_DOWNLOAD_COPY_TASK: 复åˆļ下čŊŊäģģåŠĄäŋĄæ¯ -MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK: 清įŠēåˇ˛åŽŒæˆäģģåŠĄ -MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK: 清įŠē所有äģģåŠĄ -MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER: 打åŧ€ä¸‹čŊŊį›ŽåŊ• -MANAGE_BUCKET_DOWNLOAD_SUCCESS: 成功 -MANAGE_BUCKET_DOWNLOAD_FAILED: å¤ąč´Ĩ -MANAGE_BUCKET_MARKDOWN_PREVIEW: éĸ„č§ˆ -MANAGE_BUCKET_PLAY: 播攞 -MANAGE_BUCKET_RENAME_FILE: 文äģļ重å‘Ŋ名 -MANAGE_BUCKET_RENAME_FILE_INPUT_A: čŋ›čĄŒæ›ŋæĸæ—ļåŒšé…įš„å­—įŦĻä¸˛æˆ–jsæ­Ŗåˆ™čĄ¨čžžåŧ -MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS: æ­Ŗåˆ™čĄ¨čžžåŧč¯ˇį›´æŽĨ输å…ĨīŧŒä¸éœ€čρ加䏊/ -MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER: '例åĻ‚īŧš^\d{4}-\d{2}-\d{2} ' -MANAGE_BUCKET_RENAME_FILE_INPUT_B: 需čρæ›ŋæĸįš„å­—įŦĻ串īŧŒå¯äŊŋᔍč‡Ē厚䚉重å‘Ŋåč§„åˆ™ä¸­įš„å äŊįŦĻ -MANAGE_BUCKET_RENAME_FILE_TABLE_IID: č‡Ēåĸžæ•°å­— -MANAGE_BUCKET_RENAME_FILE_EXT: 是åĻåŒšé…æ‰Šåą•åčŋ›čĄŒæ›ŋæĸ -MANAGE_BUCKET_RENAME_FILE_EXT_TIPS: åĻ‚æžœå¸Œæœ›äŋŽæ”šæ‰Šåą•åīŧŒč¯ˇå‹žé€‰æ­¤éĄš -MANAGE_BUCKET_RENAME_FILE_EXT_YES: 是 -MANAGE_BUCKET_RENAME_FILE_EXT_NO: åĻ -MANAGE_BUCKET_RENAME_FILE_CANCEL: 取æļˆ -MANAGE_BUCKET_RENAME_FILE_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_COPY_SUCCESS: 复åˆļ成功 -MANAGE_BUCKET_START_LOADING_MESSAGE: åŧ€å§‹čŽˇå–æ–‡äģļ -MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL: čŽˇå–æ–‡äģļå†…åŽšå¤ąč´Ĩ -MANAGE_BUCKET_LAST_PAGE_TITLE: 提į¤ē -MANAGE_BUCKET_LAST_PAGE_MSG: 厞įģæ˜¯æœ€åŽä¸€éĄĩäē† -MANAGE_BUCKET_GET_LIST_FAIL_TITLE: 提į¤ē -MANAGE_BUCKET_GET_LIST_FAIL_MSG: čŽˇå–æ–‡äģļåˆ—čĄ¨å¤ąč´Ĩ -MANAGE_BUCKET_GET_LIST_FAIL_MSG2: æ­Ŗåœ¨åŽå°čŽˇå–æ–‡äģļåˆ—čĄ¨īŧŒč¯ˇä¸čĻåˆ‡æĸéĄĩéĸ -MANAGE_BUCKET_GET_LIST_FAIL_MSG3: æ­Ŗåœ¨åŠ čŊŊ文äģļåˆ—čĄ¨īŧŒč¯ˇį¨åŽå†č¯• -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE: įĄŽåŽščρ䏋čŊŊč¯Ĩ文äģļ多吗? -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP: 提į¤ē -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL: 取æļˆ -MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS: čŽˇå–ä¸‹čŊŊåˆ—čĄ¨æˆåŠŸ -MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL: čŽˇå–å¤ąč´Ĩ -MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL: åˇ˛å–æļˆ -MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE: č¯ˇčž“å…Ĩ文äģļå¤šåį§° -MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP: 新åģēæ–‡äģļ多 -MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL: 取æļˆ -MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG: 文äģļå¤šåį§°åĒčƒŊ包åĢä¸­æ–‡ã€č‹ąæ–‡ã€æ•°å­—ã€ä¸‹åˆ’įēŋ和斜杠 -MANAGE_BUCKET_CREATE_FOLDER_SUCCESS: 创åģ翈åŠŸ, č¯ˇåˆˇæ–° -MANAGE_BUCKET_CREATE_FOLDER_FAIL: 创åģēå¤ąč´Ĩ -MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ: č¯ˇčž“å…Ĩæœ‰æ•ˆįš„URL -MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE: 提į¤ē -MANAGE_BUCKET_UPLOAD_URL_NOT_MSG: åŧ€å§‹åŽå°ä¸‹čŊŊīŧŒæˆåŠŸåŽč‡Ē动上äŧ  -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG: č¯ˇčž“å…Ĩ匚配字įŦĻ串 -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2: æ˛Ąæœ‰åŒšé…åˆ°æ–‡äģļ -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3: æ˛Ąæœ‰éœ€čĻé‡å‘Ŋåįš„æ–‡äģļ -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A: æŖ€æĩ‹åˆ°æœ‰ -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B: ä¸Ē文äģļ重复īŧŒæ˜¯åĻįģ§įģ­ -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C: 提į¤ē -MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL: 取æļˆ -MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A: 重å‘Ŋ名成功 -MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B: å¤ąč´Ĩ -MANAGE_BUCKET_BATCH_RENAME_CANCEL: åˇ˛å–æļˆ -MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG: č¯ˇå…ˆé€‰æ‹Šæ–‡äģļ -MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A: åˇ˛å¤åˆļ -MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B: ä¸Ē文äģļäŋĄæ¯ -MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG: č¯ˇå…ˆé€‰æ‹Šæ–‡äģļ -MANAGE_BUCKET_BATCH_COPY_URL_MSG_A: åˇ˛å¤åˆļ -MANAGE_BUCKET_BATCH_COPY_URL_MSG_B: ä¸Ē链æŽĨ -MANAGE_BUCKET_CANCEL_LOADING_TITLE: 是åĻ停æ­ĸčŽˇå–æ–‡äģļåˆ—čĄ¨? -MANAGE_BUCKET_CANCEL_LOADING_MSG: 提į¤ē -MANAGE_BUCKET_CANCEL_LOADING_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_CANCEL_LOADING_CANCEL: 取æļˆ -MANAGE_BUCKET_CANCEL_LOADING_SUCCESS: 文äģļåˆ—čĄ¨čŽˇå–åˇ˛åœæ­ĸ -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE: 是åĻ停æ­ĸ下čŊŊ文äģļčŽˇå–? -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG: 提į¤ē -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL: 取æļˆ -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS: 下čŊŊ文äģļčŽˇå–åˇ˛åœæ­ĸ -MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE: 提į¤ē -MANAGE_BUCKET_GET_FILE_BS_NOT_MSG: čŽˇå–æ–‡äģļåˆ—čĄ¨æˆåŠŸ -MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2: 部分文äģļčŽˇå–å¤ąč´Ĩ -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A: 将永䚅删除 -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B: ä¸Ē文äģļīŧŒæ˜¯åĻįģ§įģ­? -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG: 提į¤ē -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL: 取æļˆ -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE: 提į¤ē -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG: åˆ é™¤å¤ąč´Ĩ MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: 删除成功 -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3: å¤ąč´Ĩ -MANAGE_BUCKET_BATCH_DELETE_CANCEL: åˇ˛å–æļˆåˆ é™¤ -MANAGE_BUCKET_DELETE_CONFIRM_TITLE: 将永䚅删除 -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER: 文äģļ多 -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A: 和č¯Ĩį›ŽåŊ•ä¸‹įš„æ‰€æœ‰æ–‡äģļ -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE: 文äģļ -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C: 是åĻįģ§įģ­ -MANAGE_BUCKET_DELETE_CONFIRM_MSG: 提į¤ē -MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_DELETE_CONFIRM_CANCEL: 取æļˆ -MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE: 提į¤ē -MANAGE_BUCKET_DELETE_ERROR_MSG_MSG: 删除文äģļ多可čƒŊ需čρ䏀æŽĩæ—ļ间īŧŒč¯ˇč€åŋƒį­‰åž… -MANAGE_BUCKET_DELETE_SUCCESS: 删除成功 -MANAGE_BUCKET_DELETE_FAIL: åˆ é™¤å¤ąč´Ĩ -MANAGE_BUCKET_DELETE_CANCEL: åˇ˛å–æļˆåˆ é™¤ -MANAGE_BUCKET_RENAME_INFO_MSG: 新文äģļ名与原文äģļåį›¸åŒīŧŒæ— éœ€é‡å‘Ŋ名 -MANAGE_BUCKET_RENAME_SUCCESS: 重å‘Ŋ名成功 -MANAGE_BUCKET_RENAME_ERROR_MSG: 重å‘Ŋåå¤ąč´Ĩ -MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME: 厌成æ—ļ间 -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS: įŠļ态 -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS: 成功 -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL: å¤ąč´Ĩ -MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH: 上äŧ čˇ¯åž„ -MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME: 厌成æ—ļ间 -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS: įŠļ态 -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS: 成功 -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL: å¤ąč´Ĩ -MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS: čŋ›åēĻ -MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS: čŋ›åēĻ -MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE: 大小 -MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM: 文äģļæ•° -MANAGE_BUCKET_FILE_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_FILE_COLUMN_COPY_URL: 复åˆļ链æŽĨ -MANAGE_BUCKET_FILE_COLUMN_INFO: 文äģļäŋĄæ¯ -MANAGE_BUCKET_FILE_COLUMN_FILESIZE: 大小 -MANAGE_BUCKET_FILE_COLUMN_TIME: äŋŽæ”šæ—ļ间 -MANAGE_NEW_BUCKET_TCYUN_NAME: č…žčŽ¯äē‘ -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC: Bucket名 -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER: č¯ˇčž“å…ĨBucket名 -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A: Bucket名不čƒŊä¸ēįŠē -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B: Bucketåį§°é•ŋåēĻ不čƒŊčļ…čŋ‡23ä¸Ē字įŦĻ -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C: Bucketåį§°åĒčƒŊ包åĢ小写字母、数字和中划įēŋīŧŒä¸”不čƒŊäģĨ中划įēŋåŧ€å¤´å’Œįģ“å°ž -MANAGE_NEW_BUCKET_TCYUN_REGION: åŒē域 -MANAGE_NEW_BUCKET_TCYUN_ACL_DESC: čŽŋ闎权限 -MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW: å…Ŧå…ąč¯ģ写 -MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R: å…Ŧå…ąč¯ģ -MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE: į§æœ‰ -MANAGE_NEW_BUCKET_ALIYUN_NAME: é˜ŋ里äē‘ -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC: Bucket名 -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER: č¯ˇčž“å…ĨBucket名 -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A: Bucket名不čƒŊä¸ēįŠē -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B: Bucketåį§°é•ŋåēĻ不čƒŊčļ…čŋ‡63ä¸Ē字įŦĻ -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C: Bucketåį§°åĒčƒŊ包åĢ小写字母、数字和中划įēŋīŧŒä¸”不čƒŊäģĨ中划įēŋåŧ€å¤´å’Œįģ“å°ž -MANAGE_NEW_BUCKET_ALIYUN_REGION: åŒē域 -MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC: čŽŋ闎权限 -MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW: å…Ŧå…ąč¯ģ写 -MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R: å…Ŧå…ąč¯ģ -MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE: į§æœ‰ -MANAGE_NEW_BUCKET_QINIU_NAME: ä¸ƒį‰›äē‘ -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC: Bucket名 -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER: č¯ˇčž“å…ĨBucket名 -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A: Bucket名不čƒŊä¸ēįŠē -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B: Bucketåį§°é•ŋåēĻ不čƒŊčļ…čŋ‡63ä¸Ē字įŦĻ -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C: Bucketåį§°åĒčƒŊ包åĢ小写字母、数字和中划įēŋīŧŒä¸”不čƒŊäģĨ中划įēŋåŧ€å¤´å’Œįģ“å°ž -MANAGE_NEW_BUCKET_QINIU_REGION: åŒē域 -MANAGE_NEW_BUCKET_QINIU_ACL_DESC: å…Ŧåŧ€čŽŋ问 -MANAGE_NEW_BUCKET_S3PLIST_NAME: S3å…ŧ厚äē‘ -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC: Bucket名 -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER: č¯ˇčž“å…ĨBucket名 -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A: Bucket名不čƒŊä¸ēįŠē -MANAGE_NEW_BUCKET_S3PLIST_REGION: åŒē域 -MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC: čŽŋ闎权限 -MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW: å…Ŧå…ąč¯ģ写 -MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R: å…Ŧå…ąč¯ģ -MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE: į§æœ‰ -MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ: 授权č¯ģ PLUGIN_INSTALL_FAILED: 插äģļåŽ‰čŖ…å¤ąč´Ĩ PLUGIN_UNINSTALL_FAILED: 插äģļ卸čŊŊå¤ąč´Ĩ -PLUGIN_UPDATE_SUCCEED: 插äģļæ›´æ–°æˆåŠŸ PLUGIN_UPDATE_FAILED: 插äģļæ›´æ–°å¤ąč´Ĩ PLUGIN_IMPORT_SUCCEED: 插äģļå¯ŧå…Ĩ成功 PLUGIN_IMPORT_FAILED: 插äģļå¯ŧå…Ĩå¤ąč´Ĩ diff --git a/resources/i18n/zh-TW.yml b/resources/i18n/zh-TW.yml index 387f7b5f..a5567a79 100644 --- a/resources/i18n/zh-TW.yml +++ b/resources/i18n/zh-TW.yml @@ -8,13 +8,10 @@ RELOAD_APP: é‡å•Ÿį¨‹åŧ UPLOAD_SUCCEED: ä¸Šå‚ŗæˆåŠŸ UPLOAD_FAILED: ä¸Šå‚ŗå¤ąæ•— UPLOAD_PROGRESS: ä¸Šå‚ŗé€˛åēĻ -OPERATION_SUCCEED: 操äŊœæˆåŠŸ -OPERATION_FAILED: 操äŊœå¤ąæ•— UPLOADING: æ­Ŗåœ¨ä¸Šå‚ŗ QUICK_UPLOAD: åŋĢé€Ÿä¸Šå‚ŗ UPLOAD_BY_CLIPBOARD: å‰Ēč˛ŧį°ŋåœ–į‰‡ä¸Šå‚ŗ SHOW_PICBED_QRCODE: į”ĸį”Ÿåœ–åēŠé…įŊŽ QRCODE -PICBED_QRCODE: 圖åēŠé…įŊŽ QRCODE ENABLE: å•Ÿį”¨ DISABLE: įρᔍ CONFIG_THING: č¨­åŽš${c} @@ -28,18 +25,6 @@ START_WATCH_CLIPBOARD: 開始ᛪčŊå‰Ēč˛ŧį°ŋ STOP_WATCH_CLIPBOARD: 停æ­ĸᛪčŊå‰Ēč˛ŧį°ŋ OPEN_TOOLBOX: 開啟äŋŽåžŠåˇĨå…ˇįŽą TOOLBOX: åˇĨå…ˇįŽą -TOOLBOX_TITLE: 排æŸĨ PicList åŸˇčĄŒæ™‚å•éĄŒ -TOOLBOX_SUB_TITLE: įĢ‹åŗæŽƒæäģĨä¸‹é …į›Ž,äŋŽåžŠäŊŋį”¨å•éĄŒ -TOOLBOX_CHECK_CONFIG_FILE_BROKEN: æĒĸæŸĨ配įŊŽæ–‡äģ￘¯åĻæåŖž -TOOLBOX_CHECK_GALLERY_FILE_BROKEN: æĒĸæŸĨį›¸å†Šæ–‡äģ￘¯åĻæåŖž -TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD: æĒĸæŸĨå‰Ēč˛ŧæŋåœ–į‰‡ä¸Šå‚ŗæ˜¯åĻå­˜åœ¨å•éĄŒ -TOOLBOX_CHECK_PROBLEM_WITH_PROXY: æĒĸæŸĨäģŖį†č¨­įŊŽæ˜¯åĻæ­Ŗå¸¸ -TOOLBOX_FIX_DONE_NEED_RELOAD: äŋŽåžŠåŽŒæˆ,需čĻé‡å•“į”Ÿæ•ˆ,是åĻ重啓 -TOOLBOX_CANT_AUTO_FIX: į„Ąæŗ•č‡Ē動äŋŽåžŠ,čĢ‹č‡Ē行äŋŽåžŠäģĨä¸‹å•éĄŒ -TOOLBOX_START_SCAN: 開始掃描 -TOOLBOX_RE_SCAN: 重新掃描 -TOOLBOX_START_FIX: 開始äŋŽåžŠ -TOOLBOX_SUCCESS_TIPS: 恭喜äŊ ,æ˛’æœ‰æĒĸæŸĨå‡ēå•éĄŒ TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: 配įŊŽæ–‡äģļčˇ¯åž‘æ˜¯īŧš${path} TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: 配įŊŽæ–‡äģļåˇ˛æåŖž TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: į›¸å†Šæ–‡äģļčˇ¯åž‘æ˜¯īŧš${path} @@ -51,865 +36,12 @@ 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} -MANUAL_PAGE_OPEN_TIP: čĢ‹é¸æ“‡æ‰“é–‹æ–šåŧ -MANUAL_PAGE_OPEN_TIP_TITLE: Tips -MANUAL_PAGE_OPEN_BY_BROWSER: į€čĻŊ器 -MANUAL_PAGE_OPEN_BY_BUILD_IN: 內įŊŽįĒ—åŖ -MANUAL_PAGE_OPEN_SETTING_TIP: 選擇打開手冊斚åŧ -UPLOAD_AREA: ä¸Šå‚ŗ -UPLOAD_VIEW_HINT: éģžæ“Šæ‰“開圖åēŠč¨­åޚ -MANAGE_PAGE: įŽĄį† -GALLERY: ᛏį°ŋ -REFRESH: åˆˇæ–° -MANUAL: 手冊 -PICBEDS_SETTINGS: 圖åēŠ -PICLIST_SETTINGS: č¨­åŽš -PLUGIN_SETTINGS: 插äģļ -CHOOSE_PICBED: 選擇圖åēŠ -COPY_PICBED_CONFIG: 複čŖŊ圖åēŠč¨­åޚ -COPY_PICBED_CONFIG_SUCCEED: 複čŖŊ圖åēŠč¨­åŽšæˆåŠŸ -INPUT: čŧ¸å…ĨæĄ† -CANCEL: 取æļˆ -CONFIRM: įĸē厚 -RESET_PICBED_CONFIG: 重įŊŽ -CHOOSE_SHOWED_PICBED: čĢ‹é¸æ“‡éĄ¯į¤ēįš„åœ–åēŠ -CHOOSE_PASTE_FORMAT: čĢ‹é¸æ“‡č˛ŧä¸Šįš„æ ŧåŧ -COPY: 複čŖŊ -DELETE: åˆĒ除 -SELECT_ALL: 全選 -CHANGE_IMAGE_URL: äŋŽæ”šåœ–ቇURL -CHANGE_IMAGE_URL_SUCCEED: äŋŽæ”šåœ–ቇURL成功 -COPY_LINK_SUCCEED: 複čŖŊ逪įĩæˆåŠŸ -BATCH_COPY_LINK_SUCCEED: æ‰šé‡č¤‡čŖŊ逪įĩæˆåŠŸ -FILE_RENAME: æĒ”æĄˆæ”šå -OPEN_FILE_PATH: 打開æĒ”æĄˆčˇ¯åž‘ -GALLERY_SYNC_DELETE: åˆĒ除雲į̝ -GALLERY_SYNC_DELETE_NOTICE_TITLE: 通įŸĨ GALLERY_SYNC_DELETE_NOTICE_SUCCEED: 雲į̝åˆĒ除成功 GALLERY_SYNC_DELETE_NOTICE_FAILED: 雲į̝åˆĒé™¤å¤ąæ•— -GALLERY_CHANGE_URL: äŋŽæ”š -GALLERY_SEARCH_FILENAME: 搜尋文äģļ名 -GALLERY_SEARCH_URL: 搜尋URL -GALLERY_MATCHED: ' 匚配到: ' -UPLOAD_PAGE_COPY_UPLOAD_API: 複čŖŊä¸Šå‚ŗAPI -UPLOAD_PAGE_IMAGE_PROCESS_NAME: åœ–į‰‡č™•į† -UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: åœ–į‰‡č™•į†č¨­įŊŽ -UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: čˇŗéŽč™•į†įš„æ–‡äģļæ“´åą•ååˆ—čĄ¨ -UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: 'čĢ‹åĄĢå¯Ģ需čĻčˇŗéŽč™•į†įš„æ–‡äģļæ“´åą•ååˆ—čĄ¨, äģĨč‹ąæ–‡é€—č™Ÿåˆ†éš”, åĻ‚: jpg,png,gif' -UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: 是åĻæˇģ加水印 -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: æ°´å°éĄžåž‹ -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: 文字 -UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE: åœ–į‰‡ -UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM: 是åĻå…¨åąæ°´å° -UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE: æ°´å°č§’åēĻ -UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT: 水印文字 -UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH: 水印字éĢ”čˇ¯åž‘īŧˆįŦŦ一æŦĄéœ€ä¸‹čŧ‰å­—éĢ”æ–‡äģļīŧ‰ -UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO: 水印占原圖比䞋 -UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR: æ°´å°éĄč‰˛īŧŒčĢ‹åžžå–č‰˛å™¨ä¸­é¸æ“‡ -UPLOAD_PAGE_IMAGE_PROCESS_WMPATH: æ°´å°åœ–į‰‡čˇ¯åž‘īŧˆį•™įŠēäŊŋį”¨é č¨­åœ–į‰‡īŧ‰ -UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION: 水印äŊįŊŽ -UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF: 是åĻį§ģ除EXIFäŋĄæ¯ -UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: åŖ“į¸ŽčŗĒ量(1-100) -UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: 是åĻčŊ‰æ›æ ŧåŧ -UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: čŊ‰æ›į›Žįš„æ ŧåŧ -UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: 指厚æ ŧåŧ, č¯ˇčž“å…ĨJSONæ ŧåŧé…įŊŽīŧŒåĻ‚{"jpg":"png"} -UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: 是åĻé€˛čĄŒåž‚į›´įŋģčŊ‰ -UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: 是åĻé€˛čĄŒæ°´åšŗįŋģčŊ‰ -UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: 是åĻ按å›ē厚å°ē寸čĒŋæ•´åœ–į‰‡ -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH: čĒŋ整å°ē寸å¯ŦåēĻ(設į‚ē0則按é̘åēĻį­‰æ¯”į¸Žæ”ž) -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT: čĒŋ整å°ē寸é̘åēĻ(設į‚ē0則按å¯ŦåēĻį­‰æ¯”į¸Žæ”ž) -UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT: į•ļåœ–į‰‡é̘åēĻ小æ–ŧč¨­åŽšé̘åēĻæ™‚čˇŗéŽį¸Žæ”ž -UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH: į•ļåœ–į‰‡å¯ŦåēĻ小æ–ŧč¨­åŽšå¯ŦåēĻæ™‚čˇŗéŽį¸Žæ”ž -UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT: 是åĻ按比䞋čĒŋ整å°ē寸īŧŒå„Ēå…ˆį´šæ›´é̘ -UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT: čĒŋ整å°ē寸比䞋īŧŒčŧ¸å…Ĩ50襨į¤ē50% -UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE: 是åĻ旋čŊ‰ -UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE: 旋čŊ‰č§’åēĻ -UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM: å„˛å­˜ -UPLOAD_PAGE_IMAGE_PROCESS_CANCEL: 取æļˆ -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP: 上 -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM: 下 -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT: åˇĻ -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT: åŗ -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT: åˇĻ上 -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT: åŗä¸Š -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT: åˇĻ下 -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT: åŗä¸‹ -UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER: 中 -UPLOAD_SHORT_URL: įŸ­é€Ŗįĩ -UPLOAD_NORMAL_URL: é•ŋ逪įĩ -SETTINGS: č¨­åŽš -SETTINGS_OPEN_CONFIG_FILE: æ‰“é–‹č¨­åŽšæĒ”æĄˆ -SETTINGS_MIGRATE_FROM_PICGO: åžžPicGo導å…Ĩč¨­åŽš -SETTINGS_MIGRATE_FROM_PICGO_TITLE: 通įŸĨ -SETTINGS_MIGRATE_FROM_PICGO_CONTENT: åŗå°‡å°Žå…ĨPicGoįš„č¨­åŽšæ–‡äģļå’Œį›¸å†Š, 這將會čφ蓋į•ļå‰įš„č¨­åŽš, 是åĻįšŧįēŒ? -SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: 導å…Ĩ成功, čĢ‹é‡å•Ÿæ‡‰į”¨ -SETTINGS_MIGRATE_FROM_PICGO_FAILED: 導å…Ĩå¤ąæ•— -SETTINGS_START_MODE: å•Ÿå‹•æ¨Ąåŧ -SETTINGS_START_MODE_MINI: miničĻ–įĒ— -SETTINGS_START_MODE_MAIN: ä¸ģčĻ–įĒ— -SETTINGS_START_MODE_QUIET: 靜éģ˜å•Ÿå‹• -SETTINGS_START_MODE_NO_TRAY: éšč—æ‰˜į›˜ -SETTINGS_CLICK_TO_OPEN: éģžæ“Šæ‰“é–‹ -SETTINGS_SET_LOG_FILE: č¨­åŽšč¨˜éŒ„æĒ”æĄˆ -SETTINGS_CLICK_TO_SET: éģžæ“Šč¨­åޚ -SETTINGS_CLICK_TO_CHECK: éģžæ“ŠæĒĸæŸĨ -SETTINGS_SET_SHORTCUT: č¨­åŽšåŋĢæˇéĩ -SETTINGS_CUSTOM_LINK_FORMAT: č‡Ē荂逪įĩæ ŧåŧ -SETTINGS_SET_PROXY_AND_MIRROR: č¨­åŽšPROXYå’ŒéĄåƒåœ°å€ -SETTINGS_SET_SERVER: č¨­åŽšServer -SETTINGS_CHECK_UPDATE: æĒĸæŸĨ更新 -SETTINGS_OPEN_UPDATE_HELPER: 打開更新劊手 -SETTINGS_OPEN: 開 -SETTINGS_CLOSE: 關 -SETTINGS_CLOSE_MINI_WINDOW_SYNC: 開ä¸ģįĒ—åŖåŒæ­Ĩ關閉miniįĒ—åŖ -SETTINGS_CLOSE_MAIN_WINDOW_SYNC: 關miniįĒ—åŖåŒæ­Ĩ關閉ä¸ģįĒ—åŖ -SETTINGS_LAUNCH_ON_BOOT: 開抟時啟動 -SETTINGS_RENAME_BEFORE_UPLOAD: 手動重新å‘Ŋ名 -SETTINGS_TIMESTAMP_RENAME: äģĨæ™‚é–“æˆŗå‘Ŋ名 -SETTINGS_ADVANCED_RENAME: é̘ᴚå‘Ŋ名 -SETTINGS_ADVANCED_RENAME_ENABLE: å•Ÿį”¨é̘ᴚå‘Ŋ名 -SETTINGS_ADVANCED_RENAME_FORMAT: é̘ᴚå‘Ŋ名æ ŧåŧ -SETTINGS_ENABLE_SECOND_PICBED: å•Ÿį”¨įŦŦäēŒåœ–åēŠåŒæ­Ĩä¸Šå‚ŗ -SETTINGS_SET_SECOND_PICBED: č¨­åŽšįŦŦäēŒåœ–åēŠ -SETTINGS_OPEN_UPLOAD_TIPS: é–‹å•Ÿä¸Šå‚ŗæį¤ē -SETTINGS_OPEN_UPLOAD_RESULT_TIPS: é–‹å•Ÿä¸Šå‚ŗįĩæžœæį¤ē -SETTINGS_MINI_WINDOW_ON_TOP: MiničĻ–įĒ—įŊŽé ‚ -SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD: ä¸Šå‚ŗåžŒč‡Ē動複čŖŊURL -SETTINGS_TIPS_PLACEHOLDER_URL: ᔍäŊ”äŊįŦĻ $url 來表į¤ēURLįš„äŊįŊŽ -SETTINGS_TIPS_PLACEHOLDER_FILENAME: ᔍäŊ”äŊįŦĻ $fileName 來表į¤ēæĒ”æĄˆåį¨ąįš„äŊįŊŽ -SETTINGS_TIPS_PLACEHOLDER_EXTNAME: ᔍäŊ”äŊįŦĻ $extName 來表į¤ēæĒ”æĄˆæ ŧåŧįš„äŊįŊŽ -SETTINGS_TIPS_SUCH_AS: åĻ‚ -SETTINGS_UPLOAD_PROXY: ä¸Šå‚ŗPROXY -SETTINGS_PLUGIN_INSTALL_PROXY: 插äģļåŽ‰čŖPROXY -SETTINGS_PLUGIN_INSTALL_MIRROR: 插äģļåŽ‰čŖéĄåƒ -SETTINGS_CURRENT_VERSION: į•ļå‰į‰ˆæœŦ -SETTINGS_NEWEST_VERSION: æœ€æ–°į‰ˆæœŦ -SETTINGS_GETING: æ­Ŗåœ¨å–åž—ä¸­ -SETTINGS_TIPS_HAS_NEW_VERSION: PicList更新å•ĻīŧŒčĢ‹éģžæ“ŠįĸēåŽšé‡å¯æ‡‰į”¨ -SETTINGS_LOG_FILE_PATH: 記錄æĒ”æĄˆčˇ¯åž‘ -SETTINGS_CONFIG_FILE_PATH: č¨­åŽšæĒ”æĄˆčˇ¯åž‘ -SETTINGS_LOG_FILE: 記錄æĒ”æĄˆ -SETTINGS_GUI_LOG_FILE: GUI記錄æĒ”æĄˆ -SETTINGS_MANAGE_LOG_FILE: įŽĄį†č¨˜éŒ„æĒ”æĄˆ -SETTINGS_LOG_LEVEL: č¨˜éŒ„į­‰įē§ -SETTINGS_LOG_FILE_SIZE: 記錄æĒ”æĄˆå¤§å° -SETTINGS_SET_PICGO_SERVER: č¨­åŽšPicGo-Server -SETTINGS_TIPS_SERVER_NOTICE: åĻ‚æžœäŊ ä¸įŸĨ道Serverįš„äŊœį”¨īŧŒčĢ‹é–ąčŽ€æ–‡æĒ”īŧŒæˆ–č€…ä¸į”¨äŋŽæ”šč¨­åŽšã€‚ -SETTINGS_ENABLE_SERVER: 是åĻ開啟Server -SETTINGS_SET_SERVER_HOST: č¨­åŽšį›ŖčŊ地址 -SETTINGS_SET_SERVER_PORT: č¨­åŽšį›ŖčŊįĢ¯åŖ -SETTINGS_SET_SERVER_KEY: č¨­åŽšé‘’æŦŠå¯†é‘° -SETTINGS_SET_WEB_SERVER: č¨­åŽšWeb服務 -SETTINGS_TIPS_WEB_SERVER_NOTICE: åĻ‚æžœäŊ ä¸įŸĨ道Webæœå‹™įš„äŊœį”¨īŧŒčĢ‹é–ąčŽ€æ–‡æĒ”īŧŒæˆ–č€…ä¸į”¨äŋŽæ”šč¨­åŽšã€‚ -SETTINGS_SET_ENABLE_WEB_SERVER: 是åĻ開啟Web服務 -SETTINGS_SET_WEB_SERVER_HOST: č¨­åŽšWeb服務地 -SETTINGS_SET_WEB_SERVER_PORT: č¨­åŽšWeb服務įĢ¯åŖ -SETTINGS_SET_WEB_SERVER_PATH: č¨­åŽšWebæœå‹™čˇ¯åž‘ -SETTINGS_TIP_PLACEHOLDER_WEB_HOST: 推č–Ļé č¨­åœ°å€:127.0.0.1 -SETTINGS_TIP_PLACEHOLDER_WEB_PORT: 推č–Ļ預設įĢ¯åŖ:37777 -SETTINGS_TIP_PLACEHOLDER_HOST: 推č–Ļé č¨­åœ°å€:127.0.0.1 -SETTINGS_TIP_PLACEHOLDER_PORT: 推č–Ļ預設įĢ¯åŖ:36677 -SETTINGS_TIP_PLACEHOLDER_KEY: ᔍæ–ŧæŽĨåŖé‘’æŦŠ, 通過url參數æˇģ加'?key=xxx' -SETTINGS_SET_SERVER_AES_KEY: č¨­åŽšAES加密密鑰 -SETTINGS_LOG_LEVEL_ALL: 全部-All -SETTINGS_LOG_LEVEL_SUCCESS: 成功-Success -SETTINGS_LOG_LEVEL_ERROR: 錯čǤ-Error -SETTINGS_LOG_LEVEL_INFO: 晎通-Info -SETTINGS_LOG_LEVEL_WARN: 提醒-Warn -SETTINGS_LOG_LEVEL_NONE: 不記錄-None -SETTINGS_RESULT: č¨­åŽšįĩæžœ -SETTINGS_DEFAULT_PICBED: č¨­åŽšé č¨­åœ–åēŠ -SETTINGS_SET_DEFAULT_PICBED: 設į‚ēé č¨­åœ–åēŠ -SETTINGS_NOT_CONFIG_OPTIONS: æšĢį„Ąč¨­åŽšé¸é … -SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD: äŊŋᔍ內åģēå‰Ēč˛ŧį°ŋä¸Šå‚ŗ -SETTINGS_CHOOSE_LANGUAGE: 選擇čĒžč¨€ -BUILTIN_CLIPBOARD_TIPS: äŊŋᔍ內åģēå‰Ēč˛ŧį°ŋå‡Ŋæ•¸č€Œä¸æ˜¯čĒŋᔍ腺æœŦ取垗å‰Ēč˛ŧį°ŋå…§įš„į…§į‰‡ -UPLOADER_CONFIG_NAME: 圖åēŠé…įŊŽå -UPLOADER_CONFIG_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ配įŊŽåį¨ą -SELECTED_SETTING_HINT: 厞遏䏭 -SETTINGS_MAIN_WINDOW_SIZE: éģ˜čĒä¸ģčĻ–įĒ—å¤§å° -SETTINGS_MAIN_WINDOW_SIZE_WIDTH: éģ˜čĒä¸ģčĻ–įĒ—å¯ŦåēĻ -SETTINGS_MAIN_WINDOW_WIDTH_HINT: 'éģ˜čĒ: 1200' -SETTINGS_MAIN_WINDOW_SIZE_HEIGHT: éģ˜čĒä¸ģčĻ–įĒ—é̘åēĻ -SETTINGS_MAIN_WINDOW_HEIGHT_HINT: 'éģ˜čĒ: 800' -SETTINGS_RAW_PICGO_SIZE: 原PicGo大小 -SETTINGS_CUSTOM_MINI_ICON_PATH: č‡Ē訂MiničĻ–įĒ—åœ–į¤ēčˇ¯åž‘ -SETTINGS_CUSTOM_MINI_ICON: č‡Ē訂MiničĻ–įĒ—åœ–į¤ē -SETTINGS_COMPRESS_AND_WATERMARK: 設įŊŽåœ–ቇæĩŽæ°´å°å’ŒåŖ“į¸Ž-æ ŧåŧčŊ‰æ›į­‰åƒæ•¸ -SETTINGS_SYNC_DELETE_CLOUD: åžžį›¸į°ŋ中åˆĒ除ä¸Ļ同æ­Ĩåžžé›˛į̝åˆĒ除 -SETTINGS_ISHIDEDOCK: 是åĻ隱藏dock圖į¤ē -SETTINGS_ISHIDEDOCK_TIPS: ä¸æ”¯æŒåŒæ™‚éšąč—dockå’Œæ‰˜į›˜ -SETTINGS_ENCODE_OUTPUT_URL: čŧ¸å‡ēīŧˆč¤‡čŖŊīŧ‰ URL æ™‚é€˛čĄŒčŊ‰įžŠ -SETTINGS_WATCH_CLIPBOARD: čģŸéĢ”å•Ÿå‹•æ™‚č‡Ē動ᛪčŊå‰Ēč˛ŧį°ŋä¸Šå‚ŗ -SETTINGS_SHORT_URL: äŊŋį”¨įŸ­įļ˛å€ -SETTINGS_SHORT_URL_SERVER: ៭įļ˛å€æœå‹™ -SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token -SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS域名 -SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature -SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker Host -SETTINGS_SHORT_SINK_DOMAIN: sink域名 -SETTINGS_SHORT_SINK_TOKEN: sink token -SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: ä¸Šå‚ŗåžŒåˆĒ除æœŦ地æĒ”æĄˆ -SETTINGS_SYNC_CONFIG: 設įŊŽåŒæ­Ĩ配įŊŽ -SETTINGS_SYNC_CONFIG_TITLE: 同æ­Ĩ設įŊŽ -SETTINGS_SYNC_CONFIG_NOTE: 同æ­Ĩįš„æĒ”æĄˆä¸ē配įŊŽæĒ”æĄˆ -SETTINGS_SYNC_CONFIG_SELECT_TYPE: 選擇同æ­Ĩæ–šåŧ -SETTINGS_SYNC_CONFIG_SELECT_FILE: 選擇同æ­ĨæĒ”æĄˆ -SETTINGS_SYNC_CONFIG_SELECT_CONFIG: 僅配įŊŽæĒ”æĄˆ -SETTINGS_SYNC_CONFIG_SELECT_GALLERY: åƒ…į›¸į°ŋæĒ”æĄˆ -SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配įŊŽæĒ”æĄˆå’Œį›¸į°ŋæĒ”æĄˆ -SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea Host -SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: ᔍæˆļ名 -SETTINGS_SYNC_CONFIG_GITEA_USERNAME: ᔍæˆļ名 -SETTINGS_SYNC_CONFIG_GITEE_USERNAME: ᔍæˆļ名 -SETTINGS_SYNC_CONFIG_GITHUB_REPO: å„˛å­˜åēĢīŧˆį§æœ‰īŧ‰ -SETTINGS_SYNC_CONFIG_GITEA_REPO: å„˛å­˜åēĢ -SETTINGS_SYNC_CONFIG_GITEE_REPO: å„˛å­˜åēĢčˇ¯åž„ -SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub 分支 -SETTINGS_SYNC_CONFIG_GITEA_BRANCH: Gitea 分支 -SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee 分支 -SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token -SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Gitea Token -SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Gitee Token -SETTINGS_SYNC_CONFIG_PROXY: äģŖį† -SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ GitHub ᔍæˆļ名 -SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ Gitea ᔍæˆļ名 -SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ Gitee ᔍæˆļ名 -SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ GitHub å„˛å­˜åēĢåį¨ą -SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ Gitea å„˛å­˜åēĢåį¨ą -SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ Gitee å„˛å­˜åēĢåį¨ą -SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ GitHub åˆ†æ”¯åį¨ą -SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ Gitea åˆ†æ”¯åį¨ą -SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ Gitee åˆ†æ”¯åį¨ą -SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ GitHub Token -SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ Gitea Token -SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: čĢ‹čŧ¸å…Ĩ Gitee Token -SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: čĢ‹čŧ¸å…ĨäģŖį†åœ°å€ -SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAVį̝éģž -SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: čĢ‹čŧ¸å…ĨWebDAVį̝éģžURL -SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: ᔍæˆļ名 -SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: čĢ‹čŧ¸å…ĨWebDAVᔍæˆļ名 -SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: 密įĸŧ -SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: čĢ‹čŧ¸å…ĨWebDAV密įĸŧ -SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: čĒč­‰éĄžåž‹ -SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: å•Ÿį”¨SSL/HTTPS -SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: äŋå­˜čˇ¯åž‘ -SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: čĢ‹é¸æ“‡åŒæ­ĨæĒ”æĄˆįš„äŋå­˜čˇ¯åž‘ -SETTINGS_UP_DOWN_DESC: ä¸Šå‚ŗå’Œä¸‹čŧ‰é…įŊŽæĒ”æĄˆ -SETTINGS_SYNC_UPLOAD: ä¸Šå‚ŗ -SETTINGS_SYNC_DOWNLOAD: 下čŧ‰ -SETTINGS_SYNC_UPLOAD_ALL: ä¸Šå‚ŗå…¨éƒ¨ -SETTINGS_SYNC_DOWNLOAD_ALL: 下čŧ‰å…¨éƒ¨ -SETTINGS_SYNC_UPLOAD_SUCCESS: ä¸Šå‚ŗæˆåŠŸ -SETTINGS_SYNC_UPLOAD_FAILED: ä¸Šå‚ŗå¤ąæ•— -SETTINGS_SYNC_DOWNLOAD_SUCCESS: 下čŧ‰æˆåŠŸ -SETTINGS_SYNC_DOWNLOAD_FAILED: 下čŧ‰å¤ąæ•— -SETTINGS_SYNC_COMMON_CONFIG: é€šį”¨é…įŊŽ -SETTINGS_SYNC_MANAGE_CONFIG: įŽĄį†é…įŊŽ -SETTINGS_AUTO_IMPORT: įŽĄį†é éĸč‡Ē動導å…Ĩ配įŊŽ -SETTINGS_AUTO_IMPORT_SELECT_PICBED: 選擇需čĻé–‹å•Ÿč‡Ē動導å…Ĩįš„åœ–åēŠ -SETTINGS_TAB_SYSTEM: įŗģįĩąč¨­įŊŽ -SETTINGS_TAB_SYNC_CONFIG: 同æ­Ĩ與配įŊŽ -SETTINGS_TAB_UPLOAD: ä¸Šå‚ŗč¨­įŊŽ -SETTINGS_TAB_ADVANCED: é̘ᴚ荭įŊŽ -SETTINGS_TAB_UPDATE: 更新 -SHORTCUT_NAME: åŋĢæˇéĩåį¨ą -SHORTCUT_BIND: åŋĢæˇéĩįļåޚ -SHORTCUT_STATUS: į‹€æ…‹ -SHORTCUT_ENABLED: åˇ˛å•Ÿį”¨ -SHORTCUT_DISABLED: 厞įρᔍ -SHORTCUT_SOURCE: 來æē -SHORTCUT_HANDLE: 操äŊœ -SHORTCUT_ENABLE: å•Ÿį”¨ -SHORTCUT_DISABLE: įρᔍ -SHORTCUT_EDIT: ᎍčŧ¯ -SHORTCUT_CHANGE_UPLOAD: äŋŽæ”šä¸Šå‚ŗåŋĢæˇéĩ -WAIT_TO_UPLOAD: į­‰åž…ä¸Šå‚ŗ -ALREADY_UPLOAD: åˇ˛ä¸Šå‚ŗ -DRAG_FILE_TO_HERE: 將æĒ”æĄˆæ‹–æ›ŗåˆ°æ­¤č™•īŧŒæˆ– -CLICK_TO_UPLOAD: éģžæ“Šä¸Šå‚ŗ -LINK_FORMAT: 逪įĩæ ŧåŧ -CLIPBOARD_PICTURE: å‰Ēč˛ŧį°ŋ -TIPS_DRAG_VALID_PICTURE_OR_URL: čĢ‹æ‹–å…Ĩåˆæŗ•įš„åœ–į‰‡æĒ”æĄˆæˆ–č€…åœ–į‰‡URL地址 -TIPS_INPUT_URL: čĢ‹čŧ¸å…ĨURL -TIPS_HTTP_PREFIX: http://æˆ–č€…https://開頭 -TIPS_INPUT_VALID_URL: čĢ‹čŧ¸å…Ĩåˆæŗ•įš„URL -PLUGIN_SEARCH_PLACEHOLDER: 搜尋npmä¸Šįš„PicGo插äģļīŧŒæˆ–者éģžæ“Šä¸Šæ–šæŒ‰éˆ•æŸĨįœ‹å„Ēį§€æ’äģļåˆ—čĄ¨ -PLUGIN_INSTALL: åŽ‰čŖ -PLUGIN_INSTALLING: åŽ‰čŖä¸­ -PLUGIN_INSTALLED: åˇ˛åŽ‰čŖ -PLUGIN_DOING_SOMETHING: 進行中 -PLUGIN_LIST: 插äģļåˆ—čĄ¨ -PLUGIN_IMPORT_LOCAL: 導å…ĨæœŦ地插äģļ -PLUGIN_UPDATE_ALL: 更新全部插äģļ -TIPS_REMOVE_LINK: 此操äŊœå°‡åœ¨į›¸į°ŋ中į§ģé™¤čŠ˛åœ–į‰‡īŧŒæ˜¯åĻįšŧįēŒīŧŸ -TIPS_WILL_REMOVE_CHOOSED_IMAGES: å°‡åœ¨į›¸į°ŋ中į§ģé™¤å‰›æ‰é¸ä¸­įš„ ${m} åŧĩåœ–į‰‡īŧŒæ˜¯åĻįšŧįēŒīŧŸ -TIPS_MUST_CONTAINS_URL: åŋ…é ˆåĢ有$url 或 $fileName 或 $extName -TIPS_NETWORK_ERROR: įļ˛čˇ¯éŒ¯čǤīŧŒæšĢæ™‚į„Ąæŗ•å–åž— -TIPS_NEED_RELOAD: 需čĻé‡æ–°å•Ÿå‹•į”Ÿæ•ˆ -TIPS_PLEASE_CHOOSE_LOG_LEVEL: čĢ‹é¸æ“‡č¨˜éŒ„į­‰į´š -TIPS_SET_SUCCEED: č¨­åŽšæˆåŠŸ -TIPS_RESET_SUCCEED: 重įŊŽæˆåŠŸ -TIPS_PLUGIN_NOT_GUI_IMPLEMENT: čŠ˛æ’äģᅵĒ對GUI進行å„Ē化īŧŒæ˜¯åĻįšŧįēŒåŽ‰čŖīŧŸ TIPS_GET_PLUGIN_LIST_FAILED: 取垗插äģļåˆ—čĄ¨å¤ąæ•— -MANAGE_SETTING_TITLE: įŽĄį†č¨­åŽš -MANAGE_SETTING_ISAUTOREFRESH_TITLE: 每æŦĄé€˛å…Ĩæ–°į›ŽéŒ„æ™‚īŧŒæ˜¯åĻč‡Ēå‹•é‡æ–°æ•´į†æĒ”æĄˆåˆ—čĄ¨ -MANAGE_SETTING_ISAUTOREFRESH_TIPS: åƒ…å°ä¸åˆ†é æ¨Ąåŧæœ‰æ•ˆīŧŒé č¨­æœƒåœ¨čŧ‰å…Ĩ垌č‡Ē動åŋĢå–č‡ŗčŗ‡æ–™åēĢäģĨ提升下æŦĄčŧ‰å…Ĩ速åēĻ -MANAGE_SETTING_CLEAR_CACHE_TITLE: '清įŠēæĒ”æĄˆåˆ—čĄ¨åŋĢå–čŗ‡æ–™åēĢ åˇ˛äŊ”ᔍ:' -MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE: 'å‰Šé¤˜å¯į”¨:' -MANAGE_SETTING_CLEAR_CACHE_TIPS: 清įŠē垌下æŦĄé€˛å…Ĩæ–°į›ŽéŒ„æ™‚å°‡æœƒé‡æ–°čŧ‰å…ĨæĒ”æĄˆåˆ—čĄ¨ -MANAGE_SETTING_CLEAR_CACHE_PROMPT: įĸē厚čĻæ¸…įŠēæĒ”æĄˆåˆ—čĄ¨åŋĢå–čŗ‡æ–™åēĢ嗎īŧŸ -MANAGE_SETTING_CLEAR_CACHE_BUTTON: 清įŠē -MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE: éĄ¯į¤ēåœ–į‰‡įš„åŽŸå§‹åœ–åƒč€Œéžé č¨­įš„æĒ”æĄˆæ ŧåŧåœ–į¤ē(需čĻå­˜å„˛æĄļå…Ŧ開č¨Ē問æŦŠé™) -MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE: äŊŋᔍ預į°Ŋ名URLéĸ„č§ˆåœ–į‰‡ -MANAGE_SETTING_ISSHOWLIST_TITLE: æĒ”æĄˆåˆ—čĄ¨é č¨­éĄ¯į¤ēæ–šåŧ -MANAGE_SETTING_ISSHOWLIST_ON: åˆ—čĄ¨ -MANAGE_SETTING_ISSHOWLIST_OFF: åĄį‰‡ -MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE: č‡ĒåŽšįžŠåŸŸåå•Ÿį”¨åŧˇåˆļ HTTPS -MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS: 開啟垌īŧŒč¤‡čŖŊ鏈įĩį­‰æ“äŊœå°‡æœƒč‡Ē動į‚ēč‡ĒåŽšįžŠåŸŸåæˇģ加 HTTPS 前įļ´ -MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE: äŋį•™ä¸Šå‚ŗæ™‚įš„į›ŽéŒ„įĩæ§‹ -MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS: åœį”¨åžŒīŧŒæ‰€æœ‰æ–‡äģļå°‡æœƒåą•é–‹åˆ°æŒ‡åŽšį›ŽéŒ„ä¸‹ -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A: 下čŧ‰ -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B: 文äģļ -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C: 時äŋį•™į›ŽéŒ„įĩæ§‹ -MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D: į›ŽéŒ„ -MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS: å•Ÿį”¨åžŒīŧŒä¸‹čŧ‰æ™‚會äŋį•™åŽŸå§‹į›ŽéŒ„įĩæ§‹ -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE: 最大同時下čŧ‰æĒ”æĄˆæ•¸é‡(1-9999) -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS: į”ąæ–ŧ垌į̝å¯Ļįžæ–šåŧä¸åŒīŧŒæ­¤č¨­åŽšåœ¨č…žčŽ¯äē‘ä¸Šä¸į”Ÿæ•ˆ -MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS: čĢ‹čŧ¸å…Ĩ最大同時下čŧ‰æĒ”æĄˆæ•¸é‡ -MANAGE_SETTING_ISIGNORECASE_TITLE: 搜尋æĒ”æĄˆæ™‚īŧŒæ˜¯åĻåŋŊį•Ĩ大小å¯Ģ -MANAGE_SETTING_ISIGNORECASE_TIPS: å•Ÿį”¨åžŒīŧŒæœå°‹æ™‚將會åŋŊį•Ĩ大小å¯Ģ -MANAGE_SETTING_TIMESTAMPRENAME_TITLE: ä¸Šå‚ŗæĒ”æĄˆæ™‚é–“æˆŗé‡æ–°å‘Ŋ名--(最é̘å„Ēå…ˆį´š) -MANAGE_SETTING_TIMESTAMPRENAME_TIPS: å•Ÿį”¨åžŒīŧŒä¸Šå‚ŗæĒ”æĄˆæ™‚å°‡æœƒäŊŋį”¨æ™‚é–“æˆŗé‡æ–°å‘Ŋ名 -MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE: ä¸Šå‚ŗæĒ”æĄˆéš¨æŠŸå­—įŦĻä¸˛é‡æ–°å‘Ŋ名--(中å„Ēå…ˆį´š) -MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS: 隨抟字įŦĻ串長åēĻį‚ē20 -MANAGE_SETTING_CUSTOMRENAME_TITLE: ä¸Šå‚ŗæĒ”æĄˆč‡ĒåŽšįžŠé‡æ–°å‘Ŋ名--(最äŊŽå„Ēå…ˆį´š) -MANAGE_SETTING_CUSTOMRENAME_TIPS: å•Ÿį”¨åžŒīŧŒä¸Šå‚ŗæĒ”æĄˆæ™‚å°‡æœƒäŊŋᔍč‡ĒåŽšįžŠé‡æ–°å‘Ŋ名 -MANAGE_SETTING_CUSTOM_PATTERN_TITLE: č‡Ēč¨‚é‡æ–°å‘Ŋ名æ ŧåŧīŧŒå äŊįŦĻčĢ‹åƒč€ƒä¸‹čĄ¨īŧŒå¯č‡Ēį”ąįĩ„合 -MANAGE_SETTING_CUSTOM_PATTERN_TIPS: čĢ‹čŧ¸å…Ĩč‡Ēč¨‚é‡æ–°å‘Ŋ名æ ŧåŧ -MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE: 占äŊįŦĻ -MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS: čĒĒæ˜Ž -MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE: 預設下čŧ‰éˆįĩæœ‰æ•ˆæœŸ(į§’) -MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS: čĢ‹čŧ¸å…Ĩ下čŧ‰éˆįĩæœ‰æ•ˆæœŸ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE: é¸æ“‡é č¨­č¤‡čŖŊįš„é€Ŗįĩæ ŧåŧ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN: Markdown -MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK: Markdown(å¸ļ逪įĩ) -MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL: 原始鏈įĩ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML: HTMLæ ŧåŧ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE: BBCodeæ ŧåŧ -MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM: č‡ĒåŽšįžŠæ ŧåŧ -MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE: č‡ĒåŽšįžŠéˆįĩæ ŧåŧ($urlį‚ē原始鏈įĩ,$fileNameį‚ēæĒ”æĄˆåį¨ą) -MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS: čĢ‹čŧ¸å…Ĩč‡ĒåŽšįžŠéˆįĩæ ŧåŧ -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE: 選擇下čŧ‰į›ŽéŒ„ -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS: įŗģįĩąé č¨­ä¸‹čŧ‰į›ŽéŒ„ -MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: é¸æ“‡į›ŽéŒ„ -MANAGE_SETTING_COPY_MESSAGE: 厞複čŖŊ -MANAGE_SETTING_CLEAR_CACHE_SUCCESS: 清除成功 -MANAGE_SETTING_CLEAR_CACHE_FAILED: æ¸…é™¤å¤ąæ•— -MANAGE_SETTING_ISENCODEURL_TITLE: 複čŖŊ鏈įĩæ™‚ᎍįĸŧ -MANAGE_SETTING_ISENCODEURL_TIPS: å•Ÿį”¨åžŒīŧŒč¤‡čŖŊ鏈įĩæ™‚å°‡æœƒįˇ¨įĸŧ -MANAGE_NO_DATA: æšĢį„Ąæ•¸æ“š -MANAGE_MAIN_PAGE_NEW_BUCKET: 新åģēå­˜å„˛æĄļ -MANAGE_MAIN_PAGE_BACK_TO_HOME: čŋ”回éϖ頁 -MANAGE_MAIN_PAGE_SWITCH_PICBED: 切換圖åēŠ -MANAGE_MAIN_PAGE_SETTING: č¨­åŽš -MANAGE_MAIN_PAGE_SUBMIT: 提äē¤ -MANAGE_MAIN_PAGE_TIPS: 提į¤ē -MANAGE_MAIN_PAGE_TIPS_SUCCESS: å‰ĩåģ翈åŠŸ -MANAGE_MAIN_PAGE_TIPS_FAILED: å‰ĩåģēå¤ąæ•— -MANAGE_MAIN_PAGE_BUCKET: å­˜å„˛æĄļ -MANAGE_MAIN_PAGE_GALLERY: 圖åēĢ -MANAGE_MAIN_PAGE_REPOSITORY: 倉åēĢ -MANAGE_CONSTANT_BASE_RULE: čĢ‹čŧ¸å…Ĩ -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A: čĢ‹čŧ¸å…Ĩæ¯é éĄ¯į¤ē數量 -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B: æ¯é éĄ¯į¤ē數量åŋ…é ˆį‚ē數字 -MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C: æ¯é éĄ¯į¤ē數量åŋ…須在20-1000之間 -MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A: čĢ‹čŧ¸å…ĨåˆĨ名īŧŒčŠ˛é…įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B: åˆĨ名åĒčƒŊ包åĢä¸­æ–‡ã€č‹ąæ–‡ã€æ•¸å­—ã€ä¸‹åŠƒįˇšå’Œä¸­åŠƒįˇš -MANAGE_CONSTANT_ALIAS_TOOLTIP: åˆĨ名åĒčƒŊ包åĢä¸­æ–‡ã€č‹ąæ–‡ã€æ•¸å­—ã€ä¸‹åŠƒįˇšå’Œä¸­åŠƒįˇš -MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP: æ¯é éĄ¯į¤ē數量åŋ…須在20-1000之間 -MANAGE_CONSTANT_PAGING_TOOLTIP: 關閉分頁時īŧŒį›ŽéŒ„åˆ—čĄ¨å°‡äŊŋį”¨æ•¸æ“šåēĢįˇŠå­˜äģĨå„Ē化性čƒŊ -MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒåĻ‚īŧšbucket1,bucket2,bucket3īŧŒå’Œčĩˇå§‹į›ŽéŒ„é †åēä¸€ä¸€å°æ‡‰ -MANAGE_CONSTANT_BASE_DIR_TOOLTIP: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒåĻ‚īŧš/dir1,/dir2,/dir3, å’Œå­˜å„˛æĄļ順åēä¸€ä¸€å°æ‡‰ -MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP: 開啟時īŧŒå°‡č‡Ēå‹•į˛å–å­˜å„˛æĄļįļåŽšįš„åŸŸåīŧŒé—œé–‰æ™‚可手動åĄĢå¯Ģ -MANAGE_CONSTANT_SMMS_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_SMMS_TOKEN_DESC: Token-åŋ…需 -MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER: čĢ‹åĄĢå¯ĢToken -MANAGE_CONSTANT_SMMS_PAGING_DESC: 是åĻ開啟分頁 -MANAGE_CONSTANT_SMMS_EXPLAIN: 大陸地區čĢ‹č¨Ēå•å‚™į”¨åŸŸåhttps://smms.appīŧŒčĢ‹å‹ŋå¤§æ‰šé‡ä¸Šå‚ŗåœ–į‰‡īŧŒåĻ則APIæŽĨåŖæœƒčĸĢ限åˆļ -MANAGE_CONSTANT_SMMS_REFER_TEXT: 配įŊŽæ•™į¨‹čĢ‹åƒč€ƒīŧš -MANAGE_CONSTANT_QINIU_NAME: ä¸ƒį‰›é›˛ -MANAGE_CONSTANT_QINIU_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC: accessKey-åŋ…需 -MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER: čĢ‹åĄĢå¯Ģ accessKey -MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC: secretKey-åŋ…需 -MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER: čĢ‹åĄĢå¯Ģ secretKey -MANAGE_CONSTANT_QINIU_BUCKET_DESC: įŠē間名-可選 -MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒäž‹åĻ‚īŧšbucket1,bucket2 -MANAGE_CONSTANT_QINIU_BASE_DIR_DESC: čĩˇå§‹į›ŽéŒ„-可選 -MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒäž‹åĻ‚īŧš/dir1,/dir2 -MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC: 是åĻč‡Ēå‹•į˛å–įļåŽšåŸŸå -MANAGE_CONSTANT_QINIU_PAGING_DESC: 是åĻ開啟分頁 -MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC: æ¯é éĄ¯į¤ē數量 -MANAGE_CONSTANT_QINIU_EXPLAIN: įŠē間名和čĩˇå§‹į›ŽéŒ„配įŊŽæ™‚å¯é€šéŽč‹ąæ–‡é€—č™Ÿåˆ†éš”č¨­įŊŽīŧŒé †åēåŋ…é ˆä¸€č‡´īŧŒé€—č™Ÿé–“į•™įŠē或įŧēå¤ąé …äŊŋᔍéģ˜čĒå€ŧ -MANAGE_CONSTANT_QINIU_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ: ' -MANAGE_CONSTANT_GITHUB_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_GITHUB_TOKEN_DESC: Token-åŋ…需 -MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER: čĢ‹åĄĢå¯ĢToken -MANAGE_CONSTANT_GITHUB_TOKEN_TIPS: čĢ‹æäž›å…ˇæœ‰åŽŒæ•´repoæŦŠé™įš„tokenīŧŒåĻ則部分功čƒŊ可čƒŊį„Ąæŗ•äŊŋᔍ -MANAGE_CONSTANT_GITHUB_USER_DESC: ᔍæˆļ名-åŋ…需 -MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER: čĢ‹åĄĢå¯Ģᔍæˆļ名 -MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE: ᔍæˆļ名 -MANAGE_CONSTANT_GITHUB_PROXY_DESC: äģŖį†åœ°å€-可選 -MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER: 例åĻ‚īŧšhttp://127.0.0.1:1080 -MANAGE_CONSTANT_GITHUB_PROXY_TIPS: åĻ‚æžœč¨Ē問速åēĻčŧƒæ…ĸīŧŒå¯äģĨ嘗čŠĻ配įŊŽäģŖį† -MANAGE_CONSTANT_GITHUB_PAGING_DESC: 是åĻ開啟分頁 -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC: CDN加速域名-可選 -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER: 支持äŊŋᔍ{username}、{repo}、{branch}和{path}äŊœį‚ēæ›ŋ換占äŊįŦĻīŧŒį”¨æ–ŧ遊配不同倉åēĢ和分支 -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS: '例åĻ‚: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}' -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A: 加速域名čĢ‹äģĨhttp://或https://開頭 -MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B: åŠ é€ŸåŸŸåä¸­įš„å¤§æ‹Ŧ號åŋ…須成對å‡ēįž -MANAGE_CONSTANT_GITHUB_EXPLAIN: APIčĒŋį”¨æœ‰æ¯å°æ™‚ä¸Šé™īŧŒæ­¤å¤–ä¸æ”¯æŒä¸Šå‚ŗčļ…過100Mįš„æ–‡äģļ -MANAGE_CONSTANT_GITHUB_REFER_TEXT: 配įŊŽæ•™į¨‹čĢ‹åƒč€ƒīŧš -MANAGE_CONSTANT_ALIYUN_NAME: é˜ŋ里雲 -MANAGE_CONSTANT_ALIYUN_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC: accessKeyId-åŋ…需 -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC: accessKeySecret-åŋ…需 -MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER: čĢ‹åĄĢå¯ĢaccessKeySecret -MANAGE_CONSTANT_ALIYUN_BUCKET_DESC: å„˛å­˜æĄļ名-可選 -MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒäž‹åĻ‚īŧšbucket1,bucket2 -MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC: čĩˇå§‹į›ŽéŒ„-可選 -MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒäž‹åĻ‚īŧš/dir1,/dir2 -MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC: 是åĻč‡Ēå‹•į˛å–įļåŽšåŸŸå -MANAGE_CONSTANT_ALIYUN_PAGING_DESC: 是åĻ開啟分頁 -MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC: æ¯é éĄ¯į¤ē數量 -MANAGE_CONSTANT_ALIYUN_EXPLAIN: å„˛å­˜æĄļ名和čĩˇå§‹į›ŽéŒ„配įŊŽæ™‚å¯é€šéŽč‹ąæ–‡é€—č™Ÿåˆ†éš”ä¸åŒå„˛å­˜æĄļįš„č¨­įŊŽīŧŒé †åēåŋ…é ˆä¸€č‡´īŧŒé€—č™Ÿé–“į•™įŠē或įŧēå¤ąé …äŊŋᔍéģ˜čĒå€ŧ -MANAGE_CONSTANT_ALIYUN_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ: ' -MANAGE_CONSTANT_TENCENT_NAME: č…žčŽ¯é›˛ -MANAGE_CONSTANT_TENCENT_ALIAS_DESC: 配įŊŽåˆĢ名-åŋ…需 -MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC: secretId-åŋ…需 -MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER: čĢ‹åĄĢå¯Ģ secretId -MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC: secretKey-åŋ…需 -MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER: čĢ‹åĄĢå¯Ģ secretKey -MANAGE_CONSTANT_TENCENT_APPID_DESC: appId-åŋ…需 -MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER: čĢ‹åĄĢå¯Ģ appId -MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP: 例åĻ‚īŧš1250000000 -MANAGE_CONSTANT_TENCENT_BUCKET_DESC: å­˜å„˛æĄļ名-可選(æŗ¨æ„åŒ…åĢAppId) -MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒäž‹åĻ‚īŧšbucket1-1250000000,bucket2-1250000000 -MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC: čĩˇå§‹į›ŽéŒ„-可選 -MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒäž‹åĻ‚īŧš/dir1,/dir2 -MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC: 是åĻč‡Ēå‹•į˛å–įļåŽšåŸŸå -MANAGE_CONSTANT_TENCENT_PAGING_DESC: 是åĻ開啟分頁 -MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC: æ¯é éĄ¯į¤ē數量 -MANAGE_CONSTANT_TENCENT_EXPLAIN: å­˜å„˛æĄļ名和čĩˇå§‹į›ŽéŒ„配įŊŽæ™‚å¯é€šéŽč‹ąæ–‡é€—č™Ÿåˆ†éš”ä¸åŒå­˜å„˛æĄļįš„č¨­įŊŽīŧŒé †åēåŋ…é ˆä¸€č‡´īŧŒé€—č™Ÿé–“į•™įŠē或įŧēå¤ąé …äŊŋᔍéģ˜čĒå€ŧ -MANAGE_CONSTANT_TENCENT_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ: ' -MANAGE_CONSTANT_UPYUN_NAME: åˆæ‹é›˛ -MANAGE_CONSTANT_UPYUN_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_UPYUN_BUCKET_DESC: 服務名-åŋ…需 -MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER: 對應å…ļåŽƒå°čąĄå­˜å„˛įš„å­˜å„˛æĄļ名 -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC: 操äŊœå“Ąå-åŋ…需 -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER: 推č–ĻäŊŋį”¨å…ˇæœ‰čŽ€å–ã€å¯Ģå…Ĩ和åˆĒ除厌整æŦŠé™įš„æ“äŊœå“Ą -MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE: 操äŊœå“Ą -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC: 操äŊœå“Ąå¯†įĸŧ-åŋ…需 -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER: čĢ‹åĄĢå¯Ģ密įĸŧ -MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE: 操äŊœå“Ąå¯†įĸŧ -MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC: čĩˇå§‹į›ŽéŒ„-可選 -MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER: čŽ€å–æ–‡äģļæ™‚įš„åˆå§‹į›ŽéŒ„ -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC: 加速域名-åŋ…需 -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER: čĢ‹äģĨhttp://或https://開頭 -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A: 加速域名不čƒŊį‚ēįŠē -MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B: č‡ĒåŽšįžŠåŸŸåčĢ‹äģĨhttp://或https://開頭 -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC: é˜˛į›—é“žå¯†é’Ĩ-可選 -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER: čĢ‹åĄĢå¯Ģé˜˛į›—é“žå¯†é’Ĩ -MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP: åĻ‚æžœä¸åĄĢå¯ĢīŧŒå‰‡ä¸å•Ÿį”¨é˜˛į›—铞 -MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC: é˜˛į›—é“žæœ‰æ•ˆæœŸ(į§’)-可選 -MANAGE_CONSTANT_UPYUN_PAGING: 是åĻ開啟分頁 -MANAGE_CONSTANT_UPYUN_ITEMS_PAGE: æ¯é éĄ¯į¤ē數量 -MANAGE_CONSTANT_UPYUN_EXPLAIN: åˆæ‹é›˛åœ–åēŠåŋ…é ˆåĄĢå¯Ģ加速域名īŧŒåĻå‰‡į„Ąæŗ•æ­Ŗå¸¸äŊŋᔍ -MANAGE_CONSTANT_UPYUN_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ: ' -MANAGE_CONSTANT_IMGUR_NAME: Imgur -MANAGE_CONSTANT_IMGUR_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_IMGUR_USERNAME_DESC: Imgurᔍæˆļ名-åŋ…需 -MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER: čĢ‹åĄĢå¯ĢImgurᔍæˆļ名 -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC: Access Token-åŋ…需 -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER: čĢ‹åĄĢå¯ĢAccess Token -MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP: 不是client IDīŧŒčĢ‹åƒč€ƒé…įŊŽæ•™į¨‹ -MANAGE_CONSTANT_IMGUR_PROXY_DESC: äģŖį†-可選 -MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER: 例åĻ‚īŧšhttp://127.0.0.1:1080 -MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP: 大陸地區čĢ‹äŊŋᔍäģŖį†īŧŒåĻå‰‡į„Ąæŗ•æ­Ŗå¸¸äŊŋᔍ -MANAGE_CONSTANT_IMGUR_EXPLAIN: 大陸地區čĢ‹äŊŋᔍäģŖį†īŧŒAPIčĒŋį”¨å­˜åœ¨é™åˆļīŧŒčĢ‹æŗ¨æ„äŊŋᔍé ģįŽ‡ -MANAGE_CONSTANT_IMGUR_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ:' -MANAGE_CONSTANT_S3_NAME: S3å…ŧåŽšé›˛ -MANAGE_CONSTANT_S3_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC: accessKeyId-åŋ…需 -MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER: čĢ‹åĄĢå¯ĢaccessKeyId -MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC: secretAccessKey-åŋ…需 -MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER: čĢ‹åĄĢå¯ĢsecretAccessKey -MANAGE_CONSTANT_S3_ENDPOINT_DESC: endpoint-可選 -MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER: 例åĻ‚īŧšs3.us-east-1.amazonaws.com -MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP: åĻ‚æžœä¸åĄĢå¯ĢīŧŒéģ˜čĒč¨Ē問 AWS S3īŧŒčĢ‹æäž›æ šAPI endpoint -MANAGE_CONSTANT_S3_SSLENABLED_DESC: äŊŋᔍHTTPS逪æŽĨ -MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP: åĻ‚æžœæ‚¨įš„åšŗč‡ē不支持īŧŒčĢ‹é—œé–‰čŠ˛é¸é … -MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC: å•Ÿį”¨ S3 Path style -MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP: 例åĻ‚äŊŋᔍ minio 時需čĻå•Ÿį”¨ -MANAGE_CONSTANT_S3_PROXY_DESC: äģŖį†-可選 -MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER: 例åĻ‚īŧšhttp://127.0.0.1:1080 -MANAGE_CONSTANT_S3_PROXY_TOOLTIP: åĻ‚æžœéƒ¨åˆ†åšŗč‡ēå¤§é™¸åœ°å€į„Ąæŗ•č¨Ē問īŧŒčĢ‹äŊŋᔍäģŖį† -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC: ä¸Šå‚ŗæ–‡äģļįš„æŦŠé™ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE: į§æœ‰ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ: å…Ŧå…ąčŽ€ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE: å…Ŧå…ąčŽ€å¯Ģ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ: 授æŦŠčŽ€ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ: æĄļæ‰€æœ‰č€…čŽ€ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL: æĄļæ‰€æœ‰č€…åŽŒå…¨æŽ§åˆļ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ: AWSåŸˇčĄŒčŽ€ -MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP: ä¸Šå‚ŗæ–‡äģļįš„æŦŠé™īŧŒå¯é¸å€ŧīŧšprivate、public-read、public-read-write、authenticated-read、bucket-owner-read、bucket-owner-full-control、aws-exec-read -MANAGE_CONSTANT_S3_BUCKET_DESC: å­˜å„˛æĄļ名-可選 -MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒäž‹åĻ‚īŧšbucket1,bucket2 -MANAGE_CONSTANT_S3_BASE_DIR_DESC: čĩˇå§‹į›ŽéŒ„-可選 -MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER: č‹ąæ–‡é€—č™Ÿåˆ†éš”īŧŒäž‹åĻ‚īŧš/dir1,/dir2 -MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC: å•Ÿį”¨ Doge Cloud 支援 -MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP: å•Ÿį”¨åžŒīŧŒå°‡æœƒå•Ÿį”¨Doge Cloud API -MANAGE_CONSTANT_S3_PAGING_DESC: 是åĻ開啟分頁 -MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC: æ¯é éĄ¯į¤ē數量 -MANAGE_CONSTANT_S3_EXPLAIN: å­˜å„˛æĄļ名和čĩˇå§‹į›ŽéŒ„配įŊŽæ™‚å¯é€šéŽč‹ąæ–‡é€—č™Ÿåˆ†éš”ä¸åŒå­˜å„˛æĄļįš„č¨­įŊŽīŧŒé †åēåŋ…é ˆä¸€č‡´īŧŒé€—č™Ÿé–“į•™įŠē或įŧēå¤ąé …äŊŋᔍéģ˜čĒå€ŧ -MANAGE_CONSTANT_S3_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ:' -MANAGE_CONSTANT_WEBDAV_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_WEBDAV_HOST_DESC: 地址-åŋ…需 -MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER: 例åĻ‚īŧšhttps://example.com/dav -MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP: čĢ‹åĄĢå¯ĢåŽŒæ•´įš„WebDAV地址 -MANAGE_CONSTANT_WEBDAV_USERNAME_DESC: äŊŋį”¨č€…åį¨ą-åŋ…需 -MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER: čĢ‹åĄĢå¯ĢäŊŋį”¨č€…åį¨ą -MANAGE_CONSTANT_WEBDAV_BUCKET_DESC: į‰šæŽŠé…įŊŽ -MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER: 例åĻ‚īŧšbucket1 -MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP: æ­¤č™•ä¸å¯äŋŽæ”šīŧŒåƒ…į‚ēčģŸéĢ”į›¸åŽšæ€§č€ƒé‡ -MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC: 密įĸŧ-åŋ…需 -MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER: čĢ‹åĄĢå¯Ģ密įĸŧ -MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC: čĩˇå§‹į›ŽéŒ„-可選 -MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER: 例åĻ‚īŧš/dir1 -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC: č‡Ē訂įļ˛åŸŸåį¨ą-可選 -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER: 例åĻ‚īŧšhttps://example.com -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP: åĻ‚æžœæ‚¨įš„WebDAVäŧ翜å™¨æ”¯æ´č‡Ē訂įļ˛åŸŸåį¨ąīŧŒčĢ‹åĄĢå¯Ģ -MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE: č‡Ē訂įļ˛åŸŸåį¨ąčĢ‹äģĨhttp://或https://開頭 -MANAGE_CONSTANT_WEBDAV_WEB_PATH: WebDAVįļ˛čˇ¯čˇ¯åž‘-可選 -MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER: 例åĻ‚īŧštest/ttc -MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP: ᔍæ–ŧæ‹ŧæŽĨįļ˛å€ -MANAGE_CONSTANT_WEBDAV_PROXY_DESC: äģŖį†-可選 -MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER: 例åĻ‚īŧšhttp://127.0.0.1:1080 -MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP: åĻ‚æžœéœ€čĻį‰šæŽŠįļ˛čˇ¯į’°åĸƒæ‰čƒŊč¨Ē問īŧŒčĢ‹äŊŋᔍäģŖį† -MANAGE_CONSTANT_WEBDAV_SSL_DESC: äŊŋᔍHTTPSé€Ŗįˇš -MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP: 栚據WebDAVäŧ翜å™¨įš„配įŊŽīŧŒåĻ‚æžœæ‚¨įš„äŧ翜å™¨ä¸æ”¯æ´HTTPSīŧŒčĢ‹é—œé–‰čŠ˛é¸é … -MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC: čĒč­‰éĄžåž‹ -MANAGE_CONSTANT_WEBDAV_EXPLAIN: WebDAV配įŊŽ -MANAGE_CONSTANT_WEBDAV_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ: ' -MANAGE_CONSTANT_LOCAL_NAME: æœŦ地 -MANAGE_CONSTANT_LOCAL_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC: čĩˇå§‹į›ŽéŒ„-åŋ…需 -MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER: čĢ‹åĄĢå¯Ģčĩˇå§‹į›ŽéŒ„ -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC: č‡ĒåŽšįžŠįļ˛åŸŸ-可選 -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER: 例åĻ‚īŧšhttps://example.com -MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP: åĻ‚æžœæ‚¨įš„į›ŽéŒ„æ”¯æ´č‡ĒåŽšįžŠįļ˛åŸŸīŧŒčĢ‹åĄĢå¯Ģ -MANAGE_CONSTANT_LOCAL_WEB_PATH: įļ˛čˇ¯čˇ¯åž‘-可選 -MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER: 例åĻ‚īŧštest/ttc -MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP: ᔍæ–ŧæ‹ŧæŽĨįļ˛å€ -MANAGE_CONSTANT_LOCAL_EXPLAIN: æœŦ地配įŊŽ -MANAGE_CONSTANT_LOCAL_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ: ' -MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE: čĩˇå§‹į›ŽéŒ„不čƒŊį‚ēįŠē -MANAGE_CONSTANT_LOCAL_BUCKET_DESC: į‰šæŽŠé…įŊŽ -MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: 例åĻ‚īŧšbucket1 -MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: æ­¤č™•ä¸å¯äŋŽæ”šīŧŒåƒ…į‚ēčģŸéĢ”į›¸åŽšæ€§č€ƒé‡ -MANAGE_CONSTANT_SFTP_NAME: SFTP -MANAGE_CONSTANT_SFTP_ALIAS_DESC: 配įŊŽåˆĨ名-åŋ…需 -MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: 該配įŊŽįš„å”¯ä¸€æ¨™č­˜ -MANAGE_CONSTANT_SFTP_HOST_DESC: 地址-åŋ…需 -MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: 例åĻ‚īŧš233.233.233.233 -MANAGE_CONSTANT_SFTP_PORT_DESC: įĢ¯åŖ-åŋ…需 -MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: 例åĻ‚īŧš22 -MANAGE_CONSTANT_SFTP_USERNAME_DESC: ᔍæˆļ名 -MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: čĢ‹åĄĢå¯Ģᔍæˆļ名 -MANAGE_CONSTANT_SFTP_PASSWORD_DESC: 密įĸŧ -MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: čĢ‹åĄĢå¯Ģ密įĸŧ -MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: į§é‘°åœ°å€ -MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: čĢ‹åĄĢå¯Ģį§é‘°åœ°å€ -MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: ᧁ鑰坆įĸŧ -MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: čĢ‹åĄĢå¯Ģᧁ鑰坆įĸŧ -MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: čĩˇå§‹į›ŽéŒ„-可選 -MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: 例åĻ‚īŧš/dir1 -MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: č‡ĒåŽšįžŠįļ˛åŸŸ-可選 -MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: 例åĻ‚īŧšhttps://example.com -MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: åĻ‚æžœæ‚¨įš„į›ŽéŒ„æ”¯æ´č‡ĒåŽšįžŠįļ˛åŸŸīŧŒčĢ‹åĄĢå¯Ģ -MANAGE_CONSTANT_SFTP_WEB_PATH: įļ˛čˇ¯čˇ¯åž‘-可選 -MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: 例åĻ‚īŧštest/ttc -MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: ᔍæ–ŧæ‹ŧæŽĨįļ˛å€ -MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: 文äģļæŦŠé™ -MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: 例åĻ‚īŧš0644 -MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: į›ŽéŒ„æŦŠé™ -MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: 例åĻ‚īŧš0755 -MANAGE_CONSTANT_SFTP_EXPLAIN: SFTP配įŊŽ -MANAGE_CONSTANT_SFTP_REFER_TEXT: '配įŊŽæ•™į¨‹čĢ‹åƒč€ƒ: ' -MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: čĩˇå§‹į›ŽéŒ„不čƒŊį‚ēįŠē -MANAGE_CONSTANT_SFTP_BUCKET_DESC: į‰šæŽŠé…įŊŽ -MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: 例åĻ‚īŧšbucket1 -MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: æ­¤č™•ä¸å¯äŋŽæ”šīŧŒåƒ…į‚ēčģŸéĢ”į›¸åŽšæ€§č€ƒé‡ -MANAGE_LOGIN_PAGE_PANE_NAME: 厞äŋå­˜é…įŊŽ -MANAGE_LOGIN_PAGE_PANE_KEY_NAME: 配įŊŽé … -MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: å€ŧ -MANAGE_LOGIN_PAGE_PANE_ENTER: 進å…Ĩ -MANAGE_LOGIN_PAGE_PANE_DELETE: åˆĒ除 -MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER: čĢ‹é¸æ“‡ -MANAGE_LOGIN_PAGE_PANE_IMPORT: 導å…Ĩ -MANAGE_LOGIN_PAGE_PANE_SAVE: äŋå­˜ -MANAGE_LOGIN_PAGE_PANE_RESET: 重įŊŽ -MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE: åˇ˛æœ‰é…įŊŽīŧŒå–Žæ“Šå¯č¤‡čŖŊå°æ‡‰å„˛å­˜æ ŧčŗ‡æ–™ -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A: čĢ‹åĄĢå¯Ģ -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE: åˆĨ名åĒčƒŊ包åĢä¸­æ–‡ã€č‹ąæ–‡ã€æ•¸å­—ã€ä¸‹åŠƒįˇšå’Œä¸­åŠƒįˇš -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE: 每頁數量åŋ…須在20-1000之間 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE: č‡ĒåŽšįžŠįļ˛åŸŸčĢ‹äģĨhttp://或https://開頭 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME: 通įŸĨ -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE: 厞čφ蓋åˆĨ名 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B: 厞äŋå­˜åˆĨ名 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C: 厞åˆĒ除åˆĨ名 -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D: åˆĒ除åˆĨ名į‚ē -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E: įš„é…įŊŽå¤ąæ•— -MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS: 厞複čŖŊ -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE: įĸē厚čĻåˆ é™¤å—ŽīŧŸ? -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP: 提į¤ē -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM: įĸē厚 -MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL: 取æļˆ -MANAGE_BUCKET_PAGE_LOADING_TEXT: čŧ‰å…ĨæĒ”æĄˆä¸­... -MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER: čĢ‹é¸æ“‡č‡Ēč¨‚åŸŸå -MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER: čĢ‹čŧ¸å…Ĩč‡Ēč¨‚åŸŸå -MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP: æĒ”æĄˆä¸Šå‚ŗīŧˆæ”¯æ´å¤šé¸īŧ‰ -MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP: åžž URL ä¸Šå‚ŗ -MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP: åģēįĢ‹čŗ‡æ–™å¤ž -MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP: 下čŧ‰é éĸ -MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP: 扚æŦĄé‡æ–°å‘Ŋ名 -MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP: 扚æŦĄč¤‡čŖŊ URL -MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP: 複čŖŊæĒ”æĄˆčŗ‡č¨Š -MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP: åŧˇåˆļé‡æ–°æ•´į†æĒ”æĄˆåˆ—čĄ¨ -MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER: 搜尋æĒ”æĄˆ -MANAGE_BUCKET_PAGE_ROOT_FOLDER: æ šį›ŽéŒ„ -MANAGE_BUCKET_PAGE_FILE_NUMBER: æĒ”æĄˆæ•¸īŧš -MANAGE_BUCKET_PAGE_FILE_SIZE: į¸Ŋ大小īŧš -MANAGE_BUCKET_PAGE_SELECT_ALL: 全選 -MANAGE_BUCKET_PAGE_SELECT_NONE: 取æļˆé¸æ“‡ -MANAGE_BUCKET_PAGE_SELECT_INVERT: 反選 -MANAGE_BUCKET_DOWNLOAD_BTN: 下čŧ‰ -MANAGE_BUCKET_DELETE_BTN: åˆĒ除 -MANAGE_BUCKET_SORT_TITLE: 排åē -MANAGE_BUCKET_SORT_NAME: æĒ”æĄˆåį¨ą -MANAGE_BUCKET_SORT_SIZE: 大小 -MANAGE_BUCKET_SORT_EXT: éĄžåž‹ -MANAGE_BUCKET_SORT_TIME: 時間 -MANAGE_BUCKET_SORT_CHECK: é¸å–į‹€æ…‹ -MANAGE_BUCKET_SORT_INIT: 初始化 -MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: čĢ‹čŧ¸å…Ĩ URLīŧŒæ”¯æ´å¤šå€‹ URLīŧŒäģĨæ›čĄŒåˆ†éš” -MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: įĸē厚 -MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: 取æļˆ -MANAGE_BUCKET_URL_FORMAT_MARKDOWN: Markdown -MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK: Markdown-link -MANAGE_BUCKET_URL_FORMAT_URL: Url -MANAGE_BUCKET_URL_FORMAT_HTML: Html -MANAGE_BUCKET_URL_FORMAT_BBCODE: BBCode -MANAGE_BUCKET_URL_FORMAT_CUSTOM: č‡Ē訂 -MANAGE_BUCKET_URL_FORMAT_PRESIGN: 預į°Ŋåé€Ŗįĩ -MANAGE_BUCKET_FILE_INFO_TITLE: æĒ”æĄˆčŗ‡č¨Š -MANAGE_BUCKET_FILE_INFO_COPY_TIPS: 複čŖŊ JSON æ ŧåŧčŗ‡č¨Š -MANAGE_BUCKET_FILE_LIST_LOADING: čŧ‰å…Ĩ中īŧŒéģžæ“Šå–æļˆ -MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE: æē–備下čŧ‰ä¸­īŧŒéģžæ“Šå–æļˆ -MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE: äŋæŒį›ŽéŒ„įĩæ§‹ -MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE: 不äŋæŒį›ŽéŒ„įĩæ§‹ -MANAGE_BUCKET_UPLOAD_AREA_TITLE: æ‹–æ”žä¸Šå‚ŗæ”¯æ´éžæ­¸ä¸Šå‚ŗčŗ‡æ–™å¤ž -MANAGE_BUCKET_UPLOAD_AREA_TEXT: 或īŧšéģžé¸é¸æ“‡æĒ”æĄˆ(ä¸æ”¯æ´čŗ‡æ–™å¤ž) -MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING: čŽ€å–æĒ”æĄˆä¸­ -MANAGE_BUCKET_UPLOAD_AREA_BTN: ä¸Šå‚ŗ -MANAGE_BUCKET_UPLOAD_AREA_CLEAR: 清įŠē -MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING: ä¸Šå‚ŗä¸­ -MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK: 複čŖŊä¸Šå‚ŗäģģå‹™čŗ‡č¨Š -MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK: 清įŠēåˇ˛åŽŒæˆäģģ務 -MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK: 清įŠē所有äģģ務 -MANAGE_BUCKET_UPLOAD_AREA_SUCCESS: 成功 -MANAGE_BUCKET_UPLOAD_AREA_FAILED: å¤ąæ•— -MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE: 下čŧ‰é éĸ -MANAGE_BUCKET_DOWNLOADING: 下čŧ‰ä¸­ -MANAGE_BUCKET_DOWNLOAD_COPY_TASK: 複čŖŊ下čŧ‰äģģå‹™čŗ‡č¨Š -MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK: 清įŠēåˇ˛åŽŒæˆäģģ務 -MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK: 清įŠē所有äģģ務 -MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER: 開啟下čŧ‰į›ŽéŒ„ -MANAGE_BUCKET_DOWNLOAD_SUCCESS: 成功 -MANAGE_BUCKET_DOWNLOAD_FAILED: å¤ąæ•— -MANAGE_BUCKET_MARKDOWN_PREVIEW: 預čĻŊ -MANAGE_BUCKET_PLAY: 播攞 -MANAGE_BUCKET_RENAME_FILE: æĒ”æĄˆé‡æ–°å‘Ŋ名 -MANAGE_BUCKET_RENAME_FILE_INPUT_A: 進行æ›ŋæ›æ™‚åŒšé…įš„å­—ä¸˛æˆ– JS æ­Ŗå‰‡čĄ¨é”åŧ -MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS: æ­Ŗå‰‡čĄ¨é”åŧč̋ᛴæŽĨčŧ¸å…ĨīŧŒä¸éœ€čρ加䏊 / -MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER: 例åĻ‚īŧš^\d{4}-\d{2}-\d{2} -MANAGE_BUCKET_RENAME_FILE_INPUT_B: 需čρæ›ŋæ›įš„å­—ä¸˛īŧŒå¯äŊŋᔍč‡Ēč¨‚é‡æ–°å‘Ŋ名čĻå‰‡ä¸­įš„äŊ”äŊįŦĻ -MANAGE_BUCKET_RENAME_FILE_TABLE_IID: č‡Ēåĸžæ•¸å­— -MANAGE_BUCKET_RENAME_FILE_EXT: 是åĻ匚配副æĒ”åé€˛čĄŒæ›ŋ換 -MANAGE_BUCKET_RENAME_FILE_EXT_TIPS: åĻ‚æžœå¸Œæœ›äŋŽæ”šå‰¯æĒ”名īŧŒčĢ‹å‹žé¸æ­¤é … -MANAGE_BUCKET_RENAME_FILE_EXT_YES: 是 -MANAGE_BUCKET_RENAME_FILE_EXT_NO: åĻ -MANAGE_BUCKET_RENAME_FILE_CANCEL: 取æļˆ -MANAGE_BUCKET_RENAME_FILE_CONFIRM: įĸē厚 -MANAGE_BUCKET_COPY_SUCCESS: 複čŖŊ成功 -MANAGE_BUCKET_START_LOADING_MESSAGE: 開始取垗æĒ”æĄˆ -MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL: 取垗æĒ”æĄˆå…§åŽšå¤ąæ•— -MANAGE_BUCKET_LAST_PAGE_TITLE: 提į¤ē -MANAGE_BUCKET_LAST_PAGE_MSG: 厞į˜¯æœ€åžŒä¸€é äē† -MANAGE_BUCKET_GET_LIST_FAIL_TITLE: 提į¤ē -MANAGE_BUCKET_GET_LIST_FAIL_MSG: į˛å–æĒ”æĄˆåˆ—čĄ¨å¤ąæ•— -MANAGE_BUCKET_GET_LIST_FAIL_MSG2: æ­Ŗåœ¨åžŒå°į˛å–æĒ”æĄˆåˆ—čĄ¨īŧŒčĢ‹å‹ŋ切換頁éĸ -MANAGE_BUCKET_GET_LIST_FAIL_MSG3: æ­Ŗåœ¨čŧ‰å…ĨæĒ”æĄˆåˆ—čĄ¨īŧŒčĢ‹į¨åžŒå†čŠĻ -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE: įĸē厚čρ䏋čŧ‰čŠ˛čŗ‡æ–™å¤žå—ŽīŧŸ -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP: 提į¤ē -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM: įĸē厚 -MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL: 取æļˆ -MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS: į˛å–ä¸‹čŧ‰åˆ—čĄ¨æˆåŠŸ -MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL: į˛å–å¤ąæ•— -MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL: åˇ˛å–æļˆ -MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE: čĢ‹čŧ¸å…Ĩčŗ‡æ–™å¤žåį¨ą -MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP: 新åģēčŗ‡æ–™å¤ž -MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM: įĸē厚 -MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL: 取æļˆ -MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG: čŗ‡æ–™å¤žåį¨ąåĒčƒŊ包åĢä¸­æ–‡ã€č‹ąæ–‡ã€æ•¸å­—ã€ä¸‹åŠƒįˇšå’Œæ–œįˇš -MANAGE_BUCKET_CREATE_FOLDER_SUCCESS: å‰ĩåģ翈åŠŸīŧŒčĢ‹åˆˇæ–° -MANAGE_BUCKET_CREATE_FOLDER_FAIL: å‰ĩåģēå¤ąæ•— -MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ: čĢ‹čŧ¸å…Ĩæœ‰æ•ˆįš„URL -MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE: 提į¤ē -MANAGE_BUCKET_UPLOAD_URL_NOT_MSG: 開始垌台下čŧ‰īŧŒæˆåŠŸåžŒč‡Ēå‹•ä¸Šå‚ŗ -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG: čĢ‹čŧ¸å…ĨåŒšé…å­—ä¸˛ -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2: æ˛’æœ‰åŒšé…åˆ°æĒ”æĄˆ -MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3: æ˛’æœ‰éœ€čĻé‡å‘Ŋåįš„æĒ”æĄˆ -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A: æĒĸæ¸Ŧ到有 -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B: 個æĒ”æĄˆé‡č¤‡īŧŒæ˜¯åĻįšŧįēŒ -MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C: 提į¤ē -MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM: įĸē厚 -MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL: 取æļˆ -MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A: 重å‘Ŋ名成功 -MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B: å¤ąæ•— -MANAGE_BUCKET_BATCH_RENAME_CANCEL: åˇ˛å–æļˆ -MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG: čĢ‹å…ˆé¸æ“‡æĒ”æĄˆ -MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A: 厞複čŖŊ -MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B: 個æĒ”æĄˆčŗ‡č¨Š -MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG: čĢ‹å…ˆé¸æ“‡æĒ”æĄˆ -MANAGE_BUCKET_BATCH_COPY_URL_MSG_A: 厞複čŖŊ -MANAGE_BUCKET_BATCH_COPY_URL_MSG_B: 個逪įĩ -MANAGE_BUCKET_CANCEL_LOADING_TITLE: 是åĻ停æ­ĸį˛å–æĒ”æĄˆåˆ—čĄ¨īŧŸ -MANAGE_BUCKET_CANCEL_LOADING_MSG: 提į¤ē -MANAGE_BUCKET_CANCEL_LOADING_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_CANCEL_LOADING_CANCEL: 取æļˆ -MANAGE_BUCKET_CANCEL_LOADING_SUCCESS: 文äģļåˆ—čĄ¨čŽˇå–åˇ˛åœæ­ĸ -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE: 是åĻ停æ­ĸ下čŊŊ文äģļčŽˇå–? -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG: 提į¤ē -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL: 取æļˆ -MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS: 下čŊŊ文äģļčŽˇå–åˇ˛åœæ­ĸ -MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE: 提į¤ē -MANAGE_BUCKET_GET_FILE_BS_NOT_MSG: čŽˇå–æ–‡äģļåˆ—čĄ¨æˆåŠŸ -MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2: 部分文äģļčŽˇå–å¤ąč´Ĩ -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A: 将永䚅删除 -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B: ä¸Ē文äģļīŧŒæ˜¯åĻįģ§įģ­? -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG: 提į¤ē -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL: 取æļˆ -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE: 提į¤ē -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG: åˆ é™¤å¤ąč´Ĩ MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: 删除成功 -MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3: å¤ąč´Ĩ -MANAGE_BUCKET_BATCH_DELETE_CANCEL: åˇ˛å–æļˆåˆ é™¤ -MANAGE_BUCKET_DELETE_CONFIRM_TITLE: 将永䚅删除 -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER: 文äģļ多 -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A: 和č¯Ĩį›ŽåŊ•ä¸‹įš„æ‰€æœ‰æ–‡äģļ -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE: 文äģļ -MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C: 是åĻįģ§įģ­ -MANAGE_BUCKET_DELETE_CONFIRM_MSG: 提į¤ē -MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM: įĄŽåŽš -MANAGE_BUCKET_DELETE_CONFIRM_CANCEL: 取æļˆ -MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE: 提į¤ē -MANAGE_BUCKET_DELETE_ERROR_MSG_MSG: 删除文äģļ多可čƒŊ需čρ䏀æŽĩæ—ļ间īŧŒč¯ˇč€åŋƒį­‰åž… -MANAGE_BUCKET_DELETE_SUCCESS: åˆĒ除成功 -MANAGE_BUCKET_DELETE_FAIL: åˆĒé™¤å¤ąæ•— -MANAGE_BUCKET_DELETE_CANCEL: åˇ˛å–æļˆåˆ é™¤ -MANAGE_BUCKET_RENAME_INFO_MSG: 新文äģļ名和原文äģļåį›¸åŒīŧŒį„Ąéœ€é‡å‘Ŋ名 -MANAGE_BUCKET_RENAME_SUCCESS: 重å‘Ŋ名成功 -MANAGE_BUCKET_RENAME_ERROR_MSG: 重å‘Ŋåå¤ąæ•— -MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME: 厌成時間 -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS: į‹€æ…‹ -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS: 成功 -MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL: å¤ąæ•— -MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH: ä¸Šå‚ŗčˇ¯åž‘ -MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME: 厌成時間 -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS: į‹€æ…‹ -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS: 成功 -MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL: å¤ąæ•— -MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS: 進åēĻ -MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS: 進åēĻ -MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE: 大小 -MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM: 文äģļæ•¸ -MANAGE_BUCKET_FILE_COLUMN_FILENAME: 文äģļ名 -MANAGE_BUCKET_FILE_COLUMN_COPY_URL: 複čŖŊ鏈æŽĨ -MANAGE_BUCKET_FILE_COLUMN_INFO: 文äģļäŋĄæ¯ -MANAGE_BUCKET_FILE_COLUMN_FILESIZE: 大小 -MANAGE_BUCKET_FILE_COLUMN_TIME: äŋŽæ”𿙂間 -MANAGE_NEW_BUCKET_TCYUN_NAME: č…žčŽ¯é›˛ -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC: Bucketåį¨ą -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER: čĢ‹čŧ¸å…ĨBucketåį¨ą -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A: Bucketåį¨ąä¸čƒŊį‚ēįŠē -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B: Bucketåį¨ąé•ˇåēĻ不čƒŊčļ…過23個字įŦĻ -MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C: Bucketåį¨ąåĒčƒŊ包åĢ小å¯Ģ字母、數字和中æŠĢ᎚īŧŒä¸”不čƒŊäģĨ中æŠĢįˇšé–‹é ­å’Œįĩå°ž -MANAGE_NEW_BUCKET_TCYUN_REGION: 區域 -MANAGE_NEW_BUCKET_TCYUN_ACL_DESC: č¨Ē問æŦŠé™ -MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW: å…Ŧå…ąčŽ€å¯Ģ -MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R: å…Ŧå…ąčŽ€ -MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE: į§æœ‰ -MANAGE_NEW_BUCKET_ALIYUN_NAME: é˜ŋ里雲 -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC: Bucketåį¨ą -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER: čĢ‹čŧ¸å…ĨBucketåį¨ą -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A: Bucketåį¨ąä¸čƒŊį‚ēįŠē -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B: Bucketåį¨ąé•ˇåēĻ不čƒŊčļ…過63個字įŦĻ -MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C: Bucketåį¨ąåĒčƒŊ包åĢ小å¯Ģ字母、數字和中æŠĢ᎚īŧŒä¸”不čƒŊäģĨ中æŠĢįˇšé–‹é ­å’Œįĩå°ž -MANAGE_NEW_BUCKET_ALIYUN_REGION: 區域 -MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC: č¨Ē問æŦŠé™ -MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW: å…Ŧå…ąčŽ€å¯Ģ -MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R: å…Ŧå…ąčŽ€ -MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE: į§æœ‰ -MANAGE_NEW_BUCKET_QINIU_NAME: ä¸ƒį‰›é›˛ -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC: Bucketåį¨ą -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER: čĢ‹čŧ¸å…ĨBucketåį¨ą -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A: Bucketåį¨ąä¸čƒŊį‚ēįŠē -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B: Bucketåį¨ąé•ˇåēĻ不čƒŊčļ…過63個字įŦĻ -MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C: Bucketåį¨ąåĒčƒŊ包åĢ小å¯Ģ字母、數字和中æŠĢ᎚īŧŒä¸”不čƒŊäģĨ中æŠĢįˇšé–‹é ­å’Œįĩå°ž -MANAGE_NEW_BUCKET_QINIU_REGION: 區域 -MANAGE_NEW_BUCKET_QINIU_ACL_DESC: å…Ŧ開č¨Ē問 -MANAGE_NEW_BUCKET_S3PLIST_NAME: S3å…ŧåŽšé›˛ -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC: Bucketåį¨ą -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER: čĢ‹čŧ¸å…ĨBucketåį¨ą -MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A: Bucketåį¨ąä¸čƒŊį‚ēįŠē -MANAGE_NEW_BUCKET_S3PLIST_REGION: 區域 -MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC: č¨Ē問æŦŠé™ -MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW: å…Ŧå…ąčŽ€å¯Ģ -MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R: å…Ŧå…ąčŽ€ -MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE: į§æœ‰ -MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ: 授æŦŠčŽ€ PLUGIN_INSTALL_FAILED: 插äģļåŽ‰čŖå¤ąæ•— PLUGIN_UNINSTALL_FAILED: 插äģļ卸čŧ‰å¤ąæ•— -PLUGIN_UPDATE_SUCCEED: 插äģļæ›´æ–°æˆåŠŸ PLUGIN_UPDATE_FAILED: 插äģļæ›´æ–°å¤ąæ•— PLUGIN_IMPORT_SUCCEED: 插äģļ導å…Ĩ成功 PLUGIN_IMPORT_FAILED: 插äģļ導å…Ĩå¤ąæ•— diff --git a/scripts/find-unused-i18n.js b/scripts/find-unused-i18n.js deleted file mode 100644 index 9d6e8f52..00000000 --- a/scripts/find-unused-i18n.js +++ /dev/null @@ -1,500 +0,0 @@ -#!/usr/bin/env node - -import { readdirSync, readFileSync, writeFileSync } from 'node:fs' -import { basename, dirname, extname, join, relative } from 'node:path' -import { fileURLToPath } from 'node:url' - -import { dump, load } from 'js-yaml' - -const __filename = fileURLToPath(import.meta.url) -const __dirname = dirname(__filename) - -const LOCALE_DIR = join(__dirname, '../public/i18n') -const SRC_DIR = join(__dirname, '../src') - -// Parse command line arguments -const args = process.argv.slice(2) -const isVerbose = args.includes('--verbose') || args.includes('-v') -const shouldDelete = args.includes('--delete') || args.includes('-d') -const isDryRun = args.includes('--dry-run') - -const colors = { - reset: '\x1b[0m', - bright: '\x1b[1m', - red: '\x1b[31m', - green: '\x1b[32m', - yellow: '\x1b[33m', - blue: '\x1b[34m', - magenta: '\x1b[35m', - cyan: '\x1b[36m' -} - -function colorize (text, color) { - return `${colors[color]}${text}${colors.reset}` -} - -console.log(`\n🔍 Analyzing i18n keys in ${LOCALE_DIR} and source files in ${SRC_DIR}`) -if (shouldDelete) { - console.log(colorize(`đŸ—‘ī¸ Delete mode enabled ${isDryRun ? '(DRY RUN)' : ''}`, 'yellow')) -} -console.log('') - -function flattenKeys (obj, prefix = '') { - const keys = [] - - for (const [key, value] of Object.entries(obj)) { - const fullKey = prefix ? `${prefix}.${key}` : key - - if (typeof value === 'object' && value !== null && !Array.isArray(value)) { - keys.push(...flattenKeys(value, fullKey)) - } else { - keys.push(fullKey) - } - } - - return keys -} - -function readLocaleFile (filePath) { - try { - const content = readFileSync(filePath, 'utf8') - return load(content) || {} - } catch (error) { - console.error(colorize(`Error reading ${filePath}: ${error.message}`, 'red')) - return {} - } -} - -function getAllI18nKeys () { - const localeFiles = readdirSync(LOCALE_DIR).filter(file => file.endsWith('.yml')) - const allKeys = new Set() - const localeData = {} - - console.log(colorize('\n📁 Found locale files:', 'blue')) - - for (const file of localeFiles) { - const filePath = join(LOCALE_DIR, file) - const locale = basename(file, '.yml') - const data = readLocaleFile(filePath) - const keys = flattenKeys(data) - - localeData[locale] = { - file: filePath, - keys, - data - } - - keys.forEach(key => allKeys.add(key)) - - console.log(` ${colorize('✓', 'green')} ${file} (${keys.length} keys)`) - } - - return { - allKeys: Array.from(allKeys).sort(), - localeData - } -} - -function findFiles (dir, extensions = ['.vue', '.ts', '.js']) { - const files = [] - - function walk (currentDir) { - try { - const entries = readdirSync(currentDir, { withFileTypes: true }) - - for (const entry of entries) { - const fullPath = join(currentDir, entry.name) - - if (entry.isDirectory()) { - if (!['node_modules', '.git', 'dist', 'build', 'target', 'dist_electron'].includes(entry.name)) { - walk(fullPath) - } - } else if (entry.isFile()) { - const ext = extname(entry.name) - if (extensions.includes(ext)) { - files.push(fullPath) - } - } - } - } catch (error) { - console.warn(colorize(`Warning: Cannot read directory ${currentDir}: ${error.message}`, 'yellow')) - } - } - - walk(dir) - return files -} - -function findKeyUsage (keys) { - const usage = {} - const dynamicPatterns = [] - - keys.forEach(key => { - usage[key] = { - used: false, - files: [], - patterns: [], - dynamicMatch: false - } - }) - - console.log(colorize('\n🔍 Searching for key usage in source files...', 'blue')) - - const sourceFiles = findFiles(SRC_DIR) - - console.log(` Found ${sourceFiles.length} source files to analyze`) - - const searchPatterns = [ - /\$T\s*\(\s*['"`]([^'"`]+)['"`]/g, - /(?:^|[^a-zA-Z$])T\s*\(\s*['"`]([^'"`]+)['"`]/g, - /\{\{\s*\$T\s*\(\s*['"`]([^'"`]+)['"`]/g, - /i18nManager\.T\s*\(\s*['"`]([^'"`]+)['"`]/g - ] - - const dynamicPattern = /\$T\s*\(\s*`([^`]*\$\{[^}]+\}[^`]*)`/g - - sourceFiles.forEach(filePath => { - try { - const content = readFileSync(filePath, 'utf8') - const relativePath = relative(join(__dirname, '..'), filePath) - - searchPatterns.forEach((pattern, patternIndex) => { - let match - while ((match = pattern.exec(content)) !== null) { - const key = match[1] - if (usage[key]) { - usage[key].used = true - if (!usage[key].files.includes(relativePath)) { - usage[key].files.push(relativePath) - } - if (!usage[key].patterns.includes(patternIndex)) { - usage[key].patterns.push(patternIndex) - } - } - } - }) - - let dynamicMatch - while ((dynamicMatch = dynamicPattern.exec(content)) !== null) { - const templateString = dynamicMatch[1] - - const staticParts = templateString.split(/\$\{[^}]+\}/) - - const patternInfo = { - template: templateString, - file: relativePath, - staticParts - } - - if (!dynamicPatterns.some(p => p.template === templateString && p.file === relativePath)) { - dynamicPatterns.push(patternInfo) - } - - keys.forEach(key => { - if (matchesDynamicPattern(key, staticParts)) { - if (usage[key]) { - usage[key].used = true - usage[key].dynamicMatch = true - if (!usage[key].files.includes(relativePath)) { - usage[key].files.push(relativePath) - } - if (!usage[key].patterns.includes('dynamic')) { - usage[key].patterns.push('dynamic') - } - } - } - }) - } - } catch (error) { - console.error(colorize(`Error reading ${filePath}: ${error.message}`, 'red')) - } - }) - - usage._dynamicPatterns = dynamicPatterns - - return usage -} - -function matchesDynamicPattern (key, staticParts) { - if (staticParts.length === 0) return false - - let keyIndex = 0 - - for (let i = 0; i < staticParts.length; i++) { - const part = staticParts[i] - - if (part === '') { - if (i < staticParts.length - 1) { - const nextPart = staticParts[i + 1] - if (nextPart) { - const nextIndex = key.indexOf(nextPart, keyIndex) - if (nextIndex === -1) return false - keyIndex = nextIndex - } - } - continue - } - - if (i === 0) { - if (!key.startsWith(part)) return false - keyIndex = part.length - } else if (i === staticParts.length - 1) { - if (part && !key.endsWith(part)) return false - } else { - const index = key.indexOf(part, keyIndex) - if (index === -1) return false - keyIndex = index + part.length - } - } - - return true -} - -function findLocaleInconsistencies (localeData) { - const locales = Object.keys(localeData) - const inconsistencies = {} - - if (locales.length < 2) { - return inconsistencies - } - - locales.forEach(locale => { - const currentKeys = new Set(localeData[locale].keys) - inconsistencies[locale] = { - missing: [], - extra: [] - } - - locales.forEach(otherLocale => { - if (locale !== otherLocale) { - localeData[otherLocale].keys.forEach(key => { - if (!currentKeys.has(key) && !inconsistencies[locale].missing.includes(key)) { - inconsistencies[locale].missing.push(key) - } - }) - } - }) - - localeData[locale].keys.forEach(key => { - const existsInOthers = locales.some( - otherLocale => locale !== otherLocale && localeData[otherLocale].keys.includes(key) - ) - if (!existsInOthers) { - inconsistencies[locale].extra.push(key) - } - }) - }) - - return inconsistencies -} - -function deleteUnusedKeys (unusedKeys, localeData, isDryRun = false) { - const results = {} - - Object.entries(localeData).forEach(([locale, data]) => { - results[locale] = { - deleted: [], - errors: [] - } - - try { - const updatedData = { ...data.data } - - unusedKeys.forEach(key => { - if (key in updatedData) { - if (!isDryRun) { - delete updatedData[key] - } - results[locale].deleted.push(key) - } - }) - - if (!isDryRun && results[locale].deleted.length > 0) { - const yamlContent = dump(updatedData, { - indent: 2, - lineWidth: -1, - noRefs: true, - sortKeys: false - }) - writeFileSync(data.file, yamlContent, 'utf8') - } - } catch (error) { - results[locale].errors.push(`Failed to process ${locale}: ${error.message}`) - } - }) - - return results -} - -function main () { - console.log(colorize('🌐 PicList - I18n Usage Analyzer', 'cyan')) - console.log(colorize('==================================', 'cyan')) - - const { allKeys, localeData } = getAllI18nKeys() - - console.log(colorize(`\n📊 Total unique keys found: ${allKeys.length}`, 'yellow')) - const usage = findKeyUsage(allKeys) - const dynamicPatterns = usage._dynamicPatterns || [] - delete usage._dynamicPatterns - - const usedKeys = allKeys.filter(key => usage[key].used) - const unusedKeys = allKeys.filter(key => !usage[key].used) - const dynamicallyUsedKeys = usedKeys.filter(key => usage[key].dynamicMatch) - const staticUsedKeys = usedKeys.filter(key => !usage[key].dynamicMatch) - - const inconsistencies = findLocaleInconsistencies(localeData) - - console.log(colorize('\n📈 Usage Summary:', 'blue')) - console.log(` ${colorize('✓', 'green')} Used keys: ${usedKeys.length}`) - console.log(` ${colorize('→', 'cyan')} Static usage: ${staticUsedKeys.length}`) - console.log(` ${colorize('→', 'magenta')} Dynamic usage: ${dynamicallyUsedKeys.length}`) - console.log(` ${colorize('✗', 'red')} Unused keys: ${unusedKeys.length}`) - console.log(` ${colorize('📊', 'yellow')} Usage rate: ${((usedKeys.length / allKeys.length) * 100).toFixed(1)}%`) - - if (dynamicPatterns.length > 0) { - console.log(colorize('\n🔮 Dynamic I18n Patterns Detected:', 'magenta')) - console.log(colorize('===================================', 'magenta')) - - dynamicPatterns.forEach((pattern, index) => { - console.log(colorize(`\n${index + 1}. Template: \`${pattern.template}\``, 'cyan')) - console.log(` File: ${pattern.file}`) - console.log(` Static parts: [${pattern.staticParts.map(p => `"${p}"`).join(', ')}]`) - - const matchingKeys = allKeys.filter(key => matchesDynamicPattern(key, pattern.staticParts)) - if (matchingKeys.length > 0) { - console.log( - ` ${colorize('Matches', 'green')} (${matchingKeys.length}): ${matchingKeys.slice(0, 5).join(', ')}${ - matchingKeys.length > 5 ? '...' : '' - }` - ) - } - }) - } - - if (unusedKeys.length > 0) { - console.log(colorize('\nđŸ—‘ī¸ Unused I18n Keys:', 'red')) - console.log(colorize('====================', 'red')) - - const groupedUnused = {} - unusedKeys.forEach(key => { - const namespace = key.includes('.') ? key.split('.')[0] : 'ROOT' - if (!groupedUnused[namespace]) { - groupedUnused[namespace] = [] - } - groupedUnused[namespace].push(key) - }) - - Object.entries(groupedUnused).forEach(([namespace, keys]) => { - console.log(colorize(`\n[${namespace}] - ${keys.length} unused keys:`, 'yellow')) - keys.forEach(key => { - console.log(` ${colorize('✗', 'red')} ${key}`) - }) - }) - } else { - console.log(colorize('\n🎉 No unused keys found! All i18n keys are being used.', 'green')) - } - - const hasInconsistencies = Object.values(inconsistencies).some(inc => inc.missing.length > 0 || inc.extra.length > 0) - - if (hasInconsistencies) { - console.log(colorize('\nâš ī¸ Locale Inconsistencies:', 'yellow')) - console.log(colorize('=========================', 'yellow')) - - Object.entries(inconsistencies).forEach(([locale, data]) => { - if (data.missing.length > 0 || data.extra.length > 0) { - console.log(colorize(`\n[${locale}.yml]:`, 'cyan')) - - if (data.missing.length > 0) { - console.log(colorize(` Missing ${data.missing.length} keys:`, 'red')) - data.missing.forEach(key => { - console.log(` ${colorize('✗', 'red')} ${key}`) - }) - } - - if (data.extra.length > 0) { - console.log(colorize(` Extra ${data.extra.length} keys:`, 'blue')) - data.extra.forEach(key => { - console.log(` ${colorize('!', 'blue')} ${key}`) - }) - } - } - }) - } - - if (isVerbose) { - console.log(colorize('\n📋 Sample Used Keys (first 10):', 'blue')) - console.log(colorize('=================================', 'blue')) - - usedKeys.slice(0, 10).forEach(key => { - const files = usage[key].files.slice(0, 3) - const moreFiles = usage[key].files.length > 3 ? ` (+${usage[key].files.length - 3} more)` : '' - const usageType = usage[key].dynamicMatch ? colorize('(dynamic)', 'magenta') : colorize('(static)', 'cyan') - console.log(` ${colorize('✓', 'green')} ${key} ${usageType}`) - console.log(` Used in: ${files.join(', ')}${moreFiles}`) - }) - - if (dynamicallyUsedKeys.length > 0) { - console.log(colorize('\n🔮 Dynamic Key Usage Details:', 'magenta')) - console.log(colorize('=============================', 'magenta')) - - dynamicallyUsedKeys.slice(0, 5).forEach(key => { - const files = usage[key].files.slice(0, 2) - console.log(` ${colorize('✨', 'magenta')} ${key}`) - console.log(` Files: ${files.join(', ')}`) - }) - - if (dynamicallyUsedKeys.length > 5) { - console.log(` ... and ${dynamicallyUsedKeys.length - 5} more dynamic keys`) - } - } - } - - if (shouldDelete && unusedKeys.length > 0) { - console.log(colorize('\nđŸ—‘ī¸ Deleting Unused Keys:', 'yellow')) - console.log(colorize('=========================', 'yellow')) - - if (isDryRun) { - console.log(colorize('🔍 DRY RUN MODE - No files will be modified', 'cyan')) - } - - const deletionResults = deleteUnusedKeys(unusedKeys, localeData, isDryRun) - - Object.entries(deletionResults).forEach(([locale, result]) => { - console.log(colorize(`\n[${locale}.yml]:`, 'cyan')) - if (result.deleted.length > 0) { - console.log(colorize(` Deleted ${result.deleted.length} keys:`, 'green')) - result.deleted.forEach(key => { - console.log(` ${colorize('✓', 'green')} ${key}`) - }) - } - if (result.errors.length > 0) { - console.log(colorize(` Errors ${result.errors.length}:`, 'red')) - result.errors.forEach(error => { - console.log(` ${colorize('✗', 'red')} ${error}`) - }) - } - }) - - if (!isDryRun) { - console.log(colorize('\n✨ Deletion complete! Remember to regenerate type definitions.', 'green')) - console.log(colorize('💡 Run `yarn i18n` to update TypeScript types', 'blue')) - } - } - - console.log(colorize('\n✨ Analysis complete!', 'cyan')) - - if (unusedKeys.length > 0 && !shouldDelete) { - console.log(colorize('\n💡 Tips:', 'blue')) - console.log(colorize('- Run with --verbose (-v) flag to see usage details of used keys', 'blue')) - console.log(colorize('- Run with --delete (-d) flag to automatically remove unused keys', 'blue')) - console.log(colorize('- Run with --delete --dry-run to preview what would be deleted', 'blue')) - } else if (unusedKeys.length === 0) { - console.log(colorize('\n💡 Tip: Run with --verbose (-v) flag to see usage details of used keys', 'blue')) - } - - if (unusedKeys.length > 0 && !shouldDelete) { - process.exit(1) - } -} - -main() diff --git a/scripts/gen-i18n-types.js b/scripts/gen-i18n-types.js index 15adba71..edaae6c6 100644 --- a/scripts/gen-i18n-types.js +++ b/scripts/gen-i18n-types.js @@ -8,7 +8,7 @@ const languageFileName = 'zh-CN.yml' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) -const i18nFolder = join(__dirname, '../public/i18n') +const i18nFolder = join(__dirname, '../resources/i18n') const typeFolder = join(__dirname, '../src/universal/types') const languageFile = join(i18nFolder, languageFileName) diff --git a/scripts/yamltojson.js b/scripts/yamltojson.js new file mode 100644 index 00000000..6bdd8689 --- /dev/null +++ b/scripts/yamltojson.js @@ -0,0 +1,27 @@ +// convert-yaml-to-json.mjs +import fs from 'node:fs/promises' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +import yaml from 'js-yaml' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +// Change these paths as needed +const inputPath = path.resolve('./resources/i18n/zh-TW.yml') +const outputPath = path.resolve(__dirname, './zh-TW.json') + +async function convertYamlToJson (yamlFile, jsonFile) { + try { + const fileContent = await fs.readFile(yamlFile, 'utf8') + const data = yaml.load(fileContent) + const jsonContent = JSON.stringify(data, null, 2) + await fs.writeFile(jsonFile, jsonContent, 'utf8') + console.log(`Converted ${yamlFile} to ${jsonFile}`) + } catch (err) { + console.error('Error during conversion:', err) + } +} + +convertYamlToJson(inputPath, outputPath) diff --git a/src/main/apis/app/system/index.ts b/src/main/apis/app/system/index.ts index b8e5f874..e04afd03 100644 --- a/src/main/apis/app/system/index.ts +++ b/src/main/apis/app/system/index.ts @@ -22,7 +22,7 @@ import { IPasteStyle, IWindowList } from '#/types/enum' import { IBounds, ImgInfo } from '#/types/types' import { configPaths } from '#/utils/configPaths' import { buildPicBedListMenu } from '~/events/remotes/menu' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' import clipboardPoll from '~/utils/clipboardPoll' import { ensureFilePath, handleCopyUrl, setTray, tray } from '~/utils/common' import { isMacOSVersionGreaterThanOrEqualTo } from '~/utils/getMacOSVersion' @@ -40,11 +40,11 @@ export function setDockMenu () { const isListeningClipboard = db.get(configPaths.settings.isListeningClipboard) || false const dockMenu = Menu.buildFromTemplate([ { - label: T('OPEN_MAIN_WINDOW'), + label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow }, { - label: T('START_WATCH_CLIPBOARD'), + label: $t('START_WATCH_CLIPBOARD'), click () { db.set(configPaths.settings.isListeningClipboard, true) clipboardPoll.startListening() @@ -57,7 +57,7 @@ export function setDockMenu () { visible: !isListeningClipboard }, { - label: T('STOP_WATCH_CLIPBOARD'), + label: $t('STOP_WATCH_CLIPBOARD'), click () { db.set(configPaths.settings.isListeningClipboard, false) clipboardPoll.stopListening() @@ -76,9 +76,9 @@ export function createMenu () { { label: 'PicList', submenu: [ - { label: T('OPEN_MAIN_WINDOW'), click: openMainWindow }, + { label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow }, { - label: T('RELOAD_APP'), + label: $t('RELOAD_APP'), click () { app.relaunch() app.exit(0) @@ -86,7 +86,7 @@ export function createMenu () { } ] }, - { label: T('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu }, + { label: $t('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu }, { label: 'Edit', submenu: [ @@ -100,8 +100,8 @@ export function createMenu () { ] }, { - label: T('QUIT'), - submenu: [{ label: T('QUIT'), role: 'quit' }] + label: $t('QUIT'), + submenu: [{ label: $t('QUIT'), role: 'quit' }] } ]) Menu.setApplicationMenu(appMenu) @@ -133,40 +133,40 @@ export function createContextMenu () { if (process.platform === 'darwin' || process.platform === 'win32') { const submenu = buildPicBedListMenu() const template: (MenuItemConstructorOptions | MenuItem)[] = [ - { label: T('OPEN_MAIN_WINDOW'), click: openMainWindow }, - { label: T('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu }, + { label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow }, + { label: $t('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu }, { - label: T('START_WATCH_CLIPBOARD'), + label: $t('START_WATCH_CLIPBOARD'), click: startWatchClipboard, visible: !isListeningClipboard }, { - label: T('STOP_WATCH_CLIPBOARD'), + label: $t('STOP_WATCH_CLIPBOARD'), click: stopWatchClipboard, visible: isListeningClipboard }, { - label: T('RELOAD_APP'), + label: $t('RELOAD_APP'), click () { app.relaunch() app.exit(0) } }, - { label: T('QUIT'), role: 'quit' } + { label: $t('QUIT'), role: 'quit' } ] if (process.platform === 'win32') { template.splice( 2, 0, { - label: T('OPEN_MINI_WINDOW'), + label: $t('OPEN_MINI_WINDOW'), click () { openMiniWindow(false) }, visible: !isMiniWindowVisible }, { - label: T('HIDE_MINI_WINDOW'), + label: $t('HIDE_MINI_WINDOW'), click: hideMiniWindow, visible: isMiniWindowVisible } @@ -182,31 +182,31 @@ export function createContextMenu () { // į›Žå‰įš„åŽžįŽ°æ— æŗ•æ­Ŗå¸¸åˇĨäŊœ contextMenu = Menu.buildFromTemplate([ - { label: T('OPEN_MAIN_WINDOW'), click: openMainWindow }, + { label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow }, { - label: T('OPEN_MINI_WINDOW'), + label: $t('OPEN_MINI_WINDOW'), click () { openMiniWindow(false) }, visible: !isMiniWindowVisible }, { - label: T('HIDE_MINI_WINDOW'), + label: $t('HIDE_MINI_WINDOW'), click: hideMiniWindow, visible: isMiniWindowVisible }, { - label: T('START_WATCH_CLIPBOARD'), + label: $t('START_WATCH_CLIPBOARD'), click: startWatchClipboard, visible: !isListeningClipboard }, { - label: T('STOP_WATCH_CLIPBOARD'), + label: $t('STOP_WATCH_CLIPBOARD'), click: stopWatchClipboard, visible: isListeningClipboard }, { - label: T('ABOUT'), + label: $t('ABOUT'), click () { dialog.showMessageBox({ title: 'PicList', @@ -216,7 +216,7 @@ export function createContextMenu () { }) } }, - { label: T('QUIT'), role: 'quit' } + { label: $t('QUIT'), role: 'quit' } ]) } } @@ -343,7 +343,7 @@ export function createTray (tooltip: string) { : !!db.get(configPaths.settings.uploadResultNotification) if (isShowResultNotification) { const notification = new Notification({ - title: T('UPLOAD_SUCCEED'), + title: $t('UPLOAD_SUCCEED'), body: shortUrl || imgs[i].imgUrl! // icon: files[i] }) diff --git a/src/main/apis/app/uploader/apis.ts b/src/main/apis/app/uploader/apis.ts index ee92edf5..6af03269 100644 --- a/src/main/apis/app/uploader/apis.ts +++ b/src/main/apis/app/uploader/apis.ts @@ -10,7 +10,7 @@ import { IPicGo } from 'piclist' import { IPasteStyle, IWindowList } from '#/types/enum' import { IFileWithPath, ImgInfo, IStringKeyMap, IUploadOption } from '#/types/types' import { configPaths } from '#/utils/configPaths' -import { T } from '~/i18n/index' +import { T as $t } from '~/i18n/index' import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/utils/common' import { changeCurrentUploader } from '~/utils/handleUploaderConfig' import pasteTemplate from '~/utils/pasteTemplate' @@ -61,7 +61,7 @@ export const uploadClipboardFiles = async (): Promise => { : !!db.get(configPaths.settings.uploadResultNotification) if (isShowResultNotification) { const notification = new Notification({ - title: T('UPLOAD_SUCCEED'), + title: $t('UPLOAD_SUCCEED'), body: shortUrl || img[0].imgUrl! // icon: img[0].imgUrl }) @@ -82,8 +82,8 @@ export const uploadClipboardFiles = async (): Promise => { } } else { const notification = new Notification({ - title: T('UPLOAD_FAILED'), - body: T('TIPS_UPLOAD_NOT_PICTURES') + title: $t('UPLOAD_FAILED'), + body: $t('TIPS_UPLOAD_NOT_PICTURES') }) notification.show() return { @@ -141,7 +141,7 @@ export const uploadChoosedFiles = async ( : !!db.get(configPaths.settings.uploadResultNotification) if (isShowResultNotification) { const notification = new Notification({ - title: T('UPLOAD_SUCCEED'), + title: $t('UPLOAD_SUCCEED'), body: shortUrl || imgs[i].imgUrl! // icon: files[i].path }) diff --git a/src/main/apis/app/uploader/index.ts b/src/main/apis/app/uploader/index.ts index c2ee7dd5..06ebcd85 100644 --- a/src/main/apis/app/uploader/index.ts +++ b/src/main/apis/app/uploader/index.ts @@ -11,13 +11,13 @@ import fs from 'fs-extra' import { IPicGo } from 'piclist' import writeFile from 'write-file-atomic' -import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME, TALKING_DATA_EVENT } from '#/events/constants' +import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME } from '#/events/constants' import { ICOREBuildInEvent, IWindowList } from '#/types/enum' -import { IAnalyticsData, ImgInfo, ITalkingDataOptions, IUploadOption } from '#/types/types' +import { ImgInfo, IUploadOption } from '#/types/types' import { configPaths } from '#/utils/configPaths' import { CLIPBOARD_IMAGE_FOLDER } from '#/utils/static' -import { T } from '~/i18n' -import { calcDurationRange, getClipboardFilePath, showNotification } from '~/utils/common' +import { T as $t } from '~/i18n' +import { getClipboardFilePath, showNotification } from '~/utils/common' const waitForRename = (window: BrowserWindow, id: number): Promise => { return new Promise(resolve => { @@ -33,21 +33,6 @@ const waitForRename = (window: BrowserWindow, id: number): Promise { - const { type, fromClipboard, count, duration } = options - const data: ITalkingDataOptions = { - EventId: 'upload', - Label: type, - MapKv: { - by: fromClipboard ? 'clipboard' : 'files', - count, - duration: calcDurationRange(duration || 0), - type - } - } - webContents.send(TALKING_DATA_EVENT, data) -} - class Uploader { private webContents: WebContents | null = null @@ -67,8 +52,8 @@ class Uploader { picgo.on(ICOREBuildInEvent.BEFORE_TRANSFORM, () => { if (db.get(configPaths.settings.uploadNotification)) { const notification = new Notification({ - title: T('UPLOAD_PROGRESS'), - body: T('UPLOADING') + title: $t('UPLOAD_PROGRESS'), + body: $t('UPLOADING') }) notification.show() } @@ -164,19 +149,9 @@ class Uploader { async uploadReturnCtx (img?: IUploadOption, skipProcess = false): Promise { try { - const startTime = Date.now() const ctx = await picgo.uploadReturnCtx(img, skipProcess) if (!Array.isArray(ctx.output) || !ctx.output.some((item: ImgInfo) => item.imgUrl)) return false - if (this.webContents) { - handleTalkingData(this.webContents, { - fromClipboard: !img, - type: db.get(configPaths.picBed.uploader) || db.get(configPaths.picBed.current) || 'smms', - count: img ? img.length : 1, - duration: Date.now() - startTime - } as IAnalyticsData) - } - ctx.output.forEach((item: ImgInfo) => { item.config = JSON.parse(JSON.stringify(db.get(`picBed.${item.type}`))) }) @@ -186,7 +161,7 @@ class Uploader { logger.error(e) setTimeout(() => { showNotification({ - title: T('UPLOAD_FAILED'), + title: $t('UPLOAD_FAILED'), body: util.format(e.stack), clickToCopy: true }) @@ -199,18 +174,8 @@ class Uploader { async upload (img?: IUploadOption): Promise { try { - const startTime = Date.now() const output = await picgo.upload(img) if (!Array.isArray(output) || !output.some((item: ImgInfo) => item.imgUrl)) return false - - if (this.webContents) { - handleTalkingData(this.webContents, { - fromClipboard: !img, - type: db.get(configPaths.picBed.uploader) || db.get(configPaths.picBed.current) || 'smms', - count: img ? img.length : 1, - duration: Date.now() - startTime - } as IAnalyticsData) - } output.forEach((item: ImgInfo) => { item.config = JSON.parse(JSON.stringify(db.get(`picBed.${item.type}`))) }) @@ -219,7 +184,7 @@ class Uploader { logger.error(e) setTimeout(() => { showNotification({ - title: T('UPLOAD_FAILED'), + title: $t('UPLOAD_FAILED'), body: util.format(e.stack), clickToCopy: true }) diff --git a/src/main/apis/app/window/windowList.ts b/src/main/apis/app/window/windowList.ts index 26f37645..31157ebc 100644 --- a/src/main/apis/app/window/windowList.ts +++ b/src/main/apis/app/window/windowList.ts @@ -10,7 +10,7 @@ import { IWindowListItem } from '#/types/electron' import { IWindowList } from '#/types/enum' import { IBrowserWindowOptions } from '#/types/types' import { configPaths } from '#/utils/configPaths' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' import logo from '../../../../../resources/logo.png?asset' import { @@ -171,7 +171,7 @@ const toolboxWindowOptions = { center: true, fullscreenable: false, resizable: false, - title: `PicList ${T('TOOLBOX')}`, + title: `PicList ${$t('TOOLBOX')}`, vibrancy: 'ultra-dark', icon: logo, webPreferences: { diff --git a/src/main/apis/core/datastore/dbChecker.ts b/src/main/apis/core/datastore/dbChecker.ts index 62e2aab0..25ba211c 100644 --- a/src/main/apis/core/datastore/dbChecker.ts +++ b/src/main/apis/core/datastore/dbChecker.ts @@ -7,7 +7,7 @@ import fs from 'fs-extra' import writeFile from 'write-file-atomic' import { notificationList } from '#/utils/notification' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' const STORE_PATH = app.getPath('userData') @@ -19,8 +19,8 @@ let _configFilePath = '' let hasCheckPath = false const errorMsg = { - broken: T('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'), - brokenButBackup: T('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP') + broken: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'), + brokenButBackup: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP') } function dbChecker () { @@ -41,7 +41,7 @@ function dbChecker () { } let configFile: string = '{}' const optionsTpl = { - title: T('TIPS_NOTICE'), + title: $t('TIPS_NOTICE'), body: '' } // config save bak @@ -58,7 +58,7 @@ function dbChecker () { JSON.parse(configFile) writeFile.sync(configFilePath, configFile, { encoding: 'utf-8' }) const stats = fs.statSync(configFileBackupPath) - optionsTpl.body = `${errorMsg.brokenButBackup}\n${T('TIPS_PICGO_BACKUP_FILE_VERSION', { + optionsTpl.body = `${errorMsg.brokenButBackup}\n${$t('TIPS_PICGO_BACKUP_FILE_VERSION', { v: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss') })}` notificationList.push(optionsTpl) @@ -108,8 +108,8 @@ function dbPathChecker (): string { const logger = getLogger(piclistLogPath, 'PicList') if (!hasCheckPath) { const optionsTpl = { - title: T('TIPS_NOTICE'), - body: T('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR') + title: $t('TIPS_NOTICE'), + body: $t('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR') } notificationList.push(optionsTpl) hasCheckPath = true diff --git a/src/main/apis/core/datastore/index.ts b/src/main/apis/core/datastore/index.ts index 486899b8..4efd72ba 100644 --- a/src/main/apis/core/datastore/index.ts +++ b/src/main/apis/core/datastore/index.ts @@ -4,7 +4,7 @@ import fs from 'fs-extra' import { IConfig } from 'piclist' import { configPaths } from '#/utils/configPaths' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' interface IJSON { [propsName: string]: string | number | IJSON } @@ -37,7 +37,7 @@ class ConfigStore { enable: true, key: 'CommandOrControl+Alt+P', name: 'upload', - label: T('QUICK_UPLOAD') + label: $t('QUICK_UPLOAD') }) } this.read() diff --git a/src/main/apis/gui/index.ts b/src/main/apis/gui/index.ts index d3fb9d3b..211e0c8a 100644 --- a/src/main/apis/gui/index.ts +++ b/src/main/apis/gui/index.ts @@ -12,7 +12,7 @@ import { SHOW_INPUT_BOX } from '#/events/constants' import { IPasteStyle } from '#/types/enum' import { IGuiApi, ImgInfo, IShowFileExplorerOption, IShowInputBoxOption, IShowMessageBoxOption, IShowMessageBoxResult, IShowNotificationOption, IUploadOption } from '#/types/types' import { configPaths } from '#/utils/configPaths' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' import { handleCopyUrl } from '~/utils/common' import pasteTemplate from '~/utils/pasteTemplate' @@ -104,7 +104,7 @@ class GuiApi implements IGuiApi { : !!db.get(configPaths.settings.uploadResultNotification) if (isShowResultNotification) { const notification = new Notification({ - title: T('UPLOAD_SUCCEED'), + title: $t('UPLOAD_SUCCEED'), body: shortUrl || (imgs[i].imgUrl! as string) // icon: imgs[i].imgUrl }) @@ -179,8 +179,8 @@ class GuiApi implements IGuiApi { const guiApi = GuiApi.getInstance() guiApi .showMessageBox({ - title: T('TIPS_WARNING'), - message: T('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'), + title: $t('TIPS_WARNING'), + message: $t('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'), type: 'info', buttons: ['Yes', 'No'] }) @@ -202,8 +202,8 @@ class GuiApi implements IGuiApi { const guiApi = GuiApi.getInstance() guiApi .showMessageBox({ - title: T('TIPS_WARNING'), - message: T('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'), + title: $t('TIPS_WARNING'), + message: $t('TIPS_PLUGIN_REMOVE_GALLERY_ITEM'), type: 'info', buttons: ['Yes', 'No'] }) diff --git a/src/main/events/remotes/menu.ts b/src/main/events/remotes/menu.ts index ca89921a..10cc254e 100644 --- a/src/main/events/remotes/menu.ts +++ b/src/main/events/remotes/menu.ts @@ -18,7 +18,7 @@ import { IWindowList } from '#/types/enum' import { IPicGoPlugin, IUploaderConfig } from '#/types/types' import { configPaths } from '#/utils/configPaths' import { handlePluginUninstall, handlePluginUpdate } from '~/events/rpc/routes/plugin/utils' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' import clipboardPoll from '~/utils/clipboardPoll' import { setTrayToolTip } from '~/utils/common' import getPicBeds from '~/utils/getPicBeds' @@ -36,28 +36,28 @@ const buildMiniPageMenu = () => { const submenu = buildPicBedListMenu() const template: (MenuItemConstructorOptions | MenuItem)[] = [ { - label: T('OPEN_MAIN_WINDOW'), + label: $t('OPEN_MAIN_WINDOW'), click: openMainWindow }, { - label: T('CHOOSE_DEFAULT_PICBED'), + label: $t('CHOOSE_DEFAULT_PICBED'), type: 'submenu', submenu }, { - label: T('UPLOAD_BY_CLIPBOARD'), + label: $t('UPLOAD_BY_CLIPBOARD'), click () { uploadClipboardFiles() } }, { - label: T('HIDE_MINI_WINDOW'), + label: $t('HIDE_MINI_WINDOW'), click () { BrowserWindow.getFocusedWindow()!.hide() } }, { - label: T('START_WATCH_CLIPBOARD'), + label: $t('START_WATCH_CLIPBOARD'), click () { db.set(configPaths.settings.isListeningClipboard, true) ClipboardWatcher.startListening() @@ -70,7 +70,7 @@ const buildMiniPageMenu = () => { visible: !isListeningClipboard }, { - label: T('STOP_WATCH_CLIPBOARD'), + label: $t('STOP_WATCH_CLIPBOARD'), click () { db.set(configPaths.settings.isListeningClipboard, false) ClipboardWatcher.stopListening() @@ -80,7 +80,7 @@ const buildMiniPageMenu = () => { visible: isListeningClipboard }, { - label: T('RELOAD_APP'), + label: $t('RELOAD_APP'), click () { app.relaunch() app.exit(0) @@ -88,7 +88,7 @@ const buildMiniPageMenu = () => { }, { role: 'quit', - label: T('QUIT') + label: $t('QUIT') } ] return Menu.buildFromTemplate(template) @@ -97,7 +97,7 @@ const buildMiniPageMenu = () => { const buildMainPageMenu = (win: BrowserWindow) => { const template = [ { - label: T('ABOUT'), + label: $t('ABOUT'), click () { dialog.showMessageBox({ title: 'PicList', @@ -107,26 +107,26 @@ const buildMainPageMenu = (win: BrowserWindow) => { } }, { - label: T('SHOW_PICBED_QRCODE'), + label: $t('SHOW_PICBED_QRCODE'), click () { win?.webContents?.send(SHOW_MAIN_PAGE_QRCODE) } }, { - label: T('OPEN_TOOLBOX'), + label: $t('OPEN_TOOLBOX'), click () { const window = windowManager.create(IWindowList.TOOLBOX_WINDOW) window?.show() } }, { - label: T('SHOW_DEVTOOLS'), + label: $t('SHOW_DEVTOOLS'), click () { win?.webContents?.openDevTools({ mode: 'detach' }) } }, { - label: T('FEEDBACK'), + label: $t('FEEDBACK'), click () { const url = 'https://github.com/Kuingsmile/PicList/issues' shell.openExternal(url) @@ -144,7 +144,7 @@ const buildSecondPicBedMenu = () => { const picBedConfigList = picgo.getConfig('uploader') const currentPicBedMenuItem = [ { - label: `${T('CURRENT_SECOND_PICBED')} - ${currentPicBedName || 'None'}`, + label: `${$t('CURRENT_SECOND_PICBED')} - ${currentPicBedName || 'None'}`, enabled: false }, { @@ -196,7 +196,7 @@ const buildPicBedListMenu = () => { const picBedConfigList = picgo.getConfig('uploader') const currentPicBedMenuItem = [ { - label: `${T('CURRENT_PICBED')} - ${currentPicBedName}`, + label: `${$t('CURRENT_PICBED')} - ${currentPicBedName}`, enabled: false }, { @@ -276,7 +276,7 @@ const handleRestoreState = (item: string, name: string): void => { const buildPluginPageMenu = (plugin: IPicGoPlugin) => { const menu = [ { - label: T('ENABLE_PLUGIN'), + label: $t('ENABLE_PLUGIN'), enabled: !plugin.enabled, click () { picgo.saveConfig({ @@ -287,7 +287,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => { } }, { - label: T('DISABLE_PLUGIN'), + label: $t('DISABLE_PLUGIN'), enabled: plugin.enabled, click () { picgo.saveConfig({ @@ -306,7 +306,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => { } }, { - label: T('UNINSTALL_PLUGIN'), + label: $t('UNINSTALL_PLUGIN'), click () { const window = windowManager.get(IWindowList.SETTING_WINDOW)! window.webContents.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName) @@ -314,7 +314,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => { } }, { - label: T('UPDATE_PLUGIN'), + label: $t('UPDATE_PLUGIN'), click () { const window = windowManager.get(IWindowList.SETTING_WINDOW)! window.webContents.send(PICGO_HANDLE_PLUGIN_ING, plugin.fullName) @@ -325,7 +325,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => { for (const i in plugin.config) { if (plugin.config[i].config.length > 0) { const obj = { - label: T('CONFIG_THING', { + label: $t('CONFIG_THING', { c: `${i} - ${plugin.config[i].fullName || plugin.config[i].name}` }), click () { @@ -345,7 +345,7 @@ const buildPluginPageMenu = (plugin: IPicGoPlugin) => { const currentTransformer = picgo.getConfig(configPaths.picBed.transformer) || 'path' const pluginTransformer = plugin.config.transformer.name const obj = { - label: `${currentTransformer === pluginTransformer ? T('DISABLE') : T('ENABLE')}transformer - ${plugin.config.transformer.name}`, + label: `${currentTransformer === pluginTransformer ? $t('DISABLE') : $t('ENABLE')}transformer - ${plugin.config.transformer.name}`, click () { const transformer = plugin.config.transformer.name const currentTransformer = picgo.getConfig(configPaths.picBed.transformer) || 'path' diff --git a/src/main/events/rpc/routes/gallery/index.ts b/src/main/events/rpc/routes/gallery/index.ts index 0653befa..a836af68 100644 --- a/src/main/events/rpc/routes/gallery/index.ts +++ b/src/main/events/rpc/routes/gallery/index.ts @@ -1,20 +1,13 @@ import { GalleryDB } from '@core/datastore' import picgo from '@core/picgo' -import logger from '@core/picgo/logger' import GuiApi from 'apis/gui' import { clipboard } from 'electron' import { ICOREBuildInEvent, IPasteStyle, IRPCActionType, IRPCType } from '#/types/enum' import { IIPCEvent } from '#/types/rpc' -import { ILogType, ImgInfo, ISftpPlistConfig, IStringKeyMap } from '#/types/types' +import { ImgInfo } from '#/types/types' import { configPaths } from '#/utils/configPaths' import { RPCRouter } from '~/events/rpc/router' -import { - removeFileFromDogeInMain, - removeFileFromHuaweiInMain, - removeFileFromS3InMain, - removeFileFromSFTPInMain -} from '~/utils/deleteFunc' import pasteTemplate from '~/utils/pasteTemplate' interface IFilter { orderBy?: 'asc' | 'desc' @@ -98,43 +91,6 @@ const galleryRoutes = [ return await dbStore.insertMany(args[0]) }, type: IRPCType.INVOKE - }, - { - action: IRPCActionType.GALLERY_LOG_DELETE_MSG, - handler: async (_: IIPCEvent, args: [msg: string, logLevel: ILogType]) => { - const [msg, logLevel] = args - console.log(msg, logLevel) - logger[logLevel](msg) - } - }, - { - action: IRPCActionType.GALLERY_DELETE_SFTP_FILE, - handler: async (_: IIPCEvent, args: [config: ISftpPlistConfig, fileName: string]) => { - const [config, fileName] = args - return await removeFileFromSFTPInMain(config, fileName) - }, - type: IRPCType.INVOKE - }, - { - action: IRPCActionType.GALLERY_DELETE_AWS_S3_FILE, - handler: async (_: IIPCEvent, args: [configMap: IStringKeyMap]) => { - return await removeFileFromS3InMain(args[0]) - }, - type: IRPCType.INVOKE - }, - { - action: IRPCActionType.GALLERY_DELETE_DOGE_FILE, - handler: async (_: IIPCEvent, args: [configMap: IStringKeyMap]) => { - return await removeFileFromDogeInMain(args[0]) - }, - type: IRPCType.INVOKE - }, - { - action: IRPCActionType.GALLERY_DELETE_HUAWEI_OSS_FILE, - handler: async (_: IIPCEvent, args: [configMap: IStringKeyMap]) => { - return await removeFileFromHuaweiInMain(args[0]) - }, - type: IRPCType.INVOKE } ] diff --git a/src/main/events/rpc/routes/plugin/utils.ts b/src/main/events/rpc/routes/plugin/utils.ts index e14342f6..14fda2fd 100644 --- a/src/main/events/rpc/routes/plugin/utils.ts +++ b/src/main/events/rpc/routes/plugin/utils.ts @@ -12,7 +12,7 @@ import { ICOREBuildInEvent, IPicGoHelperType, IWindowList } from '#/types/enum' import { IIPCEvent } from '#/types/rpc' import { IDispose, IPicGoPlugin } from '#/types/types' import { handleStreamlinePluginName, simpleClone } from '#/utils/common' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' import { showNotification } from '~/utils/common' const STORE_PATH = dbPathDir() @@ -108,8 +108,8 @@ const handleNPMError = (): IDispose => { if (msg === 'NPM is not installed') { dialog .showMessageBox({ - title: T('TIPS_ERROR'), - message: T('TIPS_INSTALL_NODE_AND_RELOAD_PICGO'), + title: $t('TIPS_ERROR'), + message: $t('TIPS_INSTALL_NODE_AND_RELOAD_PICGO'), buttons: ['Yes'] }) .then(res => { @@ -131,7 +131,7 @@ export const handlePluginUpdate = async (fullName: string | string[]) => { window.webContents.send('updateSuccess', res.body[0]) } else { showNotification({ - title: T('PLUGIN_UPDATE_FAILED'), + title: $t('PLUGIN_UPDATE_FAILED'), body: res.body as string }) } @@ -148,7 +148,7 @@ export const handlePluginUninstall = async (fullName: string) => { shortKeyHandler.unregisterPluginShortKey(res.body[0]) } else { showNotification({ - title: T('PLUGIN_UNINSTALL_FAILED'), + title: $t('PLUGIN_UNINSTALL_FAILED'), body: res.body as string }) } @@ -165,7 +165,7 @@ export const pluginGetListFunc = async (event: IIPCEvent) => { } catch (e: any) { event.sender.send('pluginList', []) showNotification({ - title: T('TIPS_GET_PLUGIN_LIST_FAILED'), + title: $t('TIPS_GET_PLUGIN_LIST_FAILED'), body: e.message }) picgo.log.error(e) @@ -185,7 +185,7 @@ export const pluginInstallFunc = async (event: IIPCEvent, args: [fullName: strin await shortKeyHandler.registerPluginShortKey(res.body[0]) } else { showNotification({ - title: T('PLUGIN_INSTALL_FAILED'), + title: $t('PLUGIN_INSTALL_FAILED'), body: res.body as string }) } @@ -208,17 +208,17 @@ export const pluginImportLocalFunc = async (event: IIPCEvent) => { } catch (e: any) { event.sender.send('pluginList', []) showNotification({ - title: T('TIPS_GET_PLUGIN_LIST_FAILED'), + title: $t('TIPS_GET_PLUGIN_LIST_FAILED'), body: e.message }) } showNotification({ - title: T('PLUGIN_IMPORT_SUCCEED'), + title: $t('PLUGIN_IMPORT_SUCCEED'), body: '' }) } else { showNotification({ - title: T('PLUGIN_IMPORT_FAILED'), + title: $t('PLUGIN_IMPORT_FAILED'), body: res.body as string }) } diff --git a/src/main/events/rpc/routes/setting/shortKey.ts b/src/main/events/rpc/routes/setting/shortKey.ts index f72a3935..58e399cf 100644 --- a/src/main/events/rpc/routes/setting/shortKey.ts +++ b/src/main/events/rpc/routes/setting/shortKey.ts @@ -6,12 +6,12 @@ import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants' import { IRPCActionType, IRPCType } from '#/types/enum' import { IIPCEvent } from '#/types/rpc' import { IShortKeyConfig } from '#/types/types' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' const notificationFunc = (result: boolean) => { const notification = new Notification({ - title: T(`OPERATION_${result ? 'SUCCEED' : 'FAILED'}`), - body: T(`TIPS_SHORTCUT_MODIFIED_${result ? 'SUCCEED' : 'CONFLICT'}`) + title: $t(`OPERATION_${result ? 'SUCCEED' : 'FAILED'}`), + body: $t(`TIPS_SHORTCUT_MODIFIED_${result ? 'SUCCEED' : 'CONFLICT'}`) }) notification.show() } diff --git a/src/main/events/rpc/routes/system/app.ts b/src/main/events/rpc/routes/system/app.ts index 40e05183..5e30661e 100644 --- a/src/main/events/rpc/routes/system/app.ts +++ b/src/main/events/rpc/routes/system/app.ts @@ -1,10 +1,8 @@ import picgo from '@core/picgo' -import windowManager from 'apis/app/window/windowManager' import { app, IpcMainEvent, shell } from 'electron' -import { IIPCEvent } from 'root/src/universal/types/rpc' -import { SET_CURRENT_LANGUAGE } from '#/events/constants' -import { IRPCActionType, IWindowList } from '#/types/enum' +import { IRPCActionType } from '#/types/enum' +import { IIPCEvent } from '#/types/rpc' import { i18nManager } from '~/i18n' export default [ @@ -33,35 +31,12 @@ export default [ shell.openExternal(args[0]) } }, - { - action: IRPCActionType.GET_LANGUAGE_LIST, - handler: async (event: IIPCEvent) => { - (event as IpcMainEvent).returnValue = i18nManager.languageList - } - }, - { - action: IRPCActionType.GET_CURRENT_LANGUAGE, - handler: async (event: IIPCEvent) => { - const { lang, locales } = i18nManager.getCurrentLocales() - ;(event as IpcMainEvent).returnValue = [lang, locales] - } - }, { action: IRPCActionType.SET_CURRENT_LANGUAGE, handler: async (_: IIPCEvent, args: [language: string]) => { i18nManager.setCurrentLanguage(args[0]) - const { lang, locales } = i18nManager.getCurrentLocales() + const { lang } = i18nManager.getCurrentLocales() picgo.i18n.setLanguage(lang) - if (process.platform === 'darwin') { - const trayWindow = windowManager.get(IWindowList.TRAY_WINDOW) - trayWindow?.webContents.send(SET_CURRENT_LANGUAGE, lang, locales) - } - const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW) - settingWindow?.webContents.send(SET_CURRENT_LANGUAGE, lang, locales) - if (windowManager.has(IWindowList.MINI_WINDOW)) { - const miniWindow = windowManager.get(IWindowList.MINI_WINDOW) - miniWindow?.webContents.send(SET_CURRENT_LANGUAGE, lang, locales) - } } } ] diff --git a/src/main/events/rpc/routes/toolbox/checkClipboardUpload.ts b/src/main/events/rpc/routes/toolbox/checkClipboardUpload.ts index e2e8447a..ea7891bf 100644 --- a/src/main/events/rpc/routes/toolbox/checkClipboardUpload.ts +++ b/src/main/events/rpc/routes/toolbox/checkClipboardUpload.ts @@ -7,7 +7,7 @@ import { IToolboxItemCheckStatus, IToolboxItemType } from '#/types/enum' import { IToolboxCheckerMap, IToolboxFixMap } from '#/types/rpc' import { CLIPBOARD_IMAGE_FOLDER } from '#/utils/static' import { sendToolboxResWithType } from '~/events/rpc/routes/toolbox/utils' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' const sendToolboxRes = sendToolboxResWithType(IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD) @@ -25,7 +25,7 @@ export const checkClipboardUploadMap: IToolboxCheckerMap { dialog .showMessageBox({ type: 'info', - title: T('FIND_NEW_VERSION'), + title: $t('FIND_NEW_VERSION'), buttons: ['Yes', 'Go to download page'], message: - T('TIPS_FIND_NEW_VERSION', { + $t('TIPS_FIND_NEW_VERSION', { v: info.version }) + '\n\n' + displayLog + truncatedNote, - checkboxLabel: T('NO_MORE_NOTICE'), + checkboxLabel: $t('NO_MORE_NOTICE'), checkboxChecked: false }) .then(result => { @@ -132,9 +132,9 @@ updater.autoUpdater.on('update-downloaded', () => { dialog .showMessageBox({ type: 'info', - title: T('UPDATE_DOWNLOADED'), + title: $t('UPDATE_DOWNLOADED'), buttons: ['Yes', 'No'], - message: T('TIPS_UPDATE_DOWNLOADED') + message: $t('TIPS_UPDATE_DOWNLOADED') }) .then(result => { const window = windowManager.get(IWindowList.SETTING_WINDOW)! diff --git a/src/main/manage/datastore/dbChecker.ts b/src/main/manage/datastore/dbChecker.ts index 192ae035..2c69dca4 100644 --- a/src/main/manage/datastore/dbChecker.ts +++ b/src/main/manage/datastore/dbChecker.ts @@ -7,7 +7,7 @@ import fs from 'fs-extra' import writeFile from 'write-file-atomic' import { notificationList } from '#/utils/notification' -import { T } from '~/i18n' +import { T as $t } from '~/i18n' const STORE_PATH = app.getPath('userData') const manageConfigFilePath = path.join(STORE_PATH, 'manage.json') @@ -17,8 +17,8 @@ let _configFilePath = '' let hasCheckPath = false const errorMsg = { - broken: T('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'), - brokenButBackup: T('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP') + broken: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT'), + brokenButBackup: $t('TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP') } function manageDbChecker () { @@ -29,7 +29,7 @@ function manageDbChecker () { } let configFile: string = '{}' const optionsTpl = { - title: T('TIPS_NOTICE'), + title: $t('TIPS_NOTICE'), body: '' } // config save bak @@ -48,7 +48,7 @@ function manageDbChecker () { encoding: 'utf-8' }) const stats = fs.statSync(manageConfigFileBackupPath) - optionsTpl.body = `${errorMsg.brokenButBackup}\n${T('TIPS_PICGO_BACKUP_FILE_VERSION', { + optionsTpl.body = `${errorMsg.brokenButBackup}\n${$t('TIPS_PICGO_BACKUP_FILE_VERSION', { v: dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss') })}` notificationList.push(optionsTpl) @@ -101,8 +101,8 @@ function managePathChecker (): string { const logger = getLogger(manageLogPath, 'Manage') if (!hasCheckPath) { const optionsTpl = { - title: T('TIPS_NOTICE'), - body: T('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR') + title: $t('TIPS_NOTICE'), + body: $t('TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR') } notificationList?.push(optionsTpl) hasCheckPath = true diff --git a/src/main/server/utils.ts b/src/main/server/utils.ts index 8e4ddbbc..39a6bf89 100644 --- a/src/main/server/utils.ts +++ b/src/main/server/utils.ts @@ -10,7 +10,7 @@ import { ICOREBuildInEvent, IWindowList } from '#/types/enum' import { IHttpResponse, ImgInfo, IObj } from '#/types/types' import { configPaths } from '#/utils/configPaths' import { picBedsCanbeDeleted } from '#/utils/static' -import { T } from '~/i18n/index' +import { T as $t } from '~/i18n/index' export const handleResponse = ({ response, @@ -54,8 +54,8 @@ export const deleteChoosedFiles = async (list: ImgInfo[]): Promise => if (item.type !== undefined && picBedsCanbeDeleted.includes(item.type)) { const noteFunc = (value: boolean) => { const notification = new Notification({ - title: T('MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2'), - body: T(value ? 'GALLERY_SYNC_DELETE_NOTICE_SUCCEED' : 'GALLERY_SYNC_DELETE_NOTICE_FAILED') + title: $t('MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2'), + body: $t(value ? 'GALLERY_SYNC_DELETE_NOTICE_SUCCEED' : 'GALLERY_SYNC_DELETE_NOTICE_FAILED') }) notification.show() } diff --git a/src/main/utils/common.ts b/src/main/utils/common.ts index 7a2dd6b7..3e5cfaa5 100644 --- a/src/main/utils/common.ts +++ b/src/main/utils/common.ts @@ -81,20 +81,6 @@ export const showMessageBox = (options: any) => { }) } -export const calcDurationRange = (duration: number) => { - if (duration < 1000) return 500 - if (duration < 1500) return 1000 - if (duration < 3000) return 2000 - if (duration < 5000) return 3000 - if (duration < 7000) return 5000 - if (duration < 10000) return 8000 - if (duration < 12000) return 10000 - if (duration < 20000) return 15000 - if (duration < 30000) return 20000 - // max range - return 100000 -} - /** * macOS public.file-url will get encoded file path, * so we need to decode it diff --git a/src/preload/index.ts b/src/preload/index.ts index 5c7324a1..ee534350 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,7 +1,6 @@ import crypto from 'node:crypto' import path from 'node:path' -import { I18n, ObjectAdapter } from '@piclist/i18n' import { clipboard, contextBridge, ipcRenderer, webFrame } from 'electron' import fs from 'fs-extra' import yaml from 'js-yaml' @@ -11,10 +10,6 @@ import { isReactive, isRef, toRaw, unref } from 'vue' import { RPC_ACTIONS, RPC_ACTIONS_INVOKE } from '#/events/constants' import { IpcRendererListener } from '#/types/electron' import { IRPCActionType } from '#/types/enum' -import { ILocales, ILocalesKey } from '#/types/i18n' -import { IStringKeyMap } from '#/types/types' - -let i18nObj: I18n | null = null export const getRawData = (args: any): any => { if (isRef(args)) return unref(args) @@ -94,21 +89,6 @@ try { lookup: mime.lookup } }) - - contextBridge.exposeInMainWorld('i18n', { - setLocales: (lang: string, locales: ILocales) => { - const objectAdapter = new ObjectAdapter({ - [lang]: locales - }) - i18nObj = new I18n({ - adapter: objectAdapter, - defaultLanguage: lang - }) - }, - translate: (key: ILocalesKey, args: IStringKeyMap = {}): string => { - return i18nObj?.translate(key, args) || key - } - }) } catch (error) { console.error(error) } diff --git a/src/renderer/assets/.gitkeep b/src/renderer/assets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/renderer/assets/fonts/iconfont.css b/src/renderer/assets/fonts/iconfont.css deleted file mode 100644 index 97461331..00000000 --- a/src/renderer/assets/fonts/iconfont.css +++ /dev/null @@ -1,29 +0,0 @@ - -@font-face {font-family: "iconfont"; - src: url('iconfont.eot?t=1523001890286'); /* IE9*/ - src: url('iconfont.eot?t=1523001890286#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAApcAAsAAAAADqAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kmaY21hcAAAAYAAAACMAAAB5Jz6bNVnbHlmAAACDAAABisAAAfkf7GmJ2hlYWQAAAg4AAAALwAAADYQ+dpBaGhlYQAACGgAAAAcAAAAJAfeA4lobXR4AAAIhAAAABQAAAAgH+kAAGxvY2EAAAiYAAAAEgAAABII+gbebWF4cAAACKwAAAAfAAAAIAEYAMxuYW1lAAAIzAAAAUUAAAJtPlT+fXBvc3QAAAoUAAAASAAAAF2Rted1eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/ss4gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDxfzdzwv4EhhrmBoQEozAiSAwAxwA0deJzFkdEJwzAMRE9ymoRiSv+TETpK6BQZwvSr+2QvZYz0ZLmFTpAzz/gOGRkLwAVAIg/SAfKGwPViKjVPuNa8w5M+Y4TyXExttmXfjoNpMbHp574SVmfccOdy12Ngv8TbStvjNMl5rf+V6742N5DS4BOtwX+DaeA1NgU+O5sDn6Etgc9x3wLoBwU0H794nG1VXYwcRxHu6p7unt+enf/9m9293buZde5u97w/M3Zs7xof2AoJPsLJ4JMR52AUEUgiJcLxQ2znEEIkEEQiJGOQIl0QCDlKpCgP5MXipAiJl5N44S0IAvjVQkGKBUIs9OzFEkjslGqner7pmar6vhpEEfr3n8htUkYe6qLD6JPoswgBW4a2wDEspKMeXoZggQaRL0jaSRd4p90jJyBqMz8cZKMkYpzZIKABw4VBlvZwCuPRBB+DQRgDVGrVTXep7pJXQC+njW/PPo1/CkGzU7cnq7OHVqb+oOWpV0zXrbjuyyqjVMVYsQU8FYUa1XQ2+xm1q8Ht5iHcBLOSVh/Zslo197EXR0/HS5EGsLMDXq0lfjF1qo60q9XQcyu8ZKnlqtVZ9OHKHaPsmXHyFyR/IHP9DXmP5GhdBgJ4A6IwS8csyXvAkyxqQNCAfAIyTEeZ9HkSRtkgmgAPmUQH83tiYOEBCKO9GcW3XirZ8MUJLrVwtaK0O62zgWLrG8+Tcki5A8dP5t/ITx4Hh9OwTK6eNV2wnRdvYTojOZ3t3bzTJ7a+KSY0rYOvAU3JGphhQ6UXri+diLRpn6iHbPuQSvpTLTqxdP0C1Q+1ntdt0r9zc29W5MXmed0jWyhEPfQw+gK6hJ6UGfqsnaR5RybDxz0YZVPZpOgwbyfjUZEh6xSL+bBYDHzGi/y5mJu8mmdunoWc8QnIdXpQrXnWRF6VJzIUkN6nAflIhAIA8EuPq5ppaurVn5MbhsDKtK9QQ8iFM9vYvtJIRj1Cnjj/4Ksbb/6TQfSvM0fOYyArF3vThdmPX7ilKLde2Cn87voWxlvrpwp/LozjlTjGC4ZtG8qTPyDyMSIQGJS3vtWwDUYPnyIY7FBg/JWHFcM+rWjidHZs90i3D+SNndJ3oOrw/indrNVVcWkDP3d+6zLGl7fOPze7CZuTySbM/W5ztSkNIVwUlXyEP0Cvob0DpgiwD/64wHNPAj8KZWGGgyyfKAUdRknao2lSKCDpQ/Ix3iapLJe0ZJRPyHAQNkHWawqyZH0oliV0LLswIVOYSM3ILaU1YVBsOcjmmLlJXBFAgwSSiwfvIoXHWmnRWAnOpjgL4XfNMyFXmKgtW1xlinfE1lvML5l0fXnoXvr97aeZs8itmpmugKYQsLnhirrgbFEjRjSo+HpDCybR5742XrBj3n3QUAittAdR/WhtrChO4HBDjWhiV5dMZlK93F4JAu61PSte9a2KZmCTVayKzhlRMYms0lo5wrxW/RSMa4stGzChhiq6PjXLq7O7Xs3fI3WdcuGwNn6f1koKlnsebdiVqARlTY1ZPU7a3vb6A7ZKACuawhy99aWhc1hjPNZc1yxToli44J3GlRIvHYk2Hh/JCPi4ay1bfrfu1ip9InxXxQb3adPwBCWgLOpuq1lmFMtxwyPHjG1HngLTbVUQtWG7S4aBsaYqs10eJN16ydZLoeZWFQwFrua/qwSUEEpBDhVF6m+XfEAuIhOV0SKaILQk2zicwCiRg5RBiKIM5QlKGYruK0dqLGey1ccg8EM5LbN8XHBJdjxpc/g1lKzjluNYx01ndoGCvb8PNqWzD/f3Zx/m9O4779ylc39PEFwyLsyBsGWUMBEvmy3zWRmBU3GklzfQ/97g/p3S/80JDXGjeMwNYYTO65ZVzEjJ/b/iX6I1yfyMFYOvXTAw6hXan7NTWh5KysohmRwwsQCEw8WMvO+VFfzHf2x8QnRjunMZcGhd+y5zTH9j8/PbluWDGrZyXVxa9mtC0hbt48t9UMR7wl47ybazHarYj7x76tFXGkcbGMdrR39icd1tf9+xHMu9tmGYf74/x39LfkVOo20ZJGky/wB1Pn4XKUt5yK+SfOEsTbK5kKTgChxnbnFxLpjhfIjLJJLikJWX048daKtTCKvA5RkmUK7oPntWq9i60X2o6vsYjDLFnhss6UIFJap2Lo4D68uU6tfunXti+XvVuubzZ7SqMHSJDzyJjyjxPD/RBFfC2hz+GGPa9b+f+2of/8GRfVF/ZJiStkmnNl2wqFn1mowGK55uPvDo4mofnG+qLul85uuvzt5+xi/9D7xt/l+4o3TOPvVD2JDl+g9+5y00AHicY2BkYGAA4vdhFhPj+W2+MnCzMIDAtbfeSgj6/wIWBuYEIJeDgQkkCgAriQovAHicY2BkYGBu+N/AEMPCAAJAkpEBFXAAAEcOAnF4nGNhYGBgfsnAwMKAHQMAGtcBCQAAAAAAdgDiAYoCogMIA1oD8gAAeJxjYGRgYOBgOMDAxgACTEDMBYQMDP/BfAYAHGwB5QB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxtyMEOQDAQBNCZslX+UhE2kbaSbvD3JK7e8cHhM+BfoGPDlkLPjoE9ePlV62ZRzkVjljrdlryVPY+zHJrUxMpbwANFHA6a') format('woff'), - url('iconfont.ttf?t=1523001890286') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ - url('iconfont.svg?t=1523001890286#iconfont') format('svg'); /* iOS 4.1- */ -} - -[class*=" el-icon-ui"], [class^=el-icon-ui] { - font-family:"iconfont" !important; - font-size:16px; - font-style:normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.el-icon-ui-github:before { content: "\e7ab"; } - -.el-icon-ui-weibo:before { content: "\e61c"; } - -.el-icon-ui-tcyun:before { content: "\e64c"; } - -.el-icon-ui-upload:before { content: "\e61b"; } - -.el-icon-ui-qiniu:before { content: "\e601"; } - -.el-icon-ui-upyun:before { content: "\e602"; } - diff --git a/src/renderer/assets/fonts/iconfont.eot b/src/renderer/assets/fonts/iconfont.eot deleted file mode 100644 index f29f3384..00000000 Binary files a/src/renderer/assets/fonts/iconfont.eot and /dev/null differ diff --git a/src/renderer/assets/fonts/iconfont.svg b/src/renderer/assets/fonts/iconfont.svg deleted file mode 100644 index d1ae62e9..00000000 --- a/src/renderer/assets/fonts/iconfont.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - - -Created by iconfont - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/renderer/assets/fonts/iconfont.ttf b/src/renderer/assets/fonts/iconfont.ttf deleted file mode 100644 index 78d73026..00000000 Binary files a/src/renderer/assets/fonts/iconfont.ttf and /dev/null differ diff --git a/src/renderer/assets/fonts/iconfont.woff b/src/renderer/assets/fonts/iconfont.woff deleted file mode 100644 index 186ca417..00000000 Binary files a/src/renderer/assets/fonts/iconfont.woff and /dev/null differ diff --git a/src/renderer/assets/squareLogo.png b/src/renderer/assets/squareLogo.png deleted file mode 100644 index 496d5a56..00000000 Binary files a/src/renderer/assets/squareLogo.png and /dev/null differ diff --git a/src/renderer/components/ConfigForm.vue b/src/renderer/components/ConfigForm.vue index 28628e77..f13a0a34 100644 --- a/src/renderer/components/ConfigForm.vue +++ b/src/renderer/components/ConfigForm.vue @@ -12,14 +12,14 @@ size="small" > @@ -109,7 +109,6 @@ import { marked } from 'marked' import { reactive, ref, toRefs, watch } from 'vue' import { useRoute } from 'vue-router' -import { T as $T } from '@/i18n/index' import { getConfig } from '@/utils/dataSender' import { IPicGoPluginConfig, IStringKeyMap } from '#/types/types' diff --git a/src/renderer/components/ConfigFormForPlugin.vue b/src/renderer/components/ConfigFormForPlugin.vue index 379ab6d0..238279b1 100644 --- a/src/renderer/components/ConfigFormForPlugin.vue +++ b/src/renderer/components/ConfigFormForPlugin.vue @@ -11,14 +11,14 @@ size="small" > @@ -82,7 +82,6 @@ import type { FormInstance } from 'element-plus' import { cloneDeep, union } from 'lodash-es' import { reactive, ref, watch } from 'vue' -import { T as $T } from '@/i18n' import { getConfig } from '@/utils/dataSender' import { IPicGoPluginConfig, IStringKeyMap } from '#/types/types' diff --git a/src/renderer/components/ImageProcessSetting.vue b/src/renderer/components/ImageProcessSetting.vue index 621ee759..f70bb4ea 100644 --- a/src/renderer/components/ImageProcessSetting.vue +++ b/src/renderer/components/ImageProcessSetting.vue @@ -6,17 +6,17 @@ size="default" :model="waterMarkForm" > - +
- {{ $T('UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS') }} + {{ $t('UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS') }}
- + - {{ $T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT') }} + {{ $t('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT') }} - {{ $T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE') }} + {{ $t('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE') }} - + - + - + - + - + - + - + - + - {{ $T('UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM') }} + {{ $t('UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM') }} - {{ $T('UPLOAD_PAGE_IMAGE_PROCESS_CANCEL') }} + {{ $t('UPLOAD_PAGE_IMAGE_PROCESS_CANCEL') }} @@ -254,23 +254,23 @@ diff --git a/src/renderer/manage/pages/LogInPage.vue b/src/renderer/manage/pages/LogInPage.vue index 371e714b..5738851c 100644 --- a/src/renderer/manage/pages/LogInPage.vue +++ b/src/renderer/manage/pages/LogInPage.vue @@ -11,7 +11,7 @@ > @@ -46,12 +46,12 @@ >