forked from baron/baron-sso
adminfront 상단 화면 i18n 정리
This commit is contained in:
155
adminfront/src/test/i18nMock.ts
Normal file
155
adminfront/src/test/i18nMock.ts
Normal file
@@ -0,0 +1,155 @@
|
||||
type Vars = Record<string, string | number>;
|
||||
|
||||
const translations: Record<"ko" | "en", Record<string, string>> = {
|
||||
ko: {
|
||||
"ui.admin.auth_guard.title": "인증 가드",
|
||||
"ui.admin.auth_guard.subtitle":
|
||||
"관리자 권한과 ReBAC 관계를 실제 정책 엔진 기준으로 확인합니다.",
|
||||
"ui.admin.auth_guard.checker.title": "ReBAC 권한 검증 도구",
|
||||
"ui.admin.auth_guard.checker.description":
|
||||
"특정 주체(Subject)가 특정 리소스(Object)에 대해 권한이 있는지 Ory Keto를 통해 실시간으로 확인합니다.",
|
||||
"ui.admin.auth_guard.checker.namespace.label": "네임스페이스",
|
||||
"ui.admin.auth_guard.checker.namespace.tenant": "테넌트",
|
||||
"ui.admin.auth_guard.checker.namespace.tenant_group": "테넌트 그룹",
|
||||
"ui.admin.auth_guard.checker.namespace.relying_party": "애플리케이션(RP)",
|
||||
"ui.admin.auth_guard.checker.namespace.system": "시스템",
|
||||
"ui.admin.auth_guard.checker.relation": "관계",
|
||||
"ui.admin.auth_guard.checker.object_id": "대상 ID",
|
||||
"ui.admin.auth_guard.checker.subject": "주체 (User:ID)",
|
||||
"ui.admin.auth_guard.checker.check": "권한 확인 실행",
|
||||
"ui.admin.auth_guard.checker.checking": "검증 중...",
|
||||
"ui.admin.auth_guard.checker.allowed": "접근 허용",
|
||||
"ui.admin.auth_guard.checker.allowed_description":
|
||||
"해당 사용자는 요청한 리소스에 대해 권한이 있습니다. (상속 포함)",
|
||||
"ui.admin.auth_guard.checker.denied": "접근 거부",
|
||||
"ui.admin.auth_guard.checker.denied_description":
|
||||
"해당 사용자는 요청한 리소스에 대해 권한이 없습니다.",
|
||||
"ui.admin.integrity.check.duplicate_tenant_slugs.title": "중복 테넌트 slug",
|
||||
"ui.admin.integrity.section.tenant_integrity": "테넌트 정합성",
|
||||
"ui.admin.integrity.section.user_integrity": "사용자 정합성",
|
||||
"ui.admin.integrity.title": "데이터 정합성 검증",
|
||||
"ui.admin.integrity.recheck.run": "다시 검사",
|
||||
"ui.admin.integrity.recheck.running": "검사 중",
|
||||
"ui.admin.integrity.status.fail": "실패",
|
||||
"ui.admin.integrity.status.pass": "정상",
|
||||
"ui.admin.integrity.status.warning": "주의",
|
||||
"ui.admin.integrity.orphan_login_ids.title": "유령 로그인 ID 정리",
|
||||
"ui.admin.integrity.forbidden.title": "접근 권한이 없습니다",
|
||||
"ui.admin.integrity.summary.title": "정합성 최종 검증",
|
||||
"ui.admin.user_projection.actions.reconcile": "재동기화",
|
||||
"ui.admin.user_projection.actions.reset": "초기화 후 재구축",
|
||||
"ui.admin.user_projection.card.description":
|
||||
"Backend DB 통계가 참조하는 사용자 read model 상태입니다.",
|
||||
"ui.admin.user_projection.card.title": "Kratos 사용자 동기화",
|
||||
"ui.admin.user_projection.forbidden.title": "접근 권한이 없습니다",
|
||||
"ui.admin.user_projection.loading": "불러오는 중",
|
||||
"ui.admin.user_projection.status.failed": "실패",
|
||||
"ui.admin.user_projection.status.not_ready": "준비되지 않음",
|
||||
"ui.admin.user_projection.status.ready": "준비됨",
|
||||
"ui.admin.user_projection.summary.last_synced": "마지막 동기화",
|
||||
"ui.admin.user_projection.summary.projected_users": "동기화 사용자",
|
||||
"ui.admin.user_projection.summary.status": "상태",
|
||||
"ui.admin.user_projection.summary.updated_at": "상태 갱신",
|
||||
"ui.admin.user_projection.title": "사용자 동기화 관리",
|
||||
"msg.admin.integrity.check.duplicate_tenant_slugs.description":
|
||||
"삭제되지 않은 tenant의 LOWER(TRIM(slug)) 기준 중복을 검사합니다.",
|
||||
"msg.admin.integrity.check.orphan_tenant_parents.description":
|
||||
"tenants.parent_id가 존재하지 않거나 soft-deleted tenant를 참조하는지 검사합니다.",
|
||||
"msg.admin.integrity.check.orphan_user_login_id_tenants.description":
|
||||
"user_login_ids.tenant_id가 존재하지 않거나 soft-deleted tenant를 참조하는지 검사합니다.",
|
||||
"msg.admin.integrity.check.orphan_user_login_id_users.description":
|
||||
"user_login_ids.user_id가 존재하지 않거나 soft-deleted user를 참조하는지 검사합니다.",
|
||||
"msg.admin.integrity.check.orphan_user_tenant_memberships.description":
|
||||
"users.tenant_id가 존재하지 않거나 soft-deleted tenant를 참조하는지 검사합니다.",
|
||||
"msg.admin.integrity.recheck.running":
|
||||
"정합성 검사를 실행 중입니다.",
|
||||
"msg.admin.integrity.recheck.success": "검사가 완료되었습니다.",
|
||||
"msg.admin.user_projection.forbidden.description":
|
||||
"이 화면은 super_admin 권한으로만 접근할 수 있습니다.",
|
||||
},
|
||||
en: {
|
||||
"ui.admin.auth_guard.title": "Auth Guard",
|
||||
"ui.admin.auth_guard.subtitle":
|
||||
"Verify admin privileges and ReBAC relationships against the policy engine.",
|
||||
"ui.admin.auth_guard.checker.title": "ReBAC permission checker",
|
||||
"ui.admin.auth_guard.checker.description":
|
||||
"Check in real time whether a subject has access to a resource through Ory Keto.",
|
||||
"ui.admin.auth_guard.checker.namespace.label": "Namespace",
|
||||
"ui.admin.auth_guard.checker.namespace.tenant": "Tenant",
|
||||
"ui.admin.auth_guard.checker.namespace.tenant_group": "TenantGroup",
|
||||
"ui.admin.auth_guard.checker.namespace.relying_party": "RelyingParty",
|
||||
"ui.admin.auth_guard.checker.namespace.system": "System",
|
||||
"ui.admin.auth_guard.checker.relation": "Relation",
|
||||
"ui.admin.auth_guard.checker.object_id": "Object ID",
|
||||
"ui.admin.auth_guard.checker.subject": "Subject (User:ID)",
|
||||
"ui.admin.auth_guard.checker.check": "Check permission",
|
||||
"ui.admin.auth_guard.checker.checking": "Checking...",
|
||||
"ui.admin.auth_guard.checker.allowed": "Access ALLOWED",
|
||||
"ui.admin.auth_guard.checker.allowed_description":
|
||||
"The subject has access to the requested resource, including inherited permissions.",
|
||||
"ui.admin.auth_guard.checker.denied": "Access DENIED",
|
||||
"ui.admin.auth_guard.checker.denied_description":
|
||||
"The subject does not have access to the requested resource.",
|
||||
"ui.admin.integrity.check.duplicate_tenant_slugs.title": "Duplicate tenant slug",
|
||||
"ui.admin.integrity.section.tenant_integrity": "Tenant integrity",
|
||||
"ui.admin.integrity.section.user_integrity": "User integrity",
|
||||
"ui.admin.integrity.title": "Data Integrity Check",
|
||||
"ui.admin.integrity.recheck.run": "Run again",
|
||||
"ui.admin.integrity.recheck.running": "Checking",
|
||||
"ui.admin.integrity.status.fail": "Failed",
|
||||
"ui.admin.integrity.status.pass": "Passed",
|
||||
"ui.admin.integrity.status.warning": "Warning",
|
||||
"ui.admin.integrity.orphan_login_ids.title": "Orphan Login ID Cleanup",
|
||||
"ui.admin.integrity.forbidden.title": "Access denied",
|
||||
"ui.admin.integrity.summary.title": "Final integrity check",
|
||||
"ui.admin.user_projection.actions.reconcile": "Re-sync",
|
||||
"ui.admin.user_projection.actions.reset": "Reset and rebuild",
|
||||
"ui.admin.user_projection.card.description":
|
||||
"Current user read model state referenced by backend DB statistics.",
|
||||
"ui.admin.user_projection.card.title": "Kratos users projection",
|
||||
"ui.admin.user_projection.forbidden.title": "Access denied",
|
||||
"ui.admin.user_projection.loading": "Loading",
|
||||
"ui.admin.user_projection.status.failed": "failed",
|
||||
"ui.admin.user_projection.status.not_ready": "not ready",
|
||||
"ui.admin.user_projection.status.ready": "ready",
|
||||
"ui.admin.user_projection.summary.last_synced": "Last synced",
|
||||
"ui.admin.user_projection.summary.projected_users": "Projected users",
|
||||
"ui.admin.user_projection.summary.status": "Status",
|
||||
"ui.admin.user_projection.summary.updated_at": "Updated at",
|
||||
"ui.admin.user_projection.title": "User Projection Management",
|
||||
"msg.admin.integrity.check.duplicate_tenant_slugs.description":
|
||||
"Checks duplicate active tenant slugs using LOWER(TRIM(slug)).",
|
||||
"msg.admin.integrity.check.orphan_tenant_parents.description":
|
||||
"Checks whether tenants.parent_id points to a missing or soft-deleted tenant.",
|
||||
"msg.admin.integrity.check.orphan_user_login_id_tenants.description":
|
||||
"Checks whether user_login_ids.tenant_id points to a missing or soft-deleted tenant.",
|
||||
"msg.admin.integrity.check.orphan_user_login_id_users.description":
|
||||
"Checks whether user_login_ids.user_id points to a missing or soft-deleted user.",
|
||||
"msg.admin.integrity.check.orphan_user_tenant_memberships.description":
|
||||
"Checks whether users.tenant_id points to a missing or soft-deleted tenant.",
|
||||
"msg.admin.integrity.recheck.running": "Running integrity check.",
|
||||
"msg.admin.integrity.recheck.success": "Check completed.",
|
||||
"msg.admin.user_projection.forbidden.description":
|
||||
"This screen is only available to super_admin users.",
|
||||
},
|
||||
};
|
||||
|
||||
function format(template: string, vars?: Vars) {
|
||||
if (!vars) {
|
||||
return template;
|
||||
}
|
||||
return template.replace(/\{\{\s*(\w+)\s*\}\}/g, (match, key) => {
|
||||
const value = vars[key];
|
||||
return value === undefined || value === null ? match : String(value);
|
||||
});
|
||||
}
|
||||
|
||||
export function createI18nMock() {
|
||||
return {
|
||||
t(key: string, fallback?: string, vars?: Vars) {
|
||||
const locale = window.localStorage.getItem("locale") === "en" ? "en" : "ko";
|
||||
const template = translations[locale][key] ?? fallback ?? key;
|
||||
return format(template, vars);
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user