Merge branch 'main' into main

This commit is contained in:
Cesar Gonzalez 2024-04-15 12:02:39 -05:00 committed by GitHub
commit 27dd19ba1e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
209 changed files with 18085 additions and 758 deletions

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Parol silindi"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Секретният ключ е премахнат"
},
"unassignedItemsBanner": {
"message": "Забележка: неразпределените елементи на организацията вече не се виждат в изгледа с „Всички трезори“, а са достъпни само през Административната конзола. Добавете тези елементи към някоя колекция в Административната конзола, за да станат видими."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3001,9 +3001,12 @@
"description": "Notification message for when saving credentials has failed."
},
"removePasskey": {
"message": "Remove passkey"
"message": "Suprimeix la clau de pas"
},
"passkeyRemoved": {
"message": "Passkey removed"
"message": "Clau de pas suprimida"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Přístupový klíč byl odebrán"
},
"unassignedItemsBanner": {
"message": "Upozornění: Nepřiřazené položky organizace již nejsou viditelné ve Vašem zobrazení všech trezorů a jsou nyní přístupné jen v konzoli správce. Přiřaďte tyto položky do kolekce z konzole pro správce, aby byly viditelné."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Adgangsnøgle fjernet"
},
"unassignedItemsBanner": {
"message": "Bemærk: Utildelte organisationsemner er ikke længere synlige i Alle Bokse-visningen og er kun tilgængelige via Adminkonsollen. Føj disse emner til en samling fra Adminkonsollen for at gøre dem synlige."
}
}

View File

@ -2706,7 +2706,7 @@
"message": "Für dein Konto ist die Duo Zwei-Faktor-Authentifizierung erforderlich."
},
"popoutTheExtensionToCompleteLogin": {
"message": "Popout the extension to complete login."
"message": "Koppel die Erweiterung ab, um die Anmeldung abzuschließen."
},
"popoutExtension": {
"message": "Popout-Erweiterung"
@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey gelöscht"
},
"unassignedItemsBanner": {
"message": "Hinweis: Nicht zugeordnete Organisationseinträge sind nicht mehr in der Ansicht aller Tresore sichtbar und nur über die Administrator-Konsole zugänglich. Weise diese Einträge einer Sammlung aus der Administrator-Konsole zu, um sie sichtbar zu machen."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3008,5 +3008,8 @@
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
},
"unassignedItemsBannerSelfHost": {
"message": "Notice: On May 2, 2024, unassigned organization items will no longer be visible in the All Vaults view and will only be accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organisation items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Suojausavain poistettiin"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Clé d'identification (passkey) retirée"
},
"unassignedItemsBanner": {
"message": "Notice : les éléments d'organisation non assignés ne sont plus visibles dans la vue Tous les coffres et sont uniquement accessibles via la console d'administration. Assignez ces éléments à une collection à partir de la console d'administration pour les rendre visibles."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "A jelszó eltávolításra került."
},
"unassignedItemsBanner": {
"message": "Megjegyzés: A nem hozzá nem rendelt szervezeti elemek már nem láthatók az Összes széf nézetben és csak az Adminisztrátori konzolon keresztül érhetők el. Rendeljük ezeket az elemeket egy gyűjteményhez az Adminisztrátor konzolból, hogy láthatóvá tegyük azokat."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey rimossa"
},
"unassignedItemsBanner": {
"message": "Avviso: gli elementi dell'organizzazione non assegnati non sono più visibili nella visualizzazione Tutte le Cassaforti su tutti i dispositivi e sono ora accessibili solo tramite la Console di amministrazione. Assegna questi elementi ad una raccolta dalla Console di amministrazione per renderli visibili."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "パスキーを削除しました"
},
"unassignedItemsBanner": {
"message": "注意: 割り当てられていない組織項目は、すべての保管庫のビューでは表示されなくなり、管理コンソールからのみアクセスできます。 管理コンソールからコレクションにこれらのアイテムを割り当てると、表示するようにできます。"
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Pašalintas slaptaraktis"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Piekļuves atslēga noņemta"
},
"unassignedItemsBanner": {
"message": "Jāņem vērā: nepiešķirti apvienības vienumi vairs nav redzami skatā \"Visas glabātavas\" un ir sasniedzami tikai no pārvaldības konsoles, kur šie vienumi jāpiešķir krājumam, lai padarītu tos redzamus."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey verwijderd"
},
"unassignedItemsBanner": {
"message": "Let op: Niet-toegewezen organisatie-items zijn niet langer zichtbaar in de weergave van alle kluisjes en zijn alleen toegankelijk via de Admin Console. Om deze items zichtbaar te maken, moet je ze toewijzen aan een collectie via de Admin Console."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey został usunięty"
},
"unassignedItemsBanner": {
"message": "Uwaga: Nieprzypisane elementy w organizacji nie są już widoczne w widoku Wszystkie sejfy i są dostępne tylko przez Konsolę Administracyjną. Przypisz te elementy do kolekcji z konsoli administracyjnej, aby były one widoczne."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Chave de acesso removida"
},
"unassignedItemsBanner": {
"message": "Aviso: Os itens da organização não atribuídos já não são visíveis na vista Todos os cofres e só são acessíveis através da consola de administração. Atribua estes itens a uma coleção a partir da Consola de administração para os tornar visíveis."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -688,10 +688,10 @@
"message": "Запрос на обновление пароля логина при обнаружении изменений на сайте. Применяется ко всем авторизованным аккаунтам."
},
"enableUsePasskeys": {
"message": "Запрос на сохранение и использование ключей доступа"
"message": "Запрос на сохранение и использование passkey"
},
"usePasskeysDesc": {
"message": "Запрос на сохранение новых ключей или в авторизация с ключами, хранящимися в вашем хранилище. Применяется ко всем авторизованным аккаунтам."
"message": "Запрос на сохранение новых passkey или в авторизация с passkey, хранящимися в вашем хранилище. Применяется ко всем авторизованным аккаунтам."
},
"notificationChangeDesc": {
"message": "Обновить этот пароль в Bitwarden?"
@ -2786,25 +2786,25 @@
"message": "Подтвердите пароль к файлу"
},
"typePasskey": {
"message": "Ключ доступа"
"message": "Passkey"
},
"passkeyNotCopied": {
"message": "Ключ доступа не будет скопирован"
"message": "Passkey не будет скопирован"
},
"passkeyNotCopiedAlert": {
"message": "Ключ доступа не будет скопирован в клонированный элемент. Продолжить клонирование этого элемента?"
"message": "Passkey не будет скопирован в клонированный элемент. Продолжить клонирование этого элемента?"
},
"passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": {
"message": "Необходима верификация со стороны инициирующего сайта. Для аккаунтов без мастер-пароля эта возможность пока не реализована."
},
"logInWithPasskey": {
"message": "Войти с ключом доступа?"
"message": "Войти с passkey?"
},
"passkeyAlreadyExists": {
"message": "Для данного приложения уже существует ключ доступа."
"message": "Для данного приложения уже существует passkey."
},
"noPasskeysFoundForThisApplication": {
"message": "Для данного приложения ключей доступа не найдено."
"message": "Для данного приложения не найден passkey."
},
"noMatchingPasskeyLogin": {
"message": "У вас нет подходящего логина для этого сайта."
@ -2813,28 +2813,28 @@
"message": "Подтвердить"
},
"savePasskey": {
"message": "Сохранить ключ доступа"
"message": "Сохранить passkey"
},
"savePasskeyNewLogin": {
"message": "Сохранить ключ доступа как новый логин"
"message": "Сохранить passkey как новый логин"
},
"choosePasskey": {
"message": "Выберите логин, для которого будет сохранен данный ключ доступа"
"message": "Выберите логин, для которого будет сохранен данный passkey"
},
"passkeyItem": {
"message": "Ключ доступа элемента"
"message": "Элемент passkey"
},
"overwritePasskey": {
"message": "Перезаписать ключ доступа?"
"message": "Перезаписать passkey?"
},
"overwritePasskeyAlert": {
"message": "Этот элемент уже содержит ключ доступа. Вы уверены, что хотите перезаписать текущий ключ?"
"message": "Этот элемент уже содержит passkey. Вы уверены, что хотите перезаписать текущий passkey?"
},
"featureNotSupported": {
"message": "Функция пока не поддерживается"
},
"yourPasskeyIsLocked": {
"message": "Для использования ключа доступа необходима аутентификация. Для продолжения работы подтвердите свою личность."
"message": "Для использования passkey необходима аутентификация. Для продолжения работы подтвердите свою личность."
},
"multifactorAuthenticationCancelled": {
"message": "Многофакторная аутентификация отменена"
@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey удален"
},
"unassignedItemsBanner": {
"message": "Обратите внимание: неприсвоенные элементы организации больше не видны в представлении \"Все хранилища\" и доступны только через консоль администратора. Назначьте эти элементы коллекции в консоли администратора, чтобы сделать их видимыми."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Prístupový kľúč bol odstránený"
},
"unassignedItemsBanner": {
"message": "Upozornenie: Nepriradené položky organizácie už nie sú viditeľné v zobrazení Všetky Trezory a sú prístupné len cez administrátorskú konzolu. Aby boli viditeľné, priraďte tieto položky do kolekcie z konzoly administrátora."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Приступачни кључ је уклоњен"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Ключ доступу вилучено"
},
"unassignedItemsBanner": {
"message": "Увага: непризначені елементи організації більше не видимі у поданні \"Усі сховища\" і доступні лише в консолі адміністратора. Щоб зробити їх видимими, призначте ці елементи збірці в консолі адміністратора."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "通行密钥已移除"
},
"unassignedItemsBanner": {
"message": "注意:未分配的组织项目在「所有密码库」视图中不再可见,只能通过管理控制台访问。通过管理控制台将这些项目分配给集合以使其可见。"
}
}

View File

@ -3005,5 +3005,8 @@
},
"passkeyRemoved": {
"message": "Passkey removed"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -17,6 +17,10 @@ import {
FactoryOptions,
factory,
} from "../../../platform/background/service-factories/factory-options";
import {
stateProviderFactory,
StateProviderInitOptions,
} from "../../../platform/background/service-factories/state-provider.factory";
import { accountServiceFactory, AccountServiceInitOptions } from "./account-service.factory";
import {
@ -31,7 +35,8 @@ export type AuthRequestServiceInitOptions = AuthRequestServiceFactoryOptions &
AccountServiceInitOptions &
MasterPasswordServiceInitOptions &
CryptoServiceInitOptions &
ApiServiceInitOptions;
ApiServiceInitOptions &
StateProviderInitOptions;
export function authRequestServiceFactory(
cache: { authRequestService?: AuthRequestServiceAbstraction } & CachedServices,
@ -48,6 +53,7 @@ export function authRequestServiceFactory(
await internalMasterPasswordServiceFactory(cache, opts),
await cryptoServiceFactory(cache, opts),
await apiServiceFactory(cache, opts),
await stateProviderFactory(cache, opts),
),
);
}

View File

@ -6,6 +6,7 @@ import { Subject, firstValueFrom, map, switchMap, takeUntil } from "rxjs";
import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service";
import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
@ -32,6 +33,7 @@ export class AccountSwitcherComponent implements OnInit, OnDestroy {
private location: Location,
private router: Router,
private vaultTimeoutSettingsService: VaultTimeoutSettingsService,
private authService: AuthService,
) {}
get accountLimit() {
@ -42,13 +44,14 @@ export class AccountSwitcherComponent implements OnInit, OnDestroy {
return this.accountSwitcherService.SPECIAL_ADD_ACCOUNT_ID;
}
get availableAccounts$() {
return this.accountSwitcherService.availableAccounts$;
}
get currentAccount$() {
return this.accountService.activeAccount$;
}
readonly availableAccounts$ = this.accountSwitcherService.availableAccounts$;
readonly currentAccount$ = this.accountService.activeAccount$.pipe(
switchMap((a) =>
a == null
? null
: this.authService.activeAccountStatus$.pipe(map((s) => ({ ...a, status: s }))),
),
);
async ngOnInit() {
const availableVaultTimeoutActions = await firstValueFrom(

View File

@ -4,6 +4,7 @@ import { ActivatedRoute, Router } from "@angular/router";
import { Observable, combineLatest, switchMap } from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { AvatarService } from "@bitwarden/common/auth/abstractions/avatar.service";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { UserId } from "@bitwarden/common/types/guid";
@ -29,12 +30,14 @@ export class CurrentAccountComponent {
private router: Router,
private location: Location,
private route: ActivatedRoute,
private authService: AuthService,
) {
this.currentAccount$ = combineLatest([
this.accountService.activeAccount$,
this.avatarService.avatarColor$,
this.authService.activeAccountStatus$,
]).pipe(
switchMap(async ([account, avatarColor]) => {
switchMap(async ([account, avatarColor, accountStatus]) => {
if (account == null) {
return null;
}
@ -42,7 +45,7 @@ export class CurrentAccountComponent {
id: account.id,
name: account.name || account.email,
email: account.email,
status: account.status,
status: accountStatus,
avatarColor,
};

View File

@ -1,7 +1,8 @@
import { matches, mock } from "jest-mock-extended";
import { BehaviorSubject, firstValueFrom, of, timeout } from "rxjs";
import { BehaviorSubject, ReplaySubject, firstValueFrom, of, timeout } from "rxjs";
import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { AvatarService } from "@bitwarden/common/auth/abstractions/avatar.service";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
@ -12,22 +13,29 @@ import { UserId } from "@bitwarden/common/types/guid";
import { AccountSwitcherService } from "./account-switcher.service";
describe("AccountSwitcherService", () => {
const accountsSubject = new BehaviorSubject<Record<UserId, AccountInfo>>(null);
const activeAccountSubject = new BehaviorSubject<{ id: UserId } & AccountInfo>(null);
let accountsSubject: BehaviorSubject<Record<UserId, AccountInfo>>;
let activeAccountSubject: BehaviorSubject<{ id: UserId } & AccountInfo>;
let authStatusSubject: ReplaySubject<Record<UserId, AuthenticationStatus>>;
const accountService = mock<AccountService>();
const avatarService = mock<AvatarService>();
const messagingService = mock<MessagingService>();
const environmentService = mock<EnvironmentService>();
const logService = mock<LogService>();
const authService = mock<AuthService>();
let accountSwitcherService: AccountSwitcherService;
beforeEach(() => {
jest.resetAllMocks();
accountsSubject = new BehaviorSubject<Record<UserId, AccountInfo>>(null);
activeAccountSubject = new BehaviorSubject<{ id: UserId } & AccountInfo>(null);
authStatusSubject = new ReplaySubject<Record<UserId, AuthenticationStatus>>(1);
// Use subject to allow for easy updates
accountService.accounts$ = accountsSubject;
accountService.activeAccount$ = activeAccountSubject;
authService.authStatuses$ = authStatusSubject;
accountSwitcherService = new AccountSwitcherService(
accountService,
@ -35,48 +43,59 @@ describe("AccountSwitcherService", () => {
messagingService,
environmentService,
logService,
authService,
);
});
afterEach(() => {
accountsSubject.complete();
activeAccountSubject.complete();
authStatusSubject.complete();
});
describe("availableAccounts$", () => {
it("should return all accounts and an add account option when accounts are less than 5", async () => {
const user1AccountInfo: AccountInfo = {
it("should return all logged in accounts and an add account option when accounts are less than 5", async () => {
const accountInfo: AccountInfo = {
name: "Test User 1",
email: "test1@email.com",
status: AuthenticationStatus.Unlocked,
};
avatarService.getUserAvatarColor$.mockReturnValue(of("#cccccc"));
accountsSubject.next({
"1": user1AccountInfo,
} as Record<UserId, AccountInfo>);
activeAccountSubject.next(Object.assign(user1AccountInfo, { id: "1" as UserId }));
accountsSubject.next({ ["1" as UserId]: accountInfo, ["2" as UserId]: accountInfo });
authStatusSubject.next({
["1" as UserId]: AuthenticationStatus.Unlocked,
["2" as UserId]: AuthenticationStatus.Locked,
});
activeAccountSubject.next(Object.assign(accountInfo, { id: "1" as UserId }));
const accounts = await firstValueFrom(
accountSwitcherService.availableAccounts$.pipe(timeout(20)),
);
expect(accounts).toHaveLength(2);
expect(accounts).toHaveLength(3);
expect(accounts[0].id).toBe("1");
expect(accounts[0].isActive).toBeTruthy();
expect(accounts[1].id).toBe("addAccount");
expect(accounts[1].id).toBe("2");
expect(accounts[1].isActive).toBeFalsy();
expect(accounts[2].id).toBe("addAccount");
expect(accounts[2].isActive).toBeFalsy();
});
it.each([5, 6])(
"should return only accounts if there are %i accounts",
async (numberOfAccounts) => {
const seedAccounts: Record<UserId, AccountInfo> = {};
const seedStatuses: Record<UserId, AuthenticationStatus> = {};
for (let i = 0; i < numberOfAccounts; i++) {
seedAccounts[`${i}` as UserId] = {
email: `test${i}@email.com`,
name: "Test User ${i}",
status: AuthenticationStatus.Unlocked,
};
seedStatuses[`${i}` as UserId] = AuthenticationStatus.Unlocked;
}
avatarService.getUserAvatarColor$.mockReturnValue(of("#cccccc"));
accountsSubject.next(seedAccounts);
authStatusSubject.next(seedStatuses);
activeAccountSubject.next(
Object.assign(seedAccounts["1" as UserId], { id: "1" as UserId }),
);
@ -89,6 +108,26 @@ describe("AccountSwitcherService", () => {
});
},
);
it("excludes logged out accounts", async () => {
const user1AccountInfo: AccountInfo = {
name: "Test User 1",
email: "",
};
accountsSubject.next({ ["1" as UserId]: user1AccountInfo });
authStatusSubject.next({ ["1" as UserId]: AuthenticationStatus.LoggedOut });
accountsSubject.next({
"1": user1AccountInfo,
} as Record<UserId, AccountInfo>);
const accounts = await firstValueFrom(
accountSwitcherService.availableAccounts$.pipe(timeout(20)),
);
// Add account only
expect(accounts).toHaveLength(1);
expect(accounts[0].id).toBe("addAccount");
});
});
describe("selectAccount", () => {

View File

@ -11,6 +11,7 @@ import {
} from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { AvatarService } from "@bitwarden/common/auth/abstractions/avatar.service";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
@ -48,25 +49,27 @@ export class AccountSwitcherService {
private messagingService: MessagingService,
private environmentService: EnvironmentService,
private logService: LogService,
authService: AuthService,
) {
this.availableAccounts$ = combineLatest([
this.accountService.accounts$,
accountService.accounts$,
authService.authStatuses$,
this.accountService.activeAccount$,
]).pipe(
switchMap(async ([accounts, activeAccount]) => {
const accountEntries = Object.entries(accounts).filter(
([_, account]) => account.status !== AuthenticationStatus.LoggedOut,
switchMap(async ([accounts, accountStatuses, activeAccount]) => {
const loggedInIds = Object.keys(accounts).filter(
(id: UserId) => accountStatuses[id] !== AuthenticationStatus.LoggedOut,
);
// Accounts shouldn't ever be more than ACCOUNT_LIMIT but just in case do a greater than
const hasMaxAccounts = accountEntries.length >= this.ACCOUNT_LIMIT;
const hasMaxAccounts = loggedInIds.length >= this.ACCOUNT_LIMIT;
const options: AvailableAccount[] = await Promise.all(
accountEntries.map(async ([id, account]) => {
loggedInIds.map(async (id: UserId) => {
return {
name: account.name ?? account.email,
email: account.email,
name: accounts[id].name ?? accounts[id].email,
email: accounts[id].email,
id: id,
server: (await this.environmentService.getEnvironment(id))?.getHostname(),
status: account.status,
status: accountStatuses[id],
isActive: id === activeAccount?.id,
avatarColor: await firstValueFrom(
this.avatarService.getUserAvatarColor$(id as UserId),

View File

@ -596,6 +596,7 @@ export default class MainBackground {
this.masterPasswordService,
this.cryptoService,
this.apiService,
this.stateProvider,
);
this.authService = new AuthService(
@ -779,14 +780,14 @@ export default class MainBackground {
this.apiService,
this.stateProvider,
this.logService,
this.accountService,
this.authService,
);
this.eventCollectionService = new EventCollectionService(
this.cipherService,
this.stateProvider,
this.organizationService,
this.eventUploadService,
this.accountService,
this.authService,
);
this.totpService = new TotpService(this.cryptoFunctionService, this.logService);
@ -844,6 +845,7 @@ export default class MainBackground {
logoutCallback,
this.stateService,
this.authService,
this.authRequestService,
this.messagingService,
);

View File

@ -5,7 +5,10 @@ import {
organizationServiceFactory,
OrganizationServiceInitOptions,
} from "../../admin-console/background/service-factories/organization-service.factory";
import { accountServiceFactory } from "../../auth/background/service-factories/account-service.factory";
import {
authServiceFactory,
AuthServiceInitOptions,
} from "../../auth/background/service-factories/auth-service.factory";
import {
FactoryOptions,
CachedServices,
@ -29,7 +32,8 @@ export type EventCollectionServiceInitOptions = EventCollectionServiceOptions &
CipherServiceInitOptions &
StateServiceInitOptions &
OrganizationServiceInitOptions &
EventUploadServiceInitOptions;
EventUploadServiceInitOptions &
AuthServiceInitOptions;
export function eventCollectionServiceFactory(
cache: { eventCollectionService?: AbstractEventCollectionService } & CachedServices,
@ -45,7 +49,7 @@ export function eventCollectionServiceFactory(
await stateProviderFactory(cache, opts),
await organizationServiceFactory(cache, opts),
await eventUploadServiceFactory(cache, opts),
await accountServiceFactory(cache, opts),
await authServiceFactory(cache, opts),
),
);
}

View File

@ -1,7 +1,10 @@
import { EventUploadService as AbstractEventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service";
import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service";
import { accountServiceFactory } from "../../auth/background/service-factories/account-service.factory";
import {
AuthServiceInitOptions,
authServiceFactory,
} from "../../auth/background/service-factories/auth-service.factory";
import {
ApiServiceInitOptions,
apiServiceFactory,
@ -23,7 +26,8 @@ type EventUploadServiceOptions = FactoryOptions;
export type EventUploadServiceInitOptions = EventUploadServiceOptions &
ApiServiceInitOptions &
StateServiceInitOptions &
LogServiceInitOptions;
LogServiceInitOptions &
AuthServiceInitOptions;
export function eventUploadServiceFactory(
cache: { eventUploadService?: AbstractEventUploadService } & CachedServices,
@ -38,7 +42,7 @@ export function eventUploadServiceFactory(
await apiServiceFactory(cache, opts),
await stateProviderFactory(cache, opts),
await logServiceFactory(cache, opts),
await accountServiceFactory(cache, opts),
await authServiceFactory(cache, opts),
),
);
}

View File

@ -1,8 +1,10 @@
import { Component, Input } from "@angular/core";
import { Observable, map } from "rxjs";
import { Observable, combineLatest, map, of, switchMap } from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { UserId } from "@bitwarden/common/types/guid";
import { enableAccountSwitching } from "../flags";
@ -14,14 +16,18 @@ export class HeaderComponent {
@Input() noTheme = false;
@Input() hideAccountSwitcher = false;
authedAccounts$: Observable<boolean>;
constructor(accountService: AccountService) {
constructor(accountService: AccountService, authService: AuthService) {
this.authedAccounts$ = accountService.accounts$.pipe(
map((accounts) => {
switchMap((accounts) => {
if (!enableAccountSwitching()) {
return false;
return of(false);
}
return Object.values(accounts).some((a) => a.status !== AuthenticationStatus.LoggedOut);
return combineLatest(
Object.keys(accounts).map((id) => authService.authStatusFor$(id as UserId)),
).pipe(
map((statuses) => statuses.some((status) => status !== AuthenticationStatus.LoggedOut)),
);
}),
);
}

View File

@ -1,9 +1,10 @@
import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit } from "@angular/core";
import { NavigationEnd, Router, RouterOutlet } from "@angular/router";
import { ToastrService } from "ngx-toastr";
import { filter, concatMap, Subject, takeUntil, firstValueFrom } from "rxjs";
import { filter, concatMap, Subject, takeUntil, firstValueFrom, map } from "rxjs";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { DialogService, SimpleDialogOptions } from "@bitwarden/components";
@ -57,8 +58,9 @@ export class AppComponent implements OnInit, OnDestroy {
this.activeUserId = userId;
});
this.stateService.activeAccountUnlocked$
this.authService.activeAccountStatus$
.pipe(
map((status) => status === AuthenticationStatus.Unlocked),
filter((unlocked) => unlocked),
concatMap(async () => {
await this.recordActivity();

View File

@ -39,12 +39,13 @@
<app-callout
*ngIf="
(unassignedItemsBannerEnabled$ | async) &&
(unassignedItemsBannerService.showBanner$ | async)
(unassignedItemsBannerService.showBanner$ | async) &&
(unassignedItemsBannerService.bannerText$ | async)
"
type="info"
>
<p>
{{ "unassignedItemsBanner" | i18n }}
{{ unassignedItemsBannerService.bannerText$ | async | i18n }}
<a
href="https://bitwarden.com/help/unassigned-vault-items-moved-to-admin-console"
bitLink

View File

@ -35,6 +35,7 @@ import { AvatarService } from "@bitwarden/common/auth/services/avatar.service";
import { DeviceTrustCryptoService } from "@bitwarden/common/auth/services/device-trust-crypto.service.implementation";
import { DevicesApiServiceImplementation } from "@bitwarden/common/auth/services/devices-api.service.implementation";
import { KeyConnectorService } from "@bitwarden/common/auth/services/key-connector.service";
import { MasterPasswordService } from "@bitwarden/common/auth/services/master-password/master-password.service";
import { TokenService } from "@bitwarden/common/auth/services/token.service";
import { TwoFactorService } from "@bitwarden/common/auth/services/two-factor.service";
import { UserVerificationApiService } from "@bitwarden/common/auth/services/user-verification/user-verification-api.service";
@ -353,6 +354,8 @@ export class Main {
migrationRunner,
);
this.masterPasswordService = new MasterPasswordService(this.stateProvider);
this.cryptoService = new CryptoService(
this.masterPasswordService,
this.keyGenerationService,
@ -480,6 +483,7 @@ export class Main {
this.masterPasswordService,
this.cryptoService,
this.apiService,
this.stateProvider,
);
this.billingAccountProfileStateService = new DefaultBillingAccountProfileStateService(
@ -678,7 +682,7 @@ export class Main {
this.apiService,
this.stateProvider,
this.logService,
this.accountService,
this.authService,
);
this.eventCollectionService = new EventCollectionService(
@ -686,7 +690,7 @@ export class Main {
this.stateProvider,
this.organizationService,
this.eventUploadService,
this.accountService,
this.authService,
);
}

View File

@ -3,6 +3,7 @@ import { FormBuilder } from "@angular/forms";
import { BehaviorSubject, firstValueFrom, Observable, Subject } from "rxjs";
import { concatMap, debounceTime, filter, map, switchMap, takeUntil, tap } from "rxjs/operators";
import { AuthRequestServiceAbstraction } from "@bitwarden/auth/common";
import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { PolicyType } from "@bitwarden/common/admin-console/enums";
@ -20,6 +21,7 @@ import { BiometricStateService } from "@bitwarden/common/platform/biometrics/bio
import { ThemeType, KeySuffixOptions } from "@bitwarden/common/platform/enums";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service";
import { UserId } from "@bitwarden/common/types/guid";
import { DialogService } from "@bitwarden/components";
import { SetPinComponent } from "../../auth/components/set-pin.component";
@ -60,6 +62,7 @@ export class SettingsComponent implements OnInit {
showAppPreferences = true;
currentUserEmail: string;
currentUserId: UserId;
availableVaultTimeoutActions$: Observable<VaultTimeoutAction[]>;
vaultTimeoutPolicyCallout: Observable<{
@ -122,6 +125,7 @@ export class SettingsComponent implements OnInit {
private desktopSettingsService: DesktopSettingsService,
private biometricStateService: BiometricStateService,
private desktopAutofillSettingsService: DesktopAutofillSettingsService,
private authRequestService: AuthRequestServiceAbstraction,
) {
const isMac = this.platformUtilsService.getDevice() === DeviceType.MacOsDesktop;
@ -207,6 +211,7 @@ export class SettingsComponent implements OnInit {
return;
}
this.currentUserEmail = await this.stateService.getEmail();
this.currentUserId = (await this.stateService.getUserId()) as UserId;
this.availableVaultTimeoutActions$ = this.refreshTimeoutSettings$.pipe(
switchMap(() => this.vaultTimeoutSettingsService.availableVaultTimeoutActions$()),
@ -249,7 +254,8 @@ export class SettingsComponent implements OnInit {
requirePasswordOnStart: await firstValueFrom(
this.biometricStateService.requirePasswordOnStart$,
),
approveLoginRequests: (await this.stateService.getApproveLoginRequests()) ?? false,
approveLoginRequests:
(await this.authRequestService.getAcceptAuthRequests(this.currentUserId)) ?? false,
clearClipboard: await firstValueFrom(this.autofillSettingsService.clearClipboardDelay$),
minimizeOnCopyToClipboard: await this.stateService.getMinimizeOnCopyToClipboard(),
enableFavicons: await firstValueFrom(this.domainSettingsService.showFavicons$),
@ -665,7 +671,10 @@ export class SettingsComponent implements OnInit {
}
async updateApproveLoginRequests() {
await this.stateService.setApproveLoginRequests(this.form.value.approveLoginRequests);
await this.authRequestService.setAcceptAuthRequests(
this.form.value.approveLoginRequests,
this.currentUserId,
);
}
ngOnDestroy() {

View File

@ -2698,9 +2698,9 @@
"message": "Activeu l'acceleració i reinicieu el maquinari"
},
"removePasskey": {
"message": "Remove passkey"
"message": "Suprimeix la clau de pas"
},
"passkeyRemoved": {
"message": "Passkey removed"
"message": "Clau de pas suprimida"
}
}

View File

@ -2480,13 +2480,13 @@
"message": "Перейти к содержимому"
},
"typePasskey": {
"message": "Ключ доступа"
"message": "Passkey"
},
"passkeyNotCopied": {
"message": "Ключ доступа не будет скопирован"
"message": "Passkey не будет скопирован"
},
"passkeyNotCopiedAlert": {
"message": "Ключ доступа не будет скопирован в клонированный элемент. Продолжить клонирование этого элемента?"
"message": "Passkey не будет скопирован в клонированный элемент. Продолжить клонирование этого элемента?"
},
"aliasDomain": {
"message": "Псевдоним домена"

View File

@ -1907,7 +1907,7 @@
"message": "无法完成生物识别。"
},
"needADifferentMethod": {
"message": "Need a different method?"
"message": "使用其他方式?"
},
"useMasterPassword": {
"message": "使用主密码"

View File

@ -75,6 +75,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnChanges,
async ngOnInit() {
await super.ngOnInit();
await this.load();
this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {
this.ngZone.run(() => {
switch (message.command) {

View File

@ -8,7 +8,7 @@ import {
ViewContainerRef,
} from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router";
import { Subject, takeUntil } from "rxjs";
import { firstValueFrom, Subject, takeUntil } from "rxjs";
import { first } from "rxjs/operators";
import { ModalRef } from "@bitwarden/angular/components/modal/modal.ref";
@ -16,13 +16,13 @@ import { ModalService } from "@bitwarden/angular/services/modal.service";
import { VaultFilter } from "@bitwarden/angular/vault/vault-filter/models/vault-filter.model";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { EventType } from "@bitwarden/common/enums";
import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
import { CipherType } from "@bitwarden/common/vault/enums";
@ -32,6 +32,7 @@ import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
import { DialogService } from "@bitwarden/components";
import { PasswordRepromptService } from "@bitwarden/vault";
import { AuthRequestServiceAbstraction } from "../../../../../../libs/auth/src/common/abstractions";
import { SearchBarService } from "../../../app/layout/search/search-bar.service";
import { GeneratorComponent } from "../../../app/tools/generator.component";
import { invokeMenu, RendererMenuItem } from "../../../utils";
@ -102,11 +103,12 @@ export class VaultComponent implements OnInit, OnDestroy {
private eventCollectionService: EventCollectionService,
private totpService: TotpService,
private passwordRepromptService: PasswordRepromptService,
private stateService: StateService,
private searchBarService: SearchBarService,
private apiService: ApiService,
private dialogService: DialogService,
private billingAccountProfileStateService: BillingAccountProfileStateService,
private authRequestService: AuthRequestServiceAbstraction,
private accountService: AccountService,
) {}
async ngOnInit() {
@ -224,7 +226,8 @@ export class VaultComponent implements OnInit, OnDestroy {
this.searchBarService.setEnabled(true);
this.searchBarService.setPlaceholderText(this.i18nService.t("searchVault"));
const approveLoginRequests = await this.stateService.getApproveLoginRequests();
const userId = (await firstValueFrom(this.accountService.activeAccount$)).id;
const approveLoginRequests = await this.authRequestService.getAcceptAuthRequests(userId);
if (approveLoginRequests) {
const authRequest = await this.apiService.getLastAuthRequest();
if (authRequest != null) {

View File

@ -20,19 +20,4 @@
<input bitInput type="email" formControlName="clientOwnerEmail" />
</bit-form-field>
</div>
<div *ngIf="!isProvider && !acceptingSponsorship">
<input
type="checkbox"
name="businessOwned"
formControlName="businessOwned"
(change)="changedBusinessOwned.emit()"
/>
<bit-label for="businessOwned" class="tw-mb-3">{{ "accountOwnedBusiness" | i18n }}</bit-label>
<div class="tw-mt-4" *ngIf="formGroup.controls['businessOwned'].value">
<bit-form-field class="tw-w-1/2">
<bit-label>{{ "businessName" | i18n }}</bit-label>
<input bitInput type="text" formControlName="businessName" />
</bit-form-field>
</div>
</div>
</form>

View File

@ -1,15 +1,32 @@
import { Component, EventEmitter, Input, Output } from "@angular/core";
import { Component, EventEmitter, Input, OnInit, Output } from "@angular/core";
import { UntypedFormGroup } from "@angular/forms";
import { firstValueFrom } from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
@Component({
selector: "app-org-info",
templateUrl: "organization-information.component.html",
})
export class OrganizationInformationComponent {
export class OrganizationInformationComponent implements OnInit {
@Input() nameOnly = false;
@Input() createOrganization = true;
@Input() isProvider = false;
@Input() acceptingSponsorship = false;
@Input() formGroup: UntypedFormGroup;
@Output() changedBusinessOwned = new EventEmitter<void>();
constructor(private accountService: AccountService) {}
async ngOnInit(): Promise<void> {
if (this.formGroup.controls.billingEmail.value) {
return;
}
const activeAccount = await firstValueFrom(this.accountService.activeAccount$);
if (activeAccount?.email) {
this.formGroup.controls.billingEmail.setValue(activeAccount.email);
}
}
}

View File

@ -20,10 +20,6 @@
<bit-label>{{ "billingEmail" | i18n }}</bit-label>
<input bitInput id="billingEmail" formControlName="billingEmail" type="email" />
</bit-form-field>
<bit-form-field>
<bit-label>{{ "businessName" | i18n }}</bit-label>
<input bitInput id="businessName" formControlName="businessName" type="text" />
</bit-form-field>
</div>
<div>
<bit-avatar [text]="org.name" [id]="org.id" size="large"></bit-avatar>

View File

@ -65,10 +65,6 @@ export class AccountComponent {
{ value: "", disabled: true },
{ validators: [Validators.required, Validators.email, Validators.maxLength(256)] },
),
businessName: this.formBuilder.control(
{ value: "", disabled: true },
{ validators: [Validators.maxLength(50)] },
),
});
protected collectionManagementFormGroup = this.formBuilder.group({
@ -124,7 +120,6 @@ export class AccountComponent {
// Update disabled states - reactive forms prefers not using disabled attribute
if (!this.selfHosted) {
this.formGroup.get("orgName").enable();
this.formGroup.get("businessName").enable();
this.collectionManagementFormGroup.get("limitCollectionCreationDeletion").enable();
this.collectionManagementFormGroup.get("allowAdminAccessToAllCollectionItems").enable();
}
@ -143,7 +138,6 @@ export class AccountComponent {
this.formGroup.patchValue({
orgName: this.org.name,
billingEmail: this.org.billingEmail,
businessName: this.org.businessName,
});
this.collectionManagementFormGroup.patchValue({
limitCollectionCreationDeletion: this.org.limitCollectionCreationDeletion,
@ -168,7 +162,6 @@ export class AccountComponent {
const request = new OrganizationUpdateRequest();
request.name = this.formGroup.value.orgName;
request.businessName = this.formGroup.value.businessName;
request.billingEmail = this.formGroup.value.billingEmail;
// Backfill pub/priv key if necessary

View File

@ -101,7 +101,12 @@ export const getPermissionList = (flexibleCollectionsEnabled: boolean): Permissi
* for the dropdown in the AccessSelectorComponent
* @param value
*/
export const convertToPermission = (value: CollectionAccessSelectionView) => {
export const convertToPermission = (
value: CollectionAccessSelectionView | undefined,
): CollectionPermission | undefined => {
if (value == null) {
return undefined;
}
if (value.manage) {
return CollectionPermission.Manage;
} else if (value.readOnly) {

View File

@ -1,19 +0,0 @@
<form [formGroup]="formGroup" [bitSubmit]="submit">
<bit-dialog>
<span bitDialogTitle>{{ "enrollAccountRecovery" | i18n }}</span>
<div bitDialogContent>
<bit-callout type="warning">
{{ "resetPasswordEnrollmentWarning" | i18n }}
</bit-callout>
<app-user-verification formControlName="verification"></app-user-verification>
</div>
<ng-container bitDialogFooter>
<button bitButton buttonType="primary" bitFormButton type="submit">
{{ "submit" | i18n }}
</button>
<button type="button" bitButton buttonType="secondary" bitDialogClose>
{{ "cancel" | i18n }}
</button>
</ng-container>
</bit-dialog>
</form>

View File

@ -1,12 +1,7 @@
import { DIALOG_DATA, DialogRef } from "@angular/cdk/dialog";
import { Component, Inject } from "@angular/core";
import { FormControl, FormGroup, Validators } from "@angular/forms";
import { UserVerificationDialogComponent } from "@bitwarden/auth/angular";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserResetPasswordEnrollmentRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { Verification } from "@bitwarden/common/auth/types/verification";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@ -19,63 +14,58 @@ interface EnrollMasterPasswordResetData {
organization: Organization;
}
@Component({
selector: "app-enroll-master-password-reset",
templateUrl: "enroll-master-password-reset.component.html",
})
export class EnrollMasterPasswordReset {
protected organization: Organization;
constructor() {}
protected formGroup = new FormGroup({
verification: new FormControl<Verification>(null, Validators.required),
});
constructor(
private dialogRef: DialogRef,
@Inject(DIALOG_DATA) protected data: EnrollMasterPasswordResetData,
private resetPasswordService: OrganizationUserResetPasswordService,
private userVerificationService: UserVerificationService,
private platformUtilsService: PlatformUtilsService,
private i18nService: I18nService,
private syncService: SyncService,
private logService: LogService,
private organizationUserService: OrganizationUserService,
static async open(
dialogService: DialogService,
data: EnrollMasterPasswordResetData,
resetPasswordService: OrganizationUserResetPasswordService,
organizationUserService: OrganizationUserService,
platformUtilsService: PlatformUtilsService,
i18nService: I18nService,
syncService: SyncService,
logService: LogService,
) {
this.organization = data.organization;
}
const result = await UserVerificationDialogComponent.open(dialogService, {
title: "enrollAccountRecovery",
calloutOptions: {
text: "resetPasswordEnrollmentWarning",
type: "warning",
},
});
submit = async () => {
try {
await this.userVerificationService
.buildRequest(
this.formGroup.value.verification,
OrganizationUserResetPasswordEnrollmentRequest,
)
.then(async (request) => {
// Create request and execute enrollment
request.resetPasswordKey = await this.resetPasswordService.buildRecoveryKey(
this.organization.id,
);
await this.organizationUserService.putOrganizationUserResetPasswordEnrollment(
this.organization.id,
this.organization.userId,
request,
);
await this.syncService.fullSync(true);
});
this.platformUtilsService.showToast(
"success",
null,
this.i18nService.t("enrollPasswordResetSuccess"),
);
this.dialogRef.close();
} catch (e) {
this.logService.error(e);
// Handle the result of the dialog based on user action and verification success
if (result.userAction === "cancel") {
return;
}
};
static open(dialogService: DialogService, data: EnrollMasterPasswordResetData) {
return dialogService.open(EnrollMasterPasswordReset, { data });
// User confirmed the dialog so check verification success
if (!result.verificationSuccess) {
// verification failed
return;
}
// Verification succeeded
try {
// This object is missing most of the properties in the
// `OrganizationUserResetPasswordEnrollmentRequest()`, but those
// properties don't carry over to the server model anyway and are
// never used by this flow.
const request = new OrganizationUserResetPasswordEnrollmentRequest();
request.resetPasswordKey = await resetPasswordService.buildRecoveryKey(data.organization.id);
await organizationUserService.putOrganizationUserResetPasswordEnrollment(
data.organization.id,
data.organization.userId,
request,
);
platformUtilsService.showToast("success", null, i18nService.t("enrollPasswordResetSuccess"));
await syncService.fullSync(true);
} catch (e) {
logService.error(e);
}
}
}

View File

@ -1,14 +0,0 @@
import { ScrollingModule } from "@angular/cdk/scrolling";
import { NgModule } from "@angular/core";
import { UserVerificationModule } from "../../../auth/shared/components/user-verification";
import { LooseComponentsModule, SharedModule } from "../../../shared";
import { EnrollMasterPasswordReset } from "./enroll-master-password-reset.component";
@NgModule({
imports: [SharedModule, ScrollingModule, LooseComponentsModule, UserVerificationModule],
declarations: [EnrollMasterPasswordReset],
exports: [EnrollMasterPasswordReset],
})
export class OrganizationUserModule {}

View File

@ -120,7 +120,6 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
additionalStorage: [0, [Validators.min(0), Validators.max(99)]],
additionalSeats: [0, [Validators.min(0), Validators.max(100000)]],
clientOwnerEmail: ["", [Validators.email]],
businessName: [""],
plan: [this.plan],
product: [this.product],
secretsManager: this.secretsManagerSubscription,
@ -596,9 +595,6 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
private async updateOrganization(orgId: string) {
const request = new OrganizationUpgradeRequest();
request.businessName = this.formGroup.controls.businessOwned.value
? this.formGroup.controls.businessName.value
: null;
request.additionalSeats = this.formGroup.controls.additionalSeats.value;
request.additionalStorageGb = this.formGroup.controls.additionalStorage.value;
request.premiumAccessAddon =
@ -656,9 +652,6 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
request.paymentToken = tokenResult[0];
request.paymentMethodType = tokenResult[1];
request.businessName = this.formGroup.controls.businessOwned.value
? this.formGroup.controls.businessName.value
: null;
request.additionalSeats = this.formGroup.controls.additionalSeats.value;
request.additionalStorageGb = this.formGroup.controls.additionalStorage.value;
request.premiumAccessAddon =

View File

@ -2,10 +2,12 @@
class="-tw-m-6 tw-flex tw-flex-col tw-pb-6"
(onClose)="unassignedItemsBannerService.hideBanner()"
*ngIf="
(unassignedItemsBannerEnabled$ | async) && (unassignedItemsBannerService.showBanner$ | async)
(unassignedItemsBannerEnabled$ | async) &&
(unassignedItemsBannerService.showBanner$ | async) &&
(unassignedItemsBannerService.bannerText$ | async)
"
>
{{ "unassignedItemsBanner" | i18n }}
{{ unassignedItemsBannerService.bannerText$ | async | i18n }}
<a
href="https://bitwarden.com/help/unassigned-vault-items-moved-to-admin-console"
bitLink

View File

@ -1,6 +1,5 @@
import { NgModule } from "@angular/core";
import { OrganizationUserModule } from "./admin-console/organizations/users/organization-user.module";
import { AuthModule } from "./auth";
import { LoginModule } from "./auth/login/login.module";
import { TrialInitiationModule } from "./auth/trial-initiation/trial-initiation.module";
@ -16,7 +15,6 @@ import { VaultFilterModule } from "./vault/individual-vault/vault-filter/vault-f
TrialInitiationModule,
VaultFilterModule,
OrganizationBadgeModule,
OrganizationUserModule,
LoginModule,
AuthModule,
AccessComponent,

View File

@ -29,9 +29,9 @@ import { CollectionView } from "@bitwarden/common/vault/models/view/collection.v
import { BitValidators, DialogService } from "@bitwarden/components";
import {
CollectionAccessSelectionView,
GroupService,
GroupView,
CollectionAccessSelectionView,
} from "../../../admin-console/organizations/core";
import { PermissionMode } from "../../../admin-console/organizations/shared/components/access-selector/access-selector.component";
import {
@ -432,7 +432,10 @@ function mapGroupToAccessItemView(group: GroupView, collectionId: string): Acces
labelName: group.name,
accessAllItems: group.accessAll,
readonly: group.accessAll,
readonlyPermission: convertToPermission(group.collections.find((gc) => gc.id == collectionId)),
readonlyPermission:
collectionId != null
? convertToPermission(group.collections.find((gc) => gc.id == collectionId))
: undefined,
};
}
@ -456,9 +459,12 @@ function mapUserToAccessItemView(
status: user.status,
accessAllItems: user.accessAll,
readonly: user.accessAll,
readonlyPermission: convertToPermission(
new CollectionAccessSelectionView(user.collections.find((uc) => uc.id == collectionId)),
),
readonlyPermission:
collectionId != null
? convertToPermission(
new CollectionAccessSelectionView(user.collections.find((uc) => uc.id == collectionId)),
)
: undefined,
};
}

View File

@ -16,6 +16,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
import { DialogService } from "@bitwarden/components";
import { OrganizationUserResetPasswordService } from "../../../../admin-console/organizations/members/services/organization-user-reset-password/organization-user-reset-password.service";
import { EnrollMasterPasswordReset } from "../../../../admin-console/organizations/users/enroll-master-password-reset.component";
import { OptionsInput } from "../shared/components/vault-filter-section.component";
import { OrganizationFilter } from "../shared/models/vault-filter.type";
@ -46,6 +47,7 @@ export class OrganizationOptionsComponent implements OnInit, OnDestroy {
private organizationUserService: OrganizationUserService,
private userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction,
private dialogService: DialogService,
private resetPasswordService: OrganizationUserResetPasswordService,
) {}
async ngOnInit() {
@ -144,7 +146,16 @@ export class OrganizationOptionsComponent implements OnInit, OnDestroy {
async toggleResetPasswordEnrollment(org: Organization) {
if (!this.organization.resetPasswordEnrolled) {
EnrollMasterPasswordReset.open(this.dialogService, { organization: org });
await EnrollMasterPasswordReset.open(
this.dialogService,
{ organization: org },
this.resetPasswordService,
this.organizationUserService,
this.platformUtilsService,
this.i18nService,
this.syncService,
this.logService,
);
} else {
// Remove reset password
const request = new OrganizationUserResetPasswordEnrollmentRequest();

View File

@ -4956,6 +4956,9 @@
"addExistingOrganization": {
"message": "Voeg bestaande organisasie toe"
},
"addNewOrganization": {
"message": "Add new organization"
},
"myProvider": {
"message": "My aanbieder"
},
@ -7498,6 +7501,9 @@
"collectionAccessRestricted": {
"message": "Collection access is restricted"
},
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
},
@ -7600,6 +7606,9 @@
"providerPortal": {
"message": "Provider Portal"
},
"viewCollection": {
"message": "View collection"
},
"restrictedGroupAccess": {
"message": "You cannot add yourself to groups."
},
@ -7642,5 +7651,256 @@
},
"items": {
"message": "Items"
},
"assignedSeats": {
"message": "Assigned seats"
},
"assigned": {
"message": "Assigned"
},
"used": {
"message": "Used"
},
"remaining": {
"message": "Remaining"
},
"unlinkOrganization": {
"message": "Unlink organization"
},
"manageSeats": {
"message": "MANAGE SEATS"
},
"manageSeatsDescription": {
"message": "Adjustments to seats will be reflected in the next billing cycle."
},
"unassignedSeatsDescription": {
"message": "Unassigned subscription seats"
},
"purchaseSeatDescription": {
"message": "Additional seats purchased"
},
"assignedSeatCannotUpdate": {
"message": "Assigned Seats can not be updated. Please contact your organization owner for assistance."
},
"subscriptionUpdateFailed": {
"message": "Subscription update failed"
},
"trial": {
"message": "Trial",
"description": "A subscription status label."
},
"pastDue": {
"message": "Past due",
"description": "A subscription status label"
},
"subscriptionExpired": {
"message": "Subscription expired",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
"message": "You have a grace period of $DAYS$ days from your subscription expiration date to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they are charged automatically."
},
"pastDueWarningForSendInvoice": {
"message": "You have a grace period of $DAYS$ days from the date your first unpaid invoice is due to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they pay via invoice."
},
"unpaidInvoice": {
"message": "Unpaid invoice",
"description": "The header of a warning box shown to a user whose subscription is unpaid."
},
"toReactivateYourSubscription": {
"message": "To reactivate your subscription, please resolve the past due invoices.",
"description": "The body of a warning box shown to a user whose subscription is unpaid."
},
"cancellationDate": {
"message": "Cancellation date",
"description": "The date header used when a subscription is cancelled."
},
"machineAccountsCannotCreate": {
"message": "Machine accounts cannot be created in suspended organizations. Please contact your organization owner for assistance."
},
"machineAccount": {
"message": "Machine account",
"description": "A machine user which can be used to automate processes and access secrets in the system."
},
"machineAccounts": {
"message": "Machine accounts",
"description": "The title for the section that deals with machine accounts."
},
"newMachineAccount": {
"message": "New machine account",
"description": "Title for creating a new machine account."
},
"machineAccountsNoItemsMessage": {
"message": "Create a new machine account to get started automating secret access.",
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
"message": "Nothing to show yet",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
"message": "Delete machine accounts",
"description": "Title for the action to delete one or multiple machine accounts."
},
"deleteMachineAccount": {
"message": "Delete machine account",
"description": "Title for the action to delete a single machine account."
},
"viewMachineAccount": {
"message": "View machine account",
"description": "Action to view the details of a machine account."
},
"deleteMachineAccountDialogMessage": {
"message": "Deleting machine account $MACHINE_ACCOUNT$ is permanent and irreversible.",
"placeholders": {
"machine_account": {
"content": "$1",
"example": "Machine account name"
}
}
},
"deleteMachineAccountsDialogMessage": {
"message": "Deleting machine accounts is permanent and irreversible."
},
"deleteMachineAccountsConfirmMessage": {
"message": "Delete $COUNT$ machine accounts",
"placeholders": {
"count": {
"content": "$1",
"example": "2"
}
}
},
"deleteMachineAccountToast": {
"message": "Machine account deleted"
},
"deleteMachineAccountsToast": {
"message": "Machine accounts deleted"
},
"searchMachineAccounts": {
"message": "Search machine accounts",
"description": "Placeholder text for searching machine accounts."
},
"editMachineAccount": {
"message": "Edit machine account",
"description": "Title for editing a machine account."
},
"machineAccountName": {
"message": "Machine account name",
"description": "Label for the name of a machine account"
},
"machineAccountCreated": {
"message": "Machine account created",
"description": "Notifies that a new machine account has been created"
},
"machineAccountUpdated": {
"message": "Machine account updated",
"description": "Notifies that a machine account has been updated"
},
"projectMachineAccountsDescription": {
"message": "Grant machine accounts access to this project."
},
"projectMachineAccountsSelectHint": {
"message": "Type or select machine accounts"
},
"projectEmptyMachineAccountAccessPolicies": {
"message": "Add machine accounts to grant access"
},
"machineAccountPeopleDescription": {
"message": "Grant groups or people access to this machine account."
},
"machineAccountProjectsDescription": {
"message": "Assign projects to this machine account. "
},
"createMachineAccount": {
"message": "Create a machine account"
},
"maPeopleWarningMessage": {
"message": "Removing people from a machine account does not remove the access tokens they created. For security best practice, it is recommended to revoke access tokens created by people removed from a machine account."
},
"smAccessRemovalWarningMaTitle": {
"message": "Remove access to this machine account"
},
"smAccessRemovalWarningMaMessage": {
"message": "This action will remove your access to the machine account."
},
"machineAccountsIncluded": {
"message": "$COUNT$ machine accounts included",
"placeholders": {
"count": {
"content": "$1",
"example": "3"
}
}
},
"additionalMachineAccountCost": {
"message": "$COST$ per month for additional machine accounts",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"additionalMachineAccounts": {
"message": "Additional machine accounts"
},
"includedMachineAccounts": {
"message": "Your plan comes with $COUNT$ machine accounts.",
"placeholders": {
"count": {
"content": "$1",
"example": "50"
}
}
},
"addAdditionalMachineAccounts": {
"message": "You can add additional machine accounts for $COST$ per month.",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"limitMachineAccounts": {
"message": "Limit machine accounts (optional)"
},
"limitMachineAccountsDesc": {
"message": "Set a limit for your machine accounts. Once this limit is reached, you will not be able to create new machine accounts."
},
"machineAccountLimit": {
"message": "Machine account limit (optional)"
},
"maxMachineAccountCost": {
"message": "Max potential machine account cost"
},
"machineAccountAccessUpdated": {
"message": "Machine account access updated"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in your All Vaults view across devices and are now only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -4956,6 +4956,9 @@
"addExistingOrganization": {
"message": "Add existing organization"
},
"addNewOrganization": {
"message": "Add new organization"
},
"myProvider": {
"message": "My Provider"
},
@ -7498,6 +7501,9 @@
"collectionAccessRestricted": {
"message": "Collection access is restricted"
},
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
},
@ -7600,6 +7606,9 @@
"providerPortal": {
"message": "Provider Portal"
},
"viewCollection": {
"message": "View collection"
},
"restrictedGroupAccess": {
"message": "You cannot add yourself to groups."
},
@ -7642,5 +7651,256 @@
},
"items": {
"message": "Items"
},
"assignedSeats": {
"message": "Assigned seats"
},
"assigned": {
"message": "Assigned"
},
"used": {
"message": "Used"
},
"remaining": {
"message": "Remaining"
},
"unlinkOrganization": {
"message": "Unlink organization"
},
"manageSeats": {
"message": "MANAGE SEATS"
},
"manageSeatsDescription": {
"message": "Adjustments to seats will be reflected in the next billing cycle."
},
"unassignedSeatsDescription": {
"message": "Unassigned subscription seats"
},
"purchaseSeatDescription": {
"message": "Additional seats purchased"
},
"assignedSeatCannotUpdate": {
"message": "Assigned Seats can not be updated. Please contact your organization owner for assistance."
},
"subscriptionUpdateFailed": {
"message": "Subscription update failed"
},
"trial": {
"message": "Trial",
"description": "A subscription status label."
},
"pastDue": {
"message": "Past due",
"description": "A subscription status label"
},
"subscriptionExpired": {
"message": "Subscription expired",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
"message": "You have a grace period of $DAYS$ days from your subscription expiration date to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they are charged automatically."
},
"pastDueWarningForSendInvoice": {
"message": "You have a grace period of $DAYS$ days from the date your first unpaid invoice is due to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they pay via invoice."
},
"unpaidInvoice": {
"message": "Unpaid invoice",
"description": "The header of a warning box shown to a user whose subscription is unpaid."
},
"toReactivateYourSubscription": {
"message": "To reactivate your subscription, please resolve the past due invoices.",
"description": "The body of a warning box shown to a user whose subscription is unpaid."
},
"cancellationDate": {
"message": "Cancellation date",
"description": "The date header used when a subscription is cancelled."
},
"machineAccountsCannotCreate": {
"message": "Machine accounts cannot be created in suspended organizations. Please contact your organization owner for assistance."
},
"machineAccount": {
"message": "Machine account",
"description": "A machine user which can be used to automate processes and access secrets in the system."
},
"machineAccounts": {
"message": "Machine accounts",
"description": "The title for the section that deals with machine accounts."
},
"newMachineAccount": {
"message": "New machine account",
"description": "Title for creating a new machine account."
},
"machineAccountsNoItemsMessage": {
"message": "Create a new machine account to get started automating secret access.",
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
"message": "Nothing to show yet",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
"message": "Delete machine accounts",
"description": "Title for the action to delete one or multiple machine accounts."
},
"deleteMachineAccount": {
"message": "Delete machine account",
"description": "Title for the action to delete a single machine account."
},
"viewMachineAccount": {
"message": "View machine account",
"description": "Action to view the details of a machine account."
},
"deleteMachineAccountDialogMessage": {
"message": "Deleting machine account $MACHINE_ACCOUNT$ is permanent and irreversible.",
"placeholders": {
"machine_account": {
"content": "$1",
"example": "Machine account name"
}
}
},
"deleteMachineAccountsDialogMessage": {
"message": "Deleting machine accounts is permanent and irreversible."
},
"deleteMachineAccountsConfirmMessage": {
"message": "Delete $COUNT$ machine accounts",
"placeholders": {
"count": {
"content": "$1",
"example": "2"
}
}
},
"deleteMachineAccountToast": {
"message": "Machine account deleted"
},
"deleteMachineAccountsToast": {
"message": "Machine accounts deleted"
},
"searchMachineAccounts": {
"message": "Search machine accounts",
"description": "Placeholder text for searching machine accounts."
},
"editMachineAccount": {
"message": "Edit machine account",
"description": "Title for editing a machine account."
},
"machineAccountName": {
"message": "Machine account name",
"description": "Label for the name of a machine account"
},
"machineAccountCreated": {
"message": "Machine account created",
"description": "Notifies that a new machine account has been created"
},
"machineAccountUpdated": {
"message": "Machine account updated",
"description": "Notifies that a machine account has been updated"
},
"projectMachineAccountsDescription": {
"message": "Grant machine accounts access to this project."
},
"projectMachineAccountsSelectHint": {
"message": "Type or select machine accounts"
},
"projectEmptyMachineAccountAccessPolicies": {
"message": "Add machine accounts to grant access"
},
"machineAccountPeopleDescription": {
"message": "Grant groups or people access to this machine account."
},
"machineAccountProjectsDescription": {
"message": "Assign projects to this machine account. "
},
"createMachineAccount": {
"message": "Create a machine account"
},
"maPeopleWarningMessage": {
"message": "Removing people from a machine account does not remove the access tokens they created. For security best practice, it is recommended to revoke access tokens created by people removed from a machine account."
},
"smAccessRemovalWarningMaTitle": {
"message": "Remove access to this machine account"
},
"smAccessRemovalWarningMaMessage": {
"message": "This action will remove your access to the machine account."
},
"machineAccountsIncluded": {
"message": "$COUNT$ machine accounts included",
"placeholders": {
"count": {
"content": "$1",
"example": "3"
}
}
},
"additionalMachineAccountCost": {
"message": "$COST$ per month for additional machine accounts",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"additionalMachineAccounts": {
"message": "Additional machine accounts"
},
"includedMachineAccounts": {
"message": "Your plan comes with $COUNT$ machine accounts.",
"placeholders": {
"count": {
"content": "$1",
"example": "50"
}
}
},
"addAdditionalMachineAccounts": {
"message": "You can add additional machine accounts for $COST$ per month.",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"limitMachineAccounts": {
"message": "Limit machine accounts (optional)"
},
"limitMachineAccountsDesc": {
"message": "Set a limit for your machine accounts. Once this limit is reached, you will not be able to create new machine accounts."
},
"machineAccountLimit": {
"message": "Machine account limit (optional)"
},
"maxMachineAccountCost": {
"message": "Max potential machine account cost"
},
"machineAccountAccessUpdated": {
"message": "Machine account access updated"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in your All Vaults view across devices and are now only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -4956,6 +4956,9 @@
"addExistingOrganization": {
"message": "Mövcud təşkilatı əlavə et"
},
"addNewOrganization": {
"message": "Yeni təşkilat əlavə et"
},
"myProvider": {
"message": "Provayderim"
},
@ -7498,6 +7501,9 @@
"collectionAccessRestricted": {
"message": "Kolleksiya müraciəti məhdudlaşdırıldı"
},
"readOnlyCollectionAccess": {
"message": "Bu kolleksiyanı idarə etmək üçün müraciətiniz yoxdur."
},
"grantCollectionAccess": {
"message": "Qrup və ya üzvlərin bu kolleksiyaya müraciətinə icazə verin."
},
@ -7600,6 +7606,9 @@
"providerPortal": {
"message": "Provayder Portal"
},
"viewCollection": {
"message": "Kolleksiyaya bax"
},
"restrictedGroupAccess": {
"message": "Özünüzü qruplara əlavə edə bilməzsiniz."
},
@ -7607,28 +7616,28 @@
"message": "Özünüzü kolleksiyalara əlavə edə bilməzsiniz."
},
"assign": {
"message": "Assign"
"message": "Təyin et"
},
"assignToCollections": {
"message": "Assign to collections"
"message": "Kolleksiyalara təyin et"
},
"assignToTheseCollections": {
"message": "Assign to these collections"
"message": "Bu kolleksiyalara təyin et"
},
"bulkCollectionAssignmentDialogDescription": {
"message": "Select the collections that the items will be shared with. Once an item is updated in one collection, it will be reflected in all collections. Only organization members with access to these collections will be able to see the items."
"message": "Elementlərin paylaşılacağı kolleksiyaları seçin. Bir kolleksiyada bir element güncəlləndikdə, bütün kolleksiyalarda əks olunacaq. Elementləri, yalnız bu kolleksiyalara müraciət edə bilən təşkilat üzvləri görə bilər."
},
"selectCollectionsToAssign": {
"message": "Select collections to assign"
"message": "Təyin ediləcək kolleksiyaları seçin"
},
"noCollectionsAssigned": {
"message": "No collections have been assigned"
"message": "Heç bir kolleksiya təyin edilmədi"
},
"successfullyAssignedCollections": {
"message": "Successfully assigned collections"
"message": "Uğurla təyin edilən kolleksiyalar"
},
"bulkCollectionAssignmentWarning": {
"message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.",
"message": "$TOTAL_COUNT$ element seçmisiniz. Düzəliş icazəniz olmadığı üçün $READONLY_COUNT$ elementi güncəlləyə bilməzsiniz.",
"placeholders": {
"total_count": {
"content": "$1",
@ -7641,6 +7650,257 @@
}
},
"items": {
"message": "Items"
"message": "Elementlər"
},
"assignedSeats": {
"message": "Təyin edilən yerlər"
},
"assigned": {
"message": "Təyin edilmiş"
},
"used": {
"message": "İstifadə edilmiş"
},
"remaining": {
"message": "Qalan"
},
"unlinkOrganization": {
"message": "Təşkilatı ayır"
},
"manageSeats": {
"message": "YERLƏRİ İDARƏ ET"
},
"manageSeatsDescription": {
"message": "Yerlərə edilən düzəlişlər növbəti hesablaşma dövründə öz əksini tapacaq."
},
"unassignedSeatsDescription": {
"message": "Təyin edilməmiş abunəlik yerləri"
},
"purchaseSeatDescription": {
"message": "Əlavə yerlər satın alındı"
},
"assignedSeatCannotUpdate": {
"message": "Təyin edilən yerlər güncəllənə bilməz. Lütfən kömək üçün təşkilatınızın sahibi ilə əlaqə saxlayın."
},
"subscriptionUpdateFailed": {
"message": "Abunəlik güncəllənmədi"
},
"trial": {
"message": "Sınaq",
"description": "A subscription status label."
},
"pastDue": {
"message": "Vaxtı keçmiş",
"description": "A subscription status label"
},
"subscriptionExpired": {
"message": "Abunəliyin müddəti bitib",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
"message": "Abunəliyinizi davam etdirmək üçün abunəliyin bitmə tarixindən etibarən $DAYS$ gün güzəşt dövrünüz var. $SUSPENSION_DATE$ tarixinə qədər vaxtı keçmiş fakturaları həll edin.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they are charged automatically."
},
"pastDueWarningForSendInvoice": {
"message": "Abunəliyinizi davam etdirmək üçün ilk ödənilməmiş fakturanızın yazıldığı tarixdən etibarən $DAYS$ gün güzəşt dövrünüz var. $SUSPENSION_DATE$ tarixinə qədər vaxtı keçmiş fakturaları həll edin.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they pay via invoice."
},
"unpaidInvoice": {
"message": "Ödənilməmiş faktura",
"description": "The header of a warning box shown to a user whose subscription is unpaid."
},
"toReactivateYourSubscription": {
"message": "Abunəliyi yenidən aktivləşdirmək üçün lütfən vaxtı keçmiş fakturaları həll edin.",
"description": "The body of a warning box shown to a user whose subscription is unpaid."
},
"cancellationDate": {
"message": "Ləğv tarixi",
"description": "The date header used when a subscription is cancelled."
},
"machineAccountsCannotCreate": {
"message": "Maşın hesabları fəaliyyəti dayandırılmış təşkilatlarda yaradıla bilməz. Lütfən kömək üçün təşkilatınızın sahibi ilə əlaqə saxlayın."
},
"machineAccount": {
"message": "Maşın hesabı",
"description": "A machine user which can be used to automate processes and access secrets in the system."
},
"machineAccounts": {
"message": "Maşın hesabları",
"description": "The title for the section that deals with machine accounts."
},
"newMachineAccount": {
"message": "Yeni maşın hesabı",
"description": "Title for creating a new machine account."
},
"machineAccountsNoItemsMessage": {
"message": "\"Sirr\" müraciətini avtomatlaşdırmağa başlamaq üçün yeni bir maşın hesabı yaradın.",
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
"message": "Göstəriləcək heç nə yoxdur",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
"message": "Maşın hesablarını sil",
"description": "Title for the action to delete one or multiple machine accounts."
},
"deleteMachineAccount": {
"message": "Maşın hesabını sil",
"description": "Title for the action to delete a single machine account."
},
"viewMachineAccount": {
"message": "Maşın hesabına bax",
"description": "Action to view the details of a machine account."
},
"deleteMachineAccountDialogMessage": {
"message": "$MACHINE_ACCOUNT$ maşın hesabının silinməsi daimi və geri qaytarıla bilməyən prosesdir.",
"placeholders": {
"machine_account": {
"content": "$1",
"example": "Machine account name"
}
}
},
"deleteMachineAccountsDialogMessage": {
"message": "Maşın hesablarının silinməsi daimi və geri qaytarıla bilməyən prosesdir."
},
"deleteMachineAccountsConfirmMessage": {
"message": "$COUNT$ maşın hesabını sil",
"placeholders": {
"count": {
"content": "$1",
"example": "2"
}
}
},
"deleteMachineAccountToast": {
"message": "Maşın hesabı silindi"
},
"deleteMachineAccountsToast": {
"message": "Maşın hesabları silindi"
},
"searchMachineAccounts": {
"message": "Maşın hesablarını axtar",
"description": "Placeholder text for searching machine accounts."
},
"editMachineAccount": {
"message": "Maşın hesabına düzəliş et",
"description": "Title for editing a machine account."
},
"machineAccountName": {
"message": "Maşın hesabının adı",
"description": "Label for the name of a machine account"
},
"machineAccountCreated": {
"message": "Maşın hesabı yaradıldı",
"description": "Notifies that a new machine account has been created"
},
"machineAccountUpdated": {
"message": "Maşın hesabı güncəlləndi",
"description": "Notifies that a machine account has been updated"
},
"projectMachineAccountsDescription": {
"message": "Maşın hesablarının bu layihəyə müraciətinə icazə verin."
},
"projectMachineAccountsSelectHint": {
"message": "Maşın hesablarını yazın və ya seçin"
},
"projectEmptyMachineAccountAccessPolicies": {
"message": "Müraciət icazəsi veriləcək maşın hesablarını əlavə edin"
},
"machineAccountPeopleDescription": {
"message": "Qrup və ya insanların bu maşın hesabına müraciətinə icazə verin."
},
"machineAccountProjectsDescription": {
"message": "Bu maşın hesabına layihələr təyin edin. "
},
"createMachineAccount": {
"message": "Bir maşın hesabı yarat"
},
"maPeopleWarningMessage": {
"message": "İnsanları maşın hesabından silsəniz belə, yaratdıqları müraciət tokenləri silinmir. Güvənliyin ən yaxşı təcrübəsi üçün, maşın hesabından silinmiş insanlar tərəfindən yaradılan müraciət tokenlərinin ləğv edilməsi tövsiyə olunur."
},
"smAccessRemovalWarningMaTitle": {
"message": "Bu maşın hesabına müraciəti sil"
},
"smAccessRemovalWarningMaMessage": {
"message": "Bu əməliyyat, maşın hesabına olan müraciətinizi götürəcək."
},
"machineAccountsIncluded": {
"message": "$COUNT$ maşın hesabı daxildir",
"placeholders": {
"count": {
"content": "$1",
"example": "3"
}
}
},
"additionalMachineAccountCost": {
"message": "Əlavə maşın hesabları üçün aylıq $COST$",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"additionalMachineAccounts": {
"message": "Əlavə maşın hesabları"
},
"includedMachineAccounts": {
"message": "Planınız, $COUNT$ maşın hesabı ilə gəlir.",
"placeholders": {
"count": {
"content": "$1",
"example": "50"
}
}
},
"addAdditionalMachineAccounts": {
"message": "Aylıq $COST$ qarşılığında əlavə maşın hesablarını əlavə edə bilərsiniz.",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"limitMachineAccounts": {
"message": "Maşın hesablarını limitlə (ixtiyari)"
},
"limitMachineAccountsDesc": {
"message": "Maşın hesablarınız üçün bir limit müəyyən edin. Bu limitə çatanda, yeni maşın hesabı yarada bilməyəcəksiniz."
},
"machineAccountLimit": {
"message": "Maşın hesabı limiti (ixtiyari)"
},
"maxMachineAccountCost": {
"message": "Maksimal mümkün maşın hesabı qiyməti"
},
"machineAccountAccessUpdated": {
"message": "Maşın hesabına müraciət güncəlləndi"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in your All Vaults view across devices and are now only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -4956,6 +4956,9 @@
"addExistingOrganization": {
"message": "Дадаць існуючую арганізацыю"
},
"addNewOrganization": {
"message": "Add new organization"
},
"myProvider": {
"message": "Мой пастаўшчык"
},
@ -7498,6 +7501,9 @@
"collectionAccessRestricted": {
"message": "Collection access is restricted"
},
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
},
@ -7600,6 +7606,9 @@
"providerPortal": {
"message": "Provider Portal"
},
"viewCollection": {
"message": "View collection"
},
"restrictedGroupAccess": {
"message": "You cannot add yourself to groups."
},
@ -7642,5 +7651,256 @@
},
"items": {
"message": "Items"
},
"assignedSeats": {
"message": "Assigned seats"
},
"assigned": {
"message": "Assigned"
},
"used": {
"message": "Used"
},
"remaining": {
"message": "Remaining"
},
"unlinkOrganization": {
"message": "Unlink organization"
},
"manageSeats": {
"message": "MANAGE SEATS"
},
"manageSeatsDescription": {
"message": "Adjustments to seats will be reflected in the next billing cycle."
},
"unassignedSeatsDescription": {
"message": "Unassigned subscription seats"
},
"purchaseSeatDescription": {
"message": "Additional seats purchased"
},
"assignedSeatCannotUpdate": {
"message": "Assigned Seats can not be updated. Please contact your organization owner for assistance."
},
"subscriptionUpdateFailed": {
"message": "Subscription update failed"
},
"trial": {
"message": "Trial",
"description": "A subscription status label."
},
"pastDue": {
"message": "Past due",
"description": "A subscription status label"
},
"subscriptionExpired": {
"message": "Subscription expired",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
"message": "You have a grace period of $DAYS$ days from your subscription expiration date to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they are charged automatically."
},
"pastDueWarningForSendInvoice": {
"message": "You have a grace period of $DAYS$ days from the date your first unpaid invoice is due to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they pay via invoice."
},
"unpaidInvoice": {
"message": "Unpaid invoice",
"description": "The header of a warning box shown to a user whose subscription is unpaid."
},
"toReactivateYourSubscription": {
"message": "To reactivate your subscription, please resolve the past due invoices.",
"description": "The body of a warning box shown to a user whose subscription is unpaid."
},
"cancellationDate": {
"message": "Cancellation date",
"description": "The date header used when a subscription is cancelled."
},
"machineAccountsCannotCreate": {
"message": "Machine accounts cannot be created in suspended organizations. Please contact your organization owner for assistance."
},
"machineAccount": {
"message": "Machine account",
"description": "A machine user which can be used to automate processes and access secrets in the system."
},
"machineAccounts": {
"message": "Machine accounts",
"description": "The title for the section that deals with machine accounts."
},
"newMachineAccount": {
"message": "New machine account",
"description": "Title for creating a new machine account."
},
"machineAccountsNoItemsMessage": {
"message": "Create a new machine account to get started automating secret access.",
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
"message": "Nothing to show yet",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
"message": "Delete machine accounts",
"description": "Title for the action to delete one or multiple machine accounts."
},
"deleteMachineAccount": {
"message": "Delete machine account",
"description": "Title for the action to delete a single machine account."
},
"viewMachineAccount": {
"message": "View machine account",
"description": "Action to view the details of a machine account."
},
"deleteMachineAccountDialogMessage": {
"message": "Deleting machine account $MACHINE_ACCOUNT$ is permanent and irreversible.",
"placeholders": {
"machine_account": {
"content": "$1",
"example": "Machine account name"
}
}
},
"deleteMachineAccountsDialogMessage": {
"message": "Deleting machine accounts is permanent and irreversible."
},
"deleteMachineAccountsConfirmMessage": {
"message": "Delete $COUNT$ machine accounts",
"placeholders": {
"count": {
"content": "$1",
"example": "2"
}
}
},
"deleteMachineAccountToast": {
"message": "Machine account deleted"
},
"deleteMachineAccountsToast": {
"message": "Machine accounts deleted"
},
"searchMachineAccounts": {
"message": "Search machine accounts",
"description": "Placeholder text for searching machine accounts."
},
"editMachineAccount": {
"message": "Edit machine account",
"description": "Title for editing a machine account."
},
"machineAccountName": {
"message": "Machine account name",
"description": "Label for the name of a machine account"
},
"machineAccountCreated": {
"message": "Machine account created",
"description": "Notifies that a new machine account has been created"
},
"machineAccountUpdated": {
"message": "Machine account updated",
"description": "Notifies that a machine account has been updated"
},
"projectMachineAccountsDescription": {
"message": "Grant machine accounts access to this project."
},
"projectMachineAccountsSelectHint": {
"message": "Type or select machine accounts"
},
"projectEmptyMachineAccountAccessPolicies": {
"message": "Add machine accounts to grant access"
},
"machineAccountPeopleDescription": {
"message": "Grant groups or people access to this machine account."
},
"machineAccountProjectsDescription": {
"message": "Assign projects to this machine account. "
},
"createMachineAccount": {
"message": "Create a machine account"
},
"maPeopleWarningMessage": {
"message": "Removing people from a machine account does not remove the access tokens they created. For security best practice, it is recommended to revoke access tokens created by people removed from a machine account."
},
"smAccessRemovalWarningMaTitle": {
"message": "Remove access to this machine account"
},
"smAccessRemovalWarningMaMessage": {
"message": "This action will remove your access to the machine account."
},
"machineAccountsIncluded": {
"message": "$COUNT$ machine accounts included",
"placeholders": {
"count": {
"content": "$1",
"example": "3"
}
}
},
"additionalMachineAccountCost": {
"message": "$COST$ per month for additional machine accounts",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"additionalMachineAccounts": {
"message": "Additional machine accounts"
},
"includedMachineAccounts": {
"message": "Your plan comes with $COUNT$ machine accounts.",
"placeholders": {
"count": {
"content": "$1",
"example": "50"
}
}
},
"addAdditionalMachineAccounts": {
"message": "You can add additional machine accounts for $COST$ per month.",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"limitMachineAccounts": {
"message": "Limit machine accounts (optional)"
},
"limitMachineAccountsDesc": {
"message": "Set a limit for your machine accounts. Once this limit is reached, you will not be able to create new machine accounts."
},
"machineAccountLimit": {
"message": "Machine account limit (optional)"
},
"maxMachineAccountCost": {
"message": "Max potential machine account cost"
},
"machineAccountAccessUpdated": {
"message": "Machine account access updated"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in your All Vaults view across devices and are now only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -4956,6 +4956,9 @@
"addExistingOrganization": {
"message": "Добавяне на съществуваща организация"
},
"addNewOrganization": {
"message": "Добавяне на нова организация"
},
"myProvider": {
"message": "Моят доставчик"
},
@ -7498,6 +7501,9 @@
"collectionAccessRestricted": {
"message": "Достъпът до колекцията е ограничен"
},
"readOnlyCollectionAccess": {
"message": "Нямате достъп за управление на тази колекция."
},
"grantCollectionAccess": {
"message": "Дайте права на групи и членове до тази колекция."
},
@ -7600,6 +7606,9 @@
"providerPortal": {
"message": "Портал за доставчици"
},
"viewCollection": {
"message": "Преглед на колекцията"
},
"restrictedGroupAccess": {
"message": "Не може да добавяте себе си към групи."
},
@ -7642,5 +7651,256 @@
},
"items": {
"message": "Елементи"
},
"assignedSeats": {
"message": "Назначени места"
},
"assigned": {
"message": "Назначени"
},
"used": {
"message": "Използвани"
},
"remaining": {
"message": "Оставащи"
},
"unlinkOrganization": {
"message": "Разкачане на организацията"
},
"manageSeats": {
"message": "УПРАВЛЕНИЕ НА МЕСТАТА"
},
"manageSeatsDescription": {
"message": "Промените по местата ще се отразят в следващия платежен цикъл."
},
"unassignedSeatsDescription": {
"message": "Неназначени места от абонамента"
},
"purchaseSeatDescription": {
"message": "Закупени са нови места"
},
"assignedSeatCannotUpdate": {
"message": "Назначените места не могат да бъдат променени. Свържете се със собственика на организацията си за помощ."
},
"subscriptionUpdateFailed": {
"message": "Промяната на абонамента беше неуспешна"
},
"trial": {
"message": "Пробен период",
"description": "A subscription status label."
},
"pastDue": {
"message": "Просрочено",
"description": "A subscription status label"
},
"subscriptionExpired": {
"message": "Абонаментът е изтекъл",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
"message": "След като просрочите периода на абонамента си, разполагате с още $DAYS$ дни, за да го подновите. Моля, заплатете старите фактури до $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they are charged automatically."
},
"pastDueWarningForSendInvoice": {
"message": "След като просрочите срока на първата си неплатена фактура, разполагате с още $DAYS$ дни, за да подновите абонамента си. Моля, заплатете старите фактури до $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they pay via invoice."
},
"unpaidInvoice": {
"message": "Неплатена фактура",
"description": "The header of a warning box shown to a user whose subscription is unpaid."
},
"toReactivateYourSubscription": {
"message": "За да подновите абонамента си, моля, заплатете фактурите с изтекъл срок.",
"description": "The body of a warning box shown to a user whose subscription is unpaid."
},
"cancellationDate": {
"message": "Дата на прекратяване",
"description": "The date header used when a subscription is cancelled."
},
"machineAccountsCannotCreate": {
"message": "В изключени организации не могат да се създават машинни акаунти. Свържете се със собственика на организацията си за помощ."
},
"machineAccount": {
"message": "Машинен акаунт",
"description": "A machine user which can be used to automate processes and access secrets in the system."
},
"machineAccounts": {
"message": "Машинни акаунти",
"description": "The title for the section that deals with machine accounts."
},
"newMachineAccount": {
"message": "Нов машинен акаунт",
"description": "Title for creating a new machine account."
},
"machineAccountsNoItemsMessage": {
"message": "Създайте нов машинен акаунт, за да можете да автоматизирате достъпа до тайните.",
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
"message": "Все още няма нищо за показване",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
"message": "Изтриване на машинните акаунти",
"description": "Title for the action to delete one or multiple machine accounts."
},
"deleteMachineAccount": {
"message": "Изтриване на машинния акаунт",
"description": "Title for the action to delete a single machine account."
},
"viewMachineAccount": {
"message": "Преглед на машинния акаунт",
"description": "Action to view the details of a machine account."
},
"deleteMachineAccountDialogMessage": {
"message": "Изтриването на машинния акаунт $MACHINE_ACCOUNT$ е окончателно и необратимо.",
"placeholders": {
"machine_account": {
"content": "$1",
"example": "Machine account name"
}
}
},
"deleteMachineAccountsDialogMessage": {
"message": "Изтриването на машинни акаунти е окончателно и необратимо."
},
"deleteMachineAccountsConfirmMessage": {
"message": "Изтриване $COUNT$ машинни акаунти",
"placeholders": {
"count": {
"content": "$1",
"example": "2"
}
}
},
"deleteMachineAccountToast": {
"message": "Машинният акаунт е изтрит"
},
"deleteMachineAccountsToast": {
"message": "Машинните акаунти са изтрити"
},
"searchMachineAccounts": {
"message": "Търсене на машинни акаунти",
"description": "Placeholder text for searching machine accounts."
},
"editMachineAccount": {
"message": "Редактиране на машинния акаунт",
"description": "Title for editing a machine account."
},
"machineAccountName": {
"message": "Име на машинния акаунт",
"description": "Label for the name of a machine account"
},
"machineAccountCreated": {
"message": "Машинният акаунт е създаден",
"description": "Notifies that a new machine account has been created"
},
"machineAccountUpdated": {
"message": "Машинният акаунт е обновен",
"description": "Notifies that a machine account has been updated"
},
"projectMachineAccountsDescription": {
"message": "Дайте достъп на машинните акаунти до този проект."
},
"projectMachineAccountsSelectHint": {
"message": "Пишете тук или изберете машинни акаунти"
},
"projectEmptyMachineAccountAccessPolicies": {
"message": "Добавете машинни акаунти, за да дадете достъп"
},
"machineAccountPeopleDescription": {
"message": "Дайте права на групи и хора до този машинен акаунт."
},
"machineAccountProjectsDescription": {
"message": "Назначете проекти към този машинен акаунт. "
},
"createMachineAccount": {
"message": "Създаване на машинен акаунт"
},
"maPeopleWarningMessage": {
"message": "Премахването на хора от даден машинен акаунт не премахва идентификаторите за достъп, които те са създали. От гледна точка на сигурността е препоръчително да отнемете достъпа чрез идентификаторите създадени от хора, които са били премахнати от машинен акаунт."
},
"smAccessRemovalWarningMaTitle": {
"message": "Премахване на достъпа до този машинен акаунт"
},
"smAccessRemovalWarningMaMessage": {
"message": "Това действие ще премахне достъпа Ви до машинния акаунт."
},
"machineAccountsIncluded": {
"message": "$COUNT$ включени машинни акаунта",
"placeholders": {
"count": {
"content": "$1",
"example": "3"
}
}
},
"additionalMachineAccountCost": {
"message": "$COST$ на месец за допълнителни машинни акаунти",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"additionalMachineAccounts": {
"message": "Допълнителни машинни акаунти"
},
"includedMachineAccounts": {
"message": "В плана Ви са включени $COUNT$ машинни акаунта.",
"placeholders": {
"count": {
"content": "$1",
"example": "50"
}
}
},
"addAdditionalMachineAccounts": {
"message": "Може да добавите още машинни акаунти за $COST$ на месец.",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"limitMachineAccounts": {
"message": "Ограничаване на машинните акаунти (незадължително)"
},
"limitMachineAccountsDesc": {
"message": "Задайте ограничение за броя на машинните акаунти. Когато то бъде достигнато, няма да можете да създавате нови машинни акаунти."
},
"machineAccountLimit": {
"message": "Ограничение на машинните акаунти (незадължително)"
},
"maxMachineAccountCost": {
"message": "Максимална възможна цена за машинни акаунти"
},
"machineAccountAccessUpdated": {
"message": "Достъпът на машинния акаунт е променен"
},
"unassignedItemsBanner": {
"message": "Забележка: неразпределените елементи на организацията вече не се виждат в изгледа с „Всички трезори“ на различните устройства, а са достъпни само през Административната конзола. Добавете тези елементи към някоя колекция в Административната конзола, за да станат видими."
}
}

View File

@ -4956,6 +4956,9 @@
"addExistingOrganization": {
"message": "Add existing organization"
},
"addNewOrganization": {
"message": "Add new organization"
},
"myProvider": {
"message": "My Provider"
},
@ -7498,6 +7501,9 @@
"collectionAccessRestricted": {
"message": "Collection access is restricted"
},
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
},
@ -7600,6 +7606,9 @@
"providerPortal": {
"message": "Provider Portal"
},
"viewCollection": {
"message": "View collection"
},
"restrictedGroupAccess": {
"message": "You cannot add yourself to groups."
},
@ -7642,5 +7651,256 @@
},
"items": {
"message": "Items"
},
"assignedSeats": {
"message": "Assigned seats"
},
"assigned": {
"message": "Assigned"
},
"used": {
"message": "Used"
},
"remaining": {
"message": "Remaining"
},
"unlinkOrganization": {
"message": "Unlink organization"
},
"manageSeats": {
"message": "MANAGE SEATS"
},
"manageSeatsDescription": {
"message": "Adjustments to seats will be reflected in the next billing cycle."
},
"unassignedSeatsDescription": {
"message": "Unassigned subscription seats"
},
"purchaseSeatDescription": {
"message": "Additional seats purchased"
},
"assignedSeatCannotUpdate": {
"message": "Assigned Seats can not be updated. Please contact your organization owner for assistance."
},
"subscriptionUpdateFailed": {
"message": "Subscription update failed"
},
"trial": {
"message": "Trial",
"description": "A subscription status label."
},
"pastDue": {
"message": "Past due",
"description": "A subscription status label"
},
"subscriptionExpired": {
"message": "Subscription expired",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
"message": "You have a grace period of $DAYS$ days from your subscription expiration date to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they are charged automatically."
},
"pastDueWarningForSendInvoice": {
"message": "You have a grace period of $DAYS$ days from the date your first unpaid invoice is due to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they pay via invoice."
},
"unpaidInvoice": {
"message": "Unpaid invoice",
"description": "The header of a warning box shown to a user whose subscription is unpaid."
},
"toReactivateYourSubscription": {
"message": "To reactivate your subscription, please resolve the past due invoices.",
"description": "The body of a warning box shown to a user whose subscription is unpaid."
},
"cancellationDate": {
"message": "Cancellation date",
"description": "The date header used when a subscription is cancelled."
},
"machineAccountsCannotCreate": {
"message": "Machine accounts cannot be created in suspended organizations. Please contact your organization owner for assistance."
},
"machineAccount": {
"message": "Machine account",
"description": "A machine user which can be used to automate processes and access secrets in the system."
},
"machineAccounts": {
"message": "Machine accounts",
"description": "The title for the section that deals with machine accounts."
},
"newMachineAccount": {
"message": "New machine account",
"description": "Title for creating a new machine account."
},
"machineAccountsNoItemsMessage": {
"message": "Create a new machine account to get started automating secret access.",
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
"message": "Nothing to show yet",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
"message": "Delete machine accounts",
"description": "Title for the action to delete one or multiple machine accounts."
},
"deleteMachineAccount": {
"message": "Delete machine account",
"description": "Title for the action to delete a single machine account."
},
"viewMachineAccount": {
"message": "View machine account",
"description": "Action to view the details of a machine account."
},
"deleteMachineAccountDialogMessage": {
"message": "Deleting machine account $MACHINE_ACCOUNT$ is permanent and irreversible.",
"placeholders": {
"machine_account": {
"content": "$1",
"example": "Machine account name"
}
}
},
"deleteMachineAccountsDialogMessage": {
"message": "Deleting machine accounts is permanent and irreversible."
},
"deleteMachineAccountsConfirmMessage": {
"message": "Delete $COUNT$ machine accounts",
"placeholders": {
"count": {
"content": "$1",
"example": "2"
}
}
},
"deleteMachineAccountToast": {
"message": "Machine account deleted"
},
"deleteMachineAccountsToast": {
"message": "Machine accounts deleted"
},
"searchMachineAccounts": {
"message": "Search machine accounts",
"description": "Placeholder text for searching machine accounts."
},
"editMachineAccount": {
"message": "Edit machine account",
"description": "Title for editing a machine account."
},
"machineAccountName": {
"message": "Machine account name",
"description": "Label for the name of a machine account"
},
"machineAccountCreated": {
"message": "Machine account created",
"description": "Notifies that a new machine account has been created"
},
"machineAccountUpdated": {
"message": "Machine account updated",
"description": "Notifies that a machine account has been updated"
},
"projectMachineAccountsDescription": {
"message": "Grant machine accounts access to this project."
},
"projectMachineAccountsSelectHint": {
"message": "Type or select machine accounts"
},
"projectEmptyMachineAccountAccessPolicies": {
"message": "Add machine accounts to grant access"
},
"machineAccountPeopleDescription": {
"message": "Grant groups or people access to this machine account."
},
"machineAccountProjectsDescription": {
"message": "Assign projects to this machine account. "
},
"createMachineAccount": {
"message": "Create a machine account"
},
"maPeopleWarningMessage": {
"message": "Removing people from a machine account does not remove the access tokens they created. For security best practice, it is recommended to revoke access tokens created by people removed from a machine account."
},
"smAccessRemovalWarningMaTitle": {
"message": "Remove access to this machine account"
},
"smAccessRemovalWarningMaMessage": {
"message": "This action will remove your access to the machine account."
},
"machineAccountsIncluded": {
"message": "$COUNT$ machine accounts included",
"placeholders": {
"count": {
"content": "$1",
"example": "3"
}
}
},
"additionalMachineAccountCost": {
"message": "$COST$ per month for additional machine accounts",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"additionalMachineAccounts": {
"message": "Additional machine accounts"
},
"includedMachineAccounts": {
"message": "Your plan comes with $COUNT$ machine accounts.",
"placeholders": {
"count": {
"content": "$1",
"example": "50"
}
}
},
"addAdditionalMachineAccounts": {
"message": "You can add additional machine accounts for $COST$ per month.",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"limitMachineAccounts": {
"message": "Limit machine accounts (optional)"
},
"limitMachineAccountsDesc": {
"message": "Set a limit for your machine accounts. Once this limit is reached, you will not be able to create new machine accounts."
},
"machineAccountLimit": {
"message": "Machine account limit (optional)"
},
"maxMachineAccountCost": {
"message": "Max potential machine account cost"
},
"machineAccountAccessUpdated": {
"message": "Machine account access updated"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in your All Vaults view across devices and are now only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -4956,6 +4956,9 @@
"addExistingOrganization": {
"message": "Add existing organization"
},
"addNewOrganization": {
"message": "Add new organization"
},
"myProvider": {
"message": "My Provider"
},
@ -7498,6 +7501,9 @@
"collectionAccessRestricted": {
"message": "Collection access is restricted"
},
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
},
@ -7600,6 +7606,9 @@
"providerPortal": {
"message": "Provider Portal"
},
"viewCollection": {
"message": "View collection"
},
"restrictedGroupAccess": {
"message": "You cannot add yourself to groups."
},
@ -7642,5 +7651,256 @@
},
"items": {
"message": "Items"
},
"assignedSeats": {
"message": "Assigned seats"
},
"assigned": {
"message": "Assigned"
},
"used": {
"message": "Used"
},
"remaining": {
"message": "Remaining"
},
"unlinkOrganization": {
"message": "Unlink organization"
},
"manageSeats": {
"message": "MANAGE SEATS"
},
"manageSeatsDescription": {
"message": "Adjustments to seats will be reflected in the next billing cycle."
},
"unassignedSeatsDescription": {
"message": "Unassigned subscription seats"
},
"purchaseSeatDescription": {
"message": "Additional seats purchased"
},
"assignedSeatCannotUpdate": {
"message": "Assigned Seats can not be updated. Please contact your organization owner for assistance."
},
"subscriptionUpdateFailed": {
"message": "Subscription update failed"
},
"trial": {
"message": "Trial",
"description": "A subscription status label."
},
"pastDue": {
"message": "Past due",
"description": "A subscription status label"
},
"subscriptionExpired": {
"message": "Subscription expired",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
"message": "You have a grace period of $DAYS$ days from your subscription expiration date to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they are charged automatically."
},
"pastDueWarningForSendInvoice": {
"message": "You have a grace period of $DAYS$ days from the date your first unpaid invoice is due to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they pay via invoice."
},
"unpaidInvoice": {
"message": "Unpaid invoice",
"description": "The header of a warning box shown to a user whose subscription is unpaid."
},
"toReactivateYourSubscription": {
"message": "To reactivate your subscription, please resolve the past due invoices.",
"description": "The body of a warning box shown to a user whose subscription is unpaid."
},
"cancellationDate": {
"message": "Cancellation date",
"description": "The date header used when a subscription is cancelled."
},
"machineAccountsCannotCreate": {
"message": "Machine accounts cannot be created in suspended organizations. Please contact your organization owner for assistance."
},
"machineAccount": {
"message": "Machine account",
"description": "A machine user which can be used to automate processes and access secrets in the system."
},
"machineAccounts": {
"message": "Machine accounts",
"description": "The title for the section that deals with machine accounts."
},
"newMachineAccount": {
"message": "New machine account",
"description": "Title for creating a new machine account."
},
"machineAccountsNoItemsMessage": {
"message": "Create a new machine account to get started automating secret access.",
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
"message": "Nothing to show yet",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
"message": "Delete machine accounts",
"description": "Title for the action to delete one or multiple machine accounts."
},
"deleteMachineAccount": {
"message": "Delete machine account",
"description": "Title for the action to delete a single machine account."
},
"viewMachineAccount": {
"message": "View machine account",
"description": "Action to view the details of a machine account."
},
"deleteMachineAccountDialogMessage": {
"message": "Deleting machine account $MACHINE_ACCOUNT$ is permanent and irreversible.",
"placeholders": {
"machine_account": {
"content": "$1",
"example": "Machine account name"
}
}
},
"deleteMachineAccountsDialogMessage": {
"message": "Deleting machine accounts is permanent and irreversible."
},
"deleteMachineAccountsConfirmMessage": {
"message": "Delete $COUNT$ machine accounts",
"placeholders": {
"count": {
"content": "$1",
"example": "2"
}
}
},
"deleteMachineAccountToast": {
"message": "Machine account deleted"
},
"deleteMachineAccountsToast": {
"message": "Machine accounts deleted"
},
"searchMachineAccounts": {
"message": "Search machine accounts",
"description": "Placeholder text for searching machine accounts."
},
"editMachineAccount": {
"message": "Edit machine account",
"description": "Title for editing a machine account."
},
"machineAccountName": {
"message": "Machine account name",
"description": "Label for the name of a machine account"
},
"machineAccountCreated": {
"message": "Machine account created",
"description": "Notifies that a new machine account has been created"
},
"machineAccountUpdated": {
"message": "Machine account updated",
"description": "Notifies that a machine account has been updated"
},
"projectMachineAccountsDescription": {
"message": "Grant machine accounts access to this project."
},
"projectMachineAccountsSelectHint": {
"message": "Type or select machine accounts"
},
"projectEmptyMachineAccountAccessPolicies": {
"message": "Add machine accounts to grant access"
},
"machineAccountPeopleDescription": {
"message": "Grant groups or people access to this machine account."
},
"machineAccountProjectsDescription": {
"message": "Assign projects to this machine account. "
},
"createMachineAccount": {
"message": "Create a machine account"
},
"maPeopleWarningMessage": {
"message": "Removing people from a machine account does not remove the access tokens they created. For security best practice, it is recommended to revoke access tokens created by people removed from a machine account."
},
"smAccessRemovalWarningMaTitle": {
"message": "Remove access to this machine account"
},
"smAccessRemovalWarningMaMessage": {
"message": "This action will remove your access to the machine account."
},
"machineAccountsIncluded": {
"message": "$COUNT$ machine accounts included",
"placeholders": {
"count": {
"content": "$1",
"example": "3"
}
}
},
"additionalMachineAccountCost": {
"message": "$COST$ per month for additional machine accounts",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"additionalMachineAccounts": {
"message": "Additional machine accounts"
},
"includedMachineAccounts": {
"message": "Your plan comes with $COUNT$ machine accounts.",
"placeholders": {
"count": {
"content": "$1",
"example": "50"
}
}
},
"addAdditionalMachineAccounts": {
"message": "You can add additional machine accounts for $COST$ per month.",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"limitMachineAccounts": {
"message": "Limit machine accounts (optional)"
},
"limitMachineAccountsDesc": {
"message": "Set a limit for your machine accounts. Once this limit is reached, you will not be able to create new machine accounts."
},
"machineAccountLimit": {
"message": "Machine account limit (optional)"
},
"maxMachineAccountCost": {
"message": "Max potential machine account cost"
},
"machineAccountAccessUpdated": {
"message": "Machine account access updated"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in your All Vaults view across devices and are now only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

View File

@ -4956,6 +4956,9 @@
"addExistingOrganization": {
"message": "Afig organització existent"
},
"addNewOrganization": {
"message": "Afegeix organització nova"
},
"myProvider": {
"message": "El meu proveïdor"
},
@ -7498,6 +7501,9 @@
"collectionAccessRestricted": {
"message": "L'accés a la col·lecció està restringit"
},
"readOnlyCollectionAccess": {
"message": "No teniu accés per gestionar aquesta col·lecció."
},
"grantCollectionAccess": {
"message": "Concedeix als grups o membres l'accés a aquesta col·lecció."
},
@ -7600,6 +7606,9 @@
"providerPortal": {
"message": "Portal del proveïdor"
},
"viewCollection": {
"message": "Mostra col·lecció"
},
"restrictedGroupAccess": {
"message": "No podeu afegir-vos als grups."
},
@ -7607,13 +7616,13 @@
"message": "No podeu afegir-vos a les col·leccions."
},
"assign": {
"message": "Assign"
"message": "Assigna"
},
"assignToCollections": {
"message": "Assign to collections"
"message": "Assigna a col·leccions"
},
"assignToTheseCollections": {
"message": "Assign to these collections"
"message": "Assigna a aquestes col·leccions"
},
"bulkCollectionAssignmentDialogDescription": {
"message": "Select the collections that the items will be shared with. Once an item is updated in one collection, it will be reflected in all collections. Only organization members with access to these collections will be able to see the items."
@ -7642,5 +7651,256 @@
},
"items": {
"message": "Items"
},
"assignedSeats": {
"message": "Assigned seats"
},
"assigned": {
"message": "Assigned"
},
"used": {
"message": "Used"
},
"remaining": {
"message": "Remaining"
},
"unlinkOrganization": {
"message": "Unlink organization"
},
"manageSeats": {
"message": "MANAGE SEATS"
},
"manageSeatsDescription": {
"message": "Adjustments to seats will be reflected in the next billing cycle."
},
"unassignedSeatsDescription": {
"message": "Unassigned subscription seats"
},
"purchaseSeatDescription": {
"message": "Additional seats purchased"
},
"assignedSeatCannotUpdate": {
"message": "Assigned Seats can not be updated. Please contact your organization owner for assistance."
},
"subscriptionUpdateFailed": {
"message": "Subscription update failed"
},
"trial": {
"message": "Trial",
"description": "A subscription status label."
},
"pastDue": {
"message": "Past due",
"description": "A subscription status label"
},
"subscriptionExpired": {
"message": "Subscription expired",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
"message": "You have a grace period of $DAYS$ days from your subscription expiration date to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they are charged automatically."
},
"pastDueWarningForSendInvoice": {
"message": "You have a grace period of $DAYS$ days from the date your first unpaid invoice is due to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.",
"placeholders": {
"days": {
"content": "$1",
"example": "11"
},
"suspension_date": {
"content": "$2",
"example": "01/10/2024"
}
},
"description": "A warning shown to the user when their subscription is past due and they pay via invoice."
},
"unpaidInvoice": {
"message": "Unpaid invoice",
"description": "The header of a warning box shown to a user whose subscription is unpaid."
},
"toReactivateYourSubscription": {
"message": "To reactivate your subscription, please resolve the past due invoices.",
"description": "The body of a warning box shown to a user whose subscription is unpaid."
},
"cancellationDate": {
"message": "Cancellation date",
"description": "The date header used when a subscription is cancelled."
},
"machineAccountsCannotCreate": {
"message": "Machine accounts cannot be created in suspended organizations. Please contact your organization owner for assistance."
},
"machineAccount": {
"message": "Machine account",
"description": "A machine user which can be used to automate processes and access secrets in the system."
},
"machineAccounts": {
"message": "Machine accounts",
"description": "The title for the section that deals with machine accounts."
},
"newMachineAccount": {
"message": "New machine account",
"description": "Title for creating a new machine account."
},
"machineAccountsNoItemsMessage": {
"message": "Create a new machine account to get started automating secret access.",
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
"message": "Nothing to show yet",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
"message": "Delete machine accounts",
"description": "Title for the action to delete one or multiple machine accounts."
},
"deleteMachineAccount": {
"message": "Delete machine account",
"description": "Title for the action to delete a single machine account."
},
"viewMachineAccount": {
"message": "View machine account",
"description": "Action to view the details of a machine account."
},
"deleteMachineAccountDialogMessage": {
"message": "Deleting machine account $MACHINE_ACCOUNT$ is permanent and irreversible.",
"placeholders": {
"machine_account": {
"content": "$1",
"example": "Machine account name"
}
}
},
"deleteMachineAccountsDialogMessage": {
"message": "Deleting machine accounts is permanent and irreversible."
},
"deleteMachineAccountsConfirmMessage": {
"message": "Delete $COUNT$ machine accounts",
"placeholders": {
"count": {
"content": "$1",
"example": "2"
}
}
},
"deleteMachineAccountToast": {
"message": "Machine account deleted"
},
"deleteMachineAccountsToast": {
"message": "Machine accounts deleted"
},
"searchMachineAccounts": {
"message": "Search machine accounts",
"description": "Placeholder text for searching machine accounts."
},
"editMachineAccount": {
"message": "Edit machine account",
"description": "Title for editing a machine account."
},
"machineAccountName": {
"message": "Machine account name",
"description": "Label for the name of a machine account"
},
"machineAccountCreated": {
"message": "Machine account created",
"description": "Notifies that a new machine account has been created"
},
"machineAccountUpdated": {
"message": "Machine account updated",
"description": "Notifies that a machine account has been updated"
},
"projectMachineAccountsDescription": {
"message": "Grant machine accounts access to this project."
},
"projectMachineAccountsSelectHint": {
"message": "Type or select machine accounts"
},
"projectEmptyMachineAccountAccessPolicies": {
"message": "Add machine accounts to grant access"
},
"machineAccountPeopleDescription": {
"message": "Grant groups or people access to this machine account."
},
"machineAccountProjectsDescription": {
"message": "Assign projects to this machine account. "
},
"createMachineAccount": {
"message": "Create a machine account"
},
"maPeopleWarningMessage": {
"message": "Removing people from a machine account does not remove the access tokens they created. For security best practice, it is recommended to revoke access tokens created by people removed from a machine account."
},
"smAccessRemovalWarningMaTitle": {
"message": "Remove access to this machine account"
},
"smAccessRemovalWarningMaMessage": {
"message": "This action will remove your access to the machine account."
},
"machineAccountsIncluded": {
"message": "$COUNT$ machine accounts included",
"placeholders": {
"count": {
"content": "$1",
"example": "3"
}
}
},
"additionalMachineAccountCost": {
"message": "$COST$ per month for additional machine accounts",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"additionalMachineAccounts": {
"message": "Additional machine accounts"
},
"includedMachineAccounts": {
"message": "Your plan comes with $COUNT$ machine accounts.",
"placeholders": {
"count": {
"content": "$1",
"example": "50"
}
}
},
"addAdditionalMachineAccounts": {
"message": "You can add additional machine accounts for $COST$ per month.",
"placeholders": {
"cost": {
"content": "$1",
"example": "$0.50"
}
}
},
"limitMachineAccounts": {
"message": "Limit machine accounts (optional)"
},
"limitMachineAccountsDesc": {
"message": "Set a limit for your machine accounts. Once this limit is reached, you will not be able to create new machine accounts."
},
"machineAccountLimit": {
"message": "Machine account limit (optional)"
},
"maxMachineAccountCost": {
"message": "Max potential machine account cost"
},
"machineAccountAccessUpdated": {
"message": "Machine account access updated"
},
"unassignedItemsBanner": {
"message": "Notice: Unassigned organization items are no longer visible in your All Vaults view across devices and are now only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible."
}
}

Some files were not shown because too many files have changed in this diff Show More