From 12eed30c08e8fba77e98782bab71839583227a95 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Mon, 15 Nov 2021 08:23:35 +0100 Subject: [PATCH] feat: add it-IT to internationalization (#2439) * login it * deepl translations, corrections * login, en typos * it internal, typo fixes * message texts, optim console texts, guide for internationalization * missing console, fix de, en * Add missing keys from main * translate missing keys * add it to console selection, change it policy descriptors * add missing i18n from jwt idp, fixes * add missing translations * missing translations * fix * auth user language change, interceptor * remove multiline operator Co-authored-by: Livio Amstutz --- console/src/app/app.component.ts | 116 +- .../login-texts/login-texts.component.ts | 2 +- .../message-texts/message-texts.component.ts | 2 +- .../auth-user-detail.component.ts | 121 +- console/src/app/services/grpc-auth.service.ts | 254 ++- console/src/assets/i18n/de.json | 8 +- console/src/assets/i18n/en.json | 17 +- console/src/assets/i18n/it.json | 1546 +++++++++++++++++ docs/docs/guides/customization/texts.md | 16 + internal/notification/static/i18n/it.yaml | 42 + internal/static/i18n/de.yaml | 10 +- internal/static/i18n/en.yaml | 12 +- internal/static/i18n/it.yaml | 836 +++++++++ internal/ui/login/static/i18n/en.yaml | 10 +- internal/ui/login/static/i18n/it.yaml | 365 ++++ 15 files changed, 3082 insertions(+), 275 deletions(-) create mode 100644 console/src/assets/i18n/it.json create mode 100644 internal/notification/static/i18n/it.yaml create mode 100644 internal/static/i18n/it.yaml create mode 100644 internal/ui/login/static/i18n/it.yaml diff --git a/console/src/app/app.component.ts b/console/src/app/app.component.ts index 2784662cd3..b77eda89d6 100644 --- a/console/src/app/app.component.ts +++ b/console/src/app/app.component.ts @@ -21,27 +21,20 @@ import { ManagementService } from './services/mgmt.service'; import { ThemeService } from './services/theme.service'; import { UpdateService } from './services/update.service'; - @Component({ selector: 'cnsl-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], - animations: [ - toolbarAnimation, - ...navAnimations, - accountCard, - routeAnimations, - adminLineAnimation, - ], + animations: [toolbarAnimation, ...navAnimations, accountCard, routeAnimations, adminLineAnimation], }) export class AppComponent implements OnDestroy { @ViewChild('drawer') public drawer!: MatDrawer; @ViewChild('input', { static: false }) input!: ElementRef; - public isHandset$: Observable = this.breakpointObserver - .observe('(max-width: 599px)') - .pipe(map(result => { + public isHandset$: Observable = this.breakpointObserver.observe('(max-width: 599px)').pipe( + map((result) => { return result.matches; - })); + }), + ); @HostBinding('class') public componentCssClass: string = 'dark-theme'; public showAccount: boolean = false; @@ -78,9 +71,18 @@ export class AppComponent implements OnDestroy { private activatedRoute: ActivatedRoute, @Inject(DOCUMENT) private document: Document, ) { - console.log('%cWait!', 'text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; color: #5469D4; font-size: 50px'); - console.log('%cInserting something here could give attackers access to your zitadel account.', 'color: red; font-size: 18px'); - console.log('%cIf you don\'t know exactly what you\'re doing, close the window and stay on the safe side', 'font-size: 16px'); + console.log( + '%cWait!', + 'text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; color: #5469D4; font-size: 50px', + ); + console.log( + '%cInserting something here could give attackers access to your zitadel account.', + 'color: red; font-size: 18px', + ); + console.log( + "%cIf you don't know exactly what you're doing, close the window and stay on the safe side", + 'font-size: 16px', + ); console.log('%cIf you know exactly what you are doing, you should work for us', 'font-size: 16px'); this.setLanguage(); @@ -109,10 +111,7 @@ export class AppComponent implements OnDestroy { this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/lightbulb-off-outline.svg'), ); - this.matIconRegistry.addSvgIcon( - 'mdi_radar', - this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/radar.svg'), - ); + this.matIconRegistry.addSvgIcon('mdi_radar', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/radar.svg')); this.matIconRegistry.addSvgIcon( 'mdi_lock_question', @@ -129,20 +128,14 @@ export class AppComponent implements OnDestroy { this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/lock-reset.svg'), ); - this.matIconRegistry.addSvgIcon( - 'mdi_broom', - this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/broom.svg'), - ); + this.matIconRegistry.addSvgIcon('mdi_broom', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/broom.svg')); this.matIconRegistry.addSvgIcon( 'mdi_pin_outline', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/pin-outline.svg'), ); - this.matIconRegistry.addSvgIcon( - 'mdi_pin', - this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/pin.svg'), - ); + this.matIconRegistry.addSvgIcon('mdi_pin', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/pin.svg')); this.matIconRegistry.addSvgIcon( 'mdi_format-letter-case-lower', @@ -159,54 +152,40 @@ export class AppComponent implements OnDestroy { this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/counter.svg'), ); - this.matIconRegistry.addSvgIcon( - 'mdi_openid', - this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/openid.svg'), - ); + this.matIconRegistry.addSvgIcon('mdi_openid', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/openid.svg')); - this.matIconRegistry.addSvgIcon( - 'mdi_jwt', - this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/jwt.svg'), - ); + this.matIconRegistry.addSvgIcon('mdi_jwt', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/jwt.svg')); - this.matIconRegistry.addSvgIcon( - 'mdi_symbol', - this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/symbol.svg'), - ); + this.matIconRegistry.addSvgIcon('mdi_symbol', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/symbol.svg')); this.matIconRegistry.addSvgIcon( 'mdi_numeric', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/numeric.svg'), ); - this.matIconRegistry.addSvgIcon( - 'mdi_api', - this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/api.svg'), - ); + this.matIconRegistry.addSvgIcon('mdi_api', this.domSanitizer.bypassSecurityTrustResourceUrl('assets/mdi/api.svg')); - this.activatedRoute.queryParams - .pipe(takeUntil(this.destroy$)) - .subscribe(route => { - const { org } = route; - if (org) { - this.authService.getActiveOrg(org).then(queriedOrg => { - this.org = queriedOrg; - }); - } - }); + this.activatedRoute.queryParams.pipe(takeUntil(this.destroy$)).subscribe((route) => { + const { org } = route; + if (org) { + this.authService.getActiveOrg(org).then((queriedOrg) => { + this.org = queriedOrg; + }); + } + }); this.loadPrivateLabelling(); this.getProjectCount(); - this.authService.activeOrgChanged.pipe(takeUntil(this.destroy$)).subscribe(org => { + this.authService.activeOrgChanged.pipe(takeUntil(this.destroy$)).subscribe((org) => { this.org = org; this.getProjectCount(); }); this.authenticationService.authenticationChanged.pipe(takeUntil(this.destroy$)).subscribe((authenticated) => { if (authenticated) { - this.authService.getActiveOrg().then(org => { + this.authService.getActiveOrg().then((org) => { this.org = org; }); } @@ -219,17 +198,15 @@ export class AppComponent implements OnDestroy { } this.isDarkTheme = this.themeService.isDarkTheme; - this.isDarkTheme.subscribe(dark => this.onSetTheme(dark ? 'dark-theme' : 'light-theme')); + this.isDarkTheme.subscribe((dark) => this.onSetTheme(dark ? 'dark-theme' : 'light-theme')); this.translate.onLangChange.subscribe((language: LangChangeEvent) => { this.document.documentElement.lang = language.lang; this.language = language.lang; }); - this.filterControl.valueChanges.pipe(debounceTime(300)).subscribe(value => { - this.loadOrgs( - value.trim().toLowerCase(), - ); + this.filterControl.valueChanges.pipe(debounceTime(300)).subscribe((value) => { + this.loadOrgs(value.trim().toLowerCase()); }); this.hideAdminWarn = localStorage.getItem('hideAdministratorWarning') === 'true' ? true : false; @@ -270,7 +247,7 @@ export class AppComponent implements OnDestroy { setDefaultColors(); - this.mgmtService.getLabelPolicy().then(labelpolicy => { + this.mgmtService.getLabelPolicy().then((labelpolicy) => { if (labelpolicy.policy) { this.labelpolicy = labelpolicy.policy; @@ -296,8 +273,7 @@ export class AppComponent implements OnDestroy { } public loadPolicies(): void { - this.mgmtService.getPrivacyPolicy().then(privacypolicy => { - + this.mgmtService.getPrivacyPolicy().then((privacypolicy) => { if (privacypolicy.policy) { this.privacyPolicy = privacypolicy.policy; } @@ -316,7 +292,7 @@ export class AppComponent implements OnDestroy { this.orgLoading$.next(true); this.orgs$ = from(this.authService.listMyProjectOrgs(10, 0, query ? [query] : undefined)).pipe( - map(resp => { + map((resp) => { return resp.resultList.sort((left, right) => left.name.localeCompare(right.name)); }), catchError(() => of([])), @@ -347,16 +323,15 @@ export class AppComponent implements OnDestroy { this.translate.addLangs(['en', 'de']); this.translate.setDefaultLang('en'); - this.authService.user.subscribe(userprofile => { + this.authService.user.subscribe((userprofile) => { if (userprofile) { // this.user = userprofile; const cropped = navigator.language.split('-')[0] ?? 'en'; - const fallbackLang = cropped.match(/en|de/) ? cropped : 'en'; + const fallbackLang = cropped.match(/en|de|it/) ? cropped : 'en'; - const lang = - userprofile?.human?.profile?.preferredLanguage.match(/en|de/) ? - userprofile.human.profile?.preferredLanguage : - fallbackLang; + const lang = userprofile?.human?.profile?.preferredLanguage.match(/en|de|it/) + ? userprofile.human.profile?.preferredLanguage + : fallbackLang; this.translate.use(lang); this.language = lang; this.document.documentElement.lang = lang; @@ -388,4 +363,3 @@ export class AppComponent implements OnDestroy { }, 0); } } - diff --git a/console/src/app/modules/policies/login-texts/login-texts.component.ts b/console/src/app/modules/policies/login-texts/login-texts.component.ts index 8252b23e0b..c67a10c14b 100644 --- a/console/src/app/modules/policies/login-texts/login-texts.component.ts +++ b/console/src/app/modules/policies/login-texts/login-texts.component.ts @@ -107,7 +107,7 @@ export class LoginTextsComponent implements OnDestroy { public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; public KeyNamesArray: string[] = KeyNamesArray; - public LOCALES: string[] = ['en']; + public LOCALES: string[] = ['en', 'de', 'it']; private sub: Subscription = new Subscription(); diff --git a/console/src/app/modules/policies/message-texts/message-texts.component.ts b/console/src/app/modules/policies/message-texts/message-texts.component.ts index f990b76937..4395e5d5f4 100644 --- a/console/src/app/modules/policies/message-texts/message-texts.component.ts +++ b/console/src/app/modules/policies/message-texts/message-texts.component.ts @@ -383,7 +383,7 @@ export class MessageTextsComponent implements OnDestroy { }; public locale: string = 'en'; - public LOCALES: string[] = ['en']; + public LOCALES: string[] = ['en', 'de', 'it']; private sub: Subscription = new Subscription(); public currentPolicy: GridPolicy = MESSAGE_TEXTS_POLICY; diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.ts b/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.ts index 614e495ec1..e6af4abbda 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.ts +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.ts @@ -18,7 +18,7 @@ import { EditDialogComponent, EditDialogType } from './edit-dialog/edit-dialog.c export class AuthUserDetailComponent implements OnDestroy { public user!: User.AsObject; public genders: Gender[] = [Gender.GENDER_MALE, Gender.GENDER_FEMALE, Gender.GENDER_DIVERSE]; - public languages: string[] = ['de', 'en']; + public languages: string[] = ['de', 'en', 'it']; private subscription: Subscription = new Subscription(); @@ -39,19 +39,26 @@ export class AuthUserDetailComponent implements OnDestroy { ) { this.loading = true; this.refreshUser(); + + this.userService.getSupportedLanguages().then((lang) => { + this.languages = lang.languagesList; + }); } refreshUser(): void { this.refreshChanges$.emit(); - this.userService.getMyUser().then(resp => { - if (resp.user) { - this.user = resp.user; - } - this.loading = false; - }).catch(error => { - this.toast.showError(error); - this.loading = false; - }); + this.userService + .getMyUser() + .then((resp) => { + if (resp.user) { + this.user = resp.user; + } + this.loading = false; + }) + .catch((error) => { + this.toast.showError(error); + this.loading = false; + }); } public ngOnDestroy(): void { @@ -71,13 +78,15 @@ export class AuthUserDetailComponent implements OnDestroy { width: '400px', }); - dialogRefPhone.afterClosed().subscribe(resp => { + dialogRefPhone.afterClosed().subscribe((resp) => { if (resp && resp !== this.user.userName) { - this.userService.updateMyUserName(resp).then(() => { + this.userService + .updateMyUserName(resp) + .then(() => { this.toast.showInfo('USER.TOAST.USERNAMECHANGED', true); this.refreshUser(); }) - .catch(error => { + .catch((error) => { this.toast.showError(error); }); } @@ -101,7 +110,7 @@ export class AuthUserDetailComponent implements OnDestroy { this.toast.showInfo('USER.TOAST.SAVED', true); this.refreshChanges$.emit(); }) - .catch(error => { + .catch((error) => { this.toast.showError(error); }); } @@ -109,7 +118,8 @@ export class AuthUserDetailComponent implements OnDestroy { public saveEmail(email: string): void { this.userService - .setMyEmail(email).then(() => { + .setMyEmail(email) + .then(() => { this.toast.showInfo('USER.TOAST.EMAILSAVED', true); if (this.user.human) { const mailToSet = new Email(); @@ -117,18 +127,22 @@ export class AuthUserDetailComponent implements OnDestroy { this.user.human.email = mailToSet.toObject(); this.refreshUser(); } - }).catch(error => { + }) + .catch((error) => { this.toast.showError(error); }); } public enteredPhoneCode(code: string): void { - this.userService.verifyMyPhone(code).then(() => { - this.toast.showInfo('USER.TOAST.PHONESAVED', true); - this.refreshUser(); - }).catch(error => { - this.toast.showError(error); - }); + this.userService + .verifyMyPhone(code) + .then(() => { + this.toast.showInfo('USER.TOAST.PHONESAVED', true); + this.refreshUser(); + }) + .catch((error) => { + this.toast.showError(error); + }); } public changedLanguage(language: string): void { @@ -136,40 +150,50 @@ export class AuthUserDetailComponent implements OnDestroy { } public resendPhoneVerification(): void { - this.userService.resendMyPhoneVerification().then(() => { - this.toast.showInfo('USER.TOAST.PHONEVERIFICATIONSENT', true); - this.refreshChanges$.emit(); - }).catch(error => { - this.toast.showError(error); - }); + this.userService + .resendMyPhoneVerification() + .then(() => { + this.toast.showInfo('USER.TOAST.PHONEVERIFICATIONSENT', true); + this.refreshChanges$.emit(); + }) + .catch((error) => { + this.toast.showError(error); + }); } public resendEmailVerification(): void { - this.userService.resendMyEmailVerification().then(() => { - this.toast.showInfo('USER.TOAST.EMAILVERIFICATIONSENT', true); - this.refreshChanges$.emit(); - }).catch(error => { - this.toast.showError(error); - }); + this.userService + .resendMyEmailVerification() + .then(() => { + this.toast.showInfo('USER.TOAST.EMAILVERIFICATIONSENT', true); + this.refreshChanges$.emit(); + }) + .catch((error) => { + this.toast.showError(error); + }); } public deletePhone(): void { - this.userService.removeMyPhone().then(() => { - this.toast.showInfo('USER.TOAST.PHONEREMOVED', true); - if (this.user.human?.phone) { - const phone = new Phone(); - this.user.human.phone = phone.toObject(); - this.refreshUser(); - } - }).catch(error => { - this.toast.showError(error); - }); + this.userService + .removeMyPhone() + .then(() => { + this.toast.showInfo('USER.TOAST.PHONEREMOVED', true); + if (this.user.human?.phone) { + const phone = new Phone(); + this.user.human.phone = phone.toObject(); + this.refreshUser(); + } + }) + .catch((error) => { + this.toast.showError(error); + }); } public savePhone(phone: string): void { if (this.user.human) { this.userService - .setMyPhone(phone).then(() => { + .setMyPhone(phone) + .then(() => { this.toast.showInfo('USER.TOAST.PHONESAVED', true); if (this.user.human) { const phoneToSet = new Phone(); @@ -177,7 +201,8 @@ export class AuthUserDetailComponent implements OnDestroy { this.user.human.phone = phoneToSet.toObject(); this.refreshUser(); } - }).catch(error => { + }) + .catch((error) => { this.toast.showError(error); }); } @@ -199,7 +224,7 @@ export class AuthUserDetailComponent implements OnDestroy { width: '400px', }); - dialogRefPhone.afterClosed().subscribe(resp => { + dialogRefPhone.afterClosed().subscribe((resp) => { if (resp) { this.savePhone(resp); } @@ -219,7 +244,7 @@ export class AuthUserDetailComponent implements OnDestroy { width: '400px', }); - dialogRefEmail.afterClosed().subscribe(resp => { + dialogRefEmail.afterClosed().subscribe((resp) => { if (resp) { this.saveEmail(resp); } diff --git a/console/src/app/services/grpc-auth.service.ts b/console/src/app/services/grpc-auth.service.ts index 223bc9ef08..a5694c5102 100644 --- a/console/src/app/services/grpc-auth.service.ts +++ b/console/src/app/services/grpc-auth.service.ts @@ -22,6 +22,8 @@ import { GetMyProfileResponse, GetMyUserRequest, GetMyUserResponse, + GetSupportedLanguagesRequest, + GetSupportedLanguagesResponse, ListMyAuthFactorsRequest, ListMyAuthFactorsResponse, ListMyLinkedIDPsRequest, @@ -86,8 +88,6 @@ import { Gender, MembershipQuery, User, WebAuthNVerification } from '../proto/ge import { GrpcService } from './grpc.service'; import { StorageKey, StorageLocation, StorageService } from './storage.service'; - - @Injectable({ providedIn: 'root', }) @@ -108,26 +108,26 @@ export class GrpcAuthService { private storage: StorageService, ) { this.user = merge( - of(this.oauthService.getAccessToken()).pipe( - filter(token => token ? true : false), - ), + of(this.oauthService.getAccessToken()).pipe(filter((token) => (token ? true : false))), this.oauthService.events.pipe( - filter(e => e.type === 'token_received'), + filter((e) => e.type === 'token_received'), timeout(this.oauthService.waitForTokenInMsec || 0), - catchError(_ => of(null)), // timeout is not an error - map(_ => this.oauthService.getAccessToken()), + catchError((_) => of(null)), // timeout is not an error + map((_) => this.oauthService.getAccessToken()), ), ).pipe( take(1), mergeMap(() => { - return from(this.getMyUser().then(resp => { - const user = resp.user; - if (user) { - return user; - } else { - return undefined; - } - })); + return from( + this.getMyUser().then((resp) => { + const user = resp.user; + if (user) { + return user; + } else { + return undefined; + } + }), + ); }), finalize(() => { this.loadPermissions(); @@ -143,7 +143,7 @@ export class GrpcAuthService { public async getActiveOrg(id?: string): Promise { if (id) { - const find = this.cachedOrgs.find(tmp => tmp.id === id); + const find = this.cachedOrgs.find((tmp) => tmp.id === id); if (find) { this.setActiveOrg(find); return Promise.resolve(find); @@ -151,7 +151,7 @@ export class GrpcAuthService { const orgs = (await this.listMyProjectOrgs(10, 0)).resultList; this.cachedOrgs = orgs; - const toFind = this.cachedOrgs.find(tmp => tmp.id === id); + const toFind = this.cachedOrgs.find((tmp) => tmp.id === id); if (toFind) { this.setActiveOrg(toFind); return Promise.resolve(toFind); @@ -167,7 +167,7 @@ export class GrpcAuthService { } const org = this.storage.getItem(StorageKey.organization, StorageLocation.local); - if (org && orgs.find(tmp => tmp.id === org.id)) { + if (org && orgs.find((tmp) => tmp.id === org.id)) { this.storage.setItem(StorageKey.organization, org, StorageLocation.session); return org; } @@ -175,7 +175,7 @@ export class GrpcAuthService { if (orgs.length === 0) { return Promise.reject(new Error('No organizations found!')); } - const orgToSet = orgs.find(element => element.id !== '0' && element.name !== ''); + const orgToSet = orgs.find((element) => element.id !== '0' && element.name !== ''); if (orgToSet) { this.setActiveOrg(orgToSet); @@ -197,31 +197,35 @@ export class GrpcAuthService { } private loadPermissions(): void { - from(this.listMyZitadelPermissions()).pipe( - map(rolesResp => rolesResp.resultList), - catchError(_ => { - return of([]); - }), - finalize(() => { - this.fetchedZitadelPermissions.next(true); - }), - ).subscribe(roles => { - this.zitadelPermissions.next(roles); - }); + from(this.listMyZitadelPermissions()) + .pipe( + map((rolesResp) => rolesResp.resultList), + catchError((_) => { + return of([]); + }), + finalize(() => { + this.fetchedZitadelPermissions.next(true); + }), + ) + .subscribe((roles) => { + this.zitadelPermissions.next(roles); + }); } private loadFeatures(): void { - from(this.listMyZitadelFeatures()).pipe( - map(featuresResp => featuresResp.resultList), - catchError(_ => { - return of([]); - }), - finalize(() => { - this.fetchedZitadelFeatures.next(true); - }), - ).subscribe(features => { - this.zitadelFeatures.next(features); - }); + from(this.listMyZitadelFeatures()) + .pipe( + map((featuresResp) => featuresResp.resultList), + catchError((_) => { + return of([]); + }), + finalize(() => { + this.fetchedZitadelFeatures.next(true); + }), + ) + .subscribe((features) => { + this.zitadelFeatures.next(features); + }); } /** @@ -230,7 +234,7 @@ export class GrpcAuthService { */ public isAllowed(roles: string[] | RegExp[]): Observable { if (roles && roles.length > 0) { - return this.zitadelPermissions.pipe(switchMap(zroles => of(this.hasRoles(zroles, roles)))); + return this.zitadelPermissions.pipe(switchMap((zroles) => of(this.hasRoles(zroles, roles)))); } else { return of(false); } @@ -242,11 +246,15 @@ export class GrpcAuthService { * @param requestedRoles required roles for accessing the respective component */ public hasRoles(userRoles: string[], requestedRoles: string[] | RegExp[]): boolean { - return requestedRoles.findIndex((regexp: any) => { - return userRoles.findIndex(role => { - return new RegExp(regexp).test(role); - }) > -1; - }) > -1; + return ( + requestedRoles.findIndex((regexp: any) => { + return ( + userRoles.findIndex((role) => { + return new RegExp(regexp).test(role); + }) > -1 + ); + }) > -1 + ); } /** @@ -255,7 +263,7 @@ export class GrpcAuthService { */ public canUseFeature(features: string[] | RegExp[]): Observable { if (features && features.length > 0) { - return this.zitadelFeatures.pipe(switchMap(zFeatures => of(this.hasFeature(zFeatures, features)))); + return this.zitadelFeatures.pipe(switchMap((zFeatures) => of(this.hasFeature(zFeatures, features)))); } else { return of(false); } @@ -267,33 +275,33 @@ export class GrpcAuthService { * @param requestedFeature required features for accessing the respective component */ public hasFeature(userFeatures: string[], requestedFeatures: string[] | RegExp[]): boolean { - return requestedFeatures.findIndex((regexp: any) => { - return userFeatures.findIndex(feature => { - return new RegExp(regexp).test(feature); - }) > -1; - }) > -1; + return ( + requestedFeatures.findIndex((regexp: any) => { + return ( + userFeatures.findIndex((feature) => { + return new RegExp(regexp).test(feature); + }) > -1 + ); + }) > -1 + ); } public getMyProfile(): Promise { - return this.grpcService.auth.getMyProfile(new GetMyProfileRequest(), null).then(resp => resp.toObject()); + return this.grpcService.auth.getMyProfile(new GetMyProfileRequest(), null).then((resp) => resp.toObject()); } public getMyPasswordComplexityPolicy(): Promise { - return this.grpcService.auth.getMyPasswordComplexityPolicy( - new GetMyPasswordComplexityPolicyRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth + .getMyPasswordComplexityPolicy(new GetMyPasswordComplexityPolicyRequest(), null) + .then((resp) => resp.toObject()); } public getMyUser(): Promise { - return this.grpcService.auth.getMyUser( - new GetMyUserRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.getMyUser(new GetMyUserRequest(), null).then((resp) => resp.toObject()); } public listMyMultiFactors(): Promise { - return this.grpcService.auth.listMyAuthFactors( - new ListMyAuthFactorsRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.listMyAuthFactors(new ListMyAuthFactorsRequest(), null).then((resp) => resp.toObject()); } public listMyProjectOrgs( @@ -313,7 +321,7 @@ export class GrpcAuthService { req.setQueriesList(queryList); } - return this.grpcService.auth.listMyProjectOrgs(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.listMyProjectOrgs(req, null).then((resp) => resp.toObject()); } public updateMyProfile( @@ -343,7 +351,7 @@ export class GrpcAuthService { if (preferredLanguage) { req.setPreferredLanguage(preferredLanguage); } - return this.grpcService.auth.updateMyProfile(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.updateMyProfile(req, null).then((resp) => resp.toObject()); } public get zitadelPermissionsChanged(): Observable { @@ -352,11 +360,14 @@ export class GrpcAuthService { public listMyUserSessions(): Promise { const req = new ListMyUserSessionsRequest(); - return this.grpcService.auth.listMyUserSessions(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.listMyUserSessions(req, null).then((resp) => resp.toObject()); } - public listMyUserGrants(limit?: number, offset?: number, queryList?: ListQuery[]): - Promise { + public listMyUserGrants( + limit?: number, + offset?: number, + queryList?: ListQuery[], + ): Promise { const req = new ListMyUserGrantsRequest(); const query = new ListQuery(); if (limit) { @@ -366,10 +377,12 @@ export class GrpcAuthService { query.setOffset(offset); } req.setQuery(query); - return this.grpcService.auth.listMyUserGrants(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.listMyUserGrants(req, null).then((resp) => resp.toObject()); } - public listMyMemberships(limit: number, offset: number, + public listMyMemberships( + limit: number, + offset: number, queryList?: MembershipQuery[], ): Promise { const req = new ListMyMembershipsRequest(); @@ -384,92 +397,87 @@ export class GrpcAuthService { req.setQueriesList(queryList); } req.setQuery(metadata); - return this.grpcService.auth.listMyMemberships(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.listMyMemberships(req, null).then((resp) => resp.toObject()); } public getMyEmail(): Promise { const req = new GetMyEmailRequest(); - return this.grpcService.auth.getMyEmail(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.getMyEmail(req, null).then((resp) => resp.toObject()); } public setMyEmail(email: string): Promise { const req = new SetMyEmailRequest(); req.setEmail(email); - return this.grpcService.auth.setMyEmail(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.setMyEmail(req, null).then((resp) => resp.toObject()); } public resendMyEmailVerification(): Promise { const req = new ResendMyEmailVerificationRequest(); - return this.grpcService.auth.resendMyEmailVerification(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.resendMyEmailVerification(req, null).then((resp) => resp.toObject()); + } + + public getSupportedLanguages(): Promise { + const req = new GetSupportedLanguagesRequest(); + return this.grpcService.auth.getSupportedLanguages(req, null).then((resp) => resp.toObject()); } public removeMyPhone(): Promise { - return this.grpcService.auth.removeMyPhone( - new RemoveMyPhoneRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.removeMyPhone(new RemoveMyPhoneRequest(), null).then((resp) => resp.toObject()); } public updateMyUserName(username: string): Promise { const req = new UpdateMyUserNameRequest(); req.setUserName(username); - return this.grpcService.auth.updateMyUserName(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.updateMyUserName(req, null).then((resp) => resp.toObject()); } public listMyZitadelPermissions(): Promise { - return this.grpcService.auth.listMyZitadelPermissions( - new ListMyZitadelPermissionsRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth + .listMyZitadelPermissions(new ListMyZitadelPermissionsRequest(), null) + .then((resp) => resp.toObject()); } public listMyZitadelFeatures(): Promise { - return this.grpcService.auth.listMyZitadelFeatures( - new ListMyZitadelFeaturesRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth + .listMyZitadelFeatures(new ListMyZitadelFeaturesRequest(), null) + .then((resp) => resp.toObject()); } public getMyPhone(): Promise { - return this.grpcService.auth.getMyPhone( - new GetMyPhoneRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.getMyPhone(new GetMyPhoneRequest(), null).then((resp) => resp.toObject()); } public setMyPhone(phone: string): Promise { const req = new SetMyPhoneRequest(); req.setPhone(phone); - return this.grpcService.auth.setMyPhone(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.setMyPhone(req, null).then((resp) => resp.toObject()); } public resendMyPhoneVerification(): Promise { const req = new ResendMyPhoneVerificationRequest(); - return this.grpcService.auth.resendMyPhoneVerification(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.resendMyPhoneVerification(req, null).then((resp) => resp.toObject()); } public updateMyPassword(oldPassword: string, newPassword: string): Promise { const req = new UpdateMyPasswordRequest(); req.setOldPassword(oldPassword); req.setNewPassword(newPassword); - return this.grpcService.auth.updateMyPassword(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.updateMyPassword(req, null).then((resp) => resp.toObject()); } - public removeMyLinkedIDP( - idpId: string, - linkedUserId: string, - ): Promise { + public removeMyLinkedIDP(idpId: string, linkedUserId: string): Promise { const req = new RemoveMyLinkedIDPRequest(); req.setLinkedUserId(linkedUserId); req.setIdpId(idpId); - return this.grpcService.auth.removeMyLinkedIDP(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.removeMyLinkedIDP(req, null).then((resp) => resp.toObject()); } public removeMyAvatar(): Promise { const req = new RemoveMyAvatarRequest(); - return this.grpcService.auth.removeMyAvatar(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.removeMyAvatar(req, null).then((resp) => resp.toObject()); } - public listMyLinkedIDPs( - limit: number, - offset: number, - ): Promise { + public listMyLinkedIDPs(limit: number, offset: number): Promise { const req = new ListMyLinkedIDPsRequest(); const metadata = new ListQuery(); if (limit) { @@ -479,25 +487,21 @@ export class GrpcAuthService { metadata.setOffset(offset); } req.setQuery(metadata); - return this.grpcService.auth.listMyLinkedIDPs(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.listMyLinkedIDPs(req, null).then((resp) => resp.toObject()); } public addMyMultiFactorOTP(): Promise { - return this.grpcService.auth.addMyAuthFactorOTP( - new AddMyAuthFactorOTPRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.addMyAuthFactorOTP(new AddMyAuthFactorOTPRequest(), null).then((resp) => resp.toObject()); } public addMyMultiFactorU2F(): Promise { - return this.grpcService.auth.addMyAuthFactorU2F( - new AddMyAuthFactorU2FRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.addMyAuthFactorU2F(new AddMyAuthFactorU2FRequest(), null).then((resp) => resp.toObject()); } public removeMyMultiFactorU2F(tokenId: string): Promise { const req = new RemoveMyAuthFactorU2FRequest(); req.setTokenId(tokenId); - return this.grpcService.auth.removeMyAuthFactorU2F(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.removeMyAuthFactorU2F(req, null).then((resp) => resp.toObject()); } public verifyMyMultiFactorU2F(credential: string, tokenname: string): Promise { @@ -507,25 +511,21 @@ export class GrpcAuthService { verification.setTokenName(tokenname); req.setVerification(verification); - return this.grpcService.auth.verifyMyAuthFactorU2F(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.verifyMyAuthFactorU2F(req, null).then((resp) => resp.toObject()); } public listMyPasswordless(): Promise { - return this.grpcService.auth.listMyPasswordless( - new ListMyPasswordlessRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.listMyPasswordless(new ListMyPasswordlessRequest(), null).then((resp) => resp.toObject()); } public addMyPasswordless(): Promise { - return this.grpcService.auth.addMyPasswordless( - new AddMyPasswordlessRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.addMyPasswordless(new AddMyPasswordlessRequest(), null).then((resp) => resp.toObject()); } public removeMyPasswordless(tokenId: string): Promise { const req = new RemoveMyPasswordlessRequest(); req.setTokenId(tokenId); - return this.grpcService.auth.removeMyPasswordless(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.removeMyPasswordless(req, null).then((resp) => resp.toObject()); } public verifyMyPasswordless(credential: string, tokenname: string): Promise { @@ -535,37 +535,35 @@ export class GrpcAuthService { verification.setPublicKeyCredential(credential); req.setVerification(verification); - return this.grpcService.auth.verifyMyPasswordless( - req, null, - ).then(resp => resp.toObject()); + return this.grpcService.auth.verifyMyPasswordless(req, null).then((resp) => resp.toObject()); } public sendMyPasswordlessLink(): Promise { const req = new SendMyPasswordlessLinkRequest(); - return this.grpcService.auth.sendMyPasswordlessLink(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.sendMyPasswordlessLink(req, null).then((resp) => resp.toObject()); } public addMyPasswordlessLink(): Promise { const req = new AddMyPasswordlessLinkRequest(); - return this.grpcService.auth.addMyPasswordlessLink(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.addMyPasswordlessLink(req, null).then((resp) => resp.toObject()); } public removeMyMultiFactorOTP(): Promise { - return this.grpcService.auth.removeMyAuthFactorOTP( - new RemoveMyAuthFactorOTPRequest(), null, - ).then(resp => resp.toObject()); + return this.grpcService.auth + .removeMyAuthFactorOTP(new RemoveMyAuthFactorOTPRequest(), null) + .then((resp) => resp.toObject()); } public verifyMyMultiFactorOTP(code: string): Promise { const req = new VerifyMyAuthFactorOTPRequest(); req.setCode(code); - return this.grpcService.auth.verifyMyAuthFactorOTP(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.verifyMyAuthFactorOTP(req, null).then((resp) => resp.toObject()); } public verifyMyPhone(code: string): Promise { const req = new VerifyMyPhoneRequest(); req.setCode(code); - return this.grpcService.auth.verifyMyPhone(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.verifyMyPhone(req, null).then((resp) => resp.toObject()); } public listMyUserChanges(limit: number, sequence: number): Promise { @@ -579,6 +577,6 @@ export class GrpcAuthService { query.setSequence(sequence); } req.setQuery(query); - return this.grpcService.auth.listMyUserChanges(req, null).then(resp => resp.toObject()); + return this.grpcService.auth.listMyUserChanges(req, null).then((resp) => resp.toObject()); } } diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index e2f0da9c34..794688d416 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -754,7 +754,9 @@ }, "PRIVATELABELING_POLICY": { "TITLE": "Private Labeling", - "DESCRIPTION": "Definiere das Erscheinungsbild des Logins." + "BTN":"Datei auswählen", + "DESCRIPTION": "Definiere das Erscheinungsbild des Logins.", + "ACTIVATEPREVIEW":"Preview aktivieren" }, "LOGIN_POLICY": { "TITLE": "Login Richtlinien", @@ -1300,6 +1302,7 @@ } }, "NEXTSTEPS": { + "TITLE": "Nächste Schritte", "0": { "TITLE": "Rollen festlegen", "DESC": "Erfassen Sie Rollen für ihr Projekt" @@ -1388,7 +1391,7 @@ "TOKENTYPE": "Auth Token Typ", "TOKENTYPE0": "Bearer Token", "TOKENTYPE1": "JWT", - "UNSECUREREDIRECT": "Ich hoffe, Du weisst, was Du tust.", + "UNSECUREREDIRECT": "Wir hoffen, Du weisst, was Du tust.", "OVERVIEWSECTION": "Übersicht", "OVERVIEWTITLE": "Deine Konfiguration ist bereit. Du kannst sie hier nochmals prüfen.", "ACCESSTOKENROLEASSERTION": "Benutzerrollen dem Access Token hinzufügen", @@ -1480,6 +1483,7 @@ }, "LANGUAGES": { "de": "Deutsch", + "it": "Italienisch", "en": "Englisch" }, "MEMBER": { diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 8441568d5c..f135593c20 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -35,7 +35,7 @@ "SECURITYANDPRIVACY_DESC": "Manage Your Information and Security Settings", "SECURITYANDPRIVACY_BUTTON": "Personalise Information and Security", "CHANGE_PWD": "Change Password", - "PROTECTION": "Organisational Policies", + "PROTECTION": "Organizational Policies", "PROTECTION_DESC": "Manage your organisational guidelines. Explore some pre-packaged solutions that save you time and ensure security.", "PROTECTION_BUTTON": "Explore", "PROJECTS": "Create and Manage Your Applications and Projects", @@ -301,8 +301,8 @@ "EXTERNALIDP": { "TITLE": "External Identity Providers", "DESC": "", - "IDPCONFIGID": "Idp Config ID", - "IDPNAME": "Idp Name", + "IDPCONFIGID": "IDP Config ID", + "IDPNAME": "IDP Name", "USERDISPLAYNAME": "External Name", "EXTERNALUSERID": "External User ID", "DIALOG": { @@ -331,7 +331,7 @@ "STATE2": "Inactive", "STATE3": "Deleted", "STATE4": "Locked", - "STATE5": "Supend", + "STATE5": "Suspended", "STATE6": "Initial" }, "PROFILE": { @@ -356,7 +356,7 @@ "CURRENT":"Current Picture", "PREVIEW":"Preview", "DELETESUCCESS":"Deleted successfully!", - "CROPPERERROR":"An error while uploading your file failed. Try a different format and size if necessary." + "CROPPERERROR":"An error while uploading your file occurred. Try a different format and size if necessary." } }, "MACHINE": { @@ -595,7 +595,7 @@ "VERIFICATION_VALIDATION_ONGOING": "A verification token has already been requested. Click on the button to trigger a verification check.", "VERIFICATION_VALIDATION_ONGOING_TYPE": "Type of the token:", "VERIFICATION_SUCCESSFUL": "Domain successfully verified!", - "REQUESTNEWTOKEN": "Request new Token", + "REQUESTNEWTOKEN": "Request new token", "TYPES": { "1": "HTTP", "2": "DNS" @@ -659,7 +659,7 @@ "POSTAL_CODE": "Postal Code", "COUNTRY": "Country", "TITLE": "Zitadel Tier", - "DESCRIPTION": "Zitadel works with Stripe to simplify invoicing. The following link redirects to Stripe.com.", + "DESCRIPTION": "Zitadel works with Stripe to simplify invoicing. The following link redirects to stripe.com.", "QUESTIONS": "For questions regarding payments contact our support ", "BTN": "Change Tier" }, @@ -716,7 +716,7 @@ "BTN":"Select File", "ACTIVATEPREVIEW":"Apply configuration", "DARK":"Dark Mode", - "LIGHT":"Lighg Mode", + "LIGHT":"Light Mode", "CHANGEVIEW":"Change View", "ACTIVATED":"Policy changes are now LIVE", "THEME":"Theme", @@ -1483,6 +1483,7 @@ }, "LANGUAGES": { "de": "German", + "it": "Italian", "en": "English" }, "MEMBER": { diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json new file mode 100644 index 0000000000..3c8c941d1f --- /dev/null +++ b/console/src/assets/i18n/it.json @@ -0,0 +1,1546 @@ +{ + "APP_NAME": "ZITADEL", + "PAGINATOR": { + "PREVIOUS": "Precedente", + "NEXT": "Avanti", + "COUNT": "Risultati totali" + }, + "ONBOARDING": { + "HEADER": "Primi passi", + "TITLE": "Imparare ad usare ZITADEL", + "LOGINDESC": "\u00c8 necessario effettuare il login per controllare le impostazioni di ZITADEL.", + "LOGIN": "Accedi", + "DESCRIPTION": "Noi di ZITADEL teniamo molto alla sicurezza e alle prestazioni. Eseguite i seguenti passi e adattate ZITADEL in modo ottimale alle vostre esigenze.", + "STEPS_TITLE": "Completa i seguenti passi nell'ordine che vuoi:", + "STEPS": { + "1": { + "TITLE": "Creare un progetto", + "DESC": "Crea il tuo primo progetto e definisci i diritti di accesso per tutti i dipendenti." + }, + "2": { + "TITLE": "Creare un'applicazione", + "DESC": "Crea un'applicazione per il tuo progetto e definisci le sue propriet\u00e0." + }, + "3": { + "TITLE": "Migliorare la sicurezza", + "DESC": "Estendete le politiche di accesso e aumentate la sicurezza dei vostri utenti." + } + }, + "START": "Inizia", + "DOCS": "Docs" + }, + "HOME": { + "TITLE": "ZITADEL", + "SECURITYANDPRIVACY": "Protezione dei dati e personalizzazione", + "SECURITYANDPRIVACY_DESC": "Gestisci le tue informazioni e le impostazioni di sicurezza", + "SECURITYANDPRIVACY_BUTTON": "Personalizza", + "CHANGE_PWD": "Ripristina password", + "PROTECTION": "Impostazioni organizzative", + "PROTECTION_DESC": "Gestisci le tue impostazioni organizzative. Esplora soluzioni che ti fanno risparmiare tempo e garantiscono la sicurezza.", + "PROTECTION_BUTTON": "Esplora", + "PROJECTS": "Crea e gestisci le tue applicazioni e progetti", + "PROJECTS_DESC": "Autorizza altri ad usare i tuoi progetti o a definire ruoli personalizzati.", + "PROJECTS_BUTTON": "Panoramica del progetto", + "PROJECTS_NEW_LINK": "Crea un nuovo progetto", + "ORG_POLICY_COMPLEXITY": "Impostazioni complessit\u00e0 password", + "ORG_POLICY_IAM": "Impostazioni Org IAM", + "ORG_POLICY_LOGIN": "Impostazioni di accesso", + "ORG_POLICY_LABEL": "Impostazioni Private Labelling", + "IAM_CREATE_ORG": "Crea un'organizzazione", + "IAM_POLICY_COMPLEXITY": "Impostazioni complessit\u00e0 password di sistema", + "IAM_POLICY_IAM": "Impostazioni di sistema", + "IAM_POLICY_LOGIN": "Impostazioni di accesso di sistema", + "IAM_POLICY_LABEL": "Impostazioni Private Labelling di sistema", + "USERS": "Crea e gestisci i tuoi utenti", + "USERS_DESC": "Controlla il tuo concetto di ruolo in tempo reale. Prendere azioni immediate.", + "USERS_HUMANS": "Mostra gli utenti umani", + "USERS_MACHINES": "Mostra gli utenti di servizio", + "USERS_CREATE": "Crea utente", + "USERS_BUTTON": "Mostra utenti", + "IAM": "Identity and Access Management", + "IAM_DESC": "Gestisci le tue organizzazioni e i tuoi amministratori.", + "IAM_BUTTON": "Gestire ZITADEL", + "WELCOME": "Iniziare con ZITADEL", + "WELCOMESENTENCE": "Qui puoi trovare le azioni raccomandate in base alle tue ultime autorizzazioni acquisite.", + "DISCLAIMER": "Puoi vedere solo le impostazioni della tua attuale organizzazione specificata nel navbar. ZITADEL tratta i tuoi dati in modo confidenziale e sicuro.", + "DISCLAIMERLINK": "Ulteriori informazioni", + "QUICKSTARTS": { + "LABEL": "Primi passi", + "TITLE": "Quickstarts", + "DESCRIPTION": "Iniziare rapidamente con ZITADEL." + } + }, + "MENU": { + "DASHBOARD": "Panoramica", + "PERSONAL_INFO": "Informazioni personali", + "DOCUMENTATION": "Documentazione", + "IAMPOLICIES": "IAM", + "IAMEVENTSTORE": "Storage", + "ORGANIZATION": "Organizzazione", + "ADMINSECTION": "Amministrazione di ZITADEL", + "ORGSECTION": "Organizzazione", + "PROJECTSSECTION": "Sezione Progetti", + "PROJECT": "Progetti", + "GRANTEDPROJECT": "Progetti concessi", + "USERSECTION": "Sezione utente", + "HUMANUSERS": "Utenti", + "MACHINEUSERS": "Utenti di servizio", + "LOGOUT": "Esci con tutti gli utenti", + "NEWORG": "Nuova organizzazione", + "IAMADMIN": "Sei un amministratore IAM. Nota che hai autorizzazioni estese.", + "SHOWORGS": "Mostra tutte le organizzazioni", + "GRANTSECTION": "Sezione di autorizzazione", + "GRANTS": "Autorizzazioni", + "PRIVACY": "Informativa sulla privacy", + "TOS": "Termini di servizio", + "TOOLTIP": { + "PERSONAL": "Mostra il tuo account personale, i tuoi IDP, i metodi di accesso e le autorizzazioni.", + "IAMPOLICIES": "Gestisci le impostazioni globali di accesso e modifica i manager di ZITADEL", + "IAMEVENTSTORE": "Ripristina views ed eventi falliti di ZITADEL", + "ORG": "Mostra le impostazioni di accesso delle tue organizzazioni e gestisci i tuoi nomi di dominio", + "SELFPROJECTS": "Mostra i progetti della tua organizzazione", + "GRANTEDPROJECTS": "Mostra i progetti a cui la tua organizzazione ha accesso", + "HUMANUSERS": "Mostra tutti gli utenti umani registrati nella tua organizzazione", + "MACHINEUSERS": "Mostra tutti gli utenti di servizio della tua organizzazione", + "AUTHZ": "Mostra le autorizzazioni disponibili per gli utenti della tua organizzazione" + } + }, + "ACTIONS": { + "ACTIONS": "Azioni", + "RENAME": "Rinomina", + "SET": "Salva", + "COPY": "Copia negli appunti", + "COPIED": "Copiato negli appunti.", + "RESETDEFAULT": "Ripristino delle impostazioni predefinite", + "RESETTO": "Resettare a:", + "RESETCURRENT": "Ripristina", + "SHOW": "Mostra", + "HIDE": "Nascondi", + "SAVE": "Salva", + "SAVENOW": "Salva ora", + "NEW": "Nuovo", + "ADD": "Aggiungi", + "CREATE": "Crea", + "CONTINUE": "Continua", + "BACK": "Indietro", + "CLOSE": "chiudi", + "CLEAR": "Chiaro", + "CANCEL": "cancella", + "INFO": "Info", + "OK": "OK", + "VIEW": "Mostra", + "SELECTIONDELETE": "Elimina selezione", + "DELETE": "Elimina", + "REMOVE": "Rimuovi", + "VERIFY": "Verifica", + "FINISH": "Crea", + "CHANGE": "Cambia", + "REACTIVATE": "Riattiva", + "DEACTIVATE": "Disattiva", + "REFRESH": "Aggiorna", + "LOGIN": "Accedi", + "EDIT": "Modifica", + "PIN": "Pin / Unpin", + "CONFIGURE": "Configurare", + "SEND": "Invia", + "NEWVALUE": "Nuovo valore", + "RESTORE": "Ripristina", + "CONTINUEWITHOUTSAVE": "Continua senza salvare", + "GOTOFEATURES": "Vai alle caratteristiche" + }, + "RESOURCEID": "Resource ID", + "TABLE": { + "NOROWS": "Nessun dato" + }, + "ERRORS": { + "REQUIRED": "Mancano alcuni campi obbligatori.", + "TOKENINVALID": { + "TITLE": "Il tuo Access Token \u00e8 scaduto.", + "DESCRIPTION": "Clicca il pulsante per richiedere una nuova sessione." + } + }, + "USER": { + "TITLE": "Informazioni personali", + "DESCRIPTION": "Gestisci le tue informazioni e le impostazioni di sicurezza.", + "PAGES": { + "LIST": "Utenti", + "TITLE": "Utente", + "DESCRIPTION": "Crea nuovi utenti nella tua organizzazione e gestisci quelli esistenti.", + "LISTMACHINE": "Utenti di servizio", + "DESCRIPTIONMACHINE": "Creare e gestire gli utenti di servizio della tua organizzazione", + "DETAIL": "Dettagli", + "CREATE": "Crea", + "MY": "Le mie informazioni", + "LOGINNAMES": "Loginnames", + "LOGINNAMESDESC": "Questi sono i nomi di accesso:", + "NOUSER": "Nessun utente associato.", + "REACTIVATE": "Riattiva", + "DEACTIVATE": "Disattiva", + "FILTER": "Filtro", + "STATE": "Stato", + "DELETE": "Elimina utente", + "UNLOCK": "Sblocca utente", + "LOCKEDDESCRIPTION": "Questo utente \u00e8 stato bloccato a causa del superamento dei tentativi massimi di accesso e deve essere sbloccato per essere utilizzato di nuovo." + }, + "DETAILS": { + "DATECREATED": "Creato", + "DATECHANGED": "Cambiato" + }, + "DIALOG": { + "DELETE_TITLE": "Elimina utente", + "DELETE_DESCRIPTION": "Stai per eliminare definitivamente un utente. Sei sicuro?" + }, + "SENDEMAILDIALOG": { + "TITLE": "Invia una notifica via e-mail", + "DESCRIPTION": "Clicca il pulsante qui sotto per inviare una notifica all'indirizzo email corrente o cambiare l'indirizzo email nel campo.", + "NEWEMAIL": "Nuovo indirizzo e-mail" + }, + "TABLE": { + "DEACTIVATE": "Disattiva", + "ACTIVATE": "Attiva", + "FILTER": { + "0": "Filtro per DisplayName", + "1": "Filtro per nome utente", + "2": "filtro per DisplayName", + "3": "filtro per nome utente", + "4": "filtro per email", + "5": "filtro per DisplayName", + "10": "filtro per il nome organizzazione", + "12": "filtro per il nome progetto" + }, + "EMPTY": "Nessuna voce" + }, + "PASSWORDLESS": { + "SEND": "Invia il link di registrazione", + "TABLETYPE": "Tipo", + "TABLESTATE": "Stato", + "NAME": "Nome", + "TABLEACTIONS": "Azioni", + "TITLE": "Autenticazione passwordless", + "DESCRIPTION": "Aggiungi i metodi di autenticazione basati su WebAuthn per accedere a ZITADEL senza password.", + "MANAGE_DESCRIPTION": "Gestisci i metodi del secondo fattore dei vostri utenti.", + "U2F": "Aggiungi autenticatore", + "U2F_DIALOG_TITLE": "Verifica autenticatore", + "U2F_DIALOG_DESCRIPTION": "Inserisci un nome per il tuo authenticatore o dispositivo usato.", + "U2F_SUCCESS": "Autorizzazione passwordless creata con successo!", + "U2F_ERROR": "Si \u00e8 verificato un errore durante la configurazione di U2F!", + "U2F_NAME": "Nome dell'autenticatore", + "TYPE": { + "0": "Nessun MFA definito", + "1": "OTP", + "2": "U2F" + }, + "STATE": { + "0": "Nessuno Stato", + "1": "Non pronto", + "2": "Pronto", + "3": "Cancellato" + }, + "DIALOG": { + "DELETE_TITLE": "Rimuovere l'autenticazione passwordless", + "DELETE_DESCRIPTION": "Stai per rimuovere un metodo di autenticazione passwordless. Sei sicuro?", + "ADD_TITLE": "Autenticazione passwordless", + "ADD_DESCRIPTION": "Seleziona una delle opzioni disponibili per creare un metodo di autenticazione passwordless.", + "SEND_DESCRIPTION": "Inviati un link di registrazione al tuo indirizzo e-mail.", + "SEND": "Invia il link di registrazione", + "SENT": "L'e-mail \u00e8 stata consegnata con successo. Controlla la tua casella di posta per continuare con la configurazione.", + "QRCODE_DESCRIPTION": "Genera un codice QR per la scansione con un altro dispositivo.", + "QRCODE": "Genera un codice QR", + "QRCODE_SCAN": "Scannerizza questo codice QR per continuare la configurazione sul tuo dispositivo.", + "NEW_DESCRIPTION": "Usa questo dispositivo per impostare Passwordless.", + "NEW": "Aggiungi nuovo" + } + }, + "METADATA": { + "TITLE": "Metadati", + "DESCRIPTION": "", + "KEY": "Chiave", + "VALUE": "Valore", + "ADD": "Nuova voce", + "SAVE": "Salva", + "EMPTY": "Nessun metadato", + "SETSUCCESS": "Salvato con successo", + "REMOVESUCCESS": "Rimosso con successo" + }, + "MFA": { + "TABLETYPE": "Tipo", + "TABLESTATE": "Stato", + "NAME": "Nome", + "TABLEACTIONS": "Azioni", + "TITLE": "Autenticazione a pi\u00f9 fattori", + "DESCRIPTION": "Aggiungi un secondo fattore per garantire la sicurezza ottimale del tuo account.", + "MANAGE_DESCRIPTION": "Gestite i metodi del secondo fattore dei vostri utenti.", + "ADD": "Aggiungi fattore", + "OTP": "OTP (One-Time Password)", + "OTP_DIALOG_TITLE": "Aggiungi OTP", + "OTP_DIALOG_DESCRIPTION": "Scansiona il codice QR con un'app di autenticazione e inserisci il codice nel campo sottostante per verificare e attivare il metodo OTP.", + "U2F": "U2F (Universal 2nd Factor)", + "U2F_DIALOG_TITLE": "Verifica U2F", + "U2F_DIALOG_DESCRIPTION": "Inserisci un nome per il tuo methodo o dispositivo.", + "U2F_SUCCESS": "U2F creato con successo!", + "U2F_ERROR": "Si \u00e8 verificato un errore durante la configurazione di U2F!", + "U2F_NAME": "Nome U2F", + "TYPE": { + "0": "Nessun altro fattore definito", + "1": "OTP", + "2": "U2F" + }, + "STATE": { + "0": "Nessuno Stato", + "1": "Non pronto", + "2": "Pronto", + "3": "Cancellato" + }, + "DIALOG": { + "MFA_DELETE_TITLE": "Rimuovi metodo a due fattori", + "MFA_DELETE_DESCRIPTION": "Stai per rimuovere un metodo a due fattori. Sei sicuro?", + "ADD_MFA_TITLE": "Aggiungere un metodo a due fattori?", + "ADD_MFA_DESCRIPTION": "Selezionare una delle seguenti opzioni." + } + }, + "EXTERNALIDP": { + "TITLE": "IDP esterno", + "DESC": "", + "IDPCONFIGID": "IDP Config ID", + "IDPNAME": "Nome Idp", + "USERDISPLAYNAME": "Nome esterno", + "EXTERNALUSERID": "ID utente esterno", + "DIALOG": { + "DELETE_TITLE": "Rimuovere l'IDP", + "DELETE_DESCRIPTION": "Stai per eliminare un Identity Provider da un utente. Vuoi continuare?" + } + }, + "CREATE": { + "TITLE": "Crea un nuovo utente", + "DESCRIPTION": "Si prega di fornirsi delle informazioni necessarie.", + "NAMEANDEMAILSECTION": "Nome ed e-mail", + "GENDERLANGSECTION": "Genere e linguaggio", + "PHONESECTION": "Phonenumbers", + "PASSWORDSECTION": "Password iniziale", + "ADDRESSANDPHONESECTION": "Numero di telefono" + }, + "CODEDIALOG": { + "TITLE": "Verificare il numero di telefono", + "DESCRIPTION": "Inserisci il codice che hai ricevuto via SMS per verificare il tuo numero di telefono.", + "CODE": "Codice" + }, + "DATA": { + "STATE": "Stato", + "STATE0": "Sconosciuto", + "STATE1": "Attivo", + "STATE2": "Inattivo", + "STATE3": "Cancellato", + "STATE4": "Bloccato", + "STATE5": "sospeso", + "STATE6": "Iniziale" + }, + "PROFILE": { + "TITLE": "Profilo", + "EMAIL": "E-mail", + "PHONE": "Numero di telefono", + "USERNAME": "Nome utente", + "CHANGEUSERNAME": "cambia", + "CHANGEUSERNAME_TITLE": "Cambia nome utente", + "CHANGEUSERNAME_DESC": "Inserisci il tuo nome desiderato nel campo.", + "FIRSTNAME": "Nome", + "LASTNAME": "Cognome", + "NICKNAME": "Soprannome", + "DISPLAYNAME": "DisplayName", + "PREFERRED_LANGUAGE": "Lingua", + "GENDER": "Genere", + "PASSWORD": "Password", + "AVATAR": { + "UPLOADTITLE": "Carica la tua immagine del profilo", + "UPLOADBTN": "Scegli tra i file", + "UPLOAD": "Carica", + "CURRENT": "Immagine attuale", + "PREVIEW": "Anteprima", + "DELETESUCCESS": "Rimosso con successo!", + "CROPPERERROR": "È successo un errore durante il caricamento del tuo file. Prova un formato e una dimensione diversi, se necessario." + } + }, + "MACHINE": { + "TITLE": "Dettagli dell'utente del servizio", + "USERNAME": "Nome utente", + "NAME": "Nome", + "DESCRIPTION": "Descrizione", + "KEYSTITLE": "Chiavi", + "KEYSDESC": "Definisci le tue chiavi e aggiungi una data di scadenza opzionale.", + "ID": "ID chiave", + "TYPE": "Tipo", + "EXPIRATIONDATE": "Data di scadenza", + "CHOOSEDATEAFTER": "Inserisci una scadenza valida", + "CHOOSEEXPIRY": "Seleziona una data di scadenza", + "CREATIONDATE": "Data di creazione", + "KEYDETAILS": "Dettagli chiave", + "ADD": { + "TITLE": "Aggiungi chiave", + "DESCRIPTION": "Seleziona il tuo tipo di chiave e scegli una data di scadenza opzionale." + }, + "ADDED": { + "TITLE": "La chiave \u00e8 stata creata", + "DESCRIPTION": "Scarica la chiave perch\u00e9 non sar\u00e0 pi\u00f9 visibile dopo aver chiuso questa finestra di dialogo!" + }, + "KEYTYPES": { + "1": "JSON" + } + }, + "PASSWORD": { + "TITLE": "Password", + "DESCRIPTION": "Inserisci la nuova password secondo i requisiti.", + "OLD": "Password attuale", + "NEW": "Nuova password", + "CONFIRM": "Conferma la nuova password", + "RESET": "Ripristina la password attuale", + "SET": "Imposta nuova password", + "RESENDNOTIFICATION": "Reinvia il link per la reimpostazione della password", + "REQUIRED": "Mancano alcuni campi obbligatori.", + "MINLENGTHERROR": "La password deve essere lunga almeno {{valore}} caratteri.", + "NOTEQUAL": "Le password fornite non corrispondono." + }, + "EMAIL": "E-mail", + "PHONE": "Numero di telefono", + "PHONEEMPTY": "Nessun numero di telefono definito", + "PHONEVERIFIED": "Numero di telefono verificato.", + "EMAILVERIFIED": "Email verificata", + "NOTVERIFIED": "non verificato", + "PREFERRED_LOGINNAME": "Loginname preferito", + "LOGINMETHODS": { + "TITLE": "Informazioni di contatto", + "DESCRIPTION": "Le informazioni fornite sono utilizzate per inviare informazioni importanti, come le e-mail di reset della password.", + "EMAIL": { + "TITLE": "E-mail", + "VALID": "convalidato", + "RESEND": "Invia di nuovo l'e-mail di verifica", + "EDITTITLE": "Cambiare l'e-mail", + "EDITDESC": "Inserisci la nuova email nel campo sottostante." + }, + "PHONE": { + "TITLE": "Telefono", + "VALID": "convalidato", + "RESEND": "Reinvia il messaggio per la verifica", + "EDITTITLE": "Cambia il numero di telefono", + "EDITDESC": "Inserisci il nuovo numero di telefono nel campo sottostante.", + "DELETETITLE": "Rimuovi il numero di telefono", + "DELETEDESC": "Vuoi davvero rimuovere il numero di telefono" + }, + "RESENDCODE": "Reinvia il codice", + "ENTERCODE": "Verifica", + "ENTERCODE_DESC": "Verifica il codice" + }, + "GRANTS": { + "TITLE": "User Grants", + "DESCRIPTION": "Concedere a questo utente l'accesso a certi progetti", + "CREATE": { + "TITLE": "Crea User Grant", + "DESCRIPTION": "Cerca l'organizzazione, il progetto e i ruoli di progetto corrispondenti." + }, + "FILTER": { + "0": "filtro per utente", + "1": "filtro per il dominio", + "2": "filtro per projectname", + "3": "filtro per rolename" + } + }, + "VALIDATION": { + "INVALIDPATTERN": "La password non soddisfa le regole definite.", + "NOTANEMAIL": "Il valore dato non \u00e8 un indirizzo e-mail", + "REQUIRED": "Il campo di input \u00e8 vuoto.", + "MINLENGTH": "La password deve essere lunga almeno {{requiredLength}} caratteri.", + "NOEMAIL": "Il nome utente non pu\u00f2 essere un indirizzo e-mail.", + "UPPERCASEMISSING": "La password deve includere un carattere maiuscolo.", + "LOWERCASEMISSING": "La password deve includere un carattere minuscolo.", + "SYMBOLERROR": "La password deve includere un simbolo o un segno di punteggiatura.", + "NUMBERERROR": "La password deve includere una cifra." + }, + "STATE": { + "0": "Sconosciuto", + "1": "Attivo", + "2": "Scaduto", + "4": "Bloccato" + }, + "SEARCH": { + "FOUND": "Trovato" + }, + "TARGET": { + "SELF": "Se vuoi concedere l'accesso a un utente di un'altra organizzazione", + "EXTERNAL": "Per concedere l'accesso a un utente della tua organizzazione", + "CLICKHERE": "clicca qui" + }, + "SIGNEDOUT": "Ti sei disconnesso. Clicca sul pulsante \"Accedi\" per accedere di nuovo.", + "SIGNEDOUT_BTN": "Accedi", + "EDITACCOUNT": "Modifica account", + "ADDACCOUNT": "Accedi con un altro account", + "RESENDINITIALEMAIL": "Invia una nuova mail di inizializzazione", + "RESENDEMAILNOTIFICATION": "Invia di nuovo la notifica via e-mail", + "TOAST": { + "CREATED": "Utente creato con successo.", + "SAVED": "Profilo salvato con successo.", + "USERNAMECHANGED": "Nome utente cambiato con successo.", + "EMAILSAVED": "E-mail salvata con successo.", + "INITEMAILSENT": "Email di inizializzazione inviata.", + "PHONESAVED": "Telefono salvato con successo.", + "PHONEREMOVED": "Il telefono \u00e8 stato rimosso.", + "PHONEVERIFIED": "Telefono verificato con successo.", + "PHONEVERIFICATIONSENT": "Codice di verifica telefonica inviato.", + "EMAILVERIFICATIONSENT": "Codice di verifica e-mail inviato.", + "OTPREMOVED": "OTP rimosso.", + "U2FREMOVED": "U2F rimosso.", + "PASSWORDLESSREMOVED": "Rimosso senza password.", + "INITIALPASSWORDSET": "Password iniziale impostata.", + "PASSWORDNOTIFICATIONSENT": "Notifica di cambio password inviata.", + "PASSWORDCHANGED": "Password cambiata con successo.", + "REACTIVATED": "Utente riattivato.", + "DEACTIVATED": "Utente disattivato.", + "SELECTEDREACTIVATED": "Utenti selezionati riattivati.", + "SELECTEDDEACTIVATED": "Utenti selezionati disattivati.", + "SELECTEDKEYSDELETED": "Tasti selezionati cancellati.", + "KEYADDED": "Chiave aggiunta!", + "MACHINEADDED": "Utente di servizio creato!", + "DELETED": "Utente cancellato con successo!", + "UNLOCKED": "Utente sbloccato con successo!", + "PASSWORDLESSREGISTRATIONSENT": "Link per la registrazione inviato con successo." + }, + "MEMBERSHIPS": { + "TITLE": "Memberships di ZITADEL", + "DESCRIPTION": "Questi sono tutti i member grant dell'utente. Puoi modificarli anche nelle pagine di dettaglio dell'organizzazione, del progetto o di sistema.", + "ORGCONTEXT": "Vedi tutti i progetti che sono collegati all'organizzazione attualmente selezionata.", + "USERCONTEXT": "Vedi tutte le organizzazioni e i progetti a cui sei autorizzato. Comprese le altre organizzazioni.", + "CREATIONDATE": "Data di creazione", + "CHANGEDATE": "Ultima modifica", + "DISPLAYNAME": "DisplayName", + "REMOVE": "Rimuovi", + "TYPE": "Tipo", + "TYPES": { + "UNKNOWN": "Sconosciuto", + "ORG": "Organizzazione", + "PROJECT": "Progetto", + "GRANTEDPROJECT": "Progetto concesso" + } + } + }, + "IAM": { + "POLICIES": { + "TITLE": "Impostazioni IAM e impostazioni di accesso", + "DESCRIPTION": "Gestisci le tue impostazioni ZITADEL e le impostazioni di accesso alla gestione." + }, + "EVENTSTORE": { + "TITLE": "IAM Eventstore", + "DESCRIPTION": "Gestisci i view di ZITADEL e gli eventi falliti." + }, + "MEMBER": { + "TITLE": "Manager", + "DESCRIPTION": "I manager possono aggiungere e modificare le organizzazioni e apportare modifiche ai loro progetti e applicazioni corrispondenti." + }, + "VIEWS": { + "TITLE": "Views", + "DESCRIPTION": "Questa carta mostra i tuoi view ZITADEL.", + "VIEWNAME": "Nome", + "DATABASE": "Database", + "SEQUENCE": "Sequenza", + "EVENTTIMESTAMP": "Timestamp", + "LASTSPOOL": "ultimo Pool", + "ACTIONS": "Azioni", + "CLEAR": "ripristina", + "CLEARED": "View ripristinato con successo!", + "DIALOG": { + "VIEW_CLEAR_TITLE": "Ripristina View", + "VIEW_CLEAR_DESCRIPTION": "Stai per ripristinare un view. La cancellazione o ripristinazione di un view crea un processo durante il quale i dati potrebbero non essere disponibili per gli utenti. Sei davvero sicuro?" + } + }, + "FAILEDEVENTS": { + "TITLE": "Eventi falliti", + "DESCRIPTION": "Questa tabella mostra gli eventi di ZITADEL falliti.", + "VIEWNAME": "Nome", + "DATABASE": "Database", + "FAILEDSEQUENCE": "Sequenza fallita", + "FAILURECOUNT": "Conteggio dei fallimenti", + "ERRORMESSAGE": "Messaggio di errore", + "ACTIONS": "Azioni", + "DELETE": "Rimuovi", + "DELETESUCCESS": "Eventi falliti rimossi." + }, + "TOAST": { + "MEMBERREMOVED": "Manager rimosso.", + "MEMBERSADDED": "I manager sono stati aggiunti con successo.", + "MEMBERADDED": "Il manager è stato aggiunto con successo.", + "MEMBERCHANGED": "Manager cambiato.", + "ROLEREMOVED": "Ruolo rimosso.", + "ROLECHANGED": "Ruolo cambiato.", + "REACTIVATED": "Riattivato", + "DEACTIVATED": "Disattivato" + } + }, + "ORG": { + "PAGES": { + "NAME": "Nome", + "ID": "ID", + "CREATIONDATE": "Data di creazione", + "FILTER": "Filtro", + "FILTERPLACEHOLDER": "Filtro per il nome", + "LIST": "Organizzazioni", + "LISTDESCRIPTION": "Scegli un'organizzazione.", + "ACTIVE": "Attivo", + "CREATE": "Creare un'organizzazione", + "ORGDETAIL_TITLE": "Inserisci il nome e il dominio della tua nuova organizzazione.", + "ORGDETAIL_TITLE_WITHOUT_DOMAIN": "Inserisci il nome della tua nuova organizzazione.", + "ORGDETAILUSER_TITLE": "Configurare il proprietario dell'organizzazione", + "ORGDOMAIN": { + "TITLE": "Verifica della propriet\u00e0 del dominio dell'organizzazione", + "VERIFICATION": "Verifica la propriet\u00e0 del tuo dominio. \u00c8 necessario scaricare un file di verifica e caricarlo all'URL fornito elencato di seguito, o inserire una voce DNS TXT Record per l'URL fornito. Per completare, clicca sul pulsante di verifica.", + "VERIFICATION_SKIP": "Puoi saltare la verifica per ora e continuare a creare la tua organizzazione, ma per usare la tua organizzazione questo passo deve essere completato!", + "VERIFICATION_VALIDATION_DESC": "I token sono controllati regolarmente per assicurarsi che tu sia ancora proprietario del dominio.", + "VERIFICATION_NEWTOKEN_TITLE": "Richiesta di un nuovo token", + "VERIFICATION_NEWTOKEN_DESC": "Se vuoi richiedere un nuovo token, seleziona il tuo metodo preferito. Se vuoi convalidare un token persistente, clicca sul pulsante qui sopra.", + "VERIFICATION_VALIDATION_ONGOING": "\u00c8 gi\u00e0 stato richiesto un token di verifica. Clicca sul pulsante per richiedere un altro controllo di verifica.", + "VERIFICATION_VALIDATION_ONGOING_TYPE": "Tipo di token:", + "VERIFICATION_SUCCESSFUL": "Dominio verificato con successo!", + "REQUESTNEWTOKEN": "Richiedi un nuovo token", + "TYPES": { + "1": "HTTP", + "2": "DNS" + } + }, + "DOWNLOAD_FILE": "Scaricare il file", + "SELECTORGTOOLTIP": "Seleziona questa organizzazione.", + "PRIMARYDOMAIN": "Dominio primario", + "STATE": "Stato", + "USEPASSWORD": "Imposta la password iniziale" + }, + "DOMAINS": { + "NEW": "Aggiungi dominio", + "TITLE": "Domini", + "DESCRIPTION": "Configura i tuoi domini. Questo dominio pu\u00f2 essere utilizzato per accedere con i tuoi utenti.", + "SETPRIMARY": "Impostato come primario", + "DELETE": { + "TITLE": "Cancellare il dominio", + "DESCRIPTION": "Stai per eliminare uno dei tuoi domini. Nota che i tuoi utenti non possono pi\u00f9 usare questo dominio per il loro login." + }, + "ADD": { + "TITLE": "Aggiungi dominio", + "DESCRIPTION": "Stai per aggiungere un dominio per la tua organizzazione. Dopo che il processo ha avuto successo, i tuoi utenti saranno in grado di utilizzare il dominio per il loro login." + } + }, + "STATE": { + "0": "Non definito", + "1": "Attivo", + "2": "Disattivato" + }, + "MEMBER": { + "TITLE": "Responsabili dell'organizzazione", + "DESCRIPTION": "Definisci gli utenti che possono cambiare le preferenze delle tue organizzazioni." + }, + "TOAST": { + "DEACTIVATED": "Organizzazione disattivata.", + "REACTIVATED": "Organizzazione riattivata.", + "DOMAINADDED": "Aggiunto dominio.", + "DOMAINREMOVED": "Dominio rimosso.", + "MEMBERADDED": "Manager aggiunto con successo", + "MEMBERREMOVED": "Manager rimosso con successo", + "MEMBERCHANGED": "Manager cambiato con successo", + "SETPRIMARY": "Dominio primario cambiato con successo" + } + }, + "FEATURES": { + "TITLE": "Features", + "DESCRIPTION": "Qui puoi vedere le tue features in base al tuo Tier ZITADEL.", + "BTN-EDIT": "Visualizza features", + "AVAILABLE": "sbloccato", + "UNAVAILABLE": "bloccato", + "TIER": { + "NAME": "Nome del Tier ZITADEL", + "DETAILS": "Dettagli di fatturazione", + "DETAILS_DESC": "Inserisci qui i tuoi dati di fatturazione.", + "CUSTOMERINVALID": "I dati di fatturazione non sono completi!", + "CONTACT": "Contatta", + "COMPANY": "Azienda", + "ADDRESS": "Indirizzo", + "CITY": "Citt\u00e0", + "POSTAL_CODE": "Codice postale", + "COUNTRY": "Paese", + "TITLE": "Tier Zitadel", + "DESCRIPTION": "Zitadel lavora con Stripe per semplificare la fatturazione. Il seguente link reindirizza a stripe.com.", + "QUESTIONS": "Per domande contatta il nostro supporto", + "BTN": "Cambia Tier" + }, + "HEADERS": { + "LOGINPOLICY": "Impostazioni di accesso", + "PASSWORD": "Password", + "LABELPOLICY": "Privatelabelling", + "DOMAIN": "Dominio dell'organizzazione", + "TEXTSANDLINKS": "Testi e link", + "METADATA": "Metadati" + }, + "DATA": { + "AUDITLOGRETENTION": "Ritenzione Audit Log", + "LOGINPOLICYUSERNAMELOGIN": "Permettere l'accesso con il nome utente", + "LOGINPOLICYPASSWORDRESET": "Nascondi il link per resettare la password", + "LOGINPOLICYREGISTRATION": "Permettere l'auto-registrazione", + "LOGINPOLICYIDP": "Identity Providers", + "LOGINPOLICYFACTORS": "Multifattori", + "LOGINPOLICYPASSWORDLESS": "Autenticazione passwordless", + "LOGINPOLICYCOMPLEXITYPOLICY": "Impostazioni di complessit\u00e0 delle password", + "LOCKOUTPOLICY": "Impostazioni di blocco", + "LABELPOLICYPRIVATELABEL": "Colori, logo, icona, aspetto del testo", + "LABELPOLICYWATERMARK": "Rimuovi la filigrana ZITADEL", + "CUSTOMDOMAIN": "Verifica del dominio dell'organizzazione", + "CUSTOMTEXTLOGIN": "Testi dell'interfaccia login", + "CUSTOMTEXTMESSAGE": "Testi email personalizzati", + "PRIVACYPOLICY": "Link personalizzati all'informativa sulla privacy e ai TOS", + "METADATAUSER": "Metadati utente" + }, + "TIERSTATES": { + "0": "Attivo", + "1": "Azione richiesta", + "2": "Cancellato", + "3": "Grandfathered" + }, + "NOTAVAILABLE": "La feature {{value}} manca nella tua organizzazione.", + "RETENTIONDAYS": "Giorni" + }, + "POLICY": { + "TITLE": "Esplora le impostazioni", + "DESCRIPTION": "Impostazioni che migliorano la tua sicurezza.", + "PWD_COMPLEXITY": { + "TITLE": "Complessit\u00e0 della password", + "DESCRIPTION": "Assicura che tutte le password impostate corrispondano a un modello specifico", + "SYMBOLANDNUMBERERROR": "La password deve essere composta da una cifra e un simbolo/segno di interpunzione.", + "SYMBOLERROR": "La password deve includere un simbolo/segno di punteggiatura.", + "NUMBERERROR": "La password deve includere una cifra.", + "PATTERNERROR": "La password non corrisponde al modello richiesto." + }, + "PRIVATELABELING": { + "TITLE": "Private Labelling", + "DESCRIPTION": "Dai al login il tuo stile personalizzato e modifica il suo comportamento.", + "PREVIEW_DESCRIPTION": "Le impostazioni saranno automaticamente disponibili al preview environment.", + "BTN": "Seleziona File", + "ACTIVATEPREVIEW": "Applica la configurazione", + "DARK": "Modo scuro", + "LIGHT": "Modo Light", + "CHANGEVIEW": "Cambia view", + "ACTIVATED": "Le impostazioni sono ora LIVE", + "THEME": "Tema", + "COLORS": "Colori", + "FONT": "Font", + "ADVANCEDBEHAVIOR": "Comportamento avanzato", + "DROP": "Rilascia qui l'immagine o", + "RELEASE": "Rilascia", + "DROPFONT": "Rilascia qui il file di font", + "RELEASEFONT": "Rilascia", + "USEOFLOGO": "Il tuo logo sar\u00e0 usato nel login e nelle email, mentre l'icona \u00e8 usata per gli elementi pi\u00f9 piccoli dell'interfaccia, come il selettore di organizzazione nella console.", + "MAXSIZE": "La dimensione massima \u00e8 limitata a 524kB", + "EMAILNOSVG": "Il formato di file SVG non \u00e8 supportato nelle email. Perci\u00f2 carica il tuo logo in PNG o in un altro formato supportato.", + "MAXSIZEEXCEEDED": "Dimensione massima di 524kB superata.", + "FONTINLOGINONLY": "Il carattere \u00e8 attualmente visualizzato solo nell'interfaccia di accesso.", + "PREVIEW": { + "TITLE": "Accesso", + "SECOND": "accedi con il tuo account ZITADEL.", + "ERROR": "L'utente non \u00e8 stato trovato!", + "PRIMARYBUTTON": "Avanti", + "SECONDARYBUTTON": "Registra" + } + }, + "PWD_AGE": { + "TITLE": "Impostazioni di validità della password", + "DESCRIPTION": "\u00c8 possibile impostare una impostazone per la validità delle password. Questa emette un avviso dopo che il tempo di invecchiamento specifico \u00e8 trascorso." + }, + "PWD_LOCKOUT": { + "TITLE": "Impostazione di blocco", + "DESCRIPTION": "Imposta un numero massimo di tentativi di password, dopo i quali gli account saranno bloccati." + }, + "IAM_POLICY": { + "TITLE": "Impostazioni di accesso IAM", + "DESCRIPTION": "Definisci le propriet\u00e0 di accesso dei tuoi utenti." + }, + "PRIVATELABELING_POLICY": { + "TITLE": "Private labelling", + "BTN": "Seleziona File", + "DESCRIPTION": "Personalizza l'aspetto del Login", + "ACTIVATEPREVIEW": "Attiva la configurazione" + }, + "LOGIN_POLICY": { + "TITLE": "Impostazione di accesso", + "DESCRIPTION": "Definisci come gli utenti possono essere autenticati e configura gli Identity Provider", + "DESCRIPTIONCREATEADMIN": "Gli utenti possono scegliere tra gli IDP disponibili qui sotto.", + "DESCRIPTIONCREATEMGMT": "Gli utenti possono scegliere tra gli IDP disponibili qui sotto. Nota: puoi usare i provider impostati nel sistema e quelli impostati della tua organizzazione.", + "ADVANCED": "Impostazioni avanzate", + "SAVED": "Salvato con successo!" + }, + "PRIVACY_POLICY": { + "TITLE": "Informativa sulla privacy e TOS", + "DESCRIPTION": "Imposta i tuoi link all'informativa sulla privacy e ai termini di servizio", + "TOSLINK": "Link ai termini di servizio", + "POLICYLINK": "Link all'informativa sulla privacy", + "SAVED": "Salvato con successo!", + "RESET_TITLE": "Ripristina i valori predefiniti", + "RESET_DESCRIPTION": "Stai per ripristinare i link predefiniti per i TOS e l'informativa sulla privacy. Vuoi davvero continuare?" + }, + "LOGIN_TEXTS": { + "TITLE": "Testi dell'interfaccia login", + "DESCRIPTION": "Definisci i tuoi testi per le interfacce login. Se i testi sono vuoti, verr\u00e0 utilizzato il valore predefinito mostrato come segnaposto.", + "DESCRIPTION_SHORT": "Imposta i tuoi testi per le interfacce login.", + "NEWERVERSIONEXISTS": "Esiste una versione pi\u00f9 recente", + "CURRENTDATE": "Configurazione attuale", + "CHANGEDATE": "Versione pi\u00f9 recente", + "KEYNAME": "Schermata login / interfaccia", + "RESET_TITLE": "Ripristina i valori predefiniti", + "RESET_DESCRIPTION": "Stai per ripristinare tutti i valori predefiniti. Tutte le modifiche che hai fatto saranno cancellate in modo permanente. Vuoi davvero continuare?", + "UNSAVED_TITLE": "Continuare senza salvare?", + "UNSAVED_DESCRIPTION": "Hai fatto delle modifiche senza salvare. Vuoi salvare ora?", + "LOCALE": "Codice locale", + "LOCALES": { + "de": "Tedesco", + "en": "Inglese", + "it": "Italiano", + "fr": "Francese" + }, + "KEYS": { + "emailVerificationDoneText": "Verifica dell'e-mail terminata con successo.", + "emailVerificationText": "Verificazione email", + "externalUserNotFoundText": "Utente esterno non trovato", + "footerText": "Footer", + "initMfaDoneText": "Inizializzazione MFA finita", + "initMfaOtpText": "Inizializzazione MFA", + "initMfaPromptText": "Richista di inizializzazione MFA", + "initMfaU2fText": "Inizializzazione di un secondo fattore universale", + "initPasswordDoneText": "Inizializzazione password finita", + "initPasswordText": "Inizializzazione della password", + "initializeDoneText": "Inizializzazione utente finita", + "initializeUserText": "Inizializzazione utente", + "linkingUserDoneText": "Collegamento dell'utente finito", + "loginText": "Accesso", + "logoutText": "Logout", + "mfaProvidersText": "Fornitori MFA", + "passwordChangeDoneText": "Cambio della password finito", + "passwordChangeText": "Cambio della password", + "passwordResetDoneText": "Reset della password finito", + "passwordText": "Password", + "registrationOptionText": "Opzioni per la registrazione", + "registrationOrgText": "Registrazione Organizzazione", + "registrationUserText": "Registrazione utente", + "selectAccountText": "Selezionamento dell'account", + "successLoginText": "Accesso con successo", + "usernameChangeDoneText": "Cambio di nome utente finito", + "usernameChangeText": "Cambio di nome utente", + "verifyMfaOtpText": "Verificazione OTP", + "verifyMfaU2fText": "Verificazione di un secondo fattore universale", + "passwordlessPromptText": "Richista inizializzazione autenticazione passwordless", + "passwordlessRegistrationDoneText": "Registrazione autenticazione passwordless finita", + "passwordlessRegistrationText": "Registrazione autenticazione passwordless", + "passwordlessText": "Autenticazione passwordless", + "externalRegistrationUserOverviewText": "Registrazione utente esterno" + } + }, + "MESSAGE_TEXTS": { + "TITLE": "Testi email", + "DESCRIPTION": "Definite i vostri testi per le vostre mail di notifica.", + "TYPES": { + "INIT": "Inizializzazione", + "VE": "Verificazione l'e-mail", + "VP": "Verificazione del telefono", + "PR": "Ripristino della password", + "DC": "Rivendicazione del dominio", + "PL": "Autenticazione Passwordless" + }, + "CHIPS": { + "firstname": "Nome", + "lastname": "Cognome", + "code": "Codice", + "preferredLoginName": "Nome di accesso preferito", + "displayName": "Displayname", + "nickName": "Soprannome", + "loginnames": "Nomi di accesso", + "domain": "Dominio", + "lastEmail": "Ultima email", + "lastPhone": "Ultimo telefono", + "verifiedEmail": "Email verificata", + "verifiedPhone": "Telefono verificato", + "changedate": "Cambia data", + "username": "Nome utente", + "tempUsername": "Nome utente temporaneo" + }, + "TOAST": { + "UPDATED": "Testi personalizzati salvati." + } + }, + "DEFAULTLABEL": "L'impostazione attuale corrisponde all'impostazione standard IAM.", + "BTN_INSTALL": "Impostazione", + "BTN_EDIT": "Modifica", + "DATA": { + "DESCRIPTION": "Descrizione", + "MINLENGTH": "lunghezza minima", + "HASNUMBER": "ha numero", + "HASSYMBOL": "ha il simbolo", + "HASLOWERCASE": "ha la minuscola", + "HASUPPERCASE": "ha la maiuscola", + "SHOWLOCKOUTFAILURES": "mostra i fallimenti del blocco", + "MAXATTEMPTS": "Massimo numero di tentativi di password", + "EXPIREWARNDAYS": "Avviso scadenza dopo il giorno", + "MAXAGEDAYS": "Lunghezza massima in giorni", + "USERLOGINMUSTBEDOMAIN": "Loginname dell'utente deve contenere il dominio", + "ALLOWUSERNAMEPASSWORD": "Autenticazione classica con password consentita", + "ALLOWEXTERNALIDP": "IDP esterno consentito", + "ALLOWREGISTER": "Registrazione consentita", + "ALLOWUSERNAMEPASSWORD_DESC": "Autenticazione classica con nome utente e password \u00e8 permessa.", + "ALLOWEXTERNALIDP_DESC": "Il login \u00e8 permesso per gli IDP sottostanti", + "ALLOWREGISTER_DESC": "Se l'opzione \u00e8 selezionata, nel login apparirà un passo aggiuntivo per la registrazione di un utente.", + "FORCEMFA": "Forza MFA", + "FORCEMFA_DESC": "Se l'opzione \u00e8 selezionata, gli utenti devono configurare un secondo fattore per il login.", + "HIDEPASSWORDRESET": "Nascondi ripristino della password", + "HIDEPASSWORDRESET_DESC": "Se l'opzione \u00e8 selezionata, l'utente non pu\u00f2 resettare la sua password nel interfaccia login.", + "HIDELOGINNAMESUFFIX": "Nascondi il suffisso del nome utente", + "ERRORMSGPOPUP": "Mostra l'errore nella finestra di dialogo", + "DISABLEWATERMARK": "Nascondi la filigrana" + }, + "RESET": "Ripristina l'impostazione", + "CREATECUSTOM": "Crea un'impostazione personalizzata", + "TOAST": { + "SET": "Impostazione cambiata con successo!", + "RESETSUCCESS": "Impostazione ripristinata con successo!", + "UPLOADSUCCESS": "Caricato con successo!", + "DELETESUCCESS": "Cancellato con successo!", + "UPLOADFAILED": "Caricamento fallito!" + } + }, + "ORG_DETAIL": { + "TITLE": "Organizzazione", + "DESCRIPTION": "Qui puoi modificare la configurazione della tua organizzazione e gestire i membri.", + "DETAIL": { + "TITLE": "Dettaglio", + "NAME": "Nome", + "DOMAIN": "Dominio", + "STATE": { + "0": "Non definito", + "1": "Attivo", + "2": "Inattivo" + } + }, + "MEMBER": { + "TITLE": "Member", + "USERNAME": "Nome utente", + "FIRSTNAME": "Nome", + "LASTNAME": "Nome", + "LOGINNAME": "Nome di accesso", + "EMAIL": "E-mail", + "ROLES": "Ruoli", + "ADD": "Aggiungi member", + "ADDDESCRIPTION": "Inserisci gli indirizzi e-mail degli utenti da aggiungere." + }, + "TABLE": { + "TOTAL": "Voci totali", + "SELECTION": "Elementi selezionati", + "DEACTIVATE": "Disattivare l'utente", + "ACTIVATE": "Attivare l'utente", + "DELETE": "Elimina utente", + "CLEAR": "Cancella la selezione" + } + }, + "PROJECT": { + "PAGES": { + "TITLE": "Progetto", + "DESCRIPTION": "Qui puoi definire le applicazioni, gestire i ruoli e concedere ad altre organizzazioni di usare il tuo progetto.", + "DELETE": "Rimuovi progetto", + "LIST": "Progetti", + "LISTDESCRIPTION": "Qui trovi tutti i progetti che hai il permesso di visualizzare o eseguire azioni. Se non riesci a trovare un progetto, contatta il proprietario del progetto o qualcuno con i diritti corrispondenti per ottenere l'accesso.", + "DETAIL": "Dettagli", + "CREATE": "Crea un progetto", + "CREATE_DESC": "Inserisci il nome del tuo progetto.", + "ROLE": "Ruolo", + "NOITEMS": "Nessun progetto", + "ZITADELPROJECT": "Questo appartiene al progetto ZITADEL. Attenzione: se fai delle modifiche ZITADEL potrebbe non comportarsi come previsto.", + "TYPE": { + "OWNED": "Progetti di propriet\u00e0", + "GRANTED": "Progetti concessi" + }, + "PRIVATELABEL": { + "TITLE": "Impostazione Private labelling", + "0": { + "TITLE": "Non specificato", + "DESC": "Non appena l'utente viene identificato, viene mostrata l'impostazione Private labelling dell'organizzazione, prima che venga mostrato il default del sistema." + }, + "1": { + "TITLE": "Applica l'impostazione Private labelling delle risorse del progetto", + "DESC": "Private labelling dell'organizzazione del progetto sar\u00e0 mostrata" + }, + "2": { + "TITLE": "Consentire l'accesso all'impostazione Private labelling dell'utente", + "DESC": "Verr\u00e0 mostrata l'impostazione Private labelling dell'organizzazione del progetto, ma non appena l'utente viene identificato, verr\u00e0 mostrata l'impostazione dell'organizzazione dell'utente identificato." + }, + "DIALOG": { + "TITLE": "Impostazione Private labelling", + "DESCRIPTION": "Seleziona il comportamento del login, quando usi il progetto." + } + }, + "PINNED": "Pinned", + "ALL": "Tutti", + "CREATEDON": "Creazione", + "LASTMODIFIED": "Ultima modifica", + "ADDNEW": "Crea un nuovo progetto", + "DIALOG": { + "REACTIVATE": { + "TITLE": "Riattivare il progetto", + "DESCRIPTION": "Vuoi davvero riattivare il tuo progetto?" + }, + "DEACTIVATE": { + "TITLE": "Disattivare il progetto", + "DESCRIPTION": "Vuoi davvero disattivare il tuo progetto?" + }, + "DELETE": { + "TITLE": "Rimuovere il progetto", + "DESCRIPTION": "Vuoi davvero rimuovere il tuo progetto?" + } + } + }, + "STATE": { + "TITLE": "Stato", + "0": "Non definito", + "1": "Attivo", + "2": "Inattivo" + }, + "TYPE": { + "TITLE": "Tipo", + "0": "Tipo sconosciuto", + "1": "Progetto posseduto", + "2": "Progetto concesso" + }, + "NAME": "Nome", + "NAMEDIALOG": { + "TITLE": "Rinomina il progetto", + "DESCRIPTION": "Inserisci il nuovo nome del tuo progetto", + "NAME": "Nuovo nome" + }, + "MEMBER": { + "TITLE": "Manager", + "TITLEDESC": "I manager possono apportare modifiche a questo progetto in base al loro ruolo.", + "DESCRIPTION": "Qui puoi trovare tutti i manager di questo progetto. Puoi aggiungere un nuovo membro e gestire quelli esistenti.", + "USERNAME": "Nome utente", + "FIRSTNAME": "Nome", + "LASTNAME": "Nome", + "LOGINNAME": "Nome di accesso", + "EMAIL": "E-mail", + "ROLES": "Ruoli", + "USERID": "ID utente" + }, + "GRANT": { + "EMPTY": "Nessun organizzazione concessa.", + "TITLE": "Organizzazioni concesse", + "DESCRIPTION": "Permetti a un'altra organizzazione di usare il tuo progetto.", + "CREATE": { + "TITLE": "Crea un org grant", + "SEL_USERS": "Seleziona gli utenti a cui vuoi concedere l'accesso", + "SEL_PROJECT": "Cerca un progetto", + "SEL_ROLES": "Seleziona i ruoli che vuoi aggiungere", + "SEL_USER": "Cerca un utente", + "SEL_ORG": "Impostare il dominio", + "SEL_ORG_DESC": "Inserisci il dominio completo per specificare l'organizzazione da concedere.", + "ORG_TITLE": "Organizzazione", + "ORG_DESCRIPTION": "Stai per concedere un utente per l'organizzazione {{name}}.", + "ORG_DESCRIPTION_DESC": "Cambia il contesto nell'intestazione qui sopra per concedere un utente per un'altra organizzazione.", + "SEL_ORG_FORMFIELD": "Dominio completo", + "SEL_ORG_BUTTON": "Ricerca organizzazione", + "FOR_ORG": "Org grant \u00e8 creato per:" + }, + "DETAIL": { + "TITLE": "Managers del org grant", + "DESC": "Questi sono i manager dell'org grant. Puoi selezionare quali utenti sono autorizzati a mantenere il controllo del progetto.", + "MEMBERTITLE": "Manager", + "MEMBERDESC": "Questi sono i manager dell'org grant. Aggiungi qui gli utenti che devono ottenere l'accesso per modificare i dati del progetto.", + "PROJECTNAME": "Nome del progetto", + "GRANTEDORG": "Organizzazione concessa", + "RESOURCEOWNER": "Resource owner" + }, + "STATE": "Stato", + "STATES": { + "1": "Attivo", + "2": "Inattivo" + }, + "SHOWDETAIL": "Mostra dettagli", + "USER": "Utente", + "MEMBERS": "Manager", + "PROJECTNAME": "Nome del progetto", + "GRANTEDORG": "Organizzazione concessa", + "GRANTEDORGDOMAIN": "Dominio", + "RESOURCEOWNER": "Resource owner", + "GRANTEDORGNAME": "Nome dell'organizzazione", + "CREATIONDATE": "Data di creazione", + "CHANGEDATE": "Ultima modifica", + "DATES": "Date", + "ROLENAMESLIST": "Ruoli", + "NOROLES": "Nessun ruolo", + "TOAST": { + "PROJECTGRANTUSERGRANTADDED": "Project grant creato.", + "PROJECTGRANTADDED": "Project grant creato.", + "PROJECTGRANTCHANGED": "Project grant è stato cambiato.", + "PROJECTGRANTMEMBERADDED": "Grant manager aggiunto.", + "PROJECTGRANTMEMBERCHANGED": "Grant manager cambiato.", + "PROJECTGRANTMEMBERREMOVED": "Grant manager rimosso.", + "PROJECTGRANTUPDATED": "Project Grant cambiato." + }, + "ROLES": "Ruoli del progetto" + }, + "APP": { + "TITLE": "Applicazioni", + "NAME": "Nome", + "NAMEREQUIRED": "Il nome è necessario." + }, + "ROLE": { + "EMPTY": "Nessun ruolo", + "ADDNEWLINE": "Aggiungi un altro ruolo", + "KEY": "Chiave", + "TITLE": "Ruoli", + "DESCRIPTION": "Crea ruoli che possono essere usati per il project grant.", + "NAME": "Nome", + "DISPLAY_NAME": "Displayname", + "GROUP": "Gruppo", + "ACTIONS": "Azioni", + "ADDTITLE": "Crea un ruolo", + "ADDDESCRIPTION": "Inserisci i dati per il nuovo ruolo.", + "EDITTITLE": "Modifica ruolo", + "EDITDESCRIPTION": "Inserisci i nuovi dati per il ruolo.", + "DELETE": "Rimuovi ruolo", + "CREATIONDATE": "Creato", + "SELECTGROUPTOOLTIP": "Seleziona tutti i ruoli del gruppo {{group}}.", + "OPTIONS": "Opzioni", + "ASSERTION": "Includi ruoli con autenticazione", + "ASSERTION_DESCRIPTION": "Le informazioni sui ruoli sono inviate dall'endpoint Userinfo e a seconda delle impostazioni dell'applicazione in token.", + "CHECK": "Verifica i ruoli con l'autenticazione", + "CHECK_DESCRIPTION": "Se impostato, gli utenti possono autenticarsi solo se un qualsiasi ruolo \u00e8 assegnato al loro account." + }, + "HAS_PROJECT": "Controlla project grant con l'autenticazione", + "HAS_PROJECT_DESCRIPTION": "Questa impostazione verifica il project grant dell'organizzazione. In caso di mancanza, l'utente non può essere autenticato.", + "TABLE": { + "TOTAL": "Voci totali:", + "SELECTION": "Elementi selezionati", + "DEACTIVATE": "Disattiva progetto", + "ACTIVATE": "Attiva progetto", + "DELETE": "Rimuovi progetto", + "ORGNAME": "Nome dell'organizzazione", + "ORGDOMAIN": "Dominio", + "STATE": "Stato", + "TYPE": "Tipo", + "CREATIONDATE": "Creato", + "CHANGEDATE": "Ultima modifica", + "RESOURCEOWNER": "Resouce owner", + "SHOWTABLE": "Mostra tabella", + "SHOWGRID": "Mostra la visualizzazione griglia", + "EMPTY": "Nessun progetto trovato" + }, + "TOAST": { + "MEMBERREMOVED": "Manager rimosso con successo.", + "MEMBERSADDED": "Manager aggiunto con successo.", + "MEMBERADDED": "Manager aggiunto con successo.", + "MEMBERCHANGED": "Manager cambiato con successo.", + "ROLEREMOVED": "Ruolo rimosso con successo.", + "ROLECHANGED": "Ruolo cambiato con successo.", + "REACTIVATED": "Riattivato con successo.", + "DEACTIVATED": "Disattivato con successo.", + "UPDATED": "Progetto cambiato con successo.", + "GRANTUPDATED": "Grant cambiato con successo.", + "DELETED": "Progetto rimosso con successo." + } + }, + "NEXTSTEPS": { + "TITLE": "Passi successivi" + }, + "IDP": { + "LIST": { + "TITLE": "Identity Providers", + "DESCRIPTION": "Definisci ulteriori Identity Provider, che possono essere utilizzati per l'autenticazione nelle tue organizzazioni.", + "ACTIVETITLE": "Identity Providers" + }, + "CREATE": { + "TITLE": "Nuovo IDP", + "DESCRIPTION": "Configura l'endpoint del tuo nuovo IDP." + }, + "DETAIL": { + "TITLE": "Identity Provider", + "DESCRIPTION": "Configurazione generale del tuo fornitore di identit\u00e0.", + "DATECREATED": "Creato", + "DATECHANGED": "Cambiato" + }, + "OWNERTYPES": { + "0": "sconosciuto", + "1": "Sistema", + "2": "Organizzazione" + }, + "TYPES": { + "0": "sconosciuto", + "1": "OIDC" + }, + "STATES": { + "1": "attivo", + "2": "inattivo" + }, + "MAPPINGFIELD": { + "1": "Nome utente preferito", + "2": "Email" + }, + "STYLE": "Stile", + "STYLEFIELD": { + "0": "No Styling", + "1": "Google" + }, + "ADD": "Aggiungi Identity Provider", + "AUTOREGISTER": "Registrazione automatica", + "AUTOREGISTER_DESC": "Se \u00e8 selezionato e non esiste ancora un account, ne verr\u00e0 creato uno.", + "TYPE": "Tipo", + "OWNER": "Owner", + "ID": "ID", + "NAME": "Nome", + "CONFIG": "Configurazione", + "STATE": "Stato", + "ISSUER": "Issuer", + "SCOPESLIST": "Scope list", + "CLIENTID": "Client ID", + "CLIENTSECRET": "Client Secret", + "IDPDISPLAYNAMMAPPING": "Mapping del nome di visualizzazione IDP", + "USERNAMEMAPPING": "Mapping del nome utente", + "DATES": "Date", + "CREATIONDATE": "Creato", + "CHANGEDATE": "Ultima modifica", + "DEACTIVATE": "Disattiva", + "ACTIVATE": "Attiva", + "DELETE": "Rimuovi IDP", + "DELETE_TITLE": "Rimuovi IDP", + "DELETE_DESCRIPTION": "Stai per rimuovere un fornitore di identit\u00e0. I cambiamenti risultanti sono irrevocabili. Vuoi davvero farlo?", + "DELETE_SELECTION_TITLE": "Rimuovere IDP", + "DELETE_SELECTION_DESCRIPTION": "Stai per rimuovere un fornitore di identit\u00e0. I cambiamenti risultanti sono irrevocabili. Vuoi davvero farlo?", + "OIDC": { + "TITLE": "OpenId Connect IDP", + "DESCRIPTION": "Inserisci i dati per il OIDC Identity Provider." + }, + "JWT": { + "TITLE": "JWT IDP", + "DESCRIPTION": "Inserisci i dati per il JWT Identity Provider.", + "HEADERNAME": "Header Name", + "JWTENDPOINT": "JWT Endpoint", + "JWTKEYSENDPOINT": "JWT Keys Endpoint" + }, + "TOAST": { + "SAVED": "Salvato con successo.", + "REACTIVATED": "IDP riattivato.", + "DEACTIVATED": "IDP disattivato.", + "SELECTEDREACTIVATED": "IDP selezionati riattivati.", + "SELECTEDDEACTIVATED": "IDP selezionati disattivati.", + "SELECTEDKEYSDELETED": "IDP selezionati cancellati.", + "DELETED": "IDP rimosso con successo!" + } + }, + "MFA": { + "LIST": { + "MULTIFACTORTITLE": "Multifattori", + "MULTIFACTORDESCRIPTION": "Definisci qui i tuoi multifattori per l'autenticazione.", + "SECONDFACTORTITLE": "Secondi fattori", + "SECONDFACTORDESCRIPTION": "Definisci qui i tuoi Secondfactor per l'autenticazione." + }, + "CREATE": { + "TITLE": "Nuovo fattore", + "DESCRIPTION": "Seleziona il tuo nuovo tipo di fattore." + }, + "DELETE": { + "TITLE": "Rimuovi fattore", + "DESCRIPTION": "Stai per rimuovere un fattore dal login. Sei sicuro?" + }, + "TOAST": { + "ADDED": "Aggiunto con successo.", + "SAVED": "Salvato con successo.", + "DELETED": "Rimosso con successo" + }, + "TYPE": "Tipo", + "MULTIFACTORTYPES": { + "0": "Sconosciuto", + "1": "U2F con Pin" + }, + "SECONDFACTORTYPES": { + "0": "Sconosciuto", + "1": "OTP", + "2": "U2F" + } + }, + "LOGINPOLICY": { + "CREATE": { + "TITLE": "Impostazioni di accesso", + "DESCRIPTION": "Definisci come i tuoi utenti possono essere autenticati nella tua organizzazione." + }, + "IDPS": "Identity Providers", + "ADDIDP": { + "TITLE": "Aggiungi un IDP", + "DESCRIPTION": "\u00c8 possibile selezionare IDPs dell'organizzazione o del sistema.", + "SELECTIDPS": "Identity Providers" + }, + "PASSWORDLESS": "Autenticazione passwordless", + "PASSWORDLESSTYPE": { + "0": "Non consentito", + "1": "Consentito" + } + }, + "APP": { + "LIST": "Applicazioni", + "PAGES": { + "TITLE": "Applicazione", + "DESCRIPTION": "Qui puoi modificare i dati della tua applicazione e la sua configurazione.", + "CREATE_OIDC": "Applicazione OIDC", + "CREATE_OIDC_DESC_TITLE": "Inserisci i dettagli della tua applicazione passo dopo passo", + "CREATE_OIDC_DESC_SUB": "Una configurazione raccomandata sar\u00e0 generata automaticamente.", + "STATE": "Stato", + "DATECREATED": "Creato", + "DATECHANGED": "Cambiato", + "URLS": "URLs", + "DELETE": "Rimuovi App", + "DETAIL": { + "TITLE": "Dettagli", + "STATE": { + "0": "Non definito", + "1": "Attiva", + "2": "Inattiva" + } + }, + "DIALOG": { + "DELETE": { + "TITLE": "Rimuovere App", + "DESCRIPTION": "Vuoi davvero rimuovere questa applicazione?" + } + }, + "NEXTSTEPS": { + "TITLE": "Passi successivi", + "0": { + "TITLE": "Aggiungi ruoli", + "DESC": "Inserisci i ruoli del tuo progetto" + }, + "1": { + "TITLE": "Aggiungi utenti", + "DESC": "Aggiungi nuovi utenti della tua organizzazione" + }, + "2": { + "TITLE": "Aiuto e supporto", + "DESC": "Leggi la nostra documentazione sulla creazione di applicazioni o contatta il nostro supporto" + } + } + }, + "NAMEDIALOG": { + "TITLE": "Rinomina App", + "DESCRIPTION": "Inserisci il nuovo nome della tua app", + "NAME": "Nuovo nome" + }, + "NAME": "Nome", + "TYPE": "Tipo di applicazione", + "AUTHMETHOD": "Authmethod", + "AUTHMETHODSECTION": "Metodo di autenticazione", + "GRANT": "Tipi di Grant", + "ADDITIONALORIGINS": "Origini aggiuntive", + "ADDITIONALORIGINSDESC": "Se vuoi aggiungere ulteriori Origini alla tua app che non \u00e8 usata come reindirizzamento puoi farlo qui.", + "ORIGINS": "Origini", + "NOTANORIGIN": "Il valore inserito non \u00e8 un'origine", + "OIDC": { + "INFO": { + "ISSUER": "Issuer", + "CLIENTID": "Client ID" + }, + "CURRENT": "Configurazione attuale", + "TOKENSECTIONTITLE": "Opzioni AuthToken", + "REDIRECTSECTIONTITLE": "Impostazioni di reindirizzamento", + "PROSWITCH": "Sono un professionista. Salta questo passo.", + "NAMEANDTYPESECTION": "Nome e tipo", + "TITLEFIRST": "Inserisci un nome.", + "TYPETITLE": "Che tipo di applicazione vuoi creare?", + "REDIRECTTITLE": "Specifica gli URI a cui il login sar\u00e0 reindirizzato.", + "POSTREDIRECTTITLE": "Questo \u00e8 l'URI di reindirizzamento dopo il logout.", + "REDIRECTDESCRIPTIONWEB": "Gli URI di reindirizzamento devono iniziare con https://. http:// \u00e8 valido solo con la modalit\u00e0 di sviluppo abilitata (DEV Mode).", + "REDIRECTDESCRIPTIONNATIVE": "Gli URI di reindirizzamento devono iniziare con il proprio protocollo, http://127.0.0.1, http://[::1] o http://localhost.", + "REDIRECTNOTVALID": "Questo URI di reindirizzamento non \u00e8 valido.", + "COMMAORENTERSEPERATION": "separare con \u21b5", + "TYPEREQUIRED": "Il tipo \u00e8 necessario per completare.", + "TITLE": "Configurazione OIDC", + "CLIENTID": "Client ID", + "CLIENTSECRET": "Client Secret", + "CLIENTSECRET_NOSECRET": "Con il flusso di autenticazione scelto, non \u00e8 richiesto alcun Client Secret e quindi non \u00e8 disponibile.", + "CLIENTSECRET_DESCRIPTION": "Salvate il Client Secret in un luogo sicuro, perch\u00e9 non sarà più disponibile dopo aver chiuso la finestra di dialogo", + "REGENERATESECRET": "Rigenera il Client Secret", + "DEVMODE": "Modalit\u00e0 di sviluppo (DEV Mode)", + "DEVMODEDESC": "Attenzione: Con la modalit\u00e0 di sviluppo abilitata, gli URI di reindirizzamento non saranno convalidati.", + "REDIRECT": "URI per il reindrizzamento", + "REDIRECTSECTION": "Reindirizzamento", + "POSTLOGOUTREDIRECT": "URI post logout", + "RESPONSESECTION": "Tipi di risposta", + "GRANTSECTION": "Tipi di autorizzazione", + "GRANTTITLE": "Seleziona i tipi di autorizzazione. Nota: Implicit \u00e8 disponibile solo per le applicazioni basate su browser.", + "APPTYPE": { + "0": "Web", + "1": "User agent", + "2": "Native" + }, + "RESPONSETYPE": "Tipi di risposta", + "RESPONSE": { + "0": "Codice", + "1": "ID-Token", + "2": "Token ID-Token" + }, + "REFRESHTOKEN": "Refresh Token", + "GRANTTYPE": "Tipi di autorizzazione", + "GRANT": { + "0": "Authorization Code", + "1": "Implicit", + "2": "Refresh Token" + }, + "AUTHMETHOD": { + "0": "Basic", + "1": "Post", + "2": "None", + "3": "Private Key JWT" + }, + "TOKENTYPE": "Tipo di token di autorizzazione", + "TOKENTYPE0": "Bearer Token", + "TOKENTYPE1": "JWT", + "UNSECUREREDIRECT": "Speriamo proprio che tu sappia cosa stai facendo.", + "OVERVIEWSECTION": "Panoramica", + "OVERVIEWTITLE": "Configurazione finita. Rivedi le tue impostazioni.", + "ACCESSTOKENROLEASSERTION": "Aggiungere ruoli utente al Access Token", + "ACCESSTOKENROLEASSERTION_DESCRIPTION": "Se selezionato, i ruoli richiesti dall'utente autenticato sono aggiunti all'Access Token", + "IDTOKENROLEASSERTION": "Aggiungi ruoli nell'ID Token", + "IDTOKENROLEASSERTION_DESCRIPTION": "Se selezionato, i ruoli richiesti dall'utente autenticato sono aggiunti all'ID Token.", + "IDTOKENUSERINFOASSERTION": "Aggiungi le informazioni dell'utente nell'ID Token", + "IDTOKENUSERINFOASSERTION_DESCRIPTION": "Aggiungi le richieste di profilo, email, telefono o indirizzo nell'ID Token.", + "CLOCKSKEW": "Permette ai clienti di gestire lo skew di OP e client. La durata (0-5s) sar\u00e0 aggiunta a exp claim e sottratta da iats, auth_time e nbf.", + "RECOMMENDED": "raccomandato", + "NOTRECOMMENDED": "non raccomandato", + "SELECTION": { + "APPTYPE": { + "WEB": { + "TITLE": "Web", + "DESCRIPTION": "Applicazioni web regolari come .net, PHP, Node.js, Java, ecc." + }, + "NATIVE": { + "TITLE": "Native", + "DESCRIPTION": "App mobili, desktop, dispositivi intelligenti, ecc." + }, + "USERAGENT": { + "TITLE": "User Agent", + "DESCRIPTION": "Single Page Applications (SPA) e in generale tutti i framework JS eseguiti nei browser" + } + } + } + }, + "API": { + "INFO": { + "CLIENTID": "Client ID" + }, + "REGENERATESECRET": "Rigenera il Client Secret", + "SELECTION": { + "TITLE": "API", + "DESCRIPTION": "API in generale" + }, + "AUTHMETHOD": { + "0": "Basic", + "1": "Private Key JWT" + } + }, + "AUTHMETHODS": { + "CODE": { + "TITLE": "Code", + "DESCRIPTION": "Scambia il codice di autorizzazione con il token" + }, + "PKCE": { + "TITLE": "PKCE", + "DESCRIPTION": "Usa un hash casuale invece di un Client Secret statico per maggiore sicurezza" + }, + "POST": { + "TITLE": "POST", + "DESCRIPTION": "Invia client_id e client_secret come parte della richista." + }, + "PK_JWT": { + "TITLE": "Private Key JWT", + "DESCRIPTION": "Usa un Private Key per autorizzare la tua applicazione" + }, + "BASIC": { + "TITLE": "Basic", + "DESCRIPTION": "Autenticazione con nome utente e password" + }, + "IMPLICIT": { + "TITLE": "Implicit", + "DESCRIPTION": "Ottenere i token direttamente dall'endpoint di autorizzazione" + }, + "CUSTOM": { + "TITLE": "Custom", + "DESCRIPTION": "La tua impostazione non corrisponde a nessun'altra opzione." + } + }, + "TOAST": { + "REACTIVATED": "Applicazione riattivata.", + "DEACTIVATED": "Applicazione disattivata.", + "OIDCUPDATED": "Configurazione OIDC aggiornata.", + "APIUPDATED": "Configurazione API aggiornata", + "UPDATED": "App aggiornata.", + "CLIENTSECRETREGENERATED": "Client secret generato.", + "DELETED": "App rimossa con successo.", + "CONFIGCHANGED": "Modifiche alla configurazione rilevate" + } + }, + "GENDERS": { + "0": "Sconosciuto", + "1": "Femminile", + "2": "Maschio", + "3": "Altro" + }, + "LANGUAGES": { + "de": "Tedesco", + "it": "Italiano", + "en": "Inglese" + }, + "MEMBER": { + "ADD": "Aggiungi un manager", + "CREATIONTYPE": "Tipo di creazione", + "DOCSINFO": "Per maggiori informazioni, considera leggere la nostra documentazione.", + "CREATIONTYPES": { + "3": "IAM", + "2": "Organizzazione", + "0": "Progetto proprio", + "1": "Progetto concesso", + "4": "Progetto" + } + }, + "ROLESLABEL": "Ruoli", + "GRANTS": { + "TITLE": "Autorizzazioni", + "DESC": "Qui puoi gestire le autorizzazioni degli utenti della tua organizzazione.", + "DELETE": "Cancellare l'autorizzazione", + "EMPTY": "Nessuna autorizzazione trovata", + "ADD": "Creare autorizzazione", + "ADD_BTN": "Nuovo", + "PROJECT": { + "TITLE": "Autorizzazione", + "DESCRIPTION": "Definisci le autorizzazioni per il progetto specificato. Nota che puoi vedere solo le voci dei progetti e degli utenti per i quali hai le autorizzazioni." + }, + "USER": { + "TITLE": "Autorizzazione", + "DESCRIPTION": "Definisci le autorizzazioni per l'utente specificato. Nota che puoi vedere solo le voci dei progetti e degli utenti per i quali hai le autorizzazioni." + }, + "CREATE": { + "TITLE": "Creare autorizzazione", + "DESCRIPTION": "Cerca l'organizzazione, il progetto e i ruoli corrispondenti." + }, + "DETAIL": { + "TITLE": "Dettaglio dell'autorizzazione", + "DESCRIPTION": "Qui potete vedere tutti i dettagli dell'autorizzazione." + }, + "TOAST": { + "UPDATED": "Sovvenzione aggiornata.", + "BULKREMOVED": "Sussidi rimossi." + } + }, + "CHANGES": { + "LISTTITLE": "Ultimi cambiamenti", + "BOTTOM": "Hai raggiunto la fine della lista.", + "ORG": { + "TITLE": "Attivit\u00e0", + "DESCRIPTION": "Qui puoi vedere gli ultimi eventi che hanno generato un cambio di organizzazione." + }, + "PROJECT": { + "TITLE": "Attivit\u00e0", + "DESCRIPTION": "Qui puoi vedere gli ultimi eventi che hanno generato un cambiamento di progetto." + }, + "USER": { + "TITLE": "Attivit\u00e0", + "DESCRIPTION": "Qui puoi vedere gli ultimi eventi che hanno generato un cambiamento dell'utente." + } + } +} diff --git a/docs/docs/guides/customization/texts.md b/docs/docs/guides/customization/texts.md index 76bff2636e..9723916d93 100644 --- a/docs/docs/guides/customization/texts.md +++ b/docs/docs/guides/customization/texts.md @@ -25,5 +25,21 @@ You will see the default texts in the input field and you can overwrite them by ![Message Texts](/img/console_login_texts.png) ## Reset to default + If you don't like your customization anymore click the "reset policy" button. All your settings will be removed and the default settings of the system will trigger. + +## Internationalization + +ZITADELs support for languages will be extended with time. +If you need support for a specific language we highly recommend you to write translation files for the missing language. + +ZITADEL loads translations from three files: + + - [Console translations](https://github.com/caos/zitadel/tree/main/console/src/assets/i18n) + - [Login interface texts](https://github.com/caos/zitadel/tree/main/internal/ui/login/static/i18n) + - [Email Notifcation texts](https://github.com/caos/zitadel/tree/main/internal/notification/static/i18n) + - [Common translations](https://github.com/caos/zitadel/tree/main/internal/static/i18n) for success or error toasts + + Make sure you set the locale as the name. Later on, language header will determine which file gets displayed. + diff --git a/internal/notification/static/i18n/it.yaml b/internal/notification/static/i18n/it.yaml new file mode 100644 index 0000000000..8f210e1b84 --- /dev/null +++ b/internal/notification/static/i18n/it.yaml @@ -0,0 +1,42 @@ +InitCode: + Title: ZITADEL - Inizializzare l'utente + PreHeader: Inizializzare l'utente + Subject: Inizializzare l'utente + Greeting: 'Ciao {{.FirstName}} {{.LastName}},' + Text: Questo utente è stato creato in ZITADEL. Usa il nome utente {{.PreferredLoginName}} per accedere. Per favore, clicca il pulsante per finire il processo di inizializzazione. (Codice {{.Codice}}) Se non hai richiesto questa mail, per favore ignorala. + ButtonText: Termina +PasswordReset: + Title: ZITADEL - Ripristina la password + PreHeader: Ripristina la password + Subject: Ripristina la password + Greeting: 'Ciao {{.FirstName}} {{.LastName}},' + Text: Abbiamo ricevuto una richiesta di reimpostazione della password. Per favore clicca il pulsante per resettare la tua password. (Codice {{.Codice}}) Se non hai richiesto questa mail, ignorala. + ButtonText: Ripristina +VerifyEmail: + Title: ZITADEL - Verifica l'e-mail + PreHeader: Verifica l'e-mail + Subject: Verifica l'e-mail + Greeting: 'Ciao {{.FirstName}} {{.LastName}},' + Text: È stata aggiunta una nuova email. Per favore fai clic sul pulsante per verificare la tua mail. (Codice {{.Codice}}) Se non hai aggiunto una nuova email, ignora questa email. + ButtonText: Verifica +VerifyPhone: + Title: ZITADEL - Verifica il telefono + PreHeader: Verifica il telefono + Subject: Verifica il telefono + Greeting: 'Ciao {{.FirstName}} {{.LastName}},' + Text: È stato aggiunto un nuovo numero di telefono. Usa il seguente codice per verificarlo {{.Code}} + ButtonText: Verifica +DomainClaimed: + Title: ZITADEL - Il dominio è stato rivendicato + PreHeader: Cambiare email / nome utente + Subject: Il dominio è stato rivendicato + Greeting: 'Ciao {{.FirstName}} {{.LastName}},' + Text: Il dominio {{.Domain}} è stato rivendicato da un'organizzazione. Il tuo attuale utente {{.Username}} non fa parte di questa organizzazione. Perciò dovrai cambiare la tua email quando farai il login. Abbiamo creato un nome utente temporaneo ({{.TempUsername}}) per questo login. + ButtonText: Accedi +PasswordlessRegistration: + Title: ZITADEL - Aggiungere autenticazione passwordless + PreHeader: Aggiungi l'autenticazione passwordless + Subject: Aggiungi l'autenticazione passwordless + Greeting: 'Ciao {{.FirstName}} {{.LastName}},' + Text: Abbiamo ricevuto una richiesta per aggiungere l'autenticazione passwordless. Usa il pulsante qui sotto per aggiungere il tuo token o dispositivo per il login senza password. + ButtonText: Attiva passwordless diff --git a/internal/static/i18n/de.yaml b/internal/static/i18n/de.yaml index ac81c3c85f..61eb74a49f 100644 --- a/internal/static/i18n/de.yaml +++ b/internal/static/i18n/de.yaml @@ -18,7 +18,7 @@ Errors: SetPublicFailed: Bucket konnte nicht auf public gesetzt werden Object: PutFailed: Objekt konnte nicht erstellt werden - GetFaieled: Objekt konnte nicht gelesen werden + GetFailed: Objekt konnte nicht gelesen werden PresignedTokenFailed: Signiertes Token konnte nicht erstellt werden ListFailed: Objektliste konnte nicht gelesen werden RemoveFailed: Objekt konnte nicht gelöscht werden @@ -190,7 +190,7 @@ Errors: NotExisting: Org IAM Policy existiert nicht AlreadyExists: Org IAM Policy existiert bereits Project: - ProjectIDMissing: Project Id fehlt + ProjectIDMissing: Project ID fehlt AlreadyExists: Project existiert bereits auf der Organisation OrgNotExisting: Organisation existiert nicht UserNotExisting: User existiert nicht @@ -242,7 +242,7 @@ Errors: MemberInvalid: Member ist ungültig MemberAlreadyExisting: Member existiert bereits MemberNotExisting: Member existiert nicht - IDMissing: Id fehlt + IDMissing: ID fehlt GlobalOrgMissing: Globale Organisation fehlt GlobalOrgAlreadySet: Globale Organisation wurde bereits gesetzt IAMProjectIDMissing: IAM Project ID fehlt @@ -266,7 +266,7 @@ Errors: IDP: AlreadyExists: Identitäts Provider existiert bereits NotExisting: Identitäts Provider existiert nicht - Invalid: Idp Provider ist ungültig + Invalid: IDP ist ungültig IDPConfig: AlreadyExists: Identitäts Provider Konfiguration existiert bereits NotInactive: Identitäts Provider Konfiguration nicht inaktive @@ -325,7 +325,7 @@ Errors: NotFound: Benutzer Berechtigung konnte nicht gefunden werden Invalid: Benutzer Berechtigung ist ungültig NotChanged: Benutzer Berechtigung wurde nicht verändert - IDMissing: Id fehlt + IDMissing: ID fehlt NotActive: Benutzer Berechtigung ist nicht aktiv NotInactive: Benutzer Berechtigung ist nicht deaktiviert NoPermissionForProject: Benutzer hat keine Rechte auf diesem Projekt diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index 831415696b..089a8821b2 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -17,8 +17,8 @@ Errors: RemoveFailed: Bucket not deleted SetPublicFailed: Could not set bucket to public Object: - PutFailed: Objekt not created - GetFaieled: Objekt could not be read + PutFailed: Object not created + GetFailed: Object could not be read PresignedTokenFailed: Signed token could not be created ListFailed: Objectlist could not be read RemoveFailed: Object could not be removed @@ -74,7 +74,7 @@ Errors: Expired: Code is expired GeneratorAlgNotSupported: Unsupported generator algorithm Password: - NotFound: Passoword not found + NotFound: Password not found Empty: Password is empty Invalid: Password is invalid NotSet: User has not set a password @@ -216,7 +216,7 @@ Errors: NotFound: Application not found Invalid: Application invalid NotExisting: Application doesn't exist - NotActive:: Application is not active + NotActive: Application is not active NotInactive: Application is not inactive OIDCConfigInvalid: OIDC configuration is invalid APIConfigInvalid: API configuration is invalid @@ -285,7 +285,7 @@ Errors: AlreadyExists: Default Message Text already exists Invalid: Default Message Text is invalid PasswordComplexityPolicy: - NotFound: Default Private Label Policy not found + NotFound: Default Password Complexity Policy not found NotExisting: Default Password Complexity Policy not existing AlreadyExists: Default Password Complexity Policy already existing Empty: Default Password Complexity Policy empty @@ -688,7 +688,7 @@ EventTypes: changed: Project member changed removed: Project member removed cascade: - removeD: Project member cascade removed + removed: Project member cascade removed role: added: Project role added changed: Project role changed diff --git a/internal/static/i18n/it.yaml b/internal/static/i18n/it.yaml new file mode 100644 index 0000000000..b577fae939 --- /dev/null +++ b/internal/static/i18n/it.yaml @@ -0,0 +1,836 @@ +Errors: + Internal: Si è verificato un errore interno + NoChangesFound: Nessun cambiamento + OriginNotAllowed: Origine non consentita + IDMissing: ID mancante + ResourceOwnerMissing: Resource Owner mancante + Assets: + EmptyKey: Asset key vuoto + Store: + NotInitialized: Assets storage non inizializzato + NotConfigured: Assets storage non configurato + Bucket: + Internal: Errore interno nella creazione + AlreadyExists: Bucket già esistente + CreateFailed: Bucket non creato + ListFailed: I Bucket non possono essere letti + RemoveFailed: Bucket non rimosso + SetPublicFailed: Impossibile impostare Bucket + Object: + PutFailed: Oggetto non creato + GetFailed: Oggetto non può essere letto + PresignedTokenFailed: Il token non può essere creato + ListFailed: La lista degli oggetti non può essere letta + RemoveFailed: L'oggetto non può essere rimosso + Limit: + ExceedsDefault: Il limite supera quello predefinito + User: + NotFound: L'utente non è stato trovato + AlreadyExists: L'utente già esistente + NotFoundOnOrg: L'utente non è stato trovato nell'organizzazione scelta + NotAllowedOrg: L'utente non è membro dell'organizzazione richiesta + UserIDMissing: ID utente mancante + OrgIamPolicyNil: Impostazione Org IAM mancante + EmailAsUsernameNotAllowed: L'e-mail non è consentita come nome utente + Invalid: I dati utente non sono validi + DomainNotAllowedAsUsername: Il dominio è già riservato e non può essere utilizzato + AlreadyInactive: Utente già inattivo + NotInactive: L'utente non è inattivo + ShouldBeActiveOrInitial: L'utente non è attivo o inizializzato + AlreadyInitialised: L'utente è già inizializzato + NotInitialised: L'utente non è ancora inizializzato + NotLocked: L'utente non è bloccato + NoChanges: Nessun cambiamento trovato + InitCodeNotFound: Codice di inizializzazione non trovato + UsernameNotChanged: Nome utente non cambiato + Profile: + NotFound: Profilo non trovato + NotChanged: Profilo non cambiato + Invalid: Dati non sono validi + Email: + NotFound: Email non trovata + Invalid: L'e-mail non è valida + AlreadyVerified: L'e-mail è già verificata + NotChanged: Email non cambiata + Phone: + NotFound: Telefono non trovato + Invalid: Il telefono non è valido + AlreadyVerified: Telefono già verificato + Address: + NotFound: Indirizzo non trovato + NotChanged: Indirizzo non cambiato + Machine: + Key: + NotFound: Machine Key non trovato + NotHuman: L'utente deve essere personale + NotMachine: L'utente deve essere tecnico + NotAllowedToLink: L'utente non è autorizzato a collegarsi con un provider di accesso esterno + Username: + AlreadyExists: Nome utente già preso + Reservied: Il nome utente è già preso + Code: + Empty: Il codice è vuoto + NotFound: Codice non trovato + Expired: Il codice è scaduto + GeneratorAlgNotSupported: L'algoritmo del generatore non è supportato + Password: + NotFound: Password non trovato + Empty: La password è vuota + Invalid: La password non è valida + NotSet: L'utente non ha impostato una password + PasswordComplexityPolicy: + NotFound: Impostazioni di complessità password non trovati + MinLength: La password è troppo corta + MinLengthNotAllowed: La lunghezza minima non è consentita + HasLower: La password deve contenere lettere minuscole + HasUpper: La password deve contenere lettere maiuscole + HasNumber: La password deve contenere un numero + HasSymbol: La password deve contenere il simbolo + ExternalIDP: + Invalid: IDP esterno non valido + IDPConfigNotExisting: IDP non valido per questa organizzazione + NotAllowed: IDP esterno non consentito su questa organizzazione + MinimumExternalIDPNeeded: Almeno un IDP deve essere aggiunto + AlreadyExists: IDP esterno già preso + NotFound: IDP esterno non trovato + MFA: + OTP: + AlreadyReady: Multifattore OTP (OneTimePassword) è già impostato + NotExisting: Multifattore OTP (OneTimePassword) non esistente + NotReady: Multifattore OTP (OneTimePassword) non è pronto + InvalidCode: Codice non valido + U2F: + NotExisting: U2F non esistente + Passwordless: + NotExisting: Passwordless non esistente + WebAuthN: + NotFound: WebAuthN Token non trovato + BeginRegisterFailed: WebAuthN inizializzazione non riuscita + MarshalError: Errore nel marshalling + ErrorOnParseCredential: Errore nell'analisi dei dati delle credenziali + CreateCredentialFailed: Errore nella creazione delle credenziali + BeginLoginFailed: WebAuthN inizializzazione login fallito + ValidateLoginFailed: Errore nella convalidazione delle credenziali + CloneWarning: Le credenziali possono essere copiate + RefreshToken: + Invalid: Refresh Token non è valido + NotFound: Refresh Token non trovato + Org: + AlreadyExists: Nome dell'organizzazione già preso + Invalid: L'organizzazione non è valida + AlreadyDeactivated: L'organizzazione è già disattivata + AlreadyActive: L'organizzazione è già attiva + Empty: L'organizzazione è vuota + NotFound: Organizzazione non trovata + NotChanged: Organizzazione non cambiata + InvalidDomain: Dominio non valido + DomainMissing: Dominio mancante + DomainNotOnOrg: Il dominio non esistente nell'organizzazione + DomainNotVerified: Il dominio non è verificato + DomainAlreadyVerified: Il dominio è già verificato + DomainVerificationTypeInvalid: Il tipo di verifica del dominio non è valido + DomainVerificationMissing: La verifica del dominio non è ancora iniziata + DomainVerificationFailed: Verifica del dominio fallita + PrimaryDomainNotDeletable: Il dominio primario non deve essere cancellato + DomainNotFound: Dominio non trovato + MemberIDMissing: ID membro mancante + MemberNotFound: Membro non trovato + InvalidMember: Il membro dell'organizzazione non è valido + UserIDMissing: ID utente mancante + PolicyAlreadyExists: Impostazione già esistente + PolicyNotExisting: Impostazione non esistente + IdpInvalid: La configurazione dell'IDP non è valida + IdpNotExisting: La configurazione IDP non esistente + OIDCConfigInvalid: La configurazione OIDC IDP non è valida + IdpIsNotOIDC: La configurazione IDP non è di tipo oidc + Domain: + AlreadyExists: Il dominio già esistente + IDP: + InvalidSearchQuery: Parametro di ricerca non valido + LoginPolicy: + NotFound: Impostazioni di accesso non trovati + Invalid: Impostazioni di accesso non sono validi + NotExisting: Impostazioni di accesso non esistenti + AlreadyExists: Impostazioni di accesso già esistenti + IdpProviderAlreadyExisting: IDP già esistente + IdpProviderNotExisting: IDP non esistente + MFA: + AlreadyExists: Multifactor già esistente + NotExisting: Multifattore non esistente + Unspecified: Multifattore non valido + MailTemplate: + NotFound: Mail template predefinito non trovato + NotChanged: Mail template predefinito non è stato cambiato + AlreadyExists: Mail template predefinito già esistente + Invalid: Mail template predefinito non è valido + CustomMessageText: + NotFound: Testo predefinito non trovato + NotChanged: Il testo predefinito non è stato cambiato + AlreadyExists: Il testo predefinito già eistente + Invalid: Il testo predefinito non è valido + PasswordComplexity: + NotFound: Impostazioni di complessità della password non trovati + Empty: Mancano le impostazioni di complessità della password + NotExisting: Impostazioni di complessità della password non esistenti + AlreadyExists: Impostazioni di complessità della password sono già esistenti + PasswordLockout: + NotFound: Impostazioni di blocco della password non trovati + Empty: Mancano le impostazioni di blocco della password + NotExisting: Le impostazioni di blocco della password non esistenti + AlreadyExists: Le impostazioni di blocco della password sono già esistenti + PasswordAge: + NotFound: Impostazioni di validità della password + Empty: Impostazioni di validità della password mancanti + NotExisting: Impostazioni di validità della password non esistenti + AlreadyExists: Impostazioni di validità della password sono già esistenti + OrgIAM: + Empty: Mancano le impostazioni Org IAM + NotExisting: Impostazioni Org IAM non esistenti + AlreadyExists: Impostazioni Org IAM già esistenti + Project: + ProjectIDMissing: ID del progetto mancante + AlreadyExists: Il progetto è già stato creato nell'organizzazione + OrgNotExisting: L'organizzazione non esistente + UserNotExisting: L'utente non esistente + CouldNotGenerateClientSecret: Impossibile generare il segreto del cliente + Invalid: Il progetto non è valido + NotActive: Il progetto non è attivo + NotInactive: Il progetto non è disattivato + NotFound: Progetto non trovato + UserIDMissing: ID utente mancante + Member: + NotFound: Membro del progetto non trovato + Invalid: Il membro del progetto non è valido + AlreadyExists: Il membro del progetto già esistente + NotExisting: Il membro del progetto non esistente + MinimumOneRoleNeeded: Almeno un ruolo deve essere aggiunto + Role: + AlreadyExists: Ruolo è già esistente + Invalid: Ruolo non è valido + NotExisting: Ruolo non esistente + IDMissing: ID mancante + App: + AlreadyExists: L'applicazione già esistente + NotFound: Applicazione non trovata + Invalid: Applicazione non valida + NotExisting: L'applicazione non esiste + NotActive: L'applicazione non è attiva + NotInactive: L'applicazione non è inattiva + OIDCConfigInvalid: La configurazione OIDC non è valida + APIConfigInvalid: La configurazione API non è valida + IsNotOIDC: L'applicazione non è di tipo oidc + IsNotAPI: L'applicazione non è di tipo API + OIDCAuthMethodNoSecret: Il metodo di autorizzazione OIDC scelto non richiede un segreto + APIAuthMethodNoSecret: Il metodo di autorizzazione API scelto non richiede un segreto + AuthMethodNoPrivateKeyJWT: Il metodo di autorizzazione scelto non richiede una chiave + ClientSecretInvalid: Il segreto del cliente non è valido + RequiredFieldsMissing: Mancano alcuni campi obbligatori + Grant: + AlreadyExists: Grant del progetto già esistente + NotFound: Grant non trovato + Invalid: Grant del progetto non è valido + NotExisting: Grant del progetto non esistente + HasNotExistingRole: Uno dei ruoli assegnati non è esistente nel progetto + NotActive: Grant del progetto non è attivo + NotInactive: Grant del progetto non è inattivo + UserIDMisisng: ID utente mancante + IAM: + Member: + RolesNotChanged: I ruoli non sono stati cambiati + MemberInvalid: Il membro non è valido + MemberAlreadyExisting: Il membro già esistente + MemberNotExisting: Il membro non esistente + IDMissing: ID mancante + GlobalOrgMissing: Manca un'organizzazione globale + GlobalOrgAlreadySet: L'organizzazione globale è già stata impostata + IAMProjectIDMissing: Manca l'ID del progetto IAM + IamProjectAlreadySet: L'ID del progetto IAM è già stato impostato + IdpInvalid: La configurazione dell'IDP non è valida + IdpNotExisting: La configurazione IDP non esiste + OIDCConfigInvalid: La configurazione OIDC IDP non è valida + IdpIsNotOIDC: La configurazione IDP non è di tipo OIDC + LoginPolicyInvalid: Impostazioni di accesso non sono validi + LoginPolicyNotExisting: Impostazioni di accesso non esistenti + IdpProviderInvalid: IDP non è valido + LoginPolicy: + NotFound: Impostazioni di accesso predefinite non trovate + NotChanged: Le impostazioni di accesso predefinite non sono state cambiate + NotExisting: Impostazioni di accesso predefinite non esistenti + AlreadyExists: Impostazioni di accesso predefinite già esistenti + MFA: + AlreadyExists: Multifattore già esistente + NotExisting: Multifattore non esistente + Unspecified: Multifattore non valido + IDP: + AlreadyExists: IDP già esistente + NotExisting: IDP non esiste + Invalid: IDP non valido + IDPConfig: + AlreadyExists: La configurazione del IDP già esistente + NotInactive: Configurazione del IDP non inattiva + NotActive: Configurazione del IDP non attiva + LabelPolicy: + NotFound: Private Labelling predefinita non trovata + NotChanged: Private Labelling non è stata cambiata + MailTemplate: + NotFound: Mail template predefinito non trovato + NotChanged: Mail template predefinito non è stato cambiato + AlreadyExists: Mail template predefinito già esistente + Invalid: Mail template predefinito non è valido + CustomMessageText: + NotFound: Testo del mail predefinito non trovato + NotChanged: Il testo predefinito del mail non è stato cambiato + AlreadyExists: Il testo del mail predefinito già esistente + Invalid: Il testo del mail predefinito non è valido + PasswordComplexityPolicy: + NotFound: Impostazioni di complessità della password predefinite non trovati + NotExisting: Impostazioni di complessità della password predefinite non esistenti + AlreadyExists: Impostazioni di complessità della password predefinite già esistenti + Empty: Le impostazioni di complessità della password predefinite non sono state trovate + NotChanged: Le impostazioni di complessità della password predefinite non sono state cambiate + PasswordAgePolicy: + NotFound: Le impostazioni di validità della password predefinite non trovate + NotExisting: Le impostazioni di validità della password predefinite non esistono + AlreadyExists: Le impostazioni di validità della password predefinite già esistenti + Empty: Le impostazioni di validità della password predefinite vuote + NotChanged: Le impostazioni di validità della password non sono state cambiate + PasswordLockoutPolicy: + NotFound: Impostazioni di blocco della password predefinite non trovate + NotExisting: Impostazioni di blocco della password predefinite non esistenti + AlreadyExists: Impostazioni di blocco della password predefinite già esistenti + Empty: Impostazioni di blocco della password predefinite sono vuote + NotChanged: Le impostazioni di blocco della password predefinite non sono state cambiate + OrgIAMPolicy: + NotFound: Impostazioni Org IAM non trovate + Empty: Impostazioni Org IAM mancanti + NotExisting: Impostazioni Org IAM non esistenti + AlreadyExists: Impostazioni Org IAM già esistenti + NotChanged: Impostazioni Org IAM non sono state cambiate + Policy: + AlreadyExists: Impostazioni già esistenti + Label: + Invalid: + PrimaryColor: Il colore primario non è un valore di colore HEX valido + BackgroundColor: Il colore di sfondo non è un valore di colore HEX valido + WarnColor: Warn color non è un valore di colore HEX valido + FontColor: Il colore del carattere non è un valore di colore HEX valido + PrimaryColorDark: Il colore primario (modo scuro) non è un valore di colore HEX valido + BackgroundColorDark: Il colore di sfondo (modo scuro) non è un valore di colore HEX valido + WarnColorDark: Warn color (dark mode) non è un valore di colore HEX valido + FontColorDark: Il colore del carattere (modalità scura) non è un valore di colore HEX valido + UserGrant: + AlreadyExists: User Grant già esistente + NotFound: User Grant non trovato + Invalid: User Grant non è valido + NotChanged: User Grant non è stata cambiato + IDMissing: ID mancante + NotActive: User Grant non è attivo + NotInactive: User Grant non è disattivato + NoPermissionForProject: L'utente non ha permessi su questo progetto + RoleKeyNotFound: Ruolo non trovato + Member: + AlreadyExists: Il membro è già esistente + IDPConfig: + AlreadyExists: La configurazione IDP con questo nome già esistente + NotExisting: La configurazione del IDP non esiste + Changes: + NotFound: Nessuna storia trovata + Token: + NotFound: Token non trovato + UserSession: + NotFound: Sessione non trovata + Key: + ExpireBeforeNow: La data di scadenza è passata + Login: + LoginPolicy: + MFA: + ForceAndNotConfigured: Multifactor è configurato come richiesto, ma nessun provider è configurato. Contatta il tuo amministratore di sistema. + Step: + Started: + AlreadyExists: Il passo iniziato già esistente + Done: + AlreadyExists: Il passo fatto già esistente + Features: + NotChanged: La caratteristica non è cambiata + CustomText: + AlreadyExists: Il testo personalizzato già esistente + Invalid: Testo personalizzato non valido + NotFound: Testo personalizzato non trovato + TranslationFile: + ReadError: Errore nella lettura del file di traduzione + MergeError: Il file di traduzione non può essere unito alle traduzioni personalizzate + NotFound: Il file di traduzione non esiste + MetaData: + NotFound: Metadati non trovati + NoData: L'elenco dei metadati è vuoto + Invalid: I metadati non sono validi + KeyNotExisting: Una o più chiavi non esistono + Action: + Invalid: L'azione non è valida + NotFound: L'azione non trovata + NotActive: L'azione non è attiva + NotInactive: L'azione non è inattiva + Flow: + FlowTypeMissing: FlowType mancante + Empty: Flow è già vuoto + WrongTriggerType: TriggerType non è valido + NoChanges: Nessun cambiamento + ActionIDsNotExist: Gli ActionID non esistono + Query: + CloseRows: Lo statement SQL non può essere terminato + SQLStatement: Lo statement SQL non può essere creato + InvalidRequest: La richiesta non è valida +EventTypes: + user: + added: Utente aggiunto + selfregistered: L'utente si è registrato + initialization: + code: + added: Codice di inizializzazione generato + sent: Codice di inizializzazione inviato + check: + succeeded: Controllo dell'inizializzazione riuscito + failed: Controllo dell'inizializzazione fallito + token: + added: Access Token creato + username: + reserved: Nome utente riservato + released: Nome utente rilasciato + email: + reserved: Indirizzo e-mail riservato + released: Indirizzo e-mail rilasciato + changed: Indirizzo e-mail cambiato + verified: Indirizzo e-mail verificato + verification: + failed: Verifica dell'indirizzo e-mail non riuscita + code: + added: Codice di verifica dell'indirizzo e-mail generato + sent: Codice di verifica dell'indirizzo e-mail inviato + machine: + added: Utente tecnico aggiunto + changed: Utente tecnico cambiato + key: + added: Chiave aggiunta + removed: Chiave rimossa + human: + added: Persona aggiunta + selfregistered: Persona registrata + avatar: + added: Avatar aggiunto + removed: Avatar rimosso + initialization: + code: + added: Codice di inizializzazione generato + sent: Codice di inizializzazione inviato + check: + succeeded: Controllo dell'inizializzazione riuscito + failed: Controllo dell'inizializzazione fallito + username: + reserved: Nome utente riservato + released: Nome utente rilasciato + email: + changed: Indirizzo e-mail cambiato + verified: Indirizzo e-mail verificato + verification: + failed: Verificazione dell'indirizzo e-mail non riuscita + code: + added: Codice di verifica generato + sent: Codice di verifica inviato + password: + changed: Password cambiata + code: + added: Codice password generato + sent: Codice password inviato + check: + succeeded: Controllo della password riuscito + failed: Controllo della password fallito + externallogin: + check: + succeeded: Accesso esterno riuscito + externalidp: + added: IDP esterno aggiunto + removed: IDP esterno rimosso + cascade: + removed: Cascata IDP rimossa + phone: + changed: Numero di telefono cambiato + verified: Numero di telefono verificato + verification: + failed: Verificazione del numero di telefono non riuscita + code: + added: Codice del numero di telefono generato + sent: Codice del numero di telefono inviato + removed: Numero di telefono rimosso + profile: + changed: Profilo cambiato + address: + changed: Indirizzo cambiato + mfa: + otp: + added: OTP aggiunto + verified: OTP verificato + removed: OTP rimosso + check: + succeeded: Controllo OTP riuscito + failed: Controllo OTP fallito + u2f: + token: + added: Aggiunto il U2F Token + verified: U2F Token verificato + removed: U2F Token rimosso + begin: + login: Controllo U2F avviato + check: + succeeded: Controllo U2F riuscito + failed: Controllo U2F fallito + signcount: + changed: Il checksum del U2F Token è stato cambiato + init: + skipped: Inizializzazione saltata + passwordless: + token: + added: Aggiunto il token per l'autenticazione passwordless + verified: Token per l'autenticazione passwordless verificato + removed: Token per l'autenticazione passwordless rimosso + begin: + login: Avviata l'autenticazione passwordless + check: + succeeded: Controllo dell'autenticazione passwordless riuscito + failed: Controllo dell'autenticazione passwordless fallito + signcount: + changed: Il checksum è stato cambiato + initialization: + code: + added: Aggiunto il codice di inizializzazione + sent: Codice di inizializzazione inviato + requested: Richiesta del codice di inizializzazione + check: + succeeded: Codice di inizializzazione controllato con successo + failed: Controllo del codice di inizializzazione fallito + signed: + out: L'utente è uscito + refresh: + token: + added: Refresh Token creato + renewed: Refresh Token rinnovato + removed: Refresh Token rimosso + locked: Utente bloccato + unlocked: Utente sbloccato + deactivated: Utente disattivato + reactivated: Utente riattivato + removed: Utente rimosso + password: + changed: Password cambiata + code: + added: Codice password generato + sent: Codice password inviato + check: + succeeded: Controllo della password riuscito + failed: Controllo della password fallito + phone: + changed: Numero di telefono cambiato + verified: Numero di telefono verificato + verification: + failed: Verifica del numero di telefono non riuscita + code: + added: Codice del numero di telefono generato + sent: Codice del numero di telefono inviato + profile: + changed: Profilo utente cambiato + address: + changed: Indirizzo utente cambiato + mfa: + otp: + added: OTP aggiunto + verified: OTP verificato + removed: OTP rimosso + check: + succeeded: Controllo OTP riuscito + failed: Controllo OTP fallito + init: + skipped: Inizializzazione saltata + signed: + out: L'utente è uscito + grant: + added: Autorizzazione aggiunta + changed: Autorizzazione cambiata + removed: Autorizzazione rimossa + deactivated: Autorizzazione disattivata + reactivated: Autorizzazione riattivata + reserved: Autorizzazione riservata + released: Autorizzazione rilasciata + cascade: + removed: Autorizzazione rimossa + changed: Autorizzazione cambiata + org: + added: Organizzazione aggiunta + changed: Organizzazione cambiata + deactivated: Organizzazione disattivata + reactivated: Organizzazione riattivata + removed: Organizzazione rimossa + domain: + added: Dominio aggiunto + verification: + added: Aggiunta la verifica del dominio + failed: Verifica del dominio fallita + verified: Dominio verificato + removed: Dominio rimosso + primary: + set: Set di dominio primario + reserved: Dominio riservato + released: Dominio rilasciato + features: + set: Caratteristica aggiunta + removed: Caratteristica rimossa + name: + reserved: Nome dell'organizzazione riservato + released: Nome dell'organizzazione rilasciata + member: + added: Membro dell'organizzazione aggiunto + changed: Membro dell'organizzazione cambiato + removed: Membro dell'organizzazione rimosso + cascade: + removeD: Cascata di membri dell'organizzazione rimossa + iam: + policy: + added: Impostazioni IAM aggiunti + changed: Impostazioni IAM cambiate + removed: Impostazioni IAM rimosse + idp: + config: + added: Configurazione IDP aggiunta + changed: Configurazione IDP cambiata + removed: Configurazione IDP rimossa + deactivated: Configurazione IDP disattivata + reactivated: Configurazione IDP riattivata + oidc: + config: + added: Aggiunta la configurazione IDP OIDC + changed: Configurazione IDP OIDC modificata + saml: + config: + added: Aggiunta la configurazione IDP SAML + changed: Configurazione IDP SAML modificata + customtext: + set: Testo personalizzato salvato + removed: Testo personalizzato rimosso + template: + removed: Template personalizzato rimosso + policy: + login: + added: Le mpostazioni di accesso sono state aggiunte con successo. + changed: Impostazioni di accesso modificate + removed: Impostazioni di accesso rimosse + idpprovider: + added: IDP aggiunto alle impostazioni di accesso + removed: IDP rimosso dalle impostazioni di accesso + secondfactor: + added: Secondo fattore aggiunto alle impostazioni di accesso + removed: Secondo fattore rimosso dalle impostazioni di accesso + multifactor: + added: Aggiunto il fattore multiplo alle impostazioni di accesso + removed: Fattore multiplo rimosso dalle impostazioni di accesso + password: + complexity: + added: Le impostazioni di complessità delle password sono state aggiunte con successo + changed: Le impostazioni di complessità delle password sono state cambiate + removed: Le impostazioni di complessità della password sono state rimosse + age: + added: Le impostazioni di validità della password + changed: Le impostazioni di validità della password sono state cambiate + removed: Le impostazioni di validità della password sono state rimosse con successo + lockout: + added: Le impostazioni di blocco della password sono state aggiunte con successo. + changed: Le impostazioni di blocco della password sono state cambiate + removed: Le impostazioni di blocco della password sono state rimosse con successo + label: + added: Impostazioni Private Labelling aggiunte + changed: Impostazioni Private Labelling cambiate + activated: Impostazioni Private Labelling attivate + removed: Impostazioni Private Labelling rimosse + logo: + added: Logo aggiunto + removed: Logo rimosso + dark: + added: Logo (modalità scura) aggiunto + removed: Logo (modalità scura) rimosso + icon: + added: Icona aggiunta + removed: Icona rimossa + dark: + added: Icona (modalità scura) aggiunta + removed: Icona (modalità scura) rimossa + font: + added: Font aggiunto + removed: Font rimosso + assets: + removed: Asset rimosse + privacy: + added: Informativa sulla privacy e termini e condizioni aggiunti + changed: Informativa sulla privacy e termini e condizioni cambiati + removed: Informativa sulla privacy e termini e condizioni rimossi + flow: + trigger_actions: + set: azioni salvate + cascade: + removed: Azioni a cascata rimosse + removed: Azioni rimosse + project: + added: Progetto aggiunto + changed: Progetto cambiato + deactivated: Progetto disattivato + reactivated: Progetto riattivato + removed: Progetto rimosso + member: + added: Membro del progetto aggiunto + changed: Membro del progetto cambiato + removed: Membro del progetto rimosso + cascade: + removeD: Cascata di membri del progetto rimossa + role: + added: Ruolo del progetto aggiunto + changed: Il ruolo del progetto è cambiato + removed: Ruolo del progetto rimosso + grant: + added: Grant aggiunto + changed: Grant cambiato + removed: Grant rimosso + deactivated: Grant disattivato + reactivated: Grant riattivato + cascade: + changed: Grant cambiato + member: + added: Grant Member aggiunto + changed: Grant Member cambiato + removed: Grant Member rimosso + cascade: + removed: Cascata di Grant Member rimossa + application: + added: Applicazione aggiunta + changed: Applicazione cambiata + removed: Applicazione rimossa + deactivated: Applicazione disattivata + reactivated: Applicazione riattivata + oidc: + secret: + check: + succeeded: Validazione OIDC Client Secret riuscita + failed: VAidazione OIDC Client Secret fallita + key: + added: Chiave di applicazione aggiunta + removed: Chiave di applicazione rimossa + config: + oidc: + added: Configurazione OIDC aggiunta + changed: Configurazione OIDC modificata + secret: + changed: Segreto OIDC cambiato + api: + added: Configurazione API aggiunta + changed: Configurazione API modificata + secret: + changed: Segreto API cambiato + policy: + password: + complexity: + added: Le impostazioni di complessità delle password sono state aggiunte con successo + changed: Le impostazioni di complessità delle password sono state cambiate + age: + added: Le impostazioni di validità della password sono state aggiunte con successo. + changed: Le impostazioni di validità della password sono state cambiate + lockout: + added: Le impostazioni di blocco della password sono state aggiunte. + changed: Le impostazioni di blocco della password sono state cambiate. + iam: + setup: + started: Avviato il setup di ZITADEL + done: setup di ZITADEL fatto + global: + org: + set: Organizzazione glabale di ZITADEL salvata + project: + iam: + set: progetto ZITADEL salvato + member: + added: ZITADEL membro aggiunto + changed: ZITADEL membro cambiato + removed: ZITADEL membro rimosso + cascade: + removeD: Membro ZITADEL rimosso a cascata + idp: + config: + added: Configurazione IDP aggiunta + changed: Configurazione IDP cambiata + removed: Configurazione IDP rimossa + deactivated: Configurazione IDP disattivata + reactivated: Configurazione IDP riattivata + oidc: + config: + added: Aggiunta la configurazione IDP OIDC + changed: Configurazione IDP OIDC modificata + saml: + config: + added: Aggiunta la configurazione IDP SAML + changed: Configurazione IDP SAML modificata + policy: + login: + added: Le impostazioni di accesso predefinite sono state aggiunte. + changed: Le impostazioni di accesso predefinite sono state cambiate. + idpprovider: + added: IDP aggiunto alle impostazioni di accesso predefinite + removed: IDP rimosso dalle impostazioni di accesso predefinite + label: + added: Le impostazioni Private Labelling sono state aggiunte. + changed: Le impostazioni Private Labelling sono state cambiate. + activated: Private Labelling attivato + logo: + added: Logo aggiunto + removed: Logo rimosso + dark: + added: Logo (modalità scura) aggiunto + removed: Logo (modalità scura) rimosso + icon: + added: Icona aggiunta + removed: Icona rimossa + dark: + added: Icona (modalità scura) aggiunta + removed: Icona (modalità scura) rimossa + font: + added: Font aggiunto + removed: Font rimosso + assets: + removed: Asset rimosse + key_pair: + added: Keypair aggiunto + action: + added: Azione aggiunta + changed: Azione cambiata + deactivated: Azione disattivata + reactivated: Azione riattivata + removed: Azione rimossa +Application: + OIDC: + V1: + NotCompliant: La tua configurazione non è conforme e differisce dallo standard OIDC 1.0. + NoRedirectUris: Deve essere registrato almeno un URI di reindirizzamento. + NotAllCombinationsAreAllowed: La configurazione è conforme, ma non tutte le combinazioni possibili sono permesse. + Code: + RedirectUris: + HttpOnlyForWeb: Grant Type Implicit consente reindirizzamenti http solo per AppType Web + CustomOnlyForNative: Grant Type permette solo URI di reindirizzamento personalizzati per AppType native (ad esempio appname:// ) + Implicit: + RedirectUris: + CustomNotAllowed: Grant Type non permette URI di reindirizzamento personalizzati + HttpNotAllowed: Grant Type implicito non permette URI di reindirizzamento http + HttpLocalhostOnlyForNative: http://localhost redirect uri è consentito solo per le applicazioni native. + Native: + AuthMethodType: + NotNone: Le applicazioni native dovrebbero avere authmethodtype none. + RedirectUris: + MustBeHttpLocalhost: Gli URI di reindirizzamento devono iniziare con il proprio protocollo, http://127.0.0.1, http://[::1] o http://localhost. + UserAgent: + AuthMethodType: + NotNone: L'app agente utente dovrebbe avere authmethodtype none. + GrantType: + Refresh: + NoAuthCode: Refresh Token consentito solo in combinazione con Authorization Code. diff --git a/internal/ui/login/static/i18n/en.yaml b/internal/ui/login/static/i18n/en.yaml index 021e18d2c4..96c62c0b8c 100644 --- a/internal/ui/login/static/i18n/en.yaml +++ b/internal/ui/login/static/i18n/en.yaml @@ -103,7 +103,7 @@ InitMFAU2F: ErrorRetry: Retry, create a new challenge or choose a different method. InitMFADone: - Title: Multifcator Verification done + Title: Multifactor Verification done Description: Multifactor verification successfully done. The multifactor has to be entered on each login. NextButtonText: next CancelButtonText: cancel @@ -114,7 +114,7 @@ MFAProvider: ChooseOther: or choose an other option VerifyMFAOTP: - Title: Verify Multificator + Title: Verify Multifactor Description: Verify your multifactor CodeLabel: Code NextButtonText: next @@ -122,8 +122,8 @@ VerifyMFAOTP: VerifyMFAU2F: Title: Multifactor Verification Description: Verify your multifactor U2F / WebAuthN token - NotSupported: WebAuthN wird durch deinen Browser nicht unterstützt. Stelle sicher, dass du die aktuelle Version installiert hast oder nutze einen anderen (z.B. Chrome, Safari, Firefox) - ErrorRetry: Versuche es erneut, erstelle eine neue Abfrage oder wähle einen andere Methode. + NotSupported: WebAuthN is not supported by your browser. Make sure you are using the newest version or change your browser to a supported one (Chrome, Safari, Firefox) + ErrorRetry: Retry, create a new request or choose a other method. ValidateTokenButtonText: Validate Token Passwordless: @@ -173,7 +173,7 @@ PasswordChangeDone: PasswordResetDone: Title: Reset link set - Description: Check your email to to reset your password. + Description: Check your email to reset your password. NextButtonText: next EmailVerification: diff --git a/internal/ui/login/static/i18n/it.yaml b/internal/ui/login/static/i18n/it.yaml new file mode 100644 index 0000000000..3f13e28c60 --- /dev/null +++ b/internal/ui/login/static/i18n/it.yaml @@ -0,0 +1,365 @@ +Login: + Title: Bentornato! + Description: Inserisci i tuoi dati di accesso. + TitleLinking: Accesso per il collegamento degli utenti + DescriptionLinking: Inserisci i tuoi dati di accesso per collegare il tuo utente esterno con un utente ZITADEL. + LoginNameLabel: Nome di accesso + UsernamePlaceHolder: nome utente + LoginnamePlaceHolder: nomeutente@dominio + ExternalUserDescription: Accedi con un utente esterno. + MustBeMemberOfOrg: 'L''utente deve essere membro dell''organizzazione {{.OrgName}}.' + RegisterButtonText: registrare + NextButtonText: Avanti + +SelectAccount: + Title: Seleziona l'account + Description: Usa il tuo account ZITADEL + TitleLinking: Seleziona l'account per il collegamento dell'utente + DescriptionLinking: Seleziona il tuo account da collegare al tuo utente esterno. + OtherUser: Altro utente + SessionState0: attivo + SessionState1: inattivo + MustBeMemberOfOrg: 'L''utente deve essere membro dell''organizzazione {{.OrgName}}.' + +Password: + Title: Password + Description: Inserisci i tuoi dati di accesso. + PasswordLabel: Password + MinLength: Lunghezza minima + HasUppercase: Lettera maiuscola + HasLowercase: Lettera minuscola + HasNumber: Numero + HasSymbol: Simbolo + Confirmation: Conferma password + ResetLinkText: Password dimenticata? + BackButtonText: indietro + NextButtonText: Avanti + +UsernameChange: + Title: Cambia nome utente + Description: Imposta il tuo nuovo nome utente + UsernameLabel: Nome utente + CancelButtonText: annulla + NextButtonText: Avanti + +UsernameChangeDone: + Title: Nome utente cambiato + Description: Il tuo nome utente è stato cambiato con successo. + NextButtonText: Avanti + +InitPassword: + Title: Impostare la password + Description: Hai ricevuto un codice, che devi inserire nel modulo sottostante, per impostare la tua nuova password. + CodeLabel: Codice + NewPasswordLabel: Nuova password + NewPasswordConfirmLabel: Conferma la password + ResendButtonText: rispedisci + NextButtonText: Avanti + +InitPasswordDone: + Title: Set di password + Description: Password impostata con successo + NextButtonText: Avanti + CancelButtonText: annulla + +InitUser: + Title: Attivare l'utente + Description: Hai ricevuto un codice, che devi inserire nel modulo sottostante, per verificare la tua email e impostare la tua nuova password. + CodeLabel: Codice + NewPasswordLabel: Nuova password + NewPasswordConfirmLabel: Conferma la password + NextButtonText: Avanti + ResendButtonText: rispedisci + +InitUserDone: + Title: Utente attivato + Description: Email verificata e password impostata con successo + NextButtonText: Avanti + CancelButtonText: annulla + +InitMFAPrompt: + Title: Configurazione a più fattori + Description: Vuoi impostare l'autenticazione a più fattori? + Provider0: OTP (One Time Password) + Provider1: U2F (2° fattore universale) + NextButtonText: Avanti + SkipButtonText: salta + +InitMFAOTP: + Title: Verifica a più fattori + Description: Verifica il tuo multifattore. + OTPDescription: Scannerizza il codice con la tua app di autenticazione (ad esempio Google Authenticator) o copia la chiave segreta e inserisci il codice generato nel campo sottostante. + SecretLabel: Chiave + CodeLabel: Codice + NextButtonText: Avanti + CancelButtonText: annulla + +InitMFAU2F: + Title: Configurazione a più fattori U2F / WebAuthN + Description: Aggiungi il tuo Token fornendo un nome e cliccando sul pulsante 'Registra'. + TokenNameLabel: Nome del token / dispositivo + NotSupported: WebAuthN non è supportato dal tuo browser. Assicurati che sia aggiornato o usane uno diverso (ad esempio Chrome, Safari, Firefox) + RegisterTokenButtonText: Registra + ErrorRetry: Riprova, crea una nuova richiesta o scegli un metodo diverso. + +InitMFADone: + Title: Verificazione a più fattori effettuata + Description: La verificazione del multifattore eseguita con successo. Il multifattore è richiesto ad ogni login. + NextButtonText: Avanti + CancelButtonText: annulla + +MFAProvider: + Provider0: OTP (One Time Password) + Provider1: U2F (2° fattore universale) + ChooseOther: o scegli un'altra opzione + +VerifyMFAOTP: + Title: Verificazione del Multificator + Description: Verifica il tuo multifattore + CodeLabel: Codice + NextButtonText: Avanti + +VerifyMFAU2F: + Title: Verificazione a più fattori + Description: Verifica il tuo token U2F / WebAuthN + NotSupported: WebAuthN non è supportato dal tuo browser. Assicurati di avere l'ultima versione installata o usane una diversa (per esempio Chrome, Safari, Firefox). + ErrorRetry: Prova di nuovo, crea una nuova richiesta o scegli un metodo diverso. + ValidateTokenButtonText: Verifica + +Passwordless: + Title: Accesso senza password + Description: Verifica il tuo token + NotSupported: WebAuthN non è supportato dal tuo browser. Assicurati che sia aggiornato o usane uno diverso (ad esempio Chrome, Safari, Firefox) + ErrorRetry: Riprova, crea una nuova richiesta o scegli un metodo diverso. + LoginWithPwButtonText: Accedi con password + ValidateTokenButtonText: Verifica + +PasswordlessPrompt: + Title: Autenticazione passwordless + Description: Vuoi impostare il login senza password? + DescriptionInit: Devi impostare il login senza password. Usa il link che ti è stato inviato per registrare il tuo dispositivo. + PasswordlessButtonText: Continua + NextButtonText: Avanti + SkipButtonText: salta + +PasswordlessRegistration: + Title: Configurazione dell'autenticazione senza password + Description: Aggiungi il tuo Token fornendo un nome e poi cliccando sul pulsante 'Registra'. + TokenNameLabel: Nome del token / dispositivo + NotSupported: WebAuthN non è supportato dal tuo browser. Assicurati che sia aggiornato o usane uno diverso (ad esempio Chrome, Safari, Firefox) + RegisterTokenButtonText: Registra + ErrorRetry: Riprova, crea una nuova richiesta o scegli un metodo diverso. + +PasswordlessRegistrationDone: + Title: Configurazione dell'autenticazione senza password + Description: Token per lautenticazione passwordless aggiunto con successo. + DescriptionClose: Ora puoi chiudere questa finestra. + NextButtonText: Avanti + CancelButtonText: annulla + +PasswordChange: + Title: Reimposta password + Description: Cambia la tua password. Inserisci la tua vecchia e la nuova password. + OldPasswordLabel: Vecchia password + NewPasswordLabel: Nuova password + NewPasswordConfirmLabel: Conferma della password + CancelButtonText: annulla + NextButtonText: Avanti + +PasswordChangeDone: + Title: Reimposta password + Description: La tua password è stata cambiata con successo. + NextButtonText: Avanti + +PasswordResetDone: + Title: Link per il cambiamento inviato + Description: Controlla la tua email per reimpostare la tua password. + NextButtonText: Avanti + +EmailVerification: + Title: Verifica email + Description: Ti abbiamo inviato un'e-mail per verificare il tuo indirizzo. Inserisci il codice nel campo sottostante. + CodeLabel: Codice + NextButtonText: Avanti + ResendButtonText: rispedisci + +EmailVerificationDone: + Title: Verificazione email effettuata + Description: La tua email è stata verificata con successo. + NextButtonText: Avanti + CancelButtonText: annulla + LoginButtonText: Accedi + +RegisterOption: + Title: Opzioni di registrazione + Description: Scegli come vuoi registrarti + RegisterUsernamePasswordButtonText: Con nome utente e password + ExternalLoginDescription: o registrarsi con un utente esterno + +RegistrationUser: + Title: Registrazione + Description: Inserisci i tuoi dati utente. La tua email sarà usata come nome di accesso. + DescriptionOrgRegister: Inserisci i tuoi dati utente. + EmailLabel: email + UsernameLabel: Nome utente + FirstnameLabel: Nome + LastnameLabel: Cognome + LanguageLabel: Lingua + German: Tedesco + English: Inglese + GenderLabel: Genere + Female: Femminile + Male: Maschile + Diverse: diverso / X + PasswordLabel: Password + PasswordConfirmLabel: Conferma della password + TosAndPrivacyLabel: Termini di servizio + TosConfirm: Accetto i + TosLinkText: Termini di servizio + TosConfirmAnd: e + PrivacyLinkText: l'informativa sulla privacy + ExternalLogin: o registrati con un utente esterno + BackButtonText: indietro + NextButtonText: Avanti + +ExternalRegistrationUserOverview: + Title: Registrazione utente esterno + Description: Abbiamo preso i tuoi dati utente dal provider selezionato. Ora puoi cambiarli o completarli. + EmailLabel: E-mail + UsernameLabel: Nome utente + FirstnameLabel: Nome + LastnameLabel: Cognome + NicknameLabel: Soprannome + PhoneLabel: Numero di telefono + LanguageLabel: Lingua + German: Tedesco + English: Inglese + TosAndPrivacyLabel: Termini di servizio + TosConfirm: Accetto i + TosLinkText: Termini di servizio + TosConfirmAnd: e + PrivacyLinkText: l'informativa sulla privacy + ExternalLogin: o registrati con un utente esterno + BackButtonText: indietro + NextButtonText: salva + +RegistrationOrg: + Title: Registrazione dell'organizzazione + Description: Inserisci il tuo nome di organizzazione e i tuoi dati utente. + OrgNameLabel: Nome dell'organizzazione + EmailLabel: E-mail + UsernameLabel: Nome utente + FirstnameLabel: Nome + LastnameLabel: Cognome + PasswordLabel: Password + PasswordConfirmLabel: Conferma della password + TosAndPrivacyLabel: Termini di servizio + TosConfirm: Accetto i + TosLinkText: Termini di servizio + TosConfirmAnd: e + PrivacyLinkText: l'informativa sulla privacy + SaveButtonText: Salva + +LoginSuccess: + Title: Accesso riuscito + AutoRedirectDescription: Sarai reindirizzato automaticamente alla tua applicazione. In caso contrario, clicca sul pulsante sottostante. Dopo puoi chiudere la finestra. + RedirectedDescription: Ora puoi chiudere la finestra. + NextButtonText: Avanti + +LogoutDone: + Title: Disconnesso + Description: Ti sei disconnesso con successo. + LoginButtonText: Accedi + +LinkingUsersDone: + Title: Collegamento utente + Description: Collegamento fatto. + CancelButtonText: annulla + NextButtonText: Avanti + +ExternalNotFoundOption: + Title: Utente esterno + Description: Utente esterno non trovato. Vuoi collegare il tuo utente o registrarne uno nuovo automaticamente. + LinkButtonText: Link + AutoRegisterButtonText: Registra automaticamente + TosAndPrivacyLabel: Termini di servizio + TosConfirm: Accetto i + TosLinkText: Termini di servizio + TosConfirmAnd: e + PrivacyLinkText: l'informativa sulla privacy + +Footer: + PoweredBy: Alimentato da + Tos: Termini di servizio + PrivacyPolicy: l'informativa sulla privacy + Help: Aiuto + HelpLink: 'https://docs.zitadel.ch/docs/manuals/user-login' + +Errors: + Internal: Si è verificato un errore interno + AuthRequest: + NotFound: Impossibile trovare authrequest + UserAgentNotCorresponding: User Agent non corrisponde + UserAgentNotFound: User Agent ID non trovato + TokenNotFound: Token non trovato + RequestTypeNotSupported: Il tipo di richiesta non è supportato + MissingParameters: Mancano i parametri richiesti + User: + NotFound: L'utente non è stato trovato + Inactive: L'utente è inattivo + NotFoundOnOrg: L'utente non è stato trovato nell'organizzazione scelta + NotAllowedOrg: L'utente non è membro dell'organizzazione richiesta + NotMatchingUserID: Utente e authrequest non corrispondono + UserIDMissing: UserID è vuoto + Invalid: I dati del utente non sono validi + DomainNotAllowedAsUsername: Il dominio è già riservato e non può essere utilizzato + NotAllowedToLink: L'utente non è autorizzato a collegarsi con un provider di accesso esterno + Password: + ConfirmationWrong: La conferma della password è sbagliata + Empty: La password è vuota + Invalid: La password non è valida + InvalidAndLocked: La password non è valida e l'utente è bloccato, contatta il tuo amministratore. + PasswordComplexityPolicy: + NotFound: Impostazioni della password non trovate + MinLength: La password è troppo corta + HasLower: La password deve contenere una lettera minuscola + HasUpper: La password deve contenere la lettera maiuscola + HasNumber: La password deve contenere un numero + HasSymbol: La password deve contenere il simbolo + Code: + Expired: Il codice è scaduto + Invalid: Il codice non è valido + Empty: Il codice è vuoto + CryptoCodeNil: Il codice criptato è null + NotFound: Impossibile trovare il codice + GeneratorAlgNotSupported: Algoritmo generatore non supportato + EmailVerify: + UserIDEmpty: UserID è vuoto + ExternalData: + CouldNotRead: I dati esterni non possono essere letti correttamente + MFA: + NoProviders: Nessun fornitore multifattore disponibile + OTP: + AlreadyReady: Multifactor OTP (OneTimePassword) è già impostato + NotExisting: Multifactor OTP (OneTimePassword) non esiste + InvalidCode: Codice non valido + NotReady: Multifattore OTP (OneTimePassword) non è pronto + Locked: L'utente è bloccato + SomethingWentWrong: Qualcosa è andato storto + NotActive: L'utente non è attivo + ExternalIDP: + IDPTypeNotImplemented: Il tipo di IDP non è implementato + NotAllowed: Provider di accesso esterno non consentito + IDPConfigIDEmpty: L'ID del fornitore di identità è vuoto + ExternalUserIDEmpty: L'ID utente esterno è vuoto + UserDisplayNameEmpty: Il nome visualizzato dell'utente è vuoto + NoExternalUserData: Nessun dato utente esterno ricevuto + GrantRequired: Accesso non possibile. L'utente deve avere almeno una sovvenzione sull'applicazione. Contatta il tuo amministratore. + ProjectRequired: Accesso non possibile. L'organizzazione dell'utente deve essere concessa al progetto. Contatta il tuo amministratore. + IdentityProvider: + InvalidConfig: La configurazione dell'Identity Provider non è valida + IAM: + LockoutPolicy: + NotExisting: Impostazioni di blocco non esistenti + +optional: (opzionale)