From 66d31ff2208bbb3af3d144f357ee4b29313536e4 Mon Sep 17 00:00:00 2001 From: csg01123119 Date: Thu, 8 Feb 2024 16:26:36 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20ColdArchive=E3=80=81DeepColdArchive?= =?UTF-8?q?=20support=20restore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc.js | 8 + app/components/services/oss2.js | 11 +- app/components/services/util.js | 28 +- app/main/files/_/batch-restore-modal.js | 129 +- app/main/files/_/file-list.html | 33 +- app/main/files/_/file-toolbar.html | 18 +- app/main/files/files.js | 47 +- .../files/modals/batch-restore-modal.html | 145 ++- app/main/files/modals/get-address.html | 1 + .../files/modals/preview/restore-checker.html | 2 +- .../files/modals/preview/restore-checker.js | 8 +- app/main/files/modals/restore-modal.js | 1 + node/i18n/en-US.js | 986 ++++++++-------- node/i18n/ja-JP.js | 1033 +++++++++-------- node/i18n/zh-CN.js | 984 ++++++++-------- vendor/aliyun-sdk-oss.js | 10 + 16 files changed, 1822 insertions(+), 1622 deletions(-) create mode 100644 .prettierrc.js diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..60d9a15d --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + printWidth: 100, + tabWidth: 2, + semi: true, + singleQuote: true, + trailingComma: 'all', //所有场景都会自动加逗号 + arrowParens: 'avoid', //如果只有一个参数,可以不要括号 +}; diff --git a/app/components/services/oss2.js b/app/components/services/oss2.js index 5e116448..4553b8ba 100644 --- a/app/components/services/oss2.js +++ b/app/components/services/oss2.js @@ -1473,7 +1473,7 @@ angular.module('web').factory('ossSvs2', [ ['catch'](handleError); } - function restoreFile(region, bucket, key, days) { + function restoreFile(region, bucket, key, days, tier) { return new Promise(function(a, b) { var client = getClient({ region: region, @@ -1483,9 +1483,14 @@ angular.module('web').factory('ossSvs2', [ Bucket: bucket, Key: key, RestoreRequest: { - Days: days || 7 + Days: days || 7, } }; + if (tier) { + opt.RestoreRequest.JobParameters = { + Tier: tier + }; + } client.restoreObject(opt, function(err, data) { if (err) { @@ -1555,7 +1560,7 @@ angular.module('web').factory('ossSvs2', [ c++; - if (!item.isFile || item.storageClass != 'Archive') { + if (!item.isFile || !['Archive', 'ColdArchive', 'DeepColdArchive'].includes(item.storageClass)) { _dig(); return; diff --git a/app/components/services/util.js b/app/components/services/util.js index 3ea2d4ae..d23317f5 100644 --- a/app/components/services/util.js +++ b/app/components/services/util.js @@ -1,8 +1,9 @@ angular.module('web').factory('utilSvs', [ '$timeout', - function($timeout) { + function ($timeout) { return { - leftTime: leftTime + leftTime: leftTime, + isArchiveRead: isArchiveRead, }; function leftTime(ms) { @@ -10,9 +11,13 @@ angular.module('web').factory('utilSvs', [ return ''; } - if (ms <= 0) { return 0; } + if (ms <= 0) { + return 0; + } - if (ms < 1000) { return ms + 'ms'; } + if (ms < 1000) { + return ms + 'ms'; + } // return moment.duration(ms).humanize(); var t = []; @@ -51,5 +56,18 @@ angular.module('web').factory('utilSvs', [ // } return t.join(' '); } - } + + //文件是否处于可读状态 + function isArchiveRead(items) { + for (const item of items) { + if ( + ['Archive', 'ColdArchive', 'DeepColdArchive'].includes(item.storageClass) && + item.storageStatus !== 3 + ) { + return false; + } + } + return true; + } + }, ]); diff --git a/app/main/files/_/batch-restore-modal.js b/app/main/files/_/batch-restore-modal.js index c6f683e7..a9534c6f 100644 --- a/app/main/files/_/batch-restore-modal.js +++ b/app/main/files/_/batch-restore-modal.js @@ -8,63 +8,72 @@ angular.module('web').controller('batchRestoreModalCtrl', [ 'callback', 'Toast', 'safeApply', - function( - $scope, - $modalInstance, - $translate, - ossSvs2, - items, - currentInfo, - callback, - Toast, - safeApply + function ( + $scope, + $modalInstance, + $translate, + ossSvs2, + items, + currentInfo, + callback, + Toast, + safeApply, ) { + /* 多文件解冻 */ var T = $translate.instant; angular.extend($scope, { currentInfo: currentInfo, items: items, + classList: items.map(item => item.storageClass), info: { days: 1, - msg: null + msg: null, + coldDays: 1, + coldMode: 'Expedited', + deepColdDays: 1, + deepColdMode: 'Expedited', }, cancel: cancel, - onSubmit: onSubmit + onSubmit: onSubmit, }); - init(); + // init(); function init() { $scope.isLoading = true; + const pros = []; for (let i in items) { - ossSvs2 - .getFileInfo(currentInfo.region, currentInfo.bucket, items[i].path) - .then(function(data) { - if (data.Restore) { - var info = parseRestoreInfo(data.Restore); - - if (info['ongoing-request'] == 'true') { - $scope.info.type = 2; - } else { - $scope.info.type = 3; - $scope.inf.expiry_date = info['expiry-date']; - } - } else { - $scope.info.type = 1; - } - - $scope.isLoading = false; - safeApply($scope); - }); + const p = ossSvs2.getFileInfo(currentInfo.region, currentInfo.bucket, items[i].path); + pros.push(p); } + + Promise.all(pros).then(function (datas) { + const data = datas.find(item => !!item.Restore); + if (data.Restore) { + var info = parseRestoreInfo(data.Restore); + + if (info['ongoing-request'] == 'true') { + $scope.info.type = 2; + } else { + $scope.info.type = 3; + $scope.info.expiry_date = info['expiry-date']; + } + } else { + $scope.info.type = 1; + } + + $scope.isLoading = false; + safeApply($scope); + }); } function parseRestoreInfo(s) { - var arr = s.match(/([\w\-]+)=\"([^\"]+)\"/g); + var arr = s.match(/([\w-]+)="([^"]+)"/g); var m = {}; - angular.forEach(arr, function(n) { - var kv = n.match(/([\w\-]+)=\"([^\"]+)\"/); + angular.forEach(arr, function (n) { + var kv = n.match(/([\w-]+)="([^"]+)"/); m[kv[1]] = kv[2]; }); @@ -77,27 +86,47 @@ angular.module('web').controller('batchRestoreModalCtrl', [ } function onSubmit(form1) { - if (!form1.$valid) { return; } + if (!form1.$valid) { + return; + } var days = $scope.info.days; + var coldDays = $scope.info.coldDays; + var coldMode = $scope.info.coldMode; + var deepColdDays = $scope.info.deepColdDays; + var deepColdMode = $scope.info.deepColdMode; Toast.info(T('restore.on')); // '提交中...' - for (let i in items) { - ossSvs2 - .restoreFile( - currentInfo.region, - currentInfo.bucket, - items[i].path, - days - ) - .then(function() { - callback(); - cancel(); - }); + const ps = []; + for (let item of items) { + const { storageClass, path } = item; + + if (storageClass === 'Archive') + ps.push(ossSvs2.restoreFile(currentInfo.region, currentInfo.bucket, path, days)); + if (storageClass === 'ColdArchive') { + ps.push( + ossSvs2.restoreFile(currentInfo.region, currentInfo.bucket, path, coldDays, coldMode), + ); + } + if (storageClass === 'DeepColdArchive') { + ps.push( + ossSvs2.restoreFile( + currentInfo.region, + currentInfo.bucket, + path, + deepColdDays, + deepColdMode, + ), + ); + } } + Promise.all(ps).then(function () { + callback(); + cancel(); + }); - Toast.success(T('restore.success')); // '恢复请求已经提交' + Toast.success(T('restore.success'), 4000); // '恢复请求已经提交' } - } + }, ]); diff --git a/app/main/files/_/file-list.html b/app/main/files/_/file-list.html index 4b1b70f0..d64ff15a 100644 --- a/app/main/files/_/file-list.html +++ b/app/main/files/_/file-list.html @@ -25,6 +25,10 @@ {{'type'|translate}} / {{'size'|translate}} + + + {{'storageClassesType'|translate}} + {{'lastModifyTime'|translate}} @@ -83,9 +87,7 @@ tooltip-popup-delay="500" tooltip-append-to-body="true" > - {{item.name|sub:50}} + {{item.name|sub:50}} {{item.size|sizeFormat}} + + {{'storageClassesType.'+item.storageClass.toLowerCase()|translate}} + {{item.lastModified|timeFormat}} | - - + {{'download'|translate}} | - - - + + {{'restore'|translate}} | - + + + + {{'restoring'|translate}} + + | + {{'delete'|translate}} diff --git a/app/main/files/_/file-toolbar.html b/app/main/files/_/file-toolbar.html index 7f305c12..799f45bb 100644 --- a/app/main/files/_/file-toolbar.html +++ b/app/main/files/_/file-toolbar.html @@ -83,7 +83,7 @@ -->
-
+
+
+
+ {{'restore.file.type.cold.archive'|translate}} +
+ +
+ +
{{'restore.days.tips.365'|translate}}
+
+ +
+ + + +
+ {{'restore.mode.type.'+info.coldMode.toLowerCase()+'.explain'|translate}} +
+
+ +
+
+
+
+
+ {{'restore.file.type.deep.cold.archive'|translate}} +
+ +
+ +
{{'restore.days.tips.365'|translate}}
+
+ +
+ + +
+ {{'restore.mode.type.'+info.deepColdMode.toLowerCase()+'.explain.deep'|translate}} +
+
diff --git a/app/main/files/modals/preview/restore-checker.js b/app/main/files/modals/preview/restore-checker.js index 59f87693..de8559c9 100644 --- a/app/main/files/modals/preview/restore-checker.js +++ b/app/main/files/modals/preview/restore-checker.js @@ -62,7 +62,7 @@ angular.module('web').directive('restoreChecker', [ if (fn) { fn(); } } - } else if ($scope.objectInfo.storageClass == 'Archive') { + } else if (['Archive', 'ColdArchive', 'DeepColdArchive'].includes($scope.objectInfo.storageClass)) { $scope.info.type = 1; // 归档文件,需要恢复才能预览或下载 $scope.info.showContent = false; $scope.info.needRestore = true; @@ -80,11 +80,11 @@ angular.module('web').directive('restoreChecker', [ function showRestore() { $modal.open({ - templateUrl: 'main/files/modals/restore-modal.html', - controller: 'restoreModalCtrl', + templateUrl: 'main/files/modals/batch-restore-modal.html', + controller: 'batchRestoreModalCtrl', resolve: { item: function() { - return angular.copy($scope.objectInfo); + return angular.copy([$scope.objectInfo]); }, currentInfo: function() { return angular.copy($scope.bucketInfo); diff --git a/app/main/files/modals/restore-modal.js b/app/main/files/modals/restore-modal.js index 024f8886..1701f548 100644 --- a/app/main/files/modals/restore-modal.js +++ b/app/main/files/modals/restore-modal.js @@ -19,6 +19,7 @@ angular.module('web').controller('restoreModalCtrl', [ Toast, safeApply ) { + /* 单文件解冻 */ var T = $translate.instant; angular.extend($scope, { diff --git a/node/i18n/en-US.js b/node/i18n/en-US.js index 02e95b88..5b42a436 100644 --- a/node/i18n/en-US.js +++ b/node/i18n/en-US.js @@ -1,526 +1,532 @@ module.exports = { - "app.name": "OSS Browser", - language: "Language", - name: "Name", - type: "Type", - customize: "Customize", - "public.cloud": "Public Cloud", - - "region.oss-cn-hangzhou": "East China 1(Hangzhou)", - "region.oss-cn-shanghai": "East China 2(Shanghai)", - "region.oss-cn-nanjing": "East China 5(Nanjing Local Region)", - "region.oss-cn-fuzhou": "East China 6(Local area of Fuzhou)", - "region.oss-cn-qingdao": "North China 1(Qingdao)", - "region.oss-cn-beijing": "North China 2(Beijing)", - "region.oss-cn-zhangjiakou": "North China 3(Zhangjiakou)", - "region.oss-cn-huhehaote": "North China 5(Huhehaote)", - "region.oss-cn-wulanchabu": "North China 6(Ulanchap)", - "region.oss-cn-shenzhen": "South China 1(Shenzhen)", - "region.oss-cn-heyuan": "South China 2(Heyuan)", - "region.oss-cn-chengdu": "Southwest China 1(Chengdu)", - "region.oss-cn-hongkong": "China (Hong Kong)", - "region.oss-cn-guangzhou": "South China 3(Guangzhou)", - - "region.oss-ap-southeast-1": "Asia Pacific Southeast 1(Singapore)", - "region.oss-ap-southeast-2": "Asia Pacific Southeast 2(Sydney)", - "region.oss-ap-southeast-3": "Asia Pacific Southeast 3(Kuala Lumpur)", - "region.oss-ap-southeast-5": "Asia Pacific Southeast 5(Jakarta)", - "region.oss-ap-northeast-1": "Japan (Tokyo)", - "region.oss-ap-northeast-2": "South Korea (Seoul)", - "region.oss-ap-south-1": "Asia Pacific South 1(Mumbai)", - "region.oss-ap-southeast-6": "Philippines (Manila)", - "region.oss-ap-southeast-7": "Thailand (Bangkok)", - - "region.oss-us-west-1": "Western US 1(Silicon Valley)", - "region.oss-us-east-1": "Eastern US 1(Virginia)", - "region.oss-eu-central-1": "Germany (Frankfurt)", - "region.oss-me-east-1": "United Arab Emirates (Dubai)", - "region.oss-eu-west-1": "England (LonDon)", - - optional: "Optional", - default: "Default", - "auth.akLogin": "AK Login", - "auth.tokenLogin": "Token Login", - "auth.presetOssPath": "Preset OSS Path", - "auth.presetOssPath.placeholder": "Optional, format: oss://bucket/key/", - "auth.id.placeholder": "AccessKeyId", - "auth.secret.placeholder": "AccessKeySecret", - "auth.stoken.placeholder": "STS Token", - "auth.eptpl": "Endpoint Template", - "auth.eptpl.placeholder": "Default: http://{region}.aliyuncs.com", - - "auth.eptpl.popup.msg1": - "For Public Cloud, you can directly use the default settings", - "auth.eptpl.popup.msg2": - "For Private Cloud, Please enter a custom Endpoint, such as:", - - "auth.presetOssPath.popup.msg1": + 'app.name': 'OSS Browser', + language: 'Language', + name: 'Name', + type: 'Type', + customize: 'Customize', + 'public.cloud': 'Public Cloud', + + 'region.oss-cn-hangzhou': 'East China 1(Hangzhou)', + 'region.oss-cn-shanghai': 'East China 2(Shanghai)', + 'region.oss-cn-nanjing': 'East China 5(Nanjing Local Region)', + 'region.oss-cn-fuzhou': 'East China 6(Local area of Fuzhou)', + 'region.oss-cn-qingdao': 'North China 1(Qingdao)', + 'region.oss-cn-beijing': 'North China 2(Beijing)', + 'region.oss-cn-zhangjiakou': 'North China 3(Zhangjiakou)', + 'region.oss-cn-huhehaote': 'North China 5(Huhehaote)', + 'region.oss-cn-wulanchabu': 'North China 6(Ulanchap)', + 'region.oss-cn-shenzhen': 'South China 1(Shenzhen)', + 'region.oss-cn-heyuan': 'South China 2(Heyuan)', + 'region.oss-cn-chengdu': 'Southwest China 1(Chengdu)', + 'region.oss-cn-hongkong': 'China (Hong Kong)', + 'region.oss-cn-guangzhou': 'South China 3(Guangzhou)', + + 'region.oss-ap-southeast-1': 'Asia Pacific Southeast 1(Singapore)', + 'region.oss-ap-southeast-2': 'Asia Pacific Southeast 2(Sydney)', + 'region.oss-ap-southeast-3': 'Asia Pacific Southeast 3(Kuala Lumpur)', + 'region.oss-ap-southeast-5': 'Asia Pacific Southeast 5(Jakarta)', + 'region.oss-ap-northeast-1': 'Japan (Tokyo)', + 'region.oss-ap-northeast-2': 'South Korea (Seoul)', + 'region.oss-ap-south-1': 'Asia Pacific South 1(Mumbai)', + 'region.oss-ap-southeast-6': 'Philippines (Manila)', + 'region.oss-ap-southeast-7': 'Thailand (Bangkok)', + + 'region.oss-us-west-1': 'Western US 1(Silicon Valley)', + 'region.oss-us-east-1': 'Eastern US 1(Virginia)', + 'region.oss-eu-central-1': 'Germany (Frankfurt)', + 'region.oss-me-east-1': 'United Arab Emirates (Dubai)', + 'region.oss-eu-west-1': 'England (LonDon)', + + optional: 'Optional', + default: 'Default', + 'auth.akLogin': 'AK Login', + 'auth.tokenLogin': 'Token Login', + 'auth.presetOssPath': 'Preset OSS Path', + 'auth.presetOssPath.placeholder': 'Optional, format: oss://bucket/key/', + 'auth.id.placeholder': 'AccessKeyId', + 'auth.secret.placeholder': 'AccessKeySecret', + 'auth.stoken.placeholder': 'STS Token', + 'auth.eptpl': 'Endpoint Template', + 'auth.eptpl.placeholder': 'Default: http://{region}.aliyuncs.com', + + 'auth.eptpl.popup.msg1': 'For Public Cloud, you can directly use the default settings', + 'auth.eptpl.popup.msg2': 'For Private Cloud, Please enter a custom Endpoint, such as:', + + 'auth.presetOssPath.popup.msg1': 'The current AK that has all Bucket rights does not need to set the "Preset OSS Path"', - "auth.presetOssPath.popup.msg2": + 'auth.presetOssPath.popup.msg2': 'The current AK only has the permissions of a Bucket or a certain path under a Bucket, you need to set the "Preset OSS Path"', - "auth.remember.popup.msg1": + 'auth.remember.popup.msg1': 'Check "Remember" to save the AK. When you login again, click AK History to select the key to log in. You do not need to enter AK manually. Please do not check it on a temporary computer!', - region: "Region", - requestPay: "request payer", - "requestpay.popup.msg": + region: 'Region', + requestPay: 'request payer', + 'requestpay.popup.msg': "If your authorized bucket opens the request payer mode and you are not the owner of the bucket, you should check the 'Request Payer Mode'. The amount of traffic, requests, etc. that you generate when you visit the bucket will be paid by you. For details, please refer to the help documentation.", - "auth.region.placeholder": "Optional", - "auth.description": "Description", - "auth.description.placeholder": "Optional, Up to 30 words", - "auth.remember": "Remember", - "auth.login": "Login", - "auth.akHistories": "AK Histories", - "auth.secure": "HTTPS encryption", - "auth.keepLoggedIn": "Keep me logged in", - - "auth.authToken": "Auth-Token", - "auth.authToken.tooltip": "View document", - "auth.authToken.placeholder": "Please enter the authorization token", - "auth.authToken.error.invalid": "Please enter a valid authorization token", - "auth.authToken.error.expired": "The authorization token has expired", - "auth.authToken.info.validUntil": "Valid until {{expiration}}", - "auth.authToken.info.leftTime": "Left Time", - - "auth.clearHistories": "Clear Histories", - - actions: "Actions", - use: "Use", - delete: "Remove", - ok: "OK", - cancel: "Cancel", - close: "Close", - - "auth.removeAK.title": "Remove AK", - "auth.removeAK.message": "Remove AK:{{id}}, Are you sure?", - - "auth.clearAKHistories.title": "Clear AK Histories", - "auth.clearAKHistories.message": "Are you sure?", - "auth.clearAKHistories.successMessage": "All AK Histories has been clear", - - "storageClassesType.standard": "Standard", - "storageClassesType.ia": "IA", - "storageClassesType.archive": "Archive", - - "aclType.default": "Inherit From Bucket", - "aclType.public-read-write": "Public Read and Write", - "aclType.public-read": "Public Read", - "aclType.private": "Private", - - files: "Files", - settings: "Settings", - about: "About", - bookmarks: "Bookmarks", - logout: "Logout", - "logout.message": "Are you sure you want to logout?", - "main.upgration": "Release Notes", - tempCert: "Temp Cert", - "setup.success": "Set up successfully", - forbidden: - "You cannot move the selected objects to the current path or across region", - "settings.log": "Log Settings", - "settings.console": "Debug panel", - "settings.console.msg": "Open debug", - "settings.file": "Local log", - "settings.file.msg": "Log in local storage", - "settings.file.info": "local info file log ", - "settings.file.info.msg": "put info log file in local ?", - "settings.connectTimeout": "overtime(ms)", - "settings.uploadPartSize": "uploadpart size(M)", - "settings.downloadConcurrecyPartSize": "download concurrency part number", - "settings.uploadAndDownloadRetryTimes": "retry times", - "settings.other": "Other Settings", - "settings.other.list.object.max.number": "Maximum number of objects listed in a single instance", + 'auth.region.placeholder': 'Optional', + 'auth.description': 'Description', + 'auth.description.placeholder': 'Optional, Up to 30 words', + 'auth.remember': 'Remember', + 'auth.login': 'Login', + 'auth.akHistories': 'AK Histories', + 'auth.secure': 'HTTPS encryption', + 'auth.keepLoggedIn': 'Keep me logged in', + + 'auth.authToken': 'Auth-Token', + 'auth.authToken.tooltip': 'View document', + 'auth.authToken.placeholder': 'Please enter the authorization token', + 'auth.authToken.error.invalid': 'Please enter a valid authorization token', + 'auth.authToken.error.expired': 'The authorization token has expired', + 'auth.authToken.info.validUntil': 'Valid until {{expiration}}', + 'auth.authToken.info.leftTime': 'Left Time', + + 'auth.clearHistories': 'Clear Histories', + + actions: 'Actions', + use: 'Use', + delete: 'Remove', + ok: 'OK', + cancel: 'Cancel', + close: 'Close', + + 'auth.removeAK.title': 'Remove AK', + 'auth.removeAK.message': 'Remove AK:{{id}}, Are you sure?', + + 'auth.clearAKHistories.title': 'Clear AK Histories', + 'auth.clearAKHistories.message': 'Are you sure?', + 'auth.clearAKHistories.successMessage': 'All AK Histories has been clear', + + storageClassesType: 'Storage Class', + 'storageClassesType.standard': 'Standard', + 'storageClassesType.ia': 'IA', + 'storageClassesType.archive': 'Archive', + 'storageClassesType.coldarchive': 'Cold Archive', + 'storageClassesType.deepcoldarchive': 'Deep Cold Archive', + + 'aclType.default': 'Inherit From Bucket', + 'aclType.public-read-write': 'Public Read and Write', + 'aclType.public-read': 'Public Read', + 'aclType.private': 'Private', + + files: 'Files', + settings: 'Settings', + about: 'About', + bookmarks: 'Bookmarks', + logout: 'Logout', + 'logout.message': 'Are you sure you want to logout?', + 'main.upgration': 'Release Notes', + tempCert: 'Temp Cert', + 'setup.success': 'Set up successfully', + forbidden: 'You cannot move the selected objects to the current path or across region', + 'settings.log': 'Log Settings', + 'settings.console': 'Debug panel', + 'settings.console.msg': 'Open debug', + 'settings.file': 'Local log', + 'settings.file.msg': 'Log in local storage', + 'settings.file.info': 'local info file log ', + 'settings.file.info.msg': 'put info log file in local ?', + 'settings.connectTimeout': 'overtime(ms)', + 'settings.uploadPartSize': 'uploadpart size(M)', + 'settings.downloadConcurrecyPartSize': 'download concurrency part number', + 'settings.uploadAndDownloadRetryTimes': 'retry times', + 'settings.other': 'Other Settings', + 'settings.other.list.object.max.number': 'Maximum number of objects listed in a single instance', // address bar - backward: "Backward", - forward: "Forward", - goUp: "Go up", - refresh: "Refresh", - home: "Home", - saveAsHome: "Set Home Page", - saveToFav: "Save To Bookmarks", - "saveAsHome.success": "Set home page success", - - "bookmark.remove.success": "Remove Bookmark success", - "bookmark.add.error1": "Add Bookmark failed: Exceeds the maximum limit", - "bookmark.add.success": "Add Bookmark success", + backward: 'Backward', + forward: 'Forward', + goUp: 'Go up', + refresh: 'Refresh', + home: 'Home', + saveAsHome: 'Set Home Page', + saveToFav: 'Save To Bookmarks', + 'saveAsHome.success': 'Set home page success', + + 'bookmark.remove.success': 'Remove Bookmark success', + 'bookmark.add.error1': 'Add Bookmark failed: Exceeds the maximum limit', + 'bookmark.add.success': 'Add Bookmark success', // bucket - "bucket.add": "Create Bucket", - "bucket.multipart": "MultiPart", - acl: "ACL", - privilege: "Privilege", - simplePolicy: "Simple Policy", - more: "More", - "bucket.name": "Bucket Name", - creationTime: "Creation Time", - "bucket.add.name.invalid": "The Bucket name is invalid!", - "acl.warn-not-private.public-read": - "If your bucket ACL is public read anyone can access your bucket without prior authentication. We recommend that you set the Bucket ACL to Private. Exercise caution when setting bucket ACLs.", - "acl.warn-not-private.public-read-write": - "If your bucket ACL is public read/write anyone can access your bucket without prior authentication. We recommend that you set the Bucket ACL to Private. Exercise caution when setting bucket ACLs.", - - "multipart.management": "Multipart", - "multipart.description": - "Manage events and fragments that are generated during the multipipart (upload) process.", - "multipart.description.tooltip": + 'bucket.add': 'Create Bucket', + 'bucket.multipart': 'MultiPart', + acl: 'ACL', + privilege: 'Privilege', + simplePolicy: 'Simple Policy', + more: 'More', + 'bucket.name': 'Bucket Name', + creationTime: 'Creation Time', + 'bucket.add.name.invalid': 'The Bucket name is invalid!', + 'acl.warn-not-private.public-read': + 'If your bucket ACL is public read anyone can access your bucket without prior authentication. We recommend that you set the Bucket ACL to Private. Exercise caution when setting bucket ACLs.', + 'acl.warn-not-private.public-read-write': + 'If your bucket ACL is public read/write anyone can access your bucket without prior authentication. We recommend that you set the Bucket ACL to Private. Exercise caution when setting bucket ACLs.', + + 'multipart.management': 'Multipart', + 'multipart.description': + 'Manage events and fragments that are generated during the multipipart (upload) process.', + 'multipart.description.tooltip': "That is, the Multipart Upload that has been initialized but not the Complete or Abort's Multipart Upload event", - "select.all": "Select All", - "delete.selected": "Delete selected", - "delete.all": "Delete All", + 'select.all': 'Select All', + 'delete.selected': 'Delete selected', + 'delete.all': 'Delete All', - initiatedTime: "Initiated Time", + initiatedTime: 'Initiated Time', - loading: "Loading...", - nodata: "No data", + loading: 'Loading...', + nodata: 'No data', - "delete.multiparts.title": "Delete multiparts", - "delete.multiparts.message": - "Are you sure you want to delete {{num}} multiparts?", - "delete.multiparts.on": "Deleting...", - "delete.multiparts.success": "Deleted multiparts successfully", + 'delete.multiparts.title': 'Delete multiparts', + 'delete.multiparts.message': 'Are you sure you want to delete {{num}} multiparts?', + 'delete.multiparts.on': 'Deleting...', + 'delete.multiparts.success': 'Deleted multiparts successfully', - "bucketACL.update": "Update Bucket ACL", - "bucketACL.update.success": "Update successfully", + 'bucketACL.update': 'Update Bucket ACL', + 'bucketACL.update.success': 'Update successfully', - "bucket.add.success": "Created successfully", + 'bucket.add.success': 'Created successfully', - "bucket.delete.title": "Delete Bucket", - "bucket.delete.message": - "Bucket Name:{{name}}, Region:{{region}}, Are you sure you want to delete this bucket?", - "bucket.delete.success": "Deleted Bucket Successfully", + 'bucket.delete.title': 'Delete Bucket', + 'bucket.delete.message': + 'Bucket Name:{{name}}, Region:{{region}}, Are you sure you want to delete this bucket?', + 'bucket.delete.success': 'Deleted Bucket Successfully', - "simplePolicy.title": "Simplify policy authorization", - "simplePolicy.lb1.1": "Resources", - "simplePolicy.lb1.2": "Privileges", - "privilege.readonly": "ReadOnly", - "privilege.readwrite": "ReadWrite", - "privilege.all": "Master", - "simplePolicy.lb3.1": "View Policy", - "simplePolicy.lb3.2": "Collapse", - "simplePolicy.lb4": "Create policy, named", + 'simplePolicy.title': 'Simplify policy authorization', + 'simplePolicy.lb1.1': 'Resources', + 'simplePolicy.lb1.2': 'Privileges', + 'privilege.readonly': 'ReadOnly', + 'privilege.readwrite': 'ReadWrite', + 'privilege.all': 'Master', + 'simplePolicy.lb3.1': 'View Policy', + 'simplePolicy.lb3.2': 'Collapse', + 'simplePolicy.lb4': 'Create policy, named', - readonly: "Read-Only", - readwrite: "Read-Write", + readonly: 'Read-Only', + readwrite: 'Read-Write', - "simplePolicy.lb5": "And authorized to", - subusers: "Sub User", - usergroups: "User Group", - roles: "Role", + 'simplePolicy.lb5': 'And authorized to', + subusers: 'Sub User', + usergroups: 'User Group', + roles: 'Role', - chooseone: "Choose one", + chooseone: 'Choose one', - "simplePolicy.ok": "OK", - "simplePolicy.noauth.message1": "You are not authorized to get user list", - "simplePolicy.noauth.message2": - "You are not authorized to get use group list", - "simplePolicy.noauth.message3": "You are not authorized to get role list", - "simplePolicy.success": "Apply policy successfully", + 'simplePolicy.ok': 'OK', + 'simplePolicy.noauth.message1': 'You are not authorized to get user list', + 'simplePolicy.noauth.message2': 'You are not authorized to get use group list', + 'simplePolicy.noauth.message3': 'You are not authorized to get role list', + 'simplePolicy.success': 'Apply policy successfully', // settings - "settings.maxUploadNum": "Upload tasks concurrent number", - "settings.maxDownloadNum": "Download tasks concurrent number", - "settings.WhetherShowThumbnail": "Whether to show the image thumbnail", - "settings.WhetherShowThumbnail.msg": - "Displaying thumbnails in the list of files will consume a certain amount of traffic", - "settings.success": "Saved successfully", - "settings.autoUpgrade": "Auto update", - "settings.autoUpgrade.msg": "Download update package automatically", + 'settings.maxUploadNum': 'Upload tasks concurrent number', + 'settings.maxDownloadNum': 'Download tasks concurrent number', + 'settings.WhetherShowThumbnail': 'Whether to show the image thumbnail', + 'settings.WhetherShowThumbnail.msg': + 'Displaying thumbnails in the list of files will consume a certain amount of traffic', + 'settings.success': 'Saved successfully', + 'settings.autoUpgrade': 'Auto update', + 'settings.autoUpgrade.msg': 'Download update package automatically', // bookmark - "bookmarks.title": "Bookmarks", - time: "Time", - "bookmarks.delete.success": "Deleted bookmark successfully", + 'bookmarks.title': 'Bookmarks', + time: 'Time', + 'bookmarks.delete.success': 'Deleted bookmark successfully', - "opensource.address": "Open source", - foundNewVersion: "Found new version", - clickToDownload: "Click to download", - currentIsLastest: "This is the lastest version!", + 'opensource.address': 'Open source', + foundNewVersion: 'Found new version', + clickToDownload: 'Click to download', + currentIsLastest: 'This is the lastest version!', // files - upload: "Upload", - "folder.create": "Directory", - "folder.create.success": "Directory created successfully", - "folder.name": "Name", - - download: "Download", - copy: "Copy", - move: "Move", - paste: "Paste", - rename: "Rename", - getAddress: "Address", - genAuthToken: "Authorization Token", - - "rename.to": "Rename To", - "whetherCover.title": "Whether cover", - "whetherCover.message1": "Has the folder of the same name, is it covered?", - "whetherCover.message2": "Has the file of the same name already covered?", - "rename.success": "Rename successfully", - "rename.on": "Renaming...", - "folder.in": "Folder", - file: "File", - folder: "Folder", - - "copy.on": "Copying...", - "move.on": "Moving...", - - "use.cancelled": "Cancelled by user", - - "copy.error1": "Some files can not be copied", - "move.error1": "Some files can not be moved", - "copy.success": "Copied successfully", - "move.success": "Moved successfully", - - stop: "Stop", - - "paste.resources": "Paste to current directory", - - "copy.cancel": "Cancel Copy", - "move.cancel": "Cancel Move", - - "search.files.placeholder": "Filter by name prefix", - "search.files.num_msg": - "The number of currently loaded directories and objects is {{num}}, not the total number of objects in the current bucket.", - - "genAuthToken.title": "Generate Authorization Token", - "genAuthToken.message1.1": "Authorize to Bucket", - "genAuthToken.message1.2": "Authorize to Folder", - "genAuthToken.message2": "Privilege", - - "effective.duration": "Effective duration", - "unit.second": "s", - - "genAuthToken.message3.1": "You also need to specify a role", - "genAuthToken.message3.2": - "This role requires at least {{privilege}} permission to access this {{type}}", - - "genAuthToken.message4": "Authorization Token", - "genAuthToken.message5": - "Log in to the OSS browser using the generated authorization code above, You can get {{privilege}} permission to access this {{type}} [{{object}}], Valid until {{expiration}}.", - "genAuthToken.message6.1": "Generate", - "genAuthToken.message6.2": "Re-Generate", - - "deleteModal.title": "Delete These Files", - "deleteModal.message1": "The following directory or file will be deleted", - "delete.on": "Deleting...", - "delete.success": "Deleted successfully", - "deleteModal.message2": "Has been cancelled", - "deleteModal.message3": "Some directories or files can not be deleted", - - "paste.message1": + upload: 'Upload', + 'folder.create': 'Directory', + 'folder.create.success': 'Directory created successfully', + 'folder.name': 'Name', + + download: 'Download', + copy: 'Copy', + move: 'Move', + paste: 'Paste', + rename: 'Rename', + getAddress: 'Address', + genAuthToken: 'Authorization Token', + + 'rename.to': 'Rename To', + 'whetherCover.title': 'Whether cover', + 'whetherCover.message1': 'Has the folder of the same name, is it covered?', + 'whetherCover.message2': 'Has the file of the same name already covered?', + 'rename.success': 'Rename successfully', + 'rename.on': 'Renaming...', + 'folder.in': 'Folder', + file: 'File', + folder: 'Folder', + + 'copy.on': 'Copying...', + 'move.on': 'Moving...', + + 'use.cancelled': 'Cancelled by user', + + 'copy.error1': 'Some files can not be copied', + 'move.error1': 'Some files can not be moved', + 'copy.success': 'Copied successfully', + 'move.success': 'Moved successfully', + + stop: 'Stop', + + 'paste.resources': 'Paste to current directory', + + 'copy.cancel': 'Cancel Copy', + 'move.cancel': 'Cancel Move', + + 'search.files.placeholder': 'Filter by name prefix', + 'search.files.num_msg': + 'The number of currently loaded directories and objects is {{num}}, not the total number of objects in the current bucket.', + + 'genAuthToken.title': 'Generate Authorization Token', + 'genAuthToken.message1.1': 'Authorize to Bucket', + 'genAuthToken.message1.2': 'Authorize to Folder', + 'genAuthToken.message2': 'Privilege', + + 'effective.duration': 'Effective duration', + 'unit.second': 's', + + 'genAuthToken.message3.1': 'You also need to specify a role', + 'genAuthToken.message3.2': + 'This role requires at least {{privilege}} permission to access this {{type}}', + + 'genAuthToken.message4': 'Authorization Token', + 'genAuthToken.message5': + 'Log in to the OSS browser using the generated authorization code above, You can get {{privilege}} permission to access this {{type}} [{{object}}], Valid until {{expiration}}.', + 'genAuthToken.message6.1': 'Generate', + 'genAuthToken.message6.2': 'Re-Generate', + + 'deleteModal.title': 'Delete These Files', + 'deleteModal.message1': 'The following directory or file will be deleted', + 'delete.on': 'Deleting...', + 'delete.success': 'Deleted successfully', + 'deleteModal.message2': 'Has been cancelled', + 'deleteModal.message3': 'Some directories or files can not be deleted', + + 'paste.message1': '{{action}} {{name}}... to this directory (The same file or directory will be covered)?', - "acl.update.title": "Update ACL", - "acl.update.success": "ACL Updated successfully", - "aclType.private.message": - "Private: All access to object needs to be authenticated", - "aclType.public-read.message": - "Public read: need to write for the operation of the object authentication; object can be anonymous read", - "aclType.public-read-write.message": - "Public read and write: Everyone can read and write objects", - - "getAddress.title": "Get Address", - address: "Address", - "getAddress.message": "Please enter the validity period of the link", - generate: "Generate", - "qrcode.download": "Sweep code to download", - not_use_own_domain: "Not use other domains", - custom_domain: "Other Domains", - - "restore.checker.message1": - "Archive need to be restored in order to preview or download.", - "restore.immediately": "Restore immediately", - "restore.checker.message2": - "The archive has been restored, the expiration time", - "restore.onprogress": "Archive file is recovering, please be patient ...", - "restore.on": "Sending...", - "restore.success": "Restore request has been send successfully", - "restore.days": "Days", - "restore.message2": "The expiration time", - "restore.title": "Restore", - "restore.msg": "Select the files that need to be restored", - restore: "Restore", - - preview: "Preview", - "cannot.preview": "Can not preview", - "cannot.preview.this.file": "Can not preview this file.", - "tryto.open.as.textfile": "Try to open as a text file", - "preview.in.web.browser": "Preview in web browser", - - save: "Save", - size: "Size", - filesize: "File size", - "codepreview.notsupport": - "This file can not be opening directly, please download to the local and then open.", - "download.file": "Download File", - - lastModifyTime: "Last Modified", - "loading.more": "Loading more...", - - "download.addtolist.on": "Being added to the download queue", - "download.addtolist.success": "All added", - - "upload.addtolist.on": "Being added to the upload queue", - "upload.addtolist.success": "All added", - - "transframe.search.placeholder": "Filter by name or status", - "ram.search.placeholder": "Search by name or modified time", - - "start.all": "Start All", - "pause.all": "Stop All", - "clear.finished": "Clear Finished", - "clear.all": "Clear All", - - "clear.all.title": "Clear All", - "clear.all.download.message": - "Are you sure you want to clear all download tasks?", - "clear.all.upload.message": - "Are you sure you want to clear all upload tasks?", - - "pause.on": "Stopping...", - "pause.success": "Stopped successfully", - "remove.from.list.title": "Remove", - "remove.from.list.message": "Are you sure you want to remove this task?", - - "status.running.uploading": "Uploading", - "status.running.downloading": "Downloading", - "status.running": "Running", - "status.stopped": "Stopped", - "status.failed": "Failed", - "status.finished": "Finished", - "status.waiting": "Waiting", - "status.retrying": "Retrying", - "status.retrytimes": "Times", - "status.verifying": "Verifying", - - users: "Sub Users", - "users.title": "Sub Users", - "user.id": "UserId", - displayName: "Dislpay Name", - comments: "Comments", - update: "Update", - username: "User Name", - details: "Details", - add: "Add", - mobilePhone: "Mobile Phone", - ak: "AccessKey", - aks: "AccessKeys", - email: "Email", - - "user.delete.title": "Delete User", - "user.delete.message": "Are you sure you want to delete this user: {{name}}?", - "user.delete.on": "Deleting...", - "user.delete.success": "Delete user successfully", - - status: "Status", - accessKeySecret: "AccessKeySecret", - createTime: "Create Time", - - "ak.status.update.title.Active": "Disable AccessKey", - "ak.status.update.title.Inactive": "Enable AccessKey", - "ak.status.update.message.Active": - "Are you sure you want to Disable this AccessKey?", - "ak.status.update.message.Inactive": + 'acl.update.title': 'Update ACL', + 'acl.update.success': 'ACL Updated successfully', + 'aclType.private.message': 'Private: All access to object needs to be authenticated', + 'aclType.public-read.message': + 'Public read: need to write for the operation of the object authentication; object can be anonymous read', + 'aclType.public-read-write.message': 'Public read and write: Everyone can read and write objects', + + 'getAddress.title': 'Get Address', + address: 'Address', + 'getAddress.message': 'Please enter the validity period of the link', + generate: 'Generate', + 'qrcode.download': 'Sweep code to download', + not_use_own_domain: 'Not use other domains', + custom_domain: 'Other Domains', + + 'restore.checker.message1': 'Archive need to be restored in order to preview or download.', + 'restore.immediately': 'Restore immediately', + 'restore.checker.message2': 'The archive has been restored, the expiration time', + 'restore.onprogress': 'Archive file is recovering, please be patient ...', + 'restore.on': 'Sending...', + 'restore.success': 'Restore request has been send successfully', + 'restore.days': 'Days', + 'restore.message2': 'The expiration time', + 'restore.title': 'Restore', + 'restore.msg': 'Select the files that need to be restored', + 'restore.msg.no': + 'The selected files to restore include IA files, Standard files, files that are being restored, or restored files. You do not need to restore these files.', + restore: 'Restore', + + preview: 'Preview', + 'cannot.preview': 'Can not preview', + 'cannot.preview.this.file': 'Can not preview this file.', + 'tryto.open.as.textfile': 'Try to open as a text file', + 'preview.in.web.browser': 'Preview in web browser', + + save: 'Save', + size: 'Size', + filesize: 'File size', + 'codepreview.notsupport': + 'This file can not be opening directly, please download to the local and then open.', + 'download.file': 'Download File', + + lastModifyTime: 'Last Modified', + 'loading.more': 'Loading more...', + + 'download.addtolist.on': 'Being added to the download queue', + 'download.addtolist.success': 'All added', + + 'upload.addtolist.on': 'Being added to the upload queue', + 'upload.addtolist.success': 'All added', + + 'transframe.search.placeholder': 'Filter by name or status', + 'ram.search.placeholder': 'Search by name or modified time', + + 'start.all': 'Start All', + 'pause.all': 'Stop All', + 'clear.finished': 'Clear Finished', + 'clear.all': 'Clear All', + + 'clear.all.title': 'Clear All', + 'clear.all.download.message': 'Are you sure you want to clear all download tasks?', + 'clear.all.upload.message': 'Are you sure you want to clear all upload tasks?', + + 'pause.on': 'Stopping...', + 'pause.success': 'Stopped successfully', + 'remove.from.list.title': 'Remove', + 'remove.from.list.message': 'Are you sure you want to remove this task?', + + 'status.running.uploading': 'Uploading', + 'status.running.downloading': 'Downloading', + 'status.running': 'Running', + 'status.stopped': 'Stopped', + 'status.failed': 'Failed', + 'status.finished': 'Finished', + 'status.waiting': 'Waiting', + 'status.retrying': 'Retrying', + 'status.retrytimes': 'Times', + 'status.verifying': 'Verifying', + + users: 'Sub Users', + 'users.title': 'Sub Users', + 'user.id': 'UserId', + displayName: 'Dislpay Name', + comments: 'Comments', + update: 'Update', + username: 'User Name', + details: 'Details', + add: 'Add', + mobilePhone: 'Mobile Phone', + ak: 'AccessKey', + aks: 'AccessKeys', + email: 'Email', + + 'user.delete.title': 'Delete User', + 'user.delete.message': 'Are you sure you want to delete this user: {{name}}?', + 'user.delete.on': 'Deleting...', + 'user.delete.success': 'Delete user successfully', + + status: 'Status', + accessKeySecret: 'AccessKeySecret', + createTime: 'Create Time', + + 'ak.status.update.title.Active': 'Disable AccessKey', + 'ak.status.update.title.Inactive': 'Enable AccessKey', + 'ak.status.update.message.Active': + 'Are you sure you want to Disable this AccessKey?', + 'ak.status.update.message.Inactive': 'Are you sure you want to Enable this AccessKey?', - "ak.delete.title": "Delete AccessKey", - "ak.delete.message": - "Are you sure you want to Delete this AccessKey", - - "user.update.message.tip": - "Please make sure you have got AliyunRAMFullAccess permissions", - "user.list.message.tip": - "Here we only provide the necessary user management functions, for further enhancements, please go to the RAM Console to operate:", - - "status.Active": "Active", - "status.Inactive": "Inactive", - enable: "Enable", - disable: "Disable", - show: "Show", - "can.not.get.accessKeySecret": "Can not get AccessKeySecret", - - "settings.subtitle.updown": "Transfer Settings", - "settings.subtitle.sys": "System Settings", - "settings.subtitle.email": "Email Sending Settings", - "settings.mailSmtp.addr": "SMTP Address", - "settings.mailSmtp.ssl": "Use SSL", - "settings.mailSmtp.from": "Email(From)", - - user: "UserName", - pass: "Password", - test: "Test", - - "mail.test.title": "Test mail", - "mail.test.message": + 'ak.delete.title': 'Delete AccessKey', + 'ak.delete.message': 'Are you sure you want to Delete this AccessKey', + + 'user.update.message.tip': 'Please make sure you have got AliyunRAMFullAccess permissions', + 'user.list.message.tip': + 'Here we only provide the necessary user management functions, for further enhancements, please go to the RAM Console to operate:', + + 'status.Active': 'Active', + 'status.Inactive': 'Inactive', + enable: 'Enable', + disable: 'Disable', + show: 'Show', + 'can.not.get.accessKeySecret': 'Can not get AccessKeySecret', + + 'settings.subtitle.updown': 'Transfer Settings', + 'settings.subtitle.sys': 'System Settings', + 'settings.subtitle.email': 'Email Sending Settings', + 'settings.mailSmtp.addr': 'SMTP Address', + 'settings.mailSmtp.ssl': 'Use SSL', + 'settings.mailSmtp.from': 'Email(From)', + + user: 'UserName', + pass: 'Password', + test: 'Test', + + 'mail.test.title': 'Test mail', + 'mail.test.message': 'It will send the test message to: {{from}}', - "mail.test.success": "Sending successfully", - "mail.send.on": "Sending...", - - "new.user": "[ Create One ]", - "new.user.name": "New User Name", - "new.user.random.gen": "Generate", - "new.user.email.send": "Email (to)", - "new.user.email.noset": "You need to set up mail sending configuration first", - "new.user.email.noset.open": "Open Settings Dialog", - - "click.copy": "Copy", - - "http.headers": "Http Headers", - key: "Key", - value: "Value", - userMetaData: "User-defined Metadata", - - "setting.on": "Setting..", - "setting.success": "Setting successfully", - - "send.to": "Mail to", - "send.email": "Mail it", - "send.now": "Send", - "file.download.address": "file download address", - "file.download.warning": - "If you have enabled the Referer whitelist for OSS Buckets and the Referer field cannot be left empty, you will not be able to access this URL directly through a browser.", - - "file.op.set_symlink": "Set Soft Link", - "file.attr.symlink_src": "Source File (full path)", - "file.attr.symlink_file": "Soft Link File or Folder", - "file.message.symlink_help{target}!lines": - "Soft Link File\nSource File Address: {{target}}\nYou can access the content of the source file through this file link.", - "file.message.symlink_rule{min,max}!html!lines": - "Soft link file or folder naming rules:\nIf the file is in the current folder, specify filename. To specify a file in a different folder, use the aaa/bbb/filename format.\n1. The name cannot contain emojis.\n2. The path is separated with forward slashes (/). The name cannot start or end with forward slashes (/). The name cannot contain consecutive forward slashes (/).\n3. The subfolder name cannot contain consecutive periods (.).\n4. The name must be {{min}} to {{max}} characters in length.", - "file.md.name.error.emoji": - "The folder name can contain only UTF-8 characters. The name cannot contain emojis.", - "file.md.name.error.2dots": - "The subfolder name cannot contain consecutive periods (.)", - "file.md.name.error.continuous slash": - "The name cannot contain consecutive forward slashes (/).", - "file.message.validation_end_slash!html": - "The name cannot start with a forward slash (/) or consecutive backslashes (\\).", - - "copy.successfully": "It has been copied to the clipboard", - "click.download": "click to download", - - saving: "Saving", - "save.successfully": "Saved", - "content.isnot.modified": "The content is not modified", - - logining: "Logging in ...", - "login.successfully": "Login successful, jumping ...", - "login.endpoint.error": "Please make sure Endpoint is correct", - - "upgrade.start": "Upgrade", - "upgrade.downloading": "Start download...", - "upgrade.download.field": - "Automatic update failed, please manually download the installation package.", - "upgrade.download.success": "Download successfully, install and restart", - - "Insufficient disk space": "Insufficient disk space", - - "grant.email.title": "OSS Browser Authorization", - "grant.email.body.title": - "OSS Browser currently supports 2 ways to login, you can choose any one:", - - "goto.create.role": "Go to create a role", - "restore.days.tips.7": "Validity range 1-7 days", + 'mail.test.success': 'Sending successfully', + 'mail.send.on': 'Sending...', + + 'new.user': '[ Create One ]', + 'new.user.name': 'New User Name', + 'new.user.random.gen': 'Generate', + 'new.user.email.send': 'Email (to)', + 'new.user.email.noset': 'You need to set up mail sending configuration first', + 'new.user.email.noset.open': 'Open Settings Dialog', + + 'click.copy': 'Copy', + + 'http.headers': 'Http Headers', + key: 'Key', + value: 'Value', + userMetaData: 'User-defined Metadata', + + 'setting.on': 'Setting..', + 'setting.success': 'Setting successfully', + + 'send.to': 'Mail to', + 'send.email': 'Mail it', + 'send.now': 'Send', + 'file.download.address': 'file download address', + 'file.download.warning': + 'If you have enabled the Referer whitelist for OSS Buckets and the Referer field cannot be left empty, you will not be able to access this URL directly through a browser.', + + 'file.op.set_symlink': 'Set Soft Link', + 'file.attr.symlink_src': 'Source File (full path)', + 'file.attr.symlink_file': 'Soft Link File or Folder', + 'file.message.symlink_help{target}!lines': + 'Soft Link File\nSource File Address: {{target}}\nYou can access the content of the source file through this file link.', + 'file.message.symlink_rule{min,max}!html!lines': + 'Soft link file or folder naming rules:\nIf the file is in the current folder, specify filename. To specify a file in a different folder, use the aaa/bbb/filename format.\n1. The name cannot contain emojis.\n2. The path is separated with forward slashes (/). The name cannot start or end with forward slashes (/). The name cannot contain consecutive forward slashes (/).\n3. The subfolder name cannot contain consecutive periods (.).\n4. The name must be {{min}} to {{max}} characters in length.', + 'file.md.name.error.emoji': + 'The folder name can contain only UTF-8 characters. The name cannot contain emojis.', + 'file.md.name.error.2dots': 'The subfolder name cannot contain consecutive periods (.)', + 'file.md.name.error.continuous slash': 'The name cannot contain consecutive forward slashes (/).', + 'file.message.validation_end_slash!html': + 'The name cannot start with a forward slash (/) or consecutive backslashes (\\).', + + 'copy.successfully': 'It has been copied to the clipboard', + 'click.download': 'click to download', + + saving: 'Saving', + 'save.successfully': 'Saved', + 'content.isnot.modified': 'The content is not modified', + + logining: 'Logging in ...', + 'login.successfully': 'Login successful, jumping ...', + 'login.endpoint.error': 'Please make sure Endpoint is correct', + + 'upgrade.start': 'Upgrade', + 'upgrade.downloading': 'Start download...', + 'upgrade.download.field': + 'Automatic update failed, please manually download the installation package.', + 'upgrade.download.success': 'Download successfully, install and restart', + + 'Insufficient disk space': 'Insufficient disk space', + + 'grant.email.title': 'OSS Browser Authorization', + 'grant.email.body.title': + 'OSS Browser currently supports 2 ways to login, you can choose any one:', + + 'goto.create.role': 'Go to create a role', + 'restore.days.tips.7': 'Validity range 1-7 days', + 'restore.days.tips.365': 'Validity range 1-365 days', + 'restore.file.type.archive': 'Archive Object', + 'restore.file.type.cold.archive': 'Cold Archive Object', + 'restore.file.type.deep.cold.archive': 'Deep Cold Archive Object', + 'restore.copyvalidity': 'Replica Validity Period', + 'restore.mode': 'Restore Mode', + 'restore.mode.type.expedited': 'Expedited', + 'restore.mode.type.standard': 'Standard', + 'restore.mode.type.bulk': 'Bulk', + 'restore.mode.type.expedited.explain': 'Restored within 1 hour.', + 'restore.mode.type.standard.explain': 'Restored within 2 to 5 hours.', + 'restore.mode.type.bulk.explain': 'Restored within 5 to 12 hours.}', + 'restore.mode.type.expedited.explain.deep': 'The object is restored within 12 hours and can be read after the object is restored.', + 'restore.mode.type.standard.explain.deep': 'The object is restored within 48 hours and can be read after the object is restored.', + restoring: 'restoring', + }; diff --git a/node/i18n/ja-JP.js b/node/i18n/ja-JP.js index b95ca641..ef0fa42b 100644 --- a/node/i18n/ja-JP.js +++ b/node/i18n/ja-JP.js @@ -1,530 +1,535 @@ module.exports = { - "app.name": "OSSブラウザ", - language: "言語", - name: "名前", - type: "タイプ", - customize: "カスタマイズ", - "public.cloud": "パブリッククラウド", - - "region.oss-cn-hangzhou": "杭州 (中国東部 1)", - "region.oss-cn-shanghai": "上海 (中国東部 2)", - "region.oss-cn-nanjing": "南京の地域 (中国東部 5)", - "region.oss-cn-fuzhou": "福州地域 (中国東部 6)", - "region.oss-cn-qingdao": "青島 (中国北部 1)", - "region.oss-cn-beijing": "北京 (中国北部 2)", - "region.oss-cn-zhangjiakou": "張家口 (中国北部 3)", - "region.oss-cn-huhehaote": "フフホト (中国北部 5)", - "region.oss-cn-wulanchabu": "ウラン・チャブ (中国北部 6)", - "region.oss-cn-shenzhen": "深セン (中国南部 1)", - "region.oss-cn-heyuan": "河源(中国南部 2)", - "region.oss-cn-chengdu": "成都(中国西部 1)", - "region.oss-cn-hongkong": "香港(中国)", - "region.oss-cn-guangzhou": "广州(中国南部 3)", - - "region.oss-ap-southeast-1": "アジア東南 1 (シンガポール)", - "region.oss-ap-southeast-2": "アジア東南 2 (シドニー)", - "region.oss-ap-southeast-3": "アジア東南 3 (クアラルンプール)", - "region.oss-ap-southeast-5": "アジア東南 5 (ジャカルタ)", - "region.oss-ap-northeast-1": "東京 (日本)", - "region.oss-ap-northeast-2": "ソウル (韓国)", - "region.oss-ap-south-1": "アジア南部 1 (ムンバイ)", - "region.oss-ap-southeast-6": "マニラ(フィリピン)", - "region.oss-ap-southeast-7": "バンコク(タイ)", - - "region.oss-us-west-1": "シリコンバレー (米国西部 1)", - "region.oss-us-east-1": "バージニア (米国東部 1)", - "region.oss-eu-central-1": "フランクフルト (ドイツ)", - "region.oss-me-east-1": "ドバイ(アラブ首長国連邦)", - "region.oss-eu-west-1": "イングランド (ロンドン)", - - optional: "オプション", - default: "デフォルト", - "auth.akLogin": "AK ログイン", - "auth.tokenLogin": "トークンログイン", - "auth.presetOssPath": "プリセット OSS パス", - "auth.presetOssPath.placeholder": "オプション, 形式: oss://bucket/key/", - "auth.id.placeholder": "AccessKeyId", - "auth.secret.placeholder": "AccessKeySecret", - "auth.stoken.placeholder": "STS トークン", - "auth.eptpl": "エンドポイントテンプレート", - "auth.eptpl.placeholder": "デフォルト: http://{region}.aliyuncs.com", - - "auth.eptpl.popup.msg1": - "パブリッククラウドの場合は、デフォルト設定をそのまま使用できます", - "auth.eptpl.popup.msg2": - "プライベートクラウドの場合は、次のようなカスタムエンドポイントを入力してください:", - - "auth.presetOssPath.popup.msg1": - "現在使用されている AK には、すべてのバケットのアクセス権があるので、[プリセット OSS パス] を設定する必要はありません。", - "auth.presetOssPath.popup.msg2": - "現在使用されている AK は、特定バケットまたはバケット配下の特定パスに対するアクセス権しかないので、[プリセット OSS パス] を設定する必要があります", - - "auth.remember.popup.msg1": - "AK を保存するには、 [入力情報の保存] チェックボックスをチェックします。次にログインするときは、[AK 履歴] をクリックしてログインするキーを選択します。AK を手動で入力する必要はありません。 一時的に使用するコンピューターの場合、これをチェックしないでください", - - region: "リージョン", - requestPay: "request payer", - "requestpay.popup.msg": - "あなたの許可されたバケットが要求支払人モードを開き、あなたがそのバケットの所有者ではない場合、あなたは「要求支払人モード」をチェックするべきです。 あなたがバケツを訪れたときにあなたが生み出すトラフィックやリクエストなどの量はあなたによって支払われるでしょう。詳細については、ヘルプドキュメントを参照してください", - "auth.region.placeholder": "オプション", - "auth.description": "説明", - "auth.description.placeholder": "オプション、最大 30 文字", - "auth.remember": "入力情報の保存", - "auth.login": "ログイン", - "auth.akHistories": "AK 履歴", - "auth.secure": "HTTPS暗号化", - "auth.keepLoggedIn": "ログインしたままにする", - - "auth.authToken": "認証トークン", - "auth.authToken.tooltip": "ドキュメントの表示", - "auth.authToken.placeholder": "認証トークンを入力してください", - "auth.authToken.error.invalid": "有効な認証トークンを入力してください", - "auth.authToken.error.expired": "認証トークンは期限切れです", - "auth.authToken.info.validUntil": "{{expiration}} まで有効です。", - "auth.authToken.info.leftTime": "残り時間", - - "auth.clearHistories": "AK 履歴の削除", - - actions: "アクション", - use: "利用", - delete: "削除", - ok: "OK", - cancel: "キャンセル", - close: "クローズ", - - "auth.removeAK.title": "AK の削除", - "auth.removeAK.message": - "AK {{id}} を削除してもよろしいですか。", - - "auth.clearAKHistories.title": "AK 履歴の削除", - "auth.clearAKHistories.message": "削除してもよろしいですか。", - "auth.clearAKHistories.successMessage": "AK 履歴は完全に削除されました。", - - "storageClassesType.standard": "標準", - "storageClassesType.ia": "低頻度アクセス", - "storageClassesType.archive": "アーカイブ", - - "aclType.default": "バケットから継承", - "aclType.public-read-write": "公開読み書き", - "aclType.public-read": "公開読み取り", - "aclType.private": "非公開", - - files: "ファイル", - settings: "設定", - about: "バージョン情報", - bookmarks: "ブックマーク", - logout: "ログアウト", - "logout.message": "ログアウトしてもよろしいですか。", - "main.upgration": "リリースノート", - tempCert: "一時認証", - "setup.success": "セットアップを完了しました", - forbidden: - "選択したオブジェクトを現在のフォルダーまたは Region 間で移動することはできません", + 'app.name': 'OSSブラウザ', + language: '言語', + name: '名前', + type: 'タイプ', + customize: 'カスタマイズ', + 'public.cloud': 'パブリッククラウド', + + 'region.oss-cn-hangzhou': '杭州 (中国東部 1)', + 'region.oss-cn-shanghai': '上海 (中国東部 2)', + 'region.oss-cn-nanjing': '南京の地域 (中国東部 5)', + 'region.oss-cn-fuzhou': '福州地域 (中国東部 6)', + 'region.oss-cn-qingdao': '青島 (中国北部 1)', + 'region.oss-cn-beijing': '北京 (中国北部 2)', + 'region.oss-cn-zhangjiakou': '張家口 (中国北部 3)', + 'region.oss-cn-huhehaote': 'フフホト (中国北部 5)', + 'region.oss-cn-wulanchabu': 'ウラン・チャブ (中国北部 6)', + 'region.oss-cn-shenzhen': '深セン (中国南部 1)', + 'region.oss-cn-heyuan': '河源(中国南部 2)', + 'region.oss-cn-chengdu': '成都(中国西部 1)', + 'region.oss-cn-hongkong': '香港(中国)', + 'region.oss-cn-guangzhou': '广州(中国南部 3)', + + 'region.oss-ap-southeast-1': 'アジア東南 1 (シンガポール)', + 'region.oss-ap-southeast-2': 'アジア東南 2 (シドニー)', + 'region.oss-ap-southeast-3': 'アジア東南 3 (クアラルンプール)', + 'region.oss-ap-southeast-5': 'アジア東南 5 (ジャカルタ)', + 'region.oss-ap-northeast-1': '東京 (日本)', + 'region.oss-ap-northeast-2': 'ソウル (韓国)', + 'region.oss-ap-south-1': 'アジア南部 1 (ムンバイ)', + 'region.oss-ap-southeast-6': 'マニラ(フィリピン)', + 'region.oss-ap-southeast-7': 'バンコク(タイ)', + + 'region.oss-us-west-1': 'シリコンバレー (米国西部 1)', + 'region.oss-us-east-1': 'バージニア (米国東部 1)', + 'region.oss-eu-central-1': 'フランクフルト (ドイツ)', + 'region.oss-me-east-1': 'ドバイ(アラブ首長国連邦)', + 'region.oss-eu-west-1': 'イングランド (ロンドン)', + + optional: 'オプション', + default: 'デフォルト', + 'auth.akLogin': 'AK ログイン', + 'auth.tokenLogin': 'トークンログイン', + 'auth.presetOssPath': 'プリセット OSS パス', + 'auth.presetOssPath.placeholder': 'オプション, 形式: oss://bucket/key/', + 'auth.id.placeholder': 'AccessKeyId', + 'auth.secret.placeholder': 'AccessKeySecret', + 'auth.stoken.placeholder': 'STS トークン', + 'auth.eptpl': 'エンドポイントテンプレート', + 'auth.eptpl.placeholder': 'デフォルト: http://{region}.aliyuncs.com', + + 'auth.eptpl.popup.msg1': 'パブリッククラウドの場合は、デフォルト設定をそのまま使用できます', + 'auth.eptpl.popup.msg2': + 'プライベートクラウドの場合は、次のようなカスタムエンドポイントを入力してください:', + + 'auth.presetOssPath.popup.msg1': + '現在使用されている AK には、すべてのバケットのアクセス権があるので、[プリセット OSS パス] を設定する必要はありません。', + 'auth.presetOssPath.popup.msg2': + '現在使用されている AK は、特定バケットまたはバケット配下の特定パスに対するアクセス権しかないので、[プリセット OSS パス] を設定する必要があります', + + 'auth.remember.popup.msg1': + 'AK を保存するには、 [入力情報の保存] チェックボックスをチェックします。次にログインするときは、[AK 履歴] をクリックしてログインするキーを選択します。AK を手動で入力する必要はありません。 一時的に使用するコンピューターの場合、これをチェックしないでください', + + region: 'リージョン', + requestPay: 'request payer', + 'requestpay.popup.msg': + 'あなたの許可されたバケットが要求支払人モードを開き、あなたがそのバケットの所有者ではない場合、あなたは「要求支払人モード」をチェックするべきです。 あなたがバケツを訪れたときにあなたが生み出すトラフィックやリクエストなどの量はあなたによって支払われるでしょう。詳細については、ヘルプドキュメントを参照してください', + 'auth.region.placeholder': 'オプション', + 'auth.description': '説明', + 'auth.description.placeholder': 'オプション、最大 30 文字', + 'auth.remember': '入力情報の保存', + 'auth.login': 'ログイン', + 'auth.akHistories': 'AK 履歴', + 'auth.secure': 'HTTPS暗号化', + 'auth.keepLoggedIn': 'ログインしたままにする', + + 'auth.authToken': '認証トークン', + 'auth.authToken.tooltip': 'ドキュメントの表示', + 'auth.authToken.placeholder': '認証トークンを入力してください', + 'auth.authToken.error.invalid': '有効な認証トークンを入力してください', + 'auth.authToken.error.expired': '認証トークンは期限切れです', + 'auth.authToken.info.validUntil': '{{expiration}} まで有効です。', + 'auth.authToken.info.leftTime': '残り時間', + + 'auth.clearHistories': 'AK 履歴の削除', + + actions: 'アクション', + use: '利用', + delete: '削除', + ok: 'OK', + cancel: 'キャンセル', + close: 'クローズ', + + 'auth.removeAK.title': 'AK の削除', + 'auth.removeAK.message': 'AK {{id}} を削除してもよろしいですか。', + + 'auth.clearAKHistories.title': 'AK 履歴の削除', + 'auth.clearAKHistories.message': '削除してもよろしいですか。', + 'auth.clearAKHistories.successMessage': 'AK 履歴は完全に削除されました。', + + storageClassesType: 'ストレージタイプ', + 'storageClassesType.standard': '標準', + 'storageClassesType.ia': '低頻度アクセス', + 'storageClassesType.archive': 'アーカイブ', + 'storageClassesType.coldarchive': 'コールド・アーカイブ', + 'storageClassesType.deepcoldarchive': 'ディープコールドアーカイブストレージ', + + 'aclType.default': 'バケットから継承', + 'aclType.public-read-write': '公開読み書き', + 'aclType.public-read': '公開読み取り', + 'aclType.private': '非公開', + + files: 'ファイル', + settings: '設定', + about: 'バージョン情報', + bookmarks: 'ブックマーク', + logout: 'ログアウト', + 'logout.message': 'ログアウトしてもよろしいですか。', + 'main.upgration': 'リリースノート', + tempCert: '一時認証', + 'setup.success': 'セットアップを完了しました', + forbidden: '選択したオブジェクトを現在のフォルダーまたは Region 間で移動することはできません', //address bar - backward: "戻る", - forward: "進む", - goUp: "上がる", - refresh: "更新", - home: "ホーム", - saveAsHome: "ホームページに設定", - saveToFav: "ブックマークに保存", - "saveAsHome.success": "ホームページに設定しました", - - "bookmark.remove.success": "ブックマークを削除しました", - "bookmark.add.error1": - "ブックマークの追加に失敗しました: 個数の上限に達しました", - "bookmark.add.success": "ブックマークを追加しました", + backward: '戻る', + forward: '進む', + goUp: '上がる', + refresh: '更新', + home: 'ホーム', + saveAsHome: 'ホームページに設定', + saveToFav: 'ブックマークに保存', + 'saveAsHome.success': 'ホームページに設定しました', + + 'bookmark.remove.success': 'ブックマークを削除しました', + 'bookmark.add.error1': 'ブックマークの追加に失敗しました: 個数の上限に達しました', + 'bookmark.add.success': 'ブックマークを追加しました', //bucket - "bucket.add": "バケットの作成", - "bucket.multipart": "マルチパート", - acl: "ACL", - privilege: "権限", - simplePolicy: "シンプルポリシー", - more: "詳細", - "bucket.name": "バケット名", - creationTime: "作成日時", - "bucket.add.name.invalid": "バケット名が無効です!", - "acl.warn-not-private.public-read": - "公開読み取り権限は、匿名でバケット内のデータにアクセスでき、 セキュリティリスクが高くなるため、 非公開 (private) を推奨します。", - "acl.warn-not-private.public-read-write": - "公開読み書き権限は、匿名でバケット内のデータにアクセスでき、 セキュリティリスクが高くなるため、 非公開 (private) を推奨します。", - - "multipart.management": "マルチパート", - "multipart.description": - "マルチパート (アップロード) プロセス中に生成されたイベントやフラグメントを管理します", - "multipart.description.tooltip": - "つまり、初期化されたが、完了または中止のイベントが来ていないマルチパートアップロードです", - - "select.all": "すべて選択", - "delete.selected": "選択されたものを削除", - "delete.all": "すべて削除", - - initiatedTime: "開始日時", - - loading: "ロード中...", - nodata: "データなし", - - "delete.multiparts.title": "マルチパートの削除", - "delete.multiparts.message": - "{{num}} 個のマルチパートを削除してもよろしいですか。", - "delete.multiparts.on": "削除中...", - "delete.multiparts.success": "マルチパートを削除しました", - - "bucketACL.update": "バケット ACL の更新", - "bucketACL.update.success": "更新を完了しました", - - "bucket.add.success": "作成を完了しました", - - "bucket.delete.title": "バケットの削除", - "bucket.delete.message": - "バケット名: {{name}}, リージョン: {{region}}, このバケットを削除してもよろしいですか。", - "bucket.delete.success": "バケットを削除しました", - - "simplePolicy.title": "ポリシー認証の簡略化", - "simplePolicy.lb1.1": "リソース", - "simplePolicy.lb1.2": "権限", - "privilege.readonly": "読み取り", - "privilege.readwrite": "読み書き", - "privilege.all": "フルコントロール", - "simplePolicy.lb3.1": "ポリシーの表示", - "simplePolicy.lb3.2": "圧縮", - "simplePolicy.lb4": "名前付きポリシーの作成", - - readonly: "Read-Only", - readwrite: "Read-Write", - - "simplePolicy.lb5": "許可", - subusers: "サブユーザー", - usergroups: "ユーザーグループ", - roles: "ロール", - - chooseone: "一つを選んでください", - - "simplePolicy.ok": "OK", - "simplePolicy.noauth.message1": "ユーザーリストを取得する権限がありません", - "simplePolicy.noauth.message2": - "ユーザーグループリストを取得する権限がありません", - "simplePolicy.noauth.message3": "ロールリストを取得する権限がありません", - "simplePolicy.success": "ポリシーを適用しました", + 'bucket.add': 'バケットの作成', + 'bucket.multipart': 'マルチパート', + acl: 'ACL', + privilege: '権限', + simplePolicy: 'シンプルポリシー', + more: '詳細', + 'bucket.name': 'バケット名', + creationTime: '作成日時', + 'bucket.add.name.invalid': 'バケット名が無効です!', + 'acl.warn-not-private.public-read': + '公開読み取り権限は、匿名でバケット内のデータにアクセスでき、 セキュリティリスクが高くなるため、 非公開 (private) を推奨します。', + 'acl.warn-not-private.public-read-write': + '公開読み書き権限は、匿名でバケット内のデータにアクセスでき、 セキュリティリスクが高くなるため、 非公開 (private) を推奨します。', + + 'multipart.management': 'マルチパート', + 'multipart.description': + 'マルチパート (アップロード) プロセス中に生成されたイベントやフラグメントを管理します', + 'multipart.description.tooltip': + 'つまり、初期化されたが、完了または中止のイベントが来ていないマルチパートアップロードです', + + 'select.all': 'すべて選択', + 'delete.selected': '選択されたものを削除', + 'delete.all': 'すべて削除', + + initiatedTime: '開始日時', + + loading: 'ロード中...', + nodata: 'データなし', + + 'delete.multiparts.title': 'マルチパートの削除', + 'delete.multiparts.message': '{{num}} 個のマルチパートを削除してもよろしいですか。', + 'delete.multiparts.on': '削除中...', + 'delete.multiparts.success': 'マルチパートを削除しました', + + 'bucketACL.update': 'バケット ACL の更新', + 'bucketACL.update.success': '更新を完了しました', + + 'bucket.add.success': '作成を完了しました', + + 'bucket.delete.title': 'バケットの削除', + 'bucket.delete.message': + 'バケット名: {{name}}, リージョン: {{region}}, このバケットを削除してもよろしいですか。', + 'bucket.delete.success': 'バケットを削除しました', + + 'simplePolicy.title': 'ポリシー認証の簡略化', + 'simplePolicy.lb1.1': 'リソース', + 'simplePolicy.lb1.2': '権限', + 'privilege.readonly': '読み取り', + 'privilege.readwrite': '読み書き', + 'privilege.all': 'フルコントロール', + 'simplePolicy.lb3.1': 'ポリシーの表示', + 'simplePolicy.lb3.2': '圧縮', + 'simplePolicy.lb4': '名前付きポリシーの作成', + + readonly: 'Read-Only', + readwrite: 'Read-Write', + + 'simplePolicy.lb5': '許可', + subusers: 'サブユーザー', + usergroups: 'ユーザーグループ', + roles: 'ロール', + + chooseone: '一つを選んでください', + + 'simplePolicy.ok': 'OK', + 'simplePolicy.noauth.message1': 'ユーザーリストを取得する権限がありません', + 'simplePolicy.noauth.message2': 'ユーザーグループリストを取得する権限がありません', + 'simplePolicy.noauth.message3': 'ロールリストを取得する権限がありません', + 'simplePolicy.success': 'ポリシーを適用しました', //settings - "settings.maxUploadNum": "アップロード並列タスク数", - "settings.maxDownloadNum": "ダウンロード並列タスク数", - "settings.WhetherShowThumbnail": "画像をサムネイル表示", - "settings.WhetherShowThumbnail.msg": - "ファイル一覧にサムネイルを表示すると一定量のトラフィックが消費されます", - "settings.success": "保存を完了しました", - "settings.autoUpgrade": "自動更新", - "settings.autoUpgrade.msg": - "アップデートパッケージを自動的にダウンロードします", - "settings.log": "ログ設定", - "settings.console": "試用パネル", - "settings.console.msg": "調査を開く", - "settings.file": "ローカルログファイル", - "settings.file.msg": "ログファイルをシステムローカルに保存", - "settings.file.info": "ローカルinfoログファイル", - "settings.file.info.msg": "infoレベルのログを地元に預かるかどうか", - "settings.connectTimeout": "タイムアウト(ms)", - "settings.uploadPartSize": "スライスサイズ(M)", - "settings.downloadConcurrecyPartSize": "ダウンロード数", - "settings.uploadAndDownloadRetryTimes": "再試行回数", - "settings.other": "その他の設定", - "settings.other.list.object.max.number": "Objectの最大数を列挙", + 'settings.maxUploadNum': 'アップロード並列タスク数', + 'settings.maxDownloadNum': 'ダウンロード並列タスク数', + 'settings.WhetherShowThumbnail': '画像をサムネイル表示', + 'settings.WhetherShowThumbnail.msg': + 'ファイル一覧にサムネイルを表示すると一定量のトラフィックが消費されます', + 'settings.success': '保存を完了しました', + 'settings.autoUpgrade': '自動更新', + 'settings.autoUpgrade.msg': 'アップデートパッケージを自動的にダウンロードします', + 'settings.log': 'ログ設定', + 'settings.console': '試用パネル', + 'settings.console.msg': '調査を開く', + 'settings.file': 'ローカルログファイル', + 'settings.file.msg': 'ログファイルをシステムローカルに保存', + 'settings.file.info': 'ローカルinfoログファイル', + 'settings.file.info.msg': 'infoレベルのログを地元に預かるかどうか', + 'settings.connectTimeout': 'タイムアウト(ms)', + 'settings.uploadPartSize': 'スライスサイズ(M)', + 'settings.downloadConcurrecyPartSize': 'ダウンロード数', + 'settings.uploadAndDownloadRetryTimes': '再試行回数', + 'settings.other': 'その他の設定', + 'settings.other.list.object.max.number': 'Objectの最大数を列挙', //bookmark - "bookmarks.title": "ブックマーク", - time: "時間", - "bookmarks.delete.success": "ブックマークを削除しました", + 'bookmarks.title': 'ブックマーク', + time: '時間', + 'bookmarks.delete.success': 'ブックマークを削除しました', - "opensource.address": "オープンするソース", - foundNewVersion: "新しいバージョンがあります", - clickToDownload: "クリックしてダウンロード", - currentIsLastest: "これは最新バージョンです", + 'opensource.address': 'オープンするソース', + foundNewVersion: '新しいバージョンがあります', + clickToDownload: 'クリックしてダウンロード', + currentIsLastest: 'これは最新バージョンです', //files - upload: "アップロード", - "folder.create": "新しいディレクトリ", - "folder.create.success": "ディレクトリを作成しました", - "folder.name": "名前", - - download: "ダウンロード", - copy: "コピー", - move: "移動", - paste: "貼り付け", - rename: "名前の変更", - getAddress: "アドレスの取得", - genAuthToken: "認証トークン", - - "rename.to": "新しい名前", - "whetherCover.title": "カバーの適用", - "whetherCover.message1": "同じ名前のフォルダーをカバーされていますか", - "whetherCover.message2": "同じ名前のファイルは既にカバーされていますか", - "rename.success": "名前を変更しました", - "rename.on": "名前を変更しています...", - "folder.in": "フォルダー", - file: "ファイル", - folder: "フォルダー", - - "copy.on": "コピー中...", - "move.on": "移動中...", - - "use.cancelled": "ユーザーによりキャンセル", - - "copy.error1": "一部のファイルをコピーできません", - "move.error1": "一部のファイルを移動できません", - "copy.success": "コピーを完了しました", - "move.success": "移動を完了しました", - - stop: "停止", - - "paste.resources": "現在のディレクトリに貼り付け", - - "copy.cancel": "コピーのキャンセル", - "move.cancel": "移動のキャンセル", - - "search.files.placeholder": "名前プレフィックスでフィルタリング", - "search.files.num_msg": - "現在読み込まれているディレクトリとオブジェクトの数は{{num}}であり、現在のバケット内のオブジェクトの総数ではありません。", - - "genAuthToken.title": "認証トークンの生成", - "genAuthToken.message1.1": "認証するバケット", - "genAuthToken.message1.2": "認証するフォルダー", - "genAuthToken.message2": "権限", - - "effective.duration": "有効期間", - "unit.second": "秒", - - "genAuthToken.message3.1": "ロール指定", - "genAuthToken.message3.2": - "このロールは、この{{type}}のアクセスには少なくとも{{privilege}}権限が必要です", - - "genAuthToken.message4": "認証トークン", - "genAuthToken.message5": - "上に生成された認証コードを使用して OSS ブラウザにログインすると、{{type}} [{{object}}] にアクセスする権限を得ることができます。{{expiration}} まで有効です。", - "genAuthToken.message6.1": "生成", - "genAuthToken.message6.2": "再生成", - - "deleteModal.title": "ファイルの削除", - "deleteModal.message1": "次のディレクトリまたはファイルが削除されます", - "delete.on": "削除中...", - "delete.success": "削除を完了しました", - "deleteModal.message2": "キャンセルされました", - "deleteModal.message3": "いくつかのディレクトリやファイルは削除できません", - - "paste.message1": + upload: 'アップロード', + 'folder.create': '新しいディレクトリ', + 'folder.create.success': 'ディレクトリを作成しました', + 'folder.name': '名前', + + download: 'ダウンロード', + copy: 'コピー', + move: '移動', + paste: '貼り付け', + rename: '名前の変更', + getAddress: 'アドレスの取得', + genAuthToken: '認証トークン', + + 'rename.to': '新しい名前', + 'whetherCover.title': 'カバーの適用', + 'whetherCover.message1': '同じ名前のフォルダーをカバーされていますか', + 'whetherCover.message2': '同じ名前のファイルは既にカバーされていますか', + 'rename.success': '名前を変更しました', + 'rename.on': '名前を変更しています...', + 'folder.in': 'フォルダー', + file: 'ファイル', + folder: 'フォルダー', + + 'copy.on': 'コピー中...', + 'move.on': '移動中...', + + 'use.cancelled': 'ユーザーによりキャンセル', + + 'copy.error1': '一部のファイルをコピーできません', + 'move.error1': '一部のファイルを移動できません', + 'copy.success': 'コピーを完了しました', + 'move.success': '移動を完了しました', + + stop: '停止', + + 'paste.resources': '現在のディレクトリに貼り付け', + + 'copy.cancel': 'コピーのキャンセル', + 'move.cancel': '移動のキャンセル', + + 'search.files.placeholder': '名前プレフィックスでフィルタリング', + 'search.files.num_msg': + '現在読み込まれているディレクトリとオブジェクトの数は{{num}}であり、現在のバケット内のオブジェクトの総数ではありません。', + + 'genAuthToken.title': '認証トークンの生成', + 'genAuthToken.message1.1': '認証するバケット', + 'genAuthToken.message1.2': '認証するフォルダー', + 'genAuthToken.message2': '権限', + + 'effective.duration': '有効期間', + 'unit.second': '秒', + + 'genAuthToken.message3.1': 'ロール指定', + 'genAuthToken.message3.2': + 'このロールは、この{{type}}のアクセスには少なくとも{{privilege}}権限が必要です', + + 'genAuthToken.message4': '認証トークン', + 'genAuthToken.message5': + '上に生成された認証コードを使用して OSS ブラウザにログインすると、{{type}} [{{object}}] にアクセスする権限を得ることができます。{{expiration}} まで有効です。', + 'genAuthToken.message6.1': '生成', + 'genAuthToken.message6.2': '再生成', + + 'deleteModal.title': 'ファイルの削除', + 'deleteModal.message1': '次のディレクトリまたはファイルが削除されます', + 'delete.on': '削除中...', + 'delete.success': '削除を完了しました', + 'deleteModal.message2': 'キャンセルされました', + 'deleteModal.message3': 'いくつかのディレクトリやファイルは削除できません', + + 'paste.message1': '{{name}}... をこのディレクトリに{{action}}しますか (同名のファイルまたはディレクトリはカバーされます)', - "acl.update.title": "ACL の更新", - "acl.update.success": "ACL を更新しました", - "aclType.private.message": - "非公開: オブジェクトに対するアクセスは認証が必要です", - "aclType.public-read.message": - "公開読み取り: オブジェクトに対する書き込みには認証が必要です。オブジェクトは誰でも読み取り可能です", - "aclType.public-read-write.message": - "公開読み書き: 誰でもオブジェクトを読み書き可能です", - - "getAddress.title": "アドレスの取得", - address: "アドレス", - "getAddress.message": "リンクの有効期間を入力してください", - generate: "生成", - "qrcode.download": "コードをスキャンしダウンロード", - not_use_own_domain: "他のドメイン名はありません", - custom_domain: "その他のドメイン", - - "restore.checker.message1": - "プレビューまたはダウンロードするためにアーカイブをリストアする必要があります。", - "restore.immediately": "すぐにリストア", - "restore.checker.message2": "アーカイブがリストアされました。有効期限", - "restore.onprogress": - "アーカイブファイルを回復しています、しばらくお待ちください ...", - "restore.on": "送信中...", - "restore.success": "リストアリクエストが送信されました", - "restore.days": "日数", - "restore.message2": "有効期限", - "restore.title": "リストア", - "restore.msg": "復元する必要があるファイルを選択してください", - restore: "リストア", - - preview: "プレビュー", - "cannot.preview": "プレビューできません", - "cannot.preview.this.file": "このファイルをプレビューできません。", - "tryto.open.as.textfile": "テキストファイルとしてオープン", - "preview.in.web.browser": "ブラウザでプレビュー", - - save: "保存", - size: "サイズ", - filesize: "ファイルサイズ", - "codepreview.notsupport": - "このファイルは直接オープンできません。ローカルにダウンロードしてからオープンしてください。", - "download.file": "ダウンロードファイル", - - lastModifyTime: "更新日時", - "loading.more": "もっと読み込んでいます...", - - "download.addtolist.on": "ダウンロードキューに追加中", - "download.addtolist.success": "すべて追加されました", - - "upload.addtolist.on": "アップロードキューに追加中", - "upload.addtolist.success": "すべて追加されました", - - "transframe.search.placeholder": "名前またはステータスによるフィルタリング", - "ram.search.placeholder": "名前や修正時間によって検索する", - - "start.all": "すべて開始", - "pause.all": "すべて停止", - "clear.finished": "クリア完了", - "clear.all": "すべてクリア", - - "clear.all.title": "すべてクリア", - "clear.all.download.message": - "すべてのダウンロードタスクをクリアしてもよろしいですか。", - "clear.all.upload.message": - "すべてのアップロードタスクをクリアしてもよろしいですか。", - - "pause.on": "停止中...", - "pause.success": "停止を完了しました", - "remove.from.list.title": "削除", - "remove.from.list.message": "このタスクを削除してもよろしいですか。", - - "status.running.uploading": "アップロード中", - "status.running.downloading": "ダウンロード中", - "status.running": "実行中", - "status.stopped": "停止", - "status.failed": "失敗", - "status.finished": "完了", - "status.waiting": "待機中", - "status.retrying": "やり直してみる", - "status.retrytimes": "次", - "status.verifying": "検証中", - - users: "サブユーザー", - "users.title": "サブユーザー", - "user.id": "UserId", - displayName: "表示名", - comments: "コメント", - update: "更新", - username: "ユーザー名", - details: "詳細", - add: "追加", - mobilePhone: "携帯電話", - ak: "AccessKey", - aks: "AccessKeys", - email: "Email", - - "user.delete.title": "ユーザーの削除", - "user.delete.message": "ユーザー {{name}} を削除してもよろしいですか。", - "user.delete.on": "削除中...", - "user.delete.success": "削除を完了しました", - - status: "状態", - accessKeySecret: "AccessKeySecret", - createTime: "作成日時", - - "ak.status.update.title.Active": "AccessKey の無効化", - "ak.status.update.title.Inactive": "AccessKey の有効化", - "ak.status.update.message.Active": - "このアクセスキーを無効化してもよろしいですか。", - "ak.status.update.message.Inactive": + 'acl.update.title': 'ACL の更新', + 'acl.update.success': 'ACL を更新しました', + 'aclType.private.message': '非公開: オブジェクトに対するアクセスは認証が必要です', + 'aclType.public-read.message': + '公開読み取り: オブジェクトに対する書き込みには認証が必要です。オブジェクトは誰でも読み取り可能です', + 'aclType.public-read-write.message': '公開読み書き: 誰でもオブジェクトを読み書き可能です', + + 'getAddress.title': 'アドレスの取得', + address: 'アドレス', + 'getAddress.message': 'リンクの有効期間を入力してください', + generate: '生成', + 'qrcode.download': 'コードをスキャンしダウンロード', + not_use_own_domain: '他のドメイン名はありません', + custom_domain: 'その他のドメイン', + + 'restore.checker.message1': + 'プレビューまたはダウンロードするためにアーカイブをリストアする必要があります。', + 'restore.immediately': 'すぐにリストア', + 'restore.checker.message2': 'アーカイブがリストアされました。有効期限', + 'restore.onprogress': 'アーカイブファイルを回復しています、しばらくお待ちください ...', + 'restore.on': '送信中...', + 'restore.success': 'リストアリクエストが送信されました', + 'restore.days': '日数', + 'restore.message2': '有効期限', + 'restore.title': 'リストア', + 'restore.msg': '復元する必要があるファイルを選択してください', + 'restore.msg.no': + 'チェックされている解凍ファイルのリストには、解凍操作を必要としない低周波アクセス/標準保存/解凍中/解凍済みファイルが含まれています。', + restore: 'リストア', + + preview: 'プレビュー', + 'cannot.preview': 'プレビューできません', + 'cannot.preview.this.file': 'このファイルをプレビューできません。', + 'tryto.open.as.textfile': 'テキストファイルとしてオープン', + 'preview.in.web.browser': 'ブラウザでプレビュー', + + save: '保存', + size: 'サイズ', + filesize: 'ファイルサイズ', + 'codepreview.notsupport': + 'このファイルは直接オープンできません。ローカルにダウンロードしてからオープンしてください。', + 'download.file': 'ダウンロードファイル', + + lastModifyTime: '更新日時', + 'loading.more': 'もっと読み込んでいます...', + + 'download.addtolist.on': 'ダウンロードキューに追加中', + 'download.addtolist.success': 'すべて追加されました', + + 'upload.addtolist.on': 'アップロードキューに追加中', + 'upload.addtolist.success': 'すべて追加されました', + + 'transframe.search.placeholder': '名前またはステータスによるフィルタリング', + 'ram.search.placeholder': '名前や修正時間によって検索する', + + 'start.all': 'すべて開始', + 'pause.all': 'すべて停止', + 'clear.finished': 'クリア完了', + 'clear.all': 'すべてクリア', + + 'clear.all.title': 'すべてクリア', + 'clear.all.download.message': 'すべてのダウンロードタスクをクリアしてもよろしいですか。', + 'clear.all.upload.message': 'すべてのアップロードタスクをクリアしてもよろしいですか。', + + 'pause.on': '停止中...', + 'pause.success': '停止を完了しました', + 'remove.from.list.title': '削除', + 'remove.from.list.message': 'このタスクを削除してもよろしいですか。', + + 'status.running.uploading': 'アップロード中', + 'status.running.downloading': 'ダウンロード中', + 'status.running': '実行中', + 'status.stopped': '停止', + 'status.failed': '失敗', + 'status.finished': '完了', + 'status.waiting': '待機中', + 'status.retrying': 'やり直してみる', + 'status.retrytimes': '次', + 'status.verifying': '検証中', + + users: 'サブユーザー', + 'users.title': 'サブユーザー', + 'user.id': 'UserId', + displayName: '表示名', + comments: 'コメント', + update: '更新', + username: 'ユーザー名', + details: '詳細', + add: '追加', + mobilePhone: '携帯電話', + ak: 'AccessKey', + aks: 'AccessKeys', + email: 'Email', + + 'user.delete.title': 'ユーザーの削除', + 'user.delete.message': 'ユーザー {{name}} を削除してもよろしいですか。', + 'user.delete.on': '削除中...', + 'user.delete.success': '削除を完了しました', + + status: '状態', + accessKeySecret: 'AccessKeySecret', + createTime: '作成日時', + + 'ak.status.update.title.Active': 'AccessKey の無効化', + 'ak.status.update.title.Inactive': 'AccessKey の有効化', + 'ak.status.update.message.Active': 'このアクセスキーを無効化してもよろしいですか。', + 'ak.status.update.message.Inactive': 'このアクセスキーを有効化してもよろしいですか。', - "ak.delete.title": "AccessKey の削除", - "ak.delete.message": - "このアクセスキーを削除してもよろしいですか。", - - "user.update.message.tip": - "AliyunRAMFullAccess 権限を持っていることを確認してください", - "user.list.message.tip": - "ここでは、必要なユーザー管理機能のみを提供しています。さらに拡張するには、RAM コンソールを操作してください:", - - "status.Active": "アクティブ", - "status.Inactive": "非アクティブ", - enable: "有効化", - disable: "無効化", - show: "表示", - "can.not.get.accessKeySecret": "AccessKeySecret を取得できません", - - "settings.subtitle.updown": "転送設定", - "settings.subtitle.sys": "システム設定", - "settings.subtitle.email": "メール送信設定", - "settings.mailSmtp.addr": "SMTP アドレス", - "settings.mailSmtp.ssl": "SSL を使用する", - "settings.mailSmtp.from": "メール (From)", - - user: "ユーザ名", - pass: "パスワード", - test: "テスト", - - "mail.test.title": "テストメール", - "mail.test.message": - 'テストメッセージを {{from}} へ送信します', - "mail.test.success": "送信を完了しました", - "mail.send.on": "送信中...", - - "new.user": "[一個作成]", - "new.user.name": "新規ユーザー名", - "new.user.random.gen": "生成", - "new.user.email.send": "メール (To)", - "new.user.email.noset": "最初にメール送信を設定する必要があります", - "new.user.email.noset.open": "設定ダイアログのオープン", - - "click.copy": "コピー", - - "http.headers": "HTTP ヘッダー", - key: "Key", - value: "Value", - userMetaData: "ユーザー定義のメタデータ", - - "setting.on": "設定中..", - "setting.success": "設定を完了しました", - - "send.to": "送信先", - "send.email": "メールする", - "send.now": "送信", - "file.download.address": "ファイルダウンロードアドレス", - "file.download.warning": - "OSS バケットのリファラリストを設定する際、ノーリファラを選択しなかった場合、ブラウザから直接 URL にアクセスすることはできません。", - - "file.op.set_symlink": "ソフトリンクの設定", - "file.attr.symlink_src": "ソースファイル(フルパス)", - "file.attr.symlink_file": "ソフトリンクファイル", - "file.message.symlink_help{target}!lines": - "ソフトリンクファイル\nソースファイルアドレス:{{target}} \nこのファイルリンクを使用してソースファイルの内容にアクセスできます。", - "file.message.symlink_rule{min,max}!html!lines": - "ソフトリンクファイル命名規則: 現在のフォルダーにファイルを作成する場合は、filename の形式で入力します。別のフォルダーにファイルを作成する場合は、aaa/bbb/filename の形式で入力します。1. 絵文字は使用できません。2. パスはスラッシュ (/) で区切ります。先頭または末尾には、スラッシュ (/) を使用できません。連続したスラッシュ (/) を含むことはできません。3. サブフォルダー名には、連続したピリオド (.) を含むことはできません。4. 名前は {{min}}~{{max}} 文字です。", - "file.md.name.error.emoji": - "ディレクトリパスには、絵文字は使用できません。有効なUTF-8文字を使用してください。", - "file.md.name.error.2dots": - "サブフォルダー名には、連続したピリオド (.) を含むことはできません。", - "file.md.name.error.continuous slash": - "ディレクトリパスに連続したスラッシュ(/)は使用できません。", - "file.message.validation_end_slash!html": - "先頭には、スラッシュまたは連続したバックスラッシュを使用できません。", - - "copy.successfully": "クリップボードにコピー済みです", - "click.download": "クリックしてダウンロード", - - saving: "保存中", - "save.successfully": "成功完了", - "content.isnot.modified": "内容は変更されません", - - logining: "ログイン中...", - "login.successfully": "ログイン完了、ジャンプ中...", - "login.endpoint.error": "エンドポイントが正しいことを確認してください", - - "upgrade.start": "更新の開始", - "upgrade.downloading": "ダウンロード開始中...", - "upgrade.download.field": - "自動更新に失敗しました。インストールパッケージを手動でダウンロードしてください。", - "upgrade.download.success": - "ダウンロードを完了しました。インストールして再起動してください", - - "Insufficient disk space": "ディスク容量不足", - - "grant.email.title": "OSSブラウザ認証", - "grant.email.body.title": - "OSS ブラウザは現在 2 つのログイン方法をサポートしています。いずれかを選択できます:", - - "goto.create.role": "ロールの作成", - "restore.days.tips.7": "有効期限 1~7日", + 'ak.delete.title': 'AccessKey の削除', + 'ak.delete.message': 'このアクセスキーを削除してもよろしいですか。', + + 'user.update.message.tip': 'AliyunRAMFullAccess 権限を持っていることを確認してください', + 'user.list.message.tip': + 'ここでは、必要なユーザー管理機能のみを提供しています。さらに拡張するには、RAM コンソールを操作してください:', + + 'status.Active': 'アクティブ', + 'status.Inactive': '非アクティブ', + enable: '有効化', + disable: '無効化', + show: '表示', + 'can.not.get.accessKeySecret': 'AccessKeySecret を取得できません', + + 'settings.subtitle.updown': '転送設定', + 'settings.subtitle.sys': 'システム設定', + 'settings.subtitle.email': 'メール送信設定', + 'settings.mailSmtp.addr': 'SMTP アドレス', + 'settings.mailSmtp.ssl': 'SSL を使用する', + 'settings.mailSmtp.from': 'メール (From)', + + user: 'ユーザ名', + pass: 'パスワード', + test: 'テスト', + + 'mail.test.title': 'テストメール', + 'mail.test.message': 'テストメッセージを {{from}} へ送信します', + 'mail.test.success': '送信を完了しました', + 'mail.send.on': '送信中...', + + 'new.user': '[一個作成]', + 'new.user.name': '新規ユーザー名', + 'new.user.random.gen': '生成', + 'new.user.email.send': 'メール (To)', + 'new.user.email.noset': '最初にメール送信を設定する必要があります', + 'new.user.email.noset.open': '設定ダイアログのオープン', + + 'click.copy': 'コピー', + + 'http.headers': 'HTTP ヘッダー', + key: 'Key', + value: 'Value', + userMetaData: 'ユーザー定義のメタデータ', + + 'setting.on': '設定中..', + 'setting.success': '設定を完了しました', + + 'send.to': '送信先', + 'send.email': 'メールする', + 'send.now': '送信', + 'file.download.address': 'ファイルダウンロードアドレス', + 'file.download.warning': + 'OSS バケットのリファラリストを設定する際、ノーリファラを選択しなかった場合、ブラウザから直接 URL にアクセスすることはできません。', + + 'file.op.set_symlink': 'ソフトリンクの設定', + 'file.attr.symlink_src': 'ソースファイル(フルパス)', + 'file.attr.symlink_file': 'ソフトリンクファイル', + 'file.message.symlink_help{target}!lines': + 'ソフトリンクファイル\nソースファイルアドレス:{{target}} \nこのファイルリンクを使用してソースファイルの内容にアクセスできます。', + 'file.message.symlink_rule{min,max}!html!lines': + 'ソフトリンクファイル命名規則: 現在のフォルダーにファイルを作成する場合は、filename の形式で入力します。別のフォルダーにファイルを作成する場合は、aaa/bbb/filename の形式で入力します。1. 絵文字は使用できません。2. パスはスラッシュ (/) で区切ります。先頭または末尾には、スラッシュ (/) を使用できません。連続したスラッシュ (/) を含むことはできません。3. サブフォルダー名には、連続したピリオド (.) を含むことはできません。4. 名前は {{min}}~{{max}} 文字です。', + 'file.md.name.error.emoji': + 'ディレクトリパスには、絵文字は使用できません。有効なUTF-8文字を使用してください。', + 'file.md.name.error.2dots': 'サブフォルダー名には、連続したピリオド (.) を含むことはできません。', + 'file.md.name.error.continuous slash': + 'ディレクトリパスに連続したスラッシュ(/)は使用できません。', + 'file.message.validation_end_slash!html': + '先頭には、スラッシュまたは連続したバックスラッシュを使用できません。', + + 'copy.successfully': 'クリップボードにコピー済みです', + 'click.download': 'クリックしてダウンロード', + + saving: '保存中', + 'save.successfully': '成功完了', + 'content.isnot.modified': '内容は変更されません', + + logining: 'ログイン中...', + 'login.successfully': 'ログイン完了、ジャンプ中...', + 'login.endpoint.error': 'エンドポイントが正しいことを確認してください', + + 'upgrade.start': '更新の開始', + 'upgrade.downloading': 'ダウンロード開始中...', + 'upgrade.download.field': + '自動更新に失敗しました。インストールパッケージを手動でダウンロードしてください。', + 'upgrade.download.success': 'ダウンロードを完了しました。インストールして再起動してください', + + 'Insufficient disk space': 'ディスク容量不足', + + 'grant.email.title': 'OSSブラウザ認証', + 'grant.email.body.title': + 'OSS ブラウザは現在 2 つのログイン方法をサポートしています。いずれかを選択できます:', + + 'goto.create.role': 'ロールの作成', + 'restore.days.tips.7': '有効期限 1~7日', + 'restore.days.tips.365': '有効期限 1~365日', + 'restore.file.type.archive': 'アーカイブストレージファイル', + 'restore.file.type.cold.archive': 'コールドアーカイブストレージファイル', + 'restore.file.type.deep.cold.archive': 'ディープコールドアーカイブストレージファイル', + 'restore.copyvalidity': 'レプリカ有効期間', + 'restore.mode': 'リカバリモード', + 'restore.mode.type.expedited': '高い優先度', + 'restore.mode.type.standard': '標準', + 'restore.mode.type.bulk': 'バッチ', + 'restore.mode.type.expedited.explain': '1時間以内に解凍を完了します', + 'restore.mode.type.standard.explain': '2~5時間以内に解凍を完了します', + 'restore.mode.type.bulk.explain': '5~12時間以内に解凍を完了します', + 'restore.mode.type.expedited.explain.deep': + '12時間以内に解凍を完了し、解凍が完了してから読み込むことができます', + 'restore.mode.type.standard.explain.deep': + '48時間以内に解凍を完了し、解凍が完了してから読み取ることができます', + restoring: '解凍中', + }; diff --git a/node/i18n/zh-CN.js b/node/i18n/zh-CN.js index de404e07..f8214af1 100644 --- a/node/i18n/zh-CN.js +++ b/node/i18n/zh-CN.js @@ -1,507 +1,517 @@ module.exports = { - "app.name": "OSS浏览器", - language: "语言", - name: "名称", - type: "类型", - customize: "自定义", - "public.cloud": "公共云", - - "region.oss-cn-hangzhou": "华东1(杭州)", - "region.oss-cn-shanghai": "华东2(上海)", - "region.oss-cn-nanjing": "华东5(南京本地地域)", - "region.oss-cn-fuzhou": "华东6(福州本地地域)", - "region.oss-cn-qingdao": "华北1(青岛)", - "region.oss-cn-beijing": "华北2(北京)", - "region.oss-cn-zhangjiakou": "华北3(张家口)", - "region.oss-cn-huhehaote": "华北5(呼和浩特)", - "region.oss-cn-wulanchabu": "华北6(乌兰察布)", - "region.oss-cn-shenzhen": "华南1(深圳)", - "region.oss-cn-heyuan": "华南2(河源)", - "region.oss-cn-chengdu": "西南1(成都)", - "region.oss-cn-hongkong": "中国(香港)", - "region.oss-cn-guangzhou": "华南3(广州)", - - "region.oss-ap-southeast-1": "亚太东南1(新加坡)", - "region.oss-ap-southeast-2": "亚太东南2(悉尼)", - "region.oss-ap-southeast-3": "亚太东南3(吉隆坡)", - "region.oss-ap-southeast-5": "亚太东南5(雅加达)", - "region.oss-ap-northeast-1": "日本(东京)", - "region.oss-ap-northeast-2": "韩国(首尔)", - "region.oss-ap-southeast-6": "菲律宾(马尼拉)", - "region.oss-ap-southeast-7": "泰国(曼谷)", - "region.oss-ap-south-1": "印度(孟买)", - - "region.oss-us-west-1": "美国西部1(硅谷)", - "region.oss-us-east-1": "美国东部1(弗吉尼亚)", - "region.oss-eu-central-1": "德国(法兰克福)", - "region.oss-me-east-1": "阿联酋(迪拜)", - "region.oss-eu-west-1": "英国 (伦敦)", - - optional: "可选", - default: "默认", - "auth.akLogin": "AK登录", - "auth.tokenLogin": "授权码登录", - "auth.presetOssPath": "预设OSS路径", - "auth.presetOssPath.placeholder": "可选,格式如: oss://bucket/key/", - "auth.id.placeholder": "请输入AccessKeyId", - "auth.secret.placeholder": "请输入AccessKeySecret", - "auth.stoken.placeholder": "请输入STS Token", - "auth.eptpl": "Endpoint模板", - "auth.eptpl.placeholder": "默认: http://{region}.aliyuncs.com", - - "auth.eptpl.popup.msg1": "公共云直接使用默认即可", - "auth.eptpl.popup.msg2": "专有云请输入自定义Endpoint,如:", - - "auth.presetOssPath.popup.msg1": + 'app.name': 'OSS浏览器', + language: '语言', + name: '名称', + type: '类型', + customize: '自定义', + 'public.cloud': '公共云', + + 'region.oss-cn-hangzhou': '华东1(杭州)', + 'region.oss-cn-shanghai': '华东2(上海)', + 'region.oss-cn-nanjing': '华东5(南京本地地域)', + 'region.oss-cn-fuzhou': '华东6(福州本地地域)', + 'region.oss-cn-qingdao': '华北1(青岛)', + 'region.oss-cn-beijing': '华北2(北京)', + 'region.oss-cn-zhangjiakou': '华北3(张家口)', + 'region.oss-cn-huhehaote': '华北5(呼和浩特)', + 'region.oss-cn-wulanchabu': '华北6(乌兰察布)', + 'region.oss-cn-shenzhen': '华南1(深圳)', + 'region.oss-cn-heyuan': '华南2(河源)', + 'region.oss-cn-chengdu': '西南1(成都)', + 'region.oss-cn-hongkong': '中国(香港)', + 'region.oss-cn-guangzhou': '华南3(广州)', + + 'region.oss-ap-southeast-1': '亚太东南1(新加坡)', + 'region.oss-ap-southeast-2': '亚太东南2(悉尼)', + 'region.oss-ap-southeast-3': '亚太东南3(吉隆坡)', + 'region.oss-ap-southeast-5': '亚太东南5(雅加达)', + 'region.oss-ap-northeast-1': '日本(东京)', + 'region.oss-ap-northeast-2': '韩国(首尔)', + 'region.oss-ap-southeast-6': '菲律宾(马尼拉)', + 'region.oss-ap-southeast-7': '泰国(曼谷)', + 'region.oss-ap-south-1': '印度(孟买)', + + 'region.oss-us-west-1': '美国西部1(硅谷)', + 'region.oss-us-east-1': '美国东部1(弗吉尼亚)', + 'region.oss-eu-central-1': '德国(法兰克福)', + 'region.oss-me-east-1': '阿联酋(迪拜)', + 'region.oss-eu-west-1': '英国 (伦敦)', + + optional: '可选', + default: '默认', + 'auth.akLogin': 'AK登录', + 'auth.tokenLogin': '授权码登录', + 'auth.presetOssPath': '预设OSS路径', + 'auth.presetOssPath.placeholder': '可选,格式如: oss://bucket/key/', + 'auth.id.placeholder': '请输入AccessKeyId', + 'auth.secret.placeholder': '请输入AccessKeySecret', + 'auth.stoken.placeholder': '请输入STS Token', + 'auth.eptpl': 'Endpoint模板', + 'auth.eptpl.placeholder': '默认: http://{region}.aliyuncs.com', + + 'auth.eptpl.popup.msg1': '公共云直接使用默认即可', + 'auth.eptpl.popup.msg2': '专有云请输入自定义Endpoint,如:', + + 'auth.presetOssPath.popup.msg1': '大权限子账号登录: 当前使用的AK已拥有所有Bucket的权限,不需要设置"预设OSS路径"', - "auth.presetOssPath.popup.msg2": + 'auth.presetOssPath.popup.msg2': '小权限子账号登录: 当前使用的AK只有某个Bucket或者Bucket下某个路径的权限,需要设置"预设OSS路径"', - "auth.remember.popup.msg1": + 'auth.remember.popup.msg1': '勾选"记住秘钥"可保存AK秘钥,再次登录时,单击AK历史,可选择该秘钥登录,不需要手动输入AK。请不要在临时使用的电脑上勾选!', - region: "区域", - requestPay: "请求者付费模式", - "requestpay.popup.msg": - "如您获得授权的Bucket开启了请求付费者模式,且您不是该Bucket的拥有者,则需勾选`请求付费者模式`,其中,您访问该Bucket产生的流量、请求次数等费用, 将由您支付,详情参考帮助文档", - "auth.region.placeholder": "可选", - "auth.description": "备注", - "auth.description.placeholder": "可以为空,最多30个字", - "auth.remember": "记住秘钥", - "auth.login": "登入", - "auth.akHistories": "AK历史", - "auth.secure": "HTTPS加密", - "auth.keepLoggedIn": "保持登录", - - "auth.authToken": "授权码", - "auth.authToken.tooltip": "点击查看帮助", - "auth.authToken.placeholder": "请输入授权码", - "auth.authToken.error.invalid": "请输入有效的授权码", - "auth.authToken.error.expired": "授权码已经过期", - "auth.authToken.info.validUntil": "有效期至{{expiration}}", - "auth.authToken.info.leftTime": "剩余时间", - - "auth.clearHistories": "清空历史", - - actions: "操作", - use: "使用", - delete: "删除", - ok: "确定", - cancel: "取消", - close: "关闭", - - "auth.removeAK.title": "删除AK", - "auth.removeAK.message": "ID:{{id}}, 确定删除?", - - "auth.clearAKHistories.title": "清空AK历史", - "auth.clearAKHistories.message": "确定?", - "auth.clearAKHistories.successMessage": "已清空AK历史", - - "storageClassesType.standard": "标准类型", - "storageClassesType.ia": "低频访问类型", - "storageClassesType.archive": "归档存储", - - "aclType.default": "继承Bucket", - "aclType.public-read-write": "公共读写", - "aclType.public-read": "公共读", - "aclType.private": "私有", - - files: "文件", - settings: "设置", - about: "关于", - bookmarks: "书签管理", - logout: "退出", - "logout.message": "确定要退出?", - "main.upgration": "主要更新", - tempCert: "临时凭证", - "setup.success": "已经设置成功", - forbidden: "不支持在当前路径或者跨Region移动", + region: '区域', + requestPay: '请求者付费模式', + 'requestpay.popup.msg': + '如您获得授权的Bucket开启了请求付费者模式,且您不是该Bucket的拥有者,则需勾选`请求付费者模式`,其中,您访问该Bucket产生的流量、请求次数等费用, 将由您支付,详情参考帮助文档', + 'auth.region.placeholder': '可选', + 'auth.description': '备注', + 'auth.description.placeholder': '可以为空,最多30个字', + 'auth.remember': '记住秘钥', + 'auth.login': '登入', + 'auth.akHistories': 'AK历史', + 'auth.secure': 'HTTPS加密', + 'auth.keepLoggedIn': '保持登录', + + 'auth.authToken': '授权码', + 'auth.authToken.tooltip': '点击查看帮助', + 'auth.authToken.placeholder': '请输入授权码', + 'auth.authToken.error.invalid': '请输入有效的授权码', + 'auth.authToken.error.expired': '授权码已经过期', + 'auth.authToken.info.validUntil': '有效期至{{expiration}}', + 'auth.authToken.info.leftTime': '剩余时间', + + 'auth.clearHistories': '清空历史', + + actions: '操作', + use: '使用', + delete: '删除', + ok: '确定', + cancel: '取消', + close: '关闭', + + 'auth.removeAK.title': '删除AK', + 'auth.removeAK.message': 'ID:{{id}}, 确定删除?', + + 'auth.clearAKHistories.title': '清空AK历史', + 'auth.clearAKHistories.message': '确定?', + 'auth.clearAKHistories.successMessage': '已清空AK历史', + + storageClassesType: '存储类型', + 'storageClassesType.standard': '标准类型', + 'storageClassesType.ia': '低频访问类型', + 'storageClassesType.archive': '归档存储', + 'storageClassesType.coldarchive': '冷归档存储', + 'storageClassesType.deepcoldarchive': '深度冷归档存储', + + 'aclType.default': '继承Bucket', + 'aclType.public-read-write': '公共读写', + 'aclType.public-read': '公共读', + 'aclType.private': '私有', + + files: '文件', + settings: '设置', + about: '关于', + bookmarks: '书签管理', + logout: '退出', + 'logout.message': '确定要退出?', + 'main.upgration': '主要更新', + tempCert: '临时凭证', + 'setup.success': '已经设置成功', + forbidden: '不支持在当前路径或者跨Region移动', //address bar - backward: "后退", - forward: "前进", - goUp: "上一级", - refresh: "刷新", - home: "首页", - saveAsHome: "保存为首页", - saveToFav: "保存书签", - "saveAsHome.success": "设置默认地址成功", - - "bookmark.remove.success": "已删除书签", - "bookmark.add.error1": "添加书签失败: 超过最大限制", - "bookmark.add.success": "添加书签成功", + backward: '后退', + forward: '前进', + goUp: '上一级', + refresh: '刷新', + home: '首页', + saveAsHome: '保存为首页', + saveToFav: '保存书签', + 'saveAsHome.success': '设置默认地址成功', + + 'bookmark.remove.success': '已删除书签', + 'bookmark.add.error1': '添加书签失败: 超过最大限制', + 'bookmark.add.success': '添加书签成功', //bucket - "bucket.add": "新建 Bucket", - "bucket.multipart": "碎片", - acl: "ACL权限", - privilege: "权限", - simplePolicy: "简化Policy授权", - more: "更多", - "bucket.name": "Bucket名称", - creationTime: "创建时间", - "bucket.add.name.invalid": "您输入的Bucket名称无效", - "acl.warn-not-private.public-read": - "公共读(public-read)权限可以不通过身份验证直接读取您 Bucket 中的数据,安全风险高,为确保您的数据安全,不推荐此配置,建议您选择私有(private)。", - "acl.warn-not-private.public-read-write": - "公共读写(public-read-write)权限可以不通过身份验证直接读取您 Bucket 中的数据,安全风险高,为确保您的数据安全,不推荐此配置,建议您选择私有(private)。", - - "multipart.management": "Multipart管理", - "multipart.description": - "管理通过Multipart(分块)方式上传过程中产生的事件与碎片。", - "multipart.description.tooltip": - "即已经被初始化的Multipart Upload但是未被Complete或者Abort的Multipart Upload事件", - - "select.all": "全选", - "delete.selected": "删除所选", - "delete.all": "删除所有", - - initiatedTime: "最初创建时间", - - loading: "正在载入...", - nodata: "没有数据", - - "delete.multiparts.title": "删除碎片", - "delete.multiparts.message": "删除{{num}}个碎片, 确定删除吗?", - "delete.multiparts.on": "正在删除碎片...", - "delete.multiparts.success": "删除碎片成功", - - "bucketACL.update": "修改Bucket权限", - "bucketACL.update.success": "修改Bucket权限成功", - - "bucket.add.success": "创建Bucket成功", - - "bucket.delete.title": "删除Bucket", - "bucket.delete.message": - "Bucket名称:{{name}}, 所在区域:{{region}}, 确定删除?", - "bucket.delete.success": "删除Bucket成功", - - "simplePolicy.title": "简化Policy授权", - "simplePolicy.lb1.1": "将下列资源", - "simplePolicy.lb1.2": "的权限", - "privilege.readonly": "只读", - "privilege.readwrite": "读写", - "privilege.all": "完全控制", - "simplePolicy.lb3.1": "查看Policy", - "simplePolicy.lb3.2": "隐藏Policy", - "simplePolicy.lb4": "创建为policy,命名为", - - readonly: "只读", - readwrite: "可写", - - "simplePolicy.lb5": "并授权给", - subusers: "子用户", - usergroups: "用户组", - roles: "角色", - - chooseone: "请选择", - - "simplePolicy.ok": "确定授权", - "simplePolicy.noauth.message1": "没有权限获取用户列表", - "simplePolicy.noauth.message2": "没有权限获取用户组列表", - "simplePolicy.noauth.message3": "没有权限获取角色列表", - "simplePolicy.success": "应用policy成功", + 'bucket.add': '新建 Bucket', + 'bucket.multipart': '碎片', + acl: 'ACL权限', + privilege: '权限', + simplePolicy: '简化Policy授权', + more: '更多', + 'bucket.name': 'Bucket名称', + creationTime: '创建时间', + 'bucket.add.name.invalid': '您输入的Bucket名称无效', + 'acl.warn-not-private.public-read': + '公共读(public-read)权限可以不通过身份验证直接读取您 Bucket 中的数据,安全风险高,为确保您的数据安全,不推荐此配置,建议您选择私有(private)。', + 'acl.warn-not-private.public-read-write': + '公共读写(public-read-write)权限可以不通过身份验证直接读取您 Bucket 中的数据,安全风险高,为确保您的数据安全,不推荐此配置,建议您选择私有(private)。', + + 'multipart.management': 'Multipart管理', + 'multipart.description': '管理通过Multipart(分块)方式上传过程中产生的事件与碎片。', + 'multipart.description.tooltip': + '即已经被初始化的Multipart Upload但是未被Complete或者Abort的Multipart Upload事件', + + 'select.all': '全选', + 'delete.selected': '删除所选', + 'delete.all': '删除所有', + + initiatedTime: '最初创建时间', + + loading: '正在载入...', + nodata: '没有数据', + + 'delete.multiparts.title': '删除碎片', + 'delete.multiparts.message': '删除{{num}}个碎片, 确定删除吗?', + 'delete.multiparts.on': '正在删除碎片...', + 'delete.multiparts.success': '删除碎片成功', + + 'bucketACL.update': '修改Bucket权限', + 'bucketACL.update.success': '修改Bucket权限成功', + + 'bucket.add.success': '创建Bucket成功', + + 'bucket.delete.title': '删除Bucket', + 'bucket.delete.message': + 'Bucket名称:{{name}}, 所在区域:{{region}}, 确定删除?', + 'bucket.delete.success': '删除Bucket成功', + + 'simplePolicy.title': '简化Policy授权', + 'simplePolicy.lb1.1': '将下列资源', + 'simplePolicy.lb1.2': '的权限', + 'privilege.readonly': '只读', + 'privilege.readwrite': '读写', + 'privilege.all': '完全控制', + 'simplePolicy.lb3.1': '查看Policy', + 'simplePolicy.lb3.2': '隐藏Policy', + 'simplePolicy.lb4': '创建为policy,命名为', + + readonly: '只读', + readwrite: '可写', + + 'simplePolicy.lb5': '并授权给', + subusers: '子用户', + usergroups: '用户组', + roles: '角色', + + chooseone: '请选择', + + 'simplePolicy.ok': '确定授权', + 'simplePolicy.noauth.message1': '没有权限获取用户列表', + 'simplePolicy.noauth.message2': '没有权限获取用户组列表', + 'simplePolicy.noauth.message3': '没有权限获取角色列表', + 'simplePolicy.success': '应用policy成功', //settings - "settings.maxUploadNum": "最大上传任务数", - "settings.maxDownloadNum": "最大下载任务数", - "settings.WhetherShowThumbnail": "是否显示图片缩略", - "settings.WhetherShowThumbnail.msg": - "在文件列表中显示图片缩略, 会消耗一定的流量", - "settings.success": "已经保存设置", - "settings.autoUpgrade": "自动更新", - "settings.autoUpgrade.msg": "自动下载更新包", - "settings.log": "日志设置", - "settings.console": "调试面板", - "settings.console.msg": "开启调试", - "settings.file": "本地日志文件", - "settings.file.msg": "日志文件存储到系统本地", - "settings.file.info": "本地info日志文件", - "settings.file.info.msg": "是否把info级别的日志存到本地", - "settings.connectTimeout": "超时时间(ms)", - "settings.uploadPartSize": "分片大小(M)", - "settings.downloadConcurrecyPartSize": "并发分片下载数", - "settings.uploadAndDownloadRetryTimes": "重试次数", - "settings.other": "其他设置", - "settings.other.list.object.max.number": "单次列举Object最大数量", + 'settings.maxUploadNum': '最大上传任务数', + 'settings.maxDownloadNum': '最大下载任务数', + 'settings.WhetherShowThumbnail': '是否显示图片缩略', + 'settings.WhetherShowThumbnail.msg': '在文件列表中显示图片缩略, 会消耗一定的流量', + 'settings.success': '已经保存设置', + 'settings.autoUpgrade': '自动更新', + 'settings.autoUpgrade.msg': '自动下载更新包', + 'settings.log': '日志设置', + 'settings.console': '调试面板', + 'settings.console.msg': '开启调试', + 'settings.file': '本地日志文件', + 'settings.file.msg': '日志文件存储到系统本地', + 'settings.file.info': '本地info日志文件', + 'settings.file.info.msg': '是否把info级别的日志存到本地', + 'settings.connectTimeout': '超时时间(ms)', + 'settings.uploadPartSize': '分片大小(M)', + 'settings.downloadConcurrecyPartSize': '并发分片下载数', + 'settings.uploadAndDownloadRetryTimes': '重试次数', + 'settings.other': '其他设置', + 'settings.other.list.object.max.number': '单次列举Object最大数量', //bookmark - "bookmarks.title": "书签管理", - time: "时间", - "bookmarks.delete.success": "删除书签成功", + 'bookmarks.title': '书签管理', + time: '时间', + 'bookmarks.delete.success': '删除书签成功', - "opensource.address": "开源地址", - foundNewVersion: "发现新版本", - clickToDownload: "点此下载", - currentIsLastest: "当前是最新版本!", + 'opensource.address': '开源地址', + foundNewVersion: '发现新版本', + clickToDownload: '点此下载', + currentIsLastest: '当前是最新版本!', //files - upload: "上传", - "folder.create": "创建目录", - "folder.create.success": "创建目录成功", - "folder.name": "目录名", - - download: "下载", - copy: "复制", - move: "移动", - paste: "粘贴", - rename: "重命名", - getAddress: "获取地址", - genAuthToken: "生成授权码", - - "rename.to": "重命名", - "whetherCover.title": "是否覆盖", - "whetherCover.message1": "已经有同名目录,是否覆盖?", - "whetherCover.message2": "已经有同名文件,是否覆盖?", - "rename.success": "重命名成功", - "rename.on": "正在重命名...", - "folder.in": "所在目录", - file: "文件", - folder: "目录", - - "copy.on": "正在复制...", - "move.on": "正在移动...", - - "use.cancelled": "用户取消", - - "copy.error1": "部分目录或文件无法复制", - "move.error1": "部分目录或文件无法移动", - "copy.success": "复制成功", - "move.success": "移动成功", - - stop: "停止", - - "paste.resources": "粘贴到本目录", - - "copy.cancel": "取消复制", - "move.cancel": "取消移动", - - "search.files.placeholder": "按名称前缀过滤", - "search.files.num_msg": - "当前已加载的目录及Object数量为{{num}},并非当前Bucket的总共Object数量。", - - "genAuthToken.title": "生成授权码", - "genAuthToken.message1.1": "授权给Bucket", - "genAuthToken.message1.2": "授权给目录", - "genAuthToken.message2": "的权限", - - "effective.duration": "有效时长", - "unit.second": "秒", - - "genAuthToken.message3.1": "还需要指定一个角色", - "genAuthToken.message3.2": - "这个角色需要至少有这个{{type}}的{{privilege}}权限", - - "genAuthToken.message4": "生成的授权码", - "genAuthToken.message5": - "使用上面生成的授权码登录OSS浏览器,可以达到只拥有[{{object}}]这个{{type}}的{{privilege}}权限的效果,有效期至{{expiration}}。", - "genAuthToken.message6.1": "确定生成", - "genAuthToken.message6.2": "重新生成", - - "deleteModal.title": "删除目录和文件", - "deleteModal.message1": "将删除以下目录或文件", - "delete.on": "正在删除...", - "delete.success": "删除成功", - "deleteModal.message2": "用户取消删除", - "deleteModal.message3": "部分目录或文件无法删除", - - "paste.message1": + upload: '上传', + 'folder.create': '创建目录', + 'folder.create.success': '创建目录成功', + 'folder.name': '目录名', + + download: '下载', + copy: '复制', + move: '移动', + paste: '粘贴', + rename: '重命名', + getAddress: '获取地址', + genAuthToken: '生成授权码', + + 'rename.to': '重命名', + 'whetherCover.title': '是否覆盖', + 'whetherCover.message1': '已经有同名目录,是否覆盖?', + 'whetherCover.message2': '已经有同名文件,是否覆盖?', + 'rename.success': '重命名成功', + 'rename.on': '正在重命名...', + 'folder.in': '所在目录', + file: '文件', + folder: '目录', + + 'copy.on': '正在复制...', + 'move.on': '正在移动...', + + 'use.cancelled': '用户取消', + + 'copy.error1': '部分目录或文件无法复制', + 'move.error1': '部分目录或文件无法移动', + 'copy.success': '复制成功', + 'move.success': '移动成功', + + stop: '停止', + + 'paste.resources': '粘贴到本目录', + + 'copy.cancel': '取消复制', + 'move.cancel': '取消移动', + + 'search.files.placeholder': '按名称前缀过滤', + 'search.files.num_msg': '当前已加载的目录及Object数量为{{num}},并非当前Bucket的总共Object数量。', + + 'genAuthToken.title': '生成授权码', + 'genAuthToken.message1.1': '授权给Bucket', + 'genAuthToken.message1.2': '授权给目录', + 'genAuthToken.message2': '的权限', + + 'effective.duration': '有效时长', + 'unit.second': '秒', + + 'genAuthToken.message3.1': '还需要指定一个角色', + 'genAuthToken.message3.2': '这个角色需要至少有这个{{type}}的{{privilege}}权限', + + 'genAuthToken.message4': '生成的授权码', + 'genAuthToken.message5': + '使用上面生成的授权码登录OSS浏览器,可以达到只拥有[{{object}}]这个{{type}}的{{privilege}}权限的效果,有效期至{{expiration}}。', + 'genAuthToken.message6.1': '确定生成', + 'genAuthToken.message6.2': '重新生成', + + 'deleteModal.title': '删除目录和文件', + 'deleteModal.message1': '将删除以下目录或文件', + 'delete.on': '正在删除...', + 'delete.success': '删除成功', + 'deleteModal.message2': '用户取消删除', + 'deleteModal.message3': '部分目录或文件无法删除', + + 'paste.message1': '将 {{name}}等 {{action}} 到这个目录下面(如有相同的文件或目录则覆盖)?', - "acl.update.title": "设置ACL权限", - "acl.update.success": "修改ACL权限成功", - "aclType.private.message": "私有:对object的所有访问操作需要进行身份验证", - "aclType.public-read.message": - "公共读:对object写操作需要进行身份验证;可以对object进行匿名读", - "aclType.public-read-write.message": - "公共读写:所有人都可以对object进行读写操作", - - "getAddress.title": "获取地址", - address: "地址", - "getAddress.message": "请输入链接有效期", - generate: "生成", - "qrcode.download": "扫码下载", - not_use_own_domain: "不使用其他域名", - custom_domain: "其他域名", - - "restore.checker.message1": "归档文件,需要解冻才能预览或下载。", - "restore.immediately": "立即解冻", - "restore.checker.message2": "归档文件已解冻,可读截止时间", - "restore.onprogress": "归档文件正在解冻中,请耐心等待...", - "restore.on": "提交中...", - "restore.success": "解冻请求已经提交", - "restore.days": "解冻天数", - "restore.message2": "可读截止时间", - "restore.title": "解冻", - "restore.msg": "选择需要解冻的文件", - restore: "解冻", - - preview: "预览", - "cannot.preview": "无法预览", - "cannot.preview.this.file": "该文件类型无法预览。", - "tryto.open.as.textfile": "尝试作为文本文件打开", - "preview.in.web.browser": "在浏览器中预览", - - save: "保存", - size: "大小", - filesize: "文件大小", - "codepreview.notsupport": "不支持直接打开,请下载到本地后打开。", - "download.file": "下载文件", - - lastModifyTime: "最后修改时间", - "loading.more": "正在加载更多...", - - "download.addtolist.on": "正在添加到下载队列", - "download.addtolist.success": "已全部添加到下载队列", - - "upload.addtolist.on": "正在添加到上传队列", - "upload.addtolist.success": "已全部添加到上传队列", - - "transframe.search.placeholder": "根据名称或状态搜索", - "ram.search.placeholder": "根据名称或修改时间搜索", - - "start.all": "启动全部", - "pause.all": "暂停全部", - "clear.finished": "清空已完成", - "clear.all": "清空全部", - - "clear.all.title": "清空全部", - "clear.all.download.message": "确定清空所有下载任务?", - "clear.all.upload.message": "确定清空所有上传任务?", - - "pause.on": "正在暂停...", - "pause.success": "暂停成功", - "remove.from.list.title": "从列表中移除", - "remove.from.list.message": "确定移除该任务?", - - "status.running.uploading": "正在上传", - "status.running.downloading": "正在下载", - "status.running": "运行中", - "status.stopped": "已停止", - "status.failed": "失败", - "status.finished": "完成", - "status.waiting": "等待", - "status.retrying": "重试中", - "status.retrytimes": "次", - "status.verifying": "正在校验", - - users: "子用户", - "users.title": "子用户管理", - "user.id": "用户ID", - displayName: "显示名", - comments: "描述", - update: "修改", - username: "用户名", - details: "详情", - add: "添加", - mobilePhone: "手机号", - ak: "AccessKey", - aks: "AccessKeys", - email: "邮箱", - - "user.delete.title": "删除用户", - "user.delete.message": "确定要删除[{{name}}]这个用户?", - "user.delete.on": "正在删除...", - "user.delete.success": "删除用户成功", - - status: "状态", - accessKeySecret: "AccessKeySecret", - createTime: "创建时间", - - "ak.status.update.title.Active": "禁用AccessKey", - "ak.status.update.title.Inactive": "启用AccessKey", - "ak.status.update.message.Active": "确定要禁用该AccessKey?", - "ak.status.update.message.Inactive": "确定要启用该AccessKey?", - "ak.delete.title": "删除AccessKey", - "ak.delete.message": "确定要删除该AccessKey?", - - "user.update.message.tip": - "请自行确保当前操作登录用户需要有 AliyunRAMFullAccess 权限。", - "user.list.message.tip": - "这里只提供必要的用户管理功能,更进一步的增强功能,请到RAM控制台操作:", - - "status.Active": "已启用", - "status.Inactive": "已禁用", - enable: "启用", - disable: "禁用", - show: "显示", - "can.not.get.accessKeySecret": "无法获取 AccessKeySecret", - - "settings.subtitle.updown": "上传下载设置", - "settings.subtitle.sys": "系统设置", - "settings.subtitle.email": "邮件发送设置", - "settings.mailSmtp.addr": "SMTP地址", - "settings.mailSmtp.ssl": "使用SSL", - "settings.mailSmtp.from": "发送邮件的邮箱", - - user: "用户名", - pass: "密码", - test: "测试一下", - - "mail.test.title": "测试邮件", - "mail.test.message": "将发送测试邮件到: {{from}}", - "mail.test.success": "邮件发送成功", - "mail.send.on": "正在发送...", - - "new.user": "[ 新建一个 ]", - "new.user.name": "新用户名", - "new.user.random.gen": "随机生成", - "new.user.email.send": "AK发送到邮件", - "new.user.email.noset": "还没设置邮件发送配置,需要先设置", - "new.user.email.noset.open": "打开设置", - - "click.copy": "点击复制", - - "http.headers": "HTTP头", - key: "参数", - value: "值", - userMetaData: "用户自定义元数据", - - "setting.on": "正在设置..", - "setting.success": "设置成功", - - "send.to": "发送到", - "send.email": "发送邮件", - "send.now": "立即发送", - "file.download.address": "文件下载地址", - "file.download.warning": - "如果您设置了Referer 白名单且Referer不允许为空,则通过浏览器直接访问该URL会失败", - - "file.op.set_symlink": "设置软链接", - "file.attr.symlink_src": "源文件(全路径)", - "file.attr.symlink_file": "软链接文件目录", - "file.message.symlink_help{target}!lines": - "软链接文件\n源文件地址:{{target}}\n您可以通过该文件链接访问到源文件内容。", - "file.message.symlink_rule{min,max}!html!lines": - "软链接文件目录命名规范:\n举例:当前目录 filename 或指定目录 aaa/bbb/filename。\n1. 不允许使用表情符;\n2. / 用于分割路径,不要以 / 开头或结尾,不要出现连续的 /;\n3. 不允许出现名为 .. 的子目录;\n4. 总长度控制在 {{min}}-{{max}} 个字符。", - "file.md.name.error.emoji": - "目录路径中不允许出现表情符,请使用符合要求的 UTF-8 字符", - "file.md.name.error.2dots": "目录路径中不允许出现名为「..」的子目录。", - "file.md.name.error.continuous slash": "目录路径不允许出现连续的「/」", - "file.message.validation_end_slash!html": "目录名不能以 / 或 \\ 开头。", - - "copy.successfully": "已复制到剪贴板", - "click.download": "点此下载", - - saving: "正在保存", - "save.successfully": "保存成功", - "content.isnot.modified": "内容没有修改", - - logining: "正在登录中...", - "login.successfully": "登录成功,正在跳转...", - "login.endpoint.error": "请确定Endpoint是否正确", - - "upgrade.start": "开始更新", - "upgrade.downloading": "正在下载...", - "upgrade.download.field": "自动更新失败, 请手动下载安装包。", - "upgrade.download.success": "已经下载成功, 现在安装并重启应用", - - "Insufficient disk space": "磁盘空间不足", - - "grant.email.title": "OSS Browser 授权", - "grant.email.body.title": - "OSS Browser 目前支持2种方式登录, 您可以选择任意一种:", - - "goto.create.role": "去创建角色", - "restore.days.tips.7": "有效期范围1-7天", + 'acl.update.title': '设置ACL权限', + 'acl.update.success': '修改ACL权限成功', + 'aclType.private.message': '私有:对object的所有访问操作需要进行身份验证', + 'aclType.public-read.message': '公共读:对object写操作需要进行身份验证;可以对object进行匿名读', + 'aclType.public-read-write.message': '公共读写:所有人都可以对object进行读写操作', + + 'getAddress.title': '获取地址', + address: '地址', + 'getAddress.message': '请输入链接有效期', + generate: '生成', + 'qrcode.download': '扫码下载', + not_use_own_domain: '不使用其他域名', + custom_domain: '其他域名', + + 'restore.checker.message1': '归档文件,需要解冻才能预览或下载。', + 'restore.immediately': '立即解冻', + 'restore.checker.message2': '归档文件已解冻,可读截止时间', + 'restore.onprogress': '归档文件正在解冻中,请耐心等待...', + 'restore.on': '提交中...', + 'restore.success': '解冻请求已经提交', + 'restore.days': '解冻天数', + 'restore.message2': '可读截止时间', + 'restore.title': '解冻', + 'restore.msg': '请选择需要解冻的文件', + 'restore.msg.no': + '勾选的解冻文件列表中包含低频访问/标准存储/解冻中/已解冻的文件,这些文件无需进行解冻操作。', + restore: '解冻', + restoring: '解冻中', + + preview: '预览', + 'cannot.preview': '无法预览', + 'cannot.preview.this.file': '该文件类型无法预览。', + 'tryto.open.as.textfile': '尝试作为文本文件打开', + 'preview.in.web.browser': '在浏览器中预览', + + save: '保存', + size: '大小', + filesize: '文件大小', + 'codepreview.notsupport': '不支持直接打开,请下载到本地后打开。', + 'download.file': '下载文件', + + lastModifyTime: '最后修改时间', + 'loading.more': '正在加载更多...', + + 'download.addtolist.on': '正在添加到下载队列', + 'download.addtolist.success': '已全部添加到下载队列', + + 'upload.addtolist.on': '正在添加到上传队列', + 'upload.addtolist.success': '已全部添加到上传队列', + + 'transframe.search.placeholder': '根据名称或状态搜索', + 'ram.search.placeholder': '根据名称或修改时间搜索', + + 'start.all': '启动全部', + 'pause.all': '暂停全部', + 'clear.finished': '清空已完成', + 'clear.all': '清空全部', + + 'clear.all.title': '清空全部', + 'clear.all.download.message': '确定清空所有下载任务?', + 'clear.all.upload.message': '确定清空所有上传任务?', + + 'pause.on': '正在暂停...', + 'pause.success': '暂停成功', + 'remove.from.list.title': '从列表中移除', + 'remove.from.list.message': '确定移除该任务?', + + 'status.running.uploading': '正在上传', + 'status.running.downloading': '正在下载', + 'status.running': '运行中', + 'status.stopped': '已停止', + 'status.failed': '失败', + 'status.finished': '完成', + 'status.waiting': '等待', + 'status.retrying': '重试中', + 'status.retrytimes': '次', + 'status.verifying': '正在校验', + + users: '子用户', + 'users.title': '子用户管理', + 'user.id': '用户ID', + displayName: '显示名', + comments: '描述', + update: '修改', + username: '用户名', + details: '详情', + add: '添加', + mobilePhone: '手机号', + ak: 'AccessKey', + aks: 'AccessKeys', + email: '邮箱', + + 'user.delete.title': '删除用户', + 'user.delete.message': '确定要删除[{{name}}]这个用户?', + 'user.delete.on': '正在删除...', + 'user.delete.success': '删除用户成功', + + status: '状态', + accessKeySecret: 'AccessKeySecret', + createTime: '创建时间', + + 'ak.status.update.title.Active': '禁用AccessKey', + 'ak.status.update.title.Inactive': '启用AccessKey', + 'ak.status.update.message.Active': '确定要禁用该AccessKey?', + 'ak.status.update.message.Inactive': '确定要启用该AccessKey?', + 'ak.delete.title': '删除AccessKey', + 'ak.delete.message': '确定要删除该AccessKey?', + + 'user.update.message.tip': '请自行确保当前操作登录用户需要有 AliyunRAMFullAccess 权限。', + 'user.list.message.tip': '这里只提供必要的用户管理功能,更进一步的增强功能,请到RAM控制台操作:', + + 'status.Active': '已启用', + 'status.Inactive': '已禁用', + enable: '启用', + disable: '禁用', + show: '显示', + 'can.not.get.accessKeySecret': '无法获取 AccessKeySecret', + + 'settings.subtitle.updown': '上传下载设置', + 'settings.subtitle.sys': '系统设置', + 'settings.subtitle.email': '邮件发送设置', + 'settings.mailSmtp.addr': 'SMTP地址', + 'settings.mailSmtp.ssl': '使用SSL', + 'settings.mailSmtp.from': '发送邮件的邮箱', + + user: '用户名', + pass: '密码', + test: '测试一下', + + 'mail.test.title': '测试邮件', + 'mail.test.message': '将发送测试邮件到: {{from}}', + 'mail.test.success': '邮件发送成功', + 'mail.send.on': '正在发送...', + + 'new.user': '[ 新建一个 ]', + 'new.user.name': '新用户名', + 'new.user.random.gen': '随机生成', + 'new.user.email.send': 'AK发送到邮件', + 'new.user.email.noset': '还没设置邮件发送配置,需要先设置', + 'new.user.email.noset.open': '打开设置', + + 'click.copy': '点击复制', + + 'http.headers': 'HTTP头', + key: '参数', + value: '值', + userMetaData: '用户自定义元数据', + + 'setting.on': '正在设置..', + 'setting.success': '设置成功', + + 'send.to': '发送到', + 'send.email': '发送邮件', + 'send.now': '立即发送', + 'file.download.address': '文件下载地址', + 'file.download.warning': + '如果您设置了Referer 白名单且Referer不允许为空,则通过浏览器直接访问该URL会失败', + + 'file.op.set_symlink': '设置软链接', + 'file.attr.symlink_src': '源文件(全路径)', + 'file.attr.symlink_file': '软链接文件目录', + 'file.message.symlink_help{target}!lines': + '软链接文件\n源文件地址:{{target}}\n您可以通过该文件链接访问到源文件内容。', + 'file.message.symlink_rule{min,max}!html!lines': + '软链接文件目录命名规范:\n举例:当前目录 filename 或指定目录 aaa/bbb/filename。\n1. 不允许使用表情符;\n2. / 用于分割路径,不要以 / 开头或结尾,不要出现连续的 /;\n3. 不允许出现名为 .. 的子目录;\n4. 总长度控制在 {{min}}-{{max}} 个字符。', + 'file.md.name.error.emoji': '目录路径中不允许出现表情符,请使用符合要求的 UTF-8 字符', + 'file.md.name.error.2dots': '目录路径中不允许出现名为「..」的子目录。', + 'file.md.name.error.continuous slash': '目录路径不允许出现连续的「/」', + 'file.message.validation_end_slash!html': '目录名不能以 / 或 \\ 开头。', + + 'copy.successfully': '已复制到剪贴板', + 'click.download': '点此下载', + + saving: '正在保存', + 'save.successfully': '保存成功', + 'content.isnot.modified': '内容没有修改', + + logining: '正在登录中...', + 'login.successfully': '登录成功,正在跳转...', + 'login.endpoint.error': '请确定Endpoint是否正确', + + 'upgrade.start': '开始更新', + 'upgrade.downloading': '正在下载...', + 'upgrade.download.field': '自动更新失败, 请手动下载安装包。', + 'upgrade.download.success': '已经下载成功, 现在安装并重启应用', + + 'Insufficient disk space': '磁盘空间不足', + + 'grant.email.title': 'OSS Browser 授权', + 'grant.email.body.title': 'OSS Browser 目前支持2种方式登录, 您可以选择任意一种:', + + 'goto.create.role': '去创建角色', + 'restore.days.tips.7': '有效期范围1~7天', + 'restore.days.tips.365': '有效期范围1~365天', + 'restore.file.type.archive': '归档存储文件', + 'restore.file.type.cold.archive': '冷归档存储文件', + 'restore.file.type.deep.cold.archive': '深度冷归档存储文件', + 'restore.copyvalidity': '副本有效期', + 'restore.mode': '恢复模式', + 'restore.mode.type.expedited': '高优先级', + 'restore.mode.type.standard': '标准', + 'restore.mode.type.bulk': '批量', + 'restore.mode.type.expedited.explain': '1小时内完成解冻', + 'restore.mode.type.standard.explain': '2~5小时内完成解冻', + 'restore.mode.type.bulk.explain': '5~12小时内完成解冻', + 'restore.mode.type.expedited.explain.deep': '12小时内完成解冻,解冻完成后才能读取', + 'restore.mode.type.standard.explain.deep': '48小时内完成解冻,解冻完成后才能读取', }; diff --git a/vendor/aliyun-sdk-oss.js b/vendor/aliyun-sdk-oss.js index 4042a445..10cbfb7b 100644 --- a/vendor/aliyun-sdk-oss.js +++ b/vendor/aliyun-sdk-oss.js @@ -22597,6 +22597,16 @@ module.exports={ "Days": { "type": "integer", "required": true + }, + "JobParameters": { + "type": "structure", + "members": { + "Tier": { + "type": "string", + "name": "Tier", + "required": false + } + } } } } From 1f94698b4a753d0d032ccd10210d477c19b97141 Mon Sep 17 00:00:00 2001 From: csg01123119 Date: Thu, 8 Feb 2024 16:40:49 +0800 Subject: [PATCH 2/3] feat: cold archive and deep cold archive support restore --- app/main/files/_/batch-restore-modal.js | 10 +- .../files/modals/batch-restore-modal.html | 258 +++++++++--------- 2 files changed, 140 insertions(+), 128 deletions(-) diff --git a/app/main/files/_/batch-restore-modal.js b/app/main/files/_/batch-restore-modal.js index a9534c6f..87bd826e 100644 --- a/app/main/files/_/batch-restore-modal.js +++ b/app/main/files/_/batch-restore-modal.js @@ -38,19 +38,19 @@ angular.module('web').controller('batchRestoreModalCtrl', [ onSubmit: onSubmit, }); - // init(); + init(); function init() { $scope.isLoading = true; const pros = []; - for (let i in items) { - const p = ossSvs2.getFileInfo(currentInfo.region, currentInfo.bucket, items[i].path); + for (const i of items) { + const p = ossSvs2.getFileInfo(currentInfo.region, currentInfo.bucket, i.path); pros.push(p); } Promise.all(pros).then(function (datas) { - const data = datas.find(item => !!item.Restore); - if (data.Restore) { + const data = datas.find(item => !!item.Restore); //有解冻记录 + if (data && data.Restore) { var info = parseRestoreInfo(data.Restore); if (info['ongoing-request'] == 'true') { diff --git a/app/main/files/modals/batch-restore-modal.html b/app/main/files/modals/batch-restore-modal.html index 73dd680b..e618f5a6 100644 --- a/app/main/files/modals/batch-restore-modal.html +++ b/app/main/files/modals/batch-restore-modal.html @@ -23,145 +23,157 @@
- -
-
- {{'restore.file.type.archive'|translate}} -
- -
- -
{{'restore.days.tips.7'|translate}}
-
-
-
-
-
- {{'restore.file.type.cold.archive'|translate}} -
- -
- -
{{'restore.days.tips.365'|translate}}
-
- -
-