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 <livio.a@gmail.com>
This commit is contained in:
Max Peintner 2021-11-15 08:23:35 +01:00 committed by GitHub
parent cfdb8c3301
commit 12eed30c08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 3082 additions and 275 deletions

View File

@ -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<boolean> = this.breakpointObserver
.observe('(max-width: 599px)')
.pipe(map(result => {
public isHandset$: Observable<boolean> = 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);
}
}

View File

@ -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();

View File

@ -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;

View File

@ -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);
}

View File

@ -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<Org.AsObject> {
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<Org.AsObject>(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<boolean> {
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<boolean> {
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<GetMyProfileResponse.AsObject> {
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<GetMyPasswordComplexityPolicyResponse.AsObject> {
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<GetMyUserResponse.AsObject> {
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<ListMyAuthFactorsResponse.AsObject> {
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<string[]> {
@ -352,11 +360,14 @@ export class GrpcAuthService {
public listMyUserSessions(): Promise<ListMyUserSessionsResponse.AsObject> {
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<ListMyUserGrantsResponse.AsObject> {
public listMyUserGrants(
limit?: number,
offset?: number,
queryList?: ListQuery[],
): Promise<ListMyUserGrantsResponse.AsObject> {
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<ListMyMembershipsResponse.AsObject> {
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<GetMyEmailResponse.AsObject> {
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<SetMyEmailResponse.AsObject> {
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<ResendMyEmailVerificationResponse.AsObject> {
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<GetSupportedLanguagesResponse.AsObject> {
const req = new GetSupportedLanguagesRequest();
return this.grpcService.auth.getSupportedLanguages(req, null).then((resp) => resp.toObject());
}
public removeMyPhone(): Promise<RemoveMyPhoneResponse.AsObject> {
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<UpdateMyUserNameResponse.AsObject> {
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<ListMyZitadelPermissionsResponse.AsObject> {
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<ListMyZitadelFeaturesResponse.AsObject> {
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<GetMyPhoneResponse.AsObject> {
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<SetMyPhoneResponse.AsObject> {
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<ResendMyPhoneVerificationResponse.AsObject> {
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<UpdateMyPasswordResponse.AsObject> {
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<RemoveMyLinkedIDPResponse.AsObject> {
public removeMyLinkedIDP(idpId: string, linkedUserId: string): Promise<RemoveMyLinkedIDPResponse.AsObject> {
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<RemoveMyAvatarResponse.AsObject> {
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<ListMyLinkedIDPsResponse.AsObject> {
public listMyLinkedIDPs(limit: number, offset: number): Promise<ListMyLinkedIDPsResponse.AsObject> {
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<AddMyAuthFactorOTPResponse.AsObject> {
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<AddMyAuthFactorU2FResponse.AsObject> {
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<RemoveMyAuthFactorU2FResponse.AsObject> {
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<VerifyMyAuthFactorU2FResponse.AsObject> {
@ -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<ListMyPasswordlessResponse.AsObject> {
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<AddMyPasswordlessResponse.AsObject> {
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<RemoveMyPasswordlessResponse.AsObject> {
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<VerifyMyPasswordlessResponse.AsObject> {
@ -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<SendMyPasswordlessLinkResponse.AsObject> {
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<AddMyPasswordlessLinkResponse.AsObject> {
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<RemoveMyAuthFactorOTPResponse.AsObject> {
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<VerifyMyAuthFactorOTPResponse.AsObject> {
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<VerifyMyPhoneResponse.AsObject> {
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<ListMyUserChangesResponse.AsObject> {
@ -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());
}
}

View File

@ -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": {

View File

@ -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": {

File diff suppressed because it is too large Load Diff

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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:

View File

@ -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)