mirror of
https://github.com/goharbor/harbor.git
synced 2025-02-17 04:11:24 +01:00
fix #2800 about consistent datagrid footer indicate number of items and roll back connent-test issue
This commit is contained in:
parent
34f9a3b911
commit
1810b7ed42
@ -45,7 +45,7 @@ export const CREATE_EDIT_ENDPOINT_TEMPLATE: string = `<clr-modal [(clrModalOpen)
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline" (click)="testConnection()" [disabled]="testOngoing || hasConnectData">{{ 'DESTINATION.TEST_CONNECTION' | translate }}</button>
|
||||
<button type="button" class="btn btn-outline" (click)="testConnection()" [disabled]="testOngoing || targetEndpoint.errors">{{ 'DESTINATION.TEST_CONNECTION' | translate }}</button>
|
||||
<button type="button" class="btn btn-outline" (click)="onCancel()" [disabled]="testOngoing">{{ 'BUTTON.CANCEL' | translate }}</button>
|
||||
<button type="submit" class="btn btn-primary" (click)="onSubmit()" [disabled]="testOngoing || targetForm.form.invalid || !editable">{{ 'BUTTON.OK' | translate }}</button>
|
||||
</div>
|
||||
|
@ -83,10 +83,6 @@ export class CreateEditEndpointComponent implements AfterViewChecked {
|
||||
};
|
||||
}
|
||||
|
||||
get hasConnectData():boolean{
|
||||
return !this.target.endpoint || !this.target.username || !this.target.password;
|
||||
}
|
||||
|
||||
constructor(
|
||||
private endpointService: EndpointService,
|
||||
private errorHandler: ErrorHandler,
|
||||
|
@ -81,7 +81,7 @@ export const CREATE_EDIT_RULE_TEMPLATE: string = `
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline" (click)="testConnection()" [disabled]="testOngoing || hasConnectData || connectAbled">{{'REPLICATION.TEST_CONNECTION' | translate}}</button>
|
||||
<button type="button" class="btn btn-outline" (click)="testConnection()" [disabled]="testOngoing || endpointUrl.errors || connectAbled">{{'REPLICATION.TEST_CONNECTION' | translate}}</button>
|
||||
<button type="button" class="btn btn-outline" [disabled]="btnAbled" (click)="onCancel()">{{'BUTTON.CANCEL' | translate }}</button>
|
||||
<button type="submit" class="btn btn-primary" [disabled]="!ruleForm.form.valid || testOngoing || !editable" (click)="onSubmit()">{{'BUTTON.OK' | translate}}</button>
|
||||
</div>
|
||||
|
@ -144,9 +144,7 @@ export class CreateEditRuleComponent implements AfterViewChecked {
|
||||
}
|
||||
get connectAbled():boolean{
|
||||
return !this.createEditRule.endpointId && !this.isCreateEndpoint;
|
||||
}
|
||||
get hasConnectData():boolean{
|
||||
return !this.createEditRule.endpointUrl || !this.createEditRule.username || !this.createEditRule.password;
|
||||
|
||||
}
|
||||
|
||||
constructor(
|
||||
|
@ -31,7 +31,7 @@ export const ENDPOINT_TEMPLATE: string = `
|
||||
<clr-dg-cell>{{t.creation_time | date: 'short'}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'DESTINATION.OF' | translate}}
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'DESTINATION.OF' | translate}}</span>
|
||||
{{pagination.totalItems}} {{'DESTINATION.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
|
@ -34,7 +34,7 @@ export const LIST_REPLICATION_RULE_TEMPLATE: string = `
|
||||
</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'REPLICATION.OF' | translate}} {{pagination.totalItems }} {{'REPLICATION.ITEMS' | translate}}
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'REPLICATION.OF' | translate}} </span>{{pagination.totalItems }} {{'REPLICATION.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="5"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
||||
|
@ -13,7 +13,7 @@ export const LIST_REPOSITORY_TEMPLATE = `
|
||||
<clr-dg-cell>{{r.pull_count}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPOSITORY.OF' | translate}}
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPOSITORY.OF' | translate}}</span>
|
||||
{{pagination.totalItems}}{{'REPOSITORY.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
|
@ -67,7 +67,7 @@ export const REPLICATION_TEMPLATE: string = `
|
||||
</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPLICATION.OF' | translate}}
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPLICATION.OF' | translate}}</span>
|
||||
{{pagination.totalItems}} {{'REPLICATION.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="5"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
|
@ -30,7 +30,7 @@ export const REPOSITORY_STACKVIEW_TEMPLATE: string = `
|
||||
<clr-icon shape="warning" class="is-warning" size="24"></clr-icon>
|
||||
{{'CONFIG.SCANNING.DB_NOT_READY' | translate }}
|
||||
</span>
|
||||
{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPOSITORY.OF' | translate}}
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPOSITORY.OF' | translate}}</span>
|
||||
{{pagination.totalItems}} {{'REPOSITORY.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [(clrDgPage)]="currentPage" [clrDgPageSize]="pageSize" [clrDgTotalItems]="totalCount"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
|
@ -53,7 +53,7 @@ export const TAG_TEMPLATE = `
|
||||
<clr-dg-cell style="width: 80px;" *ngIf="!withClair">{{t.os}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPOSITORY.OF' | translate}}
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPOSITORY.OF' | translate}}</span>
|
||||
{{pagination.totalItems}} {{'REPOSITORY.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="10"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
|
@ -78,7 +78,8 @@ export const GRID_COMPONENT_HTML: string = `
|
||||
</clr-dg-row>
|
||||
|
||||
<clr-dg-footer>
|
||||
{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'VULNERABILITY.GRID.FOOT_OF' | translate}} {{pagination.totalItems}} {{'VULNERABILITY.GRID.FOOT_ITEMS' | translate}}
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'VULNERABILITY.GRID.FOOT_OF' | translate}}</span>
|
||||
{{pagination.totalItems}} {{'VULNERABILITY.GRID.FOOT_ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="25" [clrDgTotalItems]="scanningResults.length"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
||||
|
@ -56,8 +56,11 @@
|
||||
<clr-dg-cell>{{l.op_time | date: 'short'}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{totalRecordCount}} {{'AUDIT_LOG.ITEMS' | translate}}
|
||||
<clr-dg-pagination [clrDgPageSize]="pageOffset" [clrDgTotalItems]="totalPage"></clr-dg-pagination>
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'AUDIT_LOG.OF' | translate}} </span>
|
||||
{{pagination.totalItems }} {{'AUDIT_LOG.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
<!--{{totalRecordCount}} {{'AUDIT_LOG.ITEMS' | translate}}
|
||||
<clr-dg-pagination [clrDgPageSize]="pageOffset" [clrDgTotalItems]="totalPage"></clr-dg-pagination>-->
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
||||
</div>
|
||||
|
@ -17,7 +17,8 @@
|
||||
<clr-dg-cell>{{p.creation_time | date: 'short'}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{(projects ? projects.length : 0)}} {{'PROJECT.ITEMS' | translate}}
|
||||
<clr-dg-pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'PROJECT.OF' | translate}} </span>
|
||||
{{pagination.totalItems }} {{'PROJECT.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
@ -27,7 +27,11 @@
|
||||
<clr-dg-cell>{{m.username}}</clr-dg-cell>
|
||||
<clr-dg-cell>{{roleInfo[m.role_id] | translate}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>{{ (members ? members.length : 0) }} {{'MEMBER.ITEMS' | translate}}</clr-dg-footer>
|
||||
<clr-dg-footer>
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'MEMBER.OF' | translate}} </span>
|
||||
{{pagination.totalItems }} {{'MEMBER.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
||||
</div>
|
||||
</div>
|
@ -10,7 +10,10 @@
|
||||
<clr-dg-cell>{{p.creation_time | date: 'short'}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{(projects ? projects.length : 0)}} {{'PROJECT.ITEMS' | translate}}
|
||||
<clr-dg-pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'PROJECT.OF' | translate}} </span>
|
||||
{{pagination.totalItems }} {{'PROJECT.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
<!--{{(projects ? projects.length : 0)}} {{'PROJECT.ITEMS' | translate}}
|
||||
<clr-dg-pagination [clrDgPageSize]="15"></clr-dg-pagination>-->
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
@ -8,7 +8,8 @@
|
||||
<clr-dg-cell>{{r.pull_count}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>
|
||||
{{(repositories ? repositories.length : 0)}} {{'REPOSITORY.ITEMS' | translate}}
|
||||
<clr-dg-pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'REPOSITORY.OF' | translate}} </span>
|
||||
{{pagination.totalItems }} {{'REPOSITORY.ITEMS' | translate}}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15"></clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
@ -27,8 +27,10 @@
|
||||
<clr-dg-cell>{{user.email}}</clr-dg-cell>
|
||||
<clr-dg-cell>{{user.creation_time | date: 'short'}}</clr-dg-cell>
|
||||
</clr-dg-row>
|
||||
<clr-dg-footer>{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} of {{pagination.totalItems}} users
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15" [(clrDgPage)]="currentPage" [clrDgTotalItems]="totalCount"> {{'USER.ITEMS' | translate}}
|
||||
<clr-dg-footer>
|
||||
<span *ngIf="pagination.totalItems">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'USER.OF' | translate }}</span>
|
||||
{{pagination.totalItems}} {{'USER.ITEMS' | translate }}
|
||||
<clr-dg-pagination #pagination [clrDgPageSize]="15" [(clrDgPage)]="currentPage" [clrDgTotalItems]="totalCount">
|
||||
</clr-dg-pagination>
|
||||
</clr-dg-footer>
|
||||
</clr-datagrid>
|
||||
|
@ -117,7 +117,7 @@
|
||||
"DELETION_TITLE": "Confirm user deletion",
|
||||
"DELETION_SUMMARY": "Do you want to delete user {{param}}?",
|
||||
"DELETE_SUCCESS": "User deleted successfully.",
|
||||
"ITEMS": "item(s)"
|
||||
"ITEMS": "items"
|
||||
},
|
||||
"PROJECT": {
|
||||
"PROJECTS": "Projects",
|
||||
@ -143,7 +143,7 @@
|
||||
"NAME_ALREADY_EXISTS": "Project name already exists.",
|
||||
"NAME_IS_ILLEGAL": "Project name is invalid.",
|
||||
"UNKNOWN_ERROR": "An unknown error occurred while creating the project.",
|
||||
"ITEMS": "item(s)",
|
||||
"ITEMS": "items",
|
||||
"DELETION_TITLE": "Confirm project deletion",
|
||||
"DELETION_SUMMARY": "Do you want to delete project {{param}}?",
|
||||
"FILTER_PLACEHOLDER": "Filter Projects",
|
||||
@ -171,7 +171,7 @@
|
||||
"DEVELOPER": "Developer",
|
||||
"GUEST": "Guest",
|
||||
"DELETE": "Delete",
|
||||
"ITEMS": "item(s)",
|
||||
"ITEMS": "items",
|
||||
"ACTIONS": "Actions",
|
||||
"USERNAME_IS_REQUIRED": "Username is required",
|
||||
"USERNAME_DOES_NOT_EXISTS": "Username does not exist.",
|
||||
@ -199,7 +199,7 @@
|
||||
"OTHERS": "Others",
|
||||
"ADVANCED": "Advanced",
|
||||
"SIMPLE": "Simple",
|
||||
"ITEMS": "item(s)",
|
||||
"ITEMS": "items",
|
||||
"FILTER_PLACEHOLDER": "Filter Logs",
|
||||
"INVALID_DATE": "Invalid date."
|
||||
},
|
||||
@ -257,7 +257,7 @@
|
||||
"END_TIME": "End Time",
|
||||
"LOGS": "Logs",
|
||||
"OF": "of",
|
||||
"ITEMS": "item(s)",
|
||||
"ITEMS": "items",
|
||||
"TOGGLE_ENABLE_TITLE": "Enable Rule",
|
||||
"CONFIRM_TOGGLE_ENABLE_POLICY": "After enabling the replication rule, all repositories under the project will be replicated to the destination registry. \nPlease confirm to continue.",
|
||||
"TOGGLE_DISABLE_TITLE": "Disable Rule",
|
||||
@ -296,7 +296,7 @@
|
||||
"FAILED_TO_GET_TARGET": "Failed to get endpoint.",
|
||||
"CREATION_TIME": "Creation Time",
|
||||
"OF": "of",
|
||||
"ITEMS": "item(s)",
|
||||
"ITEMS": "items",
|
||||
"CREATED_SUCCESS": "Created endpoint successfully.",
|
||||
"UPDATED_SUCCESS": "Updated endpoint successfully.",
|
||||
"DELETED_SUCCESS": "Deleted endpoint successfully.",
|
||||
@ -331,7 +331,7 @@
|
||||
"SHOW_DETAILS": "Show Details",
|
||||
"REPOSITORIES": "Repositories",
|
||||
"OF": "of",
|
||||
"ITEMS": "item(s)",
|
||||
"ITEMS": "items",
|
||||
"POP_REPOS": "Popular Repositories",
|
||||
"DELETED_REPO_SUCCESS": "Deleted repository successfully.",
|
||||
"DELETED_TAG_SUCCESS": "Deleted tag successfully.",
|
||||
|
@ -117,7 +117,7 @@
|
||||
"DELETION_TITLE": "Confirmar eliminación de usuario",
|
||||
"DELETION_SUMMARY": "¿Quiere eliminar el usuario {{param}}?",
|
||||
"DELETE_SUCCESS": "Usuario eliminado satisfactoriamente.",
|
||||
"ITEMS": "elemento(s)"
|
||||
"ITEMS": "elementos"
|
||||
},
|
||||
"PROJECT": {
|
||||
"PROJECTS": "Proyectos",
|
||||
@ -143,7 +143,7 @@
|
||||
"NAME_ALREADY_EXISTS": "Ya existe un proyecto con ese nombre.",
|
||||
"NAME_IS_ILLEGAL": "El nombre del proyecto no es valido.",
|
||||
"UNKNOWN_ERROR": "Ha ocurrido un error al crear el proyecto.",
|
||||
"ITEMS": "elemento(s)",
|
||||
"ITEMS": "elementos",
|
||||
"DELETION_TITLE": "Confirmar eliminación del proyecto",
|
||||
"DELETION_SUMMARY": "¿Quiere eliminar el proyecto {{param}}?",
|
||||
"FILTER_PLACEHOLDER": "Filtrar proyectos",
|
||||
@ -171,7 +171,7 @@
|
||||
"DEVELOPER": "Desarrollador",
|
||||
"GUEST": "Invitado",
|
||||
"DELETE": "Eliminar",
|
||||
"ITEMS": "elemento(s)",
|
||||
"ITEMS": "elementos",
|
||||
"ACTIONS": "Acciones",
|
||||
"USERNAME_IS_REQUIRED": "El nombre de usuario es obligatorio",
|
||||
"USERNAME_DOES_NOT_EXISTS": "Ese nombre de usuario no existe.",
|
||||
@ -199,7 +199,7 @@
|
||||
"OTHERS": "Otros",
|
||||
"ADVANCED": "Avanzado",
|
||||
"SIMPLE": "Simple",
|
||||
"ITEMS": "elemento(s)",
|
||||
"ITEMS": "elementos",
|
||||
"FILTER_PLACEHOLDER": "Filtrar logs",
|
||||
"INVALID_DATE": "Fecha invalida."
|
||||
},
|
||||
@ -257,7 +257,7 @@
|
||||
"END_TIME": "Fecha de Finalización",
|
||||
"LOGS": "Logs",
|
||||
"OF": "of",
|
||||
"ITEMS": "elemento(s)",
|
||||
"ITEMS": "elementos",
|
||||
"TOGGLE_ENABLE_TITLE": "Activar Regla",
|
||||
"CONFIRM_TOGGLE_ENABLE_POLICY": "Después de la activación de esta regla, todos los repositorios de este proyecto serán replicados al registro de destino.\nPor favor, confirme para continuar.",
|
||||
"TOGGLE_DISABLE_TITLE": "Desactivar Regla",
|
||||
@ -296,7 +296,7 @@
|
||||
"FAILED_TO_GET_TARGET": "Fallo al obtener el endpoint.",
|
||||
"CREATION_TIME": "Fecha de creación",
|
||||
"OF": "of",
|
||||
"ITEMS": "elemento(s)",
|
||||
"ITEMS": "elementos",
|
||||
"CREATED_SUCCESS": "Endpoint creado satisfactoriamente.",
|
||||
"UPDATED_SUCCESS": "Endpoint actualizado satisfactoriamente.",
|
||||
"DELETED_SUCCESS": "Endpoint eliminado satisfactoriamente.",
|
||||
@ -332,7 +332,7 @@
|
||||
"SHOW_DETAILS": "Mostrar Detalles",
|
||||
"REPOSITORIES": "Repositorios",
|
||||
"OF": "of",
|
||||
"ITEMS": "elemento(s)",
|
||||
"ITEMS": "elementos",
|
||||
"POP_REPOS": "Repositorios Populares",
|
||||
"DELETED_REPO_SUCCESS": "Repositorio eliminado satisfactoriamente.",
|
||||
"DELETED_TAG_SUCCESS": "Etiqueta eliminada satisfactoriamente.",
|
||||
|
@ -117,6 +117,7 @@
|
||||
"DELETION_TITLE": "删除用户确认",
|
||||
"DELETION_SUMMARY": "你确认删除用户 {{param}}?",
|
||||
"DELETE_SUCCESS": "成功删除用户。",
|
||||
"OF": "共计",
|
||||
"ITEMS": "条记录"
|
||||
},
|
||||
"PROJECT": {
|
||||
@ -143,6 +144,7 @@
|
||||
"NAME_ALREADY_EXISTS": "项目名称已存在。",
|
||||
"NAME_IS_ILLEGAL": "项目名称非法。",
|
||||
"UNKNOWN_ERROR": "创建项目时发生未知错误。",
|
||||
"OF": "共计",
|
||||
"ITEMS": "条记录",
|
||||
"DELETION_TITLE": "删除项目确认",
|
||||
"DELETION_SUMMARY": "你确认删除项目 {{param}}?",
|
||||
@ -171,6 +173,7 @@
|
||||
"DEVELOPER": "开发人员",
|
||||
"GUEST": "访客",
|
||||
"DELETE": "删除",
|
||||
"OF": "共计",
|
||||
"ITEMS": "条记录",
|
||||
"ACTIONS": "操作",
|
||||
"USERNAME_IS_REQUIRED": "用户名为必填项。",
|
||||
@ -199,6 +202,7 @@
|
||||
"OTHERS": "其他",
|
||||
"ADVANCED": "高级检索",
|
||||
"SIMPLE": "简单检索",
|
||||
"OF": "共计",
|
||||
"ITEMS": "条记录",
|
||||
"FILTER_PLACEHOLDER": "过滤日志",
|
||||
"INVALID_DATE": "无效日期。"
|
||||
|
Loading…
Reference in New Issue
Block a user