Merge branch 'master' of https://github.com/bitwarden/web into feature/hide-passwords

This commit is contained in:
hinton 2020-06-01 21:38:17 +02:00
commit b2bf192677
19 changed files with 364 additions and 233 deletions

2
jslib

@ -1 +1 @@
Subproject commit 2858724f4431038be190fc0b748efe287dd1bae6
Subproject commit 212a2e3745e6e0e2b3057ed308c47daf6aeefbc8

View File

@ -179,6 +179,7 @@ import localeCa from '@angular/common/locales/ca';
import localeCs from '@angular/common/locales/cs';
import localeDa from '@angular/common/locales/da';
import localeDe from '@angular/common/locales/de';
import localeEl from '@angular/common/locales/el';
import localeEnGb from '@angular/common/locales/en-GB';
import localeEs from '@angular/common/locales/es';
import localeEt from '@angular/common/locales/et';
@ -203,6 +204,7 @@ registerLocaleData(localeCa, 'ca');
registerLocaleData(localeCs, 'cs');
registerLocaleData(localeDa, 'da');
registerLocaleData(localeDe, 'de');
registerLocaleData(localeEl, 'el');
registerLocaleData(localeEnGb, 'en-GB');
registerLocaleData(localeEs, 'es');
registerLocaleData(localeEt, 'et');

View File

@ -16,9 +16,11 @@
<i class="fa fa-spinner fa-spin text-muted" title="{{'loading' | i18n}}" aria-hidden="true"></i>
<span class="sr-only">{{'loading' | i18n}}</span>
</ng-container>
<ng-container *ngIf="!loading && (collections | search:searchText:'name':'id') as searchedCollections">
<ng-container
*ngIf="!loading && (isPaging() ? pagedCollections : collections | search:searchText:'name':'id') as searchedCollections">
<p *ngIf="!searchedCollections.length">{{'noCollectionsInList' | i18n}}</p>
<table class="table table-hover table-list" *ngIf="searchedCollections.length">
<table class="table table-hover table-list" *ngIf="searchedCollections.length" infiniteScroll
[infiniteScrollDistance]="1" [infiniteScrollDisabled]="!isPaging()" (scrolled)="loadMore()">
<tbody>
<tr *ngFor="let c of searchedCollections">
<td>

View File

@ -14,6 +14,7 @@ import { ApiService } from 'jslib/abstractions/api.service';
import { CollectionService } from 'jslib/abstractions/collection.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { SearchService } from 'jslib/abstractions/search.service';
import { UserService } from 'jslib/abstractions/user.service';
import { CollectionData } from 'jslib/models/data/collectionData';
@ -40,15 +41,20 @@ export class CollectionsComponent implements OnInit {
loading = true;
organizationId: string;
collections: CollectionView[];
pagedCollections: CollectionView[];
searchText: string;
protected didScroll = false;
protected pageSize = 100;
private pagedCollectionsCount = 0;
private modal: ModalComponent = null;
constructor(private apiService: ApiService, private route: ActivatedRoute,
private collectionService: CollectionService, private componentFactoryResolver: ComponentFactoryResolver,
private analytics: Angulartics2, private toasterService: ToasterService,
private i18nService: I18nService, private platformUtilsService: PlatformUtilsService,
private userService: UserService) { }
private userService: UserService, private searchService: SearchService) { }
async ngOnInit() {
this.route.parent.parent.params.subscribe(async (params) => {
@ -74,9 +80,27 @@ export class CollectionsComponent implements OnInit {
const collections = response.data.filter((c) => c.organizationId === this.organizationId).map((r) =>
new Collection(new CollectionData(r as CollectionDetailsResponse)));
this.collections = await this.collectionService.decryptMany(collections);
this.resetPaging();
this.loading = false;
}
loadMore() {
if (this.collections.length <= this.pageSize) {
return;
}
const pagedLength = this.pagedCollections.length;
let pagedSize = this.pageSize;
if (pagedLength === 0 && this.pagedCollectionsCount > this.pageSize) {
pagedSize = this.pagedCollectionsCount;
}
if (this.collections.length > pagedLength) {
this.pagedCollections =
this.pagedCollections.concat(this.collections.slice(pagedLength, pagedLength + pagedSize));
}
this.pagedCollectionsCount = this.pagedCollections.length;
this.didScroll = this.pagedCollections.length > this.pageSize;
}
edit(collection: CollectionView) {
if (this.modal != null) {
this.modal.close();
@ -147,10 +171,28 @@ export class CollectionsComponent implements OnInit {
});
}
async resetPaging() {
this.pagedCollections = [];
this.loadMore();
}
isSearching() {
return this.searchService.isSearchable(this.searchText);
}
isPaging() {
const searching = this.isSearching();
if (searching && this.didScroll) {
this.resetPaging();
}
return !searching && this.collections.length > this.pageSize;
}
private removeCollection(collection: CollectionView) {
const index = this.collections.indexOf(collection);
if (index > -1) {
this.collections.splice(index, 1);
this.resetPaging();
}
}
}

View File

@ -16,9 +16,10 @@
<i class="fa fa-spinner fa-spin text-muted" title="{{'loading' | i18n}}" aria-hidden="true"></i>
<span class="sr-only">{{'loading' | i18n}}</span>
</ng-container>
<ng-container *ngIf="!loading && (groups | search:searchText:'name':'id') as searchedGroups">
<ng-container *ngIf="!loading && (isPaging() ? pagedGroups : groups | search:searchText:'name':'id') as searchedGroups">
<p *ngIf="!searchedGroups.length">{{'noGroupsInList' | i18n}}</p>
<table class="table table-hover table-list" *ngIf="searchedGroups.length">
<table class="table table-hover table-list" *ngIf="searchedGroups.length" infiniteScroll
[infiniteScrollDistance]="1" [infiniteScrollDisabled]="!isPaging()" (scrolled)="loadMore()">
<tbody>
<tr *ngFor="let g of searchedGroups">
<td>

View File

@ -16,6 +16,7 @@ import { Angulartics2 } from 'angulartics2';
import { ApiService } from 'jslib/abstractions/api.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { SearchService } from 'jslib/abstractions/search.service';
import { UserService } from 'jslib/abstractions/user.service';
import { GroupResponse } from 'jslib/models/response/groupResponse';
@ -37,15 +38,20 @@ export class GroupsComponent implements OnInit {
loading = true;
organizationId: string;
groups: GroupResponse[];
pagedGroups: GroupResponse[];
searchText: string;
protected didScroll = false;
protected pageSize = 100;
private pagedGroupsCount = 0;
private modal: ModalComponent = null;
constructor(private apiService: ApiService, private route: ActivatedRoute,
private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,
private analytics: Angulartics2, private toasterService: ToasterService,
private platformUtilsService: PlatformUtilsService, private userService: UserService,
private router: Router) { }
private router: Router, private searchService: SearchService) { }
async ngOnInit() {
this.route.parent.parent.params.subscribe(async (params) => {
@ -70,9 +76,26 @@ export class GroupsComponent implements OnInit {
const groups = response.data != null && response.data.length > 0 ? response.data : [];
groups.sort(Utils.getSortFunction(this.i18nService, 'name'));
this.groups = groups;
this.resetPaging();
this.loading = false;
}
loadMore() {
if (this.groups.length <= this.pageSize) {
return;
}
const pagedLength = this.pagedGroups.length;
let pagedSize = this.pageSize;
if (pagedLength === 0 && this.pagedGroupsCount > this.pageSize) {
pagedSize = this.pagedGroupsCount;
}
if (this.groups.length > pagedLength) {
this.pagedGroups = this.pagedGroups.concat(this.groups.slice(pagedLength, pagedLength + pagedSize));
}
this.pagedGroupsCount = this.pagedGroups.length;
this.didScroll = this.pagedGroups.length > this.pageSize;
}
edit(group: GroupResponse) {
if (this.modal != null) {
this.modal.close();
@ -142,10 +165,28 @@ export class GroupsComponent implements OnInit {
});
}
async resetPaging() {
this.pagedGroups = [];
this.loadMore();
}
isSearching() {
return this.searchService.isSearchable(this.searchText);
}
isPaging() {
const searching = this.isSearching();
if (searching && this.didScroll) {
this.resetPaging();
}
return !searching && this.groups.length > this.pageSize;
}
private removeGroup(group: GroupResponse) {
const index = this.groups.indexOf(group);
if (index > -1) {
this.groups.splice(index, 1);
this.resetPaging();
}
}
}

View File

@ -35,13 +35,15 @@
<i class="fa fa-spinner fa-spin text-muted" title="{{'loading' | i18n}}" aria-hidden="true"></i>
<span class="sr-only">{{'loading' | i18n}}</span>
</ng-container>
<ng-container *ngIf="!loading && (users | search:searchText:'name':'email':'id') as searchedUsers">
<ng-container
*ngIf="!loading && (isPaging() ? pagedUsers : users | search:searchText:'name':'email':'id') as searchedUsers">
<p *ngIf="!searchedUsers.length">{{'noUsersInList' | i18n}}</p>
<ng-container *ngIf="searchedUsers.length">
<app-callout type="info" title="{{'confirmUsers' | i18n}}" icon="fa-check-circle" *ngIf="showConfirmUsers">
{{'usersNeedConfirmed' | i18n}}
</app-callout>
<table class="table table-hover table-list">
<table class="table table-hover table-list" infiniteScroll [infiniteScrollDistance]="1"
[infiniteScrollDisabled]="!isPaging()" (scrolled)="loadMore()">
<tbody>
<tr *ngFor="let u of searchedUsers">
<td width="30">

View File

@ -19,6 +19,7 @@ import { ApiService } from 'jslib/abstractions/api.service';
import { CryptoService } from 'jslib/abstractions/crypto.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { SearchService } from 'jslib/abstractions/search.service';
import { StorageService } from 'jslib/abstractions/storage.service';
import { UserService } from 'jslib/abstractions/user.service';
@ -50,6 +51,7 @@ export class PeopleComponent implements OnInit {
loading = true;
organizationId: string;
users: OrganizationUserUserDetailsResponse[];
pagedUsers: OrganizationUserUserDetailsResponse[];
searchText: string;
status: OrganizationUserStatusType = null;
statusMap = new Map<OrganizationUserStatusType, OrganizationUserUserDetailsResponse[]>();
@ -59,6 +61,10 @@ export class PeopleComponent implements OnInit {
accessEvents = false;
accessGroups = false;
protected didScroll = false;
protected pageSize = 100;
private pagedUsersCount = 0;
private modal: ModalComponent = null;
private allUsers: OrganizationUserUserDetailsResponse[];
@ -67,7 +73,7 @@ export class PeopleComponent implements OnInit {
private platformUtilsService: PlatformUtilsService, private analytics: Angulartics2,
private toasterService: ToasterService, private cryptoService: CryptoService,
private userService: UserService, private router: Router,
private storageService: StorageService) { }
private storageService: StorageService, private searchService: SearchService) { }
async ngOnInit() {
this.route.parent.parent.params.subscribe(async (params) => {
@ -119,6 +125,23 @@ export class PeopleComponent implements OnInit {
} else {
this.users = this.allUsers;
}
this.resetPaging();
}
loadMore() {
if (this.users.length <= this.pageSize) {
return;
}
const pagedLength = this.pagedUsers.length;
let pagedSize = this.pageSize;
if (pagedLength === 0 && this.pagedUsersCount > this.pageSize) {
pagedSize = this.pagedUsersCount;
}
if (this.users.length > pagedLength) {
this.pagedUsers = this.pagedUsers.concat(this.users.slice(pagedLength, pagedLength + pagedSize));
}
this.pagedUsersCount = this.pagedUsers.length;
this.didScroll = this.pagedUsers.length > this.pageSize;
}
get allCount() {
@ -294,6 +317,23 @@ export class PeopleComponent implements OnInit {
});
}
async resetPaging() {
this.pagedUsers = [];
this.loadMore();
}
isSearching() {
return this.searchService.isSearchable(this.searchText);
}
isPaging() {
const searching = this.isSearching();
if (searching && this.didScroll) {
this.resetPaging();
}
return !searching && this.users.length > this.pageSize;
}
private async doConfirmation(user: OrganizationUserUserDetailsResponse) {
const orgKey = await this.cryptoService.getOrgKey(this.organizationId);
const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId);
@ -313,6 +353,7 @@ export class PeopleComponent implements OnInit {
let index = this.users.indexOf(user);
if (index > -1) {
this.users.splice(index, 1);
this.resetPaging();
}
if (this.statusMap.has(OrganizationUserStatusType.Accepted)) {
index = this.statusMap.get(OrganizationUserStatusType.Accepted).indexOf(user);

View File

@ -1833,10 +1833,10 @@
"message": "Organizations allow you to share parts of your vault with others as well as manage related users for a specific entity such as a family, small team, or large company."
},
"generalInformation": {
"message": "General Information"
"message": "Algemene Inligting"
},
"organizationName": {
"message": "Organization Name"
"message": "Organisasienaam"
},
"accountOwnedBusiness": {
"message": "This account is owned by a business."
@ -1848,10 +1848,10 @@
"message": "Business Name"
},
"chooseYourPlan": {
"message": "Choose Your Plan"
"message": "Kies U Plan"
},
"users": {
"message": "Users"
"message": "Gebruikers"
},
"userSeats": {
"message": "User Seats"
@ -1879,7 +1879,7 @@
"message": "How many user seats do you need? You can also add additional seats later if needed."
},
"planNameFree": {
"message": "Free",
"message": "Gratis",
"description": "Free as in 'free beer'."
},
"planDescFree": {
@ -1892,16 +1892,16 @@
}
},
"planNameFamilies": {
"message": "Families"
"message": "Gesinne"
},
"planDescFamilies": {
"message": "For personal use, to share with family & friends."
"message": "Vir persoonlike gebruik om met vriende en familie te deel."
},
"planNameTeams": {
"message": "Teams"
"message": "Spanne"
},
"planDescTeams": {
"message": "For businesses and other team organizations."
"message": "Vir sake- en ander spanorganisasies."
},
"planNameEnterprise": {
"message": "Enterprise"
@ -1910,10 +1910,10 @@
"message": "For businesses and other large organizations."
},
"freeForever": {
"message": "Free Forever"
"message": "Altyd Gratis"
},
"includesXUsers": {
"message": "includes $COUNT$ users",
"message": "sluit $COUNT$ gebruikers in",
"placeholders": {
"count": {
"content": "$1",
@ -1922,10 +1922,10 @@
}
},
"additionalUsers": {
"message": "Additional Users"
"message": "Bykomende Gebruikers"
},
"costPerUser": {
"message": "$COST$ per user",
"message": "$COST$ per gebruiker",
"placeholders": {
"cost": {
"content": "$1",
@ -2006,76 +2006,76 @@
}
},
"monthly": {
"message": "Monthly"
"message": "Maandeliks"
},
"annually": {
"message": "Annually"
"message": "Jaarliks"
},
"basePrice": {
"message": "Base Price"
"message": "Basisprys"
},
"organizationCreated": {
"message": "Organization Created"
"message": "Organisasie Geskep"
},
"organizationReadyToGo": {
"message": "Your new organization is ready to go!"
"message": "U nuwe organisasie is gereed vir gebruik!"
},
"organizationUpgraded": {
"message": "Your organization has been upgraded."
"message": "U organisasie is opgegradeer."
},
"leave": {
"message": "Leave"
"message": "Verlaat"
},
"leaveOrganizationConfirmation": {
"message": "Are you sure you want to leave this organization?"
"message": "Is u seker u wil hierdie organisasie verlaat?"
},
"leftOrganization": {
"message": "You have left the organization."
"message": "U het die organisasie verlaat."
},
"defaultCollection": {
"message": "Default Collection"
"message": "Verstekversameling"
},
"getHelp": {
"message": "Get Help"
"message": "Kry Hulp"
},
"getApps": {
"message": "Get the Apps"
"message": "Kry die Toeps"
},
"loggedInAs": {
"message": "Logged in as"
"message": "Aangeteken as"
},
"eventLogs": {
"message": "Event Logs"
},
"people": {
"message": "People"
"message": "Mense"
},
"policies": {
"message": "Policies"
"message": "Beleide"
},
"editPolicy": {
"message": "Edit Policy"
"message": "Wysig Beleid"
},
"groups": {
"message": "Groups"
"message": "Groepe"
},
"newGroup": {
"message": "New Group"
"message": "Nuwe Groep"
},
"addGroup": {
"message": "Add Group"
"message": "Voeg Groep Toe"
},
"editGroup": {
"message": "Edit Group"
"message": "Wysig Groep"
},
"deleteGroupConfirmation": {
"message": "Are you sure you want to delete this group?"
"message": "Is u seker u wil hierdie groep skrap?"
},
"removeUserConfirmation": {
"message": "Are you sure you want to remove this user?"
"message": "Is u seker u wil hierdie gebruiker verwyder?"
},
"externalId": {
"message": "External Id"
"message": "Eksterne ID"
},
"externalIdDesc": {
"message": "The external id can be used as a reference or to link this resource to an external system such as a user directory."
@ -2084,31 +2084,31 @@
"message": "Access Control"
},
"groupAccessAllItems": {
"message": "This group can access and modify all items."
"message": "Hierdie groep het toegang tot alle items en kan dit wysig."
},
"groupAccessSelectedCollections": {
"message": "This group can access only the selected collections."
"message": "Hierdie groep het slegs toegang tot die gekose versamelings."
},
"readOnly": {
"message": "Read Only"
"message": "Leesalleen"
},
"newCollection": {
"message": "New Collection"
"message": "Nuwe Versameling"
},
"addCollection": {
"message": "Add Collection"
"message": "Voeg Versameling Toe"
},
"editCollection": {
"message": "Edit Collection"
"message": "Wysig Versameling"
},
"deleteCollectionConfirmation": {
"message": "Are you sure you want to delete this collection?"
"message": "Is u seker u wil hierdie versameling skrap?"
},
"editUser": {
"message": "Edit User"
"message": "Wysig Gebruiker"
},
"inviteUser": {
"message": "Invite User"
"message": "Nooi Gebruiker Uit"
},
"inviteUserDesc": {
"message": "Invite a new user to your organization by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account."
@ -2132,7 +2132,7 @@
"message": "This user can access only the selected collections."
},
"search": {
"message": "Search"
"message": "Soek"
},
"invited": {
"message": "Invited"
@ -2156,55 +2156,55 @@
"message": "Admins can access and manage all items, collections and users in your organization."
},
"user": {
"message": "User"
"message": "Gebruiker"
},
"userDesc": {
"message": "A regular user with access to assigned collections in your organization."
},
"manager": {
"message": "Manager"
"message": "Bestuurder"
},
"managerDesc": {
"message": "Managers can access and manage assigned collections in your organization."
"message": "Bestuurders bestuur en het toegang tot toegewysde versamelings in u organisasie."
},
"all": {
"message": "All"
"message": "Alle"
},
"refresh": {
"message": "Refresh"
"message": "Verfris"
},
"timestamp": {
"message": "Timestamp"
"message": "Tydstempel"
},
"event": {
"message": "Event"
"message": "Gebeurtenis"
},
"unknown": {
"message": "Unknown"
"message": "Onbekend"
},
"loadMore": {
"message": "Load More"
"message": "Laai Meer"
},
"mobile": {
"message": "Mobile",
"message": "Mobiel",
"description": "Mobile app"
},
"extension": {
"message": "Extension",
"message": "Uitbreiding",
"description": "Browser extension/addon"
},
"desktop": {
"message": "Desktop",
"message": "Werkskerm",
"description": "Desktop app"
},
"webVault": {
"message": "Web Vault"
"message": "Webkluis"
},
"loggedIn": {
"message": "Logged in."
"message": "Aangeteken."
},
"changedPassword": {
"message": "Changed account password."
"message": "Rekeningwagwoord is verander."
},
"enabledUpdated2fa": {
"message": "Enabled/updated two-step login."
@ -2474,37 +2474,37 @@
}
},
"device": {
"message": "Device"
"message": "Toestel"
},
"view": {
"message": "View"
"message": "Bekyk"
},
"invalidDateRange": {
"message": "Invalid date range."
"message": "Ongeldige datumbereik."
},
"errorOccurred": {
"message": "An error has occurred."
"message": "n Fout het voorgekom."
},
"userAccess": {
"message": "User Access"
"message": "Gebruikertoegang"
},
"userType": {
"message": "User Type"
"message": "Gebruikertipe"
},
"groupAccess": {
"message": "Group Access"
"message": "Groeptoegang"
},
"groupAccessUserDesc": {
"message": "Edit the groups that this user belongs to."
},
"invitedUsers": {
"message": "Invited user(s)."
"message": "Gebruiker(s) genooi."
},
"resendInvitation": {
"message": "Resend Invitation"
},
"hasBeenReinvited": {
"message": "$USER$ has been reinvited.",
"message": "$USER$ is weer uitgenooi.",
"placeholders": {
"user": {
"content": "$1",
@ -2516,10 +2516,10 @@
"message": "Bevestig"
},
"confirmUser": {
"message": "Confirm User"
"message": "Bevestig Gebruiker"
},
"hasBeenConfirmed": {
"message": "$USER$ has been confirmed.",
"message": "$USER$ is bevestig.",
"placeholders": {
"user": {
"content": "$1",
@ -2528,7 +2528,7 @@
}
},
"confirmUsers": {
"message": "Confirm Users"
"message": "Bevestig Gebruikers"
},
"usersNeedConfirmed": {
"message": "You have users that have accepted their invitation, but still need to be confirmed. Users will not have access to the organization until they are confirmed."
@ -2558,7 +2558,7 @@
"message": "Unable to verify your email. Try sending a new verification email."
},
"updateBrowser": {
"message": "Update Browser"
"message": "Werk Blaaier By"
},
"updateBrowserDesc": {
"message": "You are using an unsupported web browser. The web vault may not function properly."
@ -2570,7 +2570,7 @@
"message": "You've been invited to join the organization listed above. To accept the invitation, you need to log in or create a new Bitwarden account."
},
"inviteAccepted": {
"message": "Invitation Accepted"
"message": "Uitnodiging is Aanvaar"
},
"inviteAcceptedDesc": {
"message": "You can access this organization once an administrator confirms your membership. We'll send you an email when that happens."
@ -2612,25 +2612,25 @@
"message": "You have requested to delete your Bitwarden account. Click the button below to confirm."
},
"myOrganization": {
"message": "My Organization"
"message": "My Organisasie"
},
"deleteOrganization": {
"message": "Delete Organization"
"message": "Skrap Organisasie"
},
"deleteOrganizationDesc": {
"message": "Proceed below to delete this organization and all associated data. Individual user accounts will remain, though they will not be associated to this organization anymore. "
"message": "Gaan hieronder voort om hierdie organisasie en alle verwante data te skrap. Individuele gebruikersrekeninge bly bestaan maar sal nie meer aan hierdie organisasie gekoppel wees nie. "
},
"deleteOrganizationWarning": {
"message": "Deleting the organization is permanent. It cannot be undone."
"message": "Skrap van die organisasie is permanent. Dit kan nie ontdaan word nie."
},
"organizationDeleted": {
"message": "Organization Deleted"
"message": "Organisasie Geskrap"
},
"organizationDeletedDesc": {
"message": "The organization and all associated data has been deleted."
"message": "Die organisasie en alle verwante data is geskrap."
},
"organizationUpdated": {
"message": "Organization updated"
"message": "Organisasie bygewerk"
},
"taxInformation": {
"message": "Belastinginligting"
@ -2808,7 +2808,7 @@
"description": "A policy is something like Terms of Service, Privacy Policy, etc."
},
"termsOfService": {
"message": "Terms of Service"
"message": "Gebruiksvoorwaardes"
},
"privacyPolicy": {
"message": "Privaatheidsbeleid"
@ -2967,13 +2967,13 @@
"message": "U moet u intekening bestuur vanuit die winkel waarin u toepgebonde aankoop gedoen is."
},
"minLength": {
"message": "Minimum Length"
"message": "Minimum lengte"
},
"clone": {
"message": "Clone"
"message": "Kloon"
},
"masterPassPolicyDesc": {
"message": "Set minimum requirements for master password strength."
"message": "Stel minimum vereistes vir hoofwagwoordsterkte."
},
"twoStepLoginPolicyDesc": {
"message": "Require users to set up two-step login on their personal accounts."
@ -2985,16 +2985,16 @@
"message": "You are a member of an organization that requires two-step login to be enabled on your user account. If you disable all two-step login providers you will be automatically removed from these organizations."
},
"passwordGeneratorPolicyDesc": {
"message": "Set minimum requirements for password generator configuration."
"message": "Stel minimum vereistes vir opstelling van wagwoordgenereerder."
},
"passwordGeneratorPolicyInEffect": {
"message": "One or more organization policies are affecting your generator settings."
"message": "Een of meer organisasiebeleide beïnvloed u genereerderinstellings."
},
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
"message": "Een of meer organisasiebeleide stel die volgende eise aan u hoofwagwoord:"
},
"policyInEffectMinComplexity": {
"message": "Minimum complexity score of $SCORE$",
"message": "Minimum ingewikkeldheidstelling van $SCORE$",
"placeholders": {
"score": {
"content": "$1",
@ -3003,7 +3003,7 @@
}
},
"policyInEffectMinLength": {
"message": "Minimum length of $LENGTH$",
"message": "Minimum lengte van $LENGTH$",
"placeholders": {
"length": {
"content": "$1",
@ -3012,16 +3012,16 @@
}
},
"policyInEffectUppercase": {
"message": "Contain one or more uppercase characters"
"message": "Bevat een of meer hoofletterkarakters"
},
"policyInEffectLowercase": {
"message": "Contain one or more lowercase characters"
"message": "Bevat een of meer kleinletterkarakters"
},
"policyInEffectNumbers": {
"message": "Contain one or more numbers"
"message": "Bevat een of meer syfers"
},
"policyInEffectSpecial": {
"message": "Contain one or more of the following special characters $CHARS$",
"message": "Bevat een of meer van die volgende spesiale karakters $CHARS$",
"placeholders": {
"chars": {
"content": "$1",
@ -3030,16 +3030,16 @@
}
},
"masterPasswordPolicyRequirementsNotMet": {
"message": "Your new master password does not meet the policy requirements."
"message": "U nuwe hoofwagwoord voldoen nie aan die beleidsvereistes nie."
},
"minimumNumberOfWords": {
"message": "Minimum Number of Words"
"message": "Minimum Aantal Woorde"
},
"defaultType": {
"message": "Default Type"
"message": "Verstektipe"
},
"userPreference": {
"message": "User Preference"
"message": "Gebruikersvoorkeure"
},
"vaultTimeoutAction": {
"message": "Vault Timeout Action"
@ -3051,33 +3051,33 @@
"message": "A logged out vault requires that you re-authenticate to access it again."
},
"lock": {
"message": "Lock",
"message": "Vergrendel",
"description": "Verb form: to make secure or inaccesible by"
},
"trash": {
"message": "Trash",
"message": "Asblik",
"description": "Noun: A special folder for holding deleted items that have not yet been permanently deleted"
},
"searchTrash": {
"message": "Search Trash"
"message": "Deursoek Asblik"
},
"permanentlyDelete": {
"message": "Permanently Delete"
"message": "Skrap Permanent"
},
"permanentlyDeleteSelected": {
"message": "Permanently Delete Selected"
"message": "Skrap Gekose Permanent"
},
"permanentlyDeleteItem": {
"message": "Permanently Delete Item"
"message": "Skrap Item Permanent"
},
"permanentlyDeleteItemConfirmation": {
"message": "Are you sure you want to permanently delete this item?"
"message": "Is u seker u wil hierdie item permanent skrap?"
},
"permanentlyDeletedItem": {
"message": "Permanently Deleted item"
"message": "Permanent Geskrapte Item"
},
"permanentlyDeletedItems": {
"message": "Permanently Deleted items"
"message": "Permanent Geskrapte Items"
},
"permanentlyDeleteSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s) to permanently delete. Are you sure you want to permanently delete all of these items?",
@ -3089,7 +3089,7 @@
}
},
"permanentlyDeletedItemId": {
"message": "Permanently Deleted item $ID$.",
"message": "Permanent Geskrapte Items $ID$.",
"placeholders": {
"id": {
"content": "$1",

View File

@ -2817,10 +2817,10 @@
"message": "Filtry"
},
"vaultTimeout": {
"message": "Vault Timeout"
"message": "Časový limit trezoru"
},
"vaultTimeoutDesc": {
"message": "Choose when your vault will timeout and perform the selected action."
"message": "Vyberte, kdy vyprší bezpečnostní limit trezoru. Poté bude provedena vybraná akce."
},
"oneMinute": {
"message": "Po 1 minutě"
@ -3042,16 +3042,16 @@
"message": "Uživatelská volba"
},
"vaultTimeoutAction": {
"message": "Vault Timeout Action"
"message": "Akce při vypršení časového limitu"
},
"vaultTimeoutActionLockDesc": {
"message": "A locked vault requires that you re-enter your master password to access it again."
"message": "Trezor bude uzamčen. Pro opětovný přístup k trezoru bude vyžadováno hlavní heslo."
},
"vaultTimeoutActionLogOutDesc": {
"message": "A logged out vault requires that you re-authenticate to access it again."
"message": "Budete odhlášeni. Pro opětovný přístup k trezoru bude vyžadováno ověření."
},
"lock": {
"message": "Lock",
"message": "Zamknout",
"description": "Verb form: to make secure or inaccesible by"
},
"trash": {
@ -3062,25 +3062,25 @@
"message": "Hledat v koši"
},
"permanentlyDelete": {
"message": "Permanently Delete"
"message": "Trvale smazat"
},
"permanentlyDeleteSelected": {
"message": "Permanently Delete Selected"
"message": "Trvale smazat vybrané"
},
"permanentlyDeleteItem": {
"message": "Permanently Delete Item"
"message": "Trvale smazat položku"
},
"permanentlyDeleteItemConfirmation": {
"message": "Are you sure you want to permanently delete this item?"
"message": "Opravdu chcete tuto položku trvale smazat?"
},
"permanentlyDeletedItem": {
"message": "Permanently Deleted item"
"message": "Trvale smazaná položka"
},
"permanentlyDeletedItems": {
"message": "Permanently Deleted items"
"message": "Trvale smazané položky"
},
"permanentlyDeleteSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s) to permanently delete. Are you sure you want to permanently delete all of these items?",
"message": "Vybrané položky ($COUNT$) budou trvale smazány. Opravdu chcete všechny vybrané položky trvale smazat?",
"placeholders": {
"count": {
"content": "$1",
@ -3089,7 +3089,7 @@
}
},
"permanentlyDeletedItemId": {
"message": "Permanently Deleted item $ID$.",
"message": "Položka $ID$ trvale smazána.",
"placeholders": {
"id": {
"content": "$1",
@ -3098,25 +3098,25 @@
}
},
"restore": {
"message": "Restore"
"message": "Obnovit"
},
"restoreSelected": {
"message": "Restore Selected"
"message": "Obnovit vybrané"
},
"restoreItem": {
"message": "Restore Item"
"message": "Obnovit položku"
},
"restoredItem": {
"message": "Restored Item"
"message": "Obnovená položka"
},
"restoredItems": {
"message": "Restored Items"
"message": "Obnovené položky"
},
"restoreItemConfirmation": {
"message": "Are you sure you want to restore this item?"
"message": "Opravdu chcete tuto položku obnovit?"
},
"restoreItems": {
"message": "Restore items"
"message": "Obnovit položky"
},
"restoreSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s) to restore. Are you sure you want to restore all of these items?",
@ -3128,7 +3128,7 @@
}
},
"restoredItemId": {
"message": "Restored item $ID$.",
"message": "Položka $ID$ obnovena.",
"placeholders": {
"id": {
"content": "$1",
@ -3137,9 +3137,9 @@
}
},
"vaultTimeoutLogOutConfirmation": {
"message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?"
"message": "Po vypršení časového limitu dojde k odhlášení. Přístup k trezoru bude odebrán a pro opětovné přihlášení bude vyžadováno online ověření. Opravdu chcete použít toto nastavení?"
},
"vaultTimeoutLogOutConfirmationTitle": {
"message": "Timeout Action Confirmation"
"message": "Potvrzení akce při vypršení časového limitu"
}
}

View File

@ -461,10 +461,10 @@
"message": "Er du sikker på, at du vil slette dette element?"
},
"deletedItem": {
"message": "Slettede element"
"message": "Element sendt til papirkurven"
},
"deletedItems": {
"message": "Slettede elementer"
"message": "Elementer sendt til papirkurven"
},
"movedItems": {
"message": "Flyttede elementer"
@ -2249,7 +2249,7 @@
}
},
"deletedItemId": {
"message": "Slettede element $ID$.",
"message": "Element $ID$ sendt til papirkurven.",
"placeholders": {
"id": {
"content": "$1",
@ -2817,10 +2817,10 @@
"message": "Filtre"
},
"vaultTimeout": {
"message": "Vault Timeout"
"message": "Boks timeout"
},
"vaultTimeoutDesc": {
"message": "Choose when your vault will timeout and perform the selected action."
"message": "Vælg timeout for din boks, hvorefter den vil udføre den valgte handling."
},
"oneMinute": {
"message": "1 minut"
@ -3042,45 +3042,45 @@
"message": "Brugerindstilling"
},
"vaultTimeoutAction": {
"message": "Vault Timeout Action"
"message": "Boks timeout-handling"
},
"vaultTimeoutActionLockDesc": {
"message": "A locked vault requires that you re-enter your master password to access it again."
"message": "En låst boks kræver at du gentaster din hovedadgangskode for at tilgå den igen."
},
"vaultTimeoutActionLogOutDesc": {
"message": "A logged out vault requires that you re-authenticate to access it again."
"message": "En boks der er logget ud kræver, at du godkender igen for at få adgang til den."
},
"lock": {
"message": "Lock",
"message": "Lås",
"description": "Verb form: to make secure or inaccesible by"
},
"trash": {
"message": "Trash",
"message": "Papirkurv",
"description": "Noun: A special folder for holding deleted items that have not yet been permanently deleted"
},
"searchTrash": {
"message": "Search Trash"
"message": "Søg i papirkurven"
},
"permanentlyDelete": {
"message": "Permanently Delete"
"message": "Slette permanent"
},
"permanentlyDeleteSelected": {
"message": "Permanently Delete Selected"
"message": "Slet valgte elementer permanent"
},
"permanentlyDeleteItem": {
"message": "Permanently Delete Item"
"message": "Slet element permanent"
},
"permanentlyDeleteItemConfirmation": {
"message": "Are you sure you want to permanently delete this item?"
"message": "Er du sikker på, at du vil slette dette element permanent?"
},
"permanentlyDeletedItem": {
"message": "Permanently Deleted item"
"message": "Element slettet permanent"
},
"permanentlyDeletedItems": {
"message": "Permanently Deleted items"
"message": "Elementer slettet permanent"
},
"permanentlyDeleteSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s) to permanently delete. Are you sure you want to permanently delete all of these items?",
"message": "Du har valgt $COUNT$ element(er), der skal slettes permanent. Er du sikker på, at du vil slette alle disse elementer permanent?",
"placeholders": {
"count": {
"content": "$1",
@ -3089,7 +3089,7 @@
}
},
"permanentlyDeletedItemId": {
"message": "Permanently Deleted item $ID$.",
"message": "Element $ID$ slettet permanent.",
"placeholders": {
"id": {
"content": "$1",
@ -3098,28 +3098,28 @@
}
},
"restore": {
"message": "Restore"
"message": "Gendan"
},
"restoreSelected": {
"message": "Restore Selected"
"message": "Gendan valgte"
},
"restoreItem": {
"message": "Restore Item"
"message": "Gendan element"
},
"restoredItem": {
"message": "Restored Item"
"message": "Element gendannet"
},
"restoredItems": {
"message": "Restored Items"
"message": "Elementer gendannet"
},
"restoreItemConfirmation": {
"message": "Are you sure you want to restore this item?"
"message": "Er du sikker på, at du vil gendanne dette element?"
},
"restoreItems": {
"message": "Restore items"
"message": "Gendan elementer"
},
"restoreSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s) to restore. Are you sure you want to restore all of these items?",
"message": "Du har valgt $COUNT$ element(er), der skal gendannes. Er du sikker på, at du vil gendanne alle disse elementer?",
"placeholders": {
"count": {
"content": "$1",
@ -3128,7 +3128,7 @@
}
},
"restoredItemId": {
"message": "Restored item $ID$.",
"message": "Element $ID$ gendannet.",
"placeholders": {
"id": {
"content": "$1",
@ -3137,9 +3137,9 @@
}
},
"vaultTimeoutLogOutConfirmation": {
"message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?"
"message": "Ved at logge ud fjernes al adgang til din boks og kræver online-godkendelse efter timeout-perioden. Er du sikker på, at du vil bruge denne indstilling?"
},
"vaultTimeoutLogOutConfirmationTitle": {
"message": "Timeout Action Confirmation"
"message": "Bekræft timeout-handling"
}
}

View File

@ -854,7 +854,7 @@
"message": "E-Mail-Adresse ändern"
},
"newEmail": {
"message": "Neue E-Mail Adresse"
"message": "Neue E-Mail-Adresse"
},
"code": {
"message": "Code"
@ -1032,7 +1032,7 @@
"message": "Ändern Sie die Sprache für den Web-Tresor."
},
"disableIcons": {
"message": "Webseiten Icons deaktivieren"
"message": "Website-Icons deaktivieren"
},
"disableIconsDesc": {
"message": "Website-Icons zeigen ein wiedererkennbares Bild neben jedem Eintrag in Ihrem Tresor."
@ -1048,16 +1048,16 @@
"message": "Standard"
},
"domainRules": {
"message": "Domänenregeln"
"message": "Domain-Regeln"
},
"domainRulesDesc": {
"message": "Wenn Sie die gleiche Anmeldung über mehrere verschiedene Webseitendomänen hinweg haben, können Sie die Webseite als \"gleichwertig\" markieren. \"Globale\" Domänen wurden bereits von Bitwarden für Sie angelegt."
},
"globalEqDomains": {
"message": "Globale gleichwertige Domänen"
"message": "Globale gleichwertige Domains"
},
"customEqDomains": {
"message": "Benutzerdefinierte gleichwertige Domänen"
"message": "Benutzerdefinierte gleichwertige Domains"
},
"exclude": {
"message": "Ausschließen"
@ -2153,7 +2153,7 @@
"message": "Administrator"
},
"adminDesc": {
"message": "Administratoren können auf alle Elemente, Sammlungen und Benutzer in der Organisation zugreifen und diese verwalten."
"message": "Administratoren können auf alle Einträge, Sammlungen und Benutzer in der Organisation zugreifen und diese verwalten."
},
"user": {
"message": "Benutzer"
@ -2276,7 +2276,7 @@
}
},
"viewedPasswordItemId": {
"message": "Passwort für Element $ID$ kopiert.",
"message": "Passwort für Eintrag $ID$ angesehen.",
"placeholders": {
"id": {
"content": "$1",
@ -2285,7 +2285,7 @@
}
},
"viewedHiddenFieldItemId": {
"message": "Verstecktes Feld für Element $ID$ angesehen.",
"message": "Verstecktes Feld für Eintrag $ID$ angesehen.",
"placeholders": {
"id": {
"content": "$1",
@ -2294,7 +2294,7 @@
}
},
"viewedSecurityCodeItemId": {
"message": "Sicherheitscode für Element $ID$ angesehen.",
"message": "Sicherheitscode für Eintrag $ID$ angesehen.",
"placeholders": {
"id": {
"content": "$1",
@ -2303,7 +2303,7 @@
}
},
"copiedPasswordItemId": {
"message": "Passwort für Element $ID$ kopiert.",
"message": "Passwort für Eintrag $ID$ kopiert.",
"placeholders": {
"id": {
"content": "$1",
@ -2312,7 +2312,7 @@
}
},
"copiedHiddenFieldItemId": {
"message": "Verstecktes Feld für Element $ID$ kopiert.",
"message": "Verstecktes Feld für Eintrag $ID$ kopiert.",
"placeholders": {
"id": {
"content": "$1",
@ -2321,7 +2321,7 @@
}
},
"copiedSecurityCodeItemId": {
"message": "Sicherheitscode für Element $ID$ kopiert.",
"message": "Sicherheitscode für Eintrag $ID$ kopiert.",
"placeholders": {
"id": {
"content": "$1",
@ -2330,7 +2330,7 @@
}
},
"autofilledItemId": {
"message": "Element $ID$ automatisch ausgefüllt.",
"message": "Eintrag $ID$ automatisch ausgefüllt.",
"placeholders": {
"id": {
"content": "$1",
@ -3012,10 +3012,10 @@
}
},
"policyInEffectUppercase": {
"message": "Enthält ein oder mehrere Großbuchstaben"
"message": "Enthält einen oder mehrere Großbuchstaben"
},
"policyInEffectLowercase": {
"message": "Enthält ein oder mehrere Kleinbuchstaben"
"message": "Enthält einen oder mehrere Kleinbuchstaben"
},
"policyInEffectNumbers": {
"message": "Enthält eine oder mehrere Zahlen"
@ -3080,7 +3080,7 @@
"message": "Dauerhaft gelöschte Einträge"
},
"permanentlyDeleteSelectedItemsDesc": {
"message": "Sie haben $COUNT$ Eintrag/Einträge zum unwiderruflichen Löschen ausgewählt. Sind Sie sicher, dass Sie alle diese(n) Eintrag/Einträge dauerhaft löschen möchten?",
"message": "Sie haben $COUNT$ Eintrag/Einträge zum unwiderruflichen Löschen ausgewählt. Sind Sie sicher, dass Sie diese(n) Eintrag/Einträge dauerhaft löschen möchten?",
"placeholders": {
"count": {
"content": "$1",
@ -3119,7 +3119,7 @@
"message": "Einträge wiederherstellen"
},
"restoreSelectedItemsDesc": {
"message": "Sie haben $COUNT$ Eintrag/Einträge zum Wiederherstellen ausgewählt. Sind Sie sicher, dass Sie alle diese Einträge wiederherstellen möchten?",
"message": "Sie haben $COUNT$ Eintrag/Einträge zum Wiederherstellen ausgewählt. Sind Sie sicher, dass Sie diese(n) Eintrag/Einträge dauerhaft löschen möchten?",
"placeholders": {
"count": {
"content": "$1",

View File

@ -461,10 +461,10 @@
"message": "Are you sure you want to delete this item?"
},
"deletedItem": {
"message": "Deleted item"
"message": "Item sent to bin"
},
"deletedItems": {
"message": "Deleted items"
"message": "Items sent to bin"
},
"movedItems": {
"message": "Moved items"
@ -2249,7 +2249,7 @@
}
},
"deletedItemId": {
"message": "Deleted item $ID$.",
"message": "Sent item $ID$ to bin.",
"placeholders": {
"id": {
"content": "$1",
@ -3055,11 +3055,11 @@
"description": "Verb form: to make secure or inaccesible by"
},
"trash": {
"message": "Rubbish",
"message": "Bin",
"description": "Noun: A special folder for holding deleted items that have not yet been permanently deleted"
},
"searchTrash": {
"message": "Search rubbish"
"message": "Search bin"
},
"permanentlyDelete": {
"message": "Permanently delete"

View File

@ -1485,7 +1485,7 @@
"message": "Breached Accounts Found"
},
"compromisedData": {
"message": "Compromised data"
"message": "Vaarantunutta tietoa"
},
"website": {
"message": "Sivusto"

View File

@ -2817,10 +2817,10 @@
"message": "Filtri"
},
"vaultTimeout": {
"message": "Vault Timeout"
"message": "Timeout Cassaforte"
},
"vaultTimeoutDesc": {
"message": "Choose when your vault will timeout and perform the selected action."
"message": "Scegli quando la tua cassaforte andrà in timeout ed esegui l'azione selezionata."
},
"oneMinute": {
"message": "1 minuto"
@ -3042,45 +3042,45 @@
"message": "Preferenze utente"
},
"vaultTimeoutAction": {
"message": "Vault Timeout Action"
"message": "Azione Timeout Cassaforte"
},
"vaultTimeoutActionLockDesc": {
"message": "Scegli quando bloccare la tua cassaforte. Una cassaforte bloccata richiede l'inserimento della password principale per potervi accedere."
"message": "Una cassaforte bloccata richiede l'inserimento della password principale per accedere nuovamente."
},
"vaultTimeoutActionLogOutDesc": {
"message": "A logged out vault requires that you re-authenticate to access it again."
"message": "La disconnessione dalla cassaforte richiede l'inserimento della password principale per accedere nuovamente."
},
"lock": {
"message": "Lock",
"message": "Blocca",
"description": "Verb form: to make secure or inaccesible by"
},
"trash": {
"message": "Trash",
"message": "Cestino",
"description": "Noun: A special folder for holding deleted items that have not yet been permanently deleted"
},
"searchTrash": {
"message": "Search Trash"
"message": "Cerca nel cestino"
},
"permanentlyDelete": {
"message": "Permanently Delete"
"message": "Elimina definitivamente"
},
"permanentlyDeleteSelected": {
"message": "Permanently Delete Selected"
"message": "Elimina definitivamente l'elemento selezionato"
},
"permanentlyDeleteItem": {
"message": "Permanently Delete Item"
"message": "Elimina definitivamente l'elemento"
},
"permanentlyDeleteItemConfirmation": {
"message": "Are you sure you want to permanently delete this item?"
"message": "Sei sicuro di voler eliminare definitivamente questo elemento?"
},
"permanentlyDeletedItem": {
"message": "Permanently Deleted item"
"message": "Elimina definitivamente l'elemento"
},
"permanentlyDeletedItems": {
"message": "Permanently Deleted items"
"message": "Elimina definitivamente gli elementi"
},
"permanentlyDeleteSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s) to permanently delete. Are you sure you want to permanently delete all of these items?",
"message": "Hai selezionato $COUNT$ elemento/i da eliminare definitivamente. Sei sicuro di voler eliminare definitivamente tutti gli elementi selezionati?",
"placeholders": {
"count": {
"content": "$1",
@ -3089,7 +3089,7 @@
}
},
"permanentlyDeletedItemId": {
"message": "Permanently Deleted item $ID$.",
"message": "Elemento definitivamente eliminato $ID$.",
"placeholders": {
"id": {
"content": "$1",
@ -3098,28 +3098,28 @@
}
},
"restore": {
"message": "Restore"
"message": "Ripristina"
},
"restoreSelected": {
"message": "Restore Selected"
"message": "Ripristina selezionato"
},
"restoreItem": {
"message": "Restore Item"
"message": "Ripristina elemento"
},
"restoredItem": {
"message": "Restored Item"
"message": "Ripristina Elemento"
},
"restoredItems": {
"message": "Restored Items"
"message": "Elementi Ripristinati"
},
"restoreItemConfirmation": {
"message": "Are you sure you want to restore this item?"
"message": "Sei sicuro di voler ripristinare questo elemento?"
},
"restoreItems": {
"message": "Restore items"
"message": "Ripristina elementi"
},
"restoreSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s) to restore. Are you sure you want to restore all of these items?",
"message": "Hai selezionato $COUNT$ elemento/i da ripristinare. Sei sicuro di voler ripristinare tutti gli elementi selezionati?",
"placeholders": {
"count": {
"content": "$1",
@ -3128,7 +3128,7 @@
}
},
"restoredItemId": {
"message": "Restored item $ID$.",
"message": "Elemento ripristinato $ID$.",
"placeholders": {
"id": {
"content": "$1",
@ -3137,9 +3137,9 @@
}
},
"vaultTimeoutLogOutConfirmation": {
"message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?"
"message": "La disconnessione rimuove tutti gli accessi alla tua cassaforte e richiede l'autenticazione online dopo il periodo di timeout. Sei sicuro di voler utilizzare questa impostazione?"
},
"vaultTimeoutLogOutConfirmationTitle": {
"message": "Timeout Action Confirmation"
"message": "Conferma Azione di Timeout"
}
}

View File

@ -1423,7 +1423,7 @@
"message": "Znaleźliśmy identyczne hasła"
},
"reusedPasswordsFoundDesc": {
"message": "Znaleźliśmy hasła ($COUNT$), które powtarzają się w sejfie. Zmień je, aby były unikalne.",
"message": "Znaleźliśmy hasła, które powtarzają się w sejfie. Zmień je, aby były unikalne.",
"placeholders": {
"count": {
"content": "$1",

View File

@ -2817,10 +2817,10 @@
"message": "Filtros"
},
"vaultTimeout": {
"message": "Vault Timeout"
"message": "Tempo de expiração do Cofre"
},
"vaultTimeoutDesc": {
"message": "Choose when your vault will timeout and perform the selected action."
"message": "Escolha quando o seu cofre irá de expirar e a ação que irá executar."
},
"oneMinute": {
"message": "1 minuto"
@ -3042,13 +3042,13 @@
"message": "Preferência do utilizador"
},
"vaultTimeoutAction": {
"message": "Vault Timeout Action"
"message": "Ação de expiração do Cofre"
},
"vaultTimeoutActionLockDesc": {
"message": "A locked vault requires that you re-enter your master password to access it again."
"message": "Um cofre bloqueado requer que você reinsira a sua palavra-passe mestra para o aceder novamente."
},
"vaultTimeoutActionLogOutDesc": {
"message": "A logged out vault requires that you re-authenticate to access it again."
"message": "Um cofre com a sessão desligada requer que você se autentique novamente para o poder aceder."
},
"lock": {
"message": "Bloquear",
@ -3140,6 +3140,6 @@
"message": "Terminar sessão irá remover todos os acessos ao seu cofre e requer autenticação online após o período de espera. Tem a certeza de que pretende utilizar esta definição?"
},
"vaultTimeoutLogOutConfirmationTitle": {
"message": "Timeout Action Confirmation"
"message": "Confirmação de expiração do Cofre"
}
}

View File

@ -3137,9 +3137,9 @@
}
},
"vaultTimeoutLogOutConfirmation": {
"message": "登出将会在超时后删除您访问密码库的所有权限,并且需要进行在线认证。 您确定要使用此设置吗?"
"message": "注销时将会移除密码库的所有访问权限,并且需要在超时后进行在线认证。 您确定要使用此设置吗?"
},
"vaultTimeoutLogOutConfirmationTitle": {
"message": "超时作确认"
"message": "超时作确认"
}
}

View File

@ -11,7 +11,7 @@ export class I18nService extends BaseI18nService {
});
this.supportedTranslationLocales = [
'en', 'ca', 'cs', 'da', 'de', 'en-GB', 'es', 'et', 'fr', 'he', 'it', 'ja', 'ko', 'nb', 'nl', 'pl',
'en', 'ca', 'cs', 'da', 'de', 'el', 'en-GB', 'es', 'et', 'fr', 'he', 'it', 'ja', 'ko', 'nb', 'nl', 'pl',
'pt-PT', 'pt-BR', 'ru', 'sk', 'sv', 'uk', 'zh-CN', 'zh-TW',
];
}