Merge pull request #13752 from AllForNothing/improve-robot

Improve refresh secret page for robot account UI
This commit is contained in:
Will Sun 2020-12-14 11:13:10 +08:00 committed by GitHub
commit 90f9bea965
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 65 additions and 32 deletions

View File

@ -18,7 +18,7 @@
type="text" id="name" type="text" id="name"
[(ngModel)]="systemRobot.name" [(ngModel)]="systemRobot.name"
required required
pattern='[^" ~#$%]+' pattern='^[a-z0-9]+(?:[._-][a-z0-9]+)*$'
maxLengthExt="255" maxLengthExt="255"
autocomplete="off" autocomplete="off"
size="30" name="name" #name="ngModel" (input)="inputName()"> size="30" name="name" #name="ngModel" (input)="inputName()">
@ -27,7 +27,7 @@
</div> </div>
<clr-control-error *ngIf="((name.dirty || name.touched) && name.invalid) || isNameExisting"> <clr-control-error *ngIf="((name.dirty || name.touched) && name.invalid) || isNameExisting">
<span *ngIf="!((name.dirty || name.touched) && name.invalid) && isNameExisting">{{'ROBOT_ACCOUNT.ACCOUNT_EXISTING' | translate}}</span> <span *ngIf="!((name.dirty || name.touched) && name.invalid) && isNameExisting">{{'ROBOT_ACCOUNT.ACCOUNT_EXISTING' | translate}}</span>
<span *ngIf="(name.dirty || name.touched) && name.invalid">{{ 'ROBOT_ACCOUNT.ROBOT_NAME' | translate }}</span> <span *ngIf="(name.dirty || name.touched) && name.invalid">{{ 'SYSTEM_ROBOT.NAME_TOOLTIP' | translate }}</span>
</clr-control-error> </clr-control-error>
</div> </div>
</div> </div>

View File

@ -250,7 +250,7 @@ export class AddRobotComponent implements OnInit, OnDestroy {
opeMessage.name = "SYSTEM_ROBOT.ADD_ROBOT"; opeMessage.name = "SYSTEM_ROBOT.ADD_ROBOT";
opeMessage.data.id = robot.id; opeMessage.data.id = robot.id;
opeMessage.state = OperationState.progressing; opeMessage.state = OperationState.progressing;
opeMessage.data.name = robot.name; opeMessage.data.name = `${this.projectName}+${robot.name}`;
this.operationService.publishInfo(opeMessage); this.operationService.publishInfo(opeMessage);
this.robotService.CreateRobot({ this.robotService.CreateRobot({
robot: robot robot: robot

View File

@ -34,7 +34,7 @@
</button> </button>
<button *ngIf="selectedRows && selectedRows.length === 1 && selectedRows[0].disable" type="button" class="btn btn-secondary" <button *ngIf="selectedRows && selectedRows.length === 1 && selectedRows[0].disable" type="button" class="btn btn-secondary"
(click)="disableOrEnable()" (click)="disableOrEnable()"
[disabled]="!hasRobotUpdatePermission ||!(selectedRows && selectedRows.length === 1 && selectedRows[0].disable) || !selectedRows[0].editable"> [disabled]="!hasRobotUpdatePermission ||!(selectedRows && selectedRows.length === 1 && selectedRows[0].disable)">
<clr-icon size="16" shape="success-standard"></clr-icon>&nbsp; <clr-icon size="16" shape="success-standard"></clr-icon>&nbsp;
<span id="distribution-enable">{{'WEBHOOK.ENABLED_BUTTON' | translate}}</span> <span id="distribution-enable">{{'WEBHOOK.ENABLED_BUTTON' | translate}}</span>
</button> </button>
@ -42,7 +42,7 @@
type="button" type="button"
class="btn btn-secondary" class="btn btn-secondary"
(click)="disableOrEnable()" (click)="disableOrEnable()"
[disabled]="!hasRobotUpdatePermission ||!(selectedRows && selectedRows.length === 1 && !selectedRows[0].disable) || !selectedRows[0].editable"> [disabled]="!hasRobotUpdatePermission ||!(selectedRows && selectedRows.length === 1 && !selectedRows[0].disable)">
<clr-icon size="16" shape="ban"></clr-icon>&nbsp; <clr-icon size="16" shape="ban"></clr-icon>&nbsp;
<span id="distribution-disable">{{'WEBHOOK.DISABLED_BUTTON' | translate}}</span> <span id="distribution-disable">{{'WEBHOOK.DISABLED_BUTTON' | translate}}</span>
</button> </button>
@ -106,4 +106,4 @@
</div> </div>
</div> </div>
<add-robot [projectId]="projectId" [projectName]="projectName" (addSuccess)="addSuccess($event)"></add-robot> <add-robot [projectId]="projectId" [projectName]="projectName" (addSuccess)="addSuccess($event)"></add-robot>
<view-token (refreshSuccess)="refresh()"></view-token> <view-token (refreshSuccess)="refresh()"></view-token>

View File

@ -18,7 +18,7 @@
type="text" id="name" type="text" id="name"
[(ngModel)]="systemRobot.name" [(ngModel)]="systemRobot.name"
required required
pattern='[^" ~#$%]+' pattern='^[a-z0-9]+(?:[._-][a-z0-9]+)*$'
maxLengthExt="255" maxLengthExt="255"
autocomplete="off" autocomplete="off"
size="30" name="name" #name="ngModel" (input)="inputName()"> size="30" name="name" #name="ngModel" (input)="inputName()">
@ -27,7 +27,7 @@
</div> </div>
<clr-control-error *ngIf="((name.dirty || name.touched) && name.invalid) || isNameExisting"> <clr-control-error *ngIf="((name.dirty || name.touched) && name.invalid) || isNameExisting">
<span *ngIf="!((name.dirty || name.touched) && name.invalid) && isNameExisting">{{'ROBOT_ACCOUNT.ACCOUNT_EXISTING' | translate}}</span> <span *ngIf="!((name.dirty || name.touched) && name.invalid) && isNameExisting">{{'ROBOT_ACCOUNT.ACCOUNT_EXISTING' | translate}}</span>
<span *ngIf="(name.dirty || name.touched) && name.invalid">{{ 'ROBOT_ACCOUNT.ROBOT_NAME' | translate }}</span> <span *ngIf="(name.dirty || name.touched) && name.invalid">{{ 'SYSTEM_ROBOT.NAME_TOOLTIP' | translate }}</span>
</clr-control-error> </clr-control-error>
</div> </div>
</div> </div>

View File

@ -7,10 +7,15 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<inline-alert class="modal-title"></inline-alert> <inline-alert class="modal-title"></inline-alert>
<p class="mt-0">{{"SYSTEM_ROBOT.REFRESH_SECRET_SUMMARY" | translate}}</p> <p class="mt-0 mb-1">{{"SYSTEM_ROBOT.REFRESH_SECRET_SUMMARY" | translate}}</p>
<section class="form-block show-info"> <section class="form-block show-info">
<form #secretForm="ngForm" class="clr-form clr-form-horizontal"> <form #secretForm="ngForm" class="clr-form clr-form-horizontal">
<div class="clr-form-control"> <clr-toggle-wrapper class="mt-02">
<input (change)="changeEnableNewSecret()" type="checkbox" clrToggle name="enableNewSecret" id="enable-new-secret"
[(ngModel)]="enableNewSecret"/>
<label for="enable-new-secret">{{"SYSTEM_ROBOT.ENABLE_NEW_SECRET" | translate}}</label>
</clr-toggle-wrapper>
<div class="clr-form-control" [style.visibility]="enableNewSecret ? 'visible' : 'hidden'">
<label for="new-token" class="clr-control-label">{{"SYSTEM_ROBOT.NEW_TOKEN" | translate}}</label> <label for="new-token" class="clr-control-label">{{"SYSTEM_ROBOT.NEW_TOKEN" | translate}}</label>
<div class="clr-control-container" [class.clr-error]="(newToken.dirty || newToken.touched) && newToken.invalid"> <div class="clr-control-container" [class.clr-error]="(newToken.dirty || newToken.touched) && newToken.invalid">
<div class="clr-input-wrapper"> <div class="clr-input-wrapper">
@ -28,7 +33,7 @@
</clr-control-error> </clr-control-error>
</div> </div>
</div> </div>
<div class="clr-form-control"> <div class="clr-form-control" [style.visibility]="enableNewSecret ? 'visible' : 'hidden'">
<label for="confirm-token" class="clr-control-label">{{"SYSTEM_ROBOT.CONFIRM_SECRET" | translate}}</label> <label for="confirm-token" class="clr-control-label">{{"SYSTEM_ROBOT.CONFIRM_SECRET" | translate}}</label>
<div class="clr-control-container" [class.clr-error]="notSame() || (confirmToken.dirty || confirmToken.touched) && confirmToken.invalid"> <div class="clr-control-container" [class.clr-error]="notSame() || (confirmToken.dirty || confirmToken.touched) && confirmToken.invalid">
<div class="clr-input-wrapper"> <div class="clr-input-wrapper">
@ -90,4 +95,4 @@
<a [href]="downLoadHref" [download]="downLoadFileName"><button class="btn mr-0" (click)="closeModal()">{{'ROBOT_ACCOUNT.EXPORT_TO_FILE' | translate}}</button></a> <a [href]="downLoadHref" [download]="downLoadFileName"><button class="btn mr-0" (click)="closeModal()">{{'ROBOT_ACCOUNT.EXPORT_TO_FILE' | translate}}</button></a>
</section> </section>
</div> </div>
</clr-modal> </clr-modal>

View File

@ -47,3 +47,6 @@
.align-center { .align-center {
align-items: center; align-items: center;
} }
.clr-form {
padding-left: 0;
}

View File

@ -33,6 +33,7 @@ export class ViewTokenComponent implements OnInit {
createSuccess: string; createSuccess: string;
downLoadFileName: string = ''; downLoadFileName: string = '';
downLoadHref: SafeUrl = ''; downLoadHref: SafeUrl = '';
enableNewSecret: boolean = false;
constructor(private robotService: RobotService, constructor(private robotService: RobotService,
private operationService: OperationService, private operationService: OperationService,
private msgHandler: MessageHandlerService, private msgHandler: MessageHandlerService,
@ -96,6 +97,9 @@ export class ViewTokenComponent implements OnInit {
}); });
} }
canRefresh() { canRefresh() {
if (this.enableNewSecret && !this.newSecret && !this.confirmSecret) {
return false;
}
if (!this.newSecret && !this.confirmSecret) { if (!this.newSecret && !this.confirmSecret) {
return true; return true;
} }
@ -119,4 +123,9 @@ export class ViewTokenComponent implements OnInit {
notSame(): boolean { notSame(): boolean {
return this.secretForm.valid && this.newSecret && this.confirmSecret && this.newSecret !== this.confirmSecret; return this.secretForm.valid && this.newSecret && this.confirmSecret && this.newSecret !== this.confirmSecret;
} }
changeEnableNewSecret() {
this.secretForm.reset({
enableNewSecret: this.enableNewSecret
});
}
} }

View File

@ -1618,7 +1618,7 @@
"PROJECTS": "Projects", "PROJECTS": "Projects",
"ALL_PROJECTS": "All projects with", "ALL_PROJECTS": "All projects with",
"PERMISSIONS": "PERMISSION(S)", "PERMISSIONS": "PERMISSION(S)",
"REFRESH_SECRET_SUMMARY": "Refresh the secret for this robot account", "REFRESH_SECRET_SUMMARY": "Refresh the robot account secret automatically, or optionally open the details to manually specify a new secret",
"TOKEN": "Secret", "TOKEN": "Secret",
"NEW_TOKEN": "New Secret", "NEW_TOKEN": "New Secret",
"REFRESH": "REFRESH", "REFRESH": "REFRESH",
@ -1653,6 +1653,8 @@
"COVERED_PROJECTS": "PROJECT(S)", "COVERED_PROJECTS": "PROJECT(S)",
"CONFIRM_SECRET": "Confirm Secret", "CONFIRM_SECRET": "Confirm Secret",
"SECRET_AGAIN": "Input secret again", "SECRET_AGAIN": "Input secret again",
"INCONSISTENT": "Two secrets are inconsistent" "INCONSISTENT": "Two secrets are inconsistent",
"NAME_TOOLTIP": "Robot name should be 1~255 characters long with lower case characters, numbers and ._- and must be start with characters or numbers.",
"ENABLE_NEW_SECRET": "Enable this option to manually specify a new secret"
} }
} }

View File

@ -359,7 +359,7 @@
"ACCOUNT_EXISTING": "Robot Account is already exists.", "ACCOUNT_EXISTING": "Robot Account is already exists.",
"ALERT_TEXT": "This is the only time to copy this secret.You won't have another opportunity", "ALERT_TEXT": "This is the only time to copy this secret.You won't have another opportunity",
"CREATED_SUCCESS": "Created '{{param}}' successfully.", "CREATED_SUCCESS": "Created '{{param}}' successfully.",
"COPY_SUCCESS": "Copy token successfully of '{{param}}'", "COPY_SUCCESS": "Copy secret successfully of '{{param}}'",
"DELETION_TITLE": "Confirm removal of robot accounts", "DELETION_TITLE": "Confirm removal of robot accounts",
"DELETION_SUMMARY": "Do you want to delete robot accounts {{param}}?", "DELETION_SUMMARY": "Do you want to delete robot accounts {{param}}?",
"PULL_IS_MUST": "Pull permission is checked by default and can not be modified.", "PULL_IS_MUST": "Pull permission is checked by default and can not be modified.",
@ -1618,7 +1618,7 @@
"PROJECTS": "Projects", "PROJECTS": "Projects",
"ALL_PROJECTS": "All projects with", "ALL_PROJECTS": "All projects with",
"PERMISSIONS": "PERMISSION(S)", "PERMISSIONS": "PERMISSION(S)",
"REFRESH_SECRET_SUMMARY": "Refresh the secret for this robot account", "REFRESH_SECRET_SUMMARY": "Refresh the robot account secret automatically, or optionally open the details to manually specify a new secret",
"TOKEN": "Secret", "TOKEN": "Secret",
"NEW_TOKEN": "New Secret", "NEW_TOKEN": "New Secret",
"REFRESH": "REFRESH", "REFRESH": "REFRESH",
@ -1653,6 +1653,8 @@
"COVERED_PROJECTS": "PROJECT(S)", "COVERED_PROJECTS": "PROJECT(S)",
"CONFIRM_SECRET": "Confirm Secret", "CONFIRM_SECRET": "Confirm Secret",
"SECRET_AGAIN": "Input secret again", "SECRET_AGAIN": "Input secret again",
"INCONSISTENT": "Two secrets are inconsistent" "INCONSISTENT": "Two secrets are inconsistent",
"NAME_TOOLTIP": "Robot name should be 1~255 characters long with lower case characters, numbers and ._- and must be start with characters or numbers.",
"ENABLE_NEW_SECRET": "Enable this option to manually specify a new secret"
} }
} }

View File

@ -360,7 +360,7 @@
"ACCOUNT_EXISTING": "Robot Account is already exists.", "ACCOUNT_EXISTING": "Robot Account is already exists.",
"ALERT_TEXT": "This is the only time to copy this secret.You won't have another opportunity", "ALERT_TEXT": "This is the only time to copy this secret.You won't have another opportunity",
"CREATED_SUCCESS": "Created '{{param}}' successfully.", "CREATED_SUCCESS": "Created '{{param}}' successfully.",
"COPY_SUCCESS": "Copy token successfully of '{{param}}'", "COPY_SUCCESS": "Copy secret successfully of '{{param}}'",
"DELETION_TITLE": "Confirm removal of robot accounts", "DELETION_TITLE": "Confirm removal of robot accounts",
"DELETION_SUMMARY": "Do you want to delete robot accounts {{param}}?", "DELETION_SUMMARY": "Do you want to delete robot accounts {{param}}?",
"PULL_IS_MUST": "Pull permission is checked by default and can not be modified.", "PULL_IS_MUST": "Pull permission is checked by default and can not be modified.",
@ -1616,7 +1616,7 @@
"PROJECTS": "Projects", "PROJECTS": "Projects",
"ALL_PROJECTS": "All projects with", "ALL_PROJECTS": "All projects with",
"PERMISSIONS": "PERMISSION(S)", "PERMISSIONS": "PERMISSION(S)",
"REFRESH_SECRET_SUMMARY": "Refresh the secret for this robot account", "REFRESH_SECRET_SUMMARY": "Refresh the robot account secret automatically, or optionally open the details to manually specify a new secret",
"TOKEN": "Secret", "TOKEN": "Secret",
"NEW_TOKEN": "New Secret", "NEW_TOKEN": "New Secret",
"REFRESH": "REFRESH", "REFRESH": "REFRESH",
@ -1651,6 +1651,8 @@
"COVERED_PROJECTS": "PROJECT(S)", "COVERED_PROJECTS": "PROJECT(S)",
"CONFIRM_SECRET": "Confirm Secret", "CONFIRM_SECRET": "Confirm Secret",
"SECRET_AGAIN": "Input secret again", "SECRET_AGAIN": "Input secret again",
"INCONSISTENT": "Two secrets are inconsistent" "INCONSISTENT": "Two secrets are inconsistent",
"NAME_TOOLTIP": "Robot name should be 1~255 characters long with lower case characters, numbers and ._- and must be start with characters or numbers.",
"ENABLE_NEW_SECRET": "Enable this option to manually specify a new secret"
} }
} }

View File

@ -351,7 +351,7 @@
"ACCOUNT_EXISTING": "le robot est existe déjà.", "ACCOUNT_EXISTING": "le robot est existe déjà.",
"ALERT_TEXT": "This is the only time to copy this secret.You won't have another opportunity", "ALERT_TEXT": "This is the only time to copy this secret.You won't have another opportunity",
"CREATED_SUCCESS": "Created '{{param}}' successfully.", "CREATED_SUCCESS": "Created '{{param}}' successfully.",
"COPY_SUCCESS": "Copy token successfully of '{{param}}'", "COPY_SUCCESS": "Copy secret successfully of '{{param}}'",
"DELETION_TITLE": "confirmer l'enlèvement des comptes du robot ", "DELETION_TITLE": "confirmer l'enlèvement des comptes du robot ",
"DELETION_SUMMARY": "Voulez-vous supprimer la règle {{param}}?", "DELETION_SUMMARY": "Voulez-vous supprimer la règle {{param}}?",
"PULL_IS_MUST": "Pull permission is checked by default and can not be modified.", "PULL_IS_MUST": "Pull permission is checked by default and can not be modified.",
@ -1586,7 +1586,7 @@
"PROJECTS": "Projects", "PROJECTS": "Projects",
"ALL_PROJECTS": "All projects with", "ALL_PROJECTS": "All projects with",
"PERMISSIONS": "PERMISSION(S)", "PERMISSIONS": "PERMISSION(S)",
"REFRESH_SECRET_SUMMARY": "Refresh the secret for this robot account", "REFRESH_SECRET_SUMMARY": "Refresh the robot account secret automatically, or optionally open the details to manually specify a new secret",
"TOKEN": "Secret", "TOKEN": "Secret",
"NEW_TOKEN": "New Secret", "NEW_TOKEN": "New Secret",
"REFRESH": "REFRESH", "REFRESH": "REFRESH",
@ -1621,6 +1621,8 @@
"COVERED_PROJECTS": "PROJECT(S)", "COVERED_PROJECTS": "PROJECT(S)",
"CONFIRM_SECRET": "Confirm Secret", "CONFIRM_SECRET": "Confirm Secret",
"SECRET_AGAIN": "Input secret again", "SECRET_AGAIN": "Input secret again",
"INCONSISTENT": "Two secrets are inconsistent" "INCONSISTENT": "Two secrets are inconsistent",
"NAME_TOOLTIP": "Robot name should be 1~255 characters long with lower case characters, numbers and ._- and must be start with characters or numbers.",
"ENABLE_NEW_SECRET": "Enable this option to manually specify a new secret"
} }
} }

View File

@ -357,7 +357,7 @@
"ACCOUNT_EXISTING": "Robô conta já existe.", "ACCOUNT_EXISTING": "Robô conta já existe.",
"ALERT_TEXT": "É só copiar o token de acesso Pessoal não VAI ter outra oportunidade.", "ALERT_TEXT": "É só copiar o token de acesso Pessoal não VAI ter outra oportunidade.",
"CREATED_SUCCESS": "Created '{{param}}' successfully.", "CREATED_SUCCESS": "Created '{{param}}' successfully.",
"COPY_SUCCESS": "Copy token successfully of '{{param}}'", "COPY_SUCCESS": "Copy secret successfully of '{{param}}'",
"DELETION_TITLE": "Confirmar a remoção do robô Contas", "DELETION_TITLE": "Confirmar a remoção do robô Contas",
"DELETION_SUMMARY": "Você quer remover a regra {{param}}?", "DELETION_SUMMARY": "Você quer remover a regra {{param}}?",
"PULL_IS_MUST": "Pull permission is checked by default and can not be modified.", "PULL_IS_MUST": "Pull permission is checked by default and can not be modified.",
@ -1614,7 +1614,7 @@
"PROJECTS": "Projects", "PROJECTS": "Projects",
"ALL_PROJECTS": "All projects with", "ALL_PROJECTS": "All projects with",
"PERMISSIONS": "PERMISSION(S)", "PERMISSIONS": "PERMISSION(S)",
"REFRESH_SECRET_SUMMARY": "Refresh the secret for this robot account", "REFRESH_SECRET_SUMMARY": "Refresh the robot account secret automatically, or optionally open the details to manually specify a new secret",
"TOKEN": "Secret", "TOKEN": "Secret",
"NEW_TOKEN": "New Secret", "NEW_TOKEN": "New Secret",
"REFRESH": "REFRESH", "REFRESH": "REFRESH",
@ -1649,7 +1649,9 @@
"COVERED_PROJECTS": "PROJECT(S)", "COVERED_PROJECTS": "PROJECT(S)",
"CONFIRM_SECRET": "Confirm Secret", "CONFIRM_SECRET": "Confirm Secret",
"SECRET_AGAIN": "Input secret again", "SECRET_AGAIN": "Input secret again",
"INCONSISTENT": "Two secrets are inconsistent" "INCONSISTENT": "Two secrets are inconsistent",
"NAME_TOOLTIP": "Robot name should be 1~255 characters long with lower case characters, numbers and ._- and must be start with characters or numbers.",
"ENABLE_NEW_SECRET": "Enable this option to manually specify a new secret"
} }
} }

View File

@ -1618,7 +1618,7 @@
"PROJECTS": "Projects", "PROJECTS": "Projects",
"ALL_PROJECTS": "All projects with", "ALL_PROJECTS": "All projects with",
"PERMISSIONS": "PERMISSION(S)", "PERMISSIONS": "PERMISSION(S)",
"REFRESH_SECRET_SUMMARY": "Refresh the secret for this robot account", "REFRESH_SECRET_SUMMARY": "Refresh the robot account secret automatically, or optionally open the details to manually specify a new secret",
"TOKEN": "Secret", "TOKEN": "Secret",
"NEW_TOKEN": "New Secret", "NEW_TOKEN": "New Secret",
"REFRESH": "REFRESH", "REFRESH": "REFRESH",
@ -1653,6 +1653,8 @@
"COVERED_PROJECTS": "PROJECT(S)", "COVERED_PROJECTS": "PROJECT(S)",
"CONFIRM_SECRET": "Confirm Secret", "CONFIRM_SECRET": "Confirm Secret",
"SECRET_AGAIN": "Input secret again", "SECRET_AGAIN": "Input secret again",
"INCONSISTENT": "Two secrets are inconsistent" "INCONSISTENT": "Two secrets are inconsistent",
"NAME_TOOLTIP": "Robot name should be 1~255 characters long with lower case characters, numbers and ._- and must be start with characters or numbers.",
"ENABLE_NEW_SECRET": "Enable this option to manually specify a new secret"
} }
} }

View File

@ -1615,7 +1615,7 @@
"PROJECTS": "覆盖项目数", "PROJECTS": "覆盖项目数",
"ALL_PROJECTS": "全部项目且具有", "ALL_PROJECTS": "全部项目且具有",
"PERMISSIONS": "项权限", "PERMISSIONS": "项权限",
"REFRESH_SECRET_SUMMARY": "刷新当前机器人账户令牌", "REFRESH_SECRET_SUMMARY": "您可以直接点击刷新按钮来随机生成新的令牌,或者手动为其指定一个新的令牌",
"TOKEN": "令牌", "TOKEN": "令牌",
"NEW_TOKEN": "新令牌", "NEW_TOKEN": "新令牌",
"REFRESH": "刷新", "REFRESH": "刷新",
@ -1650,6 +1650,8 @@
"COVERED_PROJECTS": "个项目", "COVERED_PROJECTS": "个项目",
"CONFIRM_SECRET": "确认令牌", "CONFIRM_SECRET": "确认令牌",
"SECRET_AGAIN": "请再次输入令牌", "SECRET_AGAIN": "请再次输入令牌",
"INCONSISTENT": "两次输入不一致" "INCONSISTENT": "两次输入不一致",
"NAME_TOOLTIP": "机器人名称由小写字符、数字和._-组成且至少1个字符并以字符或者数字开头。",
"ENABLE_NEW_SECRET": "开启此项以便手动指定新令牌"
} }
} }

View File

@ -1602,7 +1602,7 @@
"PROJECTS": "Projects", "PROJECTS": "Projects",
"ALL_PROJECTS": "All projects with", "ALL_PROJECTS": "All projects with",
"PERMISSIONS": "PERMISSION(S)", "PERMISSIONS": "PERMISSION(S)",
"REFRESH_SECRET_SUMMARY": "Refresh the secret for this robot account", "REFRESH_SECRET_SUMMARY": "Refresh the robot account secret automatically, or optionally open the details to manually specify a new secret",
"TOKEN": "Secret", "TOKEN": "Secret",
"NEW_TOKEN": "New Secret", "NEW_TOKEN": "New Secret",
"REFRESH": "REFRESH", "REFRESH": "REFRESH",
@ -1637,6 +1637,8 @@
"COVERED_PROJECTS": "PROJECT(S)", "COVERED_PROJECTS": "PROJECT(S)",
"CONFIRM_SECRET": "Confirm Secret", "CONFIRM_SECRET": "Confirm Secret",
"SECRET_AGAIN": "Input secret again", "SECRET_AGAIN": "Input secret again",
"INCONSISTENT": "Two secrets are inconsistent" "INCONSISTENT": "Two secrets are inconsistent",
"NAME_TOOLTIP": "Robot name should be 1~255 characters long with lower case characters, numbers and ._- and must be start with characters or numbers.",
"ENABLE_NEW_SECRET": "Enable this option to manually specify a new secret"
} }
} }