@10x-media/impersonation 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/access/filterTargets.js +51 -0
- package/dist/access/filterTargets.js.map +1 -0
- package/dist/auth/cookies.js +49 -0
- package/dist/auth/cookies.js.map +1 -0
- package/dist/auth/expiryCookies.js +59 -0
- package/dist/auth/expiryCookies.js.map +1 -0
- package/dist/auth/issue.js +126 -0
- package/dist/auth/issue.js.map +1 -0
- package/dist/auth/mode.js +69 -0
- package/dist/auth/mode.js.map +1 -0
- package/dist/auth/origin.js +55 -0
- package/dist/auth/origin.js.map +1 -0
- package/dist/auth/revoke.js +24 -0
- package/dist/auth/revoke.js.map +1 -0
- package/dist/auth/tenantCookie.js +74 -0
- package/dist/auth/tenantCookie.js.map +1 -0
- package/dist/endpoints/codes.d.ts +6 -0
- package/dist/endpoints/current.js +66 -0
- package/dist/endpoints/current.js.map +1 -0
- package/dist/endpoints/exit.js +242 -0
- package/dist/endpoints/exit.js.map +1 -0
- package/dist/endpoints/shared.js +76 -0
- package/dist/endpoints/shared.js.map +1 -0
- package/dist/endpoints/start.js +332 -0
- package/dist/endpoints/start.js.map +1 -0
- package/dist/endpoints/terminate.js +73 -0
- package/dist/endpoints/terminate.js.map +1 -0
- package/dist/exports/client.d.ts +9 -0
- package/dist/exports/client.js +10 -0
- package/dist/exports/i18n.d.ts +3 -0
- package/dist/exports/i18n.js +3 -0
- package/dist/exports/rsc.d.ts +4 -0
- package/dist/exports/rsc.js +4 -0
- package/dist/exports/types.d.ts +3 -0
- package/dist/exports/types.js +1 -0
- package/dist/getImpersonation.d.ts +49 -0
- package/dist/getImpersonation.js +78 -0
- package/dist/getImpersonation.js.map +1 -0
- package/dist/ids.js +27 -0
- package/dist/ids.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/assertTargets.js +23 -0
- package/dist/plugin/assertTargets.js.map +1 -0
- package/dist/plugin/constants.d.ts +6 -0
- package/dist/plugin/constants.js +20 -0
- package/dist/plugin/constants.js.map +1 -0
- package/dist/plugin/decorateAuth.js +99 -0
- package/dist/plugin/decorateAuth.js.map +1 -0
- package/dist/plugin/lookup.js +23 -0
- package/dist/plugin/lookup.js.map +1 -0
- package/dist/plugin/normalizeOptions.js +83 -0
- package/dist/plugin/normalizeOptions.js.map +1 -0
- package/dist/plugin/registerAdmin.js +49 -0
- package/dist/plugin/registerAdmin.js.map +1 -0
- package/dist/plugin/registerCollection.js +183 -0
- package/dist/plugin/registerCollection.js.map +1 -0
- package/dist/plugin/registerEndpoints.js +19 -0
- package/dist/plugin/registerEndpoints.js.map +1 -0
- package/dist/plugin/registerHooks.js +59 -0
- package/dist/plugin/registerHooks.js.map +1 -0
- package/dist/plugin/registerRetention.js +57 -0
- package/dist/plugin/registerRetention.js.map +1 -0
- package/dist/plugin/registerTranslations.js +19 -0
- package/dist/plugin/registerTranslations.js.map +1 -0
- package/dist/plugin/registry.js +11 -0
- package/dist/plugin/registry.js.map +1 -0
- package/dist/plugin/startable.js +21 -0
- package/dist/plugin/startable.js.map +1 -0
- package/dist/session/close.js +65 -0
- package/dist/session/close.js.map +1 -0
- package/dist/session/closeStale.d.ts +11 -0
- package/dist/session/closeStale.js +65 -0
- package/dist/session/closeStale.js.map +1 -0
- package/dist/session/locks.js +32 -0
- package/dist/session/locks.js.map +1 -0
- package/dist/session/resolve.js +91 -0
- package/dist/session/resolve.js.map +1 -0
- package/dist/translations/ar.js +52 -0
- package/dist/translations/ar.js.map +1 -0
- package/dist/translations/de.js +52 -0
- package/dist/translations/de.js.map +1 -0
- package/dist/translations/en.js +52 -0
- package/dist/translations/en.js.map +1 -0
- package/dist/translations/es.js +52 -0
- package/dist/translations/es.js.map +1 -0
- package/dist/translations/fr.js +52 -0
- package/dist/translations/fr.js.map +1 -0
- package/dist/translations/id.js +52 -0
- package/dist/translations/id.js.map +1 -0
- package/dist/translations/index.d.ts +24 -0
- package/dist/translations/index.js +49 -0
- package/dist/translations/index.js.map +1 -0
- package/dist/translations/keys.d.ts +56 -0
- package/dist/translations/keys.js +56 -0
- package/dist/translations/keys.js.map +1 -0
- package/dist/translations/ko.js +52 -0
- package/dist/translations/ko.js.map +1 -0
- package/dist/translations/lookup.js +17 -0
- package/dist/translations/lookup.js.map +1 -0
- package/dist/translations/pt.js +52 -0
- package/dist/translations/pt.js.map +1 -0
- package/dist/translations/ru.js +52 -0
- package/dist/translations/ru.js.map +1 -0
- package/dist/translations/server.js +13 -0
- package/dist/translations/server.js.map +1 -0
- package/dist/translations/uk.js +52 -0
- package/dist/translations/uk.js.map +1 -0
- package/dist/translations/useTranslation.js +12 -0
- package/dist/translations/useTranslation.js.map +1 -0
- package/dist/translations/zh.js +52 -0
- package/dist/translations/zh.js.map +1 -0
- package/dist/types.d.ts +214 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/EndSessionMenuItem.d.ts +5 -0
- package/dist/ui/EndSessionMenuItem.js +45 -0
- package/dist/ui/EndSessionMenuItem.js.map +1 -0
- package/dist/ui/ImpersonateIcon.js +20 -0
- package/dist/ui/ImpersonateIcon.js.map +1 -0
- package/dist/ui/ImpersonationAction.d.ts +10 -0
- package/dist/ui/ImpersonationAction.js +48 -0
- package/dist/ui/ImpersonationAction.js.map +1 -0
- package/dist/ui/ImpersonationBar.d.ts +36 -0
- package/dist/ui/ImpersonationBar.js +357 -0
- package/dist/ui/ImpersonationBar.js.map +1 -0
- package/dist/ui/ImpersonationConfig.js +25 -0
- package/dist/ui/ImpersonationConfig.js.map +1 -0
- package/dist/ui/ImpersonationDocumentButton.d.ts +5 -0
- package/dist/ui/ImpersonationDocumentButton.js +85 -0
- package/dist/ui/ImpersonationDocumentButton.js.map +1 -0
- package/dist/ui/ImpersonationFrontendBanner.d.ts +41 -0
- package/dist/ui/ImpersonationFrontendBanner.js +58 -0
- package/dist/ui/ImpersonationFrontendBanner.js.map +1 -0
- package/dist/ui/ImpersonationFrontendExit.d.ts +17 -0
- package/dist/ui/ImpersonationFrontendExit.js +45 -0
- package/dist/ui/ImpersonationFrontendExit.js.map +1 -0
- package/dist/ui/ImpersonationProvider.d.ts +16 -0
- package/dist/ui/ImpersonationProvider.js +127 -0
- package/dist/ui/ImpersonationProvider.js.map +1 -0
- package/dist/ui/ImpersonationSwitcher.d.ts +21 -0
- package/dist/ui/ImpersonationSwitcher.js +251 -0
- package/dist/ui/ImpersonationSwitcher.js.map +1 -0
- package/dist/ui/ImpersonationUserCard.d.ts +31 -0
- package/dist/ui/ImpersonationUserCard.js +51 -0
- package/dist/ui/ImpersonationUserCard.js.map +1 -0
- package/dist/ui/StartConfirmModal.d.ts +28 -0
- package/dist/ui/StartConfirmModal.js +65 -0
- package/dist/ui/StartConfirmModal.js.map +1 -0
- package/dist/ui/api.js +66 -0
- package/dist/ui/api.js.map +1 -0
- package/dist/ui/barPlacement.js +107 -0
- package/dist/ui/barPlacement.js.map +1 -0
- package/dist/ui/frontendBanner.css +22 -0
- package/dist/ui/impersonation.css +244 -0
- package/dist/ui/useImpersonation.d.ts +43 -0
- package/dist/ui/useImpersonation.js +36 -0
- package/dist/ui/useImpersonation.js.map +1 -0
- package/package.json +126 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { keys } from "./keys.js";
|
|
2
|
+
//#region src/translations/de.ts
|
|
3
|
+
const de = {
|
|
4
|
+
[keys.actingAs]: "Handelt als {{name}}",
|
|
5
|
+
[keys.collectionPlural]: "Impersonationssitzungen",
|
|
6
|
+
[keys.collectionSingular]: "Impersonationssitzung",
|
|
7
|
+
[keys.confirm]: "Impersonieren",
|
|
8
|
+
[keys.confirmTitle]: "Diesen Benutzer impersonieren?",
|
|
9
|
+
[keys.collapseBar]: "Impersonation-Leiste einklappen",
|
|
10
|
+
[keys.expandBar]: "Impersonation-Leiste ausklappen",
|
|
11
|
+
[keys.endSession]: "Sitzung beenden",
|
|
12
|
+
[keys.endSessionBody]: "Die Impersonation wird beendet. Das Ziel ist danach wieder es selbst.",
|
|
13
|
+
[keys.errorAlreadyImpersonating]: "Bereits in einer Impersonation",
|
|
14
|
+
[keys.errorFailed]: "Impersonation fehlgeschlagen",
|
|
15
|
+
[keys.errorForbidden]: "Nicht erlaubt",
|
|
16
|
+
[keys.errorImpersonatorGone]: "Ihr Konto ist nicht mehr verfügbar",
|
|
17
|
+
[keys.errorImpersonatorSessionExpired]: "Ihre ursprüngliche Sitzung ist abgelaufen. Melden Sie sich erneut an.",
|
|
18
|
+
[keys.errorInvalidBody]: "Ungültige Anfrage",
|
|
19
|
+
[keys.errorNotImpersonating]: "Keine Impersonation aktiv",
|
|
20
|
+
[keys.errorOrigin]: "Vom Origin-Check abgelehnt",
|
|
21
|
+
[keys.errorReasonRequired]: "Ein Grund ist erforderlich",
|
|
22
|
+
[keys.errorSelfTarget]: "Sie können sich nicht selbst impersonieren",
|
|
23
|
+
[keys.errorTargetNotFound]: "Benutzer nicht gefunden",
|
|
24
|
+
[keys.errorTargetTrashed]: "Benutzer ist im Papierkorb",
|
|
25
|
+
[keys.errorTargetUnverified]: "Benutzer ist nicht verifiziert",
|
|
26
|
+
[keys.errorUnsupportedAuth]: "Diese Authentifizierung kann nicht impersonieren",
|
|
27
|
+
[keys.errorUnsupportedCollection]: "Diese Collection kann nicht impersoniert werden",
|
|
28
|
+
[keys.fieldEndedAt]: "Beendet",
|
|
29
|
+
[keys.fieldEndedBy]: "Beendet durch",
|
|
30
|
+
[keys.fieldImpersonator]: "Impersonator",
|
|
31
|
+
[keys.fieldMode]: "Modus",
|
|
32
|
+
[keys.fieldReason]: "Grund",
|
|
33
|
+
[keys.fieldStartedAt]: "Gestartet",
|
|
34
|
+
[keys.fieldTarget]: "Ziel",
|
|
35
|
+
[keys.noResults]: "Keine Treffer",
|
|
36
|
+
[keys.openDocument]: "Dokument öffnen",
|
|
37
|
+
[keys.openDrawer]: "Im Drawer öffnen",
|
|
38
|
+
[keys.openWebsite]: "Website öffnen",
|
|
39
|
+
[keys.pluginName]: "Impersonation",
|
|
40
|
+
[keys.reasonLabel]: "Grund",
|
|
41
|
+
[keys.reasonPlaceholder]: "Optionaler Grund",
|
|
42
|
+
[keys.returnTo]: "Zurück zu {{name}}",
|
|
43
|
+
[keys.searchByName]: "Nach Name suchen",
|
|
44
|
+
[keys.sessionActiveOnSite]: "{{name}}-Sitzung ist auf der Website aktiv",
|
|
45
|
+
[keys.sessionEndsAt]: "Sitzung endet um {{time}}",
|
|
46
|
+
[keys.sessionEndsIn]: "Sitzung endet in {{countdown}}",
|
|
47
|
+
[keys.switchToUser]: "Impersonieren"
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { de };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=de.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"de.js","names":[],"sources":["../../src/translations/de.ts"],"sourcesContent":["import { keys, type TranslationKey } from './keys'\n\nexport const de: Record<TranslationKey, string> = {\n\t[keys.actingAs]: 'Handelt als {{name}}',\n\t[keys.collectionPlural]: 'Impersonationssitzungen',\n\t[keys.collectionSingular]: 'Impersonationssitzung',\n\t[keys.confirm]: 'Impersonieren',\n\t[keys.confirmTitle]: 'Diesen Benutzer impersonieren?',\n\t[keys.collapseBar]: 'Impersonation-Leiste einklappen',\n\t[keys.expandBar]: 'Impersonation-Leiste ausklappen',\n\t[keys.endSession]: 'Sitzung beenden',\n\t[keys.endSessionBody]: 'Die Impersonation wird beendet. Das Ziel ist danach wieder es selbst.',\n\t[keys.errorAlreadyImpersonating]: 'Bereits in einer Impersonation',\n\t[keys.errorFailed]: 'Impersonation fehlgeschlagen',\n\t[keys.errorForbidden]: 'Nicht erlaubt',\n\t[keys.errorImpersonatorGone]: 'Ihr Konto ist nicht mehr verfügbar',\n\t[keys.errorImpersonatorSessionExpired]:\n\t\t'Ihre ursprüngliche Sitzung ist abgelaufen. Melden Sie sich erneut an.',\n\t[keys.errorInvalidBody]: 'Ungültige Anfrage',\n\t[keys.errorNotImpersonating]: 'Keine Impersonation aktiv',\n\t[keys.errorOrigin]: 'Vom Origin-Check abgelehnt',\n\t[keys.errorReasonRequired]: 'Ein Grund ist erforderlich',\n\t[keys.errorSelfTarget]: 'Sie können sich nicht selbst impersonieren',\n\t[keys.errorTargetNotFound]: 'Benutzer nicht gefunden',\n\t[keys.errorTargetTrashed]: 'Benutzer ist im Papierkorb',\n\t[keys.errorTargetUnverified]: 'Benutzer ist nicht verifiziert',\n\t[keys.errorUnsupportedAuth]: 'Diese Authentifizierung kann nicht impersonieren',\n\t[keys.errorUnsupportedCollection]: 'Diese Collection kann nicht impersoniert werden',\n\t[keys.fieldEndedAt]: 'Beendet',\n\t[keys.fieldEndedBy]: 'Beendet durch',\n\t[keys.fieldImpersonator]: 'Impersonator',\n\t[keys.fieldMode]: 'Modus',\n\t[keys.fieldReason]: 'Grund',\n\t[keys.fieldStartedAt]: 'Gestartet',\n\t[keys.fieldTarget]: 'Ziel',\n\t[keys.noResults]: 'Keine Treffer',\n\t[keys.openDocument]: 'Dokument öffnen',\n\t[keys.openDrawer]: 'Im Drawer öffnen',\n\t[keys.openWebsite]: 'Website öffnen',\n\t[keys.pluginName]: 'Impersonation',\n\t[keys.reasonLabel]: 'Grund',\n\t[keys.reasonPlaceholder]: 'Optionaler Grund',\n\t[keys.returnTo]: 'Zurück zu {{name}}',\n\t[keys.searchByName]: 'Nach Name suchen',\n\t[keys.sessionActiveOnSite]: '{{name}}-Sitzung ist auf der Website aktiv',\n\t[keys.sessionEndsAt]: 'Sitzung endet um {{time}}',\n\t[keys.sessionEndsIn]: 'Sitzung endet in {{countdown}}',\n\t[keys.switchToUser]: 'Impersonieren',\n}\n"],"mappings":";;AAEA,MAAa,KAAqC;EAChD,KAAK,WAAW;EAChB,KAAK,mBAAmB;EACxB,KAAK,qBAAqB;EAC1B,KAAK,UAAU;EACf,KAAK,eAAe;EACpB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,aAAa;EAClB,KAAK,iBAAiB;EACtB,KAAK,4BAA4B;EACjC,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,wBAAwB;EAC7B,KAAK,kCACL;EACA,KAAK,mBAAmB;EACxB,KAAK,wBAAwB;EAC7B,KAAK,cAAc;EACnB,KAAK,sBAAsB;EAC3B,KAAK,kBAAkB;EACvB,KAAK,sBAAsB;EAC3B,KAAK,qBAAqB;EAC1B,KAAK,wBAAwB;EAC7B,KAAK,uBAAuB;EAC5B,KAAK,6BAA6B;EAClC,KAAK,eAAe;EACpB,KAAK,eAAe;EACpB,KAAK,oBAAoB;EACzB,KAAK,YAAY;EACjB,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,eAAe;EACpB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,oBAAoB;EACzB,KAAK,WAAW;EAChB,KAAK,eAAe;EACpB,KAAK,sBAAsB;EAC3B,KAAK,gBAAgB;EACrB,KAAK,gBAAgB;EACrB,KAAK,eAAe;AACtB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { keys } from "./keys.js";
|
|
2
|
+
//#region src/translations/en.ts
|
|
3
|
+
const en = {
|
|
4
|
+
[keys.actingAs]: "Acting as {{name}}",
|
|
5
|
+
[keys.collectionPlural]: "Impersonation sessions",
|
|
6
|
+
[keys.collectionSingular]: "Impersonation session",
|
|
7
|
+
[keys.confirm]: "Impersonate",
|
|
8
|
+
[keys.confirmTitle]: "Impersonate this user?",
|
|
9
|
+
[keys.collapseBar]: "Collapse impersonation bar",
|
|
10
|
+
[keys.expandBar]: "Expand impersonation bar",
|
|
11
|
+
[keys.endSession]: "End session",
|
|
12
|
+
[keys.endSessionBody]: "This ends the impersonation. The target signs back in as themselves.",
|
|
13
|
+
[keys.errorAlreadyImpersonating]: "Already impersonating",
|
|
14
|
+
[keys.errorFailed]: "Impersonation failed",
|
|
15
|
+
[keys.errorForbidden]: "Not allowed",
|
|
16
|
+
[keys.errorImpersonatorGone]: "Your account is no longer available",
|
|
17
|
+
[keys.errorImpersonatorSessionExpired]: "Your original session expired. Sign in again.",
|
|
18
|
+
[keys.errorInvalidBody]: "Invalid request",
|
|
19
|
+
[keys.errorNotImpersonating]: "Not impersonating",
|
|
20
|
+
[keys.errorOrigin]: "Rejected by origin check",
|
|
21
|
+
[keys.errorReasonRequired]: "A reason is required",
|
|
22
|
+
[keys.errorSelfTarget]: "Cannot impersonate yourself",
|
|
23
|
+
[keys.errorTargetNotFound]: "User not found",
|
|
24
|
+
[keys.errorTargetTrashed]: "User is in the trash",
|
|
25
|
+
[keys.errorTargetUnverified]: "User is not verified",
|
|
26
|
+
[keys.errorUnsupportedAuth]: "This authentication method cannot impersonate",
|
|
27
|
+
[keys.errorUnsupportedCollection]: "This collection cannot be impersonated",
|
|
28
|
+
[keys.fieldEndedAt]: "Ended",
|
|
29
|
+
[keys.fieldEndedBy]: "Ended by",
|
|
30
|
+
[keys.fieldImpersonator]: "Impersonator",
|
|
31
|
+
[keys.fieldMode]: "Mode",
|
|
32
|
+
[keys.fieldReason]: "Reason",
|
|
33
|
+
[keys.fieldStartedAt]: "Started",
|
|
34
|
+
[keys.fieldTarget]: "Target",
|
|
35
|
+
[keys.noResults]: "No users match",
|
|
36
|
+
[keys.openDocument]: "Open document",
|
|
37
|
+
[keys.openDrawer]: "Open in drawer",
|
|
38
|
+
[keys.openWebsite]: "Open website",
|
|
39
|
+
[keys.pluginName]: "Impersonation",
|
|
40
|
+
[keys.reasonLabel]: "Reason",
|
|
41
|
+
[keys.reasonPlaceholder]: "Optional reason",
|
|
42
|
+
[keys.returnTo]: "Return to {{name}}",
|
|
43
|
+
[keys.searchByName]: "Search by name",
|
|
44
|
+
[keys.sessionActiveOnSite]: "{{name}} session is active on the website",
|
|
45
|
+
[keys.sessionEndsAt]: "Session ends at {{time}}",
|
|
46
|
+
[keys.sessionEndsIn]: "Session ends in {{countdown}}",
|
|
47
|
+
[keys.switchToUser]: "Impersonate"
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { en };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=en.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en.js","names":[],"sources":["../../src/translations/en.ts"],"sourcesContent":["import { keys, type TranslationKey } from './keys'\n\nexport const en: Record<TranslationKey, string> = {\n\t[keys.actingAs]: 'Acting as {{name}}',\n\t[keys.collectionPlural]: 'Impersonation sessions',\n\t[keys.collectionSingular]: 'Impersonation session',\n\t[keys.confirm]: 'Impersonate',\n\t[keys.confirmTitle]: 'Impersonate this user?',\n\t[keys.collapseBar]: 'Collapse impersonation bar',\n\t[keys.expandBar]: 'Expand impersonation bar',\n\t[keys.endSession]: 'End session',\n\t[keys.endSessionBody]: 'This ends the impersonation. The target signs back in as themselves.',\n\t[keys.errorAlreadyImpersonating]: 'Already impersonating',\n\t[keys.errorFailed]: 'Impersonation failed',\n\t[keys.errorForbidden]: 'Not allowed',\n\t[keys.errorImpersonatorGone]: 'Your account is no longer available',\n\t[keys.errorImpersonatorSessionExpired]: 'Your original session expired. Sign in again.',\n\t[keys.errorInvalidBody]: 'Invalid request',\n\t[keys.errorNotImpersonating]: 'Not impersonating',\n\t[keys.errorOrigin]: 'Rejected by origin check',\n\t[keys.errorReasonRequired]: 'A reason is required',\n\t[keys.errorSelfTarget]: 'Cannot impersonate yourself',\n\t[keys.errorTargetNotFound]: 'User not found',\n\t[keys.errorTargetTrashed]: 'User is in the trash',\n\t[keys.errorTargetUnverified]: 'User is not verified',\n\t[keys.errorUnsupportedAuth]: 'This authentication method cannot impersonate',\n\t[keys.errorUnsupportedCollection]: 'This collection cannot be impersonated',\n\t[keys.fieldEndedAt]: 'Ended',\n\t[keys.fieldEndedBy]: 'Ended by',\n\t[keys.fieldImpersonator]: 'Impersonator',\n\t[keys.fieldMode]: 'Mode',\n\t[keys.fieldReason]: 'Reason',\n\t[keys.fieldStartedAt]: 'Started',\n\t[keys.fieldTarget]: 'Target',\n\t[keys.noResults]: 'No users match',\n\t[keys.openDocument]: 'Open document',\n\t[keys.openDrawer]: 'Open in drawer',\n\t[keys.openWebsite]: 'Open website',\n\t[keys.pluginName]: 'Impersonation',\n\t[keys.reasonLabel]: 'Reason',\n\t[keys.reasonPlaceholder]: 'Optional reason',\n\t[keys.returnTo]: 'Return to {{name}}',\n\t[keys.searchByName]: 'Search by name',\n\t[keys.sessionActiveOnSite]: '{{name}} session is active on the website',\n\t[keys.sessionEndsAt]: 'Session ends at {{time}}',\n\t[keys.sessionEndsIn]: 'Session ends in {{countdown}}',\n\t[keys.switchToUser]: 'Impersonate',\n}\n"],"mappings":";;AAEA,MAAa,KAAqC;EAChD,KAAK,WAAW;EAChB,KAAK,mBAAmB;EACxB,KAAK,qBAAqB;EAC1B,KAAK,UAAU;EACf,KAAK,eAAe;EACpB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,aAAa;EAClB,KAAK,iBAAiB;EACtB,KAAK,4BAA4B;EACjC,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,wBAAwB;EAC7B,KAAK,kCAAkC;EACvC,KAAK,mBAAmB;EACxB,KAAK,wBAAwB;EAC7B,KAAK,cAAc;EACnB,KAAK,sBAAsB;EAC3B,KAAK,kBAAkB;EACvB,KAAK,sBAAsB;EAC3B,KAAK,qBAAqB;EAC1B,KAAK,wBAAwB;EAC7B,KAAK,uBAAuB;EAC5B,KAAK,6BAA6B;EAClC,KAAK,eAAe;EACpB,KAAK,eAAe;EACpB,KAAK,oBAAoB;EACzB,KAAK,YAAY;EACjB,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,eAAe;EACpB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,oBAAoB;EACzB,KAAK,WAAW;EAChB,KAAK,eAAe;EACpB,KAAK,sBAAsB;EAC3B,KAAK,gBAAgB;EACrB,KAAK,gBAAgB;EACrB,KAAK,eAAe;AACtB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { keys } from "./keys.js";
|
|
2
|
+
//#region src/translations/es.ts
|
|
3
|
+
const es = {
|
|
4
|
+
[keys.actingAs]: "Actuando como {{name}}",
|
|
5
|
+
[keys.collectionPlural]: "Sesiones de impersonación",
|
|
6
|
+
[keys.collectionSingular]: "Sesión de impersonación",
|
|
7
|
+
[keys.confirm]: "Suplantar",
|
|
8
|
+
[keys.confirmTitle]: "¿Suplantar a este usuario?",
|
|
9
|
+
[keys.collapseBar]: "Contraer la barra de impersonación",
|
|
10
|
+
[keys.expandBar]: "Expandir la barra de impersonación",
|
|
11
|
+
[keys.endSession]: "Terminar sesión",
|
|
12
|
+
[keys.endSessionBody]: "Esto termina la impersonación. El destino vuelve a ser él mismo.",
|
|
13
|
+
[keys.errorAlreadyImpersonating]: "Ya hay una impersonación activa",
|
|
14
|
+
[keys.errorFailed]: "La impersonación falló",
|
|
15
|
+
[keys.errorForbidden]: "No permitido",
|
|
16
|
+
[keys.errorImpersonatorGone]: "Su cuenta ya no está disponible",
|
|
17
|
+
[keys.errorImpersonatorSessionExpired]: "Su sesión original caducó. Inicie sesión de nuevo.",
|
|
18
|
+
[keys.errorInvalidBody]: "Solicitud no válida",
|
|
19
|
+
[keys.errorNotImpersonating]: "No hay impersonación activa",
|
|
20
|
+
[keys.errorOrigin]: "Rechazado por la comprobación de origen",
|
|
21
|
+
[keys.errorReasonRequired]: "Se requiere un motivo",
|
|
22
|
+
[keys.errorSelfTarget]: "No puede impersonarse a sí mismo",
|
|
23
|
+
[keys.errorTargetNotFound]: "Usuario no encontrado",
|
|
24
|
+
[keys.errorTargetTrashed]: "El usuario está en la papelera",
|
|
25
|
+
[keys.errorTargetUnverified]: "El usuario no está verificado",
|
|
26
|
+
[keys.errorUnsupportedAuth]: "Este método de autenticación no puede impersonar",
|
|
27
|
+
[keys.errorUnsupportedCollection]: "Esta colección no se puede impersonar",
|
|
28
|
+
[keys.fieldEndedAt]: "Terminó",
|
|
29
|
+
[keys.fieldEndedBy]: "Terminada por",
|
|
30
|
+
[keys.fieldImpersonator]: "Impersonador",
|
|
31
|
+
[keys.fieldMode]: "Modo",
|
|
32
|
+
[keys.fieldReason]: "Motivo",
|
|
33
|
+
[keys.fieldStartedAt]: "Inicio",
|
|
34
|
+
[keys.fieldTarget]: "Objetivo",
|
|
35
|
+
[keys.noResults]: "Sin coincidencias",
|
|
36
|
+
[keys.openDocument]: "Abrir documento",
|
|
37
|
+
[keys.openDrawer]: "Abrir en el drawer",
|
|
38
|
+
[keys.openWebsite]: "Abrir sitio",
|
|
39
|
+
[keys.pluginName]: "Impersonación",
|
|
40
|
+
[keys.reasonLabel]: "Motivo",
|
|
41
|
+
[keys.reasonPlaceholder]: "Motivo opcional",
|
|
42
|
+
[keys.returnTo]: "Volver a {{name}}",
|
|
43
|
+
[keys.searchByName]: "Buscar por nombre",
|
|
44
|
+
[keys.sessionActiveOnSite]: "La sesión de {{name}} está activa en el sitio",
|
|
45
|
+
[keys.sessionEndsAt]: "La sesión termina a las {{time}}",
|
|
46
|
+
[keys.sessionEndsIn]: "La sesión termina en {{countdown}}",
|
|
47
|
+
[keys.switchToUser]: "Suplantar"
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { es };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.js","names":[],"sources":["../../src/translations/es.ts"],"sourcesContent":["import { keys, type TranslationKey } from './keys'\n\nexport const es: Record<TranslationKey, string> = {\n\t[keys.actingAs]: 'Actuando como {{name}}',\n\t[keys.collectionPlural]: 'Sesiones de impersonación',\n\t[keys.collectionSingular]: 'Sesión de impersonación',\n\t[keys.confirm]: 'Suplantar',\n\t[keys.confirmTitle]: '¿Suplantar a este usuario?',\n\t[keys.collapseBar]: 'Contraer la barra de impersonación',\n\t[keys.expandBar]: 'Expandir la barra de impersonación',\n\t[keys.endSession]: 'Terminar sesión',\n\t[keys.endSessionBody]: 'Esto termina la impersonación. El destino vuelve a ser él mismo.',\n\t[keys.errorAlreadyImpersonating]: 'Ya hay una impersonación activa',\n\t[keys.errorFailed]: 'La impersonación falló',\n\t[keys.errorForbidden]: 'No permitido',\n\t[keys.errorImpersonatorGone]: 'Su cuenta ya no está disponible',\n\t[keys.errorImpersonatorSessionExpired]: 'Su sesión original caducó. Inicie sesión de nuevo.',\n\t[keys.errorInvalidBody]: 'Solicitud no válida',\n\t[keys.errorNotImpersonating]: 'No hay impersonación activa',\n\t[keys.errorOrigin]: 'Rechazado por la comprobación de origen',\n\t[keys.errorReasonRequired]: 'Se requiere un motivo',\n\t[keys.errorSelfTarget]: 'No puede impersonarse a sí mismo',\n\t[keys.errorTargetNotFound]: 'Usuario no encontrado',\n\t[keys.errorTargetTrashed]: 'El usuario está en la papelera',\n\t[keys.errorTargetUnverified]: 'El usuario no está verificado',\n\t[keys.errorUnsupportedAuth]: 'Este método de autenticación no puede impersonar',\n\t[keys.errorUnsupportedCollection]: 'Esta colección no se puede impersonar',\n\t[keys.fieldEndedAt]: 'Terminó',\n\t[keys.fieldEndedBy]: 'Terminada por',\n\t[keys.fieldImpersonator]: 'Impersonador',\n\t[keys.fieldMode]: 'Modo',\n\t[keys.fieldReason]: 'Motivo',\n\t[keys.fieldStartedAt]: 'Inicio',\n\t[keys.fieldTarget]: 'Objetivo',\n\t[keys.noResults]: 'Sin coincidencias',\n\t[keys.openDocument]: 'Abrir documento',\n\t[keys.openDrawer]: 'Abrir en el drawer',\n\t[keys.openWebsite]: 'Abrir sitio',\n\t[keys.pluginName]: 'Impersonación',\n\t[keys.reasonLabel]: 'Motivo',\n\t[keys.reasonPlaceholder]: 'Motivo opcional',\n\t[keys.returnTo]: 'Volver a {{name}}',\n\t[keys.searchByName]: 'Buscar por nombre',\n\t[keys.sessionActiveOnSite]: 'La sesión de {{name}} está activa en el sitio',\n\t[keys.sessionEndsAt]: 'La sesión termina a las {{time}}',\n\t[keys.sessionEndsIn]: 'La sesión termina en {{countdown}}',\n\t[keys.switchToUser]: 'Suplantar',\n}\n"],"mappings":";;AAEA,MAAa,KAAqC;EAChD,KAAK,WAAW;EAChB,KAAK,mBAAmB;EACxB,KAAK,qBAAqB;EAC1B,KAAK,UAAU;EACf,KAAK,eAAe;EACpB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,aAAa;EAClB,KAAK,iBAAiB;EACtB,KAAK,4BAA4B;EACjC,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,wBAAwB;EAC7B,KAAK,kCAAkC;EACvC,KAAK,mBAAmB;EACxB,KAAK,wBAAwB;EAC7B,KAAK,cAAc;EACnB,KAAK,sBAAsB;EAC3B,KAAK,kBAAkB;EACvB,KAAK,sBAAsB;EAC3B,KAAK,qBAAqB;EAC1B,KAAK,wBAAwB;EAC7B,KAAK,uBAAuB;EAC5B,KAAK,6BAA6B;EAClC,KAAK,eAAe;EACpB,KAAK,eAAe;EACpB,KAAK,oBAAoB;EACzB,KAAK,YAAY;EACjB,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,eAAe;EACpB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,oBAAoB;EACzB,KAAK,WAAW;EAChB,KAAK,eAAe;EACpB,KAAK,sBAAsB;EAC3B,KAAK,gBAAgB;EACrB,KAAK,gBAAgB;EACrB,KAAK,eAAe;AACtB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { keys } from "./keys.js";
|
|
2
|
+
//#region src/translations/fr.ts
|
|
3
|
+
const fr = {
|
|
4
|
+
[keys.actingAs]: "Agit en tant que {{name}}",
|
|
5
|
+
[keys.collectionPlural]: "Sessions d'usurpation",
|
|
6
|
+
[keys.collectionSingular]: "Session d'usurpation",
|
|
7
|
+
[keys.confirm]: "Usurper",
|
|
8
|
+
[keys.confirmTitle]: "Usurper cet utilisateur ?",
|
|
9
|
+
[keys.collapseBar]: "Réduire la barre d'impersonation",
|
|
10
|
+
[keys.expandBar]: "Développer la barre d'impersonation",
|
|
11
|
+
[keys.endSession]: "Terminer la session",
|
|
12
|
+
[keys.endSessionBody]: "Cela met fin à l'impersonation. La cible redevient elle-même.",
|
|
13
|
+
[keys.errorAlreadyImpersonating]: "Usurpation déjà en cours",
|
|
14
|
+
[keys.errorFailed]: "L'usurpation a échoué",
|
|
15
|
+
[keys.errorForbidden]: "Non autorisé",
|
|
16
|
+
[keys.errorImpersonatorGone]: "Votre compte n'est plus disponible",
|
|
17
|
+
[keys.errorImpersonatorSessionExpired]: "Votre session d'origine a expiré. Reconnectez-vous.",
|
|
18
|
+
[keys.errorInvalidBody]: "Requête invalide",
|
|
19
|
+
[keys.errorNotImpersonating]: "Aucune usurpation active",
|
|
20
|
+
[keys.errorOrigin]: "Rejeté par le contrôle d'origine",
|
|
21
|
+
[keys.errorReasonRequired]: "Un motif est requis",
|
|
22
|
+
[keys.errorSelfTarget]: "Impossible de s'usurper soi-même",
|
|
23
|
+
[keys.errorTargetNotFound]: "Utilisateur introuvable",
|
|
24
|
+
[keys.errorTargetTrashed]: "L'utilisateur est dans la corbeille",
|
|
25
|
+
[keys.errorTargetUnverified]: "L'utilisateur n'est pas vérifié",
|
|
26
|
+
[keys.errorUnsupportedAuth]: "Cette authentification ne peut pas usurper",
|
|
27
|
+
[keys.errorUnsupportedCollection]: "Cette collection ne peut pas être usurpée",
|
|
28
|
+
[keys.fieldEndedAt]: "Terminée",
|
|
29
|
+
[keys.fieldEndedBy]: "Terminée par",
|
|
30
|
+
[keys.fieldImpersonator]: "Usurpateur",
|
|
31
|
+
[keys.fieldMode]: "Mode",
|
|
32
|
+
[keys.fieldReason]: "Motif",
|
|
33
|
+
[keys.fieldStartedAt]: "Début",
|
|
34
|
+
[keys.fieldTarget]: "Cible",
|
|
35
|
+
[keys.noResults]: "Aucun résultat",
|
|
36
|
+
[keys.openDocument]: "Ouvrir le document",
|
|
37
|
+
[keys.openDrawer]: "Ouvrir dans le tiroir",
|
|
38
|
+
[keys.openWebsite]: "Ouvrir le site",
|
|
39
|
+
[keys.pluginName]: "Usurpation",
|
|
40
|
+
[keys.reasonLabel]: "Motif",
|
|
41
|
+
[keys.reasonPlaceholder]: "Motif facultatif",
|
|
42
|
+
[keys.returnTo]: "Retour vers {{name}}",
|
|
43
|
+
[keys.searchByName]: "Rechercher par nom",
|
|
44
|
+
[keys.sessionActiveOnSite]: "La session {{name}} est active sur le site",
|
|
45
|
+
[keys.sessionEndsAt]: "La session se termine à {{time}}",
|
|
46
|
+
[keys.sessionEndsIn]: "La session se termine dans {{countdown}}",
|
|
47
|
+
[keys.switchToUser]: "Usurper"
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { fr };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=fr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fr.js","names":[],"sources":["../../src/translations/fr.ts"],"sourcesContent":["import { keys, type TranslationKey } from './keys'\n\nexport const fr: Record<TranslationKey, string> = {\n\t[keys.actingAs]: 'Agit en tant que {{name}}',\n\t[keys.collectionPlural]: \"Sessions d'usurpation\",\n\t[keys.collectionSingular]: \"Session d'usurpation\",\n\t[keys.confirm]: 'Usurper',\n\t[keys.confirmTitle]: 'Usurper cet utilisateur ?',\n\t[keys.collapseBar]: \"Réduire la barre d'impersonation\",\n\t[keys.expandBar]: \"Développer la barre d'impersonation\",\n\t[keys.endSession]: 'Terminer la session',\n\t[keys.endSessionBody]: \"Cela met fin à l'impersonation. La cible redevient elle-même.\",\n\t[keys.errorAlreadyImpersonating]: 'Usurpation déjà en cours',\n\t[keys.errorFailed]: \"L'usurpation a échoué\",\n\t[keys.errorForbidden]: 'Non autorisé',\n\t[keys.errorImpersonatorGone]: \"Votre compte n'est plus disponible\",\n\t[keys.errorImpersonatorSessionExpired]: \"Votre session d'origine a expiré. Reconnectez-vous.\",\n\t[keys.errorInvalidBody]: 'Requête invalide',\n\t[keys.errorNotImpersonating]: 'Aucune usurpation active',\n\t[keys.errorOrigin]: \"Rejeté par le contrôle d'origine\",\n\t[keys.errorReasonRequired]: 'Un motif est requis',\n\t[keys.errorSelfTarget]: \"Impossible de s'usurper soi-même\",\n\t[keys.errorTargetNotFound]: 'Utilisateur introuvable',\n\t[keys.errorTargetTrashed]: \"L'utilisateur est dans la corbeille\",\n\t[keys.errorTargetUnverified]: \"L'utilisateur n'est pas vérifié\",\n\t[keys.errorUnsupportedAuth]: 'Cette authentification ne peut pas usurper',\n\t[keys.errorUnsupportedCollection]: 'Cette collection ne peut pas être usurpée',\n\t[keys.fieldEndedAt]: 'Terminée',\n\t[keys.fieldEndedBy]: 'Terminée par',\n\t[keys.fieldImpersonator]: 'Usurpateur',\n\t[keys.fieldMode]: 'Mode',\n\t[keys.fieldReason]: 'Motif',\n\t[keys.fieldStartedAt]: 'Début',\n\t[keys.fieldTarget]: 'Cible',\n\t[keys.noResults]: 'Aucun résultat',\n\t[keys.openDocument]: 'Ouvrir le document',\n\t[keys.openDrawer]: 'Ouvrir dans le tiroir',\n\t[keys.openWebsite]: 'Ouvrir le site',\n\t[keys.pluginName]: 'Usurpation',\n\t[keys.reasonLabel]: 'Motif',\n\t[keys.reasonPlaceholder]: 'Motif facultatif',\n\t[keys.returnTo]: 'Retour vers {{name}}',\n\t[keys.searchByName]: 'Rechercher par nom',\n\t[keys.sessionActiveOnSite]: 'La session {{name}} est active sur le site',\n\t[keys.sessionEndsAt]: 'La session se termine à {{time}}',\n\t[keys.sessionEndsIn]: 'La session se termine dans {{countdown}}',\n\t[keys.switchToUser]: 'Usurper',\n}\n"],"mappings":";;AAEA,MAAa,KAAqC;EAChD,KAAK,WAAW;EAChB,KAAK,mBAAmB;EACxB,KAAK,qBAAqB;EAC1B,KAAK,UAAU;EACf,KAAK,eAAe;EACpB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,aAAa;EAClB,KAAK,iBAAiB;EACtB,KAAK,4BAA4B;EACjC,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,wBAAwB;EAC7B,KAAK,kCAAkC;EACvC,KAAK,mBAAmB;EACxB,KAAK,wBAAwB;EAC7B,KAAK,cAAc;EACnB,KAAK,sBAAsB;EAC3B,KAAK,kBAAkB;EACvB,KAAK,sBAAsB;EAC3B,KAAK,qBAAqB;EAC1B,KAAK,wBAAwB;EAC7B,KAAK,uBAAuB;EAC5B,KAAK,6BAA6B;EAClC,KAAK,eAAe;EACpB,KAAK,eAAe;EACpB,KAAK,oBAAoB;EACzB,KAAK,YAAY;EACjB,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,eAAe;EACpB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,oBAAoB;EACzB,KAAK,WAAW;EAChB,KAAK,eAAe;EACpB,KAAK,sBAAsB;EAC3B,KAAK,gBAAgB;EACrB,KAAK,gBAAgB;EACrB,KAAK,eAAe;AACtB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { keys } from "./keys.js";
|
|
2
|
+
//#region src/translations/id.ts
|
|
3
|
+
const id = {
|
|
4
|
+
[keys.actingAs]: "Bertindak sebagai {{name}}",
|
|
5
|
+
[keys.collectionPlural]: "Sesi impersonasi",
|
|
6
|
+
[keys.collectionSingular]: "Sesi impersonasi",
|
|
7
|
+
[keys.confirm]: "Impersonasi",
|
|
8
|
+
[keys.confirmTitle]: "Impersonasi pengguna ini?",
|
|
9
|
+
[keys.collapseBar]: "Ciutkan bilah impersonasi",
|
|
10
|
+
[keys.expandBar]: "Bentangkan bilah impersonasi",
|
|
11
|
+
[keys.endSession]: "Akhiri sesi",
|
|
12
|
+
[keys.endSessionBody]: "Ini mengakhiri impersonasi. Target kembali sebagai dirinya sendiri.",
|
|
13
|
+
[keys.errorAlreadyImpersonating]: "Sudah dalam impersonasi",
|
|
14
|
+
[keys.errorFailed]: "Impersonasi gagal",
|
|
15
|
+
[keys.errorForbidden]: "Tidak diizinkan",
|
|
16
|
+
[keys.errorImpersonatorGone]: "Akun Anda tidak lagi tersedia",
|
|
17
|
+
[keys.errorImpersonatorSessionExpired]: "Sesi asli Anda kedaluwarsa. Masuk lagi.",
|
|
18
|
+
[keys.errorInvalidBody]: "Permintaan tidak valid",
|
|
19
|
+
[keys.errorNotImpersonating]: "Tidak sedang impersonasi",
|
|
20
|
+
[keys.errorOrigin]: "Ditolak oleh pemeriksaan origin",
|
|
21
|
+
[keys.errorReasonRequired]: "Alasan wajib diisi",
|
|
22
|
+
[keys.errorSelfTarget]: "Tidak dapat mengimpersonasi diri sendiri",
|
|
23
|
+
[keys.errorTargetNotFound]: "Pengguna tidak ditemukan",
|
|
24
|
+
[keys.errorTargetTrashed]: "Pengguna ada di tempat sampah",
|
|
25
|
+
[keys.errorTargetUnverified]: "Pengguna belum terverifikasi",
|
|
26
|
+
[keys.errorUnsupportedAuth]: "Metode autentikasi ini tidak dapat impersonasi",
|
|
27
|
+
[keys.errorUnsupportedCollection]: "Koleksi ini tidak dapat diimpersonasi",
|
|
28
|
+
[keys.fieldEndedAt]: "Berakhir",
|
|
29
|
+
[keys.fieldEndedBy]: "Diakhiri oleh",
|
|
30
|
+
[keys.fieldImpersonator]: "Impersonator",
|
|
31
|
+
[keys.fieldMode]: "Mode",
|
|
32
|
+
[keys.fieldReason]: "Alasan",
|
|
33
|
+
[keys.fieldStartedAt]: "Dimulai",
|
|
34
|
+
[keys.fieldTarget]: "Target",
|
|
35
|
+
[keys.noResults]: "Tidak ada yang cocok",
|
|
36
|
+
[keys.openDocument]: "Buka dokumen",
|
|
37
|
+
[keys.openDrawer]: "Buka di drawer",
|
|
38
|
+
[keys.openWebsite]: "Buka situs",
|
|
39
|
+
[keys.pluginName]: "Impersonasi",
|
|
40
|
+
[keys.reasonLabel]: "Alasan",
|
|
41
|
+
[keys.reasonPlaceholder]: "Alasan opsional",
|
|
42
|
+
[keys.returnTo]: "Kembali ke {{name}}",
|
|
43
|
+
[keys.searchByName]: "Cari berdasarkan nama",
|
|
44
|
+
[keys.sessionActiveOnSite]: "Sesi {{name}} aktif di situs",
|
|
45
|
+
[keys.sessionEndsAt]: "Sesi berakhir pukul {{time}}",
|
|
46
|
+
[keys.sessionEndsIn]: "Sesi berakhir dalam {{countdown}}",
|
|
47
|
+
[keys.switchToUser]: "Impersonasi"
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { id };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","names":[],"sources":["../../src/translations/id.ts"],"sourcesContent":["import { keys, type TranslationKey } from './keys'\n\nexport const id: Record<TranslationKey, string> = {\n\t[keys.actingAs]: 'Bertindak sebagai {{name}}',\n\t[keys.collectionPlural]: 'Sesi impersonasi',\n\t[keys.collectionSingular]: 'Sesi impersonasi',\n\t[keys.confirm]: 'Impersonasi',\n\t[keys.confirmTitle]: 'Impersonasi pengguna ini?',\n\t[keys.collapseBar]: 'Ciutkan bilah impersonasi',\n\t[keys.expandBar]: 'Bentangkan bilah impersonasi',\n\t[keys.endSession]: 'Akhiri sesi',\n\t[keys.endSessionBody]: 'Ini mengakhiri impersonasi. Target kembali sebagai dirinya sendiri.',\n\t[keys.errorAlreadyImpersonating]: 'Sudah dalam impersonasi',\n\t[keys.errorFailed]: 'Impersonasi gagal',\n\t[keys.errorForbidden]: 'Tidak diizinkan',\n\t[keys.errorImpersonatorGone]: 'Akun Anda tidak lagi tersedia',\n\t[keys.errorImpersonatorSessionExpired]: 'Sesi asli Anda kedaluwarsa. Masuk lagi.',\n\t[keys.errorInvalidBody]: 'Permintaan tidak valid',\n\t[keys.errorNotImpersonating]: 'Tidak sedang impersonasi',\n\t[keys.errorOrigin]: 'Ditolak oleh pemeriksaan origin',\n\t[keys.errorReasonRequired]: 'Alasan wajib diisi',\n\t[keys.errorSelfTarget]: 'Tidak dapat mengimpersonasi diri sendiri',\n\t[keys.errorTargetNotFound]: 'Pengguna tidak ditemukan',\n\t[keys.errorTargetTrashed]: 'Pengguna ada di tempat sampah',\n\t[keys.errorTargetUnverified]: 'Pengguna belum terverifikasi',\n\t[keys.errorUnsupportedAuth]: 'Metode autentikasi ini tidak dapat impersonasi',\n\t[keys.errorUnsupportedCollection]: 'Koleksi ini tidak dapat diimpersonasi',\n\t[keys.fieldEndedAt]: 'Berakhir',\n\t[keys.fieldEndedBy]: 'Diakhiri oleh',\n\t[keys.fieldImpersonator]: 'Impersonator',\n\t[keys.fieldMode]: 'Mode',\n\t[keys.fieldReason]: 'Alasan',\n\t[keys.fieldStartedAt]: 'Dimulai',\n\t[keys.fieldTarget]: 'Target',\n\t[keys.noResults]: 'Tidak ada yang cocok',\n\t[keys.openDocument]: 'Buka dokumen',\n\t[keys.openDrawer]: 'Buka di drawer',\n\t[keys.openWebsite]: 'Buka situs',\n\t[keys.pluginName]: 'Impersonasi',\n\t[keys.reasonLabel]: 'Alasan',\n\t[keys.reasonPlaceholder]: 'Alasan opsional',\n\t[keys.returnTo]: 'Kembali ke {{name}}',\n\t[keys.searchByName]: 'Cari berdasarkan nama',\n\t[keys.sessionActiveOnSite]: 'Sesi {{name}} aktif di situs',\n\t[keys.sessionEndsAt]: 'Sesi berakhir pukul {{time}}',\n\t[keys.sessionEndsIn]: 'Sesi berakhir dalam {{countdown}}',\n\t[keys.switchToUser]: 'Impersonasi',\n}\n"],"mappings":";;AAEA,MAAa,KAAqC;EAChD,KAAK,WAAW;EAChB,KAAK,mBAAmB;EACxB,KAAK,qBAAqB;EAC1B,KAAK,UAAU;EACf,KAAK,eAAe;EACpB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,aAAa;EAClB,KAAK,iBAAiB;EACtB,KAAK,4BAA4B;EACjC,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,wBAAwB;EAC7B,KAAK,kCAAkC;EACvC,KAAK,mBAAmB;EACxB,KAAK,wBAAwB;EAC7B,KAAK,cAAc;EACnB,KAAK,sBAAsB;EAC3B,KAAK,kBAAkB;EACvB,KAAK,sBAAsB;EAC3B,KAAK,qBAAqB;EAC1B,KAAK,wBAAwB;EAC7B,KAAK,uBAAuB;EAC5B,KAAK,6BAA6B;EAClC,KAAK,eAAe;EACpB,KAAK,eAAe;EACpB,KAAK,oBAAoB;EACzB,KAAK,YAAY;EACjB,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,eAAe;EACpB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,oBAAoB;EACzB,KAAK,WAAW;EAChB,KAAK,eAAe;EACpB,KAAK,sBAAsB;EAC3B,KAAK,gBAAgB;EACrB,KAAK,gBAAgB;EACrB,KAAK,eAAe;AACtB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TranslationKey, keys } from "./keys.js";
|
|
2
|
+
|
|
3
|
+
//#region src/translations/index.d.ts
|
|
4
|
+
/** Per-locale string overrides keyed by this plugin's typed translation keys. */
|
|
5
|
+
type TranslationsOption = {
|
|
6
|
+
[locale: string]: Partial<Record<TranslationKey, string>>;
|
|
7
|
+
};
|
|
8
|
+
/** Per-locale messages merged into `config.i18n.translations`. */
|
|
9
|
+
declare const translations: {
|
|
10
|
+
ar: Record<string, Record<string, string>>;
|
|
11
|
+
de: Record<string, Record<string, string>>;
|
|
12
|
+
en: Record<string, Record<string, string>>;
|
|
13
|
+
es: Record<string, Record<string, string>>;
|
|
14
|
+
fr: Record<string, Record<string, string>>;
|
|
15
|
+
id: Record<string, Record<string, string>>;
|
|
16
|
+
ko: Record<string, Record<string, string>>;
|
|
17
|
+
pt: Record<string, Record<string, string>>;
|
|
18
|
+
ru: Record<string, Record<string, string>>;
|
|
19
|
+
uk: Record<string, Record<string, string>>;
|
|
20
|
+
zh: Record<string, Record<string, string>>;
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
export { TranslationsOption, translations };
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import "./keys.js";
|
|
2
|
+
import { ar } from "./ar.js";
|
|
3
|
+
import { de } from "./de.js";
|
|
4
|
+
import { en } from "./en.js";
|
|
5
|
+
import { es } from "./es.js";
|
|
6
|
+
import { fr } from "./fr.js";
|
|
7
|
+
import { id } from "./id.js";
|
|
8
|
+
import { ko } from "./ko.js";
|
|
9
|
+
import { pt } from "./pt.js";
|
|
10
|
+
import { ru } from "./ru.js";
|
|
11
|
+
import { uk } from "./uk.js";
|
|
12
|
+
import { zh } from "./zh.js";
|
|
13
|
+
//#region src/translations/index.ts
|
|
14
|
+
/**
|
|
15
|
+
* Flat `impersonation:foo` entries to the nested `{ impersonation: { foo } }`
|
|
16
|
+
* shape Payload resolves `t('impersonation:foo')` against (it splits on `:`).
|
|
17
|
+
* Undefined values are skipped so `Partial` override maps pass through.
|
|
18
|
+
*/
|
|
19
|
+
const toNested = (flat) => {
|
|
20
|
+
const out = {};
|
|
21
|
+
for (const [fullKey, value] of Object.entries(flat)) {
|
|
22
|
+
if (typeof value !== "string") continue;
|
|
23
|
+
const separator = fullKey.indexOf(":");
|
|
24
|
+
if (separator < 1) continue;
|
|
25
|
+
const namespace = fullKey.slice(0, separator);
|
|
26
|
+
const bucket = out[namespace] ?? {};
|
|
27
|
+
bucket[fullKey.slice(separator + 1)] = value;
|
|
28
|
+
out[namespace] = bucket;
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
};
|
|
32
|
+
/** Per-locale messages merged into `config.i18n.translations`. */
|
|
33
|
+
const translations = {
|
|
34
|
+
ar: toNested(ar),
|
|
35
|
+
de: toNested(de),
|
|
36
|
+
en: toNested(en),
|
|
37
|
+
es: toNested(es),
|
|
38
|
+
fr: toNested(fr),
|
|
39
|
+
id: toNested(id),
|
|
40
|
+
ko: toNested(ko),
|
|
41
|
+
pt: toNested(pt),
|
|
42
|
+
ru: toNested(ru),
|
|
43
|
+
uk: toNested(uk),
|
|
44
|
+
zh: toNested(zh)
|
|
45
|
+
};
|
|
46
|
+
//#endregion
|
|
47
|
+
export { toNested, translations };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/translations/index.ts"],"sourcesContent":["import { ar } from './ar'\nimport { de } from './de'\nimport { en } from './en'\nimport { es } from './es'\nimport { fr } from './fr'\nimport { id } from './id'\nimport type { TranslationKey } from './keys'\nimport { ko } from './ko'\nimport { pt } from './pt'\nimport { ru } from './ru'\nimport { uk } from './uk'\nimport { zh } from './zh'\n\nexport type { TranslationKey } from './keys'\nexport { keys } from './keys'\n\n/** Per-locale string overrides keyed by this plugin's typed translation keys. */\nexport type TranslationsOption = {\n\t[locale: string]: Partial<Record<TranslationKey, string>>\n}\n\n/**\n * Flat `impersonation:foo` entries to the nested `{ impersonation: { foo } }`\n * shape Payload resolves `t('impersonation:foo')` against (it splits on `:`).\n * Undefined values are skipped so `Partial` override maps pass through.\n */\nexport const toNested = (flat: {\n\t[key: string]: string | undefined\n}): Record<string, Record<string, string>> => {\n\tconst out: Record<string, Record<string, string>> = {}\n\tfor (const [fullKey, value] of Object.entries(flat)) {\n\t\tif (typeof value !== 'string') {\n\t\t\tcontinue\n\t\t}\n\t\tconst separator = fullKey.indexOf(':')\n\t\tif (separator < 1) {\n\t\t\tcontinue\n\t\t}\n\t\tconst namespace = fullKey.slice(0, separator)\n\t\tconst bucket = out[namespace] ?? {}\n\t\tbucket[fullKey.slice(separator + 1)] = value\n\t\tout[namespace] = bucket\n\t}\n\treturn out\n}\n\n/** Per-locale messages merged into `config.i18n.translations`. */\nexport const translations = {\n\tar: toNested(ar),\n\tde: toNested(de),\n\ten: toNested(en),\n\tes: toNested(es),\n\tfr: toNested(fr),\n\tid: toNested(id),\n\tko: toNested(ko),\n\tpt: toNested(pt),\n\tru: toNested(ru),\n\tuk: toNested(uk),\n\tzh: toNested(zh),\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA0BA,MAAa,YAAY,SAEqB;CAC7C,MAAM,MAA8C,CAAC;CACrD,KAAK,MAAM,CAAC,SAAS,UAAU,OAAO,QAAQ,IAAI,GAAG;EACpD,IAAI,OAAO,UAAU,UACpB;EAED,MAAM,YAAY,QAAQ,QAAQ,GAAG;EACrC,IAAI,YAAY,GACf;EAED,MAAM,YAAY,QAAQ,MAAM,GAAG,SAAS;EAC5C,MAAM,SAAS,IAAI,cAAc,CAAC;EAClC,OAAO,QAAQ,MAAM,YAAY,CAAC,KAAK;EACvC,IAAI,aAAa;CAClB;CACA,OAAO;AACR;;AAGA,MAAa,eAAe;CAC3B,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;CACf,IAAI,SAAS,EAAE;AAChB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region src/translations/keys.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Typed translation keys. Lookups must go through these constants, not string
|
|
4
|
+
* literals (enforced by requireI18nKeysTyped.grit). Every key here must have a
|
|
5
|
+
* value in every locale (`en.ts`), or it is a type error.
|
|
6
|
+
*/
|
|
7
|
+
declare const keys: {
|
|
8
|
+
readonly actingAs: "impersonation:actingAs";
|
|
9
|
+
readonly collectionPlural: "impersonation:collectionPlural";
|
|
10
|
+
readonly collectionSingular: "impersonation:collectionSingular";
|
|
11
|
+
readonly confirm: "impersonation:confirm";
|
|
12
|
+
readonly confirmTitle: "impersonation:confirmTitle";
|
|
13
|
+
readonly collapseBar: "impersonation:collapseBar";
|
|
14
|
+
readonly expandBar: "impersonation:expandBar";
|
|
15
|
+
readonly endSession: "impersonation:endSession";
|
|
16
|
+
readonly endSessionBody: "impersonation:endSessionBody";
|
|
17
|
+
readonly errorAlreadyImpersonating: "impersonation:errorAlreadyImpersonating";
|
|
18
|
+
readonly errorFailed: "impersonation:errorFailed";
|
|
19
|
+
readonly errorForbidden: "impersonation:errorForbidden";
|
|
20
|
+
readonly errorImpersonatorGone: "impersonation:errorImpersonatorGone";
|
|
21
|
+
readonly errorImpersonatorSessionExpired: "impersonation:errorImpersonatorSessionExpired";
|
|
22
|
+
readonly errorInvalidBody: "impersonation:errorInvalidBody";
|
|
23
|
+
readonly errorNotImpersonating: "impersonation:errorNotImpersonating";
|
|
24
|
+
readonly errorOrigin: "impersonation:errorOrigin";
|
|
25
|
+
readonly errorReasonRequired: "impersonation:errorReasonRequired";
|
|
26
|
+
readonly errorSelfTarget: "impersonation:errorSelfTarget";
|
|
27
|
+
readonly errorTargetNotFound: "impersonation:errorTargetNotFound";
|
|
28
|
+
readonly errorTargetTrashed: "impersonation:errorTargetTrashed";
|
|
29
|
+
readonly errorTargetUnverified: "impersonation:errorTargetUnverified";
|
|
30
|
+
readonly errorUnsupportedAuth: "impersonation:errorUnsupportedAuth";
|
|
31
|
+
readonly errorUnsupportedCollection: "impersonation:errorUnsupportedCollection";
|
|
32
|
+
readonly fieldEndedAt: "impersonation:fieldEndedAt";
|
|
33
|
+
readonly fieldEndedBy: "impersonation:fieldEndedBy";
|
|
34
|
+
readonly fieldImpersonator: "impersonation:fieldImpersonator";
|
|
35
|
+
readonly fieldMode: "impersonation:fieldMode";
|
|
36
|
+
readonly fieldReason: "impersonation:fieldReason";
|
|
37
|
+
readonly fieldStartedAt: "impersonation:fieldStartedAt";
|
|
38
|
+
readonly fieldTarget: "impersonation:fieldTarget";
|
|
39
|
+
readonly noResults: "impersonation:noResults";
|
|
40
|
+
readonly openDocument: "impersonation:openDocument";
|
|
41
|
+
readonly openDrawer: "impersonation:openDrawer";
|
|
42
|
+
readonly openWebsite: "impersonation:openWebsite";
|
|
43
|
+
readonly pluginName: "impersonation:pluginName";
|
|
44
|
+
readonly reasonLabel: "impersonation:reasonLabel";
|
|
45
|
+
readonly reasonPlaceholder: "impersonation:reasonPlaceholder";
|
|
46
|
+
readonly returnTo: "impersonation:returnTo";
|
|
47
|
+
readonly searchByName: "impersonation:searchByName";
|
|
48
|
+
readonly sessionActiveOnSite: "impersonation:sessionActiveOnSite";
|
|
49
|
+
readonly sessionEndsAt: "impersonation:sessionEndsAt";
|
|
50
|
+
readonly sessionEndsIn: "impersonation:sessionEndsIn";
|
|
51
|
+
readonly switchToUser: "impersonation:switchToUser";
|
|
52
|
+
};
|
|
53
|
+
type TranslationKey = (typeof keys)[keyof typeof keys];
|
|
54
|
+
//#endregion
|
|
55
|
+
export { TranslationKey, keys };
|
|
56
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region src/translations/keys.ts
|
|
2
|
+
/**
|
|
3
|
+
* Typed translation keys. Lookups must go through these constants, not string
|
|
4
|
+
* literals (enforced by requireI18nKeysTyped.grit). Every key here must have a
|
|
5
|
+
* value in every locale (`en.ts`), or it is a type error.
|
|
6
|
+
*/
|
|
7
|
+
const keys = {
|
|
8
|
+
actingAs: "impersonation:actingAs",
|
|
9
|
+
collectionPlural: "impersonation:collectionPlural",
|
|
10
|
+
collectionSingular: "impersonation:collectionSingular",
|
|
11
|
+
confirm: "impersonation:confirm",
|
|
12
|
+
confirmTitle: "impersonation:confirmTitle",
|
|
13
|
+
collapseBar: "impersonation:collapseBar",
|
|
14
|
+
expandBar: "impersonation:expandBar",
|
|
15
|
+
endSession: "impersonation:endSession",
|
|
16
|
+
endSessionBody: "impersonation:endSessionBody",
|
|
17
|
+
errorAlreadyImpersonating: "impersonation:errorAlreadyImpersonating",
|
|
18
|
+
errorFailed: "impersonation:errorFailed",
|
|
19
|
+
errorForbidden: "impersonation:errorForbidden",
|
|
20
|
+
errorImpersonatorGone: "impersonation:errorImpersonatorGone",
|
|
21
|
+
errorImpersonatorSessionExpired: "impersonation:errorImpersonatorSessionExpired",
|
|
22
|
+
errorInvalidBody: "impersonation:errorInvalidBody",
|
|
23
|
+
errorNotImpersonating: "impersonation:errorNotImpersonating",
|
|
24
|
+
errorOrigin: "impersonation:errorOrigin",
|
|
25
|
+
errorReasonRequired: "impersonation:errorReasonRequired",
|
|
26
|
+
errorSelfTarget: "impersonation:errorSelfTarget",
|
|
27
|
+
errorTargetNotFound: "impersonation:errorTargetNotFound",
|
|
28
|
+
errorTargetTrashed: "impersonation:errorTargetTrashed",
|
|
29
|
+
errorTargetUnverified: "impersonation:errorTargetUnverified",
|
|
30
|
+
errorUnsupportedAuth: "impersonation:errorUnsupportedAuth",
|
|
31
|
+
errorUnsupportedCollection: "impersonation:errorUnsupportedCollection",
|
|
32
|
+
fieldEndedAt: "impersonation:fieldEndedAt",
|
|
33
|
+
fieldEndedBy: "impersonation:fieldEndedBy",
|
|
34
|
+
fieldImpersonator: "impersonation:fieldImpersonator",
|
|
35
|
+
fieldMode: "impersonation:fieldMode",
|
|
36
|
+
fieldReason: "impersonation:fieldReason",
|
|
37
|
+
fieldStartedAt: "impersonation:fieldStartedAt",
|
|
38
|
+
fieldTarget: "impersonation:fieldTarget",
|
|
39
|
+
noResults: "impersonation:noResults",
|
|
40
|
+
openDocument: "impersonation:openDocument",
|
|
41
|
+
openDrawer: "impersonation:openDrawer",
|
|
42
|
+
openWebsite: "impersonation:openWebsite",
|
|
43
|
+
pluginName: "impersonation:pluginName",
|
|
44
|
+
reasonLabel: "impersonation:reasonLabel",
|
|
45
|
+
reasonPlaceholder: "impersonation:reasonPlaceholder",
|
|
46
|
+
returnTo: "impersonation:returnTo",
|
|
47
|
+
searchByName: "impersonation:searchByName",
|
|
48
|
+
sessionActiveOnSite: "impersonation:sessionActiveOnSite",
|
|
49
|
+
sessionEndsAt: "impersonation:sessionEndsAt",
|
|
50
|
+
sessionEndsIn: "impersonation:sessionEndsIn",
|
|
51
|
+
switchToUser: "impersonation:switchToUser"
|
|
52
|
+
};
|
|
53
|
+
//#endregion
|
|
54
|
+
export { keys };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","names":[],"sources":["../../src/translations/keys.ts"],"sourcesContent":["/**\n * Typed translation keys. Lookups must go through these constants, not string\n * literals (enforced by requireI18nKeysTyped.grit). Every key here must have a\n * value in every locale (`en.ts`), or it is a type error.\n */\nexport const keys = {\n\tactingAs: 'impersonation:actingAs',\n\tcollectionPlural: 'impersonation:collectionPlural',\n\tcollectionSingular: 'impersonation:collectionSingular',\n\tconfirm: 'impersonation:confirm',\n\tconfirmTitle: 'impersonation:confirmTitle',\n\tcollapseBar: 'impersonation:collapseBar',\n\texpandBar: 'impersonation:expandBar',\n\tendSession: 'impersonation:endSession',\n\tendSessionBody: 'impersonation:endSessionBody',\n\terrorAlreadyImpersonating: 'impersonation:errorAlreadyImpersonating',\n\terrorFailed: 'impersonation:errorFailed',\n\terrorForbidden: 'impersonation:errorForbidden',\n\terrorImpersonatorGone: 'impersonation:errorImpersonatorGone',\n\terrorImpersonatorSessionExpired: 'impersonation:errorImpersonatorSessionExpired',\n\terrorInvalidBody: 'impersonation:errorInvalidBody',\n\terrorNotImpersonating: 'impersonation:errorNotImpersonating',\n\terrorOrigin: 'impersonation:errorOrigin',\n\terrorReasonRequired: 'impersonation:errorReasonRequired',\n\terrorSelfTarget: 'impersonation:errorSelfTarget',\n\terrorTargetNotFound: 'impersonation:errorTargetNotFound',\n\terrorTargetTrashed: 'impersonation:errorTargetTrashed',\n\terrorTargetUnverified: 'impersonation:errorTargetUnverified',\n\terrorUnsupportedAuth: 'impersonation:errorUnsupportedAuth',\n\terrorUnsupportedCollection: 'impersonation:errorUnsupportedCollection',\n\tfieldEndedAt: 'impersonation:fieldEndedAt',\n\tfieldEndedBy: 'impersonation:fieldEndedBy',\n\tfieldImpersonator: 'impersonation:fieldImpersonator',\n\tfieldMode: 'impersonation:fieldMode',\n\tfieldReason: 'impersonation:fieldReason',\n\tfieldStartedAt: 'impersonation:fieldStartedAt',\n\tfieldTarget: 'impersonation:fieldTarget',\n\tnoResults: 'impersonation:noResults',\n\topenDocument: 'impersonation:openDocument',\n\topenDrawer: 'impersonation:openDrawer',\n\topenWebsite: 'impersonation:openWebsite',\n\tpluginName: 'impersonation:pluginName',\n\treasonLabel: 'impersonation:reasonLabel',\n\treasonPlaceholder: 'impersonation:reasonPlaceholder',\n\treturnTo: 'impersonation:returnTo',\n\tsearchByName: 'impersonation:searchByName',\n\tsessionActiveOnSite: 'impersonation:sessionActiveOnSite',\n\tsessionEndsAt: 'impersonation:sessionEndsAt',\n\tsessionEndsIn: 'impersonation:sessionEndsIn',\n\tswitchToUser: 'impersonation:switchToUser',\n} as const\n\nexport type TranslationKey = (typeof keys)[keyof typeof keys]\n"],"mappings":";;;;;;AAKA,MAAa,OAAO;CACnB,UAAU;CACV,kBAAkB;CAClB,oBAAoB;CACpB,SAAS;CACT,cAAc;CACd,aAAa;CACb,WAAW;CACX,YAAY;CACZ,gBAAgB;CAChB,2BAA2B;CAC3B,aAAa;CACb,gBAAgB;CAChB,uBAAuB;CACvB,iCAAiC;CACjC,kBAAkB;CAClB,uBAAuB;CACvB,aAAa;CACb,qBAAqB;CACrB,iBAAiB;CACjB,qBAAqB;CACrB,oBAAoB;CACpB,uBAAuB;CACvB,sBAAsB;CACtB,4BAA4B;CAC5B,cAAc;CACd,cAAc;CACd,mBAAmB;CACnB,WAAW;CACX,aAAa;CACb,gBAAgB;CAChB,aAAa;CACb,WAAW;CACX,cAAc;CACd,YAAY;CACZ,aAAa;CACb,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,UAAU;CACV,cAAc;CACd,qBAAqB;CACrB,eAAe;CACf,eAAe;CACf,cAAc;AACf"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { keys } from "./keys.js";
|
|
2
|
+
//#region src/translations/ko.ts
|
|
3
|
+
const ko = {
|
|
4
|
+
[keys.actingAs]: "{{name}}(으)로 활동 중",
|
|
5
|
+
[keys.collectionPlural]: "가장 세션",
|
|
6
|
+
[keys.collectionSingular]: "가장 세션",
|
|
7
|
+
[keys.confirm]: "가장하기",
|
|
8
|
+
[keys.confirmTitle]: "이 사용자로 가장할까요?",
|
|
9
|
+
[keys.collapseBar]: "가장 막대 접기",
|
|
10
|
+
[keys.expandBar]: "가장 막대 펼치기",
|
|
11
|
+
[keys.endSession]: "세션 종료",
|
|
12
|
+
[keys.endSessionBody]: "가장을 종료합니다. 대상은 다시 본인으로 로그인됩니다.",
|
|
13
|
+
[keys.errorAlreadyImpersonating]: "이미 가장 중입니다",
|
|
14
|
+
[keys.errorFailed]: "가장에 실패했습니다",
|
|
15
|
+
[keys.errorForbidden]: "허용되지 않습니다",
|
|
16
|
+
[keys.errorImpersonatorGone]: "계정을 더 이상 사용할 수 없습니다",
|
|
17
|
+
[keys.errorImpersonatorSessionExpired]: "원래 세션이 만료되었습니다. 다시 로그인하세요.",
|
|
18
|
+
[keys.errorInvalidBody]: "잘못된 요청",
|
|
19
|
+
[keys.errorNotImpersonating]: "가장 중이 아닙니다",
|
|
20
|
+
[keys.errorOrigin]: "원본 검사에서 거부됨",
|
|
21
|
+
[keys.errorReasonRequired]: "사유가 필요합니다",
|
|
22
|
+
[keys.errorSelfTarget]: "자기 자신을 가장할 수 없습니다",
|
|
23
|
+
[keys.errorTargetNotFound]: "사용자를 찾을 수 없습니다",
|
|
24
|
+
[keys.errorTargetTrashed]: "사용자가 휴지통에 있습니다",
|
|
25
|
+
[keys.errorTargetUnverified]: "사용자가 확인되지 않았습니다",
|
|
26
|
+
[keys.errorUnsupportedAuth]: "이 인증 방식으로는 가장할 수 없습니다",
|
|
27
|
+
[keys.errorUnsupportedCollection]: "이 컬렉션은 가장할 수 없습니다",
|
|
28
|
+
[keys.fieldEndedAt]: "종료",
|
|
29
|
+
[keys.fieldEndedBy]: "종료 방식",
|
|
30
|
+
[keys.fieldImpersonator]: "가장자",
|
|
31
|
+
[keys.fieldMode]: "모드",
|
|
32
|
+
[keys.fieldReason]: "사유",
|
|
33
|
+
[keys.fieldStartedAt]: "시작",
|
|
34
|
+
[keys.fieldTarget]: "대상",
|
|
35
|
+
[keys.noResults]: "일치하는 사용자 없음",
|
|
36
|
+
[keys.openDocument]: "문서 열기",
|
|
37
|
+
[keys.openDrawer]: "드로어에서 열기",
|
|
38
|
+
[keys.openWebsite]: "사이트 열기",
|
|
39
|
+
[keys.pluginName]: "가장",
|
|
40
|
+
[keys.reasonLabel]: "사유",
|
|
41
|
+
[keys.reasonPlaceholder]: "선택 사유",
|
|
42
|
+
[keys.returnTo]: "{{name}}(으)로 돌아가기",
|
|
43
|
+
[keys.searchByName]: "이름으로 검색",
|
|
44
|
+
[keys.sessionActiveOnSite]: "{{name}} 세션이 사이트에서 활성입니다",
|
|
45
|
+
[keys.sessionEndsAt]: "세션 종료 시각 {{time}}",
|
|
46
|
+
[keys.sessionEndsIn]: "{{countdown}} 후 세션 종료",
|
|
47
|
+
[keys.switchToUser]: "가장하기"
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { ko };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=ko.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ko.js","names":[],"sources":["../../src/translations/ko.ts"],"sourcesContent":["import { keys, type TranslationKey } from './keys'\n\nexport const ko: Record<TranslationKey, string> = {\n\t[keys.actingAs]: '{{name}}(으)로 활동 중',\n\t[keys.collectionPlural]: '가장 세션',\n\t[keys.collectionSingular]: '가장 세션',\n\t[keys.confirm]: '가장하기',\n\t[keys.confirmTitle]: '이 사용자로 가장할까요?',\n\t[keys.collapseBar]: '가장 막대 접기',\n\t[keys.expandBar]: '가장 막대 펼치기',\n\t[keys.endSession]: '세션 종료',\n\t[keys.endSessionBody]: '가장을 종료합니다. 대상은 다시 본인으로 로그인됩니다.',\n\t[keys.errorAlreadyImpersonating]: '이미 가장 중입니다',\n\t[keys.errorFailed]: '가장에 실패했습니다',\n\t[keys.errorForbidden]: '허용되지 않습니다',\n\t[keys.errorImpersonatorGone]: '계정을 더 이상 사용할 수 없습니다',\n\t[keys.errorImpersonatorSessionExpired]: '원래 세션이 만료되었습니다. 다시 로그인하세요.',\n\t[keys.errorInvalidBody]: '잘못된 요청',\n\t[keys.errorNotImpersonating]: '가장 중이 아닙니다',\n\t[keys.errorOrigin]: '원본 검사에서 거부됨',\n\t[keys.errorReasonRequired]: '사유가 필요합니다',\n\t[keys.errorSelfTarget]: '자기 자신을 가장할 수 없습니다',\n\t[keys.errorTargetNotFound]: '사용자를 찾을 수 없습니다',\n\t[keys.errorTargetTrashed]: '사용자가 휴지통에 있습니다',\n\t[keys.errorTargetUnverified]: '사용자가 확인되지 않았습니다',\n\t[keys.errorUnsupportedAuth]: '이 인증 방식으로는 가장할 수 없습니다',\n\t[keys.errorUnsupportedCollection]: '이 컬렉션은 가장할 수 없습니다',\n\t[keys.fieldEndedAt]: '종료',\n\t[keys.fieldEndedBy]: '종료 방식',\n\t[keys.fieldImpersonator]: '가장자',\n\t[keys.fieldMode]: '모드',\n\t[keys.fieldReason]: '사유',\n\t[keys.fieldStartedAt]: '시작',\n\t[keys.fieldTarget]: '대상',\n\t[keys.noResults]: '일치하는 사용자 없음',\n\t[keys.openDocument]: '문서 열기',\n\t[keys.openDrawer]: '드로어에서 열기',\n\t[keys.openWebsite]: '사이트 열기',\n\t[keys.pluginName]: '가장',\n\t[keys.reasonLabel]: '사유',\n\t[keys.reasonPlaceholder]: '선택 사유',\n\t[keys.returnTo]: '{{name}}(으)로 돌아가기',\n\t[keys.searchByName]: '이름으로 검색',\n\t[keys.sessionActiveOnSite]: '{{name}} 세션이 사이트에서 활성입니다',\n\t[keys.sessionEndsAt]: '세션 종료 시각 {{time}}',\n\t[keys.sessionEndsIn]: '{{countdown}} 후 세션 종료',\n\t[keys.switchToUser]: '가장하기',\n}\n"],"mappings":";;AAEA,MAAa,KAAqC;EAChD,KAAK,WAAW;EAChB,KAAK,mBAAmB;EACxB,KAAK,qBAAqB;EAC1B,KAAK,UAAU;EACf,KAAK,eAAe;EACpB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,aAAa;EAClB,KAAK,iBAAiB;EACtB,KAAK,4BAA4B;EACjC,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,wBAAwB;EAC7B,KAAK,kCAAkC;EACvC,KAAK,mBAAmB;EACxB,KAAK,wBAAwB;EAC7B,KAAK,cAAc;EACnB,KAAK,sBAAsB;EAC3B,KAAK,kBAAkB;EACvB,KAAK,sBAAsB;EAC3B,KAAK,qBAAqB;EAC1B,KAAK,wBAAwB;EAC7B,KAAK,uBAAuB;EAC5B,KAAK,6BAA6B;EAClC,KAAK,eAAe;EACpB,KAAK,eAAe;EACpB,KAAK,oBAAoB;EACzB,KAAK,YAAY;EACjB,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,eAAe;EACpB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,KAAK,oBAAoB;EACzB,KAAK,WAAW;EAChB,KAAK,eAAe;EACpB,KAAK,sBAAsB;EAC3B,KAAK,gBAAgB;EACrB,KAAK,gBAAgB;EACrB,KAAK,eAAe;AACtB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { translations } from "./index.js";
|
|
2
|
+
//#region src/translations/lookup.ts
|
|
3
|
+
const nestedOf = (locale) => translations[locale];
|
|
4
|
+
/** Resolve a plugin string in `locale`, falling back to English. */
|
|
5
|
+
const messageFor = (locale, key) => {
|
|
6
|
+
const code = (locale ?? "en").split("-")[0] ?? "en";
|
|
7
|
+
const separator = key.indexOf(":");
|
|
8
|
+
const namespace = key.slice(0, separator);
|
|
9
|
+
const rest = key.slice(separator + 1);
|
|
10
|
+
return nestedOf(code)?.[namespace]?.[rest] ?? nestedOf("en")?.[namespace]?.[rest] ?? key;
|
|
11
|
+
};
|
|
12
|
+
/** Replace every `token` without interpreting `$` in `value`. */
|
|
13
|
+
const fillTemplate = (template, token, value) => template.split(token).join(value);
|
|
14
|
+
//#endregion
|
|
15
|
+
export { fillTemplate, messageFor };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.js","names":[],"sources":["../../src/translations/lookup.ts"],"sourcesContent":["import { translations } from './index'\nimport type { TranslationKey } from './keys'\n\nconst nestedOf = (locale: string) => translations[locale as keyof typeof translations]\n\n/** Resolve a plugin string in `locale`, falling back to English. */\nexport const messageFor = (locale: null | string | undefined, key: TranslationKey): string => {\n\tconst code = (locale ?? 'en').split('-')[0] ?? 'en'\n\tconst separator = key.indexOf(':')\n\tconst namespace = key.slice(0, separator)\n\tconst rest = key.slice(separator + 1)\n\treturn nestedOf(code)?.[namespace]?.[rest] ?? nestedOf('en')?.[namespace]?.[rest] ?? key\n}\n\n/** Replace every `token` without interpreting `$` in `value`. */\nexport const fillTemplate = (template: string, token: string, value: string): string =>\n\ttemplate.split(token).join(value)\n"],"mappings":";;AAGA,MAAM,YAAY,WAAmB,aAAa;;AAGlD,MAAa,cAAc,QAAmC,QAAgC;CAC7F,MAAM,QAAQ,UAAU,MAAM,MAAM,GAAG,EAAE,MAAM;CAC/C,MAAM,YAAY,IAAI,QAAQ,GAAG;CACjC,MAAM,YAAY,IAAI,MAAM,GAAG,SAAS;CACxC,MAAM,OAAO,IAAI,MAAM,YAAY,CAAC;CACpC,OAAO,SAAS,IAAI,IAAI,aAAa,SAAS,SAAS,IAAI,IAAI,aAAa,SAAS;AACtF;;AAGA,MAAa,gBAAgB,UAAkB,OAAe,UAC7D,SAAS,MAAM,KAAK,EAAE,KAAK,KAAK"}
|