From 8c21bc8e22cedd6235453bfb3a9715e4ed78f237 Mon Sep 17 00:00:00 2001 From: chlins Date: Wed, 30 Oct 2024 16:02:30 +0800 Subject: [PATCH] feat: extend the p2p preheat policy Add the field extra_attrs to the p2p preheat policy for the provider to define their specified parameters when preheating. Signed-off-by: chlins --- api/v2.0/swagger.yaml | 13 +- .../postgresql/0160_2.13.0_schema.up.sql | 1 + src/controller/p2p/preheat/enforcer.go | 13 +- src/pkg/p2p/preheat/models/policy/policy.go | 38 +- .../p2p/preheat/models/policy/policy_test.go | 28 +- src/pkg/p2p/preheat/provider/dragonfly.go | 29 +- .../p2p/preheat/provider/dragonfly_test.go | 3 + src/pkg/p2p/preheat/provider/preheat_image.go | 3 + .../add-p2p-policy.component.html | 17 + .../add-p2p-policy.component.ts | 11 +- .../p2p-provider/policy/policy.component.html | 27 + .../p2p-provider/policy/policy.component.scss | 25 +- .../p2p-provider/policy/policy.component.ts | 28 +- src/portal/src/i18n/lang/de-de-lang.json | 17 +- src/portal/src/i18n/lang/en-us-lang.json | 12 +- src/portal/src/i18n/lang/es-es-lang.json | 6 +- src/portal/src/i18n/lang/fr-fr-lang.json | 19 +- src/portal/src/i18n/lang/ko-kr-lang.json | 6 +- src/portal/src/i18n/lang/pt-br-lang.json | 5 +- src/portal/src/i18n/lang/tr-tr-lang.json | 5 +- src/portal/src/i18n/lang/zh-cn-lang.json | 11 +- src/portal/src/i18n/lang/zh-tw-lang.json | 3963 +++++++++-------- src/server/v2.0/handler/preheat.go | 24 +- 23 files changed, 2235 insertions(+), 2069 deletions(-) create mode 100644 make/migrations/postgresql/0160_2.13.0_schema.up.sql diff --git a/api/v2.0/swagger.yaml b/api/v2.0/swagger.yaml index c6ad6db13..648e03f7f 100644 --- a/api/v2.0/swagger.yaml +++ b/api/v2.0/swagger.yaml @@ -1193,7 +1193,7 @@ paths: '404': $ref: '#/responses/404' '422': - $ref: '#/responses/422' + $ref: '#/responses/422' '500': $ref: '#/responses/500' /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/scan/stop: @@ -1226,7 +1226,7 @@ paths: '404': $ref: '#/responses/404' '422': - $ref: '#/responses/422' + $ref: '#/responses/422' '500': $ref: '#/responses/500' /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/scan/{report_id}/log: @@ -6553,7 +6553,7 @@ responses: description: The ID of the corresponding request for the response type: string schema: - $ref: '#/definitions/Errors' + $ref: '#/definitions/Errors' '500': description: Internal server error headers: @@ -7098,6 +7098,9 @@ definitions: scope: type: string description: The scope of preheat policy + extra_attrs: + type: string + description: The extra attributes of preheat policy creation_time: type: string format: date-time @@ -7937,7 +7940,7 @@ definitions: properties: resource: type: string - description: The resource of the access. Possible resources are listed here for system and project level https://github.com/goharbor/harbor/blob/main/src/common/rbac/const.go + description: The resource of the access. Possible resources are listed here for system and project level https://github.com/goharbor/harbor/blob/main/src/common/rbac/const.go action: type: string description: The action of the access. Possible actions are *, pull, push, create, read, update, delete, list, operate, scanner-pull and stop. @@ -10112,4 +10115,4 @@ definitions: scan_type: type: string description: 'The scan type for the scan request. Two options are currently supported, vulnerability and sbom' - enum: [ vulnerability, sbom ] \ No newline at end of file + enum: [ vulnerability, sbom ] diff --git a/make/migrations/postgresql/0160_2.13.0_schema.up.sql b/make/migrations/postgresql/0160_2.13.0_schema.up.sql new file mode 100644 index 000000000..10c424c39 --- /dev/null +++ b/make/migrations/postgresql/0160_2.13.0_schema.up.sql @@ -0,0 +1 @@ +ALTER TABLE p2p_preheat_policy ADD COLUMN IF NOT EXISTS extra_attrs json; diff --git a/src/controller/p2p/preheat/enforcer.go b/src/controller/p2p/preheat/enforcer.go index 005c60809..1b268d489 100644 --- a/src/controller/p2p/preheat/enforcer.go +++ b/src/controller/p2p/preheat/enforcer.go @@ -402,7 +402,7 @@ func (de *defaultEnforcer) launchExecutions(ctx context.Context, candidates []*s // Start tasks count := 0 for _, c := range candidates { - if _, err = de.startTask(ctx, eid, c, insData, pl.Scope); err != nil { + if _, err = de.startTask(ctx, eid, c, insData, pl.Scope, pl.ExtraAttrs); err != nil { // Just log the error and skip log.Errorf("start task error for preheating image: %s/%s:%s@%s", c.Namespace, c.Repository, c.Tags[0], c.Digest) continue @@ -421,7 +421,7 @@ func (de *defaultEnforcer) launchExecutions(ctx context.Context, candidates []*s } // startTask starts the preheat task(job) for the given candidate -func (de *defaultEnforcer) startTask(ctx context.Context, executionID int64, candidate *selector.Candidate, instance, scope string) (int64, error) { +func (de *defaultEnforcer) startTask(ctx context.Context, executionID int64, candidate *selector.Candidate, instance, scope string, extraAttrs map[string]interface{}) (int64, error) { u, err := de.fullURLGetter(candidate) if err != nil { return -1, err @@ -438,10 +438,11 @@ func (de *defaultEnforcer) startTask(ctx context.Context, executionID int64, can Headers: map[string]interface{}{ accessCredHeaderKey: cred, }, - ImageName: fmt.Sprintf("%s/%s", candidate.Namespace, candidate.Repository), - Tag: candidate.Tags[0], - Digest: candidate.Digest, - Scope: scope, + ImageName: fmt.Sprintf("%s/%s", candidate.Namespace, candidate.Repository), + Tag: candidate.Tags[0], + Digest: candidate.Digest, + Scope: scope, + ExtraAttrs: extraAttrs, } piData, err := pi.ToJSON() diff --git a/src/pkg/p2p/preheat/models/policy/policy.go b/src/pkg/p2p/preheat/models/policy/policy.go index 2ac1b2a82..d70ee8fb9 100644 --- a/src/pkg/p2p/preheat/models/policy/policy.go +++ b/src/pkg/p2p/preheat/models/policy/policy.go @@ -81,9 +81,12 @@ type Schema struct { TriggerStr string `orm:"column(trigger)" json:"-"` Enabled bool `orm:"column(enabled)" json:"enabled"` // Scope decides the preheat scope. - Scope string `orm:"column(scope)" json:"scope"` - CreatedAt time.Time `orm:"column(creation_time)" json:"creation_time"` - UpdatedTime time.Time `orm:"column(update_time)" json:"update_time"` + Scope string `orm:"column(scope)" json:"scope"` + // ExtraAttrs is used to store extra attributes provided by vendor. + ExtraAttrsStr string `orm:"column(extra_attrs)" json:"-"` + ExtraAttrs map[string]interface{} `orm:"-" json:"extra_attrs"` + CreatedAt time.Time `orm:"column(creation_time)" json:"creation_time"` + UpdatedTime time.Time `orm:"column(update_time)" json:"update_time"` } // TableName specifies the policy schema table name. @@ -162,6 +165,14 @@ func (s *Schema) Encode() error { s.TriggerStr = string(triggerStr) } + if s.ExtraAttrs != nil { + extraAttrsStr, err := json.Marshal(s.ExtraAttrs) + if err != nil { + return err + } + s.ExtraAttrsStr = string(extraAttrsStr) + } + return nil } @@ -181,6 +192,13 @@ func (s *Schema) Decode() error { } s.Trigger = trigger + // parse extra attributes + extraAttrs, err := decodeExtraAttrs(s.ExtraAttrsStr) + if err != nil { + return err + } + s.ExtraAttrs = extraAttrs + return nil } @@ -230,3 +248,17 @@ func decodeTrigger(triggerStr string) (*Trigger, error) { return trigger, nil } + +// decodeExtraAttrs parse extraAttrsStr to extraAttrs. +func decodeExtraAttrs(extraAttrsStr string) (map[string]interface{}, error) { + if len(extraAttrsStr) == 0 { + return nil, nil + } + + extraAttrs := make(map[string]interface{}) + if err := json.Unmarshal([]byte(extraAttrsStr), &extraAttrs); err != nil { + return nil, err + } + + return extraAttrs, nil +} diff --git a/src/pkg/p2p/preheat/models/policy/policy_test.go b/src/pkg/p2p/preheat/models/policy/policy_test.go index 71a1e9ca1..fabd8fa5d 100644 --- a/src/pkg/p2p/preheat/models/policy/policy_test.go +++ b/src/pkg/p2p/preheat/models/policy/policy_test.go @@ -76,23 +76,25 @@ func (p *PolicyTestSuite) TestValidatePreheatPolicy() { // TestDecode tests decode. func (p *PolicyTestSuite) TestDecode() { s := &Schema{ - ID: 100, - Name: "test-for-decode", - Description: "", - ProjectID: 1, - ProviderID: 1, - Filters: nil, - FiltersStr: "[{\"type\":\"repository\",\"value\":\"**\"},{\"type\":\"tag\",\"value\":\"**\"},{\"type\":\"label\",\"value\":\"test\"}]", - Trigger: nil, - TriggerStr: "{\"type\":\"event_based\",\"trigger_setting\":{\"cron\":\"\"}}", - Enabled: false, - Scope: "all_peers", + ID: 100, + Name: "test-for-decode", + Description: "", + ProjectID: 1, + ProviderID: 1, + Filters: nil, + FiltersStr: "[{\"type\":\"repository\",\"value\":\"**\"},{\"type\":\"tag\",\"value\":\"**\"},{\"type\":\"label\",\"value\":\"test\"}]", + Trigger: nil, + TriggerStr: "{\"type\":\"event_based\",\"trigger_setting\":{\"cron\":\"\"}}", + Enabled: false, + Scope: "all_peers", + ExtraAttrsStr: "{\"key\":\"value\"}", } p.NoError(s.Decode()) p.Len(s.Filters, 3) p.NotNil(s.Trigger) p.Equal(ScopeTypeAllPeers, s.Scope) + p.Equal(map[string]interface{}{"key": "value"}, s.ExtraAttrs) // invalid filter or trigger s.FiltersStr = "" @@ -133,9 +135,13 @@ func (p *PolicyTestSuite) TestEncode() { TriggerStr: "", Enabled: false, Scope: "single_peer", + ExtraAttrs: map[string]interface{}{ + "key": "value", + }, } p.NoError(s.Encode()) p.Equal(`[{"type":"repository","value":"**"},{"type":"tag","value":"**"},{"type":"label","value":"test"}]`, s.FiltersStr) p.Equal(`{"type":"event_based","trigger_setting":{}}`, s.TriggerStr) p.Equal(ScopeTypeSinglePeer, s.Scope) + p.Equal(`{"key":"value"}`, s.ExtraAttrsStr) } diff --git a/src/pkg/p2p/preheat/provider/dragonfly.go b/src/pkg/p2p/preheat/provider/dragonfly.go index 524d76ebc..dfc8766b1 100644 --- a/src/pkg/p2p/preheat/provider/dragonfly.go +++ b/src/pkg/p2p/preheat/provider/dragonfly.go @@ -54,13 +54,13 @@ const ( type dragonflyCreateJobRequest struct { // Type is the job type, support preheat. - Type string `json:"type" binding:"required"` + Type string `json:"type"` // Args is the preheating args. - Args dragonflyCreateJobRequestArgs `json:"args" binding:"omitempty"` + Args dragonflyCreateJobRequestArgs `json:"args"` // SchedulerClusterIDs is the scheduler cluster ids for preheating. - SchedulerClusterIDs []uint `json:"scheduler_cluster_ids" binding:"omitempty"` + SchedulerClusterIDs []uint `json:"scheduler_cluster_ids"` } type dragonflyCreateJobRequestArgs struct { @@ -150,6 +150,12 @@ type dragonflyJobResponse struct { } `json:"result"` } +// dragonflyExtraAttrs is the extra attributes model definition for dragonfly provider. +type dragonflyExtraAttrs struct { + // ClusterIDs is the cluster ids for dragonfly provider. + ClusterIDs []uint `json:"cluster_ids"` +} + // DragonflyDriver implements the provider driver interface for Alibaba dragonfly. // More details, please refer to https://github.com/alibaba/Dragonfly type DragonflyDriver struct { @@ -201,6 +207,18 @@ func (dd *DragonflyDriver) Preheat(preheatingImage *PreheatImage) (*PreheatingSt return nil, errors.New("no image specified") } + var extraAttrs dragonflyExtraAttrs + if preheatingImage.ExtraAttrs != nil && len(preheatingImage.ExtraAttrs) > 0 { + extraAttrsStr, err := json.Marshal(preheatingImage.ExtraAttrs) + if err != nil { + return nil, errors.Wrap(err, "failed to marshal extra attributes") + } + + if err := json.Unmarshal(extraAttrsStr, &extraAttrs); err != nil { + return nil, errors.Wrap(err, "failed to unmarshal extra attributes") + } + } + // Construct the preheat job request by the given parameters of the preheating image . req := &dragonflyCreateJobRequest{ Type: "preheat", @@ -213,6 +231,11 @@ func (dd *DragonflyDriver) Preheat(preheatingImage *PreheatImage) (*PreheatingSt }, } + // Set the cluster ids if it is specified. + if len(extraAttrs.ClusterIDs) > 0 { + req.SchedulerClusterIDs = extraAttrs.ClusterIDs + } + url := fmt.Sprintf("%s%s", strings.TrimSuffix(dd.instance.Endpoint, "/"), dragonflyJobPath) data, err := client.GetHTTPClient(dd.instance.Insecure).Post(url, dd.getCred(), req, nil) if err != nil { diff --git a/src/pkg/p2p/preheat/provider/dragonfly_test.go b/src/pkg/p2p/preheat/provider/dragonfly_test.go index e407cc779..2becfa7ca 100644 --- a/src/pkg/p2p/preheat/provider/dragonfly_test.go +++ b/src/pkg/p2p/preheat/provider/dragonfly_test.go @@ -86,6 +86,9 @@ func (suite *DragonflyTestSuite) TestPreheat() { URL: "https://harbor.com", Digest: "sha256:f3c97e3bd1e27393eb853a5c90b1132f2cda84336d5ba5d100c720dc98524c82", Scope: "single_peer", + ExtraAttrs: map[string]interface{}{ + "cluster_ids": []uint{1, 2, 3}, + }, }) require.NoError(suite.T(), err, "preheat image") suite.Equal(provider.PreheatingStatusPending, st.Status, "preheat status") diff --git a/src/pkg/p2p/preheat/provider/preheat_image.go b/src/pkg/p2p/preheat/provider/preheat_image.go index 8b576f96d..2a96d9e26 100644 --- a/src/pkg/p2p/preheat/provider/preheat_image.go +++ b/src/pkg/p2p/preheat/provider/preheat_image.go @@ -48,6 +48,9 @@ type PreheatImage struct { // Scope indicates the preheat scope. Scope string `json:"scope,omitempty"` + + // ExtraAttrs contains extra attributes for the preheating image. + ExtraAttrs map[string]interface{} `json:"extra_attrs,omitempty"` } // FromJSON build preheating image from the given data. diff --git a/src/portal/src/app/base/project/p2p-provider/add-p2p-policy/add-p2p-policy.component.html b/src/portal/src/app/base/project/p2p-provider/add-p2p-policy/add-p2p-policy.component.html index ea8c21937..f5d1279be 100644 --- a/src/portal/src/app/base/project/p2p-provider/add-p2p-policy/add-p2p-policy.component.html +++ b/src/portal/src/app/base/project/p2p-provider/add-p2p-policy/add-p2p-policy.component.html @@ -481,6 +481,23 @@ + +
+ +
+ +
+
diff --git a/src/portal/src/app/base/project/p2p-provider/add-p2p-policy/add-p2p-policy.component.ts b/src/portal/src/app/base/project/p2p-provider/add-p2p-policy/add-p2p-policy.component.ts index 7cbc49f7a..67f5a50f0 100644 --- a/src/portal/src/app/base/project/p2p-provider/add-p2p-policy/add-p2p-policy.component.ts +++ b/src/portal/src/app/base/project/p2p-provider/add-p2p-policy/add-p2p-policy.component.ts @@ -12,6 +12,7 @@ import { NgForm } from '@angular/forms'; import { OriginCron, ProjectService } from '../../../../shared/services'; import { CronScheduleComponent } from '../../../../shared/components/cron-schedule'; import { PreheatService } from '../../../../../../ng-swagger-gen/services/preheat.service'; +import { ExtraAttrs } from '../../../../../../ng-swagger-gen/models/extra-attrs'; import { debounceTime, distinctUntilChanged, @@ -76,6 +77,7 @@ export class AddP2pPolicyComponent implements OnInit, OnDestroy { labels: string; triggerType: string = TRIGGER.MANUAL; scope: string = SCOPE.SINGLE_PEER; + extraAttrs: string; cron: string; @ViewChild('policyForm', { static: true }) currentForm: NgForm; loading: boolean = false; @@ -90,6 +92,8 @@ export class AddP2pPolicyComponent implements OnInit, OnDestroy { originLabelsForEdit: string; originTriggerTypeForEdit: string; originCronForEdit: string; + originScopeForEdit: string; + originExtraAttrsForEdit: string; @Input() providers: ProviderUnderProject[] = []; preventVul: boolean = false; @@ -309,6 +313,7 @@ export class AddP2pPolicyComponent implements OnInit, OnDestroy { this.loading = true; this.buttonStatus = ClrLoadingState.LOADING; policy.scope = this.scope ? this.scope : SCOPE.SINGLE_PEER; + policy.extra_attrs = this.extraAttrs; deleteEmptyKey(policy); if (isAdd) { policy.project_id = this.projectId; @@ -410,7 +415,11 @@ export class AddP2pPolicyComponent implements OnInit, OnDestroy { return true; } // eslint-disable-next-line eqeqeq - if (this.policy.scope != this.scope) { + if (this.originScopeForEdit != this.scope) { + return true; + } + // eslint-disable-next-line eqeqeq + if (this.originExtraAttrsForEdit != this.extraAttrs) { return true; } // eslint-disable-next-line eqeqeq diff --git a/src/portal/src/app/base/project/p2p-provider/policy/policy.component.html b/src/portal/src/app/base/project/p2p-provider/policy/policy.component.html index 4a5a31c3c..50f3421a1 100644 --- a/src/portal/src/app/base/project/p2p-provider/policy/policy.component.html +++ b/src/portal/src/app/base/project/p2p-provider/policy/policy.component.html @@ -166,6 +166,10 @@ {{ 'P2P_PROVIDER.PROVIDER' | translate }} {{ 'P2P_PROVIDER.FILTERS' | translate }} {{ 'P2P_PROVIDER.TRIGGER' | translate }} + {{ 'P2P_PROVIDER.SCOPE' | translate }} + {{ + 'P2P_PROVIDER.EXTRA_ATTRIBUTES' | translate + }} {{ 'P2P_PROVIDER.CREATED' | translate }} @@ -284,6 +288,29 @@ + {{ getScopeI18n(p.scope) | translate }} + + + + + {{ toString(toJson(p?.extra_attrs)) }} + + + + +

+                    
+
+
{{ p.creation_time | harborDatetime : 'short' }} diff --git a/src/portal/src/app/base/project/p2p-provider/policy/policy.component.scss b/src/portal/src/app/base/project/p2p-provider/policy/policy.component.scss index 1306d02e6..f40631985 100644 --- a/src/portal/src/app/base/project/p2p-provider/policy/policy.component.scss +++ b/src/portal/src/app/base/project/p2p-provider/policy/policy.component.scss @@ -19,11 +19,11 @@ height: 100%; } -.margin-left-5px{ +.margin-left-5px { margin-left: 5px; } -.margin-left-10px{ +.margin-left-10px { margin-left: 10px; } @@ -58,3 +58,24 @@ .no-wrapper { white-space: nowrap; } + +.flex { + display: flex; +} + +.pre { + min-width: 25rem; + max-width: 40rem; +} + +pre { + border: none; +} + +.link-normal { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + max-width: 10rem; + text-transform: unset; +} diff --git a/src/portal/src/app/base/project/p2p-provider/policy/policy.component.ts b/src/portal/src/app/base/project/p2p-provider/policy/policy.component.ts index b973bd42a..bde12d87b 100644 --- a/src/portal/src/app/base/project/p2p-provider/policy/policy.component.ts +++ b/src/portal/src/app/base/project/p2p-provider/policy/policy.component.ts @@ -38,6 +38,7 @@ import { TIME_OUT, TRIGGER, TRIGGER_I18N_MAP, + SCOPE_I18N_MAP, } from '../p2p-provider.service'; import { PreheatPolicy } from '../../../../../../ng-swagger-gen/models/preheat-policy'; import { PreheatService } from '../../../../../../ng-swagger-gen/services/preheat.service'; @@ -490,7 +491,8 @@ export class PolicyComponent implements OnInit, OnDestroy { severity: this.addP2pPolicyComponent.severity, label: this.addP2pPolicyComponent.labels, triggerType: this.addP2pPolicyComponent.triggerType, - scope: this.addP2pPolicyComponent.scope, + scope: this.addP2pPolicyComponent.policy.scope, + extraAttrs: this.addP2pPolicyComponent.policy.extra_attrs, }); this.addP2pPolicyComponent.originPolicyForEdit = clone( this.selectedRow @@ -509,6 +511,10 @@ export class PolicyComponent implements OnInit, OnDestroy { this.addP2pPolicyComponent.triggerType; this.addP2pPolicyComponent.originCronForEdit = this.addP2pPolicyComponent.cron; + this.addP2pPolicyComponent.originScopeForEdit = + this.addP2pPolicyComponent.scope; + this.addP2pPolicyComponent.originExtraAttrsForEdit = + this.addP2pPolicyComponent.extraAttrs; } } @@ -666,6 +672,13 @@ export class PolicyComponent implements OnInit, OnDestroy { return trigger; } + getScopeI18n(scope: string): string { + if (scope) { + return SCOPE_I18N_MAP[scope]; + } + return ''; + } + isScheduled(trigger: string): boolean { return JSON.parse(trigger).type === TRIGGER.SCHEDULED; } @@ -794,4 +807,17 @@ export class PolicyComponent implements OnInit, OnDestroy { } } } + + toString(v: any) { + if (v) { + return JSON.stringify(v); + } + return ''; + } + toJson(v: any) { + if (v) { + return JSON.parse(v); + } + return null; + } } diff --git a/src/portal/src/i18n/lang/de-de-lang.json b/src/portal/src/i18n/lang/de-de-lang.json index 259acc69e..3552901f5 100644 --- a/src/portal/src/i18n/lang/de-de-lang.json +++ b/src/portal/src/i18n/lang/de-de-lang.json @@ -16,7 +16,7 @@ "HEADER_LINK": "Einloggen", "OR": "ODER", "VIA_LOCAL_DB": "LOGIN MIT LOKALER DB", - "CORE_SERVICE_NOT_AVAILABLE": "Core Service ist nicht verfügbar" + "CORE_SERVICE_NOT_AVAILABLE": "Core Service ist nicht verfügbar" }, "SIGN_UP": { "TITLE": "Registrieren" @@ -246,7 +246,7 @@ "TOGGLED_SUCCESS": "Projekt erfolgreich geändert.", "FAILED_TO_DELETE_PROJECT": "Das Projekt enthält Repositories, Replikations-Regeln oder Helm-Charts und kann daher nicht gelöscht werden.", "INLINE_HELP_PUBLIC": "Wenn ein Projekt öffentlich ist, hat jeder lesenden Zugriff auf die Repositories innerhalb des Projekts. Der Nutzer muss nicht \"docker login\" vor dem Pull eines Images durchführen.", - "PROXY_CACHE_BANDWIDTH":"Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", + "PROXY_CACHE_BANDWIDTH": "Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", "BANDWIDTH": "Bandwidth", "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", "OF": "von", @@ -385,7 +385,7 @@ "INVALID_VALUE": "Der Wert der Ablaufzeit ist ungültig", "NEVER_EXPIRED": "Läuft nie ab", "NAME_PREFIX": "Prefix für den Namen der Robot-Zugänge", - "NAME_PREFIX_REQUIRED": "Es ist ein Prefix für den Robot-Zugang erforderlich", + "NAME_PREFIX_REQUIRED": "Es ist ein Prefix für den Robot-Zugang erforderlich", "UPDATE": "Update", "AUDIT_LOG": "Audit Log", "PREHEAT_INSTANCE": "Preheat Instance", @@ -936,7 +936,6 @@ "LDAP_GROUP_MEMBERSHIP_INFO": "Dass Attribut, das die Mitglieder einer LDAP-Gruppe identifiziert. Standardwert ist memberof, in manchen LDAP Servern kann es \"ismemberof\" sein. Das Feld darf nicht leer sein, sofern eine LDAP Gruppen Funktion eingesetzt wird.", "GROUP_SCOPE": "LDAP Gruppen Search Scope", "GROUP_SCOPE_INFO": "Der Scope mit dem nach Gruppen gesucht wird. Standard ist Subtree." - }, "UAA": { "ENDPOINT": "UAA Endpunkt", @@ -966,8 +965,8 @@ "OIDC_USERNAME": "Nutzername", "GROUP_CLAIM_NAME": "Group Claim Name", "GROUP_CLAIM_NAME_INFO": "The name of a custom group claim that you have configured in your OIDC provider", - "OIDC_ADMIN_GROUP": "OIDC Administratorengruppe", - "OIDC_ADMIN_GROUP_INFO": "Spezifiziere den Namen einer OIDC Administratorengruppe. Alle Mitglieder dieser Gruppe haben in Harbor administrative Berechtigungen. Falls dies nicht gewünscht ist, kann das Feld leer gelassen werden.", + "OIDC_ADMIN_GROUP": "OIDC Administratorengruppe", + "OIDC_ADMIN_GROUP_INFO": "Spezifiziere den Namen einer OIDC Administratorengruppe. Alle Mitglieder dieser Gruppe haben in Harbor administrative Berechtigungen. Falls dies nicht gewünscht ist, kann das Feld leer gelassen werden.", "OIDC_GROUP_FILTER": "OIDC Group Filter", "OIDC_GROUP_FILTER_INFO": "Filter OIDC groups who match the provided regular expression.Keep it blank to match all the groups." }, @@ -1310,7 +1309,6 @@ "ON": "am", "AT": "um", "NOSCHEDULE": "Ein Fehler ist aufgetreten beim setzen des Intervalls" - }, "GC": { "CURRENT_SCHEDULE": "Speicherbereinigungs-Intervall", @@ -1444,8 +1442,8 @@ "DAYS_LARGE": "Parameter \"TAGE\" ist zu hoch", "EXECUTION_TYPE": "Ausführungstyp", "ACTION": "AKTION", - "YES": "Ja", - "NO": "Nein" + "YES": "Ja", + "NO": "Nein" }, "IMMUTABLE_TAG": { "IMMUTABLE_RULES": "Immutability Regeln", @@ -1636,6 +1634,7 @@ "SCOPE": "Umfang", "SCOPE_SINGLE_PEER": "Einzelner Peer", "SCOPE_ALL_PEERS": "Alle Peers", + "EXTRA_ATTRIBUTES": "Extra Attributes", "NO_POLICY": "Keine Regelwerke", "ENABLED_POLICY_SUMMARY": "Soll das Regelwerk {{name}} aktiviert werden?", "DISABLED_POLICY_SUMMARY": "Soll das Regelwerk {{name}} deaktiviert werden?", diff --git a/src/portal/src/i18n/lang/en-us-lang.json b/src/portal/src/i18n/lang/en-us-lang.json index 2b9fadbdf..a59f9c896 100644 --- a/src/portal/src/i18n/lang/en-us-lang.json +++ b/src/portal/src/i18n/lang/en-us-lang.json @@ -246,7 +246,7 @@ "TOGGLED_SUCCESS": "Toggled project successfully.", "FAILED_TO_DELETE_PROJECT": "Project contains repositories or replication rules or helm-charts cannot be deleted.", "INLINE_HELP_PUBLIC": "When a project is set to public, anyone has read permission to the repositories under this project, and the user does not need to run \"docker login\" before pulling images under this project.", - "PROXY_CACHE_BANDWIDTH":"Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", + "PROXY_CACHE_BANDWIDTH": "Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", "BANDWIDTH": "Bandwidth", "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", "OF": "of", @@ -486,7 +486,6 @@ "CLOUD_EVENT": "CloudEvents", "PAYLOAD_DATA": "Payload Data", "SLACK_RATE_LIMIT": "Please be aware of Slack Rate Limits" - }, "GROUP": { "GROUP": "Group", @@ -936,10 +935,9 @@ "LDAP_GROUP_MEMBERSHIP": "LDAP Group Membership", "LDAP_GROUP_MEMBERSHIP_INFO": "The attribute indicates the membership of LDAP group, default value is memberof, in some LDAP server it could be \"ismemberof\". This field cannot be empty if you need to enable the LDAP group related feature.", "GROUP_SCOPE": "LDAP Group Search Scope", - "GROUP_SCOPE_INFO": "The scope to search for groups, select Subtree by default.", - "GROUP_ATTACH_PARALLEL": "LDAP Group Attached In Parallel", - "GROUP_ATTACH_PARALLEL_INFO": "Enable this option to attach group in parallel to avoid timeout when there are too many groups. If disabled, the LDAP group information will be attached sequentially." - + "GROUP_SCOPE_INFO": "The scope to search for groups, select Subtree by default.", + "GROUP_ATTACH_PARALLEL": "LDAP Group Attached In Parallel", + "GROUP_ATTACH_PARALLEL_INFO": "Enable this option to attach group in parallel to avoid timeout when there are too many groups. If disabled, the LDAP group information will be attached sequentially." }, "UAA": { "ENDPOINT": "UAA Endpoint", @@ -1313,7 +1311,6 @@ "ON": "on", "AT": "at", "NOSCHEDULE": "An error occurred in Get schedule" - }, "GC": { "CURRENT_SCHEDULE": "Schedule to GC", @@ -1639,6 +1636,7 @@ "SCOPE": "Scope", "SCOPE_SINGLE_PEER": "Single Peer", "SCOPE_ALL_PEERS": "All Peers", + "EXTRA_ATTRIBUTES": "Extra Attributes", "NO_POLICY": "No policy", "ENABLED_POLICY_SUMMARY": "Do you want to enable policy {{name}}?", "DISABLED_POLICY_SUMMARY": "Do you want to deactivate policy {{name}}?", diff --git a/src/portal/src/i18n/lang/es-es-lang.json b/src/portal/src/i18n/lang/es-es-lang.json index a986f9a7c..1fb96b093 100644 --- a/src/portal/src/i18n/lang/es-es-lang.json +++ b/src/portal/src/i18n/lang/es-es-lang.json @@ -247,7 +247,7 @@ "TOGGLED_SUCCESS": "Proyecto alternado satisfactoriamente.", "FAILED_TO_DELETE_PROJECT": "Project contains repositories or replication rules or helm-charts cannot be deleted.", "INLINE_HELP_PUBLIC": "Cuando un proyecto se marca como público, todo el mundo tiene permisos de lectura sobre los repositorio de dicho proyecto, y no hace falta hacer \"docker login\" antes de subir imágenes a ellos.", - "PROXY_CACHE_BANDWIDTH":"Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", + "PROXY_CACHE_BANDWIDTH": "Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", "BANDWIDTH": "Bandwidth", "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", "OF": "of", @@ -913,7 +913,6 @@ "WEEKLY_CRON": "Run once a week, midnight between Sat/Sun. Equivalente a 0 0 0 * * 0.", "DAILY_CRON": "Run once a day, midnight. Equivalente a 0 0 0 * * *.", "SKIP_SCANNER_PULL_TIME_TOOLTIP": "Vulnerability scanner(e.g. Trivy) will not update the image \"last pull time\" when the image is scanned." - }, "LDAP": { "URL": "LDAP URL", @@ -1196,7 +1195,6 @@ "ADD_TAG": "ADD TAG", "REMOVE_TAG": "REMOVE TAG", "NAME_ALREADY_EXISTS": "Tag already exists under the repository" - }, "LABEL": { "LABEL": "Label", @@ -1307,7 +1305,6 @@ "ON": "on", "AT": "at", "NOSCHEDULE": "An error occurred in Get schedule" - }, "GC": { "CURRENT_SCHEDULE": "Schedule to GC", @@ -1633,6 +1630,7 @@ "SCOPE": "Scope", "SCOPE_SINGLE_PEER": "Single Peer", "SCOPE_ALL_PEERS": "All Peers", + "EXTRA_ATTRIBUTES": "Extra Attributes", "NO_POLICY": "No policy", "ENABLED_POLICY_SUMMARY": "Do you want to enable policy {{name}}?", "DISABLED_POLICY_SUMMARY": "Do you want to disable policy {{name}}?", diff --git a/src/portal/src/i18n/lang/fr-fr-lang.json b/src/portal/src/i18n/lang/fr-fr-lang.json index cf5584964..443fb349c 100644 --- a/src/portal/src/i18n/lang/fr-fr-lang.json +++ b/src/portal/src/i18n/lang/fr-fr-lang.json @@ -246,7 +246,7 @@ "TOGGLED_SUCCESS": "Projet basculé avec succès.", "FAILED_TO_DELETE_PROJECT": "Le projet contient des dépôts, des règles de réplication ou des charts Helm et ne peut pas être supprimé.", "INLINE_HELP_PUBLIC": "Lorsqu'un projet est mis en public, n'importe qui a l'autorisation de lire les dépôts sous ce projet, et l'utilisateur n'a pas besoin d'exécuter \"docker login\" avant de prendre des images de ce projet.", - "PROXY_CACHE_BANDWIDTH":"Définissez la bande passante maximale du réseau pour les pulls d'image en amont pour le proxy-cache. Pour une bande passante illimitée, entrez -1. ", + "PROXY_CACHE_BANDWIDTH": "Définissez la bande passante maximale du réseau pour les pulls d'image en amont pour le proxy-cache. Pour une bande passante illimitée, entrez -1. ", "BANDWIDTH": "Bande passante", "SPEED_LIMIT_TIP": "Entrez -1 ou un nombre entier supérieur à 0. ", "OF": "sur", @@ -340,7 +340,7 @@ "SWITCHED_SUCCESS": "Rôle du membre changé avec succès.", "OF": "sur", "SWITCH_TITLE": "Confirmez le changement de membres projet", - "SWITCH_SUMMARY": "Voulez-vous changer les membres projet {{param}}?", + "SWITCH_SUMMARY": "Voulez-vous changer les membres projet {{param}}?", "SET_ROLE": "Définir Role", "REMOVE": "Retirer", "GROUP_NAME_REQUIRED": "Le nom du groupe est requis", @@ -562,7 +562,7 @@ "OVERRIDE": "Surcharger", "ENABLED_RULE": "Activer la règle", "OVERRIDE_INFO": "Surcharger", - "OPERATION": "Opération", + "OPERATION": "Opération", "CURRENT": "courant", "FILTER_PLACEHOLDER": "Filtrer les tâches", "STOP_TITLE": "Confirmer l'arrêt des exécutions", @@ -587,7 +587,7 @@ "DELETION_TITLE": "Confirmer la suppression de la règle", "DELETION_SUMMARY": "Voulez-vous supprimer la règle {{param}} ?", "REPLICATION_TITLE": "Confirmer la règle de réplication", - "REPLICATION_SUMMARY": "Voulez-vous répliquer la règle {{param}}?", + "REPLICATION_SUMMARY": "Voulez-vous répliquer la règle {{param}}?", "DELETION_TITLE_FAILURE": "la règle {{param}} n'a pas été supprimée", "DELETION_SUMMARY_FAILURE": "{{param}} ont le statut en attente/en fonctionnement/en train de réessayer", "REPLICATE_SUMMARY_FAILURE": "ont le statut pending/running", @@ -602,7 +602,7 @@ "TESTING_CONNECTION": "En train de tester la connexion...", "TEST_CONNECTION_SUCCESS": "Connexion testée avec succès.", "TEST_CONNECTION_FAILURE": "Échec du ping de l'endpoint.", - "ID": "ID", + "ID": "ID", "NAME": "Nom", "NAME_IS_REQUIRED": "Le nom est obligatoire.", "DESCRIPTION": "Description", @@ -624,7 +624,7 @@ "ACTIVATION": "Activation", "REPLICATION_EXECUTION": "Travaux de réplication", "REPLICATION_EXECUTIONS": "Travaux de réplication", - "STOPJOB": "Stop", + "STOPJOB": "Stop", "ALL": "Tous", "PENDING": "En attente", "RUNNING": "En fonctionnement", @@ -639,7 +639,7 @@ "OPERATION": "Opération", "CREATION_TIME": "Heure de départ", "UPDATE_TIME": "Heure de mise à jour", - "END_TIME": "Fin", + "END_TIME": "Fin", "LOGS": "Logs", "OF": "sur", "ITEMS": "entrées", @@ -735,7 +735,7 @@ "TEST_CONNECTION": "Test de connexion", "TITLE_EDIT": "Éditer l'endpoint", "TITLE_ADD": "Nouveau endpoint de registre", - "EDIT": "Éditer", + "EDIT": "Éditer", "DELETE": "Supprimer l'endpoint", "TESTING_CONNECTION": "En train de tester la connexion...", "TEST_CONNECTION_SUCCESS": "Connexion testée avec succès.", @@ -805,7 +805,7 @@ "COPY": "Copier", "NOTARY_IS_UNDETERMINED": "Ne peut pas déterminer la signature de ce tag.", "PLACEHOLDER": "Nous n'avons trouvé aucun dépôt !", - "INFO": "Info", + "INFO": "Info", "NO_INFO": "Pas de description pour ce dépôt. Vous pouvez l'ajouter à ce dépôt.", "IMAGE": "Images", "LABELS": "Labels", @@ -1636,6 +1636,7 @@ "SCOPE": "Champ d'application", "SCOPE_SINGLE_PEER": "Pair unique", "SCOPE_ALL_PEERS": "Tous les pairs", + "EXTRA_ATTRIBUTES": "Attributs supplémentaires", "NO_POLICY": "Aucune stratégie", "ENABLED_POLICY_SUMMARY": "Voulez-vous activer la stratégie {{name}} ?", "DISABLED_POLICY_SUMMARY": "Voulez-vous désactiver la stratégie {{name}} ?", diff --git a/src/portal/src/i18n/lang/ko-kr-lang.json b/src/portal/src/i18n/lang/ko-kr-lang.json index 7b7dc5a75..10c94703b 100644 --- a/src/portal/src/i18n/lang/ko-kr-lang.json +++ b/src/portal/src/i18n/lang/ko-kr-lang.json @@ -246,7 +246,7 @@ "TOGGLED_SUCCESS": "프로젝트가 성공적으로 전환됐습니다.", "FAILED_TO_DELETE_PROJECT": "프로젝트에 리포지토리 또는 복제 규칙이 포함되어 있거나 헬름 차트를 삭제할 수 없습니다.", "INLINE_HELP_PUBLIC": "프로젝트가 공개로 설정되면 누구나 이 프로젝트의 저장소에 대한 읽기 권한을 갖게 되며 사용자는 이 프로젝트에서 이미지를 가져오기 전에 \"docker login\"을 실행할 필요가 없습니다.", - "PROXY_CACHE_BANDWIDTH":"Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", + "PROXY_CACHE_BANDWIDTH": "Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", "BANDWIDTH": "Bandwidth", "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", "OF": "of", @@ -483,7 +483,6 @@ "CLOUD_EVENT": "클라우드이벤트", "PAYLOAD_DATA": "페이로드 데이터", "SLACK_RATE_LIMIT": "Slack 속도 제한에 유의하세요." - }, "GROUP": { "GROUP": "그룹", @@ -934,7 +933,6 @@ "LDAP_GROUP_MEMBERSHIP_INFO": "속성은 LDAP 그룹의 멤버십을 나타내며 기본값은 memberof이며 일부 LDAP 서버에서는 \"ismemberof\"일 수 있습니다. LDAP 그룹 관련 기능을 활성화해야 하는 경우 이 필드를 비워둘 수 없습니다.", "GROUP_SCOPE": "LDAP 그룹 검색 범위", "GROUP_SCOPE_INFO": "그룹을 검색할 범위는 기본적으로 Subtree를 선택합니다." - }, "UAA": { "ENDPOINT": "UAA 엔드포인트", @@ -1308,7 +1306,6 @@ "ON": "on", "AT": "at", "NOSCHEDULE": "예약내역을 가져오던 중 에러가 발생했습니다" - }, "GC": { "CURRENT_SCHEDULE": "가비지 컬렉션 예약", @@ -1630,6 +1627,7 @@ "SCOPE": "범위", "SCOPE_SINGLE_PEER": "싱글 피어", "SCOPE_ALL_PEERS": "모든 피어", + "EXTRA_ATTRIBUTES": "추가 속성", "NO_POLICY": "정책 없음", "ENABLED_POLICY_SUMMARY": "정책{{name}}을 활성화하시겠습니까?", "DISABLED_POLICY_SUMMARY": "정책{{name}}을 비활성화하시겠습니까?", diff --git a/src/portal/src/i18n/lang/pt-br-lang.json b/src/portal/src/i18n/lang/pt-br-lang.json index d92517705..9acd59a47 100644 --- a/src/portal/src/i18n/lang/pt-br-lang.json +++ b/src/portal/src/i18n/lang/pt-br-lang.json @@ -245,7 +245,7 @@ "TOGGLED_SUCCESS": "Projeto alterado com sucesso.", "FAILED_TO_DELETE_PROJECT": "Projeto não pode ser removido porque ainda possui recursos em repositórios, regras de replicação ou helm charts.", "INLINE_HELP_PUBLIC": "Quando o projeto é público, o acesso de leitura aos repositórios é liberado, incluindo usuários anônimos não autenticados. O usuário não precisa executar \"docker login\" para baixar imagens desse projeto.", - "PROXY_CACHE_BANDWIDTH":"Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", + "PROXY_CACHE_BANDWIDTH": "Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", "BANDWIDTH": "Bandwidth", "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", "OF": "de", @@ -933,7 +933,6 @@ "LDAP_GROUP_MEMBERSHIP_INFO": "Atributo que informa a lista de grupos do usuário. Se não informado, o nome \"memberof\" será usado. Alguns servidores LDAP utilizam o atributo \"ismemberof\". This field cannot be empty if you need to enable the LDAP group related feature.", "GROUP_SCOPE": "LDAP Group Search Scope", "GROUP_SCOPE_INFO": "O escopo que deve ser utilizado na busca por grupos, utiliza Subtree por padrão." - }, "UAA": { "ENDPOINT": "Endereço UAA", @@ -1303,7 +1302,6 @@ "ON": "em", "AT": "às", "NOSCHEDULE": "Ocorreu um erro na rotina Get" - }, "GC": { "CURRENT_SCHEDULE": "Agenda", @@ -1633,6 +1631,7 @@ "SCOPE": "Escopo", "SCOPE_SINGLE_PEER": "Par único", "SCOPE_ALL_PEERS": "Todos os pares", + "EXTRA_ATTRIBUTES": "Atributos extras", "NO_POLICY": "Nenhuma política", "ENABLED_POLICY_SUMMARY": "Gostaria de habilitar a política {{name}}?", "DISABLED_POLICY_SUMMARY": "Gostaria de desabilitar a política {{name}}?", diff --git a/src/portal/src/i18n/lang/tr-tr-lang.json b/src/portal/src/i18n/lang/tr-tr-lang.json index fa671e35f..b1de86489 100644 --- a/src/portal/src/i18n/lang/tr-tr-lang.json +++ b/src/portal/src/i18n/lang/tr-tr-lang.json @@ -246,7 +246,7 @@ "TOGGLED_SUCCESS": "Proje başarıyla değiştirildi.", "FAILED_TO_DELETE_PROJECT": "Proje havuzları veya çoğaltma kurallarını içeriyor veya helm tabloları silinemiyor.", "INLINE_HELP_PUBLIC": "Bir proje herkese açık olarak ayarlandığında, herkes bu proje altındaki depoları okuma iznine sahiptir ve kullanıcının bu proje altındaki imajları çekmeden önce \"docker login\" çalıştırması gerekmez.", - "PROXY_CACHE_BANDWIDTH":"Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", + "PROXY_CACHE_BANDWIDTH": "Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", "BANDWIDTH": "Bandwidth", "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", "OF": "of", @@ -936,7 +936,6 @@ "LDAP_GROUP_MEMBERSHIP_INFO": "Öznitelik, LDAP grubunun üyeliğini gösterir, varsayılan değer memberof, bazı LDAP sunucularında \"ismemberof\" olabilir. This field cannot be empty if you need to enable the LDAP group related feature.", "GROUP_SCOPE": "LDAP Group Search Scope", "GROUP_SCOPE_INFO": "Grupları aramak için kapsamı, Varsayılan olarak Alt Ağaç'ı seçin." - }, "UAA": { "ENDPOINT": "UAA Uç Noktası", @@ -1310,7 +1309,6 @@ "ON": "on", "AT": "at", "NOSCHEDULE": "Takvimlendirme de bir hata oluştu" - }, "GC": { "CURRENT_SCHEDULE": "Schedule to GC", @@ -1636,6 +1634,7 @@ "SCOPE": "Scope", "SCOPE_SINGLE_PEER": "Single Peer", "SCOPE_ALL_PEERS": "All Peers", + "EXTRA_ATTRIBUTES": "Extra Attributes", "NO_POLICY": "No policy", "ENABLED_POLICY_SUMMARY": "Do you want to enable policy {{name}}?", "DISABLED_POLICY_SUMMARY": "Do you want to disable policy {{name}}?", diff --git a/src/portal/src/i18n/lang/zh-cn-lang.json b/src/portal/src/i18n/lang/zh-cn-lang.json index cd8494279..2ff3a0f9f 100644 --- a/src/portal/src/i18n/lang/zh-cn-lang.json +++ b/src/portal/src/i18n/lang/zh-cn-lang.json @@ -246,7 +246,7 @@ "TOGGLED_SUCCESS": "切换状态成功。", "FAILED_TO_DELETE_PROJECT": "项目包含镜像仓库或复制规则或Helm Charts,无法删除。", "INLINE_HELP_PUBLIC": "当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像。", - "PROXY_CACHE_BANDWIDTH":"Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", + "PROXY_CACHE_BANDWIDTH": "Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", "BANDWIDTH": "Bandwidth", "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", "COUNT_QUOTA": "存储数量", @@ -934,10 +934,9 @@ "LDAP_GROUP_MEMBERSHIP": "LDAP 组成员", "LDAP_GROUP_MEMBERSHIP_INFO": "LDAP组成员的membership属性,默认为 memberof, 在某些LDAP服务器会变为 ismemberof。如果要开启LDAP组功能,则此项必填", "GROUP_SCOPE": "LDAP组搜索范围", - "GROUP_SCOPE_INFO": "搜索组的范围,默认值为\"子树\"", - "GROUP_ATTACH_PARALLEL": "LDAP组并行同步", - "GROUP_ATTACH_PARALLEL_INFO": "打开这个选项时,LDAP组的信息是并行同步到Harbor, 这样可以防止用户组太多时造成的登录超时,如果关闭这个选项,LDAP组信息是顺序同步到Harbor" - + "GROUP_SCOPE_INFO": "搜索组的范围,默认值为\"子树\"", + "GROUP_ATTACH_PARALLEL": "LDAP组并行同步", + "GROUP_ATTACH_PARALLEL_INFO": "打开这个选项时,LDAP组的信息是并行同步到Harbor, 这样可以防止用户组太多时造成的登录超时,如果关闭这个选项,LDAP组信息是顺序同步到Harbor" }, "UAA": { "ENDPOINT": "UAA Endpoint", @@ -1309,7 +1308,6 @@ "ON": " ", "AT": " ", "NOSCHEDULE": "获取schedule时出现错误" - }, "GC": { "CURRENT_SCHEDULE": "当前定时任务", @@ -1635,6 +1633,7 @@ "SCOPE": "范围", "SCOPE_SINGLE_PEER": "单节点", "SCOPE_ALL_PEERS": "全节点", + "EXTRA_ATTRIBUTES": "额外属性", "NO_POLICY": "暂无记录", "ENABLED_POLICY_SUMMARY": "是否启用策略 {{name}}?", "DISABLED_POLICY_SUMMARY": "是否禁用策略 {{name}}?", diff --git a/src/portal/src/i18n/lang/zh-tw-lang.json b/src/portal/src/i18n/lang/zh-tw-lang.json index e669ea0b2..d6b6f207e 100644 --- a/src/portal/src/i18n/lang/zh-tw-lang.json +++ b/src/portal/src/i18n/lang/zh-tw-lang.json @@ -1,1996 +1,1997 @@ { - "APP_TITLE": { - "VMW_HARBOR": "Harbor", - "HARBOR": "Harbor", - "VIC": "vSphere Integrated Containers", - "MGMT": "管理", - "REG": "Registry", - "HARBOR_SWAGGER": "Harbor Swagger", - "THEME_DARK_TEXT": "深色主題", - "THEME_LIGHT_TEXT": "淺色主題" - }, - "SIGN_IN": { - "REMEMBER": "記住我", - "INVALID_MSG": "使用者名稱或密碼不正確。", - "FORGOT_PWD": "忘記密碼", - "HEADER_LINK": "登入", - "CORE_SERVICE_NOT_AVAILABLE": "核心服務無法使用。", - "OR": "或", - "VIA_LOCAL_DB": "透過本地資料庫登入" - }, - "SIGN_UP": { - "TITLE": "註冊" - }, - "BUTTON": { - "STOP": "停止", - "CANCEL": "取消", - "OK": "確定", - "DELETE": "刪除", - "LOG_IN": "登入", - "LOG_IN_OIDC": "透過 OIDC 提供者登入", - "LOG_IN_OIDC_WITH_PROVIDER_NAME": "LOGIN WITH {{providerName}}", - "SIGN_UP_LINK": "註冊帳號", - "SIGN_UP": "註冊", - "CONFIRM": "確認", - "SEND": "傳送", - "SAVE": "儲存", - "TEST_MAIL": "測試郵件伺服器", - "CLOSE": "關閉", - "TEST_LDAP": "測試 LDAP 伺服器", - "TEST_OIDC": "測試 OIDC 伺服器", - "MORE_INFO": "更多資訊...", - "YES": "是", - "NO": "否", - "NEGATIVE": "否定", - "COPY": "複製", - "EDIT": "編輯", - "SWITCH": "切換", - "REPLICATE": "複製", - "ACTIONS": "操作", - "BROWSE": "瀏覽檔案", - "UPLOAD": "上傳", - "NO_FILE": "未選擇檔案", - "ADD": "新增", - "RUN": "執行", - "CONTINUE": "繼續", - "ENABLE": "啟用", - "DISABLE": "停用" - }, - "BATCH": { - "DELETED_SUCCESS": "刪除成功", - "DELETED_FAILURE": "刪除失敗或部分失敗", - "SWITCH_SUCCESS": "切換成功", - "SWITCH_FAILURE": "切換失敗", - "REPLICATE_SUCCESS": "複製成功", - "REPLICATE_FAILURE": "複製失敗", - "STOP_SUCCESS": "停止成功", - "STOP_FAILURE": "停止執行失敗", - "TIME_OUT": "閘道逾時" - }, - "TOOLTIP": { - "NAME_FILTER": "篩選資源的名稱。不填或填寫「**」可選取所有資源;「library/**」僅選取「library」下的資源。更多的選取模式請參考使用者手冊。", - "TAG_FILTER": "篩選資源的 tag/version。不填或填寫「**」可選取所有;「1.0*」僅選取以「1.0」開頭的 tag/version。", - "LABEL_FILTER": "根據標籤篩選資源。", - "RESOURCE_FILTER": "篩選資源的類型。", - "PUSH_BASED": "將資源由本地 Harbor 推送到遠端儲存庫。", - "PULL_BASED": "將資源由遠端儲存庫拉取到本地 Harbor。", - "DESTINATION_NAMESPACE": "指定目的端命名空間。如果不填,資源會被放到和來源相同的命名空間下。", - "OVERRIDE": "如果存在具有相同名稱的資源,請指定是否覆蓋目標上的資源。", - "EMAIL": "請使用正確的電子郵件地址,例如 name@example.com。", - "USER_NAME": "不能包含特殊字元且長度不能超過 255 個字元。", - "FULL_NAME": "全名長度不能超過 20 個字元。", - "COMMENT": "評論長度不能超過 30 個字元。", - "CURRENT_PWD": "目前密碼必填。", - "PASSWORD": "密碼長度在 8 到 128 之間且需包含至少一個大寫字元、一個小寫字元和一個數字。", - "CONFIRM_PWD": "密碼輸入不一致。", - "SIGN_IN_USERNAME": "使用者名稱必填。", - "SIGN_IN_PWD": "密碼必填。", - "SIGN_UP_MAIL": "電子郵件地址僅用來重設您的密碼。", - "SIGN_UP_REAL_NAME": "全名", - "ITEM_REQUIRED": "此選項必填。", - "SCOPE_REQUIRED": "此選項為必填且必須為 scope 格式。", - "NUMBER_REQUIRED": "此選項為必填且必須為數字。", - "PORT_REQUIRED": "此選項為必填且必須為有效連接埠。", - "CRON_REQUIRED": "此選項為必填且必須為 cron 格式。", - "EMAIL_EXISTING": "電子郵件地址已存在。", - "USER_EXISTING": "使用者名稱已存在。", - "RULE_USER_EXISTING": "名稱已存在。", - "EMPTY": "名稱必填", - "NONEMPTY": "不能為空", - "ENDPOINT_FORMAT": "Endpoint 必須以 http:// 或 https:// 開頭。", - "OIDC_ENDPOINT_FORMAT": "Endpoint 必須以 https:// 開頭。", - "OIDC_NAME": "OIDC 提供者的名稱。", - "OIDC_ENDPOINT": "OIDC 伺服器的網址。", - "OIDC_SCOPE": "在身份驗證期間發送到 OIDC 伺服器的 scope。它必須包含「openid」和「offline_access」。如果您使用 Google,請從此欄位中移除「offline_access」。", - "OIDC_VERIFYCERT": "如果您的 OIDC 伺服器是透過自簽憑證託管的,請取消勾選此框。", - "OIDC_AUTOONBOARD": "跳過註冊引導畫面,使用者無法更改其使用者名稱。使用者名稱將由 ID Token 提供。", - "OIDC_USER_CLAIM": "使用者名稱將從 ID Token 中的特定宣告中取得。若未指定特定宣告,則預設會使用 'name' 宣告。", - "NEW_SECRET": "密碼必須超過 8 個字元,並至少包含 1 個大寫字母、1 個小寫字母和 1 個數字。" - }, - "PLACEHOLDER": { - "CURRENT_PWD": "輸入目前密碼", - "NEW_PWD": "輸入新密碼", - "CONFIRM_PWD": "確認新密碼", - "USER_NAME": "輸入使用者名稱", - "MAIL": "輸入電子郵件地址", - "FULL_NAME": "輸入全名", - "SIGN_IN_NAME": "使用者名稱", - "SIGN_IN_PWD": "密碼" - }, - "PROFILE": { - "TITLE": "使用者資料", - "USER_NAME": "帳號名稱", - "EMAIL": "電子郵件", - "FULL_NAME": "姓名", - "COMMENT": "註解", - "PASSWORD": "密碼", - "SAVE_SUCCESS": "使用者資料儲存成功。", - "ADMIN_RENAME_BUTTON": "更改帳號名稱", - "ADMIN_RENAME_TIP": "選擇按鈕以將帳號名稱更改為 \"admin@harbor.local\"。此操作無法復原。", - "RENAME_SUCCESS": "帳號名稱更改成功!", - "RENAME_CONFIRM_INFO": "警告,將名稱更改為 admin@harbor.local 是無法復原的。", - "CLI_PASSWORD": "CLI 密碼", - "CLI_PASSWORD_TIP": "CLI 密碼可以用作 Docker 或 Helm 用戶端的密碼。當啟用 OIDC 認證模式時,我們強烈建議使用機器人帳號,因為 CLI 密碼取決於 ID 權杖的有效性,並要求用戶定期登入 UI 以更新權杖。", - "COPY_SUCCESS": "複製成功", - "COPY_ERROR": "複製失敗", - "ADMIN_CLI_SECRET_BUTTON": "產生密碼", - "ADMIN_CLI_SECRET_RESET_BUTTON": "上傳您自己的密碼", - "NEW_SECRET": "密碼", - "CONFIRM_SECRET": "重複輸入密碼", - "GENERATE_SUCCESS": "CLI 密碼設定成功", - "GENERATE_ERROR": "CLI 密碼設定失敗", - "CONFIRM_TITLE_CLI_GENERATE": "您確定要重新產生密碼嗎?", - "CONFIRM_BODY_CLI_GENERATE": "如果您重新產生 CLI 密碼,舊的 CLI 密碼將被捨棄。" - }, - "CHANGE_PWD": { - "TITLE": "修改密碼", - "CURRENT_PWD": "目前密碼", - "NEW_PWD": "新密碼", - "CONFIRM_PWD": "確認新密碼", - "SAVE_SUCCESS": "成功更改使用者密碼。", - "PASS_TIPS": "密碼長度需介於 8 到 128 個字元之間,且至少包含一個大寫字母、小寫字母或數字。" - }, - "ACCOUNT_SETTINGS": { - "PROFILE": "使用者設定", - "CHANGE_PWD": "修改密碼", - "ABOUT": "關於", - "LOGOUT": "登出" - }, - "GLOBAL_SEARCH": { - "PLACEHOLDER": "搜尋 {{param}} ...", - "PLACEHOLDER_VIC": "搜尋 Registry..." - }, - "TOP_NAV": { - "DATETIME_RENDERING_DEFAULT": "預設" - }, - "SIDE_NAV": { - "DASHBOARD": "儀表板", - "PROJECTS": "專案", - "SYSTEM_MGMT": { - "NAME": "系統管理", - "USER": "使用者管理", - "GROUP": "群組管理", - "REGISTRY": "Registry 管理", - "REPLICATION": "資料複製管理", - "CONFIG": "設定管理", - "VULNERABILITY": "弱點管理", - "GARBAGE_COLLECTION": "垃圾回收", - "INTERROGATION_SERVICES": "審查服務" + "APP_TITLE": { + "VMW_HARBOR": "Harbor", + "HARBOR": "Harbor", + "VIC": "vSphere Integrated Containers", + "MGMT": "管理", + "REG": "Registry", + "HARBOR_SWAGGER": "Harbor Swagger", + "THEME_DARK_TEXT": "深色主題", + "THEME_LIGHT_TEXT": "淺色主題" }, - "LOGS": "日誌", - "TASKS": "任務", - "API_EXPLORER": "API Explorer", - "HARBOR_API_MANAGEMENT": "Harbor API V2.0", - "HELM_API_MANAGEMENT": "Harbor API", - "DISTRIBUTIONS": { - "NAME": "Distributions", - "INSTANCES": "實例" - } - }, - "USER": { - "ADD_ACTION": "建立使用者", - "ENABLE_ADMIN_ACTION": "設定為管理員", - "DISABLE_ADMIN_ACTION": "撤銷管理員", - "DEL_ACTION": "刪除", - "FILTER_PLACEHOLDER": "篩選使用者", - "COLUMN_NAME": "名稱", - "COLUMN_ADMIN": "管理員", - "COLUMN_EMAIL": "電子郵件", - "COLUMN_REG_NAME": "註冊時間", - "IS_ADMIN": "是", - "IS_NOT_ADMIN": "否", - "ADD_USER_TITLE": "建立使用者", - "SAVE_SUCCESS": "建立使用者成功。", - "DELETION_TITLE": "確認刪除使用者", - "DELETION_SUMMARY": "您確定要刪除使用者 {{param}} 嗎?", - "DELETE_SUCCESS": "成功刪除使用者。", - "OF": "共", - "ITEMS": "筆紀錄", - "RESET_OK": "成功重設使用者密碼", - "EXISTING_PASSWORD": "新密碼不可與舊密碼相同", + "SIGN_IN": { + "REMEMBER": "記住我", + "INVALID_MSG": "使用者名稱或密碼不正確。", + "FORGOT_PWD": "忘記密碼", + "HEADER_LINK": "登入", + "CORE_SERVICE_NOT_AVAILABLE": "核心服務無法使用。", + "OR": "或", + "VIA_LOCAL_DB": "透過本地資料庫登入" + }, + "SIGN_UP": { + "TITLE": "註冊" + }, + "BUTTON": { + "STOP": "停止", + "CANCEL": "取消", + "OK": "確定", + "DELETE": "刪除", + "LOG_IN": "登入", + "LOG_IN_OIDC": "透過 OIDC 提供者登入", + "LOG_IN_OIDC_WITH_PROVIDER_NAME": "LOGIN WITH {{providerName}}", + "SIGN_UP_LINK": "註冊帳號", + "SIGN_UP": "註冊", + "CONFIRM": "確認", + "SEND": "傳送", + "SAVE": "儲存", + "TEST_MAIL": "測試郵件伺服器", + "CLOSE": "關閉", + "TEST_LDAP": "測試 LDAP 伺服器", + "TEST_OIDC": "測試 OIDC 伺服器", + "MORE_INFO": "更多資訊...", + "YES": "是", + "NO": "否", + "NEGATIVE": "否定", + "COPY": "複製", + "EDIT": "編輯", + "SWITCH": "切換", + "REPLICATE": "複製", + "ACTIONS": "操作", + "BROWSE": "瀏覽檔案", + "UPLOAD": "上傳", + "NO_FILE": "未選擇檔案", + "ADD": "新增", + "RUN": "執行", + "CONTINUE": "繼續", + "ENABLE": "啟用", + "DISABLE": "停用" + }, + "BATCH": { + "DELETED_SUCCESS": "刪除成功", + "DELETED_FAILURE": "刪除失敗或部分失敗", + "SWITCH_SUCCESS": "切換成功", + "SWITCH_FAILURE": "切換失敗", + "REPLICATE_SUCCESS": "複製成功", + "REPLICATE_FAILURE": "複製失敗", + "STOP_SUCCESS": "停止成功", + "STOP_FAILURE": "停止執行失敗", + "TIME_OUT": "閘道逾時" + }, + "TOOLTIP": { + "NAME_FILTER": "篩選資源的名稱。不填或填寫「**」可選取所有資源;「library/**」僅選取「library」下的資源。更多的選取模式請參考使用者手冊。", + "TAG_FILTER": "篩選資源的 tag/version。不填或填寫「**」可選取所有;「1.0*」僅選取以「1.0」開頭的 tag/version。", + "LABEL_FILTER": "根據標籤篩選資源。", + "RESOURCE_FILTER": "篩選資源的類型。", + "PUSH_BASED": "將資源由本地 Harbor 推送到遠端儲存庫。", + "PULL_BASED": "將資源由遠端儲存庫拉取到本地 Harbor。", + "DESTINATION_NAMESPACE": "指定目的端命名空間。如果不填,資源會被放到和來源相同的命名空間下。", + "OVERRIDE": "如果存在具有相同名稱的資源,請指定是否覆蓋目標上的資源。", + "EMAIL": "請使用正確的電子郵件地址,例如 name@example.com。", + "USER_NAME": "不能包含特殊字元且長度不能超過 255 個字元。", + "FULL_NAME": "全名長度不能超過 20 個字元。", + "COMMENT": "評論長度不能超過 30 個字元。", + "CURRENT_PWD": "目前密碼必填。", + "PASSWORD": "密碼長度在 8 到 128 之間且需包含至少一個大寫字元、一個小寫字元和一個數字。", + "CONFIRM_PWD": "密碼輸入不一致。", + "SIGN_IN_USERNAME": "使用者名稱必填。", + "SIGN_IN_PWD": "密碼必填。", + "SIGN_UP_MAIL": "電子郵件地址僅用來重設您的密碼。", + "SIGN_UP_REAL_NAME": "全名", + "ITEM_REQUIRED": "此選項必填。", + "SCOPE_REQUIRED": "此選項為必填且必須為 scope 格式。", + "NUMBER_REQUIRED": "此選項為必填且必須為數字。", + "PORT_REQUIRED": "此選項為必填且必須為有效連接埠。", + "CRON_REQUIRED": "此選項為必填且必須為 cron 格式。", + "EMAIL_EXISTING": "電子郵件地址已存在。", + "USER_EXISTING": "使用者名稱已存在。", + "RULE_USER_EXISTING": "名稱已存在。", + "EMPTY": "名稱必填", + "NONEMPTY": "不能為空", + "ENDPOINT_FORMAT": "Endpoint 必須以 http:// 或 https:// 開頭。", + "OIDC_ENDPOINT_FORMAT": "Endpoint 必須以 https:// 開頭。", + "OIDC_NAME": "OIDC 提供者的名稱。", + "OIDC_ENDPOINT": "OIDC 伺服器的網址。", + "OIDC_SCOPE": "在身份驗證期間發送到 OIDC 伺服器的 scope。它必須包含「openid」和「offline_access」。如果您使用 Google,請從此欄位中移除「offline_access」。", + "OIDC_VERIFYCERT": "如果您的 OIDC 伺服器是透過自簽憑證託管的,請取消勾選此框。", + "OIDC_AUTOONBOARD": "跳過註冊引導畫面,使用者無法更改其使用者名稱。使用者名稱將由 ID Token 提供。", + "OIDC_USER_CLAIM": "使用者名稱將從 ID Token 中的特定宣告中取得。若未指定特定宣告,則預設會使用 'name' 宣告。", + "NEW_SECRET": "密碼必須超過 8 個字元,並至少包含 1 個大寫字母、1 個小寫字母和 1 個數字。" + }, + "PLACEHOLDER": { + "CURRENT_PWD": "輸入目前密碼", + "NEW_PWD": "輸入新密碼", + "CONFIRM_PWD": "確認新密碼", + "USER_NAME": "輸入使用者名稱", + "MAIL": "輸入電子郵件地址", + "FULL_NAME": "輸入全名", + "SIGN_IN_NAME": "使用者名稱", + "SIGN_IN_PWD": "密碼" + }, + "PROFILE": { + "TITLE": "使用者資料", + "USER_NAME": "帳號名稱", + "EMAIL": "電子郵件", + "FULL_NAME": "姓名", + "COMMENT": "註解", + "PASSWORD": "密碼", + "SAVE_SUCCESS": "使用者資料儲存成功。", + "ADMIN_RENAME_BUTTON": "更改帳號名稱", + "ADMIN_RENAME_TIP": "選擇按鈕以將帳號名稱更改為 \"admin@harbor.local\"。此操作無法復原。", + "RENAME_SUCCESS": "帳號名稱更改成功!", + "RENAME_CONFIRM_INFO": "警告,將名稱更改為 admin@harbor.local 是無法復原的。", + "CLI_PASSWORD": "CLI 密碼", + "CLI_PASSWORD_TIP": "CLI 密碼可以用作 Docker 或 Helm 用戶端的密碼。當啟用 OIDC 認證模式時,我們強烈建議使用機器人帳號,因為 CLI 密碼取決於 ID 權杖的有效性,並要求用戶定期登入 UI 以更新權杖。", + "COPY_SUCCESS": "複製成功", + "COPY_ERROR": "複製失敗", + "ADMIN_CLI_SECRET_BUTTON": "產生密碼", + "ADMIN_CLI_SECRET_RESET_BUTTON": "上傳您自己的密碼", + "NEW_SECRET": "密碼", + "CONFIRM_SECRET": "重複輸入密碼", + "GENERATE_SUCCESS": "CLI 密碼設定成功", + "GENERATE_ERROR": "CLI 密碼設定失敗", + "CONFIRM_TITLE_CLI_GENERATE": "您確定要重新產生密碼嗎?", + "CONFIRM_BODY_CLI_GENERATE": "如果您重新產生 CLI 密碼,舊的 CLI 密碼將被捨棄。" + }, + "CHANGE_PWD": { + "TITLE": "修改密碼", + "CURRENT_PWD": "目前密碼", + "NEW_PWD": "新密碼", + "CONFIRM_PWD": "確認新密碼", + "SAVE_SUCCESS": "成功更改使用者密碼。", + "PASS_TIPS": "密碼長度需介於 8 到 128 個字元之間,且至少包含一個大寫字母、小寫字母或數字。" + }, + "ACCOUNT_SETTINGS": { + "PROFILE": "使用者設定", + "CHANGE_PWD": "修改密碼", + "ABOUT": "關於", + "LOGOUT": "登出" + }, + "GLOBAL_SEARCH": { + "PLACEHOLDER": "搜尋 {{param}} ...", + "PLACEHOLDER_VIC": "搜尋 Registry..." + }, + "TOP_NAV": { + "DATETIME_RENDERING_DEFAULT": "預設" + }, + "SIDE_NAV": { + "DASHBOARD": "儀表板", + "PROJECTS": "專案", + "SYSTEM_MGMT": { + "NAME": "系統管理", + "USER": "使用者管理", + "GROUP": "群組管理", + "REGISTRY": "Registry 管理", + "REPLICATION": "資料複製管理", + "CONFIG": "設定管理", + "VULNERABILITY": "弱點管理", + "GARBAGE_COLLECTION": "垃圾回收", + "INTERROGATION_SERVICES": "審查服務" + }, + "LOGS": "日誌", + "TASKS": "任務", + "API_EXPLORER": "API Explorer", + "HARBOR_API_MANAGEMENT": "Harbor API V2.0", + "HELM_API_MANAGEMENT": "Harbor API", + "DISTRIBUTIONS": { + "NAME": "Distributions", + "INSTANCES": "實例" + } + }, + "USER": { + "ADD_ACTION": "建立使用者", + "ENABLE_ADMIN_ACTION": "設定為管理員", + "DISABLE_ADMIN_ACTION": "撤銷管理員", + "DEL_ACTION": "刪除", + "FILTER_PLACEHOLDER": "篩選使用者", + "COLUMN_NAME": "名稱", + "COLUMN_ADMIN": "管理員", + "COLUMN_EMAIL": "電子郵件", + "COLUMN_REG_NAME": "註冊時間", + "IS_ADMIN": "是", + "IS_NOT_ADMIN": "否", + "ADD_USER_TITLE": "建立使用者", + "SAVE_SUCCESS": "建立使用者成功。", + "DELETION_TITLE": "確認刪除使用者", + "DELETION_SUMMARY": "您確定要刪除使用者 {{param}} 嗎?", + "DELETE_SUCCESS": "成功刪除使用者。", + "OF": "共", + "ITEMS": "筆紀錄", + "RESET_OK": "成功重設使用者密碼", + "EXISTING_PASSWORD": "新密碼不可與舊密碼相同", + "UNKNOWN": "未知", + "UNKNOWN_TIP": "若值為「未知」,請透過身分驗證提供者系統確認該使用者是否為管理員身分。" + }, + "PROJECT": { + "PROJECTS": "專案", + "NAME": "專案名稱", + "ROLE": "角色", + "PUBLIC_OR_PRIVATE": "公開或私有", + "REPO_COUNT": "儲存庫數量", + "CHART_COUNT": "Helm Chart 數量", + "CREATION_TIME": "建立時間", + "ACCESS_LEVEL": "存取權限", + "PUBLIC": "公開", + "PRIVATE": "私有", + "MAKE": "建立", + "NEW_POLICY": "新增複製規則", + "DELETE": "刪除", + "ALL_PROJECTS": "所有專案", + "PRIVATE_PROJECTS": "私有專案", + "PUBLIC_PROJECTS": "公開專案", + "PROJECT": "專案", + "NEW_PROJECT": "新增專案", + "NAME_TOOLTIP": "專案名稱應由 1~255 個小寫字元、數字和 ._- 組成,並且必須以字母或數字開頭。", + "NAME_IS_REQUIRED": "專案名稱為必填。", + "NAME_ALREADY_EXISTS": "專案名稱已存在。", + "NAME_IS_ILLEGAL": "專案名稱無效。", + "UNKNOWN_ERROR": "建立專案時發生未知錯誤。", + "ITEMS": "筆紀錄", + "DELETION_TITLE": "確認移除專案", + "DELETION_SUMMARY": "您確定要刪除專案 {{param}} 嗎?", + "FILTER_PLACEHOLDER": "篩選專案", + "REPLICATION_RULE": "複製規則", + "CREATED_SUCCESS": "專案建立成功。", + "DELETED_SUCCESS": "專案刪除成功。", + "TOGGLED_SUCCESS": "專案切換成功。", + "FAILED_TO_DELETE_PROJECT": "由於專案包含儲存庫、複製規則或 helm-charts,無法刪除。", + "INLINE_HELP_PUBLIC": "當專案設為公開時,任何人都可讀取此專案下的儲存庫,使用者不需執行 \"docker login\" 即可拉取此專案下的映像檔。", + "PROXY_CACHE_BANDWIDTH": "Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", + "BANDWIDTH": "Bandwidth", + "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", + "OF": "共計", + "COUNT_QUOTA": "數量配額", + "STORAGE_QUOTA": "儲存配額限制", + "COUNT_QUOTA_TIP": "請輸入介於 '1' 和 '100,000,000' 之間的整數,'-1' 表示無限制。", + "STORAGE_QUOTA_TIP": "儲存配額上限只接受整數,上限為 '1024TB'。輸入 '-1' 表示無限配額。", + "QUOTA_UNLIMIT_TIP": "專案所能使用的最大邏輯空間。輸入 '-1' 表示無限制配額。", + "TYPE": "類型", + "PROXY_CACHE": "代理快取", + "PROXY_CACHE_TOOLTIP": "啟用此選項可讓此專案作為特定目標 Registry 實例的拉取快取。Harbor 僅可作為 DockerHub、Docker Registry、Harbor、AWS ECR、Azure ACR、Alibaba Cloud ACR、Quay、Google GCR、GitHub GHCR 和 JFrog Artifactory Registry 的代理。", + "ENDPOINT": "端點", + "PROXY_CACHE_ENDPOINT": "代理快取端點", + "NO_PROJECT": "找不到任何專案" + }, + "PROJECT_DETAIL": { + "SUMMARY": "摘要", + "REPOSITORIES": "儲存庫", + "REPLICATION": "複製", + "USERS": "成員", + "LOGS": "日誌", + "LABELS": "標籤", + "PROJECTS": "專案", + "CONFIG": "設定", + "HELMCHART": "Helm Chart", + "ROBOT_ACCOUNTS": "機器人帳號", + "WEBHOOKS": "Webhooks", + "IMMUTABLE_TAG": "不可變標籤", + "POLICY": "原則" + }, + "PROJECT_CONFIG": { + "REGISTRY": "專案儲存庫", + "PUBLIC_TOGGLE": "公開", + "PUBLIC_POLICY": "將專案儲存庫設為公開會讓所有人都能夠存取所有儲存庫。", + "SECURITY": "部署安全", + "CONTENT_TRUST_TOGGLE": "啟用內容信任", + "CONTENT_TRUST_POLCIY": "只允許部署已驗證的映像檔。", + "PREVENT_VULNERABLE_TOGGLE": "阻止有弱點的映像檔執行。", + "PREVENT_VULNERABLE_1": "阻止具有", + "PREVENT_VULNERABLE_2": "或更高危險級別的映像檔部署。", + "SCAN": "弱點掃描", + "AUTOSCAN_TOGGLE": "推送時自動掃描映像檔", + "AUTOSCAN_POLICY": "當映像檔推送到專案儲存庫時自動掃描。", + "SBOM": "SBOM generation", + "AUTOSBOM_TOGGLE": "Automatically generate SBOM on push", + "AUTOSBOM_POLICY": "Automatically generate SBOM when the images are pushed to the project registry." + }, + "MEMBER": { + "NEW_USER": "新增使用者成員", + "NEW_MEMBER": "新增成員", + "MEMBER": "成員", + "NAME": "名稱", + "EMAIL": "電子郵件", + "ROLE": "角色", + "SYS_ADMIN": "系統管理員", + "PROJECT_ADMIN": "專案管理員", + "PROJECT_MAINTAINER": "專案維護者", + "DEVELOPER": "開發人員", + "GUEST": "訪客", + "LIMITED_GUEST": "受限制的訪客", + "DELETE": "刪除", + "ITEMS": "筆紀錄", + "ACTIONS": "操作", + "USER": "使用者", + "USERS": "使用者", + "ADD_USER": "新增使用者", + "NEW_USER_INFO": "將使用者新增為此專案的成員並指定角色", + "NEW_GROUP": "新增群組", + "IMPORT_GROUP": "加入群組成員", + "NEW_GROUP_INFO": "新增現有的使用者群組或從 LDAP/AD 選擇專案成員", + "ADD_GROUP_SELECT": "將現有群組新增至專案成員", + "CREATE_GROUP_SELECT": "從 LDAP 新增群組至專案成員", + "LDAP_SEARCH_DN": "LDAP 群組 DN", + "LDAP_SEARCH_NAME": "名稱", + "LDAP_GROUP": "群組", + "LDAP_GROUPS": "群組", + "LDAP_PROPERTY": "屬性", + "ACTION": "操作", + "MEMBER_TYPE": "成員類型", + "GROUP_TYPE": "群組", + "USER_TYPE": "使用者", + "USERNAME_IS_REQUIRED": "使用者名稱必填。", + "USERNAME_DOES_NOT_EXISTS": "使用者名稱不存在。", + "USERNAME_ALREADY_EXISTS": "使用者名稱已存在。", + "UNKNOWN_ERROR": "新增成員時發生未知錯誤。", + "FILTER_PLACEHOLDER": "篩選成員", + "DELETION_TITLE": "確認刪除專案成員", + "DELETION_SUMMARY": "您確認刪除專案成員 {{param}} 嗎?", + "ADDED_SUCCESS": "成員新增成功。", + "DELETED_SUCCESS": "成員刪除成功。", + "SWITCHED_SUCCESS": "成員角色切換成功。", + "OF": "共", + "SWITCH_TITLE": "確認切換專案成員", + "SWITCH_SUMMARY": "您確認切換專案成員 {{param}} 嗎?", + "SET_ROLE": "設定角色", + "REMOVE": "移除", + "GROUP_NAME_REQUIRED": "群組名稱必填。", + "NON_EXISTENT_GROUP": "群組名稱不存在。", + "GROUP_ALREADY_ADDED": "群組名稱已被新增至此專案。" + }, + "ROBOT_ACCOUNT": { + "NAME": "名稱", + "PERMISSIONS": "權限", + "TOKEN": "權杖", + "NEW_ROBOT_ACCOUNT": "新增機器人帳號", + "ENABLED_STATE": "啟用狀態", + "NUMBER_REQUIRED": "此欄位必須填寫不為 0 的整數。", + "DESCRIPTION": "描述", + "CREATION": "建立時間", + "EXPIRATION": "過期時間", + "TOKEN_EXPIRATION": "機器人權杖到期時間(天)", + "ACTION": "操作", + "EDIT": "編輯", + "ITEMS": "筆", + "OF": "共計", + "DISABLE_ACCOUNT": "停用帳號", + "ENABLE_ACCOUNT": "啟用帳號", + "DELETE": "刪除", + "CREAT_ROBOT_ACCOUNT": "建立機器人帳號", + "PERMISSIONS_ARTIFACT": "Artifact", + "PERMISSIONS_HELMCHART": "Helm Chart(Chart 儲存庫)", + "PUSH": "推送", + "PULL": "拉取", + "FILTER_PLACEHOLDER": "篩選機器人帳號", + "ROBOT_NAME": "不能包含特殊字元(~#$%)且長度不能超過 255 個字元。", + "ACCOUNT_EXISTING": "機器人帳號已存在。", + "ALERT_TEXT": "這是唯一一次複製此密鑰的機會,您將無法再次複製。", + "CREATED_SUCCESS": "成功建立 '{{param}}'。", + "COPY_SUCCESS": "成功複製 '{{param}}' 的權杖", + "DELETION_TITLE": "確認移除機器人帳號", + "DELETION_SUMMARY": "您是否要刪除機器人帳號 {{param}}?", + "PULL_IS_MUST": "拉取權限預設已勾選,不可修改。", + "EXPORT_TO_FILE": "匯出至檔案", + "EXPIRES_AT": "到期日", + "EXPIRATION_TOOLTIP": "如不設定,將採用系統設定中的過期時間。", + "INVALID_VALUE": "無效的過期日期", + "NEVER_EXPIRED": "永不過期", + "NAME_PREFIX": "機器人名稱前綴", + "NAME_PREFIX_REQUIRED": "機器人名稱前綴為必填項目", + "UPDATE": "Update", + "AUDIT_LOG": "Audit Log", + "PREHEAT_INSTANCE": "Preheat Instance", + "PROJECT": "Project", + "REPLICATION_POLICY": "Replication Policy", + "REPLICATION": "Replication", + "REPLICATION_ADAPTER": "Replication Adapter", + "REGISTRY": "Registry", + "SCAN_ALL": "Scan All", + "SYSTEM_VOLUMES": "System Volumes", + "GARBAGE_COLLECTION": "Garbage Collection", + "PURGE_AUDIT": "Purge Audit", + "JOBSERVICE_MONITOR": "Job Service Monitor", + "TAG_RETENTION": "Tag Retention", + "SCANNER": "Scanner", + "LABEL": "Label", + "EXPORT_CVE": "Export CVE", + "SECURITY_HUB": "Security Hub", + "CATALOG": "Catalog", + "METADATA": "Project Metadata", + "REPOSITORY": "Repository", + "ARTIFACT": "Artifact", + "SCAN": "Scan", + "SBOM": "SBOM", + "TAG": "Tag", + "ACCESSORY": "Accessory", + "ARTIFACT_ADDITION": "Artifact Addition", + "ARTIFACT_LABEL": "Artifact Label", + "PREHEAT_POLICY": "Preheat Policy", + "IMMUTABLE_TAG": "Immutable Tag", + "LOG": "Log", + "NOTIFICATION_POLICY": "Notification Policy", + "QUOTA": "Quota", + "BACK": "Back", + "NEXT": "Next", + "FINISH": "Finish", + "BASIC_INFO": "Basic Information", + "SELECT_PERMISSIONS": "Select Permissions", + "SELECT_SYSTEM_PERMISSIONS": "Select System Permissions", + "SELECT_PROJECT_PERMISSIONS": "Select Project Permissions", + "SYSTEM_PERMISSIONS": "System Permissions", + "ROBOT": "Robot Account", + "USER": "User", + "LDAPUSER": "LDAP User", + "GROUP": "User Group", + "MEMBER": "Project Member" + }, + "WEBHOOK": { + "EDIT_BUTTON": "編輯", + "ENABLED_BUTTON": "啟用", + "DISABLED_BUTTON": "停用", + "TYPE": "Webhook", + "STATUS": "狀態", + "CREATED": "建立時間", + "ENABLED": "啟用", + "DISABLED": "停用", + "OF": "共計", + "ITEMS": "筆紀錄", + "LAST_TRIGGERED": "最近觸發時間", + "EDIT_WEBHOOK": "編輯 Webhook", + "ADD_WEBHOOK": "新增 Webhook", + "CREATE_WEBHOOK": "建立 Webhooks", + "EDIT_WEBHOOK_DESC": "指定接收 Webhook 通知的目標", + "CREATE_WEBHOOK_DESC": "為了啟用 webhook,請提供 Endpoint 和憑證以存取 Webhook 伺服器。", + "VERIFY_REMOTE_CERT_TOOLTIP": "勾選此框表示 Webhook 需要驗證遠端網址的憑證。當遠端網址使用自我簽署或不受信任的憑證時,請取消選擇。", + "ENDPOINT_URL": "Endpoint 位址", + "URL_IS_REQUIRED": "Endpoint 位址必填", + "AUTH_HEADER": "驗證標頭", + "VERIFY_REMOTE_CERT": "驗證遠端憑證", + "TEST_ENDPOINT_BUTTON": "測試 Endpoint", + "CANCEL_BUTTON": "取消", + "SAVE_BUTTON": "儲存", + "TEST_ENDPOINT_SUCCESS": "測試連接成功。", + "TEST_ENDPOINT_FAILURE": "測試連接失敗。", + "ENABLED_WEBHOOK_TITLE": "啟用 Webhook", + "ENABLED_WEBHOOK_SUMMARY": "確認啟用 webhook {{name}}?", + "DISABLED_WEBHOOK_TITLE": "停用 Webhook", + "DISABLED_WEBHOOK_SUMMARY": "確認停用 webhook {{name}}?", + "DELETE_WEBHOOK_TITLE": "刪除 Webhook", + "DELETE_WEBHOOK_SUMMARY": "確認刪除 webhook(s) {{names}}?", + "WEBHOOKS": "Webhooks", + "NEW_WEBHOOK": "新增 Webhook", + "ENABLE": "啟用", + "DISABLE": "停用", + "NAME": "名稱", + "TARGET": "目標位址", + "EVENT_TYPES": "事件類型", + "DESCRIPTION": "簡介", + "NO_WEBHOOK": "暫無 Webhook 紀錄", + "LAST_TRIGGER": "最新觸發", + "WEBHOOK_NAME": "Webhook 名稱", + "NO_TRIGGER": "暫無觸發記錄", + "NAME_REQUIRED": "名稱必填", + "NOTIFY_TYPE": "通知類型", + "EVENT_TYPE": "事件類型", + "EVENT_TYPE_REQUIRED": "請至少選擇一種事件類型", + "PAYLOAD_FORMAT": "Payload 格式", + "CLOUD_EVENT": "CloudEvents", + "PAYLOAD_DATA": "Payload 資料", + "SLACK_RATE_LIMIT": "請注意 Slack 的速率限制" + }, + "GROUP": { + "GROUP": "群組", + "GROUPS": "群組", + "IMPORT_LDAP_GROUP": "匯入 LDAP 群組", + "IMPORT_HTTP_GROUP": "新增 HTTP 群組", + "IMPORT_OIDC_GROUP": "新增 OIDC 群組", + "ADD": "新增", + "EDIT": "編輯", + "DELETE": "刪除", + "NAME": "名稱", + "TYPE": "類型", + "DN": "DN", + "PROPERTY": "屬性", + "GROUP_DN": "LDAP 群組 DN", + "REG_TIME": "註冊時間", + "ADD_GROUP_SUCCESS": "新增群組成功", + "EDIT_GROUP_SUCCESS": "編輯群組成功", + "LDAP_TYPE": "LDAP", + "HTTP_TYPE": "HTTP", + "OIDC_TYPE": "OIDC", + "OF": "共計", + "ITEMS": "筆紀錄", + "NEW_MEMBER": "新增群組成員", + "NEW_USER_INFO": "將群組以指定角色新增為此專案的成員", + "ROLE": "角色", + "SYS_ADMIN": "系統管理員", + "PROJECT_ADMIN": "專案管理員", + "PROJECT_MAINTAINER": "維護人員", + "DEVELOPER": "開發人員", + "GUEST": "訪客", + "LIMITED_GUEST": "受限的訪客", + "DELETION_TITLE": "確認刪除群組成員", + "DELETION_SUMMARY": "您是否要刪除群組成員 {{param}}?" + }, + "AUDIT_LOG": { + "USERNAME": "使用者名稱", + "REPOSITORY_NAME": "儲存庫名稱", + "TAGS": "標籤", + "OPERATION": "操作", + "OPERATIONS": "操作", + "TIMESTAMP": "時間戳記", + "ALL_OPERATIONS": "所有操作", + "PULL": "拉取", + "PUSH": "推送", + "CREATE": "建立", + "DELETE": "刪除", + "OTHERS": "其他", + "ADVANCED": "進階搜尋", + "SIMPLE": "簡易搜尋", + "ITEMS": "筆紀錄", + "FILTER_PLACEHOLDER": "篩選日誌", + "INVALID_DATE": "無效日期。", + "OF": "共計", + "NOT_FOUND": "未發現任何日誌!", + "RESOURCE": "資源", + "RESOURCE_TYPE": "資源類型" + }, + "REPLICATION": { + "PUSH_BASED_ONLY": "Only for the push-based replication", + "YES": "是", + "SECONDS": "秒", + "MINUTES": "分鐘", + "HOURS": "小時", + "MONTH": "月", + "DAY_MONTH": "一個月的某天", + "DAY_WEEK": "一週的的某天", + "CRON_TITLE": "cron 格式說明 '* * * * * *'。cron 字串是基於 UTC 時間", + "FIELD_NAME": "欄位名稱", + "MANDATORY": "是否必填?", + "ALLOWED_VALUES": "允許的值", + "ALLOWED_CHARACTERS": "允許的特殊字元", + "TOTAL": "總計", + "OVERRIDE": "覆蓋", + "ENABLED_RULE": "啟用規則", + "OVERRIDE_INFO": "覆蓋", + "OPERATION": "操作", + "CURRENT": "目前", + "FILTER_PLACEHOLDER": "篩選工作", + "STOP_TITLE": "確認停止執行", + "BOTH": "兩者", + "STOP_SUCCESS": "成功停止執行 {{param}}", + "STOP_SUMMARY": "您確定要停止執行 {{param}} 嗎?", + "TASK_ID": "工作 ID", + "RESOURCE_TYPE": "資源類型", + "SOURCE": "來源", + "DESTINATION": "目標", + "POLICY": "原則", + "DURATION": "持續時間", + "SUCCESS_RATE": "成功率", + "SUCCESS": "成功", + "FAILURE": "失敗", + "IN_PROGRESS": "進行中", + "REPLICATION_RULE": "複製規則", + "NEW_REPLICATION_RULE": "新複製規則", + "ENDPOINTS": "端點", + "FILTER_POLICIES_PLACEHOLDER": "篩選規則", + "FILTER_EXECUTIONS_PLACEHOLDER": "篩選執行", + "DELETION_TITLE": "確認刪除複製規則", + "DELETION_SUMMARY": "您確定要刪除複製規則 {{param}} 嗎?", + "REPLICATION_TITLE": "確認規則複製", + "REPLICATION_SUMMARY": "您確定要複製規則 {{param}} 嗎?", + "DELETION_TITLE_FAILURE": "刪除規則確認失敗", + "DELETION_SUMMARY_FAILURE": "有待處理/執行中/重試中的狀態,無法刪除", + "REPLICATE_SUMMARY_FAILURE": "有待處理/執行中的狀態,無法刪除", + "FILTER_TARGETS_PLACEHOLDER": "篩選端點", + "DELETION_TITLE_TARGET": "確認刪除端點", + "DELETION_SUMMARY_TARGET": "您確定要刪除端點 {{param}} 嗎?", + "ADD_POLICY": "新增複製規則", + "EDIT_POLICY": "編輯", + "EDIT_POLICY_TITLE": "編輯複製規則", + "DELETE_POLICY": "刪除", + "TEST_CONNECTION": "測試連線", + "TESTING_CONNECTION": "正在測試連線...", + "TEST_CONNECTION_SUCCESS": "連線測試成功。", + "TEST_CONNECTION_FAILURE": "連線測試失敗。", + "ID": "ID", + "NAME": "名稱", + "NAME_IS_REQUIRED": "名稱是必填的。", + "DESCRIPTION": "描述", + "ENABLE": "啟用", + "DISABLE": "停用", + "REPLICATION_MODE": "複製模式", + "SRC_REGISTRY": "來源 Registry", + "DESTINATION_NAMESPACE": "目標 Registry:命名空間", + "DESTINATION_NAME_IS_REQUIRED": "目標名稱是必填的。", + "NEW_DESTINATION": "新端點", + "DESTINATION_URL": "端點 URL", + "DESTINATION_URL_IS_REQUIRED": "端點 URL 是必填的。", + "DESTINATION_USERNAME": "使用者名稱", + "DESTINATION_PASSWORD": "密碼", + "ALL_STATUS": "所有狀態", + "ENABLED": "已啟用", + "DISABLED": "已停用", + "LAST_START_TIME": "上次開始時間", + "ACTIVATION": "啟動", + "REPLICATION_EXECUTION": "執行", + "REPLICATION_EXECUTIONS": "執行", + "STOPJOB": "停止", + "ALL": "全部", + "PENDING": "待處理", + "RUNNING": "執行中", + "ERROR": "錯誤", + "RETRYING": "正在重試", + "STOPPED": "已停止", + "FINISHED": "已完成", + "CANCELED": "已取消", + "SIMPLE": "簡單", + "ADVANCED": "進階", + "STATUS": "狀態", + "REPLICATION_TRIGGER": "觸發", + "CREATION_TIME": "建立時間", + "UPDATE_TIME": "更新時間", + "END_TIME": "結束時間", + "LOGS": "日誌", + "OF": "筆紀錄", + "ITEMS": "筆紀錄", + "NO_LOGS": "沒有日誌", + "TOGGLE_ENABLE_TITLE": "啟用規則", + "TOGGLE_DISABLE_TITLE": "停用規則", + "CREATED_SUCCESS": "成功建立複製規則。", + "UPDATED_SUCCESS": "成功更新複製規則。", + "DELETED_SUCCESS": "成功刪除複製規則。", + "DELETED_FAILED": "刪除複製規則失敗。", + "TOGGLED_SUCCESS": "成功切換複製規則狀態。", + "CANNOT_EDIT": "當複製規則啟用時,無法修改。", + "INVALID_DATE": "無效的日期。", + "PLACEHOLDER": "我們找不到任何複製規則!", + "JOB_PLACEHOLDER": "我們找不到任何複製工作!", + "NO_ENDPOINT_INFO": "請先新增端點", + "NO_LABEL_INFO": "請先新增標籤", + "NO_PROJECT_INFO": "此專案不存在", + "SOURCE_RESOURCE_FILTER": "來源資源篩選器", + "SCHEDULED": "已排程", + "MANUAL": "手動", + "EVENT_BASED": "事件驅動", + "DAILY": "每天", + "WEEKLY": "每週", + "SETTING": "選項", + "TRIGGER": "觸發條件", + "TARGETS": "目標", + "MODE": "模式", + "TRIGGER_MODE": "觸發模式", + "SOURCE_PROJECT": "來源專案", + "REPLICATE": "複製", + "DELETE_REMOTE_IMAGES": "當本地資源被刪除時,同時刪除遠端的資源。", + "DELETE_ENABLED": "預設啟用此規則", + "NEW": "新增", + "NAME_TOOLTIP": "複製規則名稱應由小寫字元、數字和 ._- 組成,且至少有 2 個字元,並且必須以字元或數字開頭。", + "DESTINATION_NAME_TOOLTIP": "目標名稱應由小寫字元、數字和 ._- 組成,且至少有 2 個字元,並且必須以字元或數字開頭。", + "ACKNOWLEDGE": "確認", + "RULE_DISABLED": "此規則已被停用,因為其篩選器中使用的標籤已被刪除。請編輯規則並更新其篩選器以啟用它。", + "REPLI_MODE": "複製模式", + "SOURCE_REGISTRY": "來源 Registry", + "SOURCE_NAMESPACES": "來源命名空間", + "DEST_REGISTRY": "目的 Registry", + "DEST_NAMESPACE": "目的命名空間", + "NAMESPACE_TOOLTIP": "命名空間名稱應由小寫字元、數字和 ._-/ 組成,且至少有 2 個字元,並且必須以字元或數字開頭。", + "TAG": "標籤", + "LABEL": "標籤", + "RESOURCE": "資源", + "ENABLE_TITLE": "啟用規則", + "ENABLE_SUMMARY": "您確定要啟用規則 {{param}} 嗎?", + "DISABLE_TITLE": "停用規則", + "DISABLE_SUMMARY": "您確定要停用規則 {{param}} 嗎?", + "ENABLE_SUCCESS": "成功啟用規則", + "ENABLE_FAILED": "啟用規則失敗", + "DISABLE_SUCCESS": "成功停用規則", + "DISABLE_FAILED": "停用規則失敗", + "DES_REPO_FLATTENING": "目標儲存庫平整化", + "NAMESPACE": "命名空間", + "REPO_FLATTENING": "平整化", + "NO_FLATTING": "無平整化", + "FLATTEN_LEVEL_1": "平整化 1 等級", + "FLATTEN_LEVEL_2": "平整化 2 等級", + "FLATTEN_LEVEL_3": "平整化 3 等級", + "FLATTEN_ALL": "平整所有等級", + "FLATTEN_LEVEL_TIP": "在複製映像檔時降低巢狀的儲存庫結構。假設巢狀的儲存庫結構為 'a/b/c/d/img' 並且目標命名空間為 'ns',每個項目的對應結果如下:", + "FLATTEN_LEVEL_TIP_ALL": "'平整所有等級'(在 v2.3 之前使用):'a/b/c/d/img' -> 'ns/img'", + "FLATTEN_LEVEL_TIP_NO": "'無平整化': 'a/b/c/d/img' -> 'ns/a/b/c/d/img", + "FLATTEN_LEVEL_TIP_1": "'平整化 1 等級'(預設):'a/b/c/d/img' -> 'ns/b/c/d/img'", + "FLATTEN_LEVEL_TIP_2": "'平整化 2 等級': 'a/b/c/d/img' -> 'ns/c/d/img'", + "FLATTEN_LEVEL_TIP_3": "'平整化 3 等級': 'a/b/c/d/img' -> 'ns/d/img'", + "BANDWIDTH": "頻寬", + "BANDWIDTH_ERROR_TIP": "請輸入 -1 或大於 0 的整數", + "BANDWIDTH_TOOLTIP": "Set the maximum network bandwidth for each replication worker. Please pay attention to the number of concurrent executions (max. {{max_job_workers}}). For unlimited bandwidth, please enter -1.", + "UNLIMITED": "無限制", + "UNREACHABLE_SOURCE_REGISTRY": "無法連線到來源 Registry,請在編輯此規則之前確保來源 Registry 可用: {{error}}", + "CRON_ERROR_TIP": "cron 字串的第一個欄位必須是 0,第二個欄位不能是 \"*\"", + "COPY_BY_CHUNK": "分段複製", + "COPY_BY_CHUNK_TIP": "指定是否按分段複製 blob。分段傳輸可能會增加 API 請求的數量。", + "TRIGGER_STOP_SUCCESS": "成功觸發停止執行", + "CRON_STR": "Cron 字串" + }, + "DESTINATION": { + "NEW_ENDPOINT": "新增端點", + "PROVIDER": "提供者", + "ENDPOINT": "端點", + "NAME": "端點名稱", + "NAME_IS_REQUIRED": "端點名稱必填。", + "URL": "端點 URL", + "URL_IS_REQUIRED": "端點 URL 必填。", + "AUTHENTICATION": "認證", + "ACCESS_ID": "存取 ID", + "ACCESS_SECRET": "存取密碼", + "STATUS": "狀態", + "TEST_CONNECTION": "測試連線", + "TITLE_EDIT": "編輯端點", + "TITLE_ADD": "新增端點", + "EDIT": "編輯", + "DELETE": "刪除", + "TESTING_CONNECTION": "正在測試連線...", + "TEST_CONNECTION_SUCCESS": "連線測試成功。", + "TEST_CONNECTION_FAILURE": "連線測試失敗。", + "CONFLICT_NAME": "端點名稱已存在。", + "INVALID_NAME": "無效的端點名稱。", + "FAILED_TO_GET_TARGET": "取得端點失敗。", + "CREATION_TIME": "建立時間", + "OF": "共計", + "ITEMS": "筆紀錄", + "CREATED_SUCCESS": "成功建立端點。", + "UPDATED_SUCCESS": "成功更新端點。", + "DELETED_SUCCESS": "成功刪除端點。", + "DELETED_FAILED": "刪除端點失敗。", + "CANNOT_EDIT": "當複製規則啟用時,端點無法修改。", + "FAILED_TO_DELETE_TARGET_IN_USED": "無法刪除正在使用的端點。", + "PLACEHOLDER": "未找到任何端點!" + }, + "REPOSITORY": { + "COPY_DIGEST_ID": "複製 Digest", + "DELETE": "刪除", + "NAME": "名稱", + "TAGS": "標籤", + "PLATFORM": "OS / ARCH", + "ARTIFACT_TOOTIP": "點選此圖示進入引用的 Artifact 列表", + "ARTIFACTS_COUNT": "Artifact 數量", + "PULL_COUNT": "下載數", + "PULL_COMMAND": "Pull 命令", + "PULL_TIME": "拉取時間", + "PUSH_TIME": "推送時間", + "IMMUTABLE": "不可變的", + "MY_REPOSITORY": "我的儲存庫", + "PUBLIC_REPOSITORY": "公共儲存庫", + "DELETION_TITLE_REPO": "刪除映像檔儲存庫確認", + "DELETION_TITLE_REPO_SIGNED": "儲存庫不能被刪除", + "DELETION_SUMMARY_REPO_SIGNED": "映像檔儲存庫'{{repoName}}' 不能被刪除,因為存在以下簽署映像檔.\n{{signedImages}} \n在刪除映像檔儲存庫前需先刪除所有的簽署映像檔", + "DELETION_SUMMARY_REPO": "確認刪除映像檔儲存庫{{repoName}}?", + "DELETION_TITLE_ARTIFACT": "刪除映像檔 Artifact 確認", + "DELETION_SUMMARY_ARTIFACT": "確認刪除映像檔 Artifact {{param}} ? 如果您刪除此 Artifact,則這個 Digest 的所有標籤也將被刪除。", + "DELETION_TITLE_TAG": "刪除 Tag 確認", + "DELETION_SUMMARY_TAG": "確認刪除Tag {{param}} ?", + "DELETION_TITLE_TAG_DENIED": "已簽署的映像檔不能被刪除", + "DELETION_SUMMARY_TAG_DENIED": "要刪除此映像檔 Tag 必須首先從 Notary 中刪除。\n請執行如下Notary 命令刪除:\n", + "TAGS_NO_DELETE": "在唯獨模式下刪除是被禁止的", + "FILTER_FOR_REPOSITORIES": "篩選映像檔儲存庫", + "TAG": "標籤", + "ARTIFACT": "Artifact", + "ARTIFACTS": "Artifacts", + "SIZE": "大小", + "VULNERABILITY": "弱點", + "SBOM": "SBOM", + "BUILD_HISTORY": "建置歷史", + "SIGNED": "已簽署", + "AUTHOR": "作者", + "CREATED": "建立時間", + "DOCKER_VERSION": "Docker 版本", + "ARCHITECTURE": "架構", + "OS": "作業系統", + "SHOW_DETAILS": "顯示詳細資訊", + "REPOSITORIES": "映像檔儲存庫", + "OF": "共計", + "ITEMS": "筆紀錄", + "NO_ITEMS": "沒有記錄", + "POP_REPOS": "受歡迎的映像檔儲存庫", + "DELETED_REPO_SUCCESS": "成功刪除映像檔儲存庫。", + "DELETED_TAG_SUCCESS": "成功刪除映像檔 Tag。", + "COPY": "複製", + "NOTARY_IS_UNDETERMINED": "無法確定映像檔 Tag 簽名。", + "PLACEHOLDER": "未發現任何映像檔庫!", + "INFO": "描述資訊", + "NO_INFO": "此映像檔儲存庫沒有描述資訊", + "IMAGE": "映像檔", + "LABELS": "標籤", + "ADD_LABEL_TO_IMAGE": "新增標籤到此映像檔", + "ADD_LABELS": "新增標籤", + "STOP": "Stop", + "RETAG": "複製", + "FILTER_BY_LABEL": "篩選標籤", + "FILTER_ARTIFACT_BY_LABEL": "透過標籤篩選 Artifact", + "ACTION": "操作", + "DEPLOY": "部署", + "ADDITIONAL_INFO": "新增資訊", + "REPO_NAME": "映像檔儲存庫", + "MARKDOWN": "支援使用 Markdown 進行樣式設定", + "LAST_MODIFIED": "最後修改時間" + }, + "SUMMARY": { + "QUOTAS": "配額", + "PROJECT_REPOSITORY": "儲存庫", + "PROJECT_MEMBER": "成員", + "PROJECT_QUOTAS": "配額", + "ARTIFACT_COUNT": "Artifact 數量", + "STORAGE_CONSUMPTION": "儲存空間使用量", + "ADMIN": "管理員", + "MAINTAINER": "維護人員", + "DEVELOPER": "開發者", + "GUEST": "訪客", + "LIMITED_GUEST": "受限制的訪客", + "SEE_ALL": "檢視全部" + }, + "ALERT": { + "FORM_CHANGE_CONFIRMATION": "部分變更尚未儲存。確認是否取消?" + }, + "RESET_PWD": { + "TITLE": "重設密碼", + "CAPTION": "輸入您的電子郵件以重設密碼", + "EMAIL": "電子郵件", + "SUCCESS": "包含重設密碼連結的郵件已成功寄出。您可以關閉此對話框並檢查您的收件匣。", + "CAPTION2": "輸入您的新密碼", + "RESET_OK": "密碼已成功重設。點選「確定」以使用新密碼登入。" + }, + "RECENT_LOG": { + "SUB_TITLE": "顯示", + "SUB_TITLE_SUFIX": "筆日誌" + }, + "CONFIG": { + "SECURITY": "安全性", + "TITLE": "設定", + "AUTH": "認證", + "REPLICATION": "複製", + "LABEL": "標籤", + "REPOSITORY": "儲存庫", + "REPO_READ_ONLY": "儲存庫唯讀", + "WEBHOOK_NOTIFICATION_ENABLED": "啟用 Webhook", + "SYSTEM": "系統設定", + "PROJECT_QUOTAS": "專案配額", + "VULNERABILITY": "弱點", + "GC": "垃圾回收", + "CONFIRM_TITLE": "確認取消", + "CONFIRM_SUMMARY": "有些變更尚未儲存,您確定要捨棄它們嗎?", + "SAVE_SUCCESS": "設定已成功儲存。", + "VERIFY_REMOTE_CERT": "驗證遠端憑證", + "TOKEN_EXPIRATION": "權杖到期時間(分鐘)", + "SESSION_TIMEOUT": "工作階段逾時(分鐘)", + "SESSION_TIMEOUT_INFO": "設定 Harbor UI 的工作階段逾時時間。預設值為 60 分鐘。", + "AUTH_MODE": "認證模式", + "PRIMARY_AUTH_MODE": "主要認證模式", + "PRO_CREATION_RESTRICTION": "專案建立限制", + "SELF_REGISTRATION": "允許自助註冊", + "AUTH_MODE_DB": "資料庫", + "AUTH_MODE_LDAP": "LDAP", + "AUTH_MODE_UAA": "UAA", + "AUTH_MODE_HTTP": "Http 認證", + "AUTH_MODE_OIDC": "OIDC", + "SCOPE_BASE": "基礎", + "SCOPE_ONE_LEVEL": "一層", + "SCOPE_SUBTREE": "子樹", + "PRO_CREATION_EVERYONE": "所有人", + "PRO_CREATION_ADMIN": "僅限管理員", + "ROOT_CERT": "Registry 根憑證", + "ROOT_CERT_LINK": "下載", + "REGISTRY_CERTIFICATE": "Registry 憑證", + "NO_CHANGE": "因為沒有變更,所以儲存已中止", + "SKIP_SCANNER_PULL_TIME": "在掃描時保留映像檔「最後拉取時間」", + "TOOLTIP": { + "SELF_REGISTRATION_ENABLE": "啟用註冊。", + "SELF_REGISTRATION_DISABLE": "停用註冊。", + "VERIFY_REMOTE_CERT": "確定映像檔複製是否需要驗證遠端 Harbor Registry的憑證。當遠端 Registry 使用自簽或不受信任的憑證時,請取消勾選此框。", + "AUTH_MODE": "預設的認證模式是資料庫,即憑證儲存在本地資料庫中。如果您希望對使用者的憑證進行 LDAP 伺服器驗證,請將其設定為 LDAP。", + "PRIMARY_AUTH_MODE": "此認證模式將成為使用者登入的預設方式。當使用者選擇透過身份提供者或本地資料庫登入的登入畫面時,將自動將使用者重新導向到此身份提供者。當訪問 URL '/account/sign-in' 時,可以透過資料庫登入。", + "LDAP_SEARCH_DN": "具有搜尋 LDAP/AD 伺服器權限的使用者的 DN。如果您的 LDAP/AD 伺服器不支援匿名搜尋,則應設定此 DN 和 ldap_search_pwd。", + "LDAP_BASE_DN": "在 LDAP/AD 中查詢使用者的基礎 DN。", + "LDAP_UID": "在搜尋中用來選取使用者的屬性。它可以是 uid、cn、email、sAMAccountName 或其他相依於您的 LDAP/AD 的屬性。", + "LDAP_SCOPE": "搜尋使用者的範圍。", + "TOKEN_EXPIRATION": "由權杖服務建立的權杖的到期時間(以分鐘為單位)。預設值為 30 分鐘。", + "ROBOT_NAME_PREFIX": "每個機器人名稱的前綴字串,預設值為 'robot$'", + "ROBOT_TOKEN_EXPIRATION": "機器人帳號的權杖的到期時間(以天為單位),預設值為 30 天。顯示從分鐘轉換成的天數並向下取整數。", + "PRO_CREATION_RESTRICTION": "用於定義哪些使用者有權限建立專案。預設情況下,所有人都可以建立專案。設定為 '僅限管理員',則只有管理員可以建立專案。", + "ROOT_CERT_DOWNLOAD": "下載 Registry 的根憑證。", + "SCANNING_POLICY": "根據不同的需求設定映像檔掃描原則。'無':沒有活動原則;'每日定時':每天在指定時間觸發掃描。", + "VERIFY_CERT": "驗證來自 LDAP 伺服器的憑證", + "REPO_TOOLTIP": "在此模式下,使用者無法對映像檔進行任何操作。", + "WEBHOOK_TOOLTIP": "當執行某些操作(如推送、拉取、刪除、掃描映像檔或 Helm Chart)時,啟用 webhooks 以在指定的端點接收回撥", + "HOURLY_CRON": "每小時開始時執行一次。相當於 0 0 * * * *。", + "WEEKLY_CRON": "每週執行一次,週六/週日凌晨之間。相當於 0 0 0 * * 0。", + "DAILY_CRON": "每天凌晨執行一次。相當於 0 0 0 * * *。", + "SKIP_SCANNER_PULL_TIME_TOOLTIP": "弱點掃描器(例如 Trivy)在掃描映像檔時不會更新映像檔的「最後拉取時間」。" + }, + "LDAP": { + "URL": "LDAP 網址", + "SEARCH_DN": "LDAP 搜尋 DN", + "SEARCH_PWD": "LDAP 搜尋密碼", + "BASE_DN": "LDAP 基礎 DN", + "FILTER": "LDAP 篩選器", + "UID": "LDAP 使用者 UID", + "SCOPE": "LDAP 搜尋範圍", + "VERIFY_CERT": "驗證 LDAP 憑證", + "LDAP_GROUP_BASE_DN": "LDAP 群組基礎 DN", + "LDAP_GROUP_BASE_DN_INFO": "在 LDAP/AD 中查詢群組的基礎 DN。如果您需要啟用 LDAP 群組相關功能,此欄位不能為空。", + "LDAP_GROUP_FILTER": "LDAP 群組篩選器", + "LDAP_GROUP_FILTER_INFO": "用於搜尋 LDAP/AD 群組的篩選器。對於 OpenLDAP:objectclass=groupOfNames。對於 Active Directory:objectclass=group。如果您需要 LDAP 群組相關功能,此欄位不能為空。", + "LDAP_GROUP_GID": "LDAP 群組 GID", + "LDAP_GROUP_GID_INFO": "在搜尋中用來選取使用者的屬性,可以是 uid、cn 或其他屬性,取決於您的 LDAP/AD。Harbor 中的群組預設以此屬性命名。如果您需要啟用 LDAP 群組相關功能,此欄位不能為空。", + "LDAP_GROUP_ADMIN_DN": "LDAP 群組管理員 DN", + "LDAP_GROUP_ADMIN_DN_INFO": "指定 LDAP 群組 DN。此群組中的所有 LDAP 使用者都將具有 Harbor 管理員權限。如果您不需要,此欄可留空。", + "LDAP_GROUP_MEMBERSHIP": "LDAP 群組成員資格", + "LDAP_GROUP_MEMBERSHIP_INFO": "表示 LDAP 群組成員資格的屬性,預設值為 memberof,在某些 LDAP 伺服器中可能為 \"ismemberof\"。如果您需要啟用 LDAP 群組相關功能,此欄位不能為空。", + "GROUP_SCOPE": "LDAP 群組搜尋範圍", + "GROUP_SCOPE_INFO": "搜尋群組的範圍,預設選擇子樹。" + }, + "UAA": { + "ENDPOINT": "UAA 端點", + "CLIENT_ID": "UAA 用戶端 ID", + "CLIENT_SECRET": "UAA 用戶端密鑰", + "VERIFY_CERT": "驗證 UAA 憑證" + }, + "HTTP_AUTH": { + "ENDPOINT": "伺服器端點", + "TOKEN_REVIEW": "權杖審查端點", + "SKIP_SEARCH": "跳過搜尋", + "VERIFY_CERT": "驗證憑證", + "ADMIN_GROUPS": "管理員群組" + }, + "OIDC": { + "OIDC_PROVIDER": "OIDC 提供者名稱", + "OIDC_REDIREC_URL": "請確保在 OIDC 提供者中設定的重新導向 URL 為", + "ENDPOINT": "OIDC 端點", + "CLIENT_ID": "OIDC 用戶端 ID", + "CLIENTSECRET": "OIDC 用戶端密鑰", + "SCOPE": "OIDC 範圍", + "OIDC_VERIFYCERT": "驗證憑證", + "OIDC_AUTOONBOARD": "自動登入", + "USER_CLAIM": "使用者聲明", + "OIDC_SETNAME": "設定 OIDC 使用者名稱", + "OIDC_SETNAMECONTENT": "在第一次透過第三方(OIDC)進行身份驗證時,您必須建立一個 Harbor 使用者名稱。這將在 Harbor 中用於與專案、角色等關聯。", + "OIDC_USERNAME": "使用者名稱", + "GROUP_CLAIM_NAME": "群組聲明名稱", + "GROUP_CLAIM_NAME_INFO": "您在 OIDC 提供者中設定的自定義群組聲明名稱", + "OIDC_ADMIN_GROUP": "OIDC 管理員群組", + "OIDC_ADMIN_GROUP_INFO": "指定 OIDC 管理員群組名稱。此群組中的所有 OIDC 使用者都將具有 Harbor 管理員權限。如果您不需要,此欄可以留空。", + "OIDC_GROUP_FILTER": "OIDC 群組篩選器", + "OIDC_GROUP_FILTER_INFO": "篩選符合提供的正規表達式的 OIDC 群組。保持空白以選取所有群組。" + }, + "SCANNING": { + "STOP_SCAN_ALL_SUCCESS": "成功觸發停止全部掃描!", + "TRIGGER_SCAN_ALL_SUCCESS": "成功觸發全部掃描!", + "TRIGGER_SCAN_ALL_FAIL": "觸發全部掃描失敗,錯誤: {{error}}", + "TITLE": "弱點掃描", + "SCAN_ALL": "掃描全部", + "SCHEDULE_TO_SCAN_ALL": "排程掃描全部", + "SCAN_NOW": "立即掃描", + "SCAN": "掃描", + "NONE_POLICY": "無", + "DAILY_POLICY": "每日定時", + "REFRESH_POLICY": "資料庫更新後", + "DB_REFRESH_TIME": "資料庫更新於", + "DB_NOT_READY": "弱點資料庫可能尚未完全準備好!", + "NEXT_SCAN": "下次可用時間", + "STATUS": { + "PENDING": "等待中", + "RUNNING": "執行中", + "STOPPED": "已停止", + "ERROR": "錯誤", + "SUCCESS": "成功", + "SCHEDULED": "已排程" + }, + "MANUAL": "手動觸發", + "SCHEDULED": "定時觸發" + }, + "TEST_MAIL_SUCCESS": "已驗證郵件伺服器的連線。", + "TEST_LDAP_SUCCESS": "已驗證 LDAP 伺服器的連線。", + "TEST_MAIL_FAILED": "驗證郵件伺服器失敗,錯誤: {{param}}。", + "TEST_LDAP_FAILED": "驗證 LDAP 伺服器失敗,錯誤: {{param}}。", + "LEAVING_CONFIRMATION_TITLE": "確認離開", + "LEAVING_CONFIRMATION_SUMMARY": "有未儲存的變更,確定要離開目前頁面嗎?", + "TEST_OIDC_SUCCESS": "已驗證 OIDC 伺服器的連線。" + }, + "PAGE_NOT_FOUND": { + "MAIN_TITLE": "頁面不存在", + "SUB_TITLE": "正在重新導向到首頁:", + "UNIT": "秒..." + }, + "ABOUT": { + "VERSION": "版本", + "BUILD": "建置", + "COPYRIGHT": "Harbor 是一個開源、受信賴的雲原生 Docker Registry 專案,用於儲存、簽署和以及掃描映像檔內容。它擴展了開源的 Docker Distribution,加入了如安全性、身份認證和用戶管理等功能。Harbor 也支援資源監控和不同實例間的同步。將 Registry 靠近部署和執行環境可以提高傳輸效率。", + "COPYRIGHT_SUFIX": "上列出的一項或多項專利保護。", + "TRADEMARK": "VMware 商標及設計都是 VMware,Inc. 在美國和/或其他法律轄區的註冊商標或者商標。此處提到的其他所有商標和名稱分別是其各自公司的商標。", + "END_USER_LICENSE": "終端使用者授權條款", + "OPEN_SOURCE_LICENSE": "開源/第三方授權條款" + }, + "START_PAGE": { + "GETTING_START": "", + "GETTING_START_TITLE": "開始使用" + }, + "TOP_REPO": "受歡迎的映像檔儲存庫", + "STATISTICS": { + "PRO_ITEM": "專案", + "REPO_ITEM": "儲存庫", + "INDEX_PRIVATE": "私有", + "INDEX_PUB": "公開", + "INDEX_TOTAL": "總計", + "STORAGE": "儲存空間", + "LIMIT": "限制", + "STORAGE_USED": "已使用儲存空間" + }, + "SEARCH": { + "IN_PROGRESS": "搜尋中...", + "BACK": "返回" + }, + "SBOM": { + "CHART": { + "SCANNING_TIME": "Scan completed time:", + "SCANNING_PERCENT": "Scan progress:", + "SCANNING_PERCENT_EXPLAIN": "The scan completion progress is calculated as # of successfully scanned images / total number of images referenced within the image index.", + "TOOLTIPS_TITLE": "{{totalSbom}} of {{totalPackages}} {{package}} have known {{sbom}}.", + "TOOLTIPS_TITLE_SINGULAR": "{{totalSbom}} of {{totalPackages}} {{package}} has known {{sbom}}.", + "TOOLTIPS_TITLE_ZERO": "No recognizable SBOM detected" + }, + "GRID": { + "PLACEHOLDER": "No scan results found.", + "COLUMN_PACKAGE": "Package", + "COLUMN_PACKAGES": "Packages", + "COLUMN_VERSION": "Current version", + "COLUMN_LICENSE": "License", + "COLUMN_DESCRIPTION": "Description", + "FOOT_ITEMS": "Items", + "FOOT_OF": "of" + }, + "STATE": { + "OTHER_STATUS": "No SBOM", + "QUEUED": "Queued", + "ERROR": "View Log", + "SCANNING": "Generating", + "STOPPED": "Generation stopped" + }, + "NO_SBOM": "No SBOM", + "PACKAGES": "SBOM", + "COMPLETED": "Completed", + "REPORTED_BY": "Reported by {{scanner}}", + "GENERATE": "Generate SBOM", + "DOWNLOAD": "Download SBOM", + "Details": "SBOM details", + "STOP": "Stop Generate SBOM", + "TRIGGER_STOP_SUCCESS": "Trigger stopping SBOM generation successfully" + }, + "VULNERABILITY": { + "STATE": { + "OTHER_STATUS": "未掃描", + "QUEUED": "已排入佇列", + "ERROR": "檢視日誌", + "SCANNING": "掃描中", + "STOPPED": "掃描已停止" + }, + "GRID": { + "PLACEHOLDER": "沒有找到任何掃描結果!", + "COLUMN_ID": "弱點識別碼", + "COLUMN_SEVERITY": "嚴重程度", + "COLUMN_PACKAGE": "套件", + "COLUMN_PACKAGES": "套件", + "COLUMN_VERSION": "目前版本", + "COLUMN_FIXED": "修復版本", + "COLUMN_DESCRIPTION": "描述", + "FOOT_ITEMS": "項目", + "FOOT_OF": "總共", + "IN_ALLOW_LIST": "列在 CVE 白名單中", + "CVSS3": "CVSS3" + }, + "CHART": { + "SCANNING_TIME": "掃描完成時間:", + "SCANNING_PERCENT": "掃描完成百分比:", + "SCANNING_PERCENT_EXPLAIN": "掃描完成百分比是根據成功掃描的映像檔數量和映像檔索引內的總映像檔數量計算的。", + "TOOLTIPS_TITLE": "{{totalPackages}} 個{{package}}中的{{totalVulnerability}}個已知{{vulnerability}}。", + "TOOLTIPS_TITLE_SINGULAR": "{{totalPackages}} 個{{package}}中的{{totalVulnerability}}個已知{{vulnerability}}。", + "TOOLTIPS_TITLE_ZERO": "沒有發現可識別的弱點" + }, + "SEVERITY": { + "CRITICAL": "嚴重", + "HIGH": "高", + "MEDIUM": "中", + "LOW": "低", + "NONE": "無" + }, + "SINGULAR": "弱點", + "OVERALL_SEVERITY": "弱點嚴重度:", + "NO_VULNERABILITY": "沒有弱點", + "PLURAL": "弱點", + "PLACEHOLDER": "篩選弱點", + "PACKAGE": "套件", + "PACKAGES": "套件", + "SCAN_NOW": "開始掃描", + "SCAN_BY": "由 {{scanner}} 掃描", + "REPORTED_BY": "由 {{scanner}} 報告", + "NO_SCANNER": "無掃描器", + "TRIGGER_STOP_SUCCESS": "成功觸發停止掃描", + "STOP_NOW": "Stop Scan Vulnerability" + }, + "PUSH_IMAGE": { + "TITLE": "推送命令", + "DOCKER": "Docker", + "PODMAN": "Podman", + "HELM": "Helm", + "CNAB": "CNAB", + "TAG_COMMAND_CHART": "為此專案打包 Helm Chart:", + "PUSH_COMMAND_CHART": "將 Helm Chart 推送至此專案:", + "PUSH_COMMAND_CNAB": "將 CNAB 推送至此專案:", + "TOOLTIP": "推送映像擋至此專案的參考命令。", + "TAG_COMMAND": "為此專案標記映像檔:", + "PUSH_COMMAND": "將映像檔推送至此專案:", + "COPY_ERROR": "複製失敗,請嘗試手動複製參考命令。", + "COPY_PULL_COMMAND": "複製拉取命令" + }, + "ARTIFACT": { + "FILTER_FOR_ARTIFACTS": "篩選 Artifact(s)", + "ADDITIONS": "其他", + "ANNOTATION": "註解", + "OVERVIEW": "概覽", + "IMAGE": "映像檔", + "CHART": "CHART", + "CNAB": "CNAB", + "WASM": "WASM", + "TAGGED": "包含 Tag", + "UNTAGGED": "不包含 Tag", + "ALL": "全部", + "PLACEHOLDER": "未發現任何 artifacts!", + "SCAN_UNSUPPORTED": "不支援掃描", + "SBOM_UNSUPPORTED": "Unsupported", + "SUMMARY": "摘要", + "DEPENDENCIES": "相依性", + "VALUES": "值", + "NAME": "名稱", + "REPO": "儲存庫", + "OF": "共計", + "VERSION": "版本", + "NO_README": "此 Helm Chart 未提供 README 文件", + "ITEMS": "筆紀錄", + "SHOW_KV": "顯示鍵值對", + "SHOW_YAML": "顯示 YAML 檔案" + }, + "TAG": { + "CREATION_TIME_PREFIX": "建立於", + "CREATOR_PREFIX": "建立者:", + "ANONYMITY": "匿名", + "IMAGE_DETAILS": "映像檔詳細資訊", + "DOCKER_VERSION": "Docker 版本", + "ARCHITECTURE": "架構", + "OS": "作業系統", + "OS_VERSION": "作業系統版本", + "HAVE": "有", + "HAS": "有", + "SCAN_COMPLETION_TIME": "掃描完成時間", + "IMAGE_VULNERABILITIES": "映像檔弱點", + "LEVEL_VULNERABILITIES": "弱點等級", + "PLACEHOLDER": "我們找不到任何標籤!", + "COPY_ERROR": "複製失敗,請嘗試手動複製。", + "FILTER_FOR_TAGS": "篩選標籤", + "AUTHOR": "作者", + "LABELS": "標籤", + "CREATION": "建立於", + "COMMAND": "指令", + "UPLOADTIME": "上傳時間", + "NAME": "名稱", + "PULL_TIME": "拉取時間", + "PUSH_TIME": "推送時間", + "OF": "的", + "ITEMS": "項目", + "ADD_TAG": "新增標籤", + "REMOVE_TAG": "移除標籤", + "NAME_ALREADY_EXISTS": "儲存庫下已存在此標籤" + }, + "LABEL": { + "LABEL": "標籤", + "DESCRIPTION": "描述", + "CREATION_TIME": "建立時間", + "NEW_LABEL": "新增標籤", + "EDIT": "編輯", + "DELETE": "刪除", + "LABEL_NAME": "標籤名稱", + "COLOR": "顏色", + "FILTER_LABEL_PLACEHOLDER": "篩選標籤", + "NO_LABELS": "無標籤", + "DELETION_TITLE_TARGET": "確認刪除標籤", + "DELETION_SUMMARY_TARGET": "您是否要刪除 {{param}} ?", + "PLACEHOLDER": "未找到任何標籤!", + "NAME_ALREADY_EXISTS": "標籤名稱已存在。" + }, + "QUOTA": { + "PROJECT": "專案", + "OWNER": "擁有者", + "COUNT": "數量", + "STORAGE": "儲存空間", + "EDIT": "編輯", + "DELETE": "刪除", + "OF": "共計", + "PROJECT_QUOTA_DEFAULT_ARTIFACT": "每個專案的預設 artifact 數量", + "PROJECT_QUOTA_DEFAULT_DISK": "每個專案的預設儲存配額", + "EDIT_PROJECT_QUOTAS": "修改專案配額", + "EDIT_DEFAULT_PROJECT_QUOTAS": "修改專案預設配額", + "SET_QUOTAS": "為專案「{{params}}」設定配額", + "SET_DEFAULT_QUOTAS": "建立新專案時設定預設配額", + "COUNT_QUOTA": "artifact 數量", + "COUNT_DEFAULT_QUOTA": "預設 artifact 數量", + "STORAGE_QUOTA": "專案儲存配額限制", + "STORAGE_DEFAULT_QUOTA": "預設儲存空間使用量", + "SAVE_SUCCESS": "配額編輯成功", + "UNLIMITED": "無限制", + "INVALID_INPUT": "輸入無效", + "PLACEHOLDER": "我們找不到任何專案配額", + "FILTER_PLACEHOLDER": "根據名稱搜尋(完全符合)", + "QUOTA_USED": "已使用配額" + }, + "WEEKLY": { + "MONDAY": "週一", + "TUESDAY": "週二", + "WEDNESDAY": "週三", + "THURSDAY": "週四", + "FRIDAY": "週五", + "SATURDAY": "週六", + "SUNDAY": "週日" + }, + "OPERATION": { + "LOCAL_EVENT": "本地事件", + "ALL": "全部", + "RUNNING": "執行中", + "FAILED": "失敗", + "STOP_EXECUTIONS": "停止執行", + "DELETE_PROJECT": "刪除專案", + "DELETE_REPO": "刪除儲存庫", + "DELETE_TAG": "刪除標籤", + "DELETE_USER": "刪除使用者", + "DELETE_ROBOT": "刪除機器人", + "DELETE_REGISTRY": "刪除 Registry", + "DELETE_REPLICATION": "刪除複製項目", + "DELETE_MEMBER": "刪除使用者成員", + "DELETE_GROUP": "刪除群組成員", + "DELETE_CHART_VERSION": "刪除 Helm Chart 版本", + "DELETE_CHART": "刪除 Helm Chart", + "SWITCH_ROLE": "切換角色", + "ADD_GROUP": "新增群組成員", + "ADD_USER": "新增使用者成員", + "DELETE_LABEL": "刪除標籤", + "REPLICATION": "複製", + "DAY_AGO": "天前", + "HOUR_AGO": "小時前", + "MINUTE_AGO": "分鐘前", + "SECOND_AGO": "不到一分鐘前", + "EVENT_LOG": "事件紀錄" + }, + "UNKNOWN_ERROR": "發生未知錯誤,請稍後再試。", + "UNAUTHORIZED_ERROR": "工作階段無效或者已經過期,請重新登入以繼續。", + "REPO_READ_ONLY": "Harbor 被設定為唯獨模式,在此模式下,不能刪除儲存庫、Tag 及推送映像檔。", + "FORBIDDEN_ERROR": "目前操作被禁止,請確認您有有效的權限。", + "GENERAL_ERROR": "呼叫後台服務時出現錯誤: {{param}} 。", + "BAD_REQUEST_ERROR": "錯誤請求,操作無法完成。", + "NOT_FOUND_ERROR": "對像不存在,請求無法完成。", + "CONFLICT_ERROR": "請求包含衝突,操作無法完成。", + "PRECONDITION_FAILED": "驗證前置條件失敗,無法執行操作。", + "SERVER_ERROR": "伺服器出現內部錯誤,請求無法完成。", + "INCONRRECT_OLD_PWD": "舊密碼不正確。", "UNKNOWN": "未知", - "UNKNOWN_TIP": "若值為「未知」,請透過身分驗證提供者系統確認該使用者是否為管理員身分。" - }, - "PROJECT": { - "PROJECTS": "專案", - "NAME": "專案名稱", - "ROLE": "角色", - "PUBLIC_OR_PRIVATE": "公開或私有", - "REPO_COUNT": "儲存庫數量", - "CHART_COUNT": "Helm Chart 數量", - "CREATION_TIME": "建立時間", - "ACCESS_LEVEL": "存取權限", - "PUBLIC": "公開", - "PRIVATE": "私有", - "MAKE": "建立", - "NEW_POLICY": "新增複製規則", - "DELETE": "刪除", - "ALL_PROJECTS": "所有專案", - "PRIVATE_PROJECTS": "私有專案", - "PUBLIC_PROJECTS": "公開專案", - "PROJECT": "專案", - "NEW_PROJECT": "新增專案", - "NAME_TOOLTIP": "專案名稱應由 1~255 個小寫字元、數字和 ._- 組成,並且必須以字母或數字開頭。", - "NAME_IS_REQUIRED": "專案名稱為必填。", - "NAME_ALREADY_EXISTS": "專案名稱已存在。", - "NAME_IS_ILLEGAL": "專案名稱無效。", - "UNKNOWN_ERROR": "建立專案時發生未知錯誤。", - "ITEMS": "筆紀錄", - "DELETION_TITLE": "確認移除專案", - "DELETION_SUMMARY": "您確定要刪除專案 {{param}} 嗎?", - "FILTER_PLACEHOLDER": "篩選專案", - "REPLICATION_RULE": "複製規則", - "CREATED_SUCCESS": "專案建立成功。", - "DELETED_SUCCESS": "專案刪除成功。", - "TOGGLED_SUCCESS": "專案切換成功。", - "FAILED_TO_DELETE_PROJECT": "由於專案包含儲存庫、複製規則或 helm-charts,無法刪除。", - "INLINE_HELP_PUBLIC": "當專案設為公開時,任何人都可讀取此專案下的儲存庫,使用者不需執行 \"docker login\" 即可拉取此專案下的映像檔。", - "PROXY_CACHE_BANDWIDTH":"Set the maximum network bandwidth to pull image from upstream for proxy-cache. For unlimited bandwidth, please enter -1. ", - "BANDWIDTH": "Bandwidth", - "SPEED_LIMIT_TIP": "Please enter -1 or an integer greater than 0. ", - "OF": "共計", - "COUNT_QUOTA": "數量配額", - "STORAGE_QUOTA": "儲存配額限制", - "COUNT_QUOTA_TIP": "請輸入介於 '1' 和 '100,000,000' 之間的整數,'-1' 表示無限制。", - "STORAGE_QUOTA_TIP": "儲存配額上限只接受整數,上限為 '1024TB'。輸入 '-1' 表示無限配額。", - "QUOTA_UNLIMIT_TIP": "專案所能使用的最大邏輯空間。輸入 '-1' 表示無限制配額。", - "TYPE": "類型", - "PROXY_CACHE": "代理快取", - "PROXY_CACHE_TOOLTIP": "啟用此選項可讓此專案作為特定目標 Registry 實例的拉取快取。Harbor 僅可作為 DockerHub、Docker Registry、Harbor、AWS ECR、Azure ACR、Alibaba Cloud ACR、Quay、Google GCR、GitHub GHCR 和 JFrog Artifactory Registry 的代理。", - "ENDPOINT": "端點", - "PROXY_CACHE_ENDPOINT": "代理快取端點", - "NO_PROJECT": "找不到任何專案" - }, - "PROJECT_DETAIL": { - "SUMMARY": "摘要", - "REPOSITORIES": "儲存庫", - "REPLICATION": "複製", - "USERS": "成員", - "LOGS": "日誌", - "LABELS": "標籤", - "PROJECTS": "專案", - "CONFIG": "設定", - "HELMCHART": "Helm Chart", - "ROBOT_ACCOUNTS": "機器人帳號", - "WEBHOOKS": "Webhooks", - "IMMUTABLE_TAG": "不可變標籤", - "POLICY": "原則" - }, - "PROJECT_CONFIG": { - "REGISTRY": "專案儲存庫", - "PUBLIC_TOGGLE": "公開", - "PUBLIC_POLICY": "將專案儲存庫設為公開會讓所有人都能夠存取所有儲存庫。", - "SECURITY": "部署安全", - "CONTENT_TRUST_TOGGLE": "啟用內容信任", - "CONTENT_TRUST_POLCIY": "只允許部署已驗證的映像檔。", - "PREVENT_VULNERABLE_TOGGLE": "阻止有弱點的映像檔執行。", - "PREVENT_VULNERABLE_1": "阻止具有", - "PREVENT_VULNERABLE_2": "或更高危險級別的映像檔部署。", - "SCAN": "弱點掃描", - "AUTOSCAN_TOGGLE": "推送時自動掃描映像檔", - "AUTOSCAN_POLICY": "當映像檔推送到專案儲存庫時自動掃描。", - "SBOM": "SBOM generation", - "AUTOSBOM_TOGGLE": "Automatically generate SBOM on push", - "AUTOSBOM_POLICY": "Automatically generate SBOM when the images are pushed to the project registry." - }, - "MEMBER": { - "NEW_USER": "新增使用者成員", - "NEW_MEMBER": "新增成員", - "MEMBER": "成員", - "NAME": "名稱", - "EMAIL": "電子郵件", - "ROLE": "角色", - "SYS_ADMIN": "系統管理員", - "PROJECT_ADMIN": "專案管理員", - "PROJECT_MAINTAINER": "專案維護者", - "DEVELOPER": "開發人員", - "GUEST": "訪客", - "LIMITED_GUEST": "受限制的訪客", - "DELETE": "刪除", - "ITEMS": "筆紀錄", - "ACTIONS": "操作", - "USER": "使用者", - "USERS": "使用者", - "ADD_USER": "新增使用者", - "NEW_USER_INFO": "將使用者新增為此專案的成員並指定角色", - "NEW_GROUP": "新增群組", - "IMPORT_GROUP": "加入群組成員", - "NEW_GROUP_INFO": "新增現有的使用者群組或從 LDAP/AD 選擇專案成員", - "ADD_GROUP_SELECT": "將現有群組新增至專案成員", - "CREATE_GROUP_SELECT": "從 LDAP 新增群組至專案成員", - "LDAP_SEARCH_DN": "LDAP 群組 DN", - "LDAP_SEARCH_NAME": "名稱", - "LDAP_GROUP": "群組", - "LDAP_GROUPS": "群組", - "LDAP_PROPERTY": "屬性", - "ACTION": "操作", - "MEMBER_TYPE": "成員類型", - "GROUP_TYPE": "群組", - "USER_TYPE": "使用者", - "USERNAME_IS_REQUIRED": "使用者名稱必填。", - "USERNAME_DOES_NOT_EXISTS": "使用者名稱不存在。", - "USERNAME_ALREADY_EXISTS": "使用者名稱已存在。", - "UNKNOWN_ERROR": "新增成員時發生未知錯誤。", - "FILTER_PLACEHOLDER": "篩選成員", - "DELETION_TITLE": "確認刪除專案成員", - "DELETION_SUMMARY": "您確認刪除專案成員 {{param}} 嗎?", - "ADDED_SUCCESS": "成員新增成功。", - "DELETED_SUCCESS": "成員刪除成功。", - "SWITCHED_SUCCESS": "成員角色切換成功。", - "OF": "共", - "SWITCH_TITLE": "確認切換專案成員", - "SWITCH_SUMMARY": "您確認切換專案成員 {{param}} 嗎?", - "SET_ROLE": "設定角色", - "REMOVE": "移除", - "GROUP_NAME_REQUIRED": "群組名稱必填。", - "NON_EXISTENT_GROUP": "群組名稱不存在。", - "GROUP_ALREADY_ADDED": "群組名稱已被新增至此專案。" - }, - "ROBOT_ACCOUNT": { - "NAME": "名稱", - "PERMISSIONS": "權限", - "TOKEN": "權杖", - "NEW_ROBOT_ACCOUNT": "新增機器人帳號", - "ENABLED_STATE": "啟用狀態", - "NUMBER_REQUIRED": "此欄位必須填寫不為 0 的整數。", - "DESCRIPTION": "描述", - "CREATION": "建立時間", - "EXPIRATION": "過期時間", - "TOKEN_EXPIRATION": "機器人權杖到期時間(天)", - "ACTION": "操作", - "EDIT": "編輯", - "ITEMS": "筆", - "OF": "共計", - "DISABLE_ACCOUNT": "停用帳號", - "ENABLE_ACCOUNT": "啟用帳號", - "DELETE": "刪除", - "CREAT_ROBOT_ACCOUNT": "建立機器人帳號", - "PERMISSIONS_ARTIFACT": "Artifact", - "PERMISSIONS_HELMCHART": "Helm Chart(Chart 儲存庫)", - "PUSH": "推送", - "PULL": "拉取", - "FILTER_PLACEHOLDER": "篩選機器人帳號", - "ROBOT_NAME": "不能包含特殊字元(~#$%)且長度不能超過 255 個字元。", - "ACCOUNT_EXISTING": "機器人帳號已存在。", - "ALERT_TEXT": "這是唯一一次複製此密鑰的機會,您將無法再次複製。", - "CREATED_SUCCESS": "成功建立 '{{param}}'。", - "COPY_SUCCESS": "成功複製 '{{param}}' 的權杖", - "DELETION_TITLE": "確認移除機器人帳號", - "DELETION_SUMMARY": "您是否要刪除機器人帳號 {{param}}?", - "PULL_IS_MUST": "拉取權限預設已勾選,不可修改。", - "EXPORT_TO_FILE": "匯出至檔案", - "EXPIRES_AT": "到期日", - "EXPIRATION_TOOLTIP": "如不設定,將採用系統設定中的過期時間。", - "INVALID_VALUE": "無效的過期日期", - "NEVER_EXPIRED": "永不過期", - "NAME_PREFIX": "機器人名稱前綴", - "NAME_PREFIX_REQUIRED": "機器人名稱前綴為必填項目", - "UPDATE": "Update", - "AUDIT_LOG": "Audit Log", - "PREHEAT_INSTANCE": "Preheat Instance", - "PROJECT": "Project", - "REPLICATION_POLICY": "Replication Policy", - "REPLICATION": "Replication", - "REPLICATION_ADAPTER": "Replication Adapter", - "REGISTRY": "Registry", - "SCAN_ALL": "Scan All", - "SYSTEM_VOLUMES": "System Volumes", - "GARBAGE_COLLECTION": "Garbage Collection", - "PURGE_AUDIT": "Purge Audit", - "JOBSERVICE_MONITOR": "Job Service Monitor", - "TAG_RETENTION": "Tag Retention", - "SCANNER": "Scanner", - "LABEL": "Label", - "EXPORT_CVE": "Export CVE", - "SECURITY_HUB": "Security Hub", - "CATALOG": "Catalog", - "METADATA": "Project Metadata", - "REPOSITORY": "Repository", - "ARTIFACT": "Artifact", - "SCAN": "Scan", - "SBOM": "SBOM", - "TAG": "Tag", - "ACCESSORY": "Accessory", - "ARTIFACT_ADDITION": "Artifact Addition", - "ARTIFACT_LABEL": "Artifact Label", - "PREHEAT_POLICY": "Preheat Policy", - "IMMUTABLE_TAG": "Immutable Tag", - "LOG": "Log", - "NOTIFICATION_POLICY": "Notification Policy", - "QUOTA": "Quota", - "BACK": "Back", - "NEXT": "Next", - "FINISH": "Finish", - "BASIC_INFO": "Basic Information", - "SELECT_PERMISSIONS": "Select Permissions", - "SELECT_SYSTEM_PERMISSIONS": "Select System Permissions", - "SELECT_PROJECT_PERMISSIONS": "Select Project Permissions", - "SYSTEM_PERMISSIONS": "System Permissions", - "ROBOT": "Robot Account", - "USER": "User", - "LDAPUSER": "LDAP User", - "GROUP": "User Group", - "MEMBER": "Project Member" - }, - "WEBHOOK": { - "EDIT_BUTTON": "編輯", - "ENABLED_BUTTON": "啟用", - "DISABLED_BUTTON": "停用", - "TYPE": "Webhook", "STATUS": "狀態", - "CREATED": "建立時間", - "ENABLED": "啟用", - "DISABLED": "停用", - "OF": "共計", - "ITEMS": "筆紀錄", - "LAST_TRIGGERED": "最近觸發時間", - "EDIT_WEBHOOK": "編輯 Webhook", - "ADD_WEBHOOK": "新增 Webhook", - "CREATE_WEBHOOK": "建立 Webhooks", - "EDIT_WEBHOOK_DESC": "指定接收 Webhook 通知的目標", - "CREATE_WEBHOOK_DESC": "為了啟用 webhook,請提供 Endpoint 和憑證以存取 Webhook 伺服器。", - "VERIFY_REMOTE_CERT_TOOLTIP": "勾選此框表示 Webhook 需要驗證遠端網址的憑證。當遠端網址使用自我簽署或不受信任的憑證時,請取消選擇。", - "ENDPOINT_URL": "Endpoint 位址", - "URL_IS_REQUIRED": "Endpoint 位址必填", - "AUTH_HEADER": "驗證標頭", - "VERIFY_REMOTE_CERT": "驗證遠端憑證", - "TEST_ENDPOINT_BUTTON": "測試 Endpoint", - "CANCEL_BUTTON": "取消", - "SAVE_BUTTON": "儲存", - "TEST_ENDPOINT_SUCCESS": "測試連接成功。", - "TEST_ENDPOINT_FAILURE": "測試連接失敗。", - "ENABLED_WEBHOOK_TITLE": "啟用 Webhook", - "ENABLED_WEBHOOK_SUMMARY": "確認啟用 webhook {{name}}?", - "DISABLED_WEBHOOK_TITLE": "停用 Webhook", - "DISABLED_WEBHOOK_SUMMARY": "確認停用 webhook {{name}}?", - "DELETE_WEBHOOK_TITLE": "刪除 Webhook", - "DELETE_WEBHOOK_SUMMARY": "確認刪除 webhook(s) {{names}}?", - "WEBHOOKS": "Webhooks", - "NEW_WEBHOOK": "新增 Webhook", - "ENABLE": "啟用", - "DISABLE": "停用", - "NAME": "名稱", - "TARGET": "目標位址", - "EVENT_TYPES": "事件類型", - "DESCRIPTION": "簡介", - "NO_WEBHOOK": "暫無 Webhook 紀錄", - "LAST_TRIGGER": "最新觸發", - "WEBHOOK_NAME": "Webhook 名稱", - "NO_TRIGGER": "暫無觸發記錄", - "NAME_REQUIRED": "名稱必填", - "NOTIFY_TYPE": "通知類型", - "EVENT_TYPE": "事件類型", - "EVENT_TYPE_REQUIRED": "請至少選擇一種事件類型", - "PAYLOAD_FORMAT": "Payload 格式", - "CLOUD_EVENT": "CloudEvents", - "PAYLOAD_DATA": "Payload 資料", - "SLACK_RATE_LIMIT": "請注意 Slack 的速率限制" - }, - "GROUP": { - "GROUP": "群組", - "GROUPS": "群組", - "IMPORT_LDAP_GROUP": "匯入 LDAP 群組", - "IMPORT_HTTP_GROUP": "新增 HTTP 群組", - "IMPORT_OIDC_GROUP": "新增 OIDC 群組", - "ADD": "新增", - "EDIT": "編輯", - "DELETE": "刪除", - "NAME": "名稱", - "TYPE": "類型", - "DN": "DN", - "PROPERTY": "屬性", - "GROUP_DN": "LDAP 群組 DN", - "REG_TIME": "註冊時間", - "ADD_GROUP_SUCCESS": "新增群組成功", - "EDIT_GROUP_SUCCESS": "編輯群組成功", - "LDAP_TYPE": "LDAP", - "HTTP_TYPE": "HTTP", - "OIDC_TYPE": "OIDC", - "OF": "共計", - "ITEMS": "筆紀錄", - "NEW_MEMBER": "新增群組成員", - "NEW_USER_INFO": "將群組以指定角色新增為此專案的成員", - "ROLE": "角色", - "SYS_ADMIN": "系統管理員", - "PROJECT_ADMIN": "專案管理員", - "PROJECT_MAINTAINER": "維護人員", - "DEVELOPER": "開發人員", - "GUEST": "訪客", - "LIMITED_GUEST": "受限的訪客", - "DELETION_TITLE": "確認刪除群組成員", - "DELETION_SUMMARY": "您是否要刪除群組成員 {{param}}?" - }, - "AUDIT_LOG": { - "USERNAME": "使用者名稱", - "REPOSITORY_NAME": "儲存庫名稱", - "TAGS": "標籤", - "OPERATION": "操作", - "OPERATIONS": "操作", - "TIMESTAMP": "時間戳記", - "ALL_OPERATIONS": "所有操作", - "PULL": "拉取", - "PUSH": "推送", - "CREATE": "建立", - "DELETE": "刪除", - "OTHERS": "其他", - "ADVANCED": "進階搜尋", - "SIMPLE": "簡易搜尋", - "ITEMS": "筆紀錄", - "FILTER_PLACEHOLDER": "篩選日誌", - "INVALID_DATE": "無效日期。", - "OF": "共計", - "NOT_FOUND": "未發現任何日誌!", - "RESOURCE": "資源", - "RESOURCE_TYPE": "資源類型" - }, - "REPLICATION": { - "PUSH_BASED_ONLY": "Only for the push-based replication", - "YES": "是", - "SECONDS": "秒", - "MINUTES": "分鐘", - "HOURS": "小時", - "MONTH": "月", - "DAY_MONTH": "一個月的某天", - "DAY_WEEK": "一週的的某天", - "CRON_TITLE": "cron 格式說明 '* * * * * *'。cron 字串是基於 UTC 時間", - "FIELD_NAME": "欄位名稱", - "MANDATORY": "是否必填?", - "ALLOWED_VALUES": "允許的值", - "ALLOWED_CHARACTERS": "允許的特殊字元", - "TOTAL": "總計", - "OVERRIDE": "覆蓋", - "ENABLED_RULE": "啟用規則", - "OVERRIDE_INFO": "覆蓋", - "OPERATION": "操作", - "CURRENT": "目前", - "FILTER_PLACEHOLDER": "篩選工作", - "STOP_TITLE": "確認停止執行", - "BOTH": "兩者", - "STOP_SUCCESS": "成功停止執行 {{param}}", - "STOP_SUMMARY": "您確定要停止執行 {{param}} 嗎?", - "TASK_ID": "工作 ID", - "RESOURCE_TYPE": "資源類型", - "SOURCE": "來源", - "DESTINATION": "目標", - "POLICY": "原則", - "DURATION": "持續時間", - "SUCCESS_RATE": "成功率", - "SUCCESS": "成功", - "FAILURE": "失敗", - "IN_PROGRESS": "進行中", - "REPLICATION_RULE": "複製規則", - "NEW_REPLICATION_RULE": "新複製規則", - "ENDPOINTS": "端點", - "FILTER_POLICIES_PLACEHOLDER": "篩選規則", - "FILTER_EXECUTIONS_PLACEHOLDER": "篩選執行", - "DELETION_TITLE": "確認刪除複製規則", - "DELETION_SUMMARY": "您確定要刪除複製規則 {{param}} 嗎?", - "REPLICATION_TITLE": "確認規則複製", - "REPLICATION_SUMMARY": "您確定要複製規則 {{param}} 嗎?", - "DELETION_TITLE_FAILURE": "刪除規則確認失敗", - "DELETION_SUMMARY_FAILURE": "有待處理/執行中/重試中的狀態,無法刪除", - "REPLICATE_SUMMARY_FAILURE": "有待處理/執行中的狀態,無法刪除", - "FILTER_TARGETS_PLACEHOLDER": "篩選端點", - "DELETION_TITLE_TARGET": "確認刪除端點", - "DELETION_SUMMARY_TARGET": "您確定要刪除端點 {{param}} 嗎?", - "ADD_POLICY": "新增複製規則", - "EDIT_POLICY": "編輯", - "EDIT_POLICY_TITLE": "編輯複製規則", - "DELETE_POLICY": "刪除", - "TEST_CONNECTION": "測試連線", - "TESTING_CONNECTION": "正在測試連線...", - "TEST_CONNECTION_SUCCESS": "連線測試成功。", - "TEST_CONNECTION_FAILURE": "連線測試失敗。", - "ID": "ID", - "NAME": "名稱", - "NAME_IS_REQUIRED": "名稱是必填的。", - "DESCRIPTION": "描述", - "ENABLE": "啟用", - "DISABLE": "停用", - "REPLICATION_MODE": "複製模式", - "SRC_REGISTRY": "來源 Registry", - "DESTINATION_NAMESPACE": "目標 Registry:命名空間", - "DESTINATION_NAME_IS_REQUIRED": "目標名稱是必填的。", - "NEW_DESTINATION": "新端點", - "DESTINATION_URL": "端點 URL", - "DESTINATION_URL_IS_REQUIRED": "端點 URL 是必填的。", - "DESTINATION_USERNAME": "使用者名稱", - "DESTINATION_PASSWORD": "密碼", - "ALL_STATUS": "所有狀態", - "ENABLED": "已啟用", - "DISABLED": "已停用", - "LAST_START_TIME": "上次開始時間", - "ACTIVATION": "啟動", - "REPLICATION_EXECUTION": "執行", - "REPLICATION_EXECUTIONS": "執行", - "STOPJOB": "停止", - "ALL": "全部", - "PENDING": "待處理", + "START_TIME": "建立時間", + "UPDATE_TIME": "更新時間", + "LOGS": "日誌", + "PENDING": "未開始", + "FINISHED": "已完成", + "STOPPED": "已停止", "RUNNING": "執行中", "ERROR": "錯誤", - "RETRYING": "正在重試", - "STOPPED": "已停止", - "FINISHED": "已完成", - "CANCELED": "已取消", - "SIMPLE": "簡單", - "ADVANCED": "進階", - "STATUS": "狀態", - "REPLICATION_TRIGGER": "觸發", - "CREATION_TIME": "建立時間", - "UPDATE_TIME": "更新時間", - "END_TIME": "結束時間", - "LOGS": "日誌", - "OF": "筆紀錄", - "ITEMS": "筆紀錄", - "NO_LOGS": "沒有日誌", - "TOGGLE_ENABLE_TITLE": "啟用規則", - "TOGGLE_DISABLE_TITLE": "停用規則", - "CREATED_SUCCESS": "成功建立複製規則。", - "UPDATED_SUCCESS": "成功更新複製規則。", - "DELETED_SUCCESS": "成功刪除複製規則。", - "DELETED_FAILED": "刪除複製規則失敗。", - "TOGGLED_SUCCESS": "成功切換複製規則狀態。", - "CANNOT_EDIT": "當複製規則啟用時,無法修改。", - "INVALID_DATE": "無效的日期。", - "PLACEHOLDER": "我們找不到任何複製規則!", - "JOB_PLACEHOLDER": "我們找不到任何複製工作!", - "NO_ENDPOINT_INFO": "請先新增端點", - "NO_LABEL_INFO": "請先新增標籤", - "NO_PROJECT_INFO": "此專案不存在", - "SOURCE_RESOURCE_FILTER": "來源資源篩選器", - "SCHEDULED": "已排程", - "MANUAL": "手動", - "EVENT_BASED": "事件驅動", - "DAILY": "每天", - "WEEKLY": "每週", - "SETTING": "選項", - "TRIGGER": "觸發條件", - "TARGETS": "目標", - "MODE": "模式", - "TRIGGER_MODE": "觸發模式", - "SOURCE_PROJECT": "來源專案", - "REPLICATE": "複製", - "DELETE_REMOTE_IMAGES": "當本地資源被刪除時,同時刪除遠端的資源。", - "DELETE_ENABLED": "預設啟用此規則", - "NEW": "新增", - "NAME_TOOLTIP": "複製規則名稱應由小寫字元、數字和 ._- 組成,且至少有 2 個字元,並且必須以字元或數字開頭。", - "DESTINATION_NAME_TOOLTIP": "目標名稱應由小寫字元、數字和 ._- 組成,且至少有 2 個字元,並且必須以字元或數字開頭。", - "ACKNOWLEDGE": "確認", - "RULE_DISABLED": "此規則已被停用,因為其篩選器中使用的標籤已被刪除。請編輯規則並更新其篩選器以啟用它。", - "REPLI_MODE": "複製模式", - "SOURCE_REGISTRY": "來源 Registry", - "SOURCE_NAMESPACES": "來源命名空間", - "DEST_REGISTRY": "目的 Registry", - "DEST_NAMESPACE": "目的命名空間", - "NAMESPACE_TOOLTIP": "命名空間名稱應由小寫字元、數字和 ._-/ 組成,且至少有 2 個字元,並且必須以字元或數字開頭。", - "TAG": "標籤", - "LABEL": "標籤", - "RESOURCE": "資源", - "ENABLE_TITLE": "啟用規則", - "ENABLE_SUMMARY": "您確定要啟用規則 {{param}} 嗎?", - "DISABLE_TITLE": "停用規則", - "DISABLE_SUMMARY": "您確定要停用規則 {{param}} 嗎?", - "ENABLE_SUCCESS": "成功啟用規則", - "ENABLE_FAILED": "啟用規則失敗", - "DISABLE_SUCCESS": "成功停用規則", - "DISABLE_FAILED": "停用規則失敗", - "DES_REPO_FLATTENING": "目標儲存庫平整化", - "NAMESPACE": "命名空間", - "REPO_FLATTENING": "平整化", - "NO_FLATTING": "無平整化", - "FLATTEN_LEVEL_1": "平整化 1 等級", - "FLATTEN_LEVEL_2": "平整化 2 等級", - "FLATTEN_LEVEL_3": "平整化 3 等級", - "FLATTEN_ALL": "平整所有等級", - "FLATTEN_LEVEL_TIP": "在複製映像檔時降低巢狀的儲存庫結構。假設巢狀的儲存庫結構為 'a/b/c/d/img' 並且目標命名空間為 'ns',每個項目的對應結果如下:", - "FLATTEN_LEVEL_TIP_ALL": "'平整所有等級'(在 v2.3 之前使用):'a/b/c/d/img' -> 'ns/img'", - "FLATTEN_LEVEL_TIP_NO": "'無平整化': 'a/b/c/d/img' -> 'ns/a/b/c/d/img", - "FLATTEN_LEVEL_TIP_1": "'平整化 1 等級'(預設):'a/b/c/d/img' -> 'ns/b/c/d/img'", - "FLATTEN_LEVEL_TIP_2": "'平整化 2 等級': 'a/b/c/d/img' -> 'ns/c/d/img'", - "FLATTEN_LEVEL_TIP_3": "'平整化 3 等級': 'a/b/c/d/img' -> 'ns/d/img'", - "BANDWIDTH": "頻寬", - "BANDWIDTH_ERROR_TIP": "請輸入 -1 或大於 0 的整數", - "BANDWIDTH_TOOLTIP": "Set the maximum network bandwidth for each replication worker. Please pay attention to the number of concurrent executions (max. {{max_job_workers}}). For unlimited bandwidth, please enter -1.", - "UNLIMITED": "無限制", - "UNREACHABLE_SOURCE_REGISTRY": "無法連線到來源 Registry,請在編輯此規則之前確保來源 Registry 可用: {{error}}", - "CRON_ERROR_TIP": "cron 字串的第一個欄位必須是 0,第二個欄位不能是 \"*\"", - "COPY_BY_CHUNK": "分段複製", - "COPY_BY_CHUNK_TIP": "指定是否按分段複製 blob。分段傳輸可能會增加 API 請求的數量。", - "TRIGGER_STOP_SUCCESS": "成功觸發停止執行", - "CRON_STR": "Cron 字串" - }, - "DESTINATION": { - "NEW_ENDPOINT": "新增端點", - "PROVIDER": "提供者", - "ENDPOINT": "端點", - "NAME": "端點名稱", - "NAME_IS_REQUIRED": "端點名稱必填。", - "URL": "端點 URL", - "URL_IS_REQUIRED": "端點 URL 必填。", - "AUTHENTICATION": "認證", - "ACCESS_ID": "存取 ID", - "ACCESS_SECRET": "存取密碼", - "STATUS": "狀態", - "TEST_CONNECTION": "測試連線", - "TITLE_EDIT": "編輯端點", - "TITLE_ADD": "新增端點", - "EDIT": "編輯", - "DELETE": "刪除", - "TESTING_CONNECTION": "正在測試連線...", - "TEST_CONNECTION_SUCCESS": "連線測試成功。", - "TEST_CONNECTION_FAILURE": "連線測試失敗。", - "CONFLICT_NAME": "端點名稱已存在。", - "INVALID_NAME": "無效的端點名稱。", - "FAILED_TO_GET_TARGET": "取得端點失敗。", - "CREATION_TIME": "建立時間", - "OF": "共計", - "ITEMS": "筆紀錄", - "CREATED_SUCCESS": "成功建立端點。", - "UPDATED_SUCCESS": "成功更新端點。", - "DELETED_SUCCESS": "成功刪除端點。", - "DELETED_FAILED": "刪除端點失敗。", - "CANNOT_EDIT": "當複製規則啟用時,端點無法修改。", - "FAILED_TO_DELETE_TARGET_IN_USED": "無法刪除正在使用的端點。", - "PLACEHOLDER": "未找到任何端點!" - }, - "REPOSITORY": { - "COPY_DIGEST_ID": "複製 Digest", - "DELETE": "刪除", - "NAME": "名稱", - "TAGS": "標籤", - "PLATFORM": "OS / ARCH", - "ARTIFACT_TOOTIP": "點選此圖示進入引用的 Artifact 列表", - "ARTIFACTS_COUNT": "Artifact 數量", - "PULL_COUNT": "下載數", - "PULL_COMMAND": "Pull 命令", - "PULL_TIME": "拉取時間", - "PUSH_TIME": "推送時間", - "IMMUTABLE": "不可變的", - "MY_REPOSITORY": "我的儲存庫", - "PUBLIC_REPOSITORY": "公共儲存庫", - "DELETION_TITLE_REPO": "刪除映像檔儲存庫確認", - "DELETION_TITLE_REPO_SIGNED": "儲存庫不能被刪除", - "DELETION_SUMMARY_REPO_SIGNED": "映像檔儲存庫'{{repoName}}' 不能被刪除,因為存在以下簽署映像檔.\n{{signedImages}} \n在刪除映像檔儲存庫前需先刪除所有的簽署映像檔", - "DELETION_SUMMARY_REPO": "確認刪除映像檔儲存庫{{repoName}}?", - "DELETION_TITLE_ARTIFACT": "刪除映像檔 Artifact 確認", - "DELETION_SUMMARY_ARTIFACT": "確認刪除映像檔 Artifact {{param}} ? 如果您刪除此 Artifact,則這個 Digest 的所有標籤也將被刪除。", - "DELETION_TITLE_TAG": "刪除 Tag 確認", - "DELETION_SUMMARY_TAG": "確認刪除Tag {{param}} ?", - "DELETION_TITLE_TAG_DENIED": "已簽署的映像檔不能被刪除", - "DELETION_SUMMARY_TAG_DENIED": "要刪除此映像檔 Tag 必須首先從 Notary 中刪除。\n請執行如下Notary 命令刪除:\n", - "TAGS_NO_DELETE": "在唯獨模式下刪除是被禁止的", - "FILTER_FOR_REPOSITORIES": "篩選映像檔儲存庫", - "TAG": "標籤", - "ARTIFACT": "Artifact", - "ARTIFACTS": "Artifacts", - "SIZE": "大小", - "VULNERABILITY": "弱點", - "SBOM": "SBOM", - "BUILD_HISTORY": "建置歷史", - "SIGNED": "已簽署", - "AUTHOR": "作者", - "CREATED": "建立時間", - "DOCKER_VERSION": "Docker 版本", - "ARCHITECTURE": "架構", - "OS": "作業系統", - "SHOW_DETAILS": "顯示詳細資訊", - "REPOSITORIES": "映像檔儲存庫", - "OF": "共計", - "ITEMS": "筆紀錄", - "NO_ITEMS": "沒有記錄", - "POP_REPOS": "受歡迎的映像檔儲存庫", - "DELETED_REPO_SUCCESS": "成功刪除映像檔儲存庫。", - "DELETED_TAG_SUCCESS": "成功刪除映像檔 Tag。", - "COPY": "複製", - "NOTARY_IS_UNDETERMINED": "無法確定映像檔 Tag 簽名。", - "PLACEHOLDER": "未發現任何映像檔庫!", - "INFO": "描述資訊", - "NO_INFO": "此映像檔儲存庫沒有描述資訊", - "IMAGE": "映像檔", - "LABELS": "標籤", - "ADD_LABEL_TO_IMAGE": "新增標籤到此映像檔", - "ADD_LABELS": "新增標籤", - "STOP": "Stop", - "RETAG": "複製", - "FILTER_BY_LABEL": "篩選標籤", - "FILTER_ARTIFACT_BY_LABEL": "透過標籤篩選 Artifact", - "ACTION": "操作", - "DEPLOY": "部署", - "ADDITIONAL_INFO": "新增資訊", - "REPO_NAME": "映像檔儲存庫", - "MARKDOWN": "支援使用 Markdown 進行樣式設定", - "LAST_MODIFIED": "最後修改時間" - }, - "SUMMARY": { - "QUOTAS": "配額", - "PROJECT_REPOSITORY": "儲存庫", - "PROJECT_MEMBER": "成員", - "PROJECT_QUOTAS": "配額", - "ARTIFACT_COUNT": "Artifact 數量", - "STORAGE_CONSUMPTION": "儲存空間使用量", - "ADMIN": "管理員", - "MAINTAINER": "維護人員", - "DEVELOPER": "開發者", - "GUEST": "訪客", - "LIMITED_GUEST": "受限制的訪客", - "SEE_ALL": "檢視全部" - }, - "ALERT": { - "FORM_CHANGE_CONFIRMATION": "部分變更尚未儲存。確認是否取消?" - }, - "RESET_PWD": { - "TITLE": "重設密碼", - "CAPTION": "輸入您的電子郵件以重設密碼", - "EMAIL": "電子郵件", - "SUCCESS": "包含重設密碼連結的郵件已成功寄出。您可以關閉此對話框並檢查您的收件匣。", - "CAPTION2": "輸入您的新密碼", - "RESET_OK": "密碼已成功重設。點選「確定」以使用新密碼登入。" - }, - "RECENT_LOG": { - "SUB_TITLE": "顯示", - "SUB_TITLE_SUFIX": "筆日誌" - }, - "CONFIG": { - "SECURITY": "安全性", - "TITLE": "設定", - "AUTH": "認證", - "REPLICATION": "複製", - "LABEL": "標籤", - "REPOSITORY": "儲存庫", - "REPO_READ_ONLY": "儲存庫唯讀", - "WEBHOOK_NOTIFICATION_ENABLED": "啟用 Webhook", - "SYSTEM": "系統設定", - "PROJECT_QUOTAS": "專案配額", - "VULNERABILITY": "弱點", - "GC": "垃圾回收", - "CONFIRM_TITLE": "確認取消", - "CONFIRM_SUMMARY": "有些變更尚未儲存,您確定要捨棄它們嗎?", - "SAVE_SUCCESS": "設定已成功儲存。", - "VERIFY_REMOTE_CERT": "驗證遠端憑證", - "TOKEN_EXPIRATION": "權杖到期時間(分鐘)", - "SESSION_TIMEOUT": "工作階段逾時(分鐘)", - "SESSION_TIMEOUT_INFO": "設定 Harbor UI 的工作階段逾時時間。預設值為 60 分鐘。", - "AUTH_MODE": "認證模式", - "PRIMARY_AUTH_MODE": "主要認證模式", - "PRO_CREATION_RESTRICTION": "專案建立限制", - "SELF_REGISTRATION": "允許自助註冊", - "AUTH_MODE_DB": "資料庫", - "AUTH_MODE_LDAP": "LDAP", - "AUTH_MODE_UAA": "UAA", - "AUTH_MODE_HTTP": "Http 認證", - "AUTH_MODE_OIDC": "OIDC", - "SCOPE_BASE": "基礎", - "SCOPE_ONE_LEVEL": "一層", - "SCOPE_SUBTREE": "子樹", - "PRO_CREATION_EVERYONE": "所有人", - "PRO_CREATION_ADMIN": "僅限管理員", - "ROOT_CERT": "Registry 根憑證", - "ROOT_CERT_LINK": "下載", - "REGISTRY_CERTIFICATE": "Registry 憑證", - "NO_CHANGE": "因為沒有變更,所以儲存已中止", - "SKIP_SCANNER_PULL_TIME": "在掃描時保留映像檔「最後拉取時間」", - "TOOLTIP": { - "SELF_REGISTRATION_ENABLE": "啟用註冊。", - "SELF_REGISTRATION_DISABLE": "停用註冊。", - "VERIFY_REMOTE_CERT": "確定映像檔複製是否需要驗證遠端 Harbor Registry的憑證。當遠端 Registry 使用自簽或不受信任的憑證時,請取消勾選此框。", - "AUTH_MODE": "預設的認證模式是資料庫,即憑證儲存在本地資料庫中。如果您希望對使用者的憑證進行 LDAP 伺服器驗證,請將其設定為 LDAP。", - "PRIMARY_AUTH_MODE": "此認證模式將成為使用者登入的預設方式。當使用者選擇透過身份提供者或本地資料庫登入的登入畫面時,將自動將使用者重新導向到此身份提供者。當訪問 URL '/account/sign-in' 時,可以透過資料庫登入。", - "LDAP_SEARCH_DN": "具有搜尋 LDAP/AD 伺服器權限的使用者的 DN。如果您的 LDAP/AD 伺服器不支援匿名搜尋,則應設定此 DN 和 ldap_search_pwd。", - "LDAP_BASE_DN": "在 LDAP/AD 中查詢使用者的基礎 DN。", - "LDAP_UID": "在搜尋中用來選取使用者的屬性。它可以是 uid、cn、email、sAMAccountName 或其他相依於您的 LDAP/AD 的屬性。", - "LDAP_SCOPE": "搜尋使用者的範圍。", - "TOKEN_EXPIRATION": "由權杖服務建立的權杖的到期時間(以分鐘為單位)。預設值為 30 分鐘。", - "ROBOT_NAME_PREFIX": "每個機器人名稱的前綴字串,預設值為 'robot$'", - "ROBOT_TOKEN_EXPIRATION": "機器人帳號的權杖的到期時間(以天為單位),預設值為 30 天。顯示從分鐘轉換成的天數並向下取整數。", - "PRO_CREATION_RESTRICTION": "用於定義哪些使用者有權限建立專案。預設情況下,所有人都可以建立專案。設定為 '僅限管理員',則只有管理員可以建立專案。", - "ROOT_CERT_DOWNLOAD": "下載 Registry 的根憑證。", - "SCANNING_POLICY": "根據不同的需求設定映像檔掃描原則。'無':沒有活動原則;'每日定時':每天在指定時間觸發掃描。", - "VERIFY_CERT": "驗證來自 LDAP 伺服器的憑證", - "REPO_TOOLTIP": "在此模式下,使用者無法對映像檔進行任何操作。", - "WEBHOOK_TOOLTIP": "當執行某些操作(如推送、拉取、刪除、掃描映像檔或 Helm Chart)時,啟用 webhooks 以在指定的端點接收回撥", - "HOURLY_CRON": "每小時開始時執行一次。相當於 0 0 * * * *。", - "WEEKLY_CRON": "每週執行一次,週六/週日凌晨之間。相當於 0 0 0 * * 0。", - "DAILY_CRON": "每天凌晨執行一次。相當於 0 0 0 * * *。", - "SKIP_SCANNER_PULL_TIME_TOOLTIP": "弱點掃描器(例如 Trivy)在掃描映像檔時不會更新映像檔的「最後拉取時間」。" + "SCHEDULE": { + "NONE": "無", + "DAILY": "每天", + "WEEKLY": "每週", + "HOURLY": "每小時", + "CUSTOM": "自定義", + "MANUAL": "手動", + "SCHEDULE": "已排程", + "CRON": "定時", + "ON": "於", + "AT": "在", + "NOSCHEDULE": "取得排程時出現錯誤" }, - "LDAP": { - "URL": "LDAP 網址", - "SEARCH_DN": "LDAP 搜尋 DN", - "SEARCH_PWD": "LDAP 搜尋密碼", - "BASE_DN": "LDAP 基礎 DN", - "FILTER": "LDAP 篩選器", - "UID": "LDAP 使用者 UID", - "SCOPE": "LDAP 搜尋範圍", - "VERIFY_CERT": "驗證 LDAP 憑證", - "LDAP_GROUP_BASE_DN": "LDAP 群組基礎 DN", - "LDAP_GROUP_BASE_DN_INFO": "在 LDAP/AD 中查詢群組的基礎 DN。如果您需要啟用 LDAP 群組相關功能,此欄位不能為空。", - "LDAP_GROUP_FILTER": "LDAP 群組篩選器", - "LDAP_GROUP_FILTER_INFO": "用於搜尋 LDAP/AD 群組的篩選器。對於 OpenLDAP:objectclass=groupOfNames。對於 Active Directory:objectclass=group。如果您需要 LDAP 群組相關功能,此欄位不能為空。", - "LDAP_GROUP_GID": "LDAP 群組 GID", - "LDAP_GROUP_GID_INFO": "在搜尋中用來選取使用者的屬性,可以是 uid、cn 或其他屬性,取決於您的 LDAP/AD。Harbor 中的群組預設以此屬性命名。如果您需要啟用 LDAP 群組相關功能,此欄位不能為空。", - "LDAP_GROUP_ADMIN_DN": "LDAP 群組管理員 DN", - "LDAP_GROUP_ADMIN_DN_INFO": "指定 LDAP 群組 DN。此群組中的所有 LDAP 使用者都將具有 Harbor 管理員權限。如果您不需要,此欄可留空。", - "LDAP_GROUP_MEMBERSHIP": "LDAP 群組成員資格", - "LDAP_GROUP_MEMBERSHIP_INFO": "表示 LDAP 群組成員資格的屬性,預設值為 memberof,在某些 LDAP 伺服器中可能為 \"ismemberof\"。如果您需要啟用 LDAP 群組相關功能,此欄位不能為空。", - "GROUP_SCOPE": "LDAP 群組搜尋範圍", - "GROUP_SCOPE_INFO": "搜尋群組的範圍,預設選擇子樹。" + "GC": { + "CURRENT_SCHEDULE": "目前的垃圾回收排程", + "GC_NOW": "立即執行垃圾回收", + "JOB_HISTORY": "垃圾回收歷史任務", + "JOB_ID": "任務 ID", + "TRIGGER_TYPE": "觸發類型", + "LATEST_JOBS": "最新的 {{param}} 個任務", + "MSG_SUCCESS": "垃圾回收成功", + "MSG_SCHEDULE_SET": "已設定垃圾回收排程", + "MSG_SCHEDULE_RESET": "已重設垃圾回收排程", + "PARAMETERS": "參數", + "DELETE_UNTAGGED": "允許對未標籤的檔案進行垃圾回收", + "EXPLAIN": "垃圾回收是一個密集計算的操作,可能影響 Registry 的效能", + "EXPLAIN_TIME_WINDOW": "過去 2 小時(預設窗口)內上傳的檔案將不包括在垃圾回收中", + "DRY_RUN_SUCCESS": "成功觸發模擬執行", + "DELETE_DETAIL": "{{blob}} 個 blob 和 {{manifest}} 個 manifest 已刪除,釋放了 {{size}} 的空間", + "DELETE_DETAIL_DRY_RUN": "{{blob}} 個 blob 和 {{manifest}} 個 manifest 可以刪除,可以釋放 {{size}} 的空間", + "WORKERS_TOOLTIP": "設定可同時執行垃圾回收任務的工作數量,預設值是 1。" }, - "UAA": { - "ENDPOINT": "UAA 端點", - "CLIENT_ID": "UAA 用戶端 ID", - "CLIENT_SECRET": "UAA 用戶端密鑰", - "VERIFY_CERT": "驗證 UAA 憑證" + "RETAG": { + "MSG_SUCCESS": "Artifact 複製成功", + "TIP_REPO": "儲存庫名稱被分解成路徑元素。每個元素必須至少包括一個小寫字母、字母數字字元,可選用句點、破折號或底線分隔。嚴格來說,它必須符合正規表達式 [a-z0-9]+(?:[._-][a-z0-9]+)*。如果儲存庫名稱有兩個或更多路徑元素,它們必須用正斜槓('/')分隔。儲存庫名稱的總長度(包括斜槓)必須少於 256 個字元。", + "TIP_TAG": "標籤(Tag)是套用到儲存庫中 Docker 映像檔的一個標籤,用來區別儲存庫內的不同映像檔。標籤必須符合正規表達式:`[\\w][\\w.-]{0,127}`。" }, - "HTTP_AUTH": { - "ENDPOINT": "伺服器端點", - "TOKEN_REVIEW": "權杖審查端點", - "SKIP_SEARCH": "跳過搜尋", - "VERIFY_CERT": "驗證憑證", - "ADMIN_GROUPS": "管理員群組" + "CVE_ALLOWLIST": { + "DEPLOYMENT_SECURITY": "部署安全性", + "CVE_ALLOWLIST": "CVE 白名單", + "SYS_ALLOWLIST_EXPLAIN": "在計算映像檔的的安全性弱點時,在系統的 CVE 白名單中的弱點將會被忽略。", + "ADD_SYS": "可新增一條或多條 CVE ID 至系統的 CVE 白名單中", + "WARNING_SYS": "系統的 CVE 白名單已過期. 請延長有效期以使白名單生效", + "WARNING_PRO": "該專案的 CVE 白名單已過期. 請延長有效期以使白名單生效", + "ADD": "新增", + "ENTER": "輸入 CVE ID", + "HELP": "CVE ID之間請用英文逗號隔開或者換行", + "NONE": "無", + "EXPIRES_AT": "有效期至", + "NEVER_EXPIRES": "永不過期", + "PRO_ALLOWLIST_EXPLAIN": "專案白名單允許此清單中的弱點在推送和拉取映像檔時被忽略。", + "PRO_OR_SYS": "您可以使用在系統層級設定的預設白名單,或點選「專案白名單」以建立新白名單。", + "MERGE_INTO": "您可以點選「複製系統白名單」項將系統白名單合併至該專案白名單中,並可為該專案白名單新增個別的 CVE IDs", + "SYS_ALLOWLIST": "系統白名單", + "PRO_ALLOWLIST": "專案白名單", + "ADD_SYSTEM": "複製系統白名單" }, - "OIDC": { - "OIDC_PROVIDER": "OIDC 提供者名稱", - "OIDC_REDIREC_URL": "請確保在 OIDC 提供者中設定的重新導向 URL 為", - "ENDPOINT": "OIDC 端點", - "CLIENT_ID": "OIDC 用戶端 ID", - "CLIENTSECRET": "OIDC 用戶端密鑰", - "SCOPE": "OIDC 範圍", - "OIDC_VERIFYCERT": "驗證憑證", - "OIDC_AUTOONBOARD": "自動登入", - "USER_CLAIM": "使用者聲明", - "OIDC_SETNAME": "設定 OIDC 使用者名稱", - "OIDC_SETNAMECONTENT": "在第一次透過第三方(OIDC)進行身份驗證時,您必須建立一個 Harbor 使用者名稱。這將在 Harbor 中用於與專案、角色等關聯。", - "OIDC_USERNAME": "使用者名稱", - "GROUP_CLAIM_NAME": "群組聲明名稱", - "GROUP_CLAIM_NAME_INFO": "您在 OIDC 提供者中設定的自定義群組聲明名稱", - "OIDC_ADMIN_GROUP": "OIDC 管理員群組", - "OIDC_ADMIN_GROUP_INFO": "指定 OIDC 管理員群組名稱。此群組中的所有 OIDC 使用者都將具有 Harbor 管理員權限。如果您不需要,此欄可以留空。", - "OIDC_GROUP_FILTER": "OIDC 群組篩選器", - "OIDC_GROUP_FILTER_INFO": "篩選符合提供的正規表達式的 OIDC 群組。保持空白以選取所有群組。" + "TAG_RETENTION": { + "TAG_RETENTION": "標籤保留", + "RETENTION_RULES": "保留規則", + "RULE_NAME_1": "最近{{number}}天的映像檔", + "RULE_NAME_2": "最近活躍的{{number}}個映像檔", + "RULE_NAME_3": "最近推送的{{number}}個映像檔", + "RULE_NAME_4": "最近拉取的{{number}}個映像檔", + "RULE_NAME_5": "全部映像檔", + "ADD_RULE": "新增規則", + "ADD_RULE_HELP_1": "點選新增按鈕可新增規則", + "ADD_RULE_HELP_2": "Tag 保留原則每天執行一次.", + "RETENTION_RUNS": "執行保留原則", + "RUN_NOW": "立即執行", + "WHAT_IF_RUN": "模擬執行", + "ABORT": "中止", + "SERIAL": "ID", + "STATUS": "狀態", + "DRY_RUN": "模擬執行", + "START_TIME": "開始時間", + "DURATION": "持續時間", + "DETAILS": "詳細資訊", + "REPOSITORY": "儲存庫", + "EDIT": "編輯", + "DISABLE": "停用", + "ENABLE": "啟用", + "DELETE": "刪除", + "ADD_TITLE": "新增Tag 保留規則", + "ADD_SUBTITLE": "為目前專案指定 tag 保留規則。所有 tag 保留規則獨立計算並且適用於所有符合條件的儲存庫。", + "BY_WHAT": "以映像檔或天數為條件", + "RULE_TEMPLATE_1": "最近#天的映像檔", + "RULE_TEMPLATE_2": "最近活躍的#個映像檔", + "RULE_TEMPLATE_3": "最近推送的#個映像檔", + "RULE_TEMPLATE_4": "最近拉取的#個映像檔", + "RULE_TEMPLATE_5": "全部", + "ACTION_RETAIN": "保留", + "UNIT_DAY": "天數", + "UNIT_COUNT": "個數", + "NUMBER": "數量", + "IN_REPOSITORIES": "套用到儲存庫", + "REP_SEPARATOR": "使用逗號分隔repos,repo*和**", + "TAGS": "標籤", + "INCLUDE_UNTAGGED": "無標記的", + "UNTAGGED": "無標籤", + "MATCHES_TAGS": "符合標籤", + "MATCHES_EXCEPT_TAGS": "排除標籤", + "TAG_SEPARATOR": "輸入多個逗號分隔的 Tags,Tag*或**。可透過勾選將未加Tag 的映像檔作為此原則的一部分。", + "LABELS": "標籤", + "MATCHES_LABELS": "符合標籤", + "MATCHES_EXCEPT_LABELS": "排除標籤", + "REP_LABELS": "使用逗號分割標籤", + "RETENTION_RUN": "執行保留原則", + "RETENTION_RUN_EXPLAIN": "執行保留原則將對該專案中的映像檔產生反向影響,受影響的映像檔 tags 將會被刪除。您可選擇取消或者使用模擬執行,或者點選執行以繼續。", + "RETENTION_RUN_ABORTED": "中止執行保留原則", + "RETENTION_RUN_ABORTED_EXPLAIN": "已中止執行保留原則,已刪除的映像檔不可恢復。您可執行另一個執行命令以便繼續刪除映像檔。如需模擬執行,請點選模擬執行按鈕。", + "LOADING": "載入中...", + "NO_EXECUTION": "暫無記錄!", + "NO_HISTORY": "暫無記錄!", + "DELETION": "刪除記錄", + "EDIT_TITLE": "編輯Tag保留規則", + "LOG": "日誌", + "EXCLUDES": "排除", + "MATCHES": "符合", + "REPO": "儲存庫", + "EXC": "排除", + "MAT": "符合", + "AND": "且", + "WITH": "有", + "WITHOUT": "沒有", + "LOWER_LABELS": "標籤", + "WITH_CONDITION": "基於條件", + "LOWER_TAGS": " 標籤", + "TRIGGER": "定時執行", + "RETAINED": "保留數量", + "TOTAL": "總數", + "NONE": "空", + "RULE_NAME_6": "最近{{number}}天被拉取過的映像檔", + "RULE_NAME_7": "最近{{number}}天被推送過的映像檔", + "RULE_TEMPLATE_6": "最近#天被拉取過的映像檔", + "RULE_TEMPLATE_7": "最近#天被推送過的映像檔", + "SCHEDULE": "定時任務", + "SCHEDULE_WARNING": "執行保留原則將會刪除受影響的映像檔,且無法回復。請在制定定時任務前仔細檢查所有保留規則。", + "EXISTING_RULE": "規則已存在", + "ILLEGAL_RULE": "規則無效", + "INVALID_RULE": "無效規則", + "COUNT_LARGE": "參數“個數”太大", + "DAYS_LARGE": "參數“天數”太大", + "EXECUTION_TYPE": "執行類型", + "ACTION": "操作", + "YES": "Yes", + "NO": "No" }, - "SCANNING": { - "STOP_SCAN_ALL_SUCCESS": "成功觸發停止全部掃描!", - "TRIGGER_SCAN_ALL_SUCCESS": "成功觸發全部掃描!", - "TRIGGER_SCAN_ALL_FAIL": "觸發全部掃描失敗,錯誤: {{error}}", - "TITLE": "弱點掃描", - "SCAN_ALL": "掃描全部", - "SCHEDULE_TO_SCAN_ALL": "排程掃描全部", - "SCAN_NOW": "立即掃描", - "SCAN": "掃描", - "NONE_POLICY": "無", - "DAILY_POLICY": "每日定時", - "REFRESH_POLICY": "資料庫更新後", - "DB_REFRESH_TIME": "資料庫更新於", - "DB_NOT_READY": "弱點資料庫可能尚未完全準備好!", - "NEXT_SCAN": "下次可用時間", - "STATUS": { - "PENDING": "等待中", - "RUNNING": "執行中", - "STOPPED": "已停止", - "ERROR": "錯誤", + "IMMUTABLE_TAG": { + "IMMUTABLE_RULES": "不可變更的標籤規則", + "ADD_RULE": "新增規則", + "ADD_RULE_HELP_1": "點選新增規則按鈕以加入規則。", + "EDIT": "編輯", + "DISABLE": "停用", + "ENABLE": "啟用", + "DELETE": "刪除", + "ADD_TITLE": "新增標籤不可變更規則", + "ADD_SUBTITLE": "為此專案指定標籤不可變更規則。注意:所有標籤不可變更規則都將首先獨立計算,然後合併以得到最終的不可變更標籤集合。", + "IN_REPOSITORIES": "套用至儲存庫", + "REP_SEPARATOR": "輸入多個逗號分隔的儲存庫,例如 repos,repo* 或 **。", + "TAGS": "標籤", + "TAG_SEPARATOR": "輸入多個逗號分隔的標籤,例如 tags,tag* 或 **。", + "EDIT_TITLE": "編輯標籤不可變更規則", + "EXC": "排除", + "MAT": "符合", + "AND": "且", + "WITH": "含有", + "WITHOUT": "不含", + "LOWER_LABELS": "標籤", + "LOWER_TAGS": "標籤", + "NONE": "無", + "EXISTING_RULE": "既有規則", + "ACTION": "操作" + }, + "SCANNER": { + "DELETION_SUMMARY": "您是否要刪除掃描器 {{param}}?", + "SKIP_CERT_VERIFY": "當遠端 Registry 使用自我簽署或不受信任的憑證時,請勾選此框以跳過憑證驗證。", + "NAME": "名稱", + "NAME_EXISTS": "名稱已存在", + "NAME_REQUIRED": "名稱必填", + "NAME_REX": "名稱必須由小寫字母、數字和 ._- 組成,至少2個字元,並且必須以字母或數字開頭。", + "DESCRIPTION": "描述", + "SBOM": "SBOM", + "VULNERABILITY": "Vulnerability", + "SUPPORTED": "Supported", + "NOT_SUPPORTED": "Not Supported", + "ENDPOINT": "端點", + "ENDPOINT_EXISTS": "端點 URL 已存在", + "ENDPOINT_REQUIRED": "端點 URL 必填", + "ILLEGAL_ENDPOINT": "端點 URL 無效", + "AUTH": "認證", + "NONE": "無", + "BASIC": "Basic", + "BEARER": "Bearer", + "API_KEY": "API 金鑰", + "USERNAME": "使用者名稱", + "USERNAME_REQUIRED": "使用者名稱必填", + "PASSWORD": "密碼", + "PASSWORD_REQUIRED": "密碼必填", + "TOKEN": "權杖", + "TOKEN_REQUIRED": "權杖必填", + "API_KEY_REQUIRED": "API 金鑰必填", + "SKIP": "跳過憑證驗證", + "ADD_SCANNER": "新增掃描器", + "EDIT_SCANNER": "編輯掃描器", + "TEST_CONNECTION": "測試連接", + "ADD_SUCCESS": "新增成功", + "TEST_PASS": "測試通過", + "TEST_FAILED": "Ping: 目標位址 {{name}}:{{url}} 無法連接", + "UPDATE_SUCCESS": "更新成功", + "SCANNER_COLON": "掃描器:", + "NAME_COLON": "名稱:", + "VENDOR_COLON": "供應商:", + "VERSION_COLON": "版本:", + "CAPABILITIES": "功能:", + "CONSUMES_MIME_TYPES_COLON": "可處理的 MIME 類型:", + "PRODUCTS_MIME_TYPES_COLON": "產出的 MIME 類型:", + "CAPABILITIES_TYPE": "Type:", + "PROPERTIES": "屬性", + "NEW_SCANNER": "新增掃描器", + "SET_AS_DEFAULT": "設為預設", + "HEALTH": "健康狀態", + "DISABLED": "已停用", + "NO_SCANNER": "找不到任何掃描器", + "DEFAULT": "預設", + "HEALTHY": "健康", + "UNHEALTHY": "不健康", + "SCANNERS": "掃描器", + "SCANNER": "掃描器", + "EDIT": "編輯", + "NOT_AVAILABLE": "不可用", + "ADAPTER": "轉接器", + "VENDOR": "供應商", + "VERSION": "版本", + "SELECT_SCANNER": "選擇掃描器", + "ENABLED": "已啟用", + "ENABLE": "啟用", + "DISABLE": "停用", + "DELETE_SUCCESS": "刪除成功", + "TOTAL": "總計", + "FIXABLE": "可修復", + "DURATION": "掃描用時:", + "OPTIONS": "選項", + "USE_INNER": "使用內部儲存庫位址", + "USE_INNER_TIP": "勾選此選項,掃描器將被強制使用內部儲存庫位址來存取相關內容。", + "VULNERABILITY_SEVERITY": "弱點嚴重程度:", + "CONFIRM_DELETION": "確認刪除掃描器", + "NO_PROJECT_SCANNER": "無掃描器", + "SET_UNHEALTHY_SCANNER": "所選擇的掃描器:{{name}} 是不健康的", + "SCANNED_BY": "由此掃描:", + "IMAGE_SCANNERS": "映像檔掃描器", + "VIEW_DOC": "檢視文件", + "ALL_SCANNERS": "全部掃描器", + "HELP_INFO_1": "預設掃描器已安裝。如需其他掃描器的安裝說明,請參閱", + "HELP_INFO_2": "說明文件。", + "NO_DEFAULT_SCANNER": "未設定預設掃描器" + }, + "DISTRIBUTION": { + "FILTER_INSTANCE_PLACEHOLDER": "篩選實例", + "FILTER_HISTORIES_PLACEHOLDER": "篩選歷史記錄", + "ADD_ACTION": "新增實例", + "PREHEAT_ACTION": "預載", + "EDIT_ACTION": "編輯", + "ENABLE_ACTION": "啟用", + "DISABLE_ACTION": "停用", + "DELETE_ACTION": "刪除", + "NOT_FOUND": "找不到任何實例!", + "NAME": "名稱", + "ENDPOINT": "端點", + "STATUS": "狀態", + "ENABLED": "已啟用", + "SETUP_TIMESTAMP": "設定時間戳", + "PROVIDER": "提供者", + "DELETION_TITLE": "確認刪除實例", + "DELETION_SUMMARY": "您是否要刪除實例 {{param}}?", + "ENABLE_TITLE": "啟用實例", + "ENABLE_SUMMARY": "您是否要啟用實例 {{param}}?", + "DISABLE_TITLE": "停用實例", + "DISABLE_SUMMARY": "您是否要停用實例 {{param}}?", + "IMAGE": "映像檔", + "START_TIME": "開始時間", + "FINISH_TIME": "完成時間", + "INSTANCE": "實例", + "HISTORIES": "歷史記錄", + "CREATE_SUCCESS": "成功建立實例", + "CREATE_FAILED": "建立實例失敗", + "DELETED_SUCCESS": "成功刪除實例", + "DELETED_FAILED": "刪除實例失敗", + "ENABLE_SUCCESS": "成功啟用實例", + "ENABLE_FAILED": "啟用實例失敗", + "DISABLE_SUCCESS": "成功停用實例", + "DISABLE_FAILED": "停用實例失敗", + "UPDATE_SUCCESS": "成功更新實例", + "UPDATE_FAILED": "更新實例失敗", + "REQUEST_PREHEAT_SUCCESS": "預載請求成功", + "REQUEST_PREHEAT_FAILED": "預載請求失敗", + "DESCRIPTION": "描述", + "AUTH_MODE": "驗證模式", + "USERNAME": "使用者名稱", + "PASSWORD": "密碼", + "TOKEN": "權杖", + "SETUP_NEW_INSTANCE": "設定新實例", + "EDIT_INSTANCE": "編輯實例", + "SETUP": { + "NAME_PLACEHOLDER": "輸入實例名稱", + "DESCRIPTION_PLACEHOLDER": "輸入實例描述", + "ENDPOINT_PLACEHOLDER": "輸入實例端點", + "USERNAME_PLACEHOLDER": "輸入使用者名稱", + "PASSWORD_PLACEHOLDER": "輸入密碼", + "TOKEN_PLACEHOLDER": "輸入權杖" + }, + "MAINTAINER": "維護者", + "SOURCE": "來源", + "VERSION": "版本", + "SET_AS_DEFAULT": "設為預設", + "DELETE_INSTANCE": "刪除實例", + "ENABLE_INSTANCE": "啟用實例", + "DISABLE_INSTANCE": "停用實例", + "SET_DEFAULT_SUCCESS": "設為預設成功", + "SET_DEFAULT_FAILED": "設為預設失敗", + "UPDATE_INSTANCE": "更新實例", + "CREATE_INSTANCE": "建立實例" + }, + "P2P_PROVIDER": { + "P2P_PROVIDER": "P2P 預載", + "POLICIES": "原則", + "NEW_POLICY": "新增原則", + "NAME": "名稱", + "ENABLED": "已啟用", + "PROVIDER": "提供者", + "FILTERS": "篩選器", + "TRIGGER": "觸發器", + "CREATED": "建立時間", + "DESCRIPTION": "描述", + "SCOPE": "範圍", + "SCOPE_SINGLE_PEER": "單節點", + "SCOPE_ALL_PEERS": "全節點", + "EXTRA_ATTRIBUTES": "額外屬性", + "NO_POLICY": "無原則", + "ENABLED_POLICY_SUMMARY": "您是否要啟用原則 {{name}}?", + "DISABLED_POLICY_SUMMARY": "您是否要停用原則 {{name}}?", + "ENABLED_POLICY_TITLE": "啟用原則", + "DISABLED_POLICY_TITLE": "停用原則", + "DELETE_POLICY_SUMMARY": "您是否要刪除原則 {{names}}?", + "EDIT_POLICY": "編輯 P2P 提供者原則", + "ADD_POLICY": "建立 P2P 提供者原則", + "NAME_REQUIRED": "名稱為必填選項", + "PROVIDER_REQUIRED": "提供者為必填選項", + "ADDED_SUCCESS": "新增原則成功", + "UPDATED_SUCCESS": "更新原則成功", + "EXECUTE": "執行", + "EXECUTE_SUCCESSFULLY": "成功執行", + "EXECUTE_TITLE": "確認原則執行", + "EXECUTE_SUMMARY": "您是否要執行原則 {{param}}?", + "STOP_TITLE": "確認停止執行", + "STOP_SUMMARY": "您是否要停止執行原則 {{param}}?", + "STOP_SUCCESSFULLY": "成功停止執行", + "STATUS_MSG": "狀態訊息", + "JOB_PLACEHOLDER": "找不到任何執行作業", + "PROVIDER_TYPE": "提供者類型", + "ID": "執行 ID", + "NO_PROVIDER": "請先新增一個提供者", + "ARTIFACT": "Artifact", + "DIGEST": "Digest", + "TYPE": "類型", + "TASKS": "任務", + "TASKS_PLACEHOLDER": "找不到任何任務", + "SEVERITY_WARNING": "此處的弱點設定與相關專案設定衝突,將覆蓋此處的設定", + "REPOS": "儲存庫", + "TAGS": "標籤", + "CRITERIA": "標準", + "ONLY_SIGNED": "僅限已簽署的映像檔", + "PREHEAT_ON_PUSH": "推送時預載", + "START_TEXT": "無弱點嚴重性", + "EDN_TEXT": "及以上", + "LABELS": "標籤", + "SCHEDULE": "排程", + "TEST_FAILED": "測試失敗", + "MANUAL": "手動", + "SCHEDULED": "定時", + "EVENT_BASED": "事件基礎", + "EVENT_BASED_EXPLAIN_LINE1": "以下事件發生時,將評估原則:", + "EVENT_BASED_EXPLAIN_LINE2": "已推送 Artifact", + "EVENT_BASED_EXPLAIN_LINE3": "已標記 Artifact", + "EVENT_BASED_EXPLAIN_LINE4": "已掃描 Artifact", + "REPO_REQUIRED": "儲存庫為必填選項", + "TAG_REQUIRED": "標籤為必填選項", + "DELETE_SUCCESSFULLY": "成功刪除原則", + "UPDATED_SUCCESSFULLY": "成功更新原則", + "EXECUTIONS": "執行次數", + "TAG_SEPARATOR": "輸入多個逗號分隔的標籤,標籤*,或 **", + "CONTENT_WARNING": "此處的內容信任設定與相關專案設定衝突,將覆蓋此處的設定", + "PREHEAT_EXPLAIN": "預載將映像檔遷移到 P2P 網絡", + "CRITERIA_EXPLAIN": "如 '部署安全性' 部分所指定的設定標籤", + "SKIP_CERT_VERIFY": "若遠端提供者使用自簽署或不受信任的憑證,請勾選此框以跳過憑證驗證", + "NAME_TOOLTIP": "原則名稱由一個或多個組合構成,每個組合包括大寫字母、小寫字母或數字;組合之間用點、底線或連字符分隔。", + "NEED_HELP": "請向您的系統管理員尋求協助以新增一個提供者" + }, + "PAGINATION": { + "PAGE_SIZE": "每頁顯示數量" + }, + "SYSTEM_ROBOT": { + "READ": "讀取", + "CREATE": "建立", + "ARTIFACT": "Artifact", + "ADD_ROBOT": "新增機器人", + "UPDATE_ROBOT": "更新機器人", + "UPDATE_ROBOT_SUCCESSFULLY": "機器人更新成功", + "PLACEHOLDER": "輸入新的密鑰", + "SECRET": "密鑰應包含至少 1 個大寫字母、1 個小寫字母和 1 個數字,長度為 8-128 個字元。", + "REFRESH_SECRET": "更新密鑰", + "REFRESH_SECRET_SUCCESS": "密鑰更新成功", + "DELETE_ROBOT": "刪除機器人", + "DELETE_ROBOT_SUCCESS": "成功刪除機器人", + "ENABLE_TITLE": "啟用機器人", + "ENABLE_SUMMARY": "您是否要啟用機器人 {{param}}?", + "DISABLE_TITLE": "停用機器人", + "DISABLE_SUMMARY": "您是否要停用機器人 {{param}}?", + "ENABLE_ROBOT_SUCCESSFULLY": "成功啟用機器人", + "DISABLE_ROBOT_SUCCESSFULLY": "成功停用機器人", + "ROBOT_ACCOUNT": "機器人帳號", + "PROJECTS": "專案", + "ALL_PROJECTS": "所有專案", + "PERMISSIONS": "權限", + "REFRESH_SECRET_SUMMARY": "自動更新機器人帳號的密鑰,或者選擇開啟詳細資訊手動指定新的密鑰", + "TOKEN": "密鑰", + "NEW_TOKEN": "新密鑰", + "REFRESH": "更新", + "PROJECTS_MODAL_TITLE": "機器人帳號的專案", + "PROJECTS_MODAL_SUMMARY": "這些是此機器人帳號涵蓋的專案。", + "CREATE_ROBOT": "建立系統機器人帳號", + "CREATE_ROBOT_SUMMARY": "Create a system Robot Account that will cover permissions for the system as well as for specific projects", + "EDIT_ROBOT": "編輯系統機器人帳號", + "EDIT_ROBOT_SUMMARY": "Edit a system Robot Account that will cover permissions for the system as well as for specific projects", + "EXPIRATION_TIME": "到期時間", + "EXPIRATION_TIME_EXPLAIN": "機器人帳號的權杖到期時間(以建立時間為起點的天數)。要使其永不過期,請輸入「-1」。", + "EXPIRATION_DEFAULT": "天(預設)", + "EXPIRATION_DAYS": "指定天數", + "EXPIRATION_NEVER": "永不", + "EXPIRATION_REQUIRED": "需要有效的到期時間", + "COVER_ALL": "涵蓋所有專案", + "COVER_ALL_EXPLAIN": "選擇以套用到所有現有和未來的專案", + "COVER_ALL_SUMMARY": "選擇了所有現有和未來的專案。", + "RESET_PERMISSION": "RESET ALL PROJECT PERMISSIONS", + "PERMISSION_COLUMN": "權限", + "EXPIRES_AT": "到期於", + "VIEW_SECRET": "更新密鑰", + "LEGACY": "舊版", + "CREATE_PROJECT_ROBOT": "建立專案機器人帳號", + "CREATE_PROJECT_ROBOT_SUMMARY": "為此專案建立一個機器人帳號", + "EDIT_PROJECT_ROBOT": "編輯機器人帳號", + "EDIT_PROJECT_ROBOT_SUMMARY": "編輯此專案的機器人帳號", + "NOT_FOUND": "我們找不到任何機器人!", + "SELECT_ALL": "全選", + "UNSELECT_ALL": "取消全選", + "ROBOT_ACCOUNT_NAV": "機器人帳號", + "COVERED_PROJECTS": "涵蓋的專案", + "CONFIRM_SECRET": "確認密鑰", + "SECRET_AGAIN": "再次輸入密鑰", + "INCONSISTENT": "兩個密鑰不一致", + "NAME_TOOLTIP": "機器人名稱應該是 1~255 個字元長,包含小寫字母、數字和 ._-,並且必須以字母或數字開頭。", + "ENABLE_NEW_SECRET": "啟用此選項以手動指定新的密鑰", + "DELETE": "刪除", + "ARTIFACT_LABEL": "Artifact 標籤", + "SCAN": "掃描", + "SCANNER_PULL": "掃描器拉取", + "SEARCH_BY_NAME": "按名稱搜尋(無前綴)", + "FINAL_PROJECT_NAME_TIP": "最終的專案機器人名稱由前綴、專案名稱、加號和目前輸入的值所組成", + "FINAL_SYSTEM_NAME_TIP": "最終的系統機器人名稱由前綴和目前輸入的值組所組成", + "PUSH_AND_PULL": "推送", + "PUSH_PERMISSION_TOOLTIP": "推送權限不能單獨使用,必須與拉取權限一起使用", + "STOP": "停止", + "LIST": "列表", + "REPOSITORY": "儲存庫", + "EXPIRES_IN": "到期於", + "EXPIRED": "已過期", + "SELECT_ALL_PROJECT": "SELECT ALL PROJECTS", + "UNSELECT_ALL_PROJECT": "UNSELECT ALL PROJECTS" + }, + "ACCESSORY": { + "DELETION_TITLE_ACCESSORY": "確認刪除附件", + "DELETION_SUMMARY_ACCESSORY": "您是否要刪除 artifact {{param}} 的所有附件?", + "DELETION_SUMMARY_ONE_ACCESSORY": "您是否要刪除附件 {{param}} ?", + "DELETE_ACCESSORY": "刪除附件", + "DELETED_SUCCESS": "附件刪除成功", + "DELETED_FAILED": "刪除附件失敗", + "CO_SIGNED": "由 Cosign 簽署", + "NOTARY_SIGNED": "由 Notary 簽署", + "ACCESSORY": "附件", + "ACCESSORIES": "附件", + "SUBJECT_ARTIFACT": "目標 artifact", + "CO_SIGN": "Cosign", + "NOTARY": "Notation", + "PLACEHOLDER": "找不到任何附件!" + }, + "CLEARANCES": { + "CLEARANCES": "清理", + "AUDIT_LOG": "日誌輪替", + "LAST_COMPLETED": "上次完成", + "NEXT_SCHEDULED_TIME": "下次預定時間", + "SCHEDULE_TO_PURGE": "安排清除", + "KEEP_IN": "保留記錄", + "KEEP_IN_TOOLTIP": "保留此區間內的記錄", + "KEEP_IN_ERROR": "此選項的值必須為整數,且時間值必須大於 0 且小於 10000 天", + "DAYS": "天", + "HOURS": "小時", + "INCLUDED_OPERATIONS": "包含的操作", + "INCLUDED_OPERATION_TOOLTIP": "移除所選操作的稽核日誌", + "INCLUDED_OPERATION_ERROR": "請至少選擇一個操作", + "PURGE_NOW": "立即清除", + "PURGE_NOW_SUCCESS": "成功觸發清除", + "PURGE_SCHEDULE_RESET": "清除排程已重設", + "PURGE_HISTORY": "清除歷史", + "FORWARD_ENDPOINT": "稽核日誌轉發 Syslog 端點", + "FORWARD_ENDPOINT_TOOLTIP": "將稽核日誌轉發至 syslog 端點,例如: harbor-log:10514", + "SKIP_DATABASE": "跳過稽核日誌資料庫", + "SKIP_DATABASE_TOOLTIP": "跳過在資料庫中記錄稽核日誌,僅在設定稽核日誌轉發端點時可用", + "STOP_GC_SUCCESS": "成功觸發停止清理垃圾操作", + "STOP_PURGE_SUCCESS": "成功觸發停止清除操作", + "NO_GC_RECORDS": "找不到任何清理垃圾歷史記錄!", + "NO_PURGE_RECORDS": "找不到任何清除歷史記錄!" + }, + "CVE_EXPORT": { + "EXPORT_SOME_PROJECTS": "匯出 CVE", + "ALL_PROJECTS": "所有專案", + "EXPORT_TITLE": "匯出 CVE", + "EXPORT_SUBTITLE": "設定匯出條件", + "EXPORT_CVE_FILTER_HELP_TEXT": "輸入多個以逗號分隔的 CVE ID", + "CVE_IDS": "CVE ID", + "EXPORT_BUTTON": "匯出", + "JOB_NAME": "工作名稱", + "JOB_NAME_REQUIRED": "工作名稱為必填選項", + "JOB_NAME_EXISTING": "工作名稱已存在", + "TRIGGER_EXPORT_SUCCESS": "成功觸發 CVE 匯出!" + }, + "JOB_SERVICE_DASHBOARD": { + "SCHEDULE_PAUSED": "已排程(暫停)", + "SCHEDULE_BEEN_PAUSED": "{{param}} 已被暫停", + "PENDING_JOBS": "等待中的工作佇列", + "OTHERS": "其他", + "STOP_ALL": "全部停止", + "CONFIRM_STOP_ALL": "確認停止全部", + "CONFIRM_STOP_ALL_CONTENT": "您確定要停止所有的工作佇列嗎?", + "STOP_ALL_SUCCESS": "成功停止所有的工作佇列", + "STOP_BTN": "停止", + "PAUSE_BTN": "暫停", + "RESUME_BTN": "恢復", + "JOB_TYPE": "工作類型", + "PENDING_COUNT": "等待數量", + "LATENCY": "延遲", + "PAUSED": "已暫停", + "NO_JOB_QUEUE": "我們找不到任何工作佇列", + "CONFIRM_STOPPING_JOBS": "確認停止工作", + "CONFIRM_STOPPING_JOBS_CONTENT": "您確定要停止工作 {{param}} 嗎?", + "CONFIRM_PAUSING_JOBS": "確認暫停工作", + "CONFIRM_PAUSING_JOBS_CONTENT": "您確定要暫停工作 {{param}} 嗎?", + "CONFIRM_RESUMING_JOBS": "確認恢復工作", + "CONFIRM_RESUMING_JOBS_CONTENT": "您確定要恢復工作 {{param}} 嗎?", + "STOP_SUCCESS": "成功停止工作", + "PAUSE_SUCCESS": "成功暫停工作", + "RESUME_SUCCESS": "成功恢復工作", + "SCHEDULES": "排程", + "RUNNING_STATUS": "正在執行", + "RESUME_ALL_BTN_TEXT": "全部恢復", + "PAUSE_ALL_BTN_TEXT": "全部暫停", + "CONFIRM_PAUSING_ALL": "確認暫停全部", + "CONFIRM_PAUSING_ALL_CONTENT": "您確定要暫停所有的工作排程嗎?", + "CONFIRM_RESUMING_ALL": "確認恢復全部", + "CONFIRM_RESUMING_ALL_CONTENT": "您確定要恢復所有的工作排程嗎?", + "PAUSE_ALL_SUCCESS": "成功暫停所有的排程", + "RESUME_ALL_SUCCESS": "成功恢復所有的排程", + "VENDOR_TYPE": "供應商類型", + "VENDOR_ID": "供應商 ID", + "NO_SCHEDULE": "我們找不到任何排程", + "WORKERS": "Worker", + "FREE_ALL": "全部釋放", + "CONFIRM_FREE_ALL": "確認釋放全部", + "CONFIRM_FREE_ALL_CONTENT": "您確定要釋放所有的 Worker 嗎?", + "CONFIRM_FREE_WORKERS": "確認釋放 Worker", + "CONFIRM_FREE_WORKERS_CONTENT": "您確定要釋放 Worker {{param}} 嗎?", + "FREE_WORKER_SUCCESS": "成功釋放 Worker", + "FREE_ALL_SUCCESS": "成功釋放所有的 Worker", + "WORKER_POOL": "Worker Pool", + "WORKER_POOL_ID": "Worker Pool ID", + "PID": "Pid", + "START_AT": "開始於", + "HEARTBEAT_AT": "最後回報時間", + "CONCURRENCY": "並行性", + "NO_WORKER_POOL": "我們找不到任何 Worker Pool", + "FREE": "釋放", + "WORKER_ID": "Worker ID", + "JOB_ID": "工作 ID", + "CHECK_IN_AT": "簽到於", + "NO_WORKER": "我們找不到任何 Worker", + "JOB_QUEUE": "工作佇列", + "JOB_SERVICE_DASHBOARD": "工作服務儀表板", + "OPERATION_STOP_ALL_QUEUES": "停止所有工作佇列", + "OPERATION_STOP_SPECIFIED_QUEUES": "停止指定的工作佇列", + "OPERATION_PAUSE_SPECIFIED_QUEUES": "暫停指定的工作佇列", + "OPERATION_RESUME_SPECIFIED_QUEUES": "恢復指定的工作佇列", + "OPERATION_PAUSE_SCHEDULE": "暫停所有排程", + "OPERATION_RESUME_SCHEDULE": "恢復所有排程", + "OPERATION_FREE_ALL": "釋放所有 Worker", + "OPERATION_FREE_SPECIFIED_WORKERS": "釋放指定的 Worker", + "QUEUE_STOP_BTN_INFO": "停止 — 停止並移除選定佇列中的所有工作。", + "QUEUE_PAUSE_BTN_INFO": "暫停 — 暫停此類型工作佇列中的工作執行。佇列暫停時,仍可將工作加入佇列。", + "QUEUE_RESUME_BTN_INFO": "恢復 — 恢復此類型工作佇列中的工作執行。", + "SCHEDULE_PAUSE_BTN_INFO": "暫停 — 暫停所有排程的執行。", + "SCHEDULE_RESUME_BTN_INFO": "恢復 — 恢復所有排程的執行。", + "WORKER_FREE_BTN_INFO": "停止目前正在執行的工作以釋放 Worker", + "CRON": "Cron", + "WAITING_TOO_LONG_1": "有些工作已經等待執行超過 24 小時。請檢查工作服務", + "WAITING_TOO_LONG_2": "儀表板。", + "WAITING_TOO_LONG_3": "更多詳細資訊,請參考", + "WAITING_TOO_LONG_4": "Wiki。" + }, + "CLARITY": { + "OPEN": "開啟", + "CLOSE": "關閉", + "SHOW": "顯示", + "HIDE": "隱藏", + "EXPAND": "展開", + "COLLAPSE": "收合", + "MORE": "更多", + "SELECT": "選擇", + "SELECT_ALL": "全選", + "PREVIOUS": "上一個", + "NEXT": "下一個", + "CURRENT": "跳至目前", + "INFO": "資訊", "SUCCESS": "成功", - "SCHEDULED": "已排程" - }, - "MANUAL": "手動觸發", - "SCHEDULED": "定時觸發" + "WARNING": "警告", + "DANGER": "錯誤", + "ROW_ACTION": "可用操作", + "PICK_COLUMNS": "管理欄位", + "SHOW_COLUMNS": "顯示欄位", + "SORT_COLUMNS": "排序欄位", + "FIRST_PAGE": "第一頁", + "LAST_PAGE": "最後一頁", + "NEXT_PAGE": "下一頁", + "PREVIOUS_PAGE": "上一頁", + "CURRENT_PAGE": "目前頁面", + "TOTAL_PAGE": "總頁數", + "FILTER_ITEMS": "篩選項目", + "MIN_VALUE": "最小值", + "MAX_VALUE": "最大值", + "MODAL_CONTENT_START": "模態框內容開始", + "MODAL_CONTENT_END": "模態框內容結束", + "SHOW_COLUMNS_MENU_DESCRIPTION": "顯示或隱藏欄位選單", + "ALL_COLUMNS_SELECTED": "已選擇所有欄位", + "SIGNPOST_TOGGLE": "標誌牌切換", + "SIGNPOST_CLOSE": "標誌牌關閉", + "LOADING": "載入中", + "DATE_PICKER_DIALOG_LABEL": "選擇日期", + "DATE_PICKER_TOGGLE_CHOOSE_DATE_LABEL": "選擇日期", + "DATE_PICKER_TOGGLE_CHANGE_DATE_LABEL": "變更日期,{SELECTED_DATE}", + "DATE_PICKER_PREVIOUS_MONTH": "上個月", + "DATE_PICKER_CURRENT_MONTH": "本月", + "DATE_PICKER_NEXT_MONTH": "下個月", + "DATE_PICKER_PREVIOUS_DECADE": "上個十年", + "DATE_PICKER_NEXT_DECADE": "下個十年", + "DATE_PICKER_CURRENT_DECADE": "本十年", + "DATE_PICKER_SELECT_MONTH_TEXT": "選擇月份,目前月份為 {CALENDAR_MONTH}", + "DATE_PICKER_SELECT_YEAR_TEXT": "選擇年份,目前年份為 {CALENDAR_YEAR}", + "DATE_PICKER_SELECTED_LABEL": "{FULL_DATE} - 已選擇" }, - "TEST_MAIL_SUCCESS": "已驗證郵件伺服器的連線。", - "TEST_LDAP_SUCCESS": "已驗證 LDAP 伺服器的連線。", - "TEST_MAIL_FAILED": "驗證郵件伺服器失敗,錯誤: {{param}}。", - "TEST_LDAP_FAILED": "驗證 LDAP 伺服器失敗,錯誤: {{param}}。", - "LEAVING_CONFIRMATION_TITLE": "確認離開", - "LEAVING_CONFIRMATION_SUMMARY": "有未儲存的變更,確定要離開目前頁面嗎?", - "TEST_OIDC_SUCCESS": "已驗證 OIDC 伺服器的連線。" - }, - "PAGE_NOT_FOUND": { - "MAIN_TITLE": "頁面不存在", - "SUB_TITLE": "正在重新導向到首頁:", - "UNIT": "秒..." - }, - "ABOUT": { - "VERSION": "版本", - "BUILD": "建置", - "COPYRIGHT": "Harbor 是一個開源、受信賴的雲原生 Docker Registry 專案,用於儲存、簽署和以及掃描映像檔內容。它擴展了開源的 Docker Distribution,加入了如安全性、身份認證和用戶管理等功能。Harbor 也支援資源監控和不同實例間的同步。將 Registry 靠近部署和執行環境可以提高傳輸效率。", - "COPYRIGHT_SUFIX": "上列出的一項或多項專利保護。", - "TRADEMARK": "VMware 商標及設計都是 VMware,Inc. 在美國和/或其他法律轄區的註冊商標或者商標。此處提到的其他所有商標和名稱分別是其各自公司的商標。", - "END_USER_LICENSE": "終端使用者授權條款", - "OPEN_SOURCE_LICENSE": "開源/第三方授權條款" - }, - "START_PAGE": { - "GETTING_START": "", - "GETTING_START_TITLE": "開始使用" - }, - "TOP_REPO": "受歡迎的映像檔儲存庫", - "STATISTICS": { - "PRO_ITEM": "專案", - "REPO_ITEM": "儲存庫", - "INDEX_PRIVATE": "私有", - "INDEX_PUB": "公開", - "INDEX_TOTAL": "總計", - "STORAGE": "儲存空間", - "LIMIT": "限制", - "STORAGE_USED": "已使用儲存空間" - }, - "SEARCH": { - "IN_PROGRESS": "搜尋中...", - "BACK": "返回" - }, - "SBOM": { - "CHART": { - "SCANNING_TIME": "Scan completed time:", - "SCANNING_PERCENT": "Scan progress:", - "SCANNING_PERCENT_EXPLAIN": "The scan completion progress is calculated as # of successfully scanned images / total number of images referenced within the image index.", - "TOOLTIPS_TITLE": "{{totalSbom}} of {{totalPackages}} {{package}} have known {{sbom}}.", - "TOOLTIPS_TITLE_SINGULAR": "{{totalSbom}} of {{totalPackages}} {{package}} has known {{sbom}}.", - "TOOLTIPS_TITLE_ZERO": "No recognizable SBOM detected" + "BANNER_MESSAGE": { + "BANNER_MESSAGE": "橫幅訊息", + "MESSAGE_TYPE": "訊息類型", + "CLOSABLE": "可關閉", + "FROM": "從", + "TO": "至", + "SUCCESS": "成功", + "INFO": "資訊", + "WARNING": "警告", + "DANGER": "危險", + "ENTER_MESSAGE": "在此輸入您的訊息" }, - "GRID": { - "PLACEHOLDER": "No scan results found.", - "COLUMN_PACKAGE": "Package", - "COLUMN_PACKAGES": "Packages", - "COLUMN_VERSION": "Current version", - "COLUMN_LICENSE": "License", - "COLUMN_DESCRIPTION": "Description", - "FOOT_ITEMS": "Items", - "FOOT_OF": "of" - }, - "STATE": { - "OTHER_STATUS": "No SBOM", - "QUEUED": "Queued", - "ERROR": "View Log", - "SCANNING": "Generating", - "STOPPED": "Generation stopped" - }, - "NO_SBOM": "No SBOM", - "PACKAGES": "SBOM", - "COMPLETED": "Completed", - "REPORTED_BY": "Reported by {{scanner}}", - "GENERATE": "Generate SBOM", - "DOWNLOAD": "Download SBOM", - "Details": "SBOM details", - "STOP": "Stop Generate SBOM", - "TRIGGER_STOP_SUCCESS": "Trigger stopping SBOM generation successfully" -}, - "VULNERABILITY": { - "STATE": { - "OTHER_STATUS": "未掃描", - "QUEUED": "已排入佇列", - "ERROR": "檢視日誌", - "SCANNING": "掃描中", - "STOPPED": "掃描已停止" - }, - "GRID": { - "PLACEHOLDER": "沒有找到任何掃描結果!", - "COLUMN_ID": "弱點識別碼", - "COLUMN_SEVERITY": "嚴重程度", - "COLUMN_PACKAGE": "套件", - "COLUMN_PACKAGES": "套件", - "COLUMN_VERSION": "目前版本", - "COLUMN_FIXED": "修復版本", - "COLUMN_DESCRIPTION": "描述", - "FOOT_ITEMS": "項目", - "FOOT_OF": "總共", - "IN_ALLOW_LIST": "列在 CVE 白名單中", - "CVSS3": "CVSS3" - }, - "CHART": { - "SCANNING_TIME": "掃描完成時間:", - "SCANNING_PERCENT": "掃描完成百分比:", - "SCANNING_PERCENT_EXPLAIN": "掃描完成百分比是根據成功掃描的映像檔數量和映像檔索引內的總映像檔數量計算的。", - "TOOLTIPS_TITLE": "{{totalPackages}} 個{{package}}中的{{totalVulnerability}}個已知{{vulnerability}}。", - "TOOLTIPS_TITLE_SINGULAR": "{{totalPackages}} 個{{package}}中的{{totalVulnerability}}個已知{{vulnerability}}。", - "TOOLTIPS_TITLE_ZERO": "沒有發現可識別的弱點" - }, - "SEVERITY": { - "CRITICAL": "嚴重", - "HIGH": "高", - "MEDIUM": "中", - "LOW": "低", - "NONE": "無" - }, - "SINGULAR": "弱點", - "OVERALL_SEVERITY": "弱點嚴重度:", - "NO_VULNERABILITY": "沒有弱點", - "PLURAL": "弱點", - "PLACEHOLDER": "篩選弱點", - "PACKAGE": "套件", - "PACKAGES": "套件", - "SCAN_NOW": "開始掃描", - "SCAN_BY": "由 {{scanner}} 掃描", - "REPORTED_BY": "由 {{scanner}} 報告", - "NO_SCANNER": "無掃描器", - "TRIGGER_STOP_SUCCESS": "成功觸發停止掃描", - "STOP_NOW": "Stop Scan Vulnerability" - }, - "PUSH_IMAGE": { - "TITLE": "推送命令", - "DOCKER": "Docker", - "PODMAN": "Podman", - "HELM": "Helm", - "CNAB": "CNAB", - "TAG_COMMAND_CHART": "為此專案打包 Helm Chart:", - "PUSH_COMMAND_CHART": "將 Helm Chart 推送至此專案:", - "PUSH_COMMAND_CNAB": "將 CNAB 推送至此專案:", - "TOOLTIP": "推送映像擋至此專案的參考命令。", - "TAG_COMMAND": "為此專案標記映像檔:", - "PUSH_COMMAND": "將映像檔推送至此專案:", - "COPY_ERROR": "複製失敗,請嘗試手動複製參考命令。", - "COPY_PULL_COMMAND": "複製拉取命令" - }, - "ARTIFACT": { - "FILTER_FOR_ARTIFACTS": "篩選 Artifact(s)", - "ADDITIONS": "其他", - "ANNOTATION": "註解", - "OVERVIEW": "概覽", - "IMAGE": "映像檔", - "CHART": "CHART", - "CNAB": "CNAB", - "WASM": "WASM", - "TAGGED": "包含 Tag", - "UNTAGGED": "不包含 Tag", - "ALL": "全部", - "PLACEHOLDER": "未發現任何 artifacts!", - "SCAN_UNSUPPORTED": "不支援掃描", - "SBOM_UNSUPPORTED": "Unsupported", - "SUMMARY": "摘要", - "DEPENDENCIES": "相依性", - "VALUES": "值", - "NAME": "名稱", - "REPO": "儲存庫", - "OF": "共計", - "VERSION": "版本", - "NO_README": "此 Helm Chart 未提供 README 文件", - "ITEMS": "筆紀錄", - "SHOW_KV": "顯示鍵值對", - "SHOW_YAML": "顯示 YAML 檔案" - }, - "TAG": { - "CREATION_TIME_PREFIX": "建立於", - "CREATOR_PREFIX": "建立者:", - "ANONYMITY": "匿名", - "IMAGE_DETAILS": "映像檔詳細資訊", - "DOCKER_VERSION": "Docker 版本", - "ARCHITECTURE": "架構", - "OS": "作業系統", - "OS_VERSION": "作業系統版本", - "HAVE": "有", - "HAS": "有", - "SCAN_COMPLETION_TIME": "掃描完成時間", - "IMAGE_VULNERABILITIES": "映像檔弱點", - "LEVEL_VULNERABILITIES": "弱點等級", - "PLACEHOLDER": "我們找不到任何標籤!", - "COPY_ERROR": "複製失敗,請嘗試手動複製。", - "FILTER_FOR_TAGS": "篩選標籤", - "AUTHOR": "作者", - "LABELS": "標籤", - "CREATION": "建立於", - "COMMAND": "指令", - "UPLOADTIME": "上傳時間", - "NAME": "名稱", - "PULL_TIME": "拉取時間", - "PUSH_TIME": "推送時間", - "OF": "的", - "ITEMS": "項目", - "ADD_TAG": "新增標籤", - "REMOVE_TAG": "移除標籤", - "NAME_ALREADY_EXISTS": "儲存庫下已存在此標籤" - }, - "LABEL": { - "LABEL": "標籤", - "DESCRIPTION": "描述", - "CREATION_TIME": "建立時間", - "NEW_LABEL": "新增標籤", - "EDIT": "編輯", - "DELETE": "刪除", - "LABEL_NAME": "標籤名稱", - "COLOR": "顏色", - "FILTER_LABEL_PLACEHOLDER": "篩選標籤", - "NO_LABELS": "無標籤", - "DELETION_TITLE_TARGET": "確認刪除標籤", - "DELETION_SUMMARY_TARGET": "您是否要刪除 {{param}} ?", - "PLACEHOLDER": "未找到任何標籤!", - "NAME_ALREADY_EXISTS": "標籤名稱已存在。" - }, - "QUOTA": { - "PROJECT": "專案", - "OWNER": "擁有者", - "COUNT": "數量", - "STORAGE": "儲存空間", - "EDIT": "編輯", - "DELETE": "刪除", - "OF": "共計", - "PROJECT_QUOTA_DEFAULT_ARTIFACT": "每個專案的預設 artifact 數量", - "PROJECT_QUOTA_DEFAULT_DISK": "每個專案的預設儲存配額", - "EDIT_PROJECT_QUOTAS": "修改專案配額", - "EDIT_DEFAULT_PROJECT_QUOTAS": "修改專案預設配額", - "SET_QUOTAS": "為專案「{{params}}」設定配額", - "SET_DEFAULT_QUOTAS": "建立新專案時設定預設配額", - "COUNT_QUOTA": "artifact 數量", - "COUNT_DEFAULT_QUOTA": "預設 artifact 數量", - "STORAGE_QUOTA": "專案儲存配額限制", - "STORAGE_DEFAULT_QUOTA": "預設儲存空間使用量", - "SAVE_SUCCESS": "配額編輯成功", - "UNLIMITED": "無限制", - "INVALID_INPUT": "輸入無效", - "PLACEHOLDER": "我們找不到任何專案配額", - "FILTER_PLACEHOLDER": "根據名稱搜尋(完全符合)", - "QUOTA_USED": "已使用配額" - }, - "WEEKLY": { - "MONDAY": "週一", - "TUESDAY": "週二", - "WEDNESDAY": "週三", - "THURSDAY": "週四", - "FRIDAY": "週五", - "SATURDAY": "週六", - "SUNDAY": "週日" - }, - "OPERATION": { - "LOCAL_EVENT": "本地事件", - "ALL": "全部", - "RUNNING": "執行中", - "FAILED": "失敗", - "STOP_EXECUTIONS": "停止執行", - "DELETE_PROJECT": "刪除專案", - "DELETE_REPO": "刪除儲存庫", - "DELETE_TAG": "刪除標籤", - "DELETE_USER": "刪除使用者", - "DELETE_ROBOT": "刪除機器人", - "DELETE_REGISTRY": "刪除 Registry", - "DELETE_REPLICATION": "刪除複製項目", - "DELETE_MEMBER": "刪除使用者成員", - "DELETE_GROUP": "刪除群組成員", - "DELETE_CHART_VERSION": "刪除 Helm Chart 版本", - "DELETE_CHART": "刪除 Helm Chart", - "SWITCH_ROLE": "切換角色", - "ADD_GROUP": "新增群組成員", - "ADD_USER": "新增使用者成員", - "DELETE_LABEL": "刪除標籤", - "REPLICATION": "複製", - "DAY_AGO": "天前", - "HOUR_AGO": "小時前", - "MINUTE_AGO": "分鐘前", - "SECOND_AGO": "不到一分鐘前", - "EVENT_LOG": "事件紀錄" - }, - "UNKNOWN_ERROR": "發生未知錯誤,請稍後再試。", - "UNAUTHORIZED_ERROR": "工作階段無效或者已經過期,請重新登入以繼續。", - "REPO_READ_ONLY": "Harbor 被設定為唯獨模式,在此模式下,不能刪除儲存庫、Tag 及推送映像檔。", - "FORBIDDEN_ERROR": "目前操作被禁止,請確認您有有效的權限。", - "GENERAL_ERROR": "呼叫後台服務時出現錯誤: {{param}} 。", - "BAD_REQUEST_ERROR": "錯誤請求,操作無法完成。", - "NOT_FOUND_ERROR": "對像不存在,請求無法完成。", - "CONFLICT_ERROR": "請求包含衝突,操作無法完成。", - "PRECONDITION_FAILED": "驗證前置條件失敗,無法執行操作。", - "SERVER_ERROR": "伺服器出現內部錯誤,請求無法完成。", - "INCONRRECT_OLD_PWD": "舊密碼不正確。", - "UNKNOWN": "未知", - "STATUS": "狀態", - "START_TIME": "建立時間", - "UPDATE_TIME": "更新時間", - "LOGS": "日誌", - "PENDING": "未開始", - "FINISHED": "已完成", - "STOPPED": "已停止", - "RUNNING": "執行中", - "ERROR": "錯誤", - "SCHEDULE": { - "NONE": "無", - "DAILY": "每天", - "WEEKLY": "每週", - "HOURLY": "每小時", - "CUSTOM": "自定義", - "MANUAL": "手動", - "SCHEDULE": "已排程", - "CRON": "定時", - "ON": "於", - "AT": "在", - "NOSCHEDULE": "取得排程時出現錯誤" - }, - "GC": { - "CURRENT_SCHEDULE": "目前的垃圾回收排程", - "GC_NOW": "立即執行垃圾回收", - "JOB_HISTORY": "垃圾回收歷史任務", - "JOB_ID": "任務 ID", - "TRIGGER_TYPE": "觸發類型", - "LATEST_JOBS": "最新的 {{param}} 個任務", - "MSG_SUCCESS": "垃圾回收成功", - "MSG_SCHEDULE_SET": "已設定垃圾回收排程", - "MSG_SCHEDULE_RESET": "已重設垃圾回收排程", - "PARAMETERS": "參數", - "DELETE_UNTAGGED": "允許對未標籤的檔案進行垃圾回收", - "EXPLAIN": "垃圾回收是一個密集計算的操作,可能影響 Registry 的效能", - "EXPLAIN_TIME_WINDOW": "過去 2 小時(預設窗口)內上傳的檔案將不包括在垃圾回收中", - "DRY_RUN_SUCCESS": "成功觸發模擬執行", - "DELETE_DETAIL": "{{blob}} 個 blob 和 {{manifest}} 個 manifest 已刪除,釋放了 {{size}} 的空間", - "DELETE_DETAIL_DRY_RUN": "{{blob}} 個 blob 和 {{manifest}} 個 manifest 可以刪除,可以釋放 {{size}} 的空間", - "WORKERS_TOOLTIP": "設定可同時執行垃圾回收任務的工作數量,預設值是 1。" - }, - "RETAG": { - "MSG_SUCCESS": "Artifact 複製成功", - "TIP_REPO": "儲存庫名稱被分解成路徑元素。每個元素必須至少包括一個小寫字母、字母數字字元,可選用句點、破折號或底線分隔。嚴格來說,它必須符合正規表達式 [a-z0-9]+(?:[._-][a-z0-9]+)*。如果儲存庫名稱有兩個或更多路徑元素,它們必須用正斜槓('/')分隔。儲存庫名稱的總長度(包括斜槓)必須少於 256 個字元。", - "TIP_TAG": "標籤(Tag)是套用到儲存庫中 Docker 映像檔的一個標籤,用來區別儲存庫內的不同映像檔。標籤必須符合正規表達式:`[\\w][\\w.-]{0,127}`。" - }, - "CVE_ALLOWLIST": { - "DEPLOYMENT_SECURITY": "部署安全性", - "CVE_ALLOWLIST": "CVE 白名單", - "SYS_ALLOWLIST_EXPLAIN": "在計算映像檔的的安全性弱點時,在系統的 CVE 白名單中的弱點將會被忽略。", - "ADD_SYS": "可新增一條或多條 CVE ID 至系統的 CVE 白名單中", - "WARNING_SYS": "系統的 CVE 白名單已過期. 請延長有效期以使白名單生效", - "WARNING_PRO": "該專案的 CVE 白名單已過期. 請延長有效期以使白名單生效", - "ADD": "新增", - "ENTER": "輸入 CVE ID", - "HELP": "CVE ID之間請用英文逗號隔開或者換行", - "NONE": "無", - "EXPIRES_AT": "有效期至", - "NEVER_EXPIRES": "永不過期", - "PRO_ALLOWLIST_EXPLAIN": "專案白名單允許此清單中的弱點在推送和拉取映像檔時被忽略。", - "PRO_OR_SYS": "您可以使用在系統層級設定的預設白名單,或點選「專案白名單」以建立新白名單。", - "MERGE_INTO": "您可以點選「複製系統白名單」項將系統白名單合併至該專案白名單中,並可為該專案白名單新增個別的 CVE IDs", - "SYS_ALLOWLIST": "系統白名單", - "PRO_ALLOWLIST": "專案白名單", - "ADD_SYSTEM": "複製系統白名單" - }, - "TAG_RETENTION": { - "TAG_RETENTION": "標籤保留", - "RETENTION_RULES": "保留規則", - "RULE_NAME_1": "最近{{number}}天的映像檔", - "RULE_NAME_2": "最近活躍的{{number}}個映像檔", - "RULE_NAME_3": "最近推送的{{number}}個映像檔", - "RULE_NAME_4": "最近拉取的{{number}}個映像檔", - "RULE_NAME_5": "全部映像檔", - "ADD_RULE": "新增規則", - "ADD_RULE_HELP_1": "點選新增按鈕可新增規則", - "ADD_RULE_HELP_2": "Tag 保留原則每天執行一次.", - "RETENTION_RUNS": "執行保留原則", - "RUN_NOW": "立即執行", - "WHAT_IF_RUN": "模擬執行", - "ABORT": "中止", - "SERIAL": "ID", - "STATUS": "狀態", - "DRY_RUN": "模擬執行", - "START_TIME": "開始時間", - "DURATION": "持續時間", - "DETAILS": "詳細資訊", - "REPOSITORY": "儲存庫", - "EDIT": "編輯", - "DISABLE": "停用", - "ENABLE": "啟用", - "DELETE": "刪除", - "ADD_TITLE": "新增Tag 保留規則", - "ADD_SUBTITLE": "為目前專案指定 tag 保留規則。所有 tag 保留規則獨立計算並且適用於所有符合條件的儲存庫。", - "BY_WHAT": "以映像檔或天數為條件", - "RULE_TEMPLATE_1": "最近#天的映像檔", - "RULE_TEMPLATE_2": "最近活躍的#個映像檔", - "RULE_TEMPLATE_3": "最近推送的#個映像檔", - "RULE_TEMPLATE_4": "最近拉取的#個映像檔", - "RULE_TEMPLATE_5": "全部", - "ACTION_RETAIN": "保留", - "UNIT_DAY": "天數", - "UNIT_COUNT": "個數", - "NUMBER": "數量", - "IN_REPOSITORIES": "套用到儲存庫", - "REP_SEPARATOR": "使用逗號分隔repos,repo*和**", - "TAGS": "標籤", - "INCLUDE_UNTAGGED": "無標記的", - "UNTAGGED": "無標籤", - "MATCHES_TAGS": "符合標籤", - "MATCHES_EXCEPT_TAGS": "排除標籤", - "TAG_SEPARATOR": "輸入多個逗號分隔的 Tags,Tag*或**。可透過勾選將未加Tag 的映像檔作為此原則的一部分。", - "LABELS": "標籤", - "MATCHES_LABELS": "符合標籤", - "MATCHES_EXCEPT_LABELS": "排除標籤", - "REP_LABELS": "使用逗號分割標籤", - "RETENTION_RUN": "執行保留原則", - "RETENTION_RUN_EXPLAIN": "執行保留原則將對該專案中的映像檔產生反向影響,受影響的映像檔 tags 將會被刪除。您可選擇取消或者使用模擬執行,或者點選執行以繼續。", - "RETENTION_RUN_ABORTED": "中止執行保留原則", - "RETENTION_RUN_ABORTED_EXPLAIN": "已中止執行保留原則,已刪除的映像檔不可恢復。您可執行另一個執行命令以便繼續刪除映像檔。如需模擬執行,請點選模擬執行按鈕。", - "LOADING": "載入中...", - "NO_EXECUTION": "暫無記錄!", - "NO_HISTORY": "暫無記錄!", - "DELETION": "刪除記錄", - "EDIT_TITLE": "編輯Tag保留規則", - "LOG": "日誌", - "EXCLUDES": "排除", - "MATCHES": "符合", - "REPO": "儲存庫", - "EXC": "排除", - "MAT": "符合", - "AND": "且", - "WITH": "有", - "WITHOUT": "沒有", - "LOWER_LABELS": "標籤", - "WITH_CONDITION": "基於條件", - "LOWER_TAGS": " 標籤", - "TRIGGER": "定時執行", - "RETAINED": "保留數量", - "TOTAL": "總數", - "NONE": "空", - "RULE_NAME_6": "最近{{number}}天被拉取過的映像檔", - "RULE_NAME_7": "最近{{number}}天被推送過的映像檔", - "RULE_TEMPLATE_6": "最近#天被拉取過的映像檔", - "RULE_TEMPLATE_7": "最近#天被推送過的映像檔", - "SCHEDULE": "定時任務", - "SCHEDULE_WARNING": "執行保留原則將會刪除受影響的映像檔,且無法回復。請在制定定時任務前仔細檢查所有保留規則。", - "EXISTING_RULE": "規則已存在", - "ILLEGAL_RULE": "規則無效", - "INVALID_RULE": "無效規則", - "COUNT_LARGE": "參數“個數”太大", - "DAYS_LARGE": "參數“天數”太大", - "EXECUTION_TYPE": "執行類型", - "ACTION": "操作", - "YES": "Yes", - "NO": "No" - }, - "IMMUTABLE_TAG": { - "IMMUTABLE_RULES": "不可變更的標籤規則", - "ADD_RULE": "新增規則", - "ADD_RULE_HELP_1": "點選新增規則按鈕以加入規則。", - "EDIT": "編輯", - "DISABLE": "停用", - "ENABLE": "啟用", - "DELETE": "刪除", - "ADD_TITLE": "新增標籤不可變更規則", - "ADD_SUBTITLE": "為此專案指定標籤不可變更規則。注意:所有標籤不可變更規則都將首先獨立計算,然後合併以得到最終的不可變更標籤集合。", - "IN_REPOSITORIES": "套用至儲存庫", - "REP_SEPARATOR": "輸入多個逗號分隔的儲存庫,例如 repos,repo* 或 **。", - "TAGS": "標籤", - "TAG_SEPARATOR": "輸入多個逗號分隔的標籤,例如 tags,tag* 或 **。", - "EDIT_TITLE": "編輯標籤不可變更規則", - "EXC": "排除", - "MAT": "符合", - "AND": "且", - "WITH": "含有", - "WITHOUT": "不含", - "LOWER_LABELS": "標籤", - "LOWER_TAGS": "標籤", - "NONE": "無", - "EXISTING_RULE": "既有規則", - "ACTION": "操作" - }, - "SCANNER": { - "DELETION_SUMMARY": "您是否要刪除掃描器 {{param}}?", - "SKIP_CERT_VERIFY": "當遠端 Registry 使用自我簽署或不受信任的憑證時,請勾選此框以跳過憑證驗證。", - "NAME": "名稱", - "NAME_EXISTS": "名稱已存在", - "NAME_REQUIRED": "名稱必填", - "NAME_REX": "名稱必須由小寫字母、數字和 ._- 組成,至少2個字元,並且必須以字母或數字開頭。", - "DESCRIPTION": "描述", - "SBOM": "SBOM", - "VULNERABILITY": "Vulnerability", - "SUPPORTED": "Supported", - "NOT_SUPPORTED": "Not Supported", - "ENDPOINT": "端點", - "ENDPOINT_EXISTS": "端點 URL 已存在", - "ENDPOINT_REQUIRED": "端點 URL 必填", - "ILLEGAL_ENDPOINT": "端點 URL 無效", - "AUTH": "認證", - "NONE": "無", - "BASIC": "Basic", - "BEARER": "Bearer", - "API_KEY": "API 金鑰", - "USERNAME": "使用者名稱", - "USERNAME_REQUIRED": "使用者名稱必填", - "PASSWORD": "密碼", - "PASSWORD_REQUIRED": "密碼必填", - "TOKEN": "權杖", - "TOKEN_REQUIRED": "權杖必填", - "API_KEY_REQUIRED": "API 金鑰必填", - "SKIP": "跳過憑證驗證", - "ADD_SCANNER": "新增掃描器", - "EDIT_SCANNER": "編輯掃描器", - "TEST_CONNECTION": "測試連接", - "ADD_SUCCESS": "新增成功", - "TEST_PASS": "測試通過", - "TEST_FAILED": "Ping: 目標位址 {{name}}:{{url}} 無法連接", - "UPDATE_SUCCESS": "更新成功", - "SCANNER_COLON": "掃描器:", - "NAME_COLON": "名稱:", - "VENDOR_COLON": "供應商:", - "VERSION_COLON": "版本:", - "CAPABILITIES": "功能:", - "CONSUMES_MIME_TYPES_COLON": "可處理的 MIME 類型:", - "PRODUCTS_MIME_TYPES_COLON": "產出的 MIME 類型:", - "CAPABILITIES_TYPE": "Type:", - "PROPERTIES": "屬性", - "NEW_SCANNER": "新增掃描器", - "SET_AS_DEFAULT": "設為預設", - "HEALTH": "健康狀態", - "DISABLED": "已停用", - "NO_SCANNER": "找不到任何掃描器", - "DEFAULT": "預設", - "HEALTHY": "健康", - "UNHEALTHY": "不健康", - "SCANNERS": "掃描器", - "SCANNER": "掃描器", - "EDIT": "編輯", - "NOT_AVAILABLE": "不可用", - "ADAPTER": "轉接器", - "VENDOR": "供應商", - "VERSION": "版本", - "SELECT_SCANNER": "選擇掃描器", - "ENABLED": "已啟用", - "ENABLE": "啟用", - "DISABLE": "停用", - "DELETE_SUCCESS": "刪除成功", - "TOTAL": "總計", - "FIXABLE": "可修復", - "DURATION": "掃描用時:", - "OPTIONS": "選項", - "USE_INNER": "使用內部儲存庫位址", - "USE_INNER_TIP": "勾選此選項,掃描器將被強制使用內部儲存庫位址來存取相關內容。", - "VULNERABILITY_SEVERITY": "弱點嚴重程度:", - "CONFIRM_DELETION": "確認刪除掃描器", - "NO_PROJECT_SCANNER": "無掃描器", - "SET_UNHEALTHY_SCANNER": "所選擇的掃描器:{{name}} 是不健康的", - "SCANNED_BY": "由此掃描:", - "IMAGE_SCANNERS": "映像檔掃描器", - "VIEW_DOC": "檢視文件", - "ALL_SCANNERS": "全部掃描器", - "HELP_INFO_1": "預設掃描器已安裝。如需其他掃描器的安裝說明,請參閱", - "HELP_INFO_2": "說明文件。", - "NO_DEFAULT_SCANNER": "未設定預設掃描器" - }, - "DISTRIBUTION": { - "FILTER_INSTANCE_PLACEHOLDER": "篩選實例", - "FILTER_HISTORIES_PLACEHOLDER": "篩選歷史記錄", - "ADD_ACTION": "新增實例", - "PREHEAT_ACTION": "預載", - "EDIT_ACTION": "編輯", - "ENABLE_ACTION": "啟用", - "DISABLE_ACTION": "停用", - "DELETE_ACTION": "刪除", - "NOT_FOUND": "找不到任何實例!", - "NAME": "名稱", - "ENDPOINT": "端點", - "STATUS": "狀態", - "ENABLED": "已啟用", - "SETUP_TIMESTAMP": "設定時間戳", - "PROVIDER": "提供者", - "DELETION_TITLE": "確認刪除實例", - "DELETION_SUMMARY": "您是否要刪除實例 {{param}}?", - "ENABLE_TITLE": "啟用實例", - "ENABLE_SUMMARY": "您是否要啟用實例 {{param}}?", - "DISABLE_TITLE": "停用實例", - "DISABLE_SUMMARY": "您是否要停用實例 {{param}}?", - "IMAGE": "映像檔", - "START_TIME": "開始時間", - "FINISH_TIME": "完成時間", - "INSTANCE": "實例", - "HISTORIES": "歷史記錄", - "CREATE_SUCCESS": "成功建立實例", - "CREATE_FAILED": "建立實例失敗", - "DELETED_SUCCESS": "成功刪除實例", - "DELETED_FAILED": "刪除實例失敗", - "ENABLE_SUCCESS": "成功啟用實例", - "ENABLE_FAILED": "啟用實例失敗", - "DISABLE_SUCCESS": "成功停用實例", - "DISABLE_FAILED": "停用實例失敗", - "UPDATE_SUCCESS": "成功更新實例", - "UPDATE_FAILED": "更新實例失敗", - "REQUEST_PREHEAT_SUCCESS": "預載請求成功", - "REQUEST_PREHEAT_FAILED": "預載請求失敗", - "DESCRIPTION": "描述", - "AUTH_MODE": "驗證模式", - "USERNAME": "使用者名稱", - "PASSWORD": "密碼", - "TOKEN": "權杖", - "SETUP_NEW_INSTANCE": "設定新實例", - "EDIT_INSTANCE": "編輯實例", - "SETUP": { - "NAME_PLACEHOLDER": "輸入實例名稱", - "DESCRIPTION_PLACEHOLDER": "輸入實例描述", - "ENDPOINT_PLACEHOLDER": "輸入實例端點", - "USERNAME_PLACEHOLDER": "輸入使用者名稱", - "PASSWORD_PLACEHOLDER": "輸入密碼", - "TOKEN_PLACEHOLDER": "輸入權杖" - }, - "MAINTAINER": "維護者", - "SOURCE": "來源", - "VERSION": "版本", - "SET_AS_DEFAULT": "設為預設", - "DELETE_INSTANCE": "刪除實例", - "ENABLE_INSTANCE": "啟用實例", - "DISABLE_INSTANCE": "停用實例", - "SET_DEFAULT_SUCCESS": "設為預設成功", - "SET_DEFAULT_FAILED": "設為預設失敗", - "UPDATE_INSTANCE": "更新實例", - "CREATE_INSTANCE": "建立實例" - }, - "P2P_PROVIDER": { - "P2P_PROVIDER": "P2P 預載", - "POLICIES": "原則", - "NEW_POLICY": "新增原則", - "NAME": "名稱", - "ENABLED": "已啟用", - "PROVIDER": "提供者", - "FILTERS": "篩選器", - "TRIGGER": "觸發器", - "CREATED": "建立時間", - "DESCRIPTION": "描述", - "SCOPE": "範圍", - "SCOPE_SINGLE_PEER": "單節點", - "SCOPE_ALL_PEERS": "全節點", - "NO_POLICY": "無原則", - "ENABLED_POLICY_SUMMARY": "您是否要啟用原則 {{name}}?", - "DISABLED_POLICY_SUMMARY": "您是否要停用原則 {{name}}?", - "ENABLED_POLICY_TITLE": "啟用原則", - "DISABLED_POLICY_TITLE": "停用原則", - "DELETE_POLICY_SUMMARY": "您是否要刪除原則 {{names}}?", - "EDIT_POLICY": "編輯 P2P 提供者原則", - "ADD_POLICY": "建立 P2P 提供者原則", - "NAME_REQUIRED": "名稱為必填選項", - "PROVIDER_REQUIRED": "提供者為必填選項", - "ADDED_SUCCESS": "新增原則成功", - "UPDATED_SUCCESS": "更新原則成功", - "EXECUTE": "執行", - "EXECUTE_SUCCESSFULLY": "成功執行", - "EXECUTE_TITLE": "確認原則執行", - "EXECUTE_SUMMARY": "您是否要執行原則 {{param}}?", - "STOP_TITLE": "確認停止執行", - "STOP_SUMMARY": "您是否要停止執行原則 {{param}}?", - "STOP_SUCCESSFULLY": "成功停止執行", - "STATUS_MSG": "狀態訊息", - "JOB_PLACEHOLDER": "找不到任何執行作業", - "PROVIDER_TYPE": "提供者類型", - "ID": "執行 ID", - "NO_PROVIDER": "請先新增一個提供者", - "ARTIFACT": "Artifact", - "DIGEST": "Digest", - "TYPE": "類型", - "TASKS": "任務", - "TASKS_PLACEHOLDER": "找不到任何任務", - "SEVERITY_WARNING": "此處的弱點設定與相關專案設定衝突,將覆蓋此處的設定", - "REPOS": "儲存庫", - "TAGS": "標籤", - "CRITERIA": "標準", - "ONLY_SIGNED": "僅限已簽署的映像檔", - "PREHEAT_ON_PUSH": "推送時預載", - "START_TEXT": "無弱點嚴重性", - "EDN_TEXT": "及以上", - "LABELS": "標籤", - "SCHEDULE": "排程", - "TEST_FAILED": "測試失敗", - "MANUAL": "手動", - "SCHEDULED": "定時", - "EVENT_BASED": "事件基礎", - "EVENT_BASED_EXPLAIN_LINE1": "以下事件發生時,將評估原則:", - "EVENT_BASED_EXPLAIN_LINE2": "已推送 Artifact", - "EVENT_BASED_EXPLAIN_LINE3": "已標記 Artifact", - "EVENT_BASED_EXPLAIN_LINE4": "已掃描 Artifact", - "REPO_REQUIRED": "儲存庫為必填選項", - "TAG_REQUIRED": "標籤為必填選項", - "DELETE_SUCCESSFULLY": "成功刪除原則", - "UPDATED_SUCCESSFULLY": "成功更新原則", - "EXECUTIONS": "執行次數", - "TAG_SEPARATOR": "輸入多個逗號分隔的標籤,標籤*,或 **", - "CONTENT_WARNING": "此處的內容信任設定與相關專案設定衝突,將覆蓋此處的設定", - "PREHEAT_EXPLAIN": "預載將映像檔遷移到 P2P 網絡", - "CRITERIA_EXPLAIN": "如 '部署安全性' 部分所指定的設定標籤", - "SKIP_CERT_VERIFY": "若遠端提供者使用自簽署或不受信任的憑證,請勾選此框以跳過憑證驗證", - "NAME_TOOLTIP": "原則名稱由一個或多個組合構成,每個組合包括大寫字母、小寫字母或數字;組合之間用點、底線或連字符分隔。", - "NEED_HELP": "請向您的系統管理員尋求協助以新增一個提供者" - }, - "PAGINATION": { - "PAGE_SIZE": "每頁顯示數量" - }, - "SYSTEM_ROBOT": { - "READ": "讀取", - "CREATE": "建立", - "ARTIFACT": "Artifact", - "ADD_ROBOT": "新增機器人", - "UPDATE_ROBOT": "更新機器人", - "UPDATE_ROBOT_SUCCESSFULLY": "機器人更新成功", - "PLACEHOLDER": "輸入新的密鑰", - "SECRET": "密鑰應包含至少 1 個大寫字母、1 個小寫字母和 1 個數字,長度為 8-128 個字元。", - "REFRESH_SECRET": "更新密鑰", - "REFRESH_SECRET_SUCCESS": "密鑰更新成功", - "DELETE_ROBOT": "刪除機器人", - "DELETE_ROBOT_SUCCESS": "成功刪除機器人", - "ENABLE_TITLE": "啟用機器人", - "ENABLE_SUMMARY": "您是否要啟用機器人 {{param}}?", - "DISABLE_TITLE": "停用機器人", - "DISABLE_SUMMARY": "您是否要停用機器人 {{param}}?", - "ENABLE_ROBOT_SUCCESSFULLY": "成功啟用機器人", - "DISABLE_ROBOT_SUCCESSFULLY": "成功停用機器人", - "ROBOT_ACCOUNT": "機器人帳號", - "PROJECTS": "專案", - "ALL_PROJECTS": "所有專案", - "PERMISSIONS": "權限", - "REFRESH_SECRET_SUMMARY": "自動更新機器人帳號的密鑰,或者選擇開啟詳細資訊手動指定新的密鑰", - "TOKEN": "密鑰", - "NEW_TOKEN": "新密鑰", - "REFRESH": "更新", - "PROJECTS_MODAL_TITLE": "機器人帳號的專案", - "PROJECTS_MODAL_SUMMARY": "這些是此機器人帳號涵蓋的專案。", - "CREATE_ROBOT": "建立系統機器人帳號", - "CREATE_ROBOT_SUMMARY": "Create a system Robot Account that will cover permissions for the system as well as for specific projects", - "EDIT_ROBOT": "編輯系統機器人帳號", - "EDIT_ROBOT_SUMMARY": "Edit a system Robot Account that will cover permissions for the system as well as for specific projects", - "EXPIRATION_TIME": "到期時間", - "EXPIRATION_TIME_EXPLAIN": "機器人帳號的權杖到期時間(以建立時間為起點的天數)。要使其永不過期,請輸入「-1」。", - "EXPIRATION_DEFAULT": "天(預設)", - "EXPIRATION_DAYS": "指定天數", - "EXPIRATION_NEVER": "永不", - "EXPIRATION_REQUIRED": "需要有效的到期時間", - "COVER_ALL": "涵蓋所有專案", - "COVER_ALL_EXPLAIN": "選擇以套用到所有現有和未來的專案", - "COVER_ALL_SUMMARY": "選擇了所有現有和未來的專案。", - "RESET_PERMISSION": "RESET ALL PROJECT PERMISSIONS", - "PERMISSION_COLUMN": "權限", - "EXPIRES_AT": "到期於", - "VIEW_SECRET": "更新密鑰", - "LEGACY": "舊版", - "CREATE_PROJECT_ROBOT": "建立專案機器人帳號", - "CREATE_PROJECT_ROBOT_SUMMARY": "為此專案建立一個機器人帳號", - "EDIT_PROJECT_ROBOT": "編輯機器人帳號", - "EDIT_PROJECT_ROBOT_SUMMARY": "編輯此專案的機器人帳號", - "NOT_FOUND": "我們找不到任何機器人!", - "SELECT_ALL": "全選", - "UNSELECT_ALL": "取消全選", - "ROBOT_ACCOUNT_NAV": "機器人帳號", - "COVERED_PROJECTS": "涵蓋的專案", - "CONFIRM_SECRET": "確認密鑰", - "SECRET_AGAIN": "再次輸入密鑰", - "INCONSISTENT": "兩個密鑰不一致", - "NAME_TOOLTIP": "機器人名稱應該是 1~255 個字元長,包含小寫字母、數字和 ._-,並且必須以字母或數字開頭。", - "ENABLE_NEW_SECRET": "啟用此選項以手動指定新的密鑰", - "DELETE": "刪除", - "ARTIFACT_LABEL": "Artifact 標籤", - "SCAN": "掃描", - "SCANNER_PULL": "掃描器拉取", - "SEARCH_BY_NAME": "按名稱搜尋(無前綴)", - "FINAL_PROJECT_NAME_TIP": "最終的專案機器人名稱由前綴、專案名稱、加號和目前輸入的值所組成", - "FINAL_SYSTEM_NAME_TIP": "最終的系統機器人名稱由前綴和目前輸入的值組所組成", - "PUSH_AND_PULL": "推送", - "PUSH_PERMISSION_TOOLTIP": "推送權限不能單獨使用,必須與拉取權限一起使用", - "STOP": "停止", - "LIST": "列表", - "REPOSITORY": "儲存庫", - "EXPIRES_IN": "到期於", - "EXPIRED": "已過期", - "SELECT_ALL_PROJECT": "SELECT ALL PROJECTS", - "UNSELECT_ALL_PROJECT": "UNSELECT ALL PROJECTS" - }, - "ACCESSORY": { - "DELETION_TITLE_ACCESSORY": "確認刪除附件", - "DELETION_SUMMARY_ACCESSORY": "您是否要刪除 artifact {{param}} 的所有附件?", - "DELETION_SUMMARY_ONE_ACCESSORY": "您是否要刪除附件 {{param}} ?", - "DELETE_ACCESSORY": "刪除附件", - "DELETED_SUCCESS": "附件刪除成功", - "DELETED_FAILED": "刪除附件失敗", - "CO_SIGNED": "由 Cosign 簽署", - "NOTARY_SIGNED": "由 Notary 簽署", - "ACCESSORY": "附件", - "ACCESSORIES": "附件", - "SUBJECT_ARTIFACT": "目標 artifact", - "CO_SIGN": "Cosign", - "NOTARY": "Notation", - "PLACEHOLDER": "找不到任何附件!" - }, - "CLEARANCES": { - "CLEARANCES": "清理", - "AUDIT_LOG": "日誌輪替", - "LAST_COMPLETED": "上次完成", - "NEXT_SCHEDULED_TIME": "下次預定時間", - "SCHEDULE_TO_PURGE": "安排清除", - "KEEP_IN": "保留記錄", - "KEEP_IN_TOOLTIP": "保留此區間內的記錄", - "KEEP_IN_ERROR": "此選項的值必須為整數,且時間值必須大於 0 且小於 10000 天", - "DAYS": "天", - "HOURS": "小時", - "INCLUDED_OPERATIONS": "包含的操作", - "INCLUDED_OPERATION_TOOLTIP": "移除所選操作的稽核日誌", - "INCLUDED_OPERATION_ERROR": "請至少選擇一個操作", - "PURGE_NOW": "立即清除", - "PURGE_NOW_SUCCESS": "成功觸發清除", - "PURGE_SCHEDULE_RESET": "清除排程已重設", - "PURGE_HISTORY": "清除歷史", - "FORWARD_ENDPOINT": "稽核日誌轉發 Syslog 端點", - "FORWARD_ENDPOINT_TOOLTIP": "將稽核日誌轉發至 syslog 端點,例如: harbor-log:10514", - "SKIP_DATABASE": "跳過稽核日誌資料庫", - "SKIP_DATABASE_TOOLTIP": "跳過在資料庫中記錄稽核日誌,僅在設定稽核日誌轉發端點時可用", - "STOP_GC_SUCCESS": "成功觸發停止清理垃圾操作", - "STOP_PURGE_SUCCESS": "成功觸發停止清除操作", - "NO_GC_RECORDS": "找不到任何清理垃圾歷史記錄!", - "NO_PURGE_RECORDS": "找不到任何清除歷史記錄!" - }, - "CVE_EXPORT": { - "EXPORT_SOME_PROJECTS": "匯出 CVE", - "ALL_PROJECTS": "所有專案", - "EXPORT_TITLE": "匯出 CVE", - "EXPORT_SUBTITLE": "設定匯出條件", - "EXPORT_CVE_FILTER_HELP_TEXT": "輸入多個以逗號分隔的 CVE ID", - "CVE_IDS": "CVE ID", - "EXPORT_BUTTON": "匯出", - "JOB_NAME": "工作名稱", - "JOB_NAME_REQUIRED": "工作名稱為必填選項", - "JOB_NAME_EXISTING": "工作名稱已存在", - "TRIGGER_EXPORT_SUCCESS": "成功觸發 CVE 匯出!" - }, - "JOB_SERVICE_DASHBOARD": { - "SCHEDULE_PAUSED": "已排程(暫停)", - "SCHEDULE_BEEN_PAUSED": "{{param}} 已被暫停", - "PENDING_JOBS": "等待中的工作佇列", - "OTHERS": "其他", - "STOP_ALL": "全部停止", - "CONFIRM_STOP_ALL": "確認停止全部", - "CONFIRM_STOP_ALL_CONTENT": "您確定要停止所有的工作佇列嗎?", - "STOP_ALL_SUCCESS": "成功停止所有的工作佇列", - "STOP_BTN": "停止", - "PAUSE_BTN": "暫停", - "RESUME_BTN": "恢復", - "JOB_TYPE": "工作類型", - "PENDING_COUNT": "等待數量", - "LATENCY": "延遲", - "PAUSED": "已暫停", - "NO_JOB_QUEUE": "我們找不到任何工作佇列", - "CONFIRM_STOPPING_JOBS": "確認停止工作", - "CONFIRM_STOPPING_JOBS_CONTENT": "您確定要停止工作 {{param}} 嗎?", - "CONFIRM_PAUSING_JOBS": "確認暫停工作", - "CONFIRM_PAUSING_JOBS_CONTENT": "您確定要暫停工作 {{param}} 嗎?", - "CONFIRM_RESUMING_JOBS": "確認恢復工作", - "CONFIRM_RESUMING_JOBS_CONTENT": "您確定要恢復工作 {{param}} 嗎?", - "STOP_SUCCESS": "成功停止工作", - "PAUSE_SUCCESS": "成功暫停工作", - "RESUME_SUCCESS": "成功恢復工作", - "SCHEDULES": "排程", - "RUNNING_STATUS": "正在執行", - "RESUME_ALL_BTN_TEXT": "全部恢復", - "PAUSE_ALL_BTN_TEXT": "全部暫停", - "CONFIRM_PAUSING_ALL": "確認暫停全部", - "CONFIRM_PAUSING_ALL_CONTENT": "您確定要暫停所有的工作排程嗎?", - "CONFIRM_RESUMING_ALL": "確認恢復全部", - "CONFIRM_RESUMING_ALL_CONTENT": "您確定要恢復所有的工作排程嗎?", - "PAUSE_ALL_SUCCESS": "成功暫停所有的排程", - "RESUME_ALL_SUCCESS": "成功恢復所有的排程", - "VENDOR_TYPE": "供應商類型", - "VENDOR_ID": "供應商 ID", - "NO_SCHEDULE": "我們找不到任何排程", - "WORKERS": "Worker", - "FREE_ALL": "全部釋放", - "CONFIRM_FREE_ALL": "確認釋放全部", - "CONFIRM_FREE_ALL_CONTENT": "您確定要釋放所有的 Worker 嗎?", - "CONFIRM_FREE_WORKERS": "確認釋放 Worker", - "CONFIRM_FREE_WORKERS_CONTENT": "您確定要釋放 Worker {{param}} 嗎?", - "FREE_WORKER_SUCCESS": "成功釋放 Worker", - "FREE_ALL_SUCCESS": "成功釋放所有的 Worker", - "WORKER_POOL": "Worker Pool", - "WORKER_POOL_ID": "Worker Pool ID", - "PID": "Pid", - "START_AT": "開始於", - "HEARTBEAT_AT": "最後回報時間", - "CONCURRENCY": "並行性", - "NO_WORKER_POOL": "我們找不到任何 Worker Pool", - "FREE": "釋放", - "WORKER_ID": "Worker ID", - "JOB_ID": "工作 ID", - "CHECK_IN_AT": "簽到於", - "NO_WORKER": "我們找不到任何 Worker", - "JOB_QUEUE": "工作佇列", - "JOB_SERVICE_DASHBOARD": "工作服務儀表板", - "OPERATION_STOP_ALL_QUEUES": "停止所有工作佇列", - "OPERATION_STOP_SPECIFIED_QUEUES": "停止指定的工作佇列", - "OPERATION_PAUSE_SPECIFIED_QUEUES": "暫停指定的工作佇列", - "OPERATION_RESUME_SPECIFIED_QUEUES": "恢復指定的工作佇列", - "OPERATION_PAUSE_SCHEDULE": "暫停所有排程", - "OPERATION_RESUME_SCHEDULE": "恢復所有排程", - "OPERATION_FREE_ALL": "釋放所有 Worker", - "OPERATION_FREE_SPECIFIED_WORKERS": "釋放指定的 Worker", - "QUEUE_STOP_BTN_INFO": "停止 — 停止並移除選定佇列中的所有工作。", - "QUEUE_PAUSE_BTN_INFO": "暫停 — 暫停此類型工作佇列中的工作執行。佇列暫停時,仍可將工作加入佇列。", - "QUEUE_RESUME_BTN_INFO": "恢復 — 恢復此類型工作佇列中的工作執行。", - "SCHEDULE_PAUSE_BTN_INFO": "暫停 — 暫停所有排程的執行。", - "SCHEDULE_RESUME_BTN_INFO": "恢復 — 恢復所有排程的執行。", - "WORKER_FREE_BTN_INFO": "停止目前正在執行的工作以釋放 Worker", - "CRON": "Cron", - "WAITING_TOO_LONG_1": "有些工作已經等待執行超過 24 小時。請檢查工作服務", - "WAITING_TOO_LONG_2": "儀表板。", - "WAITING_TOO_LONG_3": "更多詳細資訊,請參考", - "WAITING_TOO_LONG_4": "Wiki。" - }, - "CLARITY": { - "OPEN": "開啟", - "CLOSE": "關閉", - "SHOW": "顯示", - "HIDE": "隱藏", - "EXPAND": "展開", - "COLLAPSE": "收合", - "MORE": "更多", - "SELECT": "選擇", - "SELECT_ALL": "全選", - "PREVIOUS": "上一個", - "NEXT": "下一個", - "CURRENT": "跳至目前", - "INFO": "資訊", - "SUCCESS": "成功", - "WARNING": "警告", - "DANGER": "錯誤", - "ROW_ACTION": "可用操作", - "PICK_COLUMNS": "管理欄位", - "SHOW_COLUMNS": "顯示欄位", - "SORT_COLUMNS": "排序欄位", - "FIRST_PAGE": "第一頁", - "LAST_PAGE": "最後一頁", - "NEXT_PAGE": "下一頁", - "PREVIOUS_PAGE": "上一頁", - "CURRENT_PAGE": "目前頁面", - "TOTAL_PAGE": "總頁數", - "FILTER_ITEMS": "篩選項目", - "MIN_VALUE": "最小值", - "MAX_VALUE": "最大值", - "MODAL_CONTENT_START": "模態框內容開始", - "MODAL_CONTENT_END": "模態框內容結束", - "SHOW_COLUMNS_MENU_DESCRIPTION": "顯示或隱藏欄位選單", - "ALL_COLUMNS_SELECTED": "已選擇所有欄位", - "SIGNPOST_TOGGLE": "標誌牌切換", - "SIGNPOST_CLOSE": "標誌牌關閉", - "LOADING": "載入中", - "DATE_PICKER_DIALOG_LABEL": "選擇日期", - "DATE_PICKER_TOGGLE_CHOOSE_DATE_LABEL": "選擇日期", - "DATE_PICKER_TOGGLE_CHANGE_DATE_LABEL": "變更日期,{SELECTED_DATE}", - "DATE_PICKER_PREVIOUS_MONTH": "上個月", - "DATE_PICKER_CURRENT_MONTH": "本月", - "DATE_PICKER_NEXT_MONTH": "下個月", - "DATE_PICKER_PREVIOUS_DECADE": "上個十年", - "DATE_PICKER_NEXT_DECADE": "下個十年", - "DATE_PICKER_CURRENT_DECADE": "本十年", - "DATE_PICKER_SELECT_MONTH_TEXT": "選擇月份,目前月份為 {CALENDAR_MONTH}", - "DATE_PICKER_SELECT_YEAR_TEXT": "選擇年份,目前年份為 {CALENDAR_YEAR}", - "DATE_PICKER_SELECTED_LABEL": "{FULL_DATE} - 已選擇" - }, - "BANNER_MESSAGE": { - "BANNER_MESSAGE": "橫幅訊息", - "MESSAGE_TYPE": "訊息類型", - "CLOSABLE": "可關閉", - "FROM": "從", - "TO": "至", - "SUCCESS": "成功", - "INFO": "資訊", - "WARNING": "警告", - "DANGER": "危險", - "ENTER_MESSAGE": "在此輸入您的訊息" - }, - "SECURITY_HUB": { - "SECURITY_HUB": "安全中心", - "ARTIFACTS": "Artifact(s)", - "SCANNED": "已掃描", - "NOT_SCANNED": "未掃描", - "TOTAL_VUL": "總計弱點", - "TOTAL_AND_FIXABLE": "總共 {{totalNum}} 個,其中 {{fixableNum}} 個可修復", - "TOP_5_ARTIFACT": "前五名危險的 Artifacts", - "TOP_5_CVE": "前五名危險的 CVE", - "CVE_ID": "CVE ID", - "VUL": "弱點", - "CVE": "CVE", - "FILTER_BY": "篩選條件", - "OPTION_ALL": "全部", - "OPTION_PROJECT_ID_NAME": "專案名稱", - "SEARCH": "搜尋", - "REPO_NAME": "儲存庫名稱", - "TOOLTIP": "除了 CVSS3 之外,所有的篩選條件都只支援完全符合", - "NO_VUL": "我們找不到任何弱點", - "INVALID_VALUE": "The CVSS3 score should range between 0 and 10", - "PAGE_TITLE_TOOLTIP": "The comprehensive artifact count comprises the cumulative total of individual artifacts, including artifact accessories, as well as child artifacts associated with the image index and CNAB artifacts" - } + "SECURITY_HUB": { + "SECURITY_HUB": "安全中心", + "ARTIFACTS": "Artifact(s)", + "SCANNED": "已掃描", + "NOT_SCANNED": "未掃描", + "TOTAL_VUL": "總計弱點", + "TOTAL_AND_FIXABLE": "總共 {{totalNum}} 個,其中 {{fixableNum}} 個可修復", + "TOP_5_ARTIFACT": "前五名危險的 Artifacts", + "TOP_5_CVE": "前五名危險的 CVE", + "CVE_ID": "CVE ID", + "VUL": "弱點", + "CVE": "CVE", + "FILTER_BY": "篩選條件", + "OPTION_ALL": "全部", + "OPTION_PROJECT_ID_NAME": "專案名稱", + "SEARCH": "搜尋", + "REPO_NAME": "儲存庫名稱", + "TOOLTIP": "除了 CVSS3 之外,所有的篩選條件都只支援完全符合", + "NO_VUL": "我們找不到任何弱點", + "INVALID_VALUE": "The CVSS3 score should range between 0 and 10", + "PAGE_TITLE_TOOLTIP": "The comprehensive artifact count comprises the cumulative total of individual artifacts, including artifact accessories, as well as child artifacts associated with the image index and CNAB artifacts" + } } diff --git a/src/server/v2.0/handler/preheat.go b/src/server/v2.0/handler/preheat.go index 414d145a3..590d7663a 100644 --- a/src/server/v2.0/handler/preheat.go +++ b/src/server/v2.0/handler/preheat.go @@ -484,6 +484,7 @@ func convertPolicyToPayload(policy *policy.Schema) (*models.PreheatPolicy, error ProviderID: policy.ProviderID, Trigger: policy.TriggerStr, Scope: policy.Scope, + ExtraAttrs: policy.ExtraAttrsStr, UpdateTime: strfmt.DateTime(policy.UpdatedTime), }, nil } @@ -504,17 +505,18 @@ func convertParamPolicyToModelPolicy(model *models.PreheatPolicy) (*policy.Schem } return &policy.Schema{ - ID: model.ID, - Name: model.Name, - Description: model.Description, - ProjectID: model.ProjectID, - ProviderID: model.ProviderID, - FiltersStr: model.Filters, - TriggerStr: model.Trigger, - Enabled: model.Enabled, - Scope: model.Scope, - CreatedAt: time.Time(model.CreationTime), - UpdatedTime: time.Time(model.UpdateTime), + ID: model.ID, + Name: model.Name, + Description: model.Description, + ProjectID: model.ProjectID, + ProviderID: model.ProviderID, + FiltersStr: model.Filters, + TriggerStr: model.Trigger, + Enabled: model.Enabled, + Scope: model.Scope, + ExtraAttrsStr: model.ExtraAttrs, + CreatedAt: time.Time(model.CreationTime), + UpdatedTime: time.Time(model.UpdateTime), }, nil }