diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index 6809d950c4e..5e333b3b58a 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -13,6 +13,7 @@ on: - '!*.md' - '!*.txt' - '.github/workflows/build-cli.yml' + - 'bitwarden_license/bit-cli/**' push: branches: - 'main' @@ -25,6 +26,7 @@ on: - '!*.md' - '!*.txt' - '.github/workflows/build-cli.yml' + - 'bitwarden_license/bit-cli/**' workflow_dispatch: inputs: {} diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index c4251626401..b689a7e3fc0 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "المفضلات" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "الملاحظات" }, @@ -410,6 +419,9 @@ "launch": { "message": "بدء" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "الموقع الإلكتروني" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "تم تسجيل الخروج" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "انتهت صلاحية جلسة تسجيل الدخول الخاصة بك." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "حدد عنوان URL الأساسي لتثبيت Bitwarden المستضاف محليًا." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "بيئة مخصصة" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "المجموعات" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "المفضلات" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "التعبئة التلقائية والحفظ" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "تم تعبئة العنصر تلقائياً وحفظ عنوان URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "موافق" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "التحقق من مزامنة سطح المكتب" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index 129aac00ee2..4ded914a439 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Sevimli" }, + "unfavorite": { + "message": "Sevimlilərdən sil" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notlar" }, @@ -410,6 +419,9 @@ "launch": { "message": "Başlat" }, + "launchWebsite": { + "message": "Veb saytı başlat" + }, "website": { "message": "Veb sayt" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Çıxış edildi" }, + "loggedOutDesc": { + "message": "Hesabınızdan çıxış etmisiniz." + }, "loginExpired": { "message": "Giriş seansınızın müddəti bitdi." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Öz-özünə sahiblik edən Bitwarden quraşdırmasının baza URL-sini müəyyənləşdirin." }, + "selfHostedBaseUrlHint": { + "message": "Şirkət daxili sahiblik edən Bitwarden quraşdırmasının təməl URL-sini qeyd edin. Nümunə: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Qabaqcıl konfiqurasiya üçün hər xidmətin təməl URL-sini müstəqil olaraq qeyd edə bilərsiniz." + }, + "selfHostedEnvFormInvalid": { + "message": "Təməl server URL-sini və ya ən azı bir özəl mühiti əlavə etməlisiniz." + }, "customEnvironment": { "message": "Özəl mühit" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Kolleksiyalar" }, + "nCollections": { + "message": "$COUNT$ kolleksiya", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Sevimlilər" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Avto-doldur və saxla" }, + "fillAndSave": { + "message": "Doldur və saxla" + }, "autoFillSuccessAndSavedUri": { "message": "Element avto-dolduruldu və URI saxlanıldı" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Oldu" }, + "errorRefreshingAccessToken": { + "message": "Müraciət tokeni təzələmə xətası" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Təzələmə tokeni və ya API açarlar tapılmadı. Lütfən çıxış edib yenidən giriş etməyə çalışın." + }, "desktopSyncVerificationTitle": { "message": "Masaüstü sinxr doğrulaması" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "Filtrləri təmizləyin və ya başqa bir axtarış terminini sınayın" }, - "copyInfo": { - "message": "Məlumatları kopyala, $ITEMNAME$", + "copyInfoLabel": { + "message": "$ITEMNAME$ elementlərini kopyala", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Məlumatları kopyala - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "$ITEMNAME$ notunu kopyala", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Notu kopyala - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Daha çox seçim, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Daha çox seçim - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "$ITEMNAME$ elementinə bax", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Kolleksiyaları təyin et" + }, + "copyEmail": { + "message": "E-poçtu kopyala" + }, + "copyPhone": { + "message": "Telefonu kopyala" + }, + "copyAddress": { + "message": "Ünvanı kopyala" + }, "adminConsole": { "message": "Admin Konsolu" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Qovluğu olmayan elementlər" + }, + "organizationIsDeactivated": { + "message": "Təşkilat deaktiv edildi" + }, + "contactYourOrgAdmin": { + "message": "Deaktiv edilmiş təşkilatlardakı elementlərə müraciət edilə bilməz. Kömək üçün təşkilatınızın sahibi ilə əlaqə saxlayın." } } diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index 6ee3fffdfa5..22aa6e1fa33 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Абраны" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Нататкі" }, @@ -410,6 +419,9 @@ "launch": { "message": "Запусціць" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Вэб-сайт" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Вы выйшлі" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Тэрмін дзеяння вашага сеансу завяршыўся." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Увядзіце асноўны URL-адрас вашага лакальнага размяшчэння ўсталяванага Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Карыстальніцкае асяроддзе" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Калекцыі" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Абраныя" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Аўтазапоўніць і захаваць" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Аўтазапоўнены элемент і захаваны URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Добра" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Праверка сінхранізацыі на камп'ютары" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index 337467ddfe9..c5cf062b344 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Любими" }, + "unfavorite": { + "message": "Изваждане от любими" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Бележки" }, @@ -410,6 +419,9 @@ "launch": { "message": "Пускане" }, + "launchWebsite": { + "message": "Посещаване на уеб сайта" + }, "website": { "message": "Сайт" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Бяхте отписани" }, + "loggedOutDesc": { + "message": "Бяхте отписан(а) от регистрацията си." + }, "loginExpired": { "message": "Сесията ви изтече." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Укажете базовия адрес за собствената ви инсталирана среда на Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Посочете базовия адрес на Вашата собствена инсталация на Битуорден. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "За по-детайлна настройка, може да укажете основния адрес на всяка услуга поотделно." + }, + "selfHostedEnvFormInvalid": { + "message": "Трябва да добавите или основния адрес на сървъра, или поне една специална среда." + }, "customEnvironment": { "message": "Специална среда" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Колекции" }, + "nCollections": { + "message": "$COUNT$ колекции", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Любими" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Дописване и обновяване" }, + "fillAndSave": { + "message": "Попълване и запазване" + }, "autoFillSuccessAndSavedUri": { "message": "Автоматично дописан запис и адрес" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Добре" }, + "errorRefreshingAccessToken": { + "message": "Грешка при опресняването на идентификатора за достъп" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Няма намерен идентификатор за опресняване или ключове за ППИ. Опитайте да се отпишете и да се впишете отново." + }, "desktopSyncVerificationTitle": { "message": "Потвърждаване на синхронизацията на самостоятелното приложение" }, @@ -3165,7 +3207,7 @@ "message": "сървър" }, "hostedAt": { - "message": "hosted at" + "message": "домакинствано при" }, "useDeviceOrHardwareKey": { "message": "Използвайте своето устройство или хардуерен ключ" @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Изчистете филтрите или опитайте да търсите нещо друго" }, - "copyInfo": { + "copyInfoLabel": { "message": "Копиране на информацията, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Копиране на информацията – $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Копиране на бележката, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Копиране на бележката – $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Още опции, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Още опции – $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Преглед на елемента – $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Свързване на колекции" + }, + "copyEmail": { + "message": "Копиране на е-пощата" + }, + "copyPhone": { + "message": "Копиране на телефона" + }, + "copyAddress": { + "message": "Копиране на адреса" + }, "adminConsole": { "message": "Административна конзола" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Елементи без папка" + }, + "organizationIsDeactivated": { + "message": "Организацията е деактивирана" + }, + "contactYourOrgAdmin": { + "message": "Записите в деактивирани организации не са достъпни. Свържете се със собственика на организацията си за помощ." } } diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index 541bebd427b..3ddf7a32bde 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "প্রিয়" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "নোট" }, @@ -410,6 +419,9 @@ "launch": { "message": "শুরু" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "ওয়েবসাইট" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "প্রস্থানকৃত" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "আপনার লগইন মাত্রকালটির মেয়াদ শেষ হয়ে গেছে।" }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "আপনার অন-প্রাঙ্গনে হোস্টকৃত Bitwarden ইনস্টলেশনটির বেস URL উল্লেখ করুন।" }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "পছন্দসই পরিবেশ" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "সংগ্রহ" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "প্রিয়গুলো" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "স্বতঃপূরণ ও সংরক্ষণ" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "স্বতঃপূরণকৃত বস্তু ও সংরক্ষিত URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "ঠিক আছে" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "ডেস্কটপ সিঙ্ক যাচাইকরণ" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index cd82d91cefc..f8d275245ea 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorite" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index fe2a25e6595..aee61f4b1ad 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Preferit" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Inicia" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Lloc web" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Sessió tancada" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "La vostra sessió ha caducat." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Especifiqueu l'URL base de la vostra instal·lació de Bitwarden allotjada en un entorn propi." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Entorn personalitzat" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Col·leccions" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Preferits" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Ompli automàticament i guarda" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Element emplenat automàticament i URI guardat" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "D’acord" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Verificació de sincronització d'escriptori" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Consola d'administració" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index 3b9507fdf21..a865a1a9472 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Oblíbené" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Poznámky" }, @@ -410,6 +419,9 @@ "launch": { "message": "Spustit" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Webová stránka" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Odhlášení" }, + "loggedOutDesc": { + "message": "Byli jste odhlášeni ze svého účtu." + }, "loginExpired": { "message": "Platnost přihlášení vypršela." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Zadejte základní URL adresu vlastní hostované aplikace Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Zadejte základní URL adresu Vaší vlastní hostované aplikace Bitwarden. Příklad: https://bitwarden.spolecnost.cz" + }, + "selfHostedCustomEnvHeader": { + "message": "Pro rozšířená nastavení můžete zadat základní URL adresu každé služby zvlášť." + }, + "selfHostedEnvFormInvalid": { + "message": "Musíte přidat buď základní adresu URL serveru nebo alespoň jedno vlastní prostředí." + }, "customEnvironment": { "message": "Vlastní prostředí" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Kolekce" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Oblíbené" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Automaticky vyplnit a uložit" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Položka byla automaticky vyplněna a URI bylo uloženo" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "OK" }, + "errorRefreshingAccessToken": { + "message": "Chyba aktualizace přístupového tokenu" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nebyly nalezeny žádné obnovovací tokeny nebo API klíče. Zkuste se odhlásit a znovu se přihlásit." + }, "desktopSyncVerificationTitle": { "message": "Ověření synchronizace s aplikací pro počítač" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Vymažte filtry nebo zkuste jiný hledaný výraz" }, - "copyInfo": { + "copyInfoLabel": { "message": "Kopírovat informace, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Kopírovat informace - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Kopírovat poznámku, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Kopírovat poznámku - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Více voleb, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Více voleb - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Zobrazit položku - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Kopírovat e-mail" + }, + "copyPhone": { + "message": "Kopírovat telefon" + }, + "copyAddress": { + "message": "Kopírovat adresu" + }, "adminConsole": { "message": "Konzole správce" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Položky bez složky" + }, + "organizationIsDeactivated": { + "message": "Organizace je deaktivována" + }, + "contactYourOrgAdmin": { + "message": "K položkám v deaktivované organizaci nemáte přístup. Požádejte o pomoc vlastníka organizace." } } diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index 6bfa7de69f3..f90120a0823 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Ffefrynnu" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Nodiadau" }, @@ -410,6 +419,9 @@ "launch": { "message": "Lansio" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Gwefan" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Mae eich sesiwn wedi dod i ben." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Amgylchedd addasedig" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Casgliadau" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Ffefrynnau" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Llenwi'n awtomatig a chadw" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 32266ceb31f..7b5b7ec2e29 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorit" }, + "unfavorite": { + "message": "Fjern fra favorit" + }, + "itemAddedToFavorites": { + "message": "Emne føjet til favoritter" + }, + "itemRemovedFromFavorites": { + "message": "Emne fjernet fra favoritter" + }, "notes": { "message": "Notater" }, @@ -410,6 +419,9 @@ "launch": { "message": "Start" }, + "launchWebsite": { + "message": "Åbn websted" + }, "website": { "message": "Hjemmeside" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logget ud" }, + "loggedOutDesc": { + "message": "Der er blevet logget ud af kontoen." + }, "loginExpired": { "message": "Din login-session er udløbet." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Angiv grund-URL'en i din lokal-hostede Bitwarden-installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Brugerdefineret miljø" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Samlinger" }, + "nCollections": { + "message": "$COUNT$ samlinger", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoritter" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Autoudfyld og gem" }, + "fillAndSave": { + "message": "Udfyld og gem" + }, "autoFillSuccessAndSavedUri": { "message": "Autoudfyldte element og URI gemt" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Adgangstoken genopfriskningsfejl" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Ingen genopfriskningstoken eller API-nøgler fundet. Prøv at logge ud og dernæst ind igen." + }, "desktopSyncVerificationTitle": { "message": "Verifikation af skrivebordssynkronisering" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Ryd filtre eller prøv med et andet søgeord" }, - "copyInfo": { + "copyInfoLabel": { "message": "Kopiér info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Kopiér info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Kopiér notat, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Kopiér notat - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Flere valgmuligheder, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Flere valgmuligheder - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Vis emne - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Tildel samlinger" + }, + "copyEmail": { + "message": "Kopiér e-mail" + }, + "copyPhone": { + "message": "Kopiér telefon" + }, + "copyAddress": { + "message": "Kopiér addresse" + }, "adminConsole": { "message": "Admin-konsol" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Emner uden mappe" + }, + "organizationIsDeactivated": { + "message": "Organisation er deaktiveret" + }, + "contactYourOrgAdmin": { + "message": "Emner i deaktiverede organisationer kan ikke tilgås. Kontakt organisationsejeren for assistance." } } diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index bec6702ae28..dddc6fc9762 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favoriten" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notizen" }, @@ -410,6 +419,9 @@ "launch": { "message": "Öffnen" }, + "launchWebsite": { + "message": "Website öffnen" + }, "website": { "message": "Webseite" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Ausgeloggt" }, + "loggedOutDesc": { + "message": "Du wurdest von deinem Konto abgemeldet." + }, "loginExpired": { "message": "Ihre Login-Sitzung ist abgelaufen." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Bitte gib die Basis-URL deiner selbst gehosteten Bitwarden-Installation an." }, + "selfHostedBaseUrlHint": { + "message": "Gib die Basis-URL deiner vor Ort gehosteten Bitwarden-Installation an. Beispiel: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Für eine erweiterte Konfiguration kannst du die Basis-URL jedes Dienstes unabhängig voneinander angeben." + }, + "selfHostedEnvFormInvalid": { + "message": "Du musst entweder die Basis-Server-URL oder mindestens eine benutzerdefinierte Umgebung hinzufügen." + }, "customEnvironment": { "message": "Benutzerdefinierte Umgebung" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Sammlungen" }, + "nCollections": { + "message": "$COUNT$ Sammlungen", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoriten" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-Ausfüllen und speichern" }, + "fillAndSave": { + "message": "Ausfüllen und speichern" + }, "autoFillSuccessAndSavedUri": { "message": "Eintrag automatisch ausgefüllt und URI gespeichert" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Zugangs-Token Aktualisierungsfehler" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Kein Aktualisierungs-Token oder API-Schlüssel gefunden. Bitte versuche dich ab- und wieder anzumelden." + }, "desktopSyncVerificationTitle": { "message": "Desktop-Sync-Überprüfung" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "Entferne die Filter oder versuche einen anderen Suchbegriff" }, - "copyInfo": { - "message": "Information kopieren, $ITEMNAME$", + "copyInfoLabel": { + "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "Weitere Optionen, $ITEMNAME$", + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Sammlungen zuweisen" + }, + "copyEmail": { + "message": "E-Mail-Adresse kopieren" + }, + "copyPhone": { + "message": "Telefonnummer kopieren" + }, + "copyAddress": { + "message": "Adresse kopieren" + }, "adminConsole": { "message": "Administrator-Konsole" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Einträge ohne Ordner" + }, + "organizationIsDeactivated": { + "message": "Organisation ist deaktiviert" + }, + "contactYourOrgAdmin": { + "message": "Auf Einträge in deaktivierten Organisationen kann nicht zugegriffen werden. Kontaktiere deinen Organisationseigentümer für Unterstützung." } } diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index da376f6c6a0..1f97b3623c2 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Αγαπημένο" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Σημειώσεις" }, @@ -410,6 +419,9 @@ "launch": { "message": "Εκκίνηση" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Ιστοσελίδα" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Αποσυνδεθήκατε" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Η περίοδος σύνδεσης σας έχει λήξει." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Καθορίστε τη βασική διεύθυνση URL, της εγκατάστασης του Bitwarden που φιλοξενείται στο χώρο σας." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Προσαρμοσμένο περιβάλλον" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Συλλογές" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Αγαπημένα" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Αυτόματη συμπλήρωση και αποθήκευση" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Αυτόματη συμπλήρωση στοιχείου και αποθηκευμένο URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Οκ" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Επιβεβαίωση συγχρονισμού επιφάνειας εργασίας" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 231637d7af3..f9bf1bc523e 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -392,6 +392,12 @@ "unfavorite": { "message": "Unfavorite" }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index 0ff4085900c..c7465f915e8 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favourite" }, + "unfavorite": { + "message": "Unfavourite" + }, + "itemAddedToFavorites": { + "message": "Item added to favourites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favourites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favourites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "OK" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organisation is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organisations cannot be accessed. Contact your organisation owner for assistance." } } diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index bb1ae5f7318..0e3efdd15f1 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favourite" }, + "unfavorite": { + "message": "Unfavourite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favourites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Auto-filled item and saved URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "OK" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organisation is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organisations cannot be accessed. Contact your organisation owner for assistance." } } diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 1134f941513..af10b5719aa 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorito" }, + "unfavorite": { + "message": "Eliminar favorito" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notas" }, @@ -410,6 +419,9 @@ "launch": { "message": "Iniciar" }, + "launchWebsite": { + "message": "Iniciar página web" + }, "website": { "message": "Web" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Sesión terminada" }, + "loggedOutDesc": { + "message": "Has cerrado sesión de tu cuenta." + }, "loginExpired": { "message": "Tu sesión ha expirado." }, @@ -763,7 +778,7 @@ "message": "Desbloquear" }, "additionalOptions": { - "message": "Additional options" + "message": "Opciones adicionales" }, "enableContextMenuItem": { "message": "Mostrar las opciones de menú contextuales" @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Especifica la URL base de tu instalación de Bitwarden de alojamiento propio." }, + "selfHostedBaseUrlHint": { + "message": "Especifica la dirección URL base de la instalación de Bitwarden alojada localmente. Ejemplo: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Para una configuración avanzada, puedes especificar la dirección URL base de cada servicio de forma independiente." + }, + "selfHostedEnvFormInvalid": { + "message": "Debes añadir la dirección URL del servidor base o al menos un entorno personalizado." + }, "customEnvironment": { "message": "Entorno personalizado" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Colecciones" }, + "nCollections": { + "message": "$COUNT$ colecciones", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoritos" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Autorellenar y guardar" }, + "fillAndSave": { + "message": "Rellenar y guardar" + }, "autoFillSuccessAndSavedUri": { "message": "Objeto autorellenado y URI guardada" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Error de actualización del token de acceso" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No se encontró ningún token de actualización ni clave de API. Intenta cerrar sesión y volver a iniciarla." + }, "desktopSyncVerificationTitle": { "message": "Verificación de sincronización del escritorio" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Limpia los filtros o prueba otro término de búsqueda" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copiar información, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "Más información, $ITEMNAME$", + "copyInfoTitle": { + "message": "Copiar información - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copiar nota, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copiar nota - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "Más opciones, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Más opciones - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Ver elemento - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Asignar colecciones" + }, + "copyEmail": { + "message": "Copiar correo electrónico" + }, + "copyPhone": { + "message": "Copiar teléfono" + }, + "copyAddress": { + "message": "Copiar dirección" + }, "adminConsole": { "message": "Consola de administrador" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Elementos sin carpeta" + }, + "organizationIsDeactivated": { + "message": "La organización está desactivada" + }, + "contactYourOrgAdmin": { + "message": "No se puede acceder a los elementos de las organizaciones desactivadas. Ponte en contacto con el propietario de tu organización para obtener ayuda." } } diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 03267c79d7b..6d1a2f7635e 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Lemmik" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Märkmed" }, @@ -410,6 +419,9 @@ "launch": { "message": "Käivita" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Veebileht" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Välja logitud" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sessioon on aegunud." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Kohandatud keskkond" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Kogumikud" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Lemmikud" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Täida ja salvesta" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Kirje täideti ja URI salvestati" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Töölaua sünkroonimise kinnitamine" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index 3d0e37f4147..3ba8820abca 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Gogokoa" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Oharrak" }, @@ -410,6 +419,9 @@ "launch": { "message": "Abiarazi" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Webgunea" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Saioa itxita" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Saioa amaitu da." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Bitwarden instalatzeko, zehaztu ostatatze propioaren oinarrizko URL-a." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Ingurune pertsonalizatua" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Bildumak" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Gogokoak" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-bete eta gorde" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Elementua auto-betea eta URIa gordeta" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ados" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Mahaigaineko sinkronizazioaren egiaztatzea" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 5b55561a6a8..b5d383c1364 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "مورد علاقه" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "یادداشت‌ها" }, @@ -410,6 +419,9 @@ "launch": { "message": "راه اندازی" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "وب‌سایت" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "خارج شد" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "نشست ورود شما منقضی شده است." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "نشانی اینترنتی پایه فرضی نصب Bitwarden میزبانی شده را مشخص کنید." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "محیط سفارشی" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "مجموعه‌ها" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "مورد علاقه‌ها" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "پر کردن خودکار و ذخیره" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "مورد خودکار پر شد و نشانی اینترنتی ذخیره شد" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "تأیید" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "تأیید همگام‌سازی دسکتاپ" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 42251e9e42b..5cb434f1265 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Suosikki" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Merkinnät" }, @@ -410,6 +419,9 @@ "launch": { "message": "Avaa" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Verkkosivusto" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Kirjauduttu ulos" }, + "loggedOutDesc": { + "message": "Sinut on kirjattu ulos tililtäsi." + }, "loginExpired": { "message": "Kirjautumisistuntosi on erääntynyt." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Määritä omassa palvelinympäristössäsi suoritettavan Bitwarden-asennuksen pääverkkotunnus." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Mukautettu palvelinympäristö" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Kokoelmat" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Suosikit" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Automaattitäytä ja tallenna" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Kohde täytettiin automaattisesti ja URI tallennettiin" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Työpöytäsynkronoinnin vahvistus" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "Tyhjennä suodattimet tai kokeile toista hakutermiä" }, - "copyInfo": { - "message": "Kopio tiedot, $ITEMNAME$", + "copyInfoLabel": { + "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "Lisää valintoja, $ITEMNAME$", + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Hallintapaneelista" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Kohteet, joilla ei ole kansioita" + }, + "organizationIsDeactivated": { + "message": "Organisaatio on poistettu käytöstä" + }, + "contactYourOrgAdmin": { + "message": "Käytöstä poistettujen organisaatioiden kohteet eivät ole käytettävissä. Ole yhteydessä organisaation omistajaan saadaksesi apua." } } diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index 86f8209e1cd..468e2a503f6 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Ang Paborito" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Mga nota" }, @@ -410,6 +419,9 @@ "launch": { "message": "Paglulunsad" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Umalis na" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Nag-expire na ang iyong session sa login." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Tukuyin ang base URL ng iyong Bitwarden installation na naka-host sa on-premises." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Kapaligirang Custom" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Koleksyon" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Mga Paborito" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill at i-save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item na auto-filled at URI na nai-save" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Pag verify ng pag sync ng desktop" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 53df48d0004..8bb8cfe537b 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -173,19 +173,19 @@ "message": "Poursuivre vers l'application web ?" }, "continueToWebAppDesc": { - "message": "Explore more features of your Bitwarden account on the web app." + "message": "Explorez plus de fonctionnalités de votre compte Bitwarden sur l'application Web." }, "continueToHelpCenter": { - "message": "Continue to Help Center?" + "message": "Continuer vers le centre d'aide ?" }, "continueToHelpCenterDesc": { - "message": "Learn more about how to use Bitwarden on the Help Center." + "message": "En savoir plus sur l'utilisation de Bitwarden dans le centre d'aide." }, "continueToBrowserExtensionStore": { - "message": "Continue to browser extension store?" + "message": "Continuer vers le magasin d'extension du navigateur ?" }, "continueToBrowserExtensionStoreDesc": { - "message": "Help others find out if Bitwarden is right for them. Visit your browser's extension store and leave a rating now." + "message": "Aidez les autres à savoir si Bitwarden est fait pour eux. Visitez le magasin d'extension de votre navigateur et laissez une évaluation maintenant." }, "changeMasterPasswordOnWebConfirmation": { "message": "Vous pouvez modifier votre mot de passe principal sur l'application web de Bitwarden." @@ -205,43 +205,43 @@ "message": "Se déconnecter" }, "aboutBitwarden": { - "message": "About Bitwarden" + "message": "À propos de Bitwarden" }, "about": { "message": "À propos" }, "moreFromBitwarden": { - "message": "More from Bitwarden" + "message": "Plus de Bitwarden" }, "continueToBitwardenDotCom": { - "message": "Continue to bitwarden.com?" + "message": "Continuer vers bitwarden.com?" }, "bitwardenForBusiness": { - "message": "Bitwarden for Business" + "message": "Bitwarden pour les entreprises" }, "bitwardenAuthenticator": { "message": "Bitwarden Authenticator" }, "continueToAuthenticatorPageDesc": { - "message": "Bitwarden Authenticator allows you to store authenticator keys and generate TOTP codes for 2-step verification flows. Learn more on the bitwarden.com website" + "message": "Bitwarden Authenticator vous permet de stocker les clés d'authentification et de générer des codes TOTP pour les flux de vérification en 2 étapes. En savoir plus sur le site web bitwarden.com" }, "bitwardenSecretsManager": { "message": "Bitwarden Secrets Manager" }, "continueToSecretsManagerPageDesc": { - "message": "Securely store, manage, and share developer secrets with Bitwarden Secrets Manager. Learn more on the bitwarden.com website." + "message": "Stockez, gérez et partagez des mots de passe de développement avec Bitwarden Secrets Manager. Apprenez-en plus sur le site web bitwarden.com." }, "passwordlessDotDev": { "message": "Passwordless.dev" }, "continueToPasswordlessDotDevPageDesc": { - "message": "Create smooth and secure login experiences free from traditional passwords with Passwordless.dev. Learn more on the bitwarden.com website." + "message": "Créez des expériences de connexion faciles et sécurisées à partir des mots de passe traditionnels avec Passwordless.dev. Apprenez-en plus sur le site web bitwarden.com." }, "freeBitwardenFamilies": { - "message": "Free Bitwarden Families" + "message": "Bitwarden Familles gratuit" }, "freeBitwardenFamiliesPageDesc": { - "message": "You are eligible for Free Bitwarden Families. Redeem this offer today in the web app." + "message": "Vous êtes éligible pour obtenir Bitwarden Familles gratuitement. Souscrivez à cette offre aujourd'hui dans l'application Web." }, "version": { "message": "Version" @@ -302,7 +302,7 @@ "message": "Générer automatiquement des mots de passe robustes et uniques pour vos identifiants." }, "bitWebVaultApp": { - "message": "Bitwarden web app" + "message": "Application web Bitwarden" }, "importItems": { "message": "Importer des éléments" @@ -389,6 +389,15 @@ "favorite": { "message": "Favori" }, + "unfavorite": { + "message": "Retirer des favoris" + }, + "itemAddedToFavorites": { + "message": "Élément ajouté aux favoris" + }, + "itemRemovedFromFavorites": { + "message": "Élément retiré des favoris" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Ouvrir" }, + "launchWebsite": { + "message": "Ouvrir le site web" + }, "website": { "message": "Site web" }, @@ -423,7 +435,7 @@ "message": "Autre" }, "unlockMethods": { - "message": "Unlock options" + "message": "Options de déverrouillage" }, "unlockMethodNeededToChangeTimeoutActionDesc": { "message": "Configurez une méthode de déverrouillage pour changer le délai d'expiration de votre coffre." @@ -432,10 +444,10 @@ "message": "Configurer une méthode de déverrouillage dans les Paramètres" }, "sessionTimeoutHeader": { - "message": "Session timeout" + "message": "Expiration de la session" }, "otherOptions": { - "message": "Other options" + "message": "Autres options" }, "rateExtension": { "message": "Noter l'extension" @@ -599,6 +611,9 @@ "loggedOut": { "message": "Déconnecté" }, + "loggedOutDesc": { + "message": "Vous avez été déconnecté de votre compte." + }, "loginExpired": { "message": "Votre session a expiré." }, @@ -763,7 +778,7 @@ "message": "Déverrouiller" }, "additionalOptions": { - "message": "Additional options" + "message": "Options supplémentaires" }, "enableContextMenuItem": { "message": "Afficher les options du menu contextuel" @@ -803,7 +818,7 @@ "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportFrom": { - "message": "Export from" + "message": "Exporter à partir de" }, "exportVault": { "message": "Exporter le coffre" @@ -812,28 +827,28 @@ "message": "Format de fichier" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "L'export de ce fichier sera protégé par un mot de passe et nécessitera le mot de passe du fichier pour être déchiffré." }, "filePassword": { - "message": "File password" + "message": "Mot de passe du fichier" }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "Ce mot de passe sera utilisé pour exporter et importer ce fichier" }, "accountRestrictedOptionDescription": { - "message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account." + "message": "Utilisez la clé de chiffrement de votre compte, dérivée du nom d'utilisateur et du mot de passe principal de votre compte, pour chiffrer l'export et restreindre l'import au seul compte Bitwarden actuel." }, "passwordProtectedOptionDescription": { - "message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption." + "message": "Définissez un mot de passe de fichier pour chiffrer l'exportation et l'importer dans n'importe quel compte Bitwarden en utilisant le mot de passe pour le déchiffrage." }, "exportTypeHeading": { - "message": "Export type" + "message": "Type d'exportation" }, "accountRestricted": { - "message": "Account restricted" + "message": "Compte restreint" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "“File password” and “Confirm file password“ do not match." + "message": "Le \"Mot de passe du fichier\" et le \"Confirmation du mot de passe du fichier\" ne correspondent pas." }, "warning": { "message": "AVERTISSEMENT", @@ -858,7 +873,7 @@ "message": "Partagé" }, "bitwardenForBusinessPageDesc": { - "message": "Bitwarden for Business allows you to share your vault items with others by using an organization. Learn more on the bitwarden.com website." + "message": "Bitwarden pour entreprises vous permet de partager les éléments de votre coffre avec les autres en utilisant une organisation. Apprenez-en plus sur le site bitwarden.com." }, "moveToOrganization": { "message": "Déplacer vers l'organisation" @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Spécifiez l'URL de base de votre installation Bitwarden auto-hébergée." }, + "selfHostedBaseUrlHint": { + "message": "Spécifiez l'URL de base de votre installation autohébergée par Bitwarden. Exemple : https://bitwarden.compagnie.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Pour une configuration avancée. Vous pouvez spécifier l'URL de base indépendamment pour chaque service." + }, + "selfHostedEnvFormInvalid": { + "message": "Vous devez ajouter soit l'URL du serveur de base, soit au moins un environnement personnalisé." + }, "customEnvironment": { "message": "Environnement personnalisé" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoris" }, @@ -1637,7 +1670,7 @@ "message": "Élément restauré" }, "alreadyHaveAccount": { - "message": "Already have an account?" + "message": "Vous avez déjà un compte ?" }, "vaultTimeoutLogOutConfirmation": { "message": "La déconnexion supprimera tout accès à votre coffre et nécessitera une authentification en ligne après la période d'expiration. Êtes-vous sûr de vouloir utiliser ce paramètre ?" @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Saisir automatiquement et sauvegarder" }, + "fillAndSave": { + "message": "Remplir et enregistrer" + }, "autoFillSuccessAndSavedUri": { "message": "Élément saisi automatiquement et URI sauvegardé" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Erreur d'Actualisation du Jeton d'Accès" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Aucun jeton de rafraîchissement ou clé d'API trouvé. Veuillez essayer de vous déconnecter et de vous reconnecter." + }, "desktopSyncVerificationTitle": { "message": "Vérification de la synchronisation avec l'application de bureau" }, @@ -1793,10 +1835,10 @@ "message": "Le déverrouillage biométrique dans le navigateur n’est pas pris en charge sur cet appareil" }, "biometricsNotUnlockedTitle": { - "message": "User locked or logged out" + "message": "Utilisateur verrouillé ou déconnecté" }, "biometricsNotUnlockedDesc": { - "message": "Please unlock this user in the desktop application and try again." + "message": "Veuillez déverrouiller cet utilisateur dans l'application de bureau et réessayer." }, "biometricsFailedTitle": { "message": "Le déverrouillage biométique a échoué\n" @@ -2213,10 +2255,10 @@ } }, "exportingOrganizationVaultTitle": { - "message": "Exporting organization vault" + "message": "Export du coffre de l'organisation" }, "exportingOrganizationVaultDesc": { - "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Items in individual vaults or other organizations will not be included.", + "message": "Seul le coffre d'organisation associé à $ORGANIZATION$ sera exporté. Les éléments dans les coffres individuels ou d'autres organisations ne seront pas inclus.", "placeholders": { "organization": { "content": "$1", @@ -2274,7 +2316,7 @@ "message": "Générer un alias de courriel avec un service de transfert externe." }, "forwarderError": { - "message": "$SERVICENAME$ error: $ERRORMESSAGE$", + "message": "Erreur $SERVICENAME$ : $ERRORMESSAGE$", "description": "Reports an error returned by a forwarding service to the user.", "placeholders": { "servicename": { @@ -2288,11 +2330,11 @@ } }, "forwarderGeneratedBy": { - "message": "Generated by Bitwarden.", + "message": "Généré par Bitwarden.", "description": "Displayed with the address on the forwarding service's configuration screen." }, "forwarderGeneratedByWithWebsite": { - "message": "Website: $WEBSITE$. Generated by Bitwarden.", + "message": "Site web : $WEBSITE$. Généré par Bitwarden.", "description": "Displayed with the address on the forwarding service's configuration screen.", "placeholders": { "WEBSITE": { @@ -2302,7 +2344,7 @@ } }, "forwaderInvalidToken": { - "message": "Invalid $SERVICENAME$ API token", + "message": "Jeton API $SERVICENAME$ invalide", "description": "Displayed when the user's API token is empty or rejected by the forwarding service.", "placeholders": { "servicename": { @@ -2312,7 +2354,7 @@ } }, "forwaderInvalidTokenWithMessage": { - "message": "Invalid $SERVICENAME$ API token: $ERRORMESSAGE$", + "message": "Jeton API $SERVICENAME$ non valide : $ERRORMESSAGE$", "description": "Displayed when the user's API token is rejected by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -2326,7 +2368,7 @@ } }, "forwarderNoAccountId": { - "message": "Unable to obtain $SERVICENAME$ masked email account ID.", + "message": "Impossible d'obtenir l'ID du compte de courriel masqué $SERVICENAME$.", "description": "Displayed when the forwarding service fails to return an account ID.", "placeholders": { "servicename": { @@ -2336,7 +2378,7 @@ } }, "forwarderNoDomain": { - "message": "Invalid $SERVICENAME$ domain.", + "message": "Domaine de $SERVICENAME$ invalide.", "description": "Displayed when the domain is empty or domain authorization failed at the forwarding service.", "placeholders": { "servicename": { @@ -2346,7 +2388,7 @@ } }, "forwarderNoUrl": { - "message": "Invalid $SERVICENAME$ url.", + "message": "L'URL $SERVICENAME$ invalide.", "description": "Displayed when the url of the forwarding service wasn't supplied.", "placeholders": { "servicename": { @@ -2356,7 +2398,7 @@ } }, "forwarderUnknownError": { - "message": "Unknown $SERVICENAME$ error occurred.", + "message": "Une erreur $SERVICENAME$ inconnue s'est produite.", "description": "Displayed when the forwarding service failed due to an unknown error.", "placeholders": { "servicename": { @@ -2366,7 +2408,7 @@ } }, "forwarderUnknownForwarder": { - "message": "Unknown forwarder: '$SERVICENAME$'.", + "message": "Émetteur inconnu: '$SERVICENAME$'.", "description": "Displayed when the forwarding service is not supported.", "placeholders": { "servicename": { @@ -2587,25 +2629,25 @@ "message": "Identifiant SSO de l'organisation requis." }, "creatingAccountOn": { - "message": "Creating account on" + "message": "Création du compte sur" }, "checkYourEmail": { - "message": "Check your email" + "message": "Vérifiez vos courriels" }, "followTheLinkInTheEmailSentTo": { - "message": "Follow the link in the email sent to" + "message": "Suivez le lien dans le courriel envoyé à" }, "andContinueCreatingYourAccount": { - "message": "and continue creating your account." + "message": "et continuer à créer votre compte." }, "noEmail": { - "message": "No email?" + "message": "Pas de courriel ?" }, "goBack": { - "message": "Go back" + "message": "Revenir en arrière" }, "toEditYourEmailAddress": { - "message": "to edit your email address." + "message": "pour modifier votre adresse mail." }, "eu": { "message": "UE", @@ -3235,7 +3277,7 @@ "message": "Clé d'identification (passkey) retirée" }, "unassignedItemsBannerNotice": { - "message": "Notice: Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console." + "message": "Remarque : Les éléments d'organisation non assignés ne sont plus visibles dans la vue Tous les coffres et ne sont maintenant accessibles que via la Console Admin." }, "unassignedItemsBannerSelfHostNotice": { "message": "Remarque : À partir du 16 mai 2024, les éléments d'organisation non assignés ne seront plus visibles dans votre vue Tous les coffres sur les appareils et ne seront maintenant accessibles que via la Console Admin." @@ -3249,22 +3291,22 @@ "description": "This will be part of a larger sentence, which will read like so: Assign these items to a collection from the Admin Console to make them visible." }, "autofillSuggestions": { - "message": "Auto-fill suggestions" + "message": "Suggestions de saisie automatique" }, "autofillSuggestionsTip": { "message": "Save a login item for this site to auto-fill" }, "yourVaultIsEmpty": { - "message": "Your vault is empty" + "message": "Votre coffre-fort est vide" }, "noItemsMatchSearch": { - "message": "No items match your search" + "message": "Aucun élément ne correspond à votre recherche" }, "clearFiltersOrTryAnother": { - "message": "Clear filters or try another search term" + "message": "Effacer les filtres ou essayer un autre terme de recherche" }, - "copyInfo": { - "message": "Copy info, $ITEMNAME$", + "copyInfoLabel": { + "message": "Copier les informations, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "More options, $ITEMNAME$", + "copyInfoTitle": { + "message": "Copier les informations - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copier la note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copier la note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "Plus d'options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,26 +3355,58 @@ } } }, + "moreOptionsTitle": { + "message": "Plus d'options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Voir l'élément - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assigner une collection" + }, + "copyEmail": { + "message": "Copier l'email" + }, + "copyPhone": { + "message": "Copier le numéro de téléphone" + }, + "copyAddress": { + "message": "Copier l'adresse" + }, "adminConsole": { "message": "Console Admin" }, "accountSecurity": { - "message": "Account security" + "message": "Sécurité du compte" }, "notifications": { "message": "Notifications" }, "appearance": { - "message": "Appearance" + "message": "Apparence" }, "errorAssigningTargetCollection": { - "message": "Error assigning target collection." + "message": "Erreur lors de l'assignation de la collection cible." }, "errorAssigningTargetFolder": { - "message": "Error assigning target folder." + "message": "Erreur lors de l'assignation du dossier cible." }, "viewItemsIn": { - "message": "View items in $NAME$", + "message": "Voir les éléments dans $NAME$", "description": "Button to view the contents of a folder or collection", "placeholders": { "name": { @@ -3312,7 +3416,7 @@ } }, "backTo": { - "message": "Back to $NAME$", + "message": "Retour à $NAME$", "description": "Navigate back to a previous folder or collection", "placeholders": { "name": { @@ -3322,10 +3426,10 @@ } }, "new": { - "message": "New" + "message": "Nouveau" }, "removeItem": { - "message": "Remove $NAME$", + "message": "Retirer $NAME$", "description": "Remove a selected option, such as a folder or collection", "placeholders": { "name": { @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Eléments sans dossier" + }, + "organizationIsDeactivated": { + "message": "L'organisation est désactivée" + }, + "contactYourOrgAdmin": { + "message": "Les éléments des Organisations désactivées ne sont pas accessibles. Contactez le propriétaire de votre Organisation pour obtenir de l'aide." } } diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index dd29c8a071c..cf38b90e8fa 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorito" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notas" }, @@ -410,6 +419,9 @@ "launch": { "message": "Iniciar" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Sitio web" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Sesión pechada" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "A túa sesión caducou." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Entorno personalizado" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Coleccións" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoritos" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index c191df36bf8..b5cbb79ca17 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "מועדף" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "הערות" }, @@ -410,6 +419,9 @@ "launch": { "message": "הפעל" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "אתר" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "בוצעה יציאה" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "תוקף החיבור שלך הסתיים." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "הזן את כתובת השרת המקומי של Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "סביבה מותאמת אישית" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "אוספים" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "מועדפים" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "בצע השלמה אוטומטית ושמור" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "בוצעה השלמה אוטומטית והכתובת נשמרה" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "אישור" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "אימות סנכרון מול שולחן העבודה" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index d6ac94bec32..741c873c65c 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorite" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "नोट्स" }, @@ -410,6 +419,9 @@ "launch": { "message": "खोलें" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "वेबसाइट" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "लॉग आउट" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "अपने लॉगिन सत्र समाप्त हो गया है।" }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom Environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "संग्रह" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "ऑटो फिल और सेव" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "ऑटो फिल आइटम और सेव URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "ठीक है" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "डेस्कटॉप सिंक सत्यापन" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 8b9f96fa5c4..62b987fc3aa 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorit" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Bilješke" }, @@ -410,6 +419,9 @@ "launch": { "message": "Pokreni" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Web stranica" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Odjavljen" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesija je istekla." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Navedi osnovni URL svoje lokalno smještene Bitwarden instalacije." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Prilagođeno okruženje" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Zbirke" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoriti" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-ispuni i spremi" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Auto-ispunjena stavka i spremanje URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "U redu" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Potvrda desktop sinkronizacije" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index 8ff50ea4f08..432ab7ec26e 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Kedvenc" }, + "unfavorite": { + "message": "Nem kedvenc" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Jegyzetek" }, @@ -410,6 +419,9 @@ "launch": { "message": "Indítás" }, + "launchWebsite": { + "message": "Webhely indítása" + }, "website": { "message": "Weboldal" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Kijelentkezett" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Bejelentkezési munkamenete lejárt." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "A helyileg működtetett Bitwarden telepítés alap webcímének megadása." }, + "selfHostedBaseUrlHint": { + "message": "Adjuk meg a helyileg tárolt Bitwarden telepítés alap webcímét. Példa: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Speciális konfigurációhoz külön-külön megadhatjuk az egyes szolgáltatások alap webcímét." + }, + "selfHostedEnvFormInvalid": { + "message": "Hozzá kell adni az alapszerver webcímét vagy legalább egy egyedi környezetet." + }, "customEnvironment": { "message": "Egyedi környezet" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Gyűjtemények" }, + "nCollections": { + "message": "$COUNT$ gyűjtemény", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Kedvencek" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Automatikus kitöltés és mentés" }, + "fillAndSave": { + "message": "Kitöltés és mentés" + }, "autoFillSuccessAndSavedUri": { "message": "Automatikusan kitöltött elem és mentett URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Asztali szinkronizálás ellenőrzés" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "Töröljük a szűrőket vagy próbálkozzunk másik keresési kifejezéssel." }, - "copyInfo": { - "message": "Adatok másolása, $ITEMNAME$", + "copyInfoLabel": { + "message": "Infó másolása, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Infó másolása - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Jegyzet másolása, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Jegyzet másolása - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "További opciók, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "További opciók - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Elem megtekkintése - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Gyűjtemények hozzárendelése" + }, + "copyEmail": { + "message": "Email cím másolása" + }, + "copyPhone": { + "message": "Telefonszám másolása" + }, + "copyAddress": { + "message": "Cím másolása" + }, "adminConsole": { "message": "Adminisztrátori konzol" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index 19770da2782..3f834efd68a 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorit" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Catatan" }, @@ -410,6 +419,9 @@ "launch": { "message": "Luncurkan" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Situs Web" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Keluar" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesi masuk Anda telah berakhir." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Tetapkan URL dasar penyedia personal pemasangan Bitwarden Anda." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Lingkungan Khusus" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Koleksi" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorit" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Isi Otomatis dan Simpan" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item yang Diisi Otomatis dan URI Tersimpan" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Oke" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Verifikasi sinkronisasi desktop" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 614068b1f4d..72bc28c87eb 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Preferito" }, + "unfavorite": { + "message": "Rimuovi dai preferiti" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Note" }, @@ -410,6 +419,9 @@ "launch": { "message": "Avvia" }, + "launchWebsite": { + "message": "Avvia il sito web" + }, "website": { "message": "Sito web" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Disconnesso" }, + "loggedOutDesc": { + "message": "Sei stato fatto uscire dal tuo account." + }, "loginExpired": { "message": "La tua sessione è scaduta." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specifica l'URL principale della tua installazione self-hosted di Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specifica lo URL principale della tua installazione self-hosted di Bitwarden. Esempio: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Per la configurazione avanzata, puoi specificare lo URL di base di ciascun servizio in modo indipendente." + }, + "selfHostedEnvFormInvalid": { + "message": "Devi aggiungere lo URL del server di base o almeno un ambiente personalizzato." + }, "customEnvironment": { "message": "Ambiente personalizzato" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Raccolte" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Preferiti" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Riempi automaticamente e salva" }, + "fillAndSave": { + "message": "Riempi e salva" + }, "autoFillSuccessAndSavedUri": { "message": "Elemento riempito automaticamente e URI salvato" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Errore di aggiornamento del token di accesso" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nessun token di aggiornamento o chiave API trovati. Prova ad uscire ed entrare di nuovo." + }, "desktopSyncVerificationTitle": { "message": "Verifica sincronizzazione desktop" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Cancella i filtri o prova un altro termine di ricerca" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copia informazioni, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copia informazioni - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copia nota, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copia nota - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Più opzioni, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Più opzioni - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Visualizza elemento - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assegna raccolte" + }, + "copyEmail": { + "message": "Copia email" + }, + "copyPhone": { + "message": "Copia telefono" + }, + "copyAddress": { + "message": "Copia indirizzo" + }, "adminConsole": { "message": "Console di amministrazione" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Elementi senza cartella" + }, + "organizationIsDeactivated": { + "message": "L'organizzazione è disattivata" + }, + "contactYourOrgAdmin": { + "message": "Non puoi accedere agli elementi nelle organizzazioni disattivate. Contatta il proprietario della tua organizzazione per ricevere assistenza." } } diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 9113b95a7d3..549b441e506 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "お気に入り" }, + "unfavorite": { + "message": "お気に入り解除" + }, + "itemAddedToFavorites": { + "message": "アイテムをお気に入りに追加しました" + }, + "itemRemovedFromFavorites": { + "message": "アイテムをお気に入りから削除しました" + }, "notes": { "message": "メモ" }, @@ -410,6 +419,9 @@ "launch": { "message": "開く" }, + "launchWebsite": { + "message": "ウェブサイトを開く" + }, "website": { "message": "ウェブサイト" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "ログアウトしました" }, + "loggedOutDesc": { + "message": "アカウントからログアウトしました。" + }, "loginExpired": { "message": "ログインセッションの有効期限が切れています。" }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "セルフホスティングしている Bitwarden のベース URL を指定してください。" }, + "selfHostedBaseUrlHint": { + "message": "オンプレミスホストした Bitwarden のベース URL を指定してください。例: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "高度な設定では、各サービスのベース URL を個別に指定できます。" + }, + "selfHostedEnvFormInvalid": { + "message": "ベース サーバー URL または少なくとも 1 つのカスタム環境を追加する必要があります。" + }, "customEnvironment": { "message": "カスタム環境" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "コレクション" }, + "nCollections": { + "message": "$COUNT$ 個のコレクション", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "お気に入り" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "自動入力して保存" }, + "fillAndSave": { + "message": "入力して保存" + }, "autoFillSuccessAndSavedUri": { "message": "アイテムを自動入力して URI を保存しました" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "OK" }, + "errorRefreshingAccessToken": { + "message": "アクセストークンの更新エラー" + }, + "errorRefreshingAccessTokenDesc": { + "message": "リフレッシュトークンや API キーが見つかりませんでした。ログアウトして再度ログインしてください。" + }, "desktopSyncVerificationTitle": { "message": "デスクトップ同期の検証" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "フィルタをクリアするか、別の検索ワードをお試しください" }, - "copyInfo": { + "copyInfoLabel": { "message": "$ITEMNAME$ の情報をコピー", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "情報をコピー - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "$ITEMNAME$ のメモをコピー", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "メモをコピー - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "$ITEMNAME$ のその他のオプション", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "その他のオプション - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "アイテムを表示 - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "コレクションを割り当て" + }, + "copyEmail": { + "message": "メールアドレスをコピー" + }, + "copyPhone": { + "message": "電話番号をコピー" + }, + "copyAddress": { + "message": "住所をコピー" + }, "adminConsole": { "message": "管理コンソール" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "フォルダーがないアイテム" + }, + "organizationIsDeactivated": { + "message": "組織は無効化されています" + }, + "contactYourOrgAdmin": { + "message": "無効化された組織のアイテムにアクセスすることはできません。組織の所有者に連絡してください。" } } diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 6abd24dafc8..1129d83b6cc 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "რჩეული" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "ვებგვერდი" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index c3f03166b25..e4b83601fe4 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorite" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index e5e1f708f66..e0e5d75cecd 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "ಮೆಚ್ಚಿನ" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "ಟಿಪ್ಪಣಿಗಳು" }, @@ -410,6 +419,9 @@ "launch": { "message": "ಶುರು" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "ಜಾಲತಾಣ" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "ಲಾಗ್ ಔಟ್" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "ನಿಮ್ಮ ಲಾಗಿನ್ ಸೆಷನ್ ಅವಧಿ ಮೀರಿದೆ." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "ನಿಮ್ಮ ಆನ್-ಪ್ರಮೇಯ ಹೋಸ್ಟ್ ಮಾಡಿದ ಬಿಟ್‌ವಾರ್ಡೆನ್ ಸ್ಥಾಪನೆಯ ಮೂಲ URL ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "ಕಸ್ಟಮ್ ಪರಿಸರ" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "ಸಂಗ್ರಹಣೆಗಳು" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "ಮೆಚ್ಚುಗೆಗಳು" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "ಸ್ವಯಂ ಭರ್ತಿ ಮತ್ತು ಉಳಿಸಿ" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "ಸ್ವಯಂ ತುಂಬಿದ ಐಟಂ ಮತ್ತು ಉಳಿಸಿದ ಯುಆರ್ಐ" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "ಸರಿ" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "ಡೆಸ್ಕ್ಟಾಪ್ ಸಿಂಕ್ ಪರಿಶೀಲನೆ" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index 552446ef766..58d8d01b907 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "즐겨찾기" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "메모" }, @@ -410,6 +419,9 @@ "launch": { "message": "열기" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "웹 사이트" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "로그아웃됨" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "로그인 세션이 만료되었습니다." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "온-프레미스 Bitwarden이 호스팅되고 있는 서버의 기본 URL을 지정하세요." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "사용자 지정 환경" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "컬렉션" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "즐겨찾기" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "자동 완성 및 저장" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "항목을 자동 완성하고 URI를 저장함" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "확인" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "데스크톱과의 동기화 인증" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 5b426e47d15..8dd871d7ef3 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Mėgstamas" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Pastabos" }, @@ -410,6 +419,9 @@ "launch": { "message": "Paleisti" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Tinklapis" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Atsijungta" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesijos laikas baigėsi." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Nurodykite vietinio priglobto „Bitwarden“ diegimo bazinį URL." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Individualizuota aplinka" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Kolekcijos" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Mėgstamiausi" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Automatiškai užpildyti ir išsaugoti" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Elementas automatiškai užpildytas ir URI išsaugotas" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Gerai" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Darbalaukio sinchronizavimo verifikavimas" }, @@ -1793,10 +1835,10 @@ "message": "Šiame įrenginyje biometrikos negalima naudoti." }, "biometricsNotUnlockedTitle": { - "message": "User locked or logged out" + "message": "Naudotojas užrakintas arba atsijungęs" }, "biometricsNotUnlockedDesc": { - "message": "Please unlock this user in the desktop application and try again." + "message": "Atrakinkite šį naudotoją darbalaukio programoje ir bandykite dar kartą." }, "biometricsFailedTitle": { "message": "Biometrika nepavyko" @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Administratoriaus konsolės" }, @@ -3322,7 +3426,7 @@ } }, "new": { - "message": "New" + "message": "Naujas" }, "removeItem": { "message": "Remove $NAME$", @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index ac202682bab..fcc4851d390 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Izlasē" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Piezīmes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Palaist" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Tīmekļa vietne" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Atteicies" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Pieteikšanās sesija ir beigusies." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Norādīt pašuzstādīta Bitwarden pamata URL." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Pielāgota vide" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Krājumi" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Izlase" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Automātiski aizpildīt un saglabāt" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Automātiski aizpildīts vienums un saglabāts URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Labi" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Darbvirsmas sinhronizācijas apstiprinājums" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "Jānotīra atlases vērtības vai jāmēģina cits meklēšanas vaicājums" }, - "copyInfo": { - "message": "Kopēt informāciju, $ITEMNAME$", + "copyInfoLabel": { + "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "Vairāk iespēju, $ITEMNAME$", + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "pārvaldības konsolē," }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index d2a9b2db389..7e578136330 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "പ്രിയങ്കരം" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "കുറിപ്പുകൾ" }, @@ -410,6 +419,9 @@ "launch": { "message": "തുറക്കുക" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "വെബ്സൈറ്റ്" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "ലോഗേഡ് ഔട്ട്" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "നിങ്ങളുടെ പ്രവർത്തന സമയം കഴിഞ്ഞിരിക്കുന്നു." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "തങ്ങളുടെ പരിസരത്ത് ചെയ്യുന്ന ബിറ്റ് വാർഡൻ ഇൻസ്റ്റാളേഷന്റെ അടിസ്ഥാന URL വ്യക്തമാക്കുക." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "ഇഷ്‌ടാനുസൃത എൻവിയോണ്മെന്റ്" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "കളക്ഷൻസ്" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "പ്രിയങ്കരങ്ങള്‍" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "യാന്ത്രികമായി പൂരിപ്പിച്ച് സംരക്ഷിക്കുക" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "യാന്ത്രികമായി പൂരിപ്പിച്ച ഇനവും സംരക്ഷിച്ച URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 6407be2c68d..4bbc32ef565 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "आवडते" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "टिप" }, @@ -410,6 +419,9 @@ "launch": { "message": "उघडा" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "संकेतस्थळ" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index c3f03166b25..e4b83601fe4 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorite" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index d2feb8798e5..7552c982967 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favoritt" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notater" }, @@ -410,6 +419,9 @@ "launch": { "message": "Åpne" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Nettsted" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logget av" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Din innloggingsøkt har utløpt." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Spesifiser grunn-nettadressen til din selvbetjente Bitwarden-installasjon." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Tilpasset miljø" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Samlinger" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoritter" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Autofyll og lagre" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Autoutfylt objekt og lagret URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Verifisering av skrivebordssynkronisering" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index c3f03166b25..e4b83601fe4 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorite" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 07c69ec596c..62a418d0245 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favoriet" }, + "unfavorite": { + "message": "Ontfavoriet" + }, + "itemAddedToFavorites": { + "message": "Item toegevoegd aan favorieten" + }, + "itemRemovedFromFavorites": { + "message": "Item verwijderd uit favorieten" + }, "notes": { "message": "Notities" }, @@ -410,6 +419,9 @@ "launch": { "message": "Starten" }, + "launchWebsite": { + "message": "Website openen" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Uitgelogd" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Je inlogsessie is verlopen." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Geef de basis-URL van jouw zelfgehoste Bitwarden-installatie." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Aangepaste omgeving" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Verzamelingen" }, + "nCollections": { + "message": "$COUNT$ collecties", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorieten" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Automatisch invullen en opslaan" }, + "fillAndSave": { + "message": "Invullen en opslaan" + }, "autoFillSuccessAndSavedUri": { "message": "Automatisch gevuld item en opgeslagen URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktopsynchronisatieverificatie" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "Wis filters of probeer een andere zoekterm" }, - "copyInfo": { - "message": "Kopieer info, $ITEMNAME$", + "copyInfoLabel": { + "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "Meer opties, $ITEMNAME$", + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Collecties toewijzen" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items zonder map" + }, + "organizationIsDeactivated": { + "message": "Organisatie is gedeactiveerd" + }, + "contactYourOrgAdmin": { + "message": "Items in een gedeactiveerde organisatie zijn niet toegankelijk. Neem contact op met de eigenaar van je organisatie voor hulp." } } diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index c3f03166b25..e4b83601fe4 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorite" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index c3f03166b25..e4b83601fe4 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorite" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index c9959508c95..aa48d596a42 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Ulubione" }, + "unfavorite": { + "message": "Usuń z ulubionych" + }, + "itemAddedToFavorites": { + "message": "Element dodany do ulubionych" + }, + "itemRemovedFromFavorites": { + "message": "Element usunięty z ulubionych" + }, "notes": { "message": "Notatki" }, @@ -410,6 +419,9 @@ "launch": { "message": "Uruchom" }, + "launchWebsite": { + "message": "Otwórz stronę" + }, "website": { "message": "Strona" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Wylogowano" }, + "loggedOutDesc": { + "message": "Zostałeś wylogowany z konta." + }, "loginExpired": { "message": "Twoja sesja wygasła." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Wpisz podstawowy adres URL hostowanej instalacji Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Określ bazowy adres URL swojej instalacji Bitwarden. Przykład: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Dla zaawansowanych konfiguracji możesz określić podstawowy adres URL niezależnie dla każdej usługi." + }, + "selfHostedEnvFormInvalid": { + "message": "Musisz dodać podstawowy adres URL serwera lub co najmniej jedno niestandardowe środowisko." + }, "customEnvironment": { "message": "Niestandardowe środowisko" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Kolekcje" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Ulubione" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Automatycznie uzupełnij i zapisz" }, + "fillAndSave": { + "message": "Wypełnij i zapisz" + }, "autoFillSuccessAndSavedUri": { "message": "URI został zapisany i automatycznie uzupełniony" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Błąd podczas odświeżania tokenu" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nie znaleziono tokenu odświeżającego ani kluczy API. Spróbuj wylogować się i zalogować ponownie." + }, "desktopSyncVerificationTitle": { "message": "Weryfikacja synchronizacji z aplikacją desktopową" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Wyczyść filtry lub użyj innej frazy" }, - "copyInfo": { + "copyInfoLabel": { "message": "Skopiuj informacje, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Skopiuj informacje - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Skopiuj notatkę, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Skopiuj notatkę - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Więcej opcji, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Więcej opcji - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Zobacz element - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Przypisz kolekcje" + }, + "copyEmail": { + "message": "Skopiuj e-mail" + }, + "copyPhone": { + "message": "Skopiuj telefon" + }, + "copyAddress": { + "message": "Skopiuj adres" + }, "adminConsole": { "message": "Konsola Administracyjna" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Elementy bez folderu" + }, + "organizationIsDeactivated": { + "message": "Organizacja jest wyłączona" + }, + "contactYourOrgAdmin": { + "message": "Nie można uzyskać dostępu do elementów w wyłączonych organizacjach. Skontaktuj się z właścicielem organizacji, aby uzyskać pomoc." } } diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 7f247311df6..dd540bd6176 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorito" }, + "unfavorite": { + "message": "Desfavoritar" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notas" }, @@ -410,6 +419,9 @@ "launch": { "message": "Abrir" }, + "launchWebsite": { + "message": "Abrir site" + }, "website": { "message": "Site" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Sessão encerrada" }, + "loggedOutDesc": { + "message": "Você foi desconectado de sua conta." + }, "loginExpired": { "message": "A sua sessão expirou." }, @@ -763,7 +778,7 @@ "message": "Desbloquear" }, "additionalOptions": { - "message": "Additional options" + "message": "Opções adicionais" }, "enableContextMenuItem": { "message": "Mostrar opções de menu de contexto" @@ -803,7 +818,7 @@ "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportFrom": { - "message": "Export from" + "message": "Exportar de" }, "exportVault": { "message": "Exportar Cofre" @@ -812,13 +827,13 @@ "message": "Formato de arquivo" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "Esta arquivo de exportação será protegido por senha e precisará da mesma para ser descriptografado." }, "filePassword": { - "message": "File password" + "message": "Senha do arquivo" }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "Esta senha será usada para exportar e importar este arquivo" }, "accountRestrictedOptionDescription": { "message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account." @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Especifique a URL de base da sua instalação local do Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Ambiente Personalizado" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Coleções" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoritos" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Autopreencher e Salvar" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item Auto-Preenchido e URI Salvo" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Verificação de sincronização do Desktop" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "Limpar filtros ou tentar outro termo de pesquisa" }, - "copyInfo": { - "message": "Copiar informações, $ITEMNAME$", + "copyInfoLabel": { + "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "Mais opções, $ITEMNAME$", + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Painel de administração" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index bcbddaff0a2..7fe4400078e 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorito" }, + "unfavorite": { + "message": "Remover dos favoritos" + }, + "itemAddedToFavorites": { + "message": "Item adicionado aos favoritos" + }, + "itemRemovedFromFavorites": { + "message": "Item removido dos favoritos" + }, "notes": { "message": "Notas" }, @@ -410,6 +419,9 @@ "launch": { "message": "Iniciar" }, + "launchWebsite": { + "message": "Iniciar site" + }, "website": { "message": "Site" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Sessão terminada" }, + "loggedOutDesc": { + "message": "Foi terminada a sessão da sua conta." + }, "loginExpired": { "message": "A sua sessão expirou." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Especifique o URL de base da sua instalação Bitwarden hospedada no local." }, + "selfHostedBaseUrlHint": { + "message": "Especifique o URL de base da sua instalação Bitwarden hospedada no local. Exemplo: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Para uma configuração avançada, pode especificar o URL de base de cada serviço de forma independente." + }, + "selfHostedEnvFormInvalid": { + "message": "Deve adicionar o URL do servidor de base ou pelo menos um ambiente personalizado." + }, "customEnvironment": { "message": "Ambiente personalizado" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Coleções" }, + "nCollections": { + "message": "$COUNT$ coleções", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoritos" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Preencher automaticamente e guardar" }, + "fillAndSave": { + "message": "Preencher e guardar" + }, "autoFillSuccessAndSavedUri": { "message": "Item preenchido automaticamente e URI guardado" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Erro no acesso ao token de atualização" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Não foi encontrado nenhum token de atualização ou chaves API. Por favor, tente terminar a sessão e voltar a iniciá-la." + }, "desktopSyncVerificationTitle": { "message": "Verificação da sincronização da aplicação para computador" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Limpe os filtros ou tente outro termo de pesquisa" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copiar informações, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copiar informações - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copiar nota, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copiar nota - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Mais opções, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Mais opções - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Ver item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Atribuir coleções" + }, + "copyEmail": { + "message": "Copiar e-mail" + }, + "copyPhone": { + "message": "Copiar telefone" + }, + "copyAddress": { + "message": "Copiar endereço" + }, "adminConsole": { "message": "Consola de administração" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Itens sem pasta" + }, + "organizationIsDeactivated": { + "message": "A organização está desativada" + }, + "contactYourOrgAdmin": { + "message": "Não é possível aceder aos itens de organizações desativadas. Contacte o proprietário da organização para obter assistência." } } diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index a9dae9496b6..4fb528a61bf 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorit" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Note" }, @@ -410,6 +419,9 @@ "launch": { "message": "Lansare" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Sait web" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Deconectat" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesiunea de autentificare a expirat." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specificați URL-ul de bază al implementări Bitwarden găzduită local." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Mediu personalizat" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Colecții" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorite" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Completare automată și salvare" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Articol completat automat și URI salvat" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Verificare sincronizare desktop" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index 438a04e9639..d6dab1dd477 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Избранный" }, + "unfavorite": { + "message": "Удалить из избранного" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Заметки" }, @@ -410,6 +419,9 @@ "launch": { "message": "Перейти" }, + "launchWebsite": { + "message": "Открыть сайт" + }, "website": { "message": "Сайт" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Вы вышли из хранилища" }, + "loggedOutDesc": { + "message": "Вы вышли из своего аккаунта." + }, "loginExpired": { "message": "Истек срок действия вашего сеанса." }, @@ -763,7 +778,7 @@ "message": "Разблокировать" }, "additionalOptions": { - "message": "Additional options" + "message": "Дополнительные настройки" }, "enableContextMenuItem": { "message": "Показать опции контекстного меню" @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Укажите URL Bitwarden на вашем сервере." }, + "selfHostedBaseUrlHint": { + "message": "Укажите базовый URL вашего локального хостинга Bitwarden. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Для продвинутой конфигурации можно указать базовый URL каждой службы отдельно." + }, + "selfHostedEnvFormInvalid": { + "message": "Вы должны добавить либо базовый URL сервера, либо хотя бы одно пользовательское окружение." + }, "customEnvironment": { "message": "Пользовательское окружение" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Коллекции" }, + "nCollections": { + "message": "Коллекций: $COUNT$", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Избранные" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Заполнить и сохранить" }, + "fillAndSave": { + "message": "Заполнить и сохранить" + }, "autoFillSuccessAndSavedUri": { "message": "URI элемента заполнен и сохранен" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Ошибка обновления токена доступа" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Не найдены токен обновления или ключи API. Пожалуйста, попробуйте выполнить выход и повторно авторизоваться." + }, "desktopSyncVerificationTitle": { "message": "Проверка синхронизации на компьютере" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Очистите фильтры или попробуйте другой поисковый запрос" }, - "copyInfo": { + "copyInfoLabel": { "message": "Скопировать информацию, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Скопировать информацию - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Скопировать заметку, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Скопировать заметку - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Больше опций, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Больше опций - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Просмотр элемента - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Назначить коллекции" + }, + "copyEmail": { + "message": "Скопировать email" + }, + "copyPhone": { + "message": "Скопировать телефон" + }, + "copyAddress": { + "message": "Скопировать адрес" + }, "adminConsole": { "message": "консоли администратора" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Элементы без папки" + }, + "organizationIsDeactivated": { + "message": "Организация деактивирована" + }, + "contactYourOrgAdmin": { + "message": "Доступ к элементам в деактивированных организациях невозможен. Обратитесь за помощью к владельцу организации." } } diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index 9fa1bb2339c..5dfeef73bb4 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "ප්‍රියතමය" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "සටහන්" }, @@ -410,6 +419,9 @@ "launch": { "message": "දියත්කරන්න" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "වියමන අඩවිය" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "ලොගින් වී" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "ඔබගේ පිවිසුම් සැසිය කල් ඉකුත් වී ඇත." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "බිට්වර්ඩන් ස්ථාපනය සත්කාරකත්වය දරනු ලබන ඔබගේ පරිශ්රයේ මූලික URL එක සඳහන් කරන්න." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "අභිරුචි පරිසරය" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "එකතුව" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "ප්රියතම දැන්වීම්" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "ස්වයංක්රීය-පිරවීම සහ සුරකින්න" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "ස්වයංක්රීය-පිරවූ අයිතමය සහ සුරකින ලද URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "හරි" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "ඩෙස්ක්ටොප් සමමුහුර්ත සත්යාපනය" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index b9d7ec78cda..2050bd87bd4 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Obľúbené" }, + "unfavorite": { + "message": "Odstrániť z obľúbených" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Poznámky" }, @@ -410,6 +419,9 @@ "launch": { "message": "Spustiť" }, + "launchWebsite": { + "message": "Otvoriť stránku" + }, "website": { "message": "Webstránka" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Odhlásený" }, + "loggedOutDesc": { + "message": "Boli ste odhlásení zo svojho účtu." + }, "loginExpired": { "message": "Vaša relácia vypršala." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Zadajte základnú URL adresu lokálne hosťovanej inštalácie Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Zadajte základnú URL adresu lokálne hosťovanej inštalácie Bitwarden. Napríklad: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Pre rozšírenú konfiguráciu môžete zadať základnú adresu URL každej služby nezávisle." + }, + "selfHostedEnvFormInvalid": { + "message": "Musíte pridať buď základnú adresu URL servera, alebo aspoň jedno vlastné prostredie." + }, "customEnvironment": { "message": "Vlastné prostredie" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Zbierky" }, + "nCollections": { + "message": "$COUNT$ zbierok", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Obľúbené" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-vyplniť a Uložiť" }, + "fillAndSave": { + "message": "Vyplniť a uložiť" + }, "autoFillSuccessAndSavedUri": { "message": "Automatické vypĺnenie a uloženie úspešné" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Chyba obnovenia prístupového tokenu" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nenašiel sa žiadny token obnovenia ani kľúče API. Skúste sa odhlásiť a znova prihlásiť." + }, "desktopSyncVerificationTitle": { "message": "Overenie synchronizácie desktopu" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Vymažte filtre alebo zmeňte vyhľadávaný výraz" }, - "copyInfo": { + "copyInfoLabel": { "message": "Skopírovať info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Skopírovať info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Skopírovať poznámku, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Skopírovať poznámku - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Ďalšie možnosti, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Ďalšie možnosti - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Zobrazit položku - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Prideliť zbierky" + }, + "copyEmail": { + "message": "Skopírovať e-mail" + }, + "copyPhone": { + "message": "Skopírovať telefón" + }, + "copyAddress": { + "message": "Skopírovať adresu" + }, "adminConsole": { "message": "Správcovská konzola" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Položky bez priečinka" + }, + "organizationIsDeactivated": { + "message": "Organizácia je vypnutá" + }, + "contactYourOrgAdmin": { + "message": "K položkám vo vypnutej organizácii nie je možné pristupovať. Požiadajte o pomoc vlastníka organizácie." } } diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 7333c0d91cc..1f2c35a4bea 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Priljubljeni" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Opombe" }, @@ -410,6 +419,9 @@ "launch": { "message": "Zaženi" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Spletna stran" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Odjavljen" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Vaša seja je potekla." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Okolje po meri" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Zbirke" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Priljubljeno" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Samodejno izpolni in shrani" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Element je bil samodejno izpolnjen in shranjen" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "V redu" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index 3d15f246499..7dad0623e12 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Омиљено" }, + "unfavorite": { + "message": "Скини омиљено" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Белешке" }, @@ -410,6 +419,9 @@ "launch": { "message": "Отвори" }, + "launchWebsite": { + "message": "Покрените веб локацију" + }, "website": { "message": "Веб сајт" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Одјављено" }, + "loggedOutDesc": { + "message": "Одјављени сте са свог налога." + }, "loginExpired": { "message": "Ваша сесија је истекла." }, @@ -763,7 +778,7 @@ "message": "Откључај" }, "additionalOptions": { - "message": "Additional options" + "message": "Додатне опције" }, "enableContextMenuItem": { "message": "Прикажи контекстни мени" @@ -803,7 +818,7 @@ "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportFrom": { - "message": "Export from" + "message": "Извоз од" }, "exportVault": { "message": "Извоз сефа" @@ -812,28 +827,28 @@ "message": "Формат датотеке" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "Овај извоз ће бити заштићен лозинком и захтеваће лозинку датотеке за дешифровање." }, "filePassword": { - "message": "File password" + "message": "Лозинка датотеке" }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "Ова лозинка ће се користити за извоз и увоз ове датотеке" }, "accountRestrictedOptionDescription": { - "message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account." + "message": "Користите кључ за шифровање вашег налога, изведен из корисничког имена и главне лозинке, да шифрујете извоз и ограничите увоз само на тренутни Bitwarden налог." }, "passwordProtectedOptionDescription": { - "message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption." + "message": "Подесите лозинку за шифровање извоза и увоз у било који Bitwarden налог користећи лозинку за дешифровање." }, "exportTypeHeading": { - "message": "Export type" + "message": "Тип извоза" }, "accountRestricted": { - "message": "Account restricted" + "message": "Налог је ограничен" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "“File password” and “Confirm file password“ do not match." + "message": "Унете лозинке се не подударају." }, "warning": { "message": "УПОЗОРЕЊЕ", @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Наведите основни УРЛ ваше локалне Bitwarden инсталације." }, + "selfHostedBaseUrlHint": { + "message": "Наведите основну УРЛ адресу вашег локалног хостовања Bitwarden-а. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "За напредну конфигурацију, можете навести основну УРЛ адресу сваке услуге независно." + }, + "selfHostedEnvFormInvalid": { + "message": "Морате додати или основни УРЛ сервера или бар једно прилагођено окружење." + }, "customEnvironment": { "message": "Прилагођено окружење" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Колекције" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Омиљени" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Аутоматско попуњавање и чување" }, + "fillAndSave": { + "message": "Попуни и сачувај" + }, "autoFillSuccessAndSavedUri": { "message": "Аутоматски попуњена ставка и сачуван УРЛ" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "У реду" }, + "errorRefreshingAccessToken": { + "message": "Грешка при освежавању токена приступа" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Није пронађен токен за освежавање или АПИ кључеви. Покушајте да се одјавите и поново пријавите." + }, "desktopSyncVerificationTitle": { "message": "Провера синхронизације Desktop-а" }, @@ -2213,10 +2255,10 @@ } }, "exportingOrganizationVaultTitle": { - "message": "Exporting organization vault" + "message": "Извоз сефа организације" }, "exportingOrganizationVaultDesc": { - "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Items in individual vaults or other organizations will not be included.", + "message": "Биће извезен само сеф организације повезан са $ORGANIZATION$. Ставке у појединачним сефовима или другим организацијама неће бити укључене.", "placeholders": { "organization": { "content": "$1", @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Обришите филтере или покушајте са другим термином" }, - "copyInfo": { + "copyInfoLabel": { "message": "Копирај информације, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Копирај информације - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Копирај Белешку, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Копирај Белешку - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Више опција, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Више опција - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Преглед ставке - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Додели колекције" + }, + "copyEmail": { + "message": "Копирај имејл" + }, + "copyPhone": { + "message": "Копирај телефон" + }, + "copyAddress": { + "message": "Копирај адресу" + }, "adminConsole": { "message": "Администраторска конзола" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Ставке без фасцикле" + }, + "organizationIsDeactivated": { + "message": "Организација је деактивирана" + }, + "contactYourOrgAdmin": { + "message": "Није могуће приступити ставкама у деактивираним организацијама. Обратите се власнику ваше организације за помоћ." } } diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index deb7fda04b3..411c1605ef8 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorit" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Anteckningar" }, @@ -410,6 +419,9 @@ "launch": { "message": "Öppna" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Webbplats" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Utloggad" }, + "loggedOutDesc": { + "message": "Du har blivit utloggad från ditt konto." + }, "loginExpired": { "message": "Din inloggningssession har upphört." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Ange bas-URL:en för din \"on-premise\"-hostade Bitwarden-installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Anpassad miljö" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Samlingar" }, + "nCollections": { + "message": "$COUNT$ samlingar", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoriter" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Fyll i automatiskt och spara" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Fyllde i objektet automatiskt och sparade URI:n" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "OK" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Verifiering av synkronisering med skrivbordsprogrammet" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { - "message": "Kopiera information, $ITEMNAME$", + "copyInfoLabel": { + "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "Fler alternativ, $ITEMNAME$", + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Tilldela samlingar" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Kopiera telefon" + }, + "copyAddress": { + "message": "Kopiera adress" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Objekt utan mapp" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index c3f03166b25..e4b83601fe4 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Favorite" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Notes" }, @@ -410,6 +419,9 @@ "launch": { "message": "Launch" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Website" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Collections" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favorites" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Auto-fill and save" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Item auto-filled and URI saved" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index f6fc2f4c1de..27988854f58 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "รายการโปรด" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "โน้ต" }, @@ -410,6 +419,9 @@ "launch": { "message": "เริ่ม" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "เว็บไซต์" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "ออกจากระบบ" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "เซสชันของคุณหมดอายุแล้ว" }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom Environment" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "คอลเลกชัน" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "รายการโปรด" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "กรอกอัตโนมัติและบันทึก" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "เติมรายการอัตโนมัติและบันทึก URI แล้ว" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "ตกลง" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Desktop sync verification" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 4bee651cdbe..56c3beb5105 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -226,7 +226,7 @@ "message": "Bitwarden Authenticator allows you to store authenticator keys and generate TOTP codes for 2-step verification flows. Learn more on the bitwarden.com website" }, "bitwardenSecretsManager": { - "message": "Bitwarden Secrets Manager" + "message": "Bitwarden Sır Yöneticisi" }, "continueToSecretsManagerPageDesc": { "message": "Securely store, manage, and share developer secrets with Bitwarden Secrets Manager. Learn more on the bitwarden.com website." @@ -238,7 +238,7 @@ "message": "Create smooth and secure login experiences free from traditional passwords with Passwordless.dev. Learn more on the bitwarden.com website." }, "freeBitwardenFamilies": { - "message": "Free Bitwarden Families" + "message": "Ücretsiz Bitwarden Aile" }, "freeBitwardenFamiliesPageDesc": { "message": "You are eligible for Free Bitwarden Families. Redeem this offer today in the web app." @@ -389,6 +389,15 @@ "favorite": { "message": "Favori" }, + "unfavorite": { + "message": "Favorilerden kaldır" + }, + "itemAddedToFavorites": { + "message": "Kayıt favorilere eklendi" + }, + "itemRemovedFromFavorites": { + "message": "Kayıt favorilerden silindi" + }, "notes": { "message": "Notlar" }, @@ -410,6 +419,9 @@ "launch": { "message": "Aç" }, + "launchWebsite": { + "message": "Web sitesini aç" + }, "website": { "message": "Web sitesi" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Çıkış yapıldı" }, + "loggedOutDesc": { + "message": "Hesabınızdan çıkış yapıldı." + }, "loginExpired": { "message": "Oturumunuz zaman aşımına uğradı." }, @@ -803,7 +818,7 @@ "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportFrom": { - "message": "Export from" + "message": "Dışa aktarılacak konum" }, "exportVault": { "message": "Kasayı dışa aktar" @@ -812,7 +827,7 @@ "message": "Dosya biçimi" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "Dışarı aktarılan bu dosya parola korumalı olacak ve dosyanın çözülmesi için parolayı girmeniz gerekecek." }, "filePassword": { "message": "Dosya parolası" @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Kurum içinde barındırılan Bitwarden kurulumunuzun taban URL'sini belirtin." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Özel ortam" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Koleksiyonlar" }, + "nCollections": { + "message": "$COUNT$ koleksiyon", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Favoriler" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Otomatik doldur ve kaydet" }, + "fillAndSave": { + "message": "Doldur ve kaydet" + }, "autoFillSuccessAndSavedUri": { "message": "Kayıt otomatik dolduruldu ve URI kaydedildi" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Tamam" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Masaüstü eşitleme doğrulaması" }, @@ -2587,19 +2629,19 @@ "message": "Kuruluş SSO tanımlayıcısı gereklidir." }, "creatingAccountOn": { - "message": "Creating account on" + "message": "Hesap oluşturuluyor:" }, "checkYourEmail": { "message": "E-postanızı kontrol edin" }, "followTheLinkInTheEmailSentTo": { - "message": "Follow the link in the email sent to" + "message": "Hesabınızı oluşturmaya devam etmek için" }, "andContinueCreatingYourAccount": { - "message": "and continue creating your account." + "message": "adresine gönderdiğimiz e-postadaki bağlantıya tıklayın." }, "noEmail": { - "message": "No email?" + "message": "E-posta gelmedi mi?" }, "goBack": { "message": "Geri dönüp" @@ -3252,7 +3294,7 @@ "message": "Önerileri otomatik doldur" }, "autofillSuggestionsTip": { - "message": "Save a login item for this site to auto-fill" + "message": "Otomatik doldurma için bu siteye ait bir hesap kaydededin" }, "yourVaultIsEmpty": { "message": "Kasanız boş" @@ -3261,10 +3303,10 @@ "message": "Aramanızla eşleşen kayıt yok" }, "clearFiltersOrTryAnother": { - "message": "Clear filters or try another search term" + "message": "Filtreleri temizleyin veya başka bir arama yapmayı deneyin" }, - "copyInfo": { - "message": "Copy info, $ITEMNAME$", + "copyInfoLabel": { + "message": "Bilgileri kopyala, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "More options, $ITEMNAME$", + "copyInfoTitle": { + "message": "Bilgileri kopyala - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Notu kopyala, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Notu kopyala - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "Diğer seçenekler, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Diğer seçenekler - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Kaydı görüntüle - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Koleksiyon ata" + }, + "copyEmail": { + "message": "E-postayı kopyala" + }, + "copyPhone": { + "message": "Telefonu kopyala" + }, + "copyAddress": { + "message": "Adresi kopyala" + }, "adminConsole": { "message": "Yönetici Konsolu" }, @@ -3302,7 +3406,7 @@ "message": "Hedef klasör atama hatası." }, "viewItemsIn": { - "message": "View items in $NAME$", + "message": "$NAME$ içindeki kayıtları görüntüle", "description": "Button to view the contents of a folder or collection", "placeholders": { "name": { @@ -3312,7 +3416,7 @@ } }, "backTo": { - "message": "Back to $NAME$", + "message": "$NAME$ klasörüne dön", "description": "Navigate back to a previous folder or collection", "placeholders": { "name": { @@ -3325,7 +3429,7 @@ "message": "Yeni" }, "removeItem": { - "message": "Remove $NAME$", + "message": "$NAME$ klasörünü kaldır", "description": "Remove a selected option, such as a folder or collection", "placeholders": { "name": { @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Klasörü olmayan kayıtlar" + }, + "organizationIsDeactivated": { + "message": "Kuruluş pasifleştirilmiş" + }, + "contactYourOrgAdmin": { + "message": "Pasif kuruluşlardaki kayıtlara erişilemez. Destek almak için kuruluş sahibinizle iletişime geçin." } } diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index a97d9626a4f..845774e81a6 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Обране" }, + "unfavorite": { + "message": "Вилучити з обраного" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Нотатки" }, @@ -410,6 +419,9 @@ "launch": { "message": "Перейти" }, + "launchWebsite": { + "message": "Відкрити вебсайт" + }, "website": { "message": "Вебсайт" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Ви вийшли" }, + "loggedOutDesc": { + "message": "Ви вийшли з облікового запису." + }, "loginExpired": { "message": "Тривалість вашого сеансу завершилась." }, @@ -1105,7 +1120,16 @@ "message": "Середовище власного хостингу" }, "selfHostedEnvironmentFooter": { - "message": "Вкажіть основну URL-адресу Bitwarden, встановленого на локальному хостингу." + "message": "Вкажіть основну URL-адресу локально розміщеного встановлення Bitwarden." + }, + "selfHostedBaseUrlHint": { + "message": "Вкажіть основну URL-адресу вашого локально розміщеного встановлення Bitwarden. Зразок: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Для розширеної конфігурації ви можете вказати основну URL-адресу окремо для кожної служби." + }, + "selfHostedEnvFormInvalid": { + "message": "Необхідно додати URL-адресу основного сервера, або принаймні одне користувацьке середовище." }, "customEnvironment": { "message": "Власне середовище" @@ -1419,6 +1443,15 @@ "collections": { "message": "Збірки" }, + "nCollections": { + "message": "$COUNT$ збірок", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Обране" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Заповнити і зберегти" }, + "fillAndSave": { + "message": "Заповнити й зберегти" + }, "autoFillSuccessAndSavedUri": { "message": "Запис заповнено і збережено" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Помилка оновлення токена доступу" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Не знайдено токен оновлення або ключі API. Спробуйте вийти, а потім увійти знову." + }, "desktopSyncVerificationTitle": { "message": "Перевірка синхронізації на комп'ютері" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Скиньте фільтри або спробуйте іншу умову пошуку" }, - "copyInfo": { + "copyInfoLabel": { "message": "Копіювати інформацію, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Копіювати інформацію – $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Копіювати нотатку, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Копіювати нотатку – $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "Інші можливості, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "Інші можливості – $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "Переглянути запис – $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Призначити збірки" + }, + "copyEmail": { + "message": "Копіювати е-пошту" + }, + "copyPhone": { + "message": "Копіювати телефон" + }, + "copyAddress": { + "message": "Копіювати адресу" + }, "adminConsole": { "message": "консолі адміністратора," }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Елементи без теки" + }, + "organizationIsDeactivated": { + "message": "Організацію деактивовано" + }, + "contactYourOrgAdmin": { + "message": "Елементи в деактивованих організаціях недоступні. Зверніться до власника вашої організації для отримання допомоги." } } diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index c8469e97dc6..bb19edc420f 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "Yêu thích" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "Ghi chú" }, @@ -410,6 +419,9 @@ "launch": { "message": "Khởi chạy" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "Trang web" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "Đã đăng xuất" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Phiên đăng nhập của bạn đã hết hạn." }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "Chỉ định liên kết cơ bản của cài đặt bitwarden tại chỗ của bạn." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Môi trường tùy chỉnh" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "Bộ sưu tập" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "Yêu thích" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "Tự động điền và Lưu" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "Đã tự động điền mục và lưu URI" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "Ok" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "Xác minh đồng bộ máy tính" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Bảng điều khiển dành cho quản trị viên" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 609275567b8..4232403aa32 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "收藏" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "备注" }, @@ -410,6 +419,9 @@ "launch": { "message": "前往" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "网站" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "已注销" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "您的登录会话已过期。" }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "指定您本地托管的 Bitwarden 安装的基础 URL。" }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "自定义环境" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "集合" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "收藏夹" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "自动填充并保存" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "项目已自动填充且 URI 已保存" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "确定" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "桌面同步验证" }, @@ -3263,8 +3305,8 @@ "clearFiltersOrTryAnother": { "message": "清除筛选器或尝试另一个搜索词" }, - "copyInfo": { - "message": "复制信息,$ITEMNAME$", + "copyInfoLabel": { + "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -3273,8 +3315,38 @@ } } }, - "moreOptions": { - "message": "更多选项,$ITEMNAME$", + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "管理控制台" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "组织已停用" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 79d8b51382e..7d00a68d88b 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -389,6 +389,15 @@ "favorite": { "message": "我的最愛" }, + "unfavorite": { + "message": "Unfavorite" + }, + "itemAddedToFavorites": { + "message": "Item added to favorites" + }, + "itemRemovedFromFavorites": { + "message": "Item removed from favorites" + }, "notes": { "message": "備註" }, @@ -410,6 +419,9 @@ "launch": { "message": "前往" }, + "launchWebsite": { + "message": "Launch website" + }, "website": { "message": "網站" }, @@ -599,6 +611,9 @@ "loggedOut": { "message": "已登出" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "您的登入階段已過期。" }, @@ -1107,6 +1122,15 @@ "selfHostedEnvironmentFooter": { "message": "指定您內部部署的 Bitwarden 安裝之基礎 URL。" }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "自訂環境" }, @@ -1419,6 +1443,15 @@ "collections": { "message": "集合" }, + "nCollections": { + "message": "$COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, "favorites": { "message": "我的最愛" }, @@ -1648,6 +1681,9 @@ "autoFillAndSave": { "message": "自動填入並儲存" }, + "fillAndSave": { + "message": "Fill and save" + }, "autoFillSuccessAndSavedUri": { "message": "項目已自動填入並且 URL 已儲存" }, @@ -1744,6 +1780,12 @@ "ok": { "message": "確定" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "desktopSyncVerificationTitle": { "message": "桌面同步驗證" }, @@ -3263,7 +3305,7 @@ "clearFiltersOrTryAnother": { "message": "Clear filters or try another search term" }, - "copyInfo": { + "copyInfoLabel": { "message": "Copy info, $ITEMNAME$", "description": "Aria label for a button that opens a menu with options to copy information from an item.", "placeholders": { @@ -3273,7 +3315,37 @@ } } }, - "moreOptions": { + "copyInfoTitle": { + "message": "Copy info - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteLabel": { + "message": "Copy Note, $ITEMNAME$", + "description": "Aria label for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "copyNoteTitle": { + "message": "Copy Note - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { "message": "More options, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { @@ -3283,6 +3355,38 @@ } } }, + "moreOptionsTitle": { + "message": "More options - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "View item - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "assignCollections": { + "message": "Assign collections" + }, + "copyEmail": { + "message": "Copy email" + }, + "copyPhone": { + "message": "Copy phone" + }, + "copyAddress": { + "message": "Copy address" + }, "adminConsole": { "message": "Admin Console" }, @@ -3333,5 +3437,14 @@ "example": "Work" } } + }, + "itemsWithNoFolder": { + "message": "Items with no folder" + }, + "organizationIsDeactivated": { + "message": "Organization is deactivated" + }, + "contactYourOrgAdmin": { + "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." } } diff --git a/apps/browser/src/platform/popup/layout/popup-page.component.html b/apps/browser/src/platform/popup/layout/popup-page.component.html index ece6be4c63e..b3dcd626ae3 100644 --- a/apps/browser/src/platform/popup/layout/popup-page.component.html +++ b/apps/browser/src/platform/popup/layout/popup-page.component.html @@ -1,6 +1,6 @@ -
-
+
+
diff --git a/apps/browser/src/vault/popup/components/vault-v2/autofill-vault-list-items/autofill-vault-list-items.component.html b/apps/browser/src/vault/popup/components/vault-v2/autofill-vault-list-items/autofill-vault-list-items.component.html index e52018ab27f..52ae387e8b9 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/autofill-vault-list-items/autofill-vault-list-items.component.html +++ b/apps/browser/src/vault/popup/components/vault-v2/autofill-vault-list-items/autofill-vault-list-items.component.html @@ -4,25 +4,6 @@ [title]="'autofillSuggestions' | i18n" [showRefresh]="showRefresh" (onRefresh)="refreshCurrentTab()" + [description]="(showEmptyAutofillTip$ | async) ? ('autofillSuggestionsTip' | i18n) : null" showAutofillButton > - - - -

- {{ "autofillSuggestions" | i18n }} -

- -
- {{ - "autofillSuggestionsTip" | i18n - }} -
-
diff --git a/apps/browser/src/vault/popup/components/vault-v2/autofill-vault-list-items/autofill-vault-list-items.component.ts b/apps/browser/src/vault/popup/components/vault-v2/autofill-vault-list-items/autofill-vault-list-items.component.ts index 1b9876759f0..eb8737d5139 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/autofill-vault-list-items/autofill-vault-list-items.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/autofill-vault-list-items/autofill-vault-list-items.component.ts @@ -3,6 +3,7 @@ import { Component } from "@angular/core"; import { combineLatest, map, Observable } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { CipherType } from "@bitwarden/common/vault/enums"; import { IconButtonModule, SectionComponent, @@ -45,7 +46,7 @@ export class AutofillVaultListItemsComponent { /** * Observable that determines whether the empty autofill tip should be shown. - * The tip is shown when there are no ciphers to autofill, no filter is applied, and autofill is allowed in + * The tip is shown when there are no login ciphers to autofill, no filter is applied, and autofill is allowed in * the current context (e.g. not in a popout). * @protected */ @@ -54,7 +55,10 @@ export class AutofillVaultListItemsComponent { this.autofillCiphers$, this.vaultPopupItemsService.autofillAllowed$, ]).pipe( - map(([hasFilter, ciphers, canAutoFill]) => !hasFilter && canAutoFill && ciphers.length === 0), + map( + ([hasFilter, ciphers, canAutoFill]) => + !hasFilter && canAutoFill && ciphers.filter((c) => c.type == CipherType.Login).length === 0, + ), ); constructor(private vaultPopupItemsService: VaultPopupItemsService) { diff --git a/apps/browser/src/vault/popup/components/vault-v2/item-more-options/item-more-options.component.ts b/apps/browser/src/vault/popup/components/vault-v2/item-more-options/item-more-options.component.ts index 9834dc553ec..ac3acdcc8fb 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/item-more-options/item-more-options.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/item-more-options/item-more-options.component.ts @@ -3,10 +3,17 @@ import { booleanAttribute, Component, Input } from "@angular/core"; import { Router, RouterModule } from "@angular/router"; import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherRepromptType, CipherType } from "@bitwarden/common/vault/enums"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; -import { DialogService, IconButtonModule, ItemModule, MenuModule } from "@bitwarden/components"; +import { + DialogService, + IconButtonModule, + ItemModule, + MenuModule, + ToastService, +} from "@bitwarden/components"; import { PasswordRepromptService } from "@bitwarden/vault"; import { BrowserApi } from "../../../../../platform/browser/browser-api"; @@ -38,8 +45,10 @@ export class ItemMoreOptionsComponent { private cipherService: CipherService, private vaultPopupItemsService: VaultPopupItemsService, private passwordRepromptService: PasswordRepromptService, + private toastService: ToastService, private dialogService: DialogService, private router: Router, + private i18nService: I18nService, ) {} get canEdit() { @@ -85,6 +94,13 @@ export class ItemMoreOptionsComponent { this.cipher.favorite = !this.cipher.favorite; const encryptedCipher = await this.cipherService.encrypt(this.cipher); await this.cipherService.updateWithServer(encryptedCipher); + this.toastService.showToast({ + variant: "success", + title: null, + message: this.i18nService.t( + this.cipher.favorite ? "itemAddedToFavorites" : "itemRemovedFromFavorites", + ), + }); } /** diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-list-filters/vault-list-filters.component.html b/apps/browser/src/vault/popup/components/vault-v2/vault-list-filters/vault-list-filters.component.html index 6136db59f46..afb7dd40066 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-list-filters/vault-list-filters.component.html +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-list-filters/vault-list-filters.component.html @@ -14,7 +14,7 @@ *ngIf="collections.length" formControlName="collection" placeholderIcon="bwi-collection" - [placeholderText]="'collections' | i18n" + [placeholderText]="'collection' | i18n" [options]="collections" > @@ -32,7 +32,7 @@ diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-list-items-container/vault-list-items-container.component.html b/apps/browser/src/vault/popup/components/vault-v2/vault-list-items-container/vault-list-items-container.component.html index c2c345fd757..7b8fdf7a8e5 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-list-items-container/vault-list-items-container.component.html +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-list-items-container/vault-list-items-container.component.html @@ -1,4 +1,4 @@ - +

{{ title }} @@ -13,6 +13,9 @@ > {{ ciphers.length }} +
+ {{ description }} +
-
+
{{ "yourVaultIsEmpty" | i18n }} {{ "autofillSuggestionsTip" | i18n }} @@ -21,13 +24,12 @@
- + -
@@ -37,7 +39,7 @@
@@ -46,7 +48,7 @@
- + { + switch (true) { + case emptyVault: + this.vaultState = VaultState.Empty; + break; + case deactivatedOrg: + // The deactivated org state takes precedence over the no results state + this.vaultState = VaultState.DeactivatedOrg; + break; + case noResults: + this.vaultState = VaultState.NoResults; + break; + default: + this.vaultState = null; + } + }); + } ngOnInit(): void {} diff --git a/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.spec.ts b/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.spec.ts index 42626b52918..907ff9af8d6 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.spec.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.spec.ts @@ -4,6 +4,7 @@ import { BehaviorSubject, skipWhile } from "rxjs"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; +import { ProductType } from "@bitwarden/common/enums"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service"; @@ -18,7 +19,7 @@ import { MY_VAULT_ID, VaultPopupListFiltersService } from "./vault-popup-list-fi describe("VaultPopupListFiltersService", () => { let service: VaultPopupListFiltersService; - const memberOrganizations$ = new BehaviorSubject<{ name: string; id: string }[]>([]); + const memberOrganizations$ = new BehaviorSubject([]); const folderViews$ = new BehaviorSubject([]); const cipherViews$ = new BehaviorSubject({}); const decryptedCollections$ = new BehaviorSubject([]); @@ -100,7 +101,8 @@ describe("VaultPopupListFiltersService", () => { }); it('adds "myVault" to the list of organizations when there are other organizations', (done) => { - memberOrganizations$.next([{ name: "bobby's org", id: "1234-3323-23223" }]); + const orgs = [{ name: "bobby's org", id: "1234-3323-23223" }] as Organization[]; + memberOrganizations$.next(orgs); service.organizations$.subscribe((organizations) => { expect(organizations.map((o) => o.label)).toEqual(["myVault", "bobby's org"]); @@ -109,10 +111,11 @@ describe("VaultPopupListFiltersService", () => { }); it("sorts organizations by name", (done) => { - memberOrganizations$.next([ + const orgs = [ { name: "bobby's org", id: "1234-3323-23223" }, { name: "alice's org", id: "2223-4343-99888" }, - ]); + ] as Organization[]; + memberOrganizations$.next(orgs); service.organizations$.subscribe((organizations) => { expect(organizations.map((o) => o.label)).toEqual([ @@ -123,6 +126,65 @@ describe("VaultPopupListFiltersService", () => { done(); }); }); + + describe("icons", () => { + it("sets family icon for family organizations", (done) => { + const orgs = [ + { + name: "family org", + id: "1234-3323-23223", + enabled: true, + planProductType: ProductType.Families, + }, + ] as Organization[]; + + memberOrganizations$.next(orgs); + + service.organizations$.subscribe((organizations) => { + expect(organizations.map((o) => o.icon)).toEqual(["bwi-user", "bwi-family"]); + done(); + }); + }); + + it("sets family icon for free organizations", (done) => { + const orgs = [ + { + name: "free org", + id: "1234-3323-23223", + enabled: true, + planProductType: ProductType.Free, + }, + ] as Organization[]; + + memberOrganizations$.next(orgs); + + service.organizations$.subscribe((organizations) => { + expect(organizations.map((o) => o.icon)).toEqual(["bwi-user", "bwi-family"]); + done(); + }); + }); + + it("sets warning icon for disabled organizations", (done) => { + const orgs = [ + { + name: "free org", + id: "1234-3323-23223", + enabled: false, + planProductType: ProductType.Free, + }, + ] as Organization[]; + + memberOrganizations$.next(orgs); + + service.organizations$.subscribe((organizations) => { + expect(organizations.map((o) => o.icon)).toEqual([ + "bwi-user", + "bwi-exclamation-triangle tw-text-danger", + ]); + done(); + }); + }); + }); }); describe("collections$", () => { diff --git a/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.ts b/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.ts index bc42e7cb0a5..6406e43446d 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.ts @@ -139,22 +139,22 @@ export class VaultPopupListFiltersService { readonly cipherTypes: ChipSelectOption[] = [ { value: CipherType.Login, - label: this.i18nService.t("logins"), + label: this.i18nService.t("typeLogin"), icon: "bwi-globe", }, { value: CipherType.Card, - label: this.i18nService.t("cards"), + label: this.i18nService.t("typeCard"), icon: "bwi-credit-card", }, { value: CipherType.Identity, - label: this.i18nService.t("identities"), + label: this.i18nService.t("typeIdentity"), icon: "bwi-id-card", }, { value: CipherType.SecureNote, - label: this.i18nService.t("notes"), + label: this.i18nService.t("note"), icon: "bwi-sticky-note", }, ]; @@ -188,8 +188,11 @@ export class VaultPopupListFiltersService { if (!org.enabled) { // Show a warning icon if the organization is deactivated icon = "bwi-exclamation-triangle tw-text-danger"; - } else if (org.planProductType === ProductType.Families) { - // Show a family icon if the organization is a family org + } else if ( + org.planProductType === ProductType.Families || + org.planProductType === ProductType.Free + ) { + // Show a family icon if the organization is a family or free org icon = "bwi-family"; } diff --git a/apps/browser/store/locales/ja/copy.resx b/apps/browser/store/locales/ja/copy.resx index 910c8d7cab5..3ecba765d01 100644 --- a/apps/browser/store/locales/ja/copy.resx +++ b/apps/browser/store/locales/ja/copy.resx @@ -124,48 +124,47 @@ 自宅、職場、または外出先でも、Bitwarden はすべてのパスワード、パスキー、機密情報を簡単に保護します。 - Recognized as the best password manager by PCMag, WIRED, The Verge, CNET, G2, and more! + PCMag、WIRED、The Verge、CNET、G2 などから最高のパスワードマネージャーとして認められています! -SECURE YOUR DIGITAL LIFE -Secure your digital life and protect against data breaches by generating and saving unique, strong passwords for every account. Maintain everything in an end-to-end encrypted password vault that only you can access. +デジタルライフを守る +データ漏洩を防ぐために、各アカウントに対してユニークで強力なパスワードを生成し保存することで、デジタルライフを守りましょう。エンドツーエンドで暗号化されたパスワード保管庫にすべてを保存し、あなただけがアクセスできます。 -ACCESS YOUR DATA, ANYWHERE, ANYTIME, ON ANY DEVICE -Easily manage, store, secure, and share unlimited passwords across unlimited devices without restrictions. +どこでも、いつでも、どのデバイスでもデータにアクセス +デバイスやパスワード数の制限は一切なく、簡単に管理、保存、保護、共有できます。 -EVERYONE SHOULD HAVE THE TOOLS TO STAY SAFE ONLINE -Utilize Bitwarden for free with no ads or selling data. Bitwarden believes everyone should have the ability to stay safe online. Premium plans offer access to advanced features. +誰もがオンラインで安全を保つためのツールを持つべき +Bitwarden は広告やデータ販売なしに無料で利用できます。Bitwarden は、誰もがオンラインで安全を保つ能力を持つべきだと信じています。プレミアムプランでは高度な機能にアクセスできます。 -EMPOWER YOUR TEAMS WITH BITWARDEN -Plans for Teams and Enterprise come with professional business features. Some examples include SSO integration, self-hosting, directory integration and SCIM provisioning, global policies, API access, event logs, and more. +チームを Bitwarden で強化 +チームおよびエンタープライズ向けのプランには、SSO 統合、セルフホスティング、ディレクトリ統合と SCIM プロビジョニング、グローバルポリシー、API アクセス、イベントログなどのプロフェッショナルなビジネス機能が含まれます。 -Use Bitwarden to secure your workforce and share sensitive information with colleagues. +Bitwardenを使用して、従業員を保護し、同僚と機密情報を共有しましょう。 +Bitwardenを選ぶ理由 -More reasons to choose Bitwarden: +世界クラスの暗号化 +パスワードは、先進的なエンドツーエンド暗号化(AES-256ビット、ソルト付きハッシュタグ、PBKDF2 SHA-256)で保護され、データは安全かつプライベートに保たれます。 -World-Class Encryption -Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private. +第三者監査 +Bitwarden は、著名なセキュリティ企業による包括的な第三者セキュリティ監査を定期的に実施しています。これらの年次監査には、ソースコードの評価や Bitwarden の IP、サーバー、ウェブアプリケーション全体にわたるペネトレーションテストが含まれます。 -3rd-party Audits -Bitwarden regularly conducts comprehensive third-party security audits with notable security firms. These annual audits include source code assessments and penetration testing across Bitwarden IPs, servers, and web applications. - -Advanced 2FA -Secure your login with a third-party authenticator, emailed codes, or FIDO2 WebAuthn credentials such as a hardware security key or passkey. +高度な2要素認証 +サードパーティーの認証アプリ、メールコード、またはハードウェアセキュリティキーやパスキーなどの FIDO2 WebAuthn 資格情報でログインを保護します。 Bitwarden Send -Transmit data directly to others while maintaining end-to-end encrypted security and limiting exposure. +エンドツーエンドで暗号化されたセキュリティを維持しながら、他者にデータを直接送信し、データ漏洩を制限します。 -Built-in Generator -Create long, complex, and distinct passwords and unique usernames for every site you visit. Integrate with email alias providers for additional privacy. +内蔵ジェネレーター +訪問するすべてのサイトに対して、長く複雑でユニークなパスワードとユーザー名を作成できます。追加のプライバシーのためにメールエイリアスプロバイダーと統合することもできます。 -Global Translations -Bitwarden translations exist for more than 60 languages, translated by the global community though Crowdin. +グローバル翻訳 +Bitwarden の翻訳は、Crowdin を通じてグローバルコミュニティによって翻訳され、60以上の言語に対応しています。 -Cross-Platform Applications -Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more. +クロスプラットフォームアプリケーション +任意のブラウザ、モバイルデバイス、デスクトップ OS などから、Bitwarden 保管庫内の機密データを保護し、共有できます。 -Bitwarden secures more than just passwords -End-to-end encrypted credential management solutions from Bitwarden empower organizations to secure everything, including developer secrets and passkey experiences. Visit Bitwarden.com to learn more about Bitwarden Secrets Manager and Bitwarden Passwordless.dev! +Bitwarden はパスワードだけを保護するわけではありません +Bitwarden のエンドツーエンド暗号化された資格情報管理ソリューションは、組織が開発者のシークレットやパスキー体験を含むすべてを保護することを支援します。Bitwarden シークレットマネージャーや Bitwarden Passwordless.dev について詳しくは、Bitwarden.com をご覧ください。 diff --git a/apps/cli/src/program.ts b/apps/cli/src/program.ts index e0311beb247..597b388a05b 100644 --- a/apps/cli/src/program.ts +++ b/apps/cli/src/program.ts @@ -83,6 +83,11 @@ export class Program extends BaseProgram { }); program.on("--help", () => { + writeLn( + chalk.yellowBright( + "\n Tip: Managing and retrieving secrets for dev environments is easier with Bitwarden Secrets Manager. Learn more under https://bitwarden.com/products/secrets-manager/", + ), + ); writeLn("\n Examples:"); writeLn(""); writeLn(" bw login"); diff --git a/apps/desktop/src/app/accounts/settings.component.ts b/apps/desktop/src/app/accounts/settings.component.ts index 6984e2da890..6b6a18958f8 100644 --- a/apps/desktop/src/app/accounts/settings.component.ts +++ b/apps/desktop/src/app/accounts/settings.component.ts @@ -278,7 +278,7 @@ export class SettingsComponent implements OnInit { approveLoginRequests: (await this.authRequestService.getAcceptAuthRequests(this.currentUserId)) ?? false, clearClipboard: await firstValueFrom(this.autofillSettingsService.clearClipboardDelay$), - minimizeOnCopyToClipboard: await this.stateService.getMinimizeOnCopyToClipboard(), + minimizeOnCopyToClipboard: await firstValueFrom(this.desktopSettingsService.minimizeOnCopy$), enableFavicons: await firstValueFrom(this.domainSettingsService.showFavicons$), enableTray: await firstValueFrom(this.desktopSettingsService.trayEnabled$), enableMinToTray: await firstValueFrom(this.desktopSettingsService.minimizeToTray$), @@ -286,9 +286,12 @@ export class SettingsComponent implements OnInit { startToTray: await firstValueFrom(this.desktopSettingsService.startToTray$), openAtLogin: await firstValueFrom(this.desktopSettingsService.openAtLogin$), alwaysShowDock: await firstValueFrom(this.desktopSettingsService.alwaysShowDock$), - enableBrowserIntegration: await this.stateService.getEnableBrowserIntegration(), - enableBrowserIntegrationFingerprint: - await this.stateService.getEnableBrowserIntegrationFingerprint(), + enableBrowserIntegration: await firstValueFrom( + this.desktopSettingsService.browserIntegrationEnabled$, + ), + enableBrowserIntegrationFingerprint: await firstValueFrom( + this.desktopSettingsService.browserIntegrationFingerprintEnabled$, + ), enableDuckDuckGoBrowserIntegration: await firstValueFrom( this.desktopAutofillSettingsService.enableDuckDuckGoBrowserIntegration$, ), @@ -598,7 +601,10 @@ export class SettingsComponent implements OnInit { } async saveMinOnCopyToClipboard() { - await this.stateService.setMinimizeOnCopyToClipboard(this.form.value.minimizeOnCopyToClipboard); + await this.desktopSettingsService.setMinimizeOnCopy( + this.form.value.minimizeOnCopyToClipboard, + this.currentUserId, + ); } async saveClearClipboard() { @@ -656,7 +662,9 @@ export class SettingsComponent implements OnInit { return; } - await this.stateService.setEnableBrowserIntegration(this.form.value.enableBrowserIntegration); + await this.desktopSettingsService.setBrowserIntegrationEnabled( + this.form.value.enableBrowserIntegration, + ); const errorResult = await this.nativeMessagingManifestService.generate( this.form.value.enableBrowserIntegration, @@ -703,7 +711,7 @@ export class SettingsComponent implements OnInit { } async saveBrowserIntegrationFingerprint() { - await this.stateService.setEnableBrowserIntegrationFingerprint( + await this.desktopSettingsService.setBrowserIntegrationFingerprintEnabled( this.form.value.enableBrowserIntegrationFingerprint, ); } diff --git a/apps/desktop/src/locales/af/messages.json b/apps/desktop/src/locales/af/messages.json index 27d0977a2e1..1c835869d63 100644 --- a/apps/desktop/src/locales/af/messages.json +++ b/apps/desktop/src/locales/af/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Spesifiseer die basisbronadres van u selfgehuisveste Bitwarden-installasie." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Pasgemaakte omgewing" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Uitgeteken" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "U aantekensessie het verstryk." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Belangrik:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Jou hoofwagwoord kan nie herkry word as jy dit vergeet nie!" }, diff --git a/apps/desktop/src/locales/ar/messages.json b/apps/desktop/src/locales/ar/messages.json index a800840dd4a..4f71977603a 100644 --- a/apps/desktop/src/locales/ar/messages.json +++ b/apps/desktop/src/locales/ar/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "حدد عنوان URL الأساسي لتثبيت Bitwarden المستضاف محليًا." }, + "selfHostedBaseUrlHint": { + "message": "حدد عنوان URL الأساسي لمحالّك التي استضافت تثبيت Bitwarden على سبيل المثال: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "للتكوين المتقدم، يمكنك تحديد عنوان URL الأساسي لكل خدمة بشكل مستقل." + }, + "selfHostedEnvFormInvalid": { + "message": "يجب عليك إضافة رابط الخادم الأساسي أو على الأقل بيئة مخصصة." + }, "customEnvironment": { "message": "بيئة مخصصة" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "الخروج" }, + "loggedOutDesc": { + "message": "لقد خرجتَ من حسابك." + }, "loginExpired": { "message": "انتهت صلاحية جلسة الدخول." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "خطأ في تحديث رمز الوصول" + }, + "errorRefreshingAccessTokenDesc": { + "message": "لم يُعثر على رمز تحديث أو مفاتيح API. الرجاء محاولة تسجيل الخروج وتسجيل الدخول مرة أخرى." + }, "help": { "message": "المساعدة" }, @@ -1300,7 +1318,7 @@ "description": "ex. Date this password was updated" }, "exportFrom": { - "message": "Export from" + "message": "تصدير من" }, "exportVault": { "message": "تصدير الخزنة" @@ -1309,31 +1327,31 @@ "message": "صيغة الملف" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "سيكون تصدير الملف هذا محميًا بكلمة مرور وسيتطلب كلمة مرور الملف لفك تشفيره." }, "filePassword": { - "message": "File password" + "message": "كلمة مرور الملف" }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "ستُستخدم كلمة المرور هذه لتصدير واستيراد هذا الملف" }, "accountRestrictedOptionDescription": { - "message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account." + "message": "استخدم مفتاح تشفير حسابك، مشتقة من اسم المستخدم في حسابك وكلمة المرور الرئيسية، لتشفير التصدير وتقييد الاستيراد إلى حساب Bitwarden الحالي فقط." }, "passwordProtected": { - "message": "Password protected" + "message": "كلمة المرور محمية" }, "passwordProtectedOptionDescription": { - "message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption." + "message": "تعيين كلمة مرور للملف لتشفير التصدير واستيراده إلى أي حساب Bitwarden باستخدام كلمة المرور لفك التشفير." }, "exportTypeHeading": { - "message": "Export type" + "message": "نوع التصدير" }, "accountRestricted": { - "message": "Account restricted" + "message": "الحساب مقيد" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "“File password” and “Confirm file password“ do not match." + "message": "\"كلمة مرور الملف\" و \"تأكيد كلمة مرور الملف\" غير متطابقين." }, "hCaptchaUrl": { "message": "رابط hCaptcha", @@ -2081,7 +2099,7 @@ "message": "تبديل الحساب" }, "alreadyHaveAccount": { - "message": "Already have an account?" + "message": "لديك حساب بالفعل؟" }, "options": { "message": "الخيارات" @@ -2102,10 +2120,10 @@ } }, "exportingOrganizationVaultTitle": { - "message": "Exporting organization vault" + "message": "تصدير خزنة المؤسسة" }, "exportingOrganizationVaultDesc": { - "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Items in individual vaults or other organizations will not be included.", + "message": "فقط مستودع المؤسسة المرتبط بـ $ORGANIZATION$ سيتم تصديره. لن يتم إدراج العناصر في المستودعات الفردية أو المنظمات الأخرى.", "placeholders": { "organization": { "content": "$1", @@ -2178,7 +2196,7 @@ "message": "إنشاء بريد إلكتروني مستعار مع خدمة إعادة توجيه خارجية." }, "forwarderError": { - "message": "$SERVICENAME$ error: $ERRORMESSAGE$", + "message": "$SERVICENAME$ خطأ: $ERRORMESSAGE$", "description": "Reports an error returned by a forwarding service to the user.", "placeholders": { "servicename": { @@ -2192,11 +2210,11 @@ } }, "forwarderGeneratedBy": { - "message": "Generated by Bitwarden.", + "message": "أنشئ بواسطة Bitwarden.", "description": "Displayed with the address on the forwarding service's configuration screen." }, "forwarderGeneratedByWithWebsite": { - "message": "Website: $WEBSITE$. Generated by Bitwarden.", + "message": "الموقع: $WEBSITE$. أنشئ بواسطة Bitwarden.", "description": "Displayed with the address on the forwarding service's configuration screen.", "placeholders": { "WEBSITE": { @@ -2206,7 +2224,7 @@ } }, "forwaderInvalidToken": { - "message": "Invalid $SERVICENAME$ API token", + "message": "رمز API غير صالح $SERVICENAME$", "description": "Displayed when the user's API token is empty or rejected by the forwarding service.", "placeholders": { "servicename": { @@ -2216,7 +2234,7 @@ } }, "forwaderInvalidTokenWithMessage": { - "message": "Invalid $SERVICENAME$ API token: $ERRORMESSAGE$", + "message": "رمز API غير صالح $SERVICENAME$: $ERRORMESSAGE$", "description": "Displayed when the user's API token is rejected by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -2230,7 +2248,7 @@ } }, "forwarderNoAccountId": { - "message": "Unable to obtain $SERVICENAME$ masked email account ID.", + "message": "غير قادر على الحصول على معرف البريد الإلكتروني المحجوب $SERVICENAME$.", "description": "Displayed when the forwarding service fails to return an account ID.", "placeholders": { "servicename": { @@ -2240,7 +2258,7 @@ } }, "forwarderNoDomain": { - "message": "Invalid $SERVICENAME$ domain.", + "message": "نطاق $SERVICENAME$ غير صالح.", "description": "Displayed when the domain is empty or domain authorization failed at the forwarding service.", "placeholders": { "servicename": { @@ -2250,7 +2268,7 @@ } }, "forwarderNoUrl": { - "message": "Invalid $SERVICENAME$ url.", + "message": "رابط $SERVICENAME$ غير صالح.", "description": "Displayed when the url of the forwarding service wasn't supplied.", "placeholders": { "servicename": { @@ -2260,7 +2278,7 @@ } }, "forwarderUnknownError": { - "message": "Unknown $SERVICENAME$ error occurred.", + "message": "حدث خطأ $SERVICENAME$ غير معروف.", "description": "Displayed when the forwarding service failed due to an unknown error.", "placeholders": { "servicename": { @@ -2270,7 +2288,7 @@ } }, "forwarderUnknownForwarder": { - "message": "Unknown forwarder: '$SERVICENAME$'.", + "message": "وكيل مجهول: '$SERVICENAME$'.", "description": "Displayed when the forwarding service is not supported.", "placeholders": { "servicename": { @@ -2436,25 +2454,25 @@ "message": "طلب تسجيل الدخول" }, "creatingAccountOn": { - "message": "Creating account on" + "message": "إنشاء الحساب في" }, "checkYourEmail": { - "message": "Check your email" + "message": "تحقق من بريدك الإلكتروني" }, "followTheLinkInTheEmailSentTo": { - "message": "Follow the link in the email sent to" + "message": "اتبع الرابط الموجود في البريد الإلكتروني المرسل إلى" }, "andContinueCreatingYourAccount": { - "message": "and continue creating your account." + "message": "واستمر في إنشاء حسابك." }, "noEmail": { - "message": "No email?" + "message": "لا يوجد بريد إلكتروني؟" }, "goBack": { - "message": "Go back" + "message": "الرجوع إلى الخلف" }, "toEditYourEmailAddress": { - "message": "to edit your email address." + "message": "لتحرير عنوان بريدك الإلكتروني." }, "exposedMasterPassword": { "message": "كلمة المرور الرئيسية مكشوفة" @@ -2474,6 +2492,12 @@ "important": { "message": "مهم:" }, + "accessTokenUnableToBeDecrypted": { + "message": "لقد قمت بتسجيل الخروج لأنه لا يمكن فك تشفير الرمز المميز الخاص بك. الرجاء تسجيل الدخول مرة أخرى لحل هذه المشكلة." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "لقد قمت بتسجيل الخروج لأنه تعذر استرداد رمز التحديث الخاص بك. الرجاء تسجيل الدخول مرة أخرى لحل هذه المشكلة." + }, "masterPasswordHint": { "message": "لا يمكن استعادة كلمة المرور الرئيسية إذا نسيتها!" }, @@ -2890,7 +2914,7 @@ "message": "خطأ في تعيين مجلد الهدف." }, "viewItemsIn": { - "message": "View items in $NAME$", + "message": "عرض العناصر في $NAME$", "description": "Button to view the contents of a folder or collection", "placeholders": { "name": { @@ -2900,7 +2924,7 @@ } }, "backTo": { - "message": "Back to $NAME$", + "message": "العودة إلى $NAME$", "description": "Navigate back to a previous folder or collection", "placeholders": { "name": { @@ -2910,11 +2934,11 @@ } }, "back": { - "message": "Back", + "message": "رجوع", "description": "Button text to navigate back" }, "removeItem": { - "message": "Remove $NAME$", + "message": "إزالة $NAME$", "description": "Remove a selected option, such as a folder or collection", "placeholders": { "name": { diff --git a/apps/desktop/src/locales/az/messages.json b/apps/desktop/src/locales/az/messages.json index 0143e6c2745..dc2c5b28f8a 100644 --- a/apps/desktop/src/locales/az/messages.json +++ b/apps/desktop/src/locales/az/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Öz-özünə sahiblik edən Bitwarden quraşdırmasının baza URL-sini müəyyənləşdirin." }, + "selfHostedBaseUrlHint": { + "message": "Şirkət daxili sahiblik edən Bitwarden quraşdırmasının təməl URL-sini qeyd edin. Nümunə: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Qabaqcıl konfiqurasiya üçün hər xidmətin təməl URL-sini müstəqil olaraq qeyd edə bilərsiniz." + }, + "selfHostedEnvFormInvalid": { + "message": "Təməl server URL-sini və ya ən azı bir özəl mühiti əlavə etməlisiniz." + }, "customEnvironment": { "message": "Özəl mühit" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Çıxış edildi" }, + "loggedOutDesc": { + "message": "Hesabınızdan çıxış etmisiniz." + }, "loginExpired": { "message": "Seansın müddəti bitdi." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Müraciət tokeni təzələmə xətası" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Təzələmə tokeni və ya API açarlar tapılmadı. Lütfən çıxış edib yenidən giriş etməyə çalışın." + }, "help": { "message": "Kömək" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Vacib:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Müraciət tokeninizin şifrəsi açıla bilmədiyi üçün çıxış etdiniz. Bu problemi həll etmək üçün lütfən yenidən giriş edin." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Təzələmə tokeniniz alına bilmədiyi üçün çıxış etdiniz. Bu problemi həll etmək üçün lütfən yenidən giriş edin." + }, "masterPasswordHint": { "message": "Unutsanız, ana parolunuz bərpa edilə bilməz!" }, diff --git a/apps/desktop/src/locales/be/messages.json b/apps/desktop/src/locales/be/messages.json index 4adb3be3e5a..73bd046a82d 100644 --- a/apps/desktop/src/locales/be/messages.json +++ b/apps/desktop/src/locales/be/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Увядзіце асноўны URL-адрас вашага лакальнага размяшчэння ўсталяванага Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Карыстальніцкае асяроддзе" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Вы выйшлі" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Тэрмін дзеяння вашага сеансу завяршыўся." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Даведка" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Важна:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Ваш асноўны пароль немагчыма будзе аднавіць, калі вы яго забудзеце!" }, diff --git a/apps/desktop/src/locales/bg/messages.json b/apps/desktop/src/locales/bg/messages.json index 7471bebe029..425380fdcea 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Укажете базовия адрес за собствената ви инсталирана среда на Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Посочете базовия адрес на Вашата собствена инсталация на Битуорден. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "За по-детайлна настройка, може да укажете основния адрес на всяка услуга поотделно." + }, + "selfHostedEnvFormInvalid": { + "message": "Трябва да добавите или основния адрес на сървъра, или поне една специална среда." + }, "customEnvironment": { "message": "Специална среда" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Бяхте отписани" }, + "loggedOutDesc": { + "message": "Бяхте отписан(а) от регистрацията си." + }, "loginExpired": { "message": "Сесията ви изтече." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Грешка при опресняването на идентификатора за достъп" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Няма намерен идентификатор за опресняване или ключове за ППИ. Опитайте да се отпишете и да се впишете отново." + }, "help": { "message": "Помощ" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Важно:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Бяхте отписан(а), тъй като идентификаторът Ви за достъп не може да бъде дешифриран. Впишете се отново, за да отстраните проблема." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Бяхте отписан(а), тъй като идентификаторът Ви за опресняване не може да бъде получен. Впишете се отново, за да отстраните проблема." + }, "masterPasswordHint": { "message": "Главната парола не може да бъде възстановена, ако я забравите!" }, diff --git a/apps/desktop/src/locales/bn/messages.json b/apps/desktop/src/locales/bn/messages.json index 71749add465..36a4dc85f20 100644 --- a/apps/desktop/src/locales/bn/messages.json +++ b/apps/desktop/src/locales/bn/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "আপনার অন-প্রাঙ্গনে হোস্টকৃত Bitwarden ইনস্টলেশনটির বেস URL উল্লেখ করুন।" }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "পছন্দসই পরিবেশ" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "প্রস্থানকৃত" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "আপনার লগইন মাত্রকালটির মেয়াদ শেষ হয়ে গেছে।" }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "সাহায্য" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/bs/messages.json b/apps/desktop/src/locales/bs/messages.json index a11dbb7e9b9..491c9413f99 100644 --- a/apps/desktop/src/locales/bs/messages.json +++ b/apps/desktop/src/locales/bs/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Navedite osnovni URL vaše lokalne Bitwarden instalacije." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Prilagođeno okruženje" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Odjavljen" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesija je istekla." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Pomoć" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/ca/messages.json b/apps/desktop/src/locales/ca/messages.json index abee9ac2ff0..2fcc36136bb 100644 --- a/apps/desktop/src/locales/ca/messages.json +++ b/apps/desktop/src/locales/ca/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Especifiqueu l'URL base de la vostra instal·lació Bitwarden allotjada en un entorn propi." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Entorn personalitzat" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Desconnectat" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "La vostra sessió ha caducat." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Ajuda" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "La contrasenya mestra no es pot recuperar si la oblideu!" }, diff --git a/apps/desktop/src/locales/cs/messages.json b/apps/desktop/src/locales/cs/messages.json index bcb08de2bea..7dc48c3bf11 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Zadejte základní URL adresu vlastní hostované aplikace Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Zadejte základní URL adresu Vaší vlastní hostované aplikace Bitwarden. Příklad: https://bitwarden.spolecnost.cz" + }, + "selfHostedCustomEnvHeader": { + "message": "Pro rozšířená nastavení můžete zadat základní URL adresu každé služby zvlášť." + }, + "selfHostedEnvFormInvalid": { + "message": "Musíte přidat buď základní adresu URL serveru nebo alespoň jedno vlastní prostředí." + }, "customEnvironment": { "message": "Vlastní prostředí" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Odhlášení" }, + "loggedOutDesc": { + "message": "Byli jste odhlášeni ze svého účtu." + }, "loginExpired": { "message": "Platnost přihlášení vypršela." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Chyba aktualizace přístupového tokenu" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nebyly nalezeny žádné obnovovací tokeny nebo API klíče. Zkuste se odhlásit a znovu se přihlásit." + }, "help": { "message": "Nápověda" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Důležité:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Byli jste odhlášeni, protože Váš přístupový token nelze dešifrovat. Pro vyřešení tohoto problému se přihlaste znovu." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Byli jste odhlášeni, protože Váš obnovovací token nelze získat. Pro vyřešení tohoto problému se přihlaste znovu." + }, "masterPasswordHint": { "message": "Pokud zapomenete Vaše hlavní heslo, nebude možné jej obnovit!" }, diff --git a/apps/desktop/src/locales/cy/messages.json b/apps/desktop/src/locales/cy/messages.json index 5085234b826..bec1804ae2a 100644 --- a/apps/desktop/src/locales/cy/messages.json +++ b/apps/desktop/src/locales/cy/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/da/messages.json b/apps/desktop/src/locales/da/messages.json index e851f1df451..333bfcd1800 100644 --- a/apps/desktop/src/locales/da/messages.json +++ b/apps/desktop/src/locales/da/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Angiv grund-URL'en til den lokal-hostede Bitwarden-installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Tilpasset miljø" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logget ud" }, + "loggedOutDesc": { + "message": "Der er blevet logget ud af kontoen." + }, "loginExpired": { "message": "Loginsessionen er udløbet." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Adgangstoken genopfriskningsfejl" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Ingen genopfriskningstoken eller API-nøgler fundet. Prøv at logge ud og dernæst ind igen." + }, "help": { "message": "Hjælp" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Vigtigt:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Kontoen er blevet logget ud, fordi adgangstokenet ikke kunne dekrypteres. Log ind igen for at løse problemet." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Kontoen er blevet logget ud, fordi opfriskningstokenet ikke kunne dekrypteres. Log ind igen for at løse problemet." + }, "masterPasswordHint": { "message": "Hovedadgangskoden kan ikke gendannes, hvis den glemmes!" }, diff --git a/apps/desktop/src/locales/de/messages.json b/apps/desktop/src/locales/de/messages.json index e5abc443723..769be2a4295 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Bitte gib die Basis-URL deiner selbst gehosteten Bitwarden-Installation an." }, + "selfHostedBaseUrlHint": { + "message": "Gib die Basis-URL deiner vor Ort gehosteten Bitwarden-Installation an. Beispiel: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Für eine erweiterte Konfiguration kannst du die Basis-URL jedes Dienstes unabhängig voneinander angeben." + }, + "selfHostedEnvFormInvalid": { + "message": "Du musst entweder die Basis-Server-URL oder mindestens eine benutzerdefinierte Umgebung hinzufügen." + }, "customEnvironment": { "message": "Benutzerdefinierte Umgebung" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Abgemeldet" }, + "loggedOutDesc": { + "message": "Du wurdest von deinem Konto abgemeldet." + }, "loginExpired": { "message": "Deine Sitzung ist abgelaufen." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Zugangs-Token Aktualisierungsfehler" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Kein Aktualisierungs-Token oder API-Schlüssel gefunden. Bitte versuche dich ab- und wieder anzumelden." + }, "help": { "message": "Hilfe" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Wichtig:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Du wurdest abgemeldet, weil dein Zugangs-Token nicht entschlüsselt werden konnte. Bitte melde dich erneut an, um dieses Problem zu beheben." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Du wurdest abgemeldet, weil dein Aktualisierungs-Token nicht entschlüsselt werden konnte. Bitte melde dich erneut an, um dieses Problem zu beheben." + }, "masterPasswordHint": { "message": "Dein Master-Passwort kann nicht wiederhergestellt werden, wenn du es vergisst!" }, diff --git a/apps/desktop/src/locales/el/messages.json b/apps/desktop/src/locales/el/messages.json index af932beb008..fd261a8d032 100644 --- a/apps/desktop/src/locales/el/messages.json +++ b/apps/desktop/src/locales/el/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Καθορίστε τη βασική διεύθυνση URL, της εγκατάστασης του Bitwarden που φιλοξενείται στο χώρο σας." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Προσαρμοσμένο περιβάλλον" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Αποσύνδεση" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Η περίοδος σύνδεσης σας έχει λήξει." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Βοήθεια" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Σημαντικό:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Ο κύριος κωδικός πρόσβασης δεν μπορεί να ανακτηθεί εάν τον ξεχάσετε!" }, diff --git a/apps/desktop/src/locales/en_GB/messages.json b/apps/desktop/src/locales/en_GB/messages.json index 45b724e47e4..7f28fee4b2c 100644 --- a/apps/desktop/src/locales/en_GB/messages.json +++ b/apps/desktop/src/locales/en_GB/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/en_IN/messages.json b/apps/desktop/src/locales/en_IN/messages.json index da4dca84e4a..b3e9a40bb38 100644 --- a/apps/desktop/src/locales/en_IN/messages.json +++ b/apps/desktop/src/locales/en_IN/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/eo/messages.json b/apps/desktop/src/locales/eo/messages.json index 55e9daa72b3..4a429118976 100644 --- a/apps/desktop/src/locales/eo/messages.json +++ b/apps/desktop/src/locales/eo/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Adiaŭita" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/es/messages.json b/apps/desktop/src/locales/es/messages.json index 130c18b391e..a3a2caf2e5a 100644 --- a/apps/desktop/src/locales/es/messages.json +++ b/apps/desktop/src/locales/es/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Especifica la URL base de tu instalación de Bitwarden de alojamiento propio." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Entorno personalizado" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Sesión terminada" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Tu sesión ha expirado." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Ayuda" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Importante:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Tu contraseña maestra no se puede recuperar si la olvidas" }, diff --git a/apps/desktop/src/locales/et/messages.json b/apps/desktop/src/locales/et/messages.json index d26fc652131..a38790c47ab 100644 --- a/apps/desktop/src/locales/et/messages.json +++ b/apps/desktop/src/locales/et/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Kohandatud keskkond" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Välja logitud" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sessioon on aegunud." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Abi" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Tähtis:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Ülemparooli ei saa taastada, kui sa selle unustama peaksid!" }, diff --git a/apps/desktop/src/locales/eu/messages.json b/apps/desktop/src/locales/eu/messages.json index 82406869f5a..a3b0f0f87b2 100644 --- a/apps/desktop/src/locales/eu/messages.json +++ b/apps/desktop/src/locales/eu/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Bitwarden instalatzeko, zehaztu ostatatze propioaren oinarrizko URL-a." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Ingurune pertsonalizatua" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Saioa itxita" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Saioa amaitu da." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Laguntza" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/fa/messages.json b/apps/desktop/src/locales/fa/messages.json index 3c5fb785b7f..7fe2758ec40 100644 --- a/apps/desktop/src/locales/fa/messages.json +++ b/apps/desktop/src/locales/fa/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "نشانی اینترنتی پایه فرضی نصب Bitwarden میزبانی شده را مشخص کنید." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "محیط سفارشی" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "خارج شد" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "نشست ورود شما منقضی شده است." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "راهنما" }, @@ -2474,6 +2492,12 @@ "important": { "message": "مهم:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "کلمه عبور اصلی شما در صورت فراموشی قابل بازیابی نیست!" }, diff --git a/apps/desktop/src/locales/fi/messages.json b/apps/desktop/src/locales/fi/messages.json index 08447614433..4586511cab4 100644 --- a/apps/desktop/src/locales/fi/messages.json +++ b/apps/desktop/src/locales/fi/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Määritä omassa palvelinympäristössäsi suoritettavan Bitwarden-asennuksen pääverkkotunnus." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Mukautettu palvelinympäristö" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Kirjauduttu ulos" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Kirjautumisistuntosi on erääntynyt." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Ohje" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Tärkeää:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Pääsalasanasi palauttaminen ei ole mahdollista, jos unohdat sen!" }, diff --git a/apps/desktop/src/locales/fil/messages.json b/apps/desktop/src/locales/fil/messages.json index 0180d46959e..d4b76de533d 100644 --- a/apps/desktop/src/locales/fil/messages.json +++ b/apps/desktop/src/locales/fil/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Tukuyin ang base URL ng iyong on premises na naka host sa pag install ng Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Kapaligirang Custom" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Umalis na" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Nag-expire na ang iyong session sa login." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Tulong" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Mahalaga:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Hindi mababawi ang password ng master mo kung nakalimutan mo ito!" }, diff --git a/apps/desktop/src/locales/fr/messages.json b/apps/desktop/src/locales/fr/messages.json index ef8f783dd31..a4288526277 100644 --- a/apps/desktop/src/locales/fr/messages.json +++ b/apps/desktop/src/locales/fr/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Spécifiez l'URL de base de votre installation Bitwarden auto-hébergée." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Environnement personnalisé" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Déconnecté" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Votre session a expiré." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Aide" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important :" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Votre mot de passe principal ne peut pas être récupéré si vous l'oubliez !" }, diff --git a/apps/desktop/src/locales/gl/messages.json b/apps/desktop/src/locales/gl/messages.json index 7b9cd9ef0f1..4d0d96038f6 100644 --- a/apps/desktop/src/locales/gl/messages.json +++ b/apps/desktop/src/locales/gl/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/he/messages.json b/apps/desktop/src/locales/he/messages.json index 0f664ed02e7..b559652ce3d 100644 --- a/apps/desktop/src/locales/he/messages.json +++ b/apps/desktop/src/locales/he/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "הזן את כתובת השרת המקומי של Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "סביבה מותאמת אישית" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "בוצעה יציאה" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "תוקף החיבור שלך הסתיים." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "עזרה" }, @@ -2474,6 +2492,12 @@ "important": { "message": "חשוב:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/hi/messages.json b/apps/desktop/src/locales/hi/messages.json index 765510dc32e..bc4bf462f6b 100644 --- a/apps/desktop/src/locales/hi/messages.json +++ b/apps/desktop/src/locales/hi/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/hr/messages.json b/apps/desktop/src/locales/hr/messages.json index d1d4a4672b5..2adc28e3ced 100644 --- a/apps/desktop/src/locales/hr/messages.json +++ b/apps/desktop/src/locales/hr/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Navedi osnovni URL svoje lokalno smještene Bitwarden instalacije." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Prilagođeno okruženje" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Odjavljen" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesija je istekla." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Pomoć" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Važno:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Glavnu lozinku nije moguće oporaviti ako ju zaboraviš!" }, diff --git a/apps/desktop/src/locales/hu/messages.json b/apps/desktop/src/locales/hu/messages.json index 869b92167f6..568dc954e92 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "A helyileg üzemeltetett Bitwarden telepítés webcímének megadása." }, + "selfHostedBaseUrlHint": { + "message": "Adjuk meg a helyileg tárolt Bitwarden telepítés alap webcímét. Példa: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Speciális konfigurációhoz külön-külön megadhatjuk az egyes szolgáltatások alap webcímét." + }, + "selfHostedEnvFormInvalid": { + "message": "Hozzá kell adni az alapszerver webcímét vagy legalább egy egyedi környezetet." + }, "customEnvironment": { "message": "Egyedi környezet" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Megtörtént a kijelentkezés." }, + "loggedOutDesc": { + "message": "Megtörtént a kijelentkezés a fiókból." + }, "loginExpired": { "message": "A bejelentkezési munkamenet lejárt." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Hozzáférési vezérjel frissítési hiba" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nem található frissítési vezérjel vagy API kulcs. Próbáljunk meg kijelentkezni, majd újra bejelentkezni." + }, "help": { "message": "Súgó" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Fontos:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Megtörtént a kijelentkezés, mert a hozzáférési vezérjelet nem sikerült visszafejteni. Jelentkezzünk be újra a probléma megoldásához." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Megtörtént a kijelentkezés, mert a hozzáférési vezérjelet nem sikerült visszafejteni. Jelentkezzünk be újra a probléma megoldásához." + }, "masterPasswordHint": { "message": "Az elfelejtett mesterjelszó nem állítható helyre, ha elfelejtik!" }, diff --git a/apps/desktop/src/locales/id/messages.json b/apps/desktop/src/locales/id/messages.json index cc25a1c73ff..545901170fd 100644 --- a/apps/desktop/src/locales/id/messages.json +++ b/apps/desktop/src/locales/id/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Lingkungan Kustom" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Keluar" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesi masuk Anda telah berakhir." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Bantuan" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Penting:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Kata sandi utama Anda tidak dapat dipulihkan jika Anda lupa!" }, diff --git a/apps/desktop/src/locales/it/messages.json b/apps/desktop/src/locales/it/messages.json index b016dc5e480..72f2115460f 100644 --- a/apps/desktop/src/locales/it/messages.json +++ b/apps/desktop/src/locales/it/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specifica l'URL principale della tua installazione self-hosted di Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specifica lo URL principale della tua installazione self-hosted di Bitwarden. Esempio: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Per la configurazione avanzata, puoi specificare lo URL di base di ciascun servizio in modo indipendente." + }, + "selfHostedEnvFormInvalid": { + "message": "Devi aggiungere lo URL del server di base o almeno un ambiente personalizzato." + }, "customEnvironment": { "message": "Ambiente personalizzato" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Uscito" }, + "loggedOutDesc": { + "message": "Sei stato fatto uscire dal tuo account." + }, "loginExpired": { "message": "La tua sessione è scaduta." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Errore di aggiornamento del token di accesso" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nessun token di aggiornamento o chiave API trovati. Prova ad uscire ed entrare di nuovo." + }, "help": { "message": "Aiuto" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Importante:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Sei stato fatto uscire perché non è stato possibile decrittografare il tuo token di accesso. Entra di nuovo per risolvere il problema." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Sei stato fatto uscire perché non è stato possibile recuperare il token di aggiornamento. Entra di nuovo per risolvere il problema." + }, "masterPasswordHint": { "message": "La tua password principale non può essere recuperata se la dimentichi!" }, diff --git a/apps/desktop/src/locales/ja/messages.json b/apps/desktop/src/locales/ja/messages.json index 0be6aea461f..94e96a98b37 100644 --- a/apps/desktop/src/locales/ja/messages.json +++ b/apps/desktop/src/locales/ja/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "セルフホスティングしている Bitwarden のベース URL を指定してください。" }, + "selfHostedBaseUrlHint": { + "message": "オンプレミスホストした Bitwarden のベース URL を指定してください。例: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "高度な設定では、各サービスのベース URL を個別に指定できます。" + }, + "selfHostedEnvFormInvalid": { + "message": "ベース サーバー URL または少なくとも 1 つのカスタム環境を追加する必要があります。" + }, "customEnvironment": { "message": "カスタム環境" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "ログアウトしました" }, + "loggedOutDesc": { + "message": "アカウントからログアウトしました。" + }, "loginExpired": { "message": "ログインセッションの有効期限が切れています。" }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "アクセストークンの更新エラー" + }, + "errorRefreshingAccessTokenDesc": { + "message": "リフレッシュトークンや API キーが見つかりませんでした。ログアウトして再度ログインしてください。" + }, "help": { "message": "ヘルプ" }, @@ -2474,6 +2492,12 @@ "important": { "message": "重要" }, + "accessTokenUnableToBeDecrypted": { + "message": "アクセストークンを復号できなかったためログアウトしました。この問題を解決するためには再度ログインしてください。" + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "リフレッシュトークンを取得できなかったためログアウトしました。この問題を解決するためには再度ログインしてください。" + }, "masterPasswordHint": { "message": "マスターパスワードを忘れた場合は復元できません!" }, diff --git a/apps/desktop/src/locales/ka/messages.json b/apps/desktop/src/locales/ka/messages.json index 7b9cd9ef0f1..4d0d96038f6 100644 --- a/apps/desktop/src/locales/ka/messages.json +++ b/apps/desktop/src/locales/ka/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/km/messages.json b/apps/desktop/src/locales/km/messages.json index 7b9cd9ef0f1..4d0d96038f6 100644 --- a/apps/desktop/src/locales/km/messages.json +++ b/apps/desktop/src/locales/km/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/kn/messages.json b/apps/desktop/src/locales/kn/messages.json index 63f2d0326d0..88e371b67fc 100644 --- a/apps/desktop/src/locales/kn/messages.json +++ b/apps/desktop/src/locales/kn/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "ನಿಮ್ಮ ಆನ್-ಪ್ರಮೇಯ ಹೋಸ್ಟ್ ಮಾಡಿದ ಬಿಟ್‌ವಾರ್ಡೆನ್ ಸ್ಥಾಪನೆಯ ಮೂಲ URL ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "ಕಸ್ಟಮ್ ಪರಿಸರ" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "ಲಾಗ್ ಔಟ್" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "ನಿಮ್ಮ ಲಾಗಿನ್ ಸೆಷನ್ ಅವಧಿ ಮೀರಿದೆ." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "ಸಹಾಯ" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/ko/messages.json b/apps/desktop/src/locales/ko/messages.json index 1a5e6353520..672e775af4e 100644 --- a/apps/desktop/src/locales/ko/messages.json +++ b/apps/desktop/src/locales/ko/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "온-프레미스 Bitwarden이 호스팅되고 있는 서버의 기본 URL을 지정하세요." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "사용자 지정 환경" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "로그아웃됨" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "로그인 세션이 만료되었습니다." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "도움말" }, @@ -2474,6 +2492,12 @@ "important": { "message": "중요:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "마스터 비밀번호를 잊어버리면 복구할 수 없습니다!" }, diff --git a/apps/desktop/src/locales/lt/messages.json b/apps/desktop/src/locales/lt/messages.json index edb15332c22..68698617d47 100644 --- a/apps/desktop/src/locales/lt/messages.json +++ b/apps/desktop/src/locales/lt/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Nurodykite pagrindinį URL adresą savo patalpose esančio Bitwarden įdiegimo." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Individualizuota aplinka" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Atsijungta" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesijos laikas baigėsi." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Pagalba" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Svarbu:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Pagrindinis slaptažodis negali būti atkurtas, jei jį pamiršite!" }, diff --git a/apps/desktop/src/locales/lv/messages.json b/apps/desktop/src/locales/lv/messages.json index 4a91e491a54..4579c68742e 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Norādīt pašuzstādīta Bitwarden pamata URL." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Pielāgota vide" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Atteicies" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Pieteikšanās sesija ir beigusies." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Palīdzība" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Svarīgi:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Galvenā parole nevar tikt atgūta, ja tā ir aizmirsta!" }, diff --git a/apps/desktop/src/locales/me/messages.json b/apps/desktop/src/locales/me/messages.json index 400fc1bba9e..dc8a3ebdeeb 100644 --- a/apps/desktop/src/locales/me/messages.json +++ b/apps/desktop/src/locales/me/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Navedite osnovni URL vaše lokalne instalacije (HOST) Bitwardena." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Prilagođeno okruženje" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Odjavljen" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Vaša sesija je istekla." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Pomoć" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/ml/messages.json b/apps/desktop/src/locales/ml/messages.json index fec41cd119c..1316189317b 100644 --- a/apps/desktop/src/locales/ml/messages.json +++ b/apps/desktop/src/locales/ml/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "നിങ്ങളുടെ പരിസരത്ത് ചെയ്യുന്ന Bitwarden ഇൻസ്റ്റാളേഷന്റെ അടിസ്ഥാന URL വ്യക്തമാക്കുക." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "ഇഷ്‌ടാനുസൃത എൻവിയോണ്മെന്റ്" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "ലോഗ് ഔട്ട് ചെയ്തിരിക്കുന്നു" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "നിങ്ങളുടെ പ്രവർത്തന സമയം കഴിഞ്ഞിരിക്കുന്നു." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "സഹായം" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/mr/messages.json b/apps/desktop/src/locales/mr/messages.json index 7b9cd9ef0f1..4d0d96038f6 100644 --- a/apps/desktop/src/locales/mr/messages.json +++ b/apps/desktop/src/locales/mr/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/my/messages.json b/apps/desktop/src/locales/my/messages.json index 54f943a72c8..1ec3bb1630d 100644 --- a/apps/desktop/src/locales/my/messages.json +++ b/apps/desktop/src/locales/my/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/nb/messages.json b/apps/desktop/src/locales/nb/messages.json index 1f6c7fed646..149d0f75773 100644 --- a/apps/desktop/src/locales/nb/messages.json +++ b/apps/desktop/src/locales/nb/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Spesifiser grunn-nettadressen til din selvbetjente Bitwarden-installasjon." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Tilpasset miljø" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logget av" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Din innloggingsøkt har utløpt." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Hjelp" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Viktig:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/ne/messages.json b/apps/desktop/src/locales/ne/messages.json index a766c4bb6e5..3ad79ad8bf6 100644 --- a/apps/desktop/src/locales/ne/messages.json +++ b/apps/desktop/src/locales/ne/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/nl/messages.json b/apps/desktop/src/locales/nl/messages.json index f3fe4886abc..aafc348d908 100644 --- a/apps/desktop/src/locales/nl/messages.json +++ b/apps/desktop/src/locales/nl/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Geef de basis-URL van jouw zelfgehoste Bitwarden-installatie." }, + "selfHostedBaseUrlHint": { + "message": "Specificeer de basis-URL van je zelfgehoste Bitwarden-installatie. Bijvoorbeeld: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Voor geavanceerde instellingen, kun je de basis-URL van iedere dienst afzonderlijk instellen." + }, + "selfHostedEnvFormInvalid": { + "message": "Je moet de basisserver-URL of ten minste één aangepaste omgeving toevoegen." + }, "customEnvironment": { "message": "Aangepaste omgeving" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Uitgelogd" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Je inlogsessie is verlopen." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Belangrijk:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Je hoofdwachtwoord kan niet hersteld worden als je het vergeet!" }, diff --git a/apps/desktop/src/locales/nn/messages.json b/apps/desktop/src/locales/nn/messages.json index 10016168346..e383a118310 100644 --- a/apps/desktop/src/locales/nn/messages.json +++ b/apps/desktop/src/locales/nn/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logga ut" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Innloggingsøkta di har gått ut." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Hjelp" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/or/messages.json b/apps/desktop/src/locales/or/messages.json index 8146636277b..8f2f11bc30f 100644 --- a/apps/desktop/src/locales/or/messages.json +++ b/apps/desktop/src/locales/or/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/pl/messages.json b/apps/desktop/src/locales/pl/messages.json index 01fe7622e71..6acefb31b80 100644 --- a/apps/desktop/src/locales/pl/messages.json +++ b/apps/desktop/src/locales/pl/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Wpisz podstawowy adres URL hostowanej instalacji Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Określ bazowy adres URL swojej instalacji Bitwarden. Przykład: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Dla zaawansowanych konfiguracji możesz określić podstawowy adres URL niezależnie dla każdej usługi." + }, + "selfHostedEnvFormInvalid": { + "message": "Musisz dodać podstawowy adres URL serwera lub co najmniej jedno niestandardowe środowisko." + }, "customEnvironment": { "message": "Niestandardowe środowisko" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Wylogowano" }, + "loggedOutDesc": { + "message": "Zostałeś wylogowany z konta." + }, "loginExpired": { "message": "Twoja sesja wygasła." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Błąd podczas odświeżania tokenu" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nie znaleziono tokenu odświeżającego ani kluczy API. Spróbuj wylogować się i zalogować ponownie." + }, "help": { "message": "Pomoc" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Ważne:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Zostałeś wylogowany, ponieważ token dostępu nie mógł zostać odszyfrowany. Zaloguj się ponownie, aby rozwiązać ten problem." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Zostałeś wylogowany, ponieważ Twój token odświeżania nie mógł zostać pobrany. Zaloguj się ponownie, aby rozwiązać ten problem." + }, "masterPasswordHint": { "message": "Twoje hasło główne nie może zostać odzyskane, jeśli je zapomnisz!" }, diff --git a/apps/desktop/src/locales/pt_BR/messages.json b/apps/desktop/src/locales/pt_BR/messages.json index 77ae4a5592b..b9e051de18e 100644 --- a/apps/desktop/src/locales/pt_BR/messages.json +++ b/apps/desktop/src/locales/pt_BR/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Especifique a URL de base da sua instalação local do Bitwarden." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Ambiente Personalizado" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Sessão encerrada" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "A sua sessão expirou." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Ajuda" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Importante:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "A sua senha mestra não pode ser recuperada se você esquecê-la!" }, diff --git a/apps/desktop/src/locales/pt_PT/messages.json b/apps/desktop/src/locales/pt_PT/messages.json index 5596e6ee45e..a1fc775bdef 100644 --- a/apps/desktop/src/locales/pt_PT/messages.json +++ b/apps/desktop/src/locales/pt_PT/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Especifique o URL de base da sua instalação Bitwarden hospedada no local." }, + "selfHostedBaseUrlHint": { + "message": "Especifique o URL de base da sua instalação Bitwarden hospedada no local. Exemplo: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Para uma configuração avançada, pode especificar o URL de base de cada serviço de forma independente." + }, + "selfHostedEnvFormInvalid": { + "message": "Deve adicionar o URL do servidor de base ou pelo menos um ambiente personalizado." + }, "customEnvironment": { "message": "Ambiente personalizado" }, @@ -708,7 +717,7 @@ "message": "URL do servidor da API" }, "webVaultUrl": { - "message": "URL do servidor do cofre web" + "message": "URL do servidor do cofre Web" }, "identityUrl": { "message": "URL do servidor de identidade" @@ -743,6 +752,9 @@ "loggedOut": { "message": "Sessão terminada" }, + "loggedOutDesc": { + "message": "Foi terminada a sessão da sua conta." + }, "loginExpired": { "message": "A sua sessão expirou." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Erro no acesso ao token de atualização" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Não foi encontrado nenhum token de atualização ou chaves API. Por favor, tente terminar a sessão e voltar a iniciá-la." + }, "help": { "message": "Ajuda" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Importante:" }, + "accessTokenUnableToBeDecrypted": { + "message": "A sua sessão foi encerrada porque o seu token de acesso não pôde ser desencriptado. Por favor, inicie sessão novamente para resolver este problema." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "A sessão foi encerrada porque o seu token de atualização não pôde ser recuperado. Por favor, inicie sessão novamente para resolver este problema." + }, "masterPasswordHint": { "message": "A sua palavra-passe mestra não pode ser recuperada se a esquecer!" }, diff --git a/apps/desktop/src/locales/ro/messages.json b/apps/desktop/src/locales/ro/messages.json index 9ffe8da928c..65800596c86 100644 --- a/apps/desktop/src/locales/ro/messages.json +++ b/apps/desktop/src/locales/ro/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specificați URL-ul de bază al implementări Bitwarden găzduită local." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Mediu personalizat" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Deconectat" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesiunea de autentificare a expirat." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Ajutor" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/ru/messages.json b/apps/desktop/src/locales/ru/messages.json index 665a18d1cb7..2392d902289 100644 --- a/apps/desktop/src/locales/ru/messages.json +++ b/apps/desktop/src/locales/ru/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Укажите URL Bitwarden на вашем сервере." }, + "selfHostedBaseUrlHint": { + "message": "Укажите базовый URL вашего локального хостинга Bitwarden. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Для продвинутой конфигурации можно указать базовый URL каждой службы отдельно." + }, + "selfHostedEnvFormInvalid": { + "message": "Вы должны добавить либо базовый URL сервера, либо хотя бы одно пользовательское окружение." + }, "customEnvironment": { "message": "Пользовательское окружение" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Вы вышли из хранилища" }, + "loggedOutDesc": { + "message": "Вы вышли из своего аккаунта." + }, "loginExpired": { "message": "Истек срок действия вашего сеанса." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Ошибка обновления токена доступа" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Не найдены токен обновления или ключи API. Пожалуйста, попробуйте выполнить выход и повторно авторизоваться." + }, "help": { "message": "Помощь" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Важно:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Вы были деавторизованы, поскольку ваш токен доступа не удалось расшифровать. Чтобы решить эту проблему, авторизуйтесь снова." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Вы были деавторизованы, поскольку ваш токен обновления не удалось получить. Чтобы решить эту проблему, авторизуйтесь снова." + }, "masterPasswordHint": { "message": "Ваш мастер-пароль невозможно восстановить, если вы его забудете!" }, diff --git a/apps/desktop/src/locales/si/messages.json b/apps/desktop/src/locales/si/messages.json index b2c744761fe..1d518c4374d 100644 --- a/apps/desktop/src/locales/si/messages.json +++ b/apps/desktop/src/locales/si/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/sk/messages.json b/apps/desktop/src/locales/sk/messages.json index af48e2ed529..dc6aa65d84f 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Zadajte URL Bitwarden inštalácie, ktorú prevádzkujete vo vlastnom prostredí." }, + "selfHostedBaseUrlHint": { + "message": "Zadajte základnú URL adresu lokálne hosťovanej inštalácie Bitwarden. Napríklad: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Pre rozšírenú konfiguráciu môžete zadať základnú adresu URL každej služby nezávisle." + }, + "selfHostedEnvFormInvalid": { + "message": "Musíte pridať buď základnú adresu URL servera, alebo aspoň jedno vlastné prostredie." + }, "customEnvironment": { "message": "Vlastné prostredie" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Odhlásený" }, + "loggedOutDesc": { + "message": "Boli ste odhlásení zo svojho účtu." + }, "loginExpired": { "message": "Platnosť prihlásenia vypršala." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Chyba obnovenia prístupového tokenu" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nenašiel sa žiadny token obnovenia ani kľúče API. Skúste sa odhlásiť a znova prihlásiť." + }, "help": { "message": "Nápoveď" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Dôležité:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Boli ste odhlásení, pretože váš prístupový token nebolo možné dešifrovať. Na vyriešenie tohto problému sa znova prihláste." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Boli ste odhlásení, pretože váš prístupový token nebolo možné načítať. Na vyriešenie tohto problému sa znova prihláste." + }, "masterPasswordHint": { "message": "Vaše hlavné heslo sa nebude dať obnoviť, ak ho zabudnete!" }, diff --git a/apps/desktop/src/locales/sl/messages.json b/apps/desktop/src/locales/sl/messages.json index 9bdec66f19c..86cb28289a9 100644 --- a/apps/desktop/src/locales/sl/messages.json +++ b/apps/desktop/src/locales/sl/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Okolje po meri" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Odjavljen" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Vaša seja je potekla." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Pomoč" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/sr/messages.json b/apps/desktop/src/locales/sr/messages.json index de403629d14..90b6e7292f0 100644 --- a/apps/desktop/src/locales/sr/messages.json +++ b/apps/desktop/src/locales/sr/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Наведите основни УРЛ ваше локалне Bitwarden инсталације." }, + "selfHostedBaseUrlHint": { + "message": "Наведите основну УРЛ адресу вашег локалног хостовања Bitwarden-а. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "За напредну конфигурацију, можете навести основну УРЛ адресу сваке услуге независно." + }, + "selfHostedEnvFormInvalid": { + "message": "Морате додати или основни УРЛ сервера или бар једно прилагођено окружење." + }, "customEnvironment": { "message": "Прилагођено окружење" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Одјављено" }, + "loggedOutDesc": { + "message": "Одјављени сте са свог налога." + }, "loginExpired": { "message": "Ваша сесија је истекла." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Грешка при освежавању токена приступа" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Није пронађен токен за освежавање или АПИ кључеви. Покушајте да се одјавите и поново пријавите." + }, "help": { "message": "Помоћ" }, @@ -1300,7 +1318,7 @@ "description": "ex. Date this password was updated" }, "exportFrom": { - "message": "Export from" + "message": "Извоз од" }, "exportVault": { "message": "Извоз сефа" @@ -1309,31 +1327,31 @@ "message": "Формат датотеке" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "Овај извоз ће бити заштићен лозинком и захтеваће лозинку датотеке за дешифровање." }, "filePassword": { - "message": "File password" + "message": "Лозинка датотеке" }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "Ова лозинка ће се користити за извоз и увоз ове датотеке" }, "accountRestrictedOptionDescription": { - "message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account." + "message": "Користите кључ за шифровање вашег налога, изведен из корисничког имена и главне лозинке, да шифрујете извоз и ограничите увоз само на тренутни Bitwarden налог." }, "passwordProtected": { - "message": "Password protected" + "message": "Заштићено лозинком" }, "passwordProtectedOptionDescription": { - "message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption." + "message": "Подесите лозинку за шифровање извоза и увоз у било који Bitwarden налог користећи лозинку за дешифровање." }, "exportTypeHeading": { - "message": "Export type" + "message": "Тип извоза" }, "accountRestricted": { - "message": "Account restricted" + "message": "Налог је ограничен" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "“File password” and “Confirm file password“ do not match." + "message": "Унете лозинке се не подударају." }, "hCaptchaUrl": { "message": "hCaptcha Url", @@ -2102,10 +2120,10 @@ } }, "exportingOrganizationVaultTitle": { - "message": "Exporting organization vault" + "message": "Извоз сефа организације" }, "exportingOrganizationVaultDesc": { - "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Items in individual vaults or other organizations will not be included.", + "message": "Биће извезен само сеф организације повезан са $ORGANIZATION$. Ставке у појединачним сефовима или другим организацијама неће бити укључене.", "placeholders": { "organization": { "content": "$1", @@ -2474,6 +2492,12 @@ "important": { "message": "Важно:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Одјављени сте јер ваш токен за приступ није могао да се дешифрује. Пријавите се поново да бисте решили овај проблем." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Одјављени сте јер ваш токен за освежавање није могао да се преузме. Пријавите се поново да бисте решили овај проблем." + }, "masterPasswordHint": { "message": "Ваша главна лозинка се не може повратити ако је заборавите!" }, diff --git a/apps/desktop/src/locales/sv/messages.json b/apps/desktop/src/locales/sv/messages.json index 9bae4e883dc..6d078a34e87 100644 --- a/apps/desktop/src/locales/sv/messages.json +++ b/apps/desktop/src/locales/sv/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Ange bas-URL:en för din \"on-premises\"-hostade Bitwarden-installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Anpassad miljö" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Utloggad" }, + "loggedOutDesc": { + "message": "Du har blivit utloggad från ditt konto." + }, "loginExpired": { "message": "Din inloggningssession har löpt ut." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Hjälp" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Viktigt:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Ditt huvudlösenord kan inte återställas om du glömmer det!" }, diff --git a/apps/desktop/src/locales/te/messages.json b/apps/desktop/src/locales/te/messages.json index 7b9cd9ef0f1..4d0d96038f6 100644 --- a/apps/desktop/src/locales/te/messages.json +++ b/apps/desktop/src/locales/te/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premises hosted Bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Help" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/th/messages.json b/apps/desktop/src/locales/th/messages.json index cfc701aa5aa..827bbc8b867 100644 --- a/apps/desktop/src/locales/th/messages.json +++ b/apps/desktop/src/locales/th/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Specify the base URL of your on-premise hosted bitwarden installation." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Custom Environment" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "ออกจากระบบแล้ว" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "เซสชันของคุณหมดอายุแล้ว" }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "ช่วยเหลือ" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/tr/messages.json b/apps/desktop/src/locales/tr/messages.json index 224bf36cfd7..8d3d061a58e 100644 --- a/apps/desktop/src/locales/tr/messages.json +++ b/apps/desktop/src/locales/tr/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Kurum içi barındırılan Bitwarden kurulumunuzun taban URL'sini belirtin." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Özel ortam" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Çıkış yapıldı" }, + "loggedOutDesc": { + "message": "Hesabınızdan çıkış yapıldı." + }, "loginExpired": { "message": "Oturumunuzun süresi doldu." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Yardım" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Önemli:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Ana parolanızı unutursanız kurtaramazsınız!" }, diff --git a/apps/desktop/src/locales/uk/messages.json b/apps/desktop/src/locales/uk/messages.json index 546005db20c..0ac31300741 100644 --- a/apps/desktop/src/locales/uk/messages.json +++ b/apps/desktop/src/locales/uk/messages.json @@ -693,7 +693,16 @@ "message": "Середовище власного хостингу" }, "selfHostedEnvironmentFooter": { - "message": "Вкажіть основну URL-адресу Bitwarden, встановленого на локальному хостингу." + "message": "Вкажіть основну URL-адресу локально розміщеного встановлення Bitwarden." + }, + "selfHostedBaseUrlHint": { + "message": "Вкажіть основну URL-адресу вашого локально розміщеного встановлення Bitwarden. Зразок: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Для розширеної конфігурації ви можете вказати основну URL-адресу окремо для кожної служби." + }, + "selfHostedEnvFormInvalid": { + "message": "Необхідно додати URL-адресу основного сервера, або принаймні одне користувацьке середовище." }, "customEnvironment": { "message": "Власне середовище" @@ -743,6 +752,9 @@ "loggedOut": { "message": "Ви вийшли" }, + "loggedOutDesc": { + "message": "Ви вийшли з облікового запису." + }, "loginExpired": { "message": "Тривалість вашого сеансу завершилась." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Помилка оновлення токена доступу" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Не знайдено токен оновлення або ключі API. Спробуйте вийти, а потім увійти знову." + }, "help": { "message": "Допомога" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Важливо:" }, + "accessTokenUnableToBeDecrypted": { + "message": "Ви вийшли з системи, оскільки неможливо розшифрувати ваш токен доступу. Увійдіть знову, щоб виправити цю проблему." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "Ви вийшли з системи, оскільки неможливо отримати ваш токен оновлення. Увійдіть знову, щоб виправити цю проблему." + }, "masterPasswordHint": { "message": "Головний пароль неможливо відновити, якщо ви його втратите!" }, diff --git a/apps/desktop/src/locales/vi/messages.json b/apps/desktop/src/locales/vi/messages.json index 0fa1d7253af..70a920b8587 100644 --- a/apps/desktop/src/locales/vi/messages.json +++ b/apps/desktop/src/locales/vi/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "Chỉ định liên kết cơ bản của cài đặt Bitwarden tại chỗ của bạn." }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "Môi trường tùy chỉnh" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "Đăng xuất" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Phiên đăng nhập của bạn đã hết hạn." }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "Trợ giúp" }, @@ -2474,6 +2492,12 @@ "important": { "message": "Important:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "Your master password cannot be recovered if you forget it!" }, diff --git a/apps/desktop/src/locales/zh_CN/messages.json b/apps/desktop/src/locales/zh_CN/messages.json index 22b96d6e4b6..8a80875bbf3 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "指定您本地托管的 Bitwarden 安装的基础 URL。" }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "自定义环境" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "已注销" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "您的登录会话已过期。" }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "帮助" }, @@ -2474,6 +2492,12 @@ "important": { "message": "重要事项:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "主密码忘记后,将无法恢复!" }, diff --git a/apps/desktop/src/locales/zh_TW/messages.json b/apps/desktop/src/locales/zh_TW/messages.json index 099865217c0..47bcaae70e8 100644 --- a/apps/desktop/src/locales/zh_TW/messages.json +++ b/apps/desktop/src/locales/zh_TW/messages.json @@ -695,6 +695,15 @@ "selfHostedEnvironmentFooter": { "message": "指定您本地托管的 Bitwarden 安裝之基礎 URL。" }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, "customEnvironment": { "message": "自訂環境" }, @@ -743,6 +752,9 @@ "loggedOut": { "message": "已登出" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "您的登入會話已過期。" }, @@ -1212,6 +1224,12 @@ } } }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "help": { "message": "說明" }, @@ -2474,6 +2492,12 @@ "important": { "message": "重要:" }, + "accessTokenUnableToBeDecrypted": { + "message": "You have been logged out because your access token could not be decrypted. Please log in again to resolve this issue." + }, + "refreshTokenSecureStorageRetrievalFailure": { + "message": "You have been logged out because your refresh token could not be retrieved. Please log in again to resolve this issue." + }, "masterPasswordHint": { "message": "如果您忘記主密碼,沒有復原的方法!" }, diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index 59a306189a5..738f053de73 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -3,23 +3,13 @@ import * as path from "path"; import { app } from "electron"; import { Subject, firstValueFrom } from "rxjs"; -import { LogoutReason } from "@bitwarden/auth/common"; -import { TokenService as TokenServiceAbstraction } from "@bitwarden/common/auth/abstractions/token.service"; import { AccountServiceImplementation } from "@bitwarden/common/auth/services/account.service"; -import { TokenService } from "@bitwarden/common/auth/services/token.service"; import { ClientType } from "@bitwarden/common/enums"; -import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; -import { KeyGenerationService as KeyGenerationServiceAbstraction } from "@bitwarden/common/platform/abstractions/key-generation.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { DefaultBiometricStateService } from "@bitwarden/common/platform/biometrics/biometric-state.service"; -import { StateFactory } from "@bitwarden/common/platform/factories/state-factory"; import { Message, MessageSender } from "@bitwarden/common/platform/messaging"; // eslint-disable-next-line no-restricted-imports -- For dependency creation import { SubjectMessageSender } from "@bitwarden/common/platform/messaging/internal"; -import { GlobalState } from "@bitwarden/common/platform/models/domain/global-state"; -import { EncryptServiceImplementation } from "@bitwarden/common/platform/services/cryptography/encrypt.service.implementation"; import { DefaultEnvironmentService } from "@bitwarden/common/platform/services/default-environment.service"; -import { KeyGenerationService } from "@bitwarden/common/platform/services/key-generation.service"; import { MemoryStorageService } from "@bitwarden/common/platform/services/memory-storage.service"; import { MigrationBuilderService } from "@bitwarden/common/platform/services/migration-builder.service"; import { MigrationRunner } from "@bitwarden/common/platform/services/migration-runner"; @@ -32,7 +22,6 @@ import { DefaultSingleUserStateProvider } from "@bitwarden/common/platform/state import { DefaultStateProvider } from "@bitwarden/common/platform/state/implementations/default-state.provider"; import { StateEventRegistrarService } from "@bitwarden/common/platform/state/state-event-registrar.service"; import { MemoryStorageService as MemoryStorageServiceForStateProviders } from "@bitwarden/common/platform/state/storage/memory-storage.service"; -import { UserId } from "@bitwarden/common/types/guid"; /* eslint-enable import/no-restricted-paths */ import { DesktopAutofillSettingsService } from "./autofill/services/desktop-autofill-settings.service"; @@ -43,18 +32,13 @@ import { PowerMonitorMain } from "./main/power-monitor.main"; import { TrayMain } from "./main/tray.main"; import { UpdaterMain } from "./main/updater.main"; import { WindowMain } from "./main/window.main"; -import { Account } from "./models/account"; import { BiometricsService, BiometricsServiceAbstraction } from "./platform/main/biometric/index"; import { ClipboardMain } from "./platform/main/clipboard.main"; import { DesktopCredentialStorageListener } from "./platform/main/desktop-credential-storage-listener"; -import { MainCryptoFunctionService } from "./platform/main/main-crypto-function.service"; import { DesktopSettingsService } from "./platform/services/desktop-settings.service"; import { ElectronLogMainService } from "./platform/services/electron-log.main.service"; -import { ELECTRON_SUPPORTS_SECURE_STORAGE } from "./platform/services/electron-platform-utils.service"; -import { ElectronStateService } from "./platform/services/electron-state.service"; import { ElectronStorageService } from "./platform/services/electron-storage.service"; import { I18nMainService } from "./platform/services/i18n.main.service"; -import { IllegalSecureStorageService } from "./platform/services/illegal-secure-storage.service"; import { ElectronMainMessagingService } from "./services/electron-main-messaging.service"; import { isMacAppStore } from "./utils"; @@ -65,15 +49,10 @@ export class Main { memoryStorageService: MemoryStorageService; memoryStorageForStateProviders: MemoryStorageServiceForStateProviders; messagingService: MessageSender; - stateService: StateService; environmentService: DefaultEnvironmentService; - mainCryptoFunctionService: MainCryptoFunctionService; desktopCredentialStorageListener: DesktopCredentialStorageListener; desktopSettingsService: DesktopSettingsService; migrationRunner: MigrationRunner; - tokenService: TokenServiceAbstraction; - keyGenerationService: KeyGenerationServiceAbstraction; - encryptService: EncryptService; windowMain: WindowMain; messagingMain: MessagingMain; @@ -162,31 +141,6 @@ export class Main { this.environmentService = new DefaultEnvironmentService(stateProvider, accountService); - this.mainCryptoFunctionService = new MainCryptoFunctionService(); - this.mainCryptoFunctionService.init(); - - this.keyGenerationService = new KeyGenerationService(this.mainCryptoFunctionService); - - this.encryptService = new EncryptServiceImplementation( - this.mainCryptoFunctionService, - this.logService, - true, // log mac failures - ); - - // Note: secure storage service is not available and should not be called in the main background process. - const illegalSecureStorageService = new IllegalSecureStorageService(); - - this.tokenService = new TokenService( - singleUserStateProvider, - globalStateProvider, - ELECTRON_SUPPORTS_SECURE_STORAGE, - illegalSecureStorageService, - this.keyGenerationService, - this.encryptService, - this.logService, - async (logoutReason: LogoutReason, userId?: UserId) => {}, - ); - this.migrationRunner = new MigrationRunner( this.storageService, this.logService, @@ -194,21 +148,6 @@ export class Main { ClientType.Desktop, ); - // TODO: this state service will have access to on disk storage, but not in memory storage. - // If we could get this to work using the stateService singleton that the rest of the app uses we could save - // ourselves from some hacks, like having to manually update the app menu vs. the menu subscribing to events. - this.stateService = new ElectronStateService( - this.storageService, - null, - this.memoryStorageService, - this.logService, - new StateFactory(GlobalState, Account), - accountService, // will not broadcast logouts. This is a hack until we can remove messaging dependency - this.environmentService, - this.tokenService, - this.migrationRunner, - ); - this.desktopSettingsService = new DesktopSettingsService(stateProvider); const biometricStateService = new DefaultBiometricStateService(stateProvider); @@ -220,7 +159,7 @@ export class Main { (arg) => this.processDeepLink(arg), (win) => this.trayMain.setupWindowListeners(win), ); - this.messagingMain = new MessagingMain(this, this.stateService, this.desktopSettingsService); + this.messagingMain = new MessagingMain(this, this.desktopSettingsService); this.updaterMain = new UpdaterMain(this.i18nService, this.windowMain); this.trayMain = new TrayMain(this.windowMain, this.i18nService, this.desktopSettingsService); @@ -231,7 +170,13 @@ export class Main { ); messageSubject.asObservable().subscribe((message) => { - this.messagingMain.onMessage(message); + void this.messagingMain.onMessage(message).catch((err) => { + this.logService.error( + "Error while handling message", + message?.command ?? "Unknown command", + err, + ); + }); }); this.powerMonitorMain = new PowerMonitorMain(this.messagingService); @@ -299,7 +244,7 @@ export class Main { await this.updaterMain.init(); const [browserIntegrationEnabled, ddgIntegrationEnabled] = await Promise.all([ - this.stateService.getEnableBrowserIntegration(), + firstValueFrom(this.desktopSettingsService.browserIntegrationEnabled$), firstValueFrom(this.desktopAutofillSettingsService.enableDuckDuckGoBrowserIntegration$), ]); diff --git a/apps/desktop/src/main/messaging.main.ts b/apps/desktop/src/main/messaging.main.ts index a9f80b7d207..68b1597ac45 100644 --- a/apps/desktop/src/main/messaging.main.ts +++ b/apps/desktop/src/main/messaging.main.ts @@ -2,8 +2,7 @@ import * as fs from "fs"; import * as path from "path"; import { app, ipcMain } from "electron"; - -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; +import { firstValueFrom } from "rxjs"; import { Main } from "../main"; import { DesktopSettingsService } from "../platform/services/desktop-settings.service"; @@ -17,7 +16,6 @@ export class MessagingMain { constructor( private main: Main, - private stateService: StateService, private desktopSettingsService: DesktopSettingsService, ) {} @@ -29,10 +27,13 @@ export class MessagingMain { const loginSettings = app.getLoginItemSettings(); await this.desktopSettingsService.setOpenAtLogin(loginSettings.openAtLogin); } - ipcMain.on("messagingService", async (event: any, message: any) => this.onMessage(message)); + ipcMain.on( + "messagingService", + async (event: any, message: any) => await this.onMessage(message), + ); } - onMessage(message: any) { + async onMessage(message: any) { switch (message.command) { case "scheduleNextSync": this.scheduleNextSync(); @@ -44,13 +45,14 @@ export class MessagingMain { this.updateTrayMenu(message.updateRequest); break; case "minimizeOnCopy": - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.stateService.getMinimizeOnCopyToClipboard().then((shouldMinimize) => { - if (shouldMinimize && this.main.windowMain.win !== null) { + { + const shouldMinimizeOnCopy = await firstValueFrom( + this.desktopSettingsService.minimizeOnCopy$, + ); + if (shouldMinimizeOnCopy && this.main.windowMain.win !== null) { this.main.windowMain.win.minimize(); } - }); + } break; case "showTray": this.main.trayMain.showTray(); diff --git a/apps/desktop/src/platform/services/desktop-settings.service.ts b/apps/desktop/src/platform/services/desktop-settings.service.ts index 09ddad07c1b..ff29ce50a0f 100644 --- a/apps/desktop/src/platform/services/desktop-settings.service.ts +++ b/apps/desktop/src/platform/services/desktop-settings.service.ts @@ -4,7 +4,9 @@ import { DESKTOP_SETTINGS_DISK, KeyDefinition, StateProvider, + UserKeyDefinition, } from "@bitwarden/common/platform/state"; +import { UserId } from "@bitwarden/common/types/guid"; import { WindowState } from "../models/domain/window-state"; @@ -48,6 +50,27 @@ const ALWAYS_ON_TOP_KEY = new KeyDefinition(DESKTOP_SETTINGS_DISK, "alw deserializer: (b) => b, }); +const BROWSER_INTEGRATION_ENABLED = new KeyDefinition( + DESKTOP_SETTINGS_DISK, + "browserIntegrationEnabled", + { + deserializer: (b) => b, + }, +); + +const BROWSER_INTEGRATION_FINGERPRINT_ENABLED = new KeyDefinition( + DESKTOP_SETTINGS_DISK, + "browserIntegrationFingerprintEnabled", + { + deserializer: (b) => b, + }, +); + +const MINIMIZE_ON_COPY = new UserKeyDefinition(DESKTOP_SETTINGS_DISK, "minimizeOnCopy", { + deserializer: (b) => b, + clearOn: [], // User setting, no need to clear +}); + /** * Various settings for controlling application behavior specific to the desktop client. */ @@ -61,41 +84,68 @@ export class DesktopSettingsService { /** * Tha applications setting for whether or not to close the application into the system tray. */ - closeToTray$ = this.closeToTrayState.state$.pipe(map((value) => value ?? false)); + closeToTray$ = this.closeToTrayState.state$.pipe(map(Boolean)); private readonly minimizeToTrayState = this.stateProvider.getGlobal(MINIMIZE_TO_TRAY_KEY); /** * The application setting for whether or not to minimize the applicaiton into the system tray. */ - minimizeToTray$ = this.minimizeToTrayState.state$.pipe(map((value) => value ?? false)); + minimizeToTray$ = this.minimizeToTrayState.state$.pipe(map(Boolean)); private readonly startToTrayState = this.stateProvider.getGlobal(START_TO_TRAY_KEY); /** * The application setting for whether or not to start the application into the system tray. */ - startToTray$ = this.startToTrayState.state$.pipe(map((value) => value ?? false)); + startToTray$ = this.startToTrayState.state$.pipe(map(Boolean)); private readonly trayEnabledState = this.stateProvider.getGlobal(TRAY_ENABLED_KEY); /** * Whether or not the system tray has been enabled. */ - trayEnabled$ = this.trayEnabledState.state$.pipe(map((value) => value ?? false)); + trayEnabled$ = this.trayEnabledState.state$.pipe(map(Boolean)); private readonly openAtLoginState = this.stateProvider.getGlobal(OPEN_AT_LOGIN_KEY); /** * The application setting for whether or not the application should open at system login. */ - openAtLogin$ = this.openAtLoginState.state$.pipe(map((value) => value ?? false)); + openAtLogin$ = this.openAtLoginState.state$.pipe(map(Boolean)); private readonly alwaysShowDockState = this.stateProvider.getGlobal(ALWAYS_SHOW_DOCK_KEY); /** * The application setting for whether or not the application should show up in the dock. */ - alwaysShowDock$ = this.alwaysShowDockState.state$.pipe(map((value) => value ?? false)); + alwaysShowDock$ = this.alwaysShowDockState.state$.pipe(map(Boolean)); private readonly alwaysOnTopState = this.stateProvider.getGlobal(ALWAYS_ON_TOP_KEY); - alwaysOnTop$ = this.alwaysOnTopState.state$.pipe(map((value) => value ?? false)); + alwaysOnTop$ = this.alwaysOnTopState.state$.pipe(map(Boolean)); + + private readonly browserIntegrationEnabledState = this.stateProvider.getGlobal( + BROWSER_INTEGRATION_ENABLED, + ); + + /** + * The application setting for whether or not the browser integration is enabled. + */ + browserIntegrationEnabled$ = this.browserIntegrationEnabledState.state$.pipe(map(Boolean)); + + private readonly browserIntegrationFingerprintEnabledState = this.stateProvider.getGlobal( + BROWSER_INTEGRATION_FINGERPRINT_ENABLED, + ); + + /** + * The application setting for whether or not the fingerprint should be verified before browser communication. + */ + browserIntegrationFingerprintEnabled$ = + this.browserIntegrationFingerprintEnabledState.state$.pipe(map(Boolean)); + + private readonly minimizeOnCopyState = this.stateProvider.getActive(MINIMIZE_ON_COPY); + + /** + * The active users setting for whether or not the application should minimize itself + * when a value is copied to the clipboard. + */ + minimizeOnCopy$ = this.minimizeOnCopyState.state$.pipe(map(Boolean)); constructor(private stateProvider: StateProvider) { this.window$ = this.windowState.state$.pipe( @@ -177,4 +227,32 @@ export class DesktopSettingsService { async setAlwaysOnTop(value: boolean) { await this.alwaysOnTopState.update(() => value); } + + /** + * Sets a setting for whether or not the browser integration has been enabled. + * @param value `true` if the integration with the browser extension is enabled, + * `false` if it is not. + */ + async setBrowserIntegrationEnabled(value: boolean) { + await this.browserIntegrationEnabledState.update(() => value); + } + + /** + * Sets a setting for whether or not the browser fingerprint should be verified before + * communication with the browser integration should be done. + * @param value `true` if the fingerprint should be validated before use, `false` if it should not. + */ + async setBrowserIntegrationFingerprintEnabled(value: boolean) { + await this.browserIntegrationFingerprintEnabledState.update(() => value); + } + + /** + * Sets the minimize on copy value for the current user. + * @param value `true` if the application should minimize when a value is copied, + * `false` if it should not. + * @param userId The user id of the user to update the setting for. + */ + async setMinimizeOnCopy(value: boolean, userId: UserId) { + await this.stateProvider.getUser(userId, MINIMIZE_ON_COPY).update(() => value); + } } diff --git a/apps/desktop/src/services/native-messaging.service.ts b/apps/desktop/src/services/native-messaging.service.ts index 9abd3b635ad..8dc0a57c99c 100644 --- a/apps/desktop/src/services/native-messaging.service.ts +++ b/apps/desktop/src/services/native-messaging.service.ts @@ -10,7 +10,6 @@ import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.se import { LogService } from "@bitwarden/common/platform/abstractions/log.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 { BiometricStateService } from "@bitwarden/common/platform/biometrics/biometric-state.service"; import { KeySuffixOptions } from "@bitwarden/common/platform/enums"; import { Utils } from "@bitwarden/common/platform/misc/utils"; @@ -23,6 +22,7 @@ import { BrowserSyncVerificationDialogComponent } from "../app/components/browse import { LegacyMessage } from "../models/native-messaging/legacy-message"; import { LegacyMessageWrapper } from "../models/native-messaging/legacy-message-wrapper"; import { Message } from "../models/native-messaging/message"; +import { DesktopSettingsService } from "../platform/services/desktop-settings.service"; import { NativeMessageHandlerService } from "./native-message-handler.service"; @@ -40,7 +40,7 @@ export class NativeMessagingService { private platformUtilService: PlatformUtilsService, private logService: LogService, private messagingService: MessagingService, - private stateService: StateService, + private desktopSettingService: DesktopSettingsService, private biometricStateService: BiometricStateService, private nativeMessageHandler: NativeMessageHandlerService, private dialogService: DialogService, @@ -78,7 +78,7 @@ export class NativeMessagingService { return; } - if (await this.stateService.getEnableBrowserIntegrationFingerprint()) { + if (await firstValueFrom(this.desktopSettingService.browserIntegrationFingerprintEnabled$)) { ipc.platform.nativeMessaging.sendMessage({ command: "verifyFingerprint", appId: appId, diff --git a/apps/web/src/app/admin-console/common/base.events.component.ts b/apps/web/src/app/admin-console/common/base.events.component.ts index e14bb62a35d..12c051271e1 100644 --- a/apps/web/src/app/admin-console/common/base.events.component.ts +++ b/apps/web/src/app/admin-console/common/base.events.component.ts @@ -97,19 +97,15 @@ export abstract class BaseEventsComponent { this.loading = true; let events: EventView[] = []; let promise: Promise; - try { - promise = this.loadAndParseEvents( - dates[0], - dates[1], - clearExisting ? null : this.continuationToken, - ); + promise = this.loadAndParseEvents( + dates[0], + dates[1], + clearExisting ? null : this.continuationToken, + ); - const result = await promise; - this.continuationToken = result.continuationToken; - events = result.events; - } catch (e) { - this.logService.error(`Handled exception: ${e}`); - } + const result = await promise; + this.continuationToken = result.continuationToken; + events = result.events; if (!clearExisting && this.events != null && this.events.length > 0) { this.events = this.events.concat(events); diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.html index 063a8759e6f..69b81ae5571 100644 --- a/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.html +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.html @@ -1,7 +1,5 @@
- - {{ "editPolicy" | i18n }} - {{ policy.name | i18n }} - +
+
- -

+

- {{ "loading" | i18n }} + {{ "loading" | i18n }}

-
-
- +
+

+ {{ name }} +

+

{{ "acceptEmergencyAccess" | i18n }}

+
+
diff --git a/apps/web/src/app/auth/settings/account/change-avatar-dialog.component.html b/apps/web/src/app/auth/settings/account/change-avatar-dialog.component.html new file mode 100644 index 00000000000..fd65192beea --- /dev/null +++ b/apps/web/src/app/auth/settings/account/change-avatar-dialog.component.html @@ -0,0 +1,61 @@ + + +
+ + {{ "loading" | i18n }} +
+ + {{ error }} + +

{{ "pickAnAvatarColor" | i18n }}

+
+ + + + + + + + + + +
+
+ + + + +
diff --git a/apps/web/src/app/auth/settings/account/change-avatar.component.ts b/apps/web/src/app/auth/settings/account/change-avatar-dialog.component.ts similarity index 78% rename from apps/web/src/app/auth/settings/account/change-avatar.component.ts rename to apps/web/src/app/auth/settings/account/change-avatar-dialog.component.ts index bbcbaf6820f..6946f8b94bb 100644 --- a/apps/web/src/app/auth/settings/account/change-avatar.component.ts +++ b/apps/web/src/app/auth/settings/account/change-avatar-dialog.component.ts @@ -1,11 +1,10 @@ +import { DIALOG_DATA, DialogConfig, DialogRef } from "@angular/cdk/dialog"; import { Component, ElementRef, - EventEmitter, - Input, + Inject, OnDestroy, OnInit, - Output, ViewChild, ViewEncapsulation, } from "@angular/core"; @@ -14,20 +13,20 @@ import { BehaviorSubject, debounceTime, firstValueFrom, Subject, takeUntil } fro import { AvatarService } from "@bitwarden/common/auth/abstractions/avatar.service"; import { ProfileResponse } from "@bitwarden/common/models/response/profile.response"; 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"; import { Utils } from "@bitwarden/common/platform/misc/utils"; +import { DialogService } from "@bitwarden/components"; + +type ChangeAvatarDialogData = { + profile: ProfileResponse; +}; @Component({ - selector: "app-change-avatar", - templateUrl: "change-avatar.component.html", + templateUrl: "change-avatar-dialog.component.html", encapsulation: ViewEncapsulation.None, }) -export class ChangeAvatarComponent implements OnInit, OnDestroy { - @Input() profile: ProfileResponse; - - @Output() changeColor: EventEmitter = new EventEmitter(); - @Output() onSaved = new EventEmitter(); +export class ChangeAvatarDialogComponent implements OnInit, OnDestroy { + profile: ProfileResponse; @ViewChild("colorPicker") colorPickerElement: ElementRef; @@ -52,11 +51,14 @@ export class ChangeAvatarComponent implements OnInit, OnDestroy { private destroy$ = new Subject(); constructor( + @Inject(DIALOG_DATA) protected data: ChangeAvatarDialogData, private i18nService: I18nService, private platformUtilsService: PlatformUtilsService, - private logService: LogService, private avatarService: AvatarService, - ) {} + private dialogRef: DialogRef, + ) { + this.profile = data.profile; + } async ngOnInit() { //localize the default colors @@ -88,20 +90,15 @@ export class ChangeAvatarComponent implements OnInit, OnDestroy { Utils.stringToColor(this.profile.name.toString()); } - async submit() { - try { - if (Utils.validateHexColor(this.currentSelection) || this.currentSelection == null) { - await this.avatarService.setAvatarColor(this.currentSelection); - this.changeColor.emit(this.currentSelection); - this.platformUtilsService.showToast("success", null, this.i18nService.t("avatarUpdated")); - } else { - this.platformUtilsService.showToast("error", null, this.i18nService.t("errorOccurred")); - } - } catch (e) { - this.logService.error(e); + submit = async () => { + if (Utils.validateHexColor(this.currentSelection) || this.currentSelection == null) { + await this.avatarService.setAvatarColor(this.currentSelection); + this.dialogRef.close(); + this.platformUtilsService.showToast("success", null, this.i18nService.t("avatarUpdated")); + } else { this.platformUtilsService.showToast("error", null, this.i18nService.t("errorOccurred")); } - } + }; async ngOnDestroy() { this.destroy$.next(); @@ -131,6 +128,10 @@ export class ChangeAvatarComponent implements OnInit, OnDestroy { } } } + + static open(dialogService: DialogService, config: DialogConfig) { + return dialogService.open(ChangeAvatarDialogComponent, config); + } } export class NamedAvatarColor { diff --git a/apps/web/src/app/auth/settings/account/change-avatar.component.html b/apps/web/src/app/auth/settings/account/change-avatar.component.html deleted file mode 100644 index 3a974241d5f..00000000000 --- a/apps/web/src/app/auth/settings/account/change-avatar.component.html +++ /dev/null @@ -1,84 +0,0 @@ - - - diff --git a/apps/web/src/app/auth/settings/account/profile.component.html b/apps/web/src/app/auth/settings/account/profile.component.html index db6ab2b6588..4464824c63e 100644 --- a/apps/web/src/app/auth/settings/account/profile.component.html +++ b/apps/web/src/app/auth/settings/account/profile.component.html @@ -23,6 +23,7 @@ - diff --git a/apps/web/src/app/auth/settings/account/profile.component.ts b/apps/web/src/app/auth/settings/account/profile.component.ts index 64c5687c0b8..33463b689c9 100644 --- a/apps/web/src/app/auth/settings/account/profile.component.ts +++ b/apps/web/src/app/auth/settings/account/profile.component.ts @@ -1,28 +1,25 @@ -import { ViewChild, ViewContainerRef, Component, OnDestroy, OnInit } from "@angular/core"; +import { Component, OnInit } from "@angular/core"; import { FormControl, FormGroup } from "@angular/forms"; import { Subject, takeUntil } from "rxjs"; -import { ModalService } from "@bitwarden/angular/services/modal.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { UpdateProfileRequest } from "@bitwarden/common/auth/models/request/update-profile.request"; import { ProfileResponse } from "@bitwarden/common/models/response/profile.response"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; +import { DialogService } from "@bitwarden/components"; -import { ChangeAvatarComponent } from "./change-avatar.component"; +import { ChangeAvatarDialogComponent } from "./change-avatar-dialog.component"; @Component({ selector: "app-profile", templateUrl: "profile.component.html", }) -export class ProfileComponent implements OnInit, OnDestroy { +export class ProfileComponent implements OnInit { loading = true; profile: ProfileResponse; fingerprintMaterial: string; - - @ViewChild("avatarModalTemplate", { read: ViewContainerRef, static: true }) - avatarModalRef: ViewContainerRef; private destroy$ = new Subject(); protected formGroup = new FormGroup({ @@ -35,7 +32,7 @@ export class ProfileComponent implements OnInit, OnDestroy { private i18nService: I18nService, private platformUtilsService: PlatformUtilsService, private stateService: StateService, - private modalService: ModalService, + private dialogService: DialogService, ) {} async ngOnInit() { @@ -53,24 +50,17 @@ export class ProfileComponent implements OnInit, OnDestroy { }); } + openChangeAvatar = async () => { + ChangeAvatarDialogComponent.open(this.dialogService, { + data: { profile: this.profile }, + }); + }; + async ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } - openChangeAvatar = async () => { - const modalOpened = await this.modalService.openViewRef( - ChangeAvatarComponent, - this.avatarModalRef, - (modal) => { - modal.profile = this.profile; - modal.changeColor.pipe(takeUntil(this.destroy$)).subscribe(() => { - modalOpened[0].close(); - }); - }, - ); - }; - submit = async () => { const request = new UpdateProfileRequest( this.formGroup.get("name").value, diff --git a/apps/web/src/app/auth/settings/two-factor-authenticator.component.html b/apps/web/src/app/auth/settings/two-factor-authenticator.component.html index e17714cca79..a7efaed731e 100644 --- a/apps/web/src/app/auth/settings/two-factor-authenticator.component.html +++ b/apps/web/src/app/auth/settings/two-factor-authenticator.component.html @@ -1,109 +1,80 @@ - +
+ + {{ "twoStepLogin" | i18n }} + {{ "authenticatorAppTitle" | i18n }} + + + + Authenticator app logo +

{{ "twoStepAuthenticatorDesc" | i18n }}

+

+ 1. {{ "twoStepAuthenticatorDownloadApp" | i18n }} +

+
+ + +

{{ "twoStepLoginProviderEnabled" | i18n }}

+ {{ "twoStepAuthenticatorReaddDesc" | i18n }} +
+ Authenticator app logo +

{{ "twoStepAuthenticatorNeedApp" | i18n }}

+
+ +

{{ "twoStepAuthenticatorAppsRecommended" | i18n }}

+

+ 2. {{ "twoStepAuthenticatorScanCode" | i18n }} +

+
+

+
+ {{ key }} +

+ + + 3. {{ "twoStepAuthenticatorEnterCode" | i18n }} + + + +
+ + + + +
+
diff --git a/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts b/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts index 88b695eb728..17cdbb595f7 100644 --- a/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts +++ b/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts @@ -1,4 +1,6 @@ -import { Component, OnDestroy, OnInit } from "@angular/core"; +import { DIALOG_DATA, DialogConfig, DialogRef } from "@angular/cdk/dialog"; +import { Component, EventEmitter, Inject, OnDestroy, OnInit, Output } from "@angular/core"; +import { FormControl, FormGroup, Validators } from "@angular/forms"; import { firstValueFrom, map } from "rxjs"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; @@ -38,15 +40,21 @@ export class TwoFactorAuthenticatorComponent extends TwoFactorBaseComponent implements OnInit, OnDestroy { + @Output() onChangeStatus = new EventEmitter(); type = TwoFactorProviderType.Authenticator; key: string; - token: string; formPromise: Promise; override componentName = "app-two-factor-authenticator"; private qrScript: HTMLScriptElement; + protected formGroup = new FormGroup({ + token: new FormControl(null, [Validators.required]), + }); + constructor( + @Inject(DIALOG_DATA) protected data: AuthResponse, + private dialogRef: DialogRef, apiService: ApiService, i18nService: I18nService, userVerificationService: UserVerificationService, @@ -68,8 +76,9 @@ export class TwoFactorAuthenticatorComponent this.qrScript.async = true; } - ngOnInit() { + async ngOnInit() { window.document.body.appendChild(this.qrScript); + await this.auth(this.data); } ngOnDestroy() { @@ -81,17 +90,24 @@ export class TwoFactorAuthenticatorComponent return this.processResponse(authResponse.response); } - submit() { + submit = async () => { if (this.enabled) { - return super.disable(this.formPromise); + await this.disableAuthentication(this.formPromise); + this.onChangeStatus.emit(this.enabled); + this.close(); } else { - return this.enable(); + await this.enable(); + this.onChangeStatus.emit(this.enabled); } + }; + + private async disableAuthentication(promise: Promise) { + return super.disable(promise); } protected async enable() { const request = await this.buildRequestModel(UpdateTwoFactorAuthenticatorRequest); - request.token = this.token; + request.token = this.formGroup.value.token; request.key = this.key; return super.enable(async () => { @@ -102,7 +118,7 @@ export class TwoFactorAuthenticatorComponent } private async processResponse(response: TwoFactorAuthenticatorResponse) { - this.token = null; + this.formGroup.get("token").setValue(null); this.enabled = response.enabled; this.key = response.key; const email = await firstValueFrom( @@ -121,4 +137,15 @@ export class TwoFactorAuthenticatorComponent }); }, 100); } + + close = () => { + this.dialogRef.close(this.enabled); + }; + + static open( + dialogService: DialogService, + config: DialogConfig>, + ) { + return dialogService.open(TwoFactorAuthenticatorComponent, config); + } } diff --git a/apps/web/src/app/auth/settings/two-factor-setup.component.html b/apps/web/src/app/auth/settings/two-factor-setup.component.html index a20bb345664..28baf72f885 100644 --- a/apps/web/src/app/auth/settings/two-factor-setup.component.html +++ b/apps/web/src/app/auth/settings/two-factor-setup.component.html @@ -80,7 +80,6 @@ - diff --git a/apps/web/src/app/auth/settings/two-factor-setup.component.ts b/apps/web/src/app/auth/settings/two-factor-setup.component.ts index dd4c69aa277..34a7e32089f 100644 --- a/apps/web/src/app/auth/settings/two-factor-setup.component.ts +++ b/apps/web/src/app/auth/settings/two-factor-setup.component.ts @@ -34,8 +34,6 @@ import { TwoFactorYubiKeyComponent } from "./two-factor-yubikey.component"; templateUrl: "two-factor-setup.component.html", }) export class TwoFactorSetupComponent implements OnInit, OnDestroy { - @ViewChild("authenticatorTemplate", { read: ViewContainerRef, static: true }) - authenticatorModalRef: ViewContainerRef; @ViewChild("yubikeyTemplate", { read: ViewContainerRef, static: true }) yubikeyModalRef: ViewContainerRef; @ViewChild("duoTemplate", { read: ViewContainerRef, static: true }) duoModalRef: ViewContainerRef; @@ -137,12 +135,11 @@ export class TwoFactorSetupComponent implements OnInit, OnDestroy { if (!result) { return; } - const authComp = await this.openModal( - this.authenticatorModalRef, - TwoFactorAuthenticatorComponent, + const authComp: DialogRef = TwoFactorAuthenticatorComponent.open( + this.dialogService, + { data: result }, ); - await authComp.auth(result); - authComp.onUpdated.pipe(takeUntil(this.destroy$)).subscribe((enabled: boolean) => { + authComp.componentInstance.onChangeStatus.subscribe((enabled: boolean) => { this.updateStatus(enabled, TwoFactorProviderType.Authenticator); }); break; diff --git a/apps/web/src/app/billing/shared/payment.component.html b/apps/web/src/app/billing/shared/payment.component.html index db6f4f311b1..d76de65e507 100644 --- a/apps/web/src/app/billing/shared/payment.component.html +++ b/apps/web/src/app/billing/shared/payment.component.html @@ -1,163 +1,113 @@ -
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
- -
-
-
- Visa, MasterCard, Discover, AmEx, JCB, Diners Club, UnionPay -
-
- -
-
-
-
- - +
+ + + + + {{ "creditCard" | i18n }} - - + + + + + {{ "bankAccount" | i18n }} + + + PayPal + + + + + {{ "accountCredit" | i18n }} + + +
+ +
+
+ +
+
+
+ Visa, MasterCard, Discover, AmEx, JCB, Diners Club, UnionPay +
+
+ +
+
+
+
+ + + + +
+
-
-
- - - - {{ "verifyBankAccountInitialDesc" | i18n }} {{ "verifyBankAccountFailureWarning" | i18n }} - -
-
- - + + + + {{ "verifyBankAccountInitialDesc" | i18n }} {{ "verifyBankAccountFailureWarning" | i18n }} + +
+ + {{ "routingNumber" | i18n }} + + + + {{ "accountNumber" | i18n }} + + + + {{ "accountHolderName" | i18n }} + + + + + {{ "bankAccountType" | i18n }} + + + + + +
-
- - + + +
+
+ {{ "paypalClickSubmit" | i18n }}
-
- - -
-
- - -
-
-
- -
-
- {{ "paypalClickSubmit" | i18n }} -
-
- - - {{ "makeSureEnoughCredit" | i18n }} - - + + + + {{ "makeSureEnoughCredit" | i18n }} + + +
diff --git a/apps/web/src/app/billing/shared/payment.component.ts b/apps/web/src/app/billing/shared/payment.component.ts index 652bed7801d..95b25a74e4e 100644 --- a/apps/web/src/app/billing/shared/payment.component.ts +++ b/apps/web/src/app/billing/shared/payment.component.ts @@ -1,4 +1,5 @@ import { Component, Input, OnDestroy, OnInit } from "@angular/core"; +import { FormControl, FormGroup, Validators } from "@angular/forms"; import { Subject, takeUntil } from "rxjs"; import { AbstractThemingService } from "@bitwarden/angular/platform/services/theming/theming.service.abstraction"; @@ -17,23 +18,34 @@ import { SharedModule } from "../../shared"; export class PaymentComponent implements OnInit, OnDestroy { @Input() showMethods = true; @Input() showOptions = true; - @Input() method = PaymentMethodType.Card; @Input() hideBank = false; @Input() hidePaypal = false; @Input() hideCredit = false; @Input() trialFlow = false; + @Input() + set method(value: PaymentMethodType) { + this._method = value; + this.paymentForm?.controls.method.setValue(value, { emitEvent: false }); + } + + get method(): PaymentMethodType { + return this._method; + } + private _method: PaymentMethodType = PaymentMethodType.Card; + private destroy$ = new Subject(); - - bank: any = { - routing_number: null, - account_number: null, - account_holder_name: null, - account_holder_type: "", - currency: "USD", - country: "US", - }; - + protected paymentForm = new FormGroup({ + method: new FormControl(this.method), + bank: new FormGroup({ + routing_number: new FormControl(null, [Validators.required]), + account_number: new FormControl(null, [Validators.required]), + account_holder_name: new FormControl(null, [Validators.required]), + account_holder_type: new FormControl("", [Validators.required]), + currency: new FormControl("USD"), + country: new FormControl("US"), + }), + }); paymentMethodType = PaymentMethodType; private btScript: HTMLScriptElement; @@ -85,7 +97,6 @@ export class PaymentComponent implements OnInit, OnDestroy { invalid: "is-invalid", }; } - async ngOnInit() { if (!this.showOptions) { this.hidePaypal = this.method !== PaymentMethodType.PayPal; @@ -97,6 +108,13 @@ export class PaymentComponent implements OnInit, OnDestroy { if (!this.hidePaypal) { window.document.head.appendChild(this.btScript); } + this.paymentForm + .get("method") + .valueChanges.pipe(takeUntil(this.destroy$)) + .subscribe((v) => { + this.method = v; + this.changeMethod(); + }); } ngOnDestroy() { @@ -140,7 +158,6 @@ export class PaymentComponent implements OnInit, OnDestroy { changeMethod() { this.btInstance = null; - if (this.method === PaymentMethodType.PayPal) { window.setTimeout(() => { (window as any).braintree.dropin.create( @@ -209,15 +226,17 @@ export class PaymentComponent implements OnInit, OnDestroy { } }); } else { - this.stripe.createToken("bank_account", this.bank).then((result: any) => { - if (result.error) { - reject(result.error.message); - } else if (result.token && result.token.id != null) { - resolve([result.token.id, this.method]); - } else { - reject(); - } - }); + this.stripe + .createToken("bank_account", this.paymentForm.get("bank").value) + .then((result: any) => { + if (result.error) { + reject(result.error.message); + } else if (result.token && result.token.id != null) { + resolve([result.token.id, this.method]); + } else { + reject(); + } + }); } } }); diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts index 8509e987eb4..77e51172269 100644 --- a/apps/web/src/app/oss-routing.module.ts +++ b/apps/web/src/app/oss-routing.module.ts @@ -128,15 +128,6 @@ const routes: Routes = [ component: AcceptOrganizationComponent, data: { titleId: "joinOrganization", doNotSaveUrl: false } satisfies DataProperties, }, - { - path: "accept-emergency", - canActivate: [deepLinkGuard()], - data: { titleId: "acceptEmergency", doNotSaveUrl: false } satisfies DataProperties, - loadComponent: () => - import("./auth/emergency-access/accept/accept-emergency.component").then( - (mod) => mod.AcceptEmergencyComponent, - ), - }, { path: "accept-families-for-enterprise", component: AcceptFamilySponsorshipComponent, @@ -223,6 +214,29 @@ const routes: Routes = [ titleId: "recoverAccountTwoStep", } satisfies DataProperties & AnonLayoutWrapperData, }, + { + path: "accept-emergency", + canActivate: [deepLinkGuard()], + children: [ + { + path: "", + data: { + pageTitle: "emergencyAccess", + titleId: "acceptEmergency", + doNotSaveUrl: false, + } satisfies DataProperties & AnonLayoutWrapperData, + loadComponent: () => + import("./auth/emergency-access/accept/accept-emergency.component").then( + (mod) => mod.AcceptEmergencyComponent, + ), + }, + { + path: "", + component: EnvironmentSelectorComponent, + outlet: "environment-selector", + }, + ], + }, ], }, { diff --git a/apps/web/src/app/settings/preferences.component.html b/apps/web/src/app/settings/preferences.component.html index 828c251989f..984ae7536a5 100644 --- a/apps/web/src/app/settings/preferences.component.html +++ b/apps/web/src/app/settings/preferences.component.html @@ -1,106 +1,77 @@ -

{{ "preferencesDesc" | i18n }}

-
-
-
- - - {{ - "vaultTimeoutPolicyWithActionInEffect" - | i18n: policy.timeout.hours : policy.timeout.minutes : (policy.action | i18n) - }} - - - {{ "vaultTimeoutPolicyInEffect" | i18n: policy.timeout.hours : policy.timeout.minutes }} - - - {{ "vaultTimeoutActionPolicyInEffect" | i18n: (policy.action | i18n) }} - - - - -
-
+

{{ "preferencesDesc" | i18n }}

+ + + + {{ + "vaultTimeoutPolicyWithActionInEffect" + | i18n: policy.timeout.hours : policy.timeout.minutes : (policy.action | i18n) + }} + + + {{ "vaultTimeoutPolicyInEffect" | i18n: policy.timeout.hours : policy.timeout.minutes }} + + + {{ "vaultTimeoutActionPolicyInEffect" | i18n: (policy.action | i18n) }} + + + + -
- -
+ {{ "vaultTimeoutAction" | i18n }} + - - -
-
{{ "lock" | i18n }} + {{ "vaultTimeoutActionLockDesc" | i18n }} + + - - -
-
+ {{ "logOut" | i18n }} + {{ "vaultTimeoutActionLogOutDesc" | i18n }} + +
-
-
-
-
- - - - -
- - {{ "languageDesc" | i18n }} -
-
-
-
-
- - + + {{ "language" | i18n }} + + + + + + + {{ "languageDesc" | i18n }} + + + + {{ "enableFavicon" | i18n }} + -
- {{ "faviconDesc" | i18n }} -
-
-
-
- - - {{ "themeDesc" | i18n }} -
-
-
- + + {{ "faviconDesc" | i18n }} + + + {{ "theme" | i18n }} + + + + {{ "themeDesc" | i18n }} + +
diff --git a/apps/web/src/app/settings/preferences.component.ts b/apps/web/src/app/settings/preferences.component.ts index a6443b453ef..1092a31d5c2 100644 --- a/apps/web/src/app/settings/preferences.component.ts +++ b/apps/web/src/app/settings/preferences.component.ts @@ -158,7 +158,7 @@ export class PreferencesComponent implements OnInit { this.form.setValue(initialFormValues, { emitEvent: false }); } - async submit() { + submit = async () => { if (!this.form.controls.vaultTimeout.valid) { this.platformUtilsService.showToast( "error", @@ -188,7 +188,7 @@ export class PreferencesComponent implements OnInit { this.i18nService.t("preferencesUpdated"), ); } - } + }; ngOnDestroy() { this.destroy$.next(); diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts index 79478d0cae6..b8cfbd34013 100644 --- a/apps/web/src/app/shared/loose-components.module.ts +++ b/apps/web/src/app/shared/loose-components.module.ts @@ -28,7 +28,7 @@ import { RegisterFormModule } from "../auth/register-form/register-form.module"; import { RemovePasswordComponent } from "../auth/remove-password.component"; import { SetPasswordComponent } from "../auth/set-password.component"; import { AccountComponent } from "../auth/settings/account/account.component"; -import { ChangeAvatarComponent } from "../auth/settings/account/change-avatar.component"; +import { ChangeAvatarDialogComponent } from "../auth/settings/account/change-avatar-dialog.component"; import { ChangeEmailComponent } from "../auth/settings/account/change-email.component"; import { DangerZoneComponent } from "../auth/settings/account/danger-zone.component"; import { DeauthorizeSessionsComponent } from "../auth/settings/account/deauthorize-sessions.component"; @@ -156,7 +156,7 @@ import { SharedModule } from "./shared.module"; PreferencesComponent, PremiumBadgeComponent, ProfileComponent, - ChangeAvatarComponent, + ChangeAvatarDialogComponent, ProvidersComponent, PurgeVaultComponent, RecoverDeleteComponent, @@ -230,7 +230,7 @@ import { SharedModule } from "./shared.module"; PreferencesComponent, PremiumBadgeComponent, ProfileComponent, - ChangeAvatarComponent, + ChangeAvatarDialogComponent, ProvidersComponent, PurgeVaultComponent, RecoverDeleteComponent, diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index 0bbcde1f493..0fb5cf25f96 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Uitgeteken" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "U aantekensessie het verstryk." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Kopieer UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Waarskuwing" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Selfhuisvesting" }, @@ -6838,19 +6880,19 @@ "message": "Use PIN" }, "useBiometrics": { - "message": "Use biometrics" + "message": "Gebruik biometrie" }, "enterVerificationCodeSentToEmail": { - "message": "Enter the verification code that was sent to your email." + "message": "Voer die bevestigingskakel wat na u e-pos gestuur is, in." }, "resendCode": { - "message": "Resend code" + "message": "Stuur kode weer" }, "memberColumnHeader": { - "message": "Member" + "message": "Lid" }, "groupSlashMemberColumnHeader": { - "message": "Group/Member" + "message": "Groep/lid" }, "selectGroupsAndMembers": { "message": "Kies groepe en lede" @@ -6859,7 +6901,7 @@ "message": "Kies groepe" }, "userPermissionOverrideHelperDesc": { - "message": "Permissions set for a member will replace permissions set by that member's group." + "message": "Ingestelde toestemmings vir ’n lid sal toestemmings deur daardie lid se groep vervang." }, "noMembersOrGroupsAdded": { "message": "Geen lede of groepe toegevoeg" @@ -7104,7 +7146,7 @@ "description": "Software Development Kit" }, "createAnAccount": { - "message": "Create an account" + "message": "Skep ’n rekening" }, "createSecret": { "message": "Skep ’n geheim" @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index 92d90de8ded..6285e62d23f 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "تم تسجيل الخروج" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "انتهت صَلاحِيَة جَلسة الدخول." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "تحذير" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "استضافة ذاتية" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index 71f7f573d65..fb661923657 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -582,11 +582,14 @@ "message": "Müraciət səviyyəsi" }, "accessing": { - "message": "Accessing" + "message": "Müraciət edilir" }, "loggedOut": { "message": "Çıxış edildi" }, + "loggedOutDesc": { + "message": "Hesabınızdan çıxış etmisiniz." + }, "loginExpired": { "message": "Seansın müddəti bitdi." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "UUID-ni kopyala" }, + "errorRefreshingAccessToken": { + "message": "Müraciət tokeni təzələmə xətası" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Təzələmə tokeni və ya API açarlar tapılmadı. Lütfən çıxış edib yenidən giriş etməyə çalışın." + }, "warning": { "message": "Xəbərdarlıq" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Faktura sinxr tokenini döndərmək, əvvəlki tokeni yararsız edəcək." }, + "selfHostedServer": { + "message": "öz-özünə sahiblik edən" + }, + "customEnvironment": { + "message": "Özəl mühit" + }, + "selfHostedBaseUrlHint": { + "message": "Şirkət daxili sahiblik edən Bitwarden quraşdırmasının təməl URL-sini qeyd edin. Nümunə: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Qabaqcıl konfiqurasiya üçün hər xidmətin təməl URL-sini müstəqil olaraq qeyd edə bilərsiniz." + }, + "selfHostedEnvFormInvalid": { + "message": "Təməl server URL-sini və ya ən azı bir özəl mühiti əlavə etməlisiniz." + }, + "apiUrl": { + "message": "API server URL-si" + }, + "webVaultUrl": { + "message": "Veb anbar server URL-si" + }, + "identityUrl": { + "message": "Kimlik server URL-si" + }, + "notificationsUrl": { + "message": "Bildiriş server URL-si" + }, + "iconsUrl": { + "message": "İkon server URL-si" + }, + "environmentSaved": { + "message": "Mühit URL-ləri saxlanıldı" + }, "selfHostingTitle": { "message": "Öz-özünə sahiblik etmə" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Bütün giriş tələbləri təsdiqləndi" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Güncəlllənən vergi məlumatı" + }, + "unverified": { + "message": "Doğrulanmayıb" + }, + "verified": { + "message": "Doğrulandı" } } diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 3127daed942..6cd2e5c77ea 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Вы выйшлі" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Тэрмін дзеяння вашага сеансу завяршыўся." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Скапіяваць UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Папярэджанне" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Змяненне токена плацежнай сінхранізацыі прывядзе да скасавання папярэдняга токена." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Уласнае размяшчэнне" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index a1be0b8fdf1..b114f9da8cc 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Бяхте отписани" }, + "loggedOutDesc": { + "message": "Бяхте отписан(а) от регистрацията си." + }, "loginExpired": { "message": "Сесията ви изтече." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Грешка при опресняването на идентификатора за достъп" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Няма намерен идентификатор за опресняване или ключове за ППИ. Опитайте да се отпишете и да се впишете отново." + }, "warning": { "message": "Внимание" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Пресъздаването на идентификатора за синхронизиране на плащанията ще направи така, че досегашният вече няма да работи." }, + "selfHostedServer": { + "message": "собствен хостинг" + }, + "customEnvironment": { + "message": "Специална среда" + }, + "selfHostedBaseUrlHint": { + "message": "Посочете базовия адрес на Вашата собствена инсталация на Битуорден. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "За по-детайлна настройка, може да укажете основния адрес на всяка услуга поотделно." + }, + "selfHostedEnvFormInvalid": { + "message": "Трябва да добавите или основния адрес на сървъра, или поне една специална среда." + }, + "apiUrl": { + "message": "Адрес на сървъра за ППИ" + }, + "webVaultUrl": { + "message": "Адрес на сървъра за трезора по уеб" + }, + "identityUrl": { + "message": "Адрес на сървъра за самоличности" + }, + "notificationsUrl": { + "message": "Адрес на сървъра за известия" + }, + "iconsUrl": { + "message": "Адрес на сървъра за иконки" + }, + "environmentSaved": { + "message": "Адресите на средата са запазени" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Всички заявки за вписване са одобрени" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Биткойн" + }, + "updatedTaxInformation": { + "message": "Обновена данъчна информация" + }, + "unverified": { + "message": "Непотвърден" + }, + "verified": { + "message": "Потвърден" } } diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index 525586cc863..b58391e7546 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index 84dc065cec5..fb5cc691cfe 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index 24f5f561e56..f0a50c38824 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Sessió tancada" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "La vostra sessió ha caducat." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copia UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Advertiment" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Girar el token de sincronització de facturació invalidarà el token anterior." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Autoallotjat" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index 7b08b7ef2f2..c77dc3bdb96 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Odhlášení" }, + "loggedOutDesc": { + "message": "Byli jste odhlášeni ze svého účtu." + }, "loginExpired": { "message": "Platnost přihlášení vypršela." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Kopírovat UUID" }, + "errorRefreshingAccessToken": { + "message": "Chyba aktualizace přístupového tokenu" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nebyly nalezeny žádné obnovovací tokeny nebo API klíče. Zkuste se odhlásit a znovu se přihlásit." + }, "warning": { "message": "Varování" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Měnění fakturačního synchronizačního tokenu zruší platnost předchozího tokenu." }, + "selfHostedServer": { + "message": "vlastní hosting" + }, + "customEnvironment": { + "message": "Vlastní prostředí" + }, + "selfHostedBaseUrlHint": { + "message": "Zadejte základní URL adresu Vaší vlastní hostované aplikace Bitwarden. Příklad: https://bitwarden.spolecnost.cz" + }, + "selfHostedCustomEnvHeader": { + "message": "Pro rozšířená nastavení můžete zadat základní URL adresu každé služby zvlášť." + }, + "selfHostedEnvFormInvalid": { + "message": "Musíte přidat buď základní adresu URL serveru nebo alespoň jedno vlastní prostředí." + }, + "apiUrl": { + "message": "URL API serveru" + }, + "webVaultUrl": { + "message": "URL serveru webového trezoru" + }, + "identityUrl": { + "message": "URL serveru identity" + }, + "notificationsUrl": { + "message": "URL serveru pro oznámení" + }, + "iconsUrl": { + "message": "URL serveru ikon" + }, + "environmentSaved": { + "message": "URL adresy prostředí uloženy" + }, "selfHostingTitle": { "message": "Vlastní hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Všechny žádosti o přihlášení byly schváleny" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Aktualizované daňové údaje" + }, + "unverified": { + "message": "Neověřeno" + }, + "verified": { + "message": "Ověřeno" } } diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index a9b33e0e14f..095e4dabca8 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index f4031107f1c..ff339e7a39e 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logget ud" }, + "loggedOutDesc": { + "message": "Der er blevet logget ud af kontoen." + }, "loginExpired": { "message": "Login-session udløbet." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Kopiér UUID" }, + "errorRefreshingAccessToken": { + "message": "Adgangstoken genopfriskningsfejl" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Ingen genopfriskningstoken eller API-nøgler fundet. Prøv at logge ud og dernæst ind igen." + }, "warning": { "message": "Advarsel" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotering af faktureringssynk-tokenet vil ugyldiggøre det foregående token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Selvhosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Alle login-anmodninger godkendt" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Opdaterede momsoplysninger" + }, + "unverified": { + "message": "Ubekræftet" + }, + "verified": { + "message": "Bekræftet" } } diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index ecb3bf97291..6931b8345af 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -582,11 +582,14 @@ "message": "Zugriffsebene" }, "accessing": { - "message": "Accessing" + "message": "Zugriff auf" }, "loggedOut": { "message": "Ausgeloggt" }, + "loggedOutDesc": { + "message": "Du wurdest von deinem Konto abgemeldet." + }, "loginExpired": { "message": "Ihre Anmeldungsitzung ist abgelaufen." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "UUID kopieren" }, + "errorRefreshingAccessToken": { + "message": "Zugangs-Token Aktualisierungsfehler" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Kein Aktualisierungs-Token oder API-Schlüssel gefunden. Bitte versuche dich ab- und wieder anzumelden." + }, "warning": { "message": "Warnung" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Durch Erneuerung des Rechnungssynchronisierungs-Token wird der vorherige Token ungültig." }, + "selfHostedServer": { + "message": "selbst gehostet" + }, + "customEnvironment": { + "message": "Benutzerdefinierte Umgebung" + }, + "selfHostedBaseUrlHint": { + "message": "Gib die Basis-URL deiner vor Ort gehosteten Bitwarden-Installation an. Beispiel: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Für eine erweiterte Konfiguration kannst du die Basis-URL jedes Dienstes unabhängig voneinander angeben." + }, + "selfHostedEnvFormInvalid": { + "message": "Du musst entweder die Basis-Server-URL oder mindestens eine benutzerdefinierte Umgebung hinzufügen." + }, + "apiUrl": { + "message": "API Server-URL" + }, + "webVaultUrl": { + "message": "URL des Web-Tresor-Servers" + }, + "identityUrl": { + "message": "URL des Identitätsservers" + }, + "notificationsUrl": { + "message": "URL des Benachrichtigungsservers" + }, + "iconsUrl": { + "message": "URL des Icons-Servers" + }, + "environmentSaved": { + "message": "URLs der Umgebung gespeichert" + }, "selfHostingTitle": { "message": "Selbst gehostet" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Alle Anmeldeanfragen genehmigt" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Steuerinformationen aktualisiert" + }, + "unverified": { + "message": "Nicht verifiziert" + }, + "verified": { + "message": "Verifiziert" } } diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index 42cc702f271..b3dcdb0d94e 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Αποσυνδεθήκατε" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Η περίοδος σύνδεσής σας έχει λήξει." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Προειδοποίηση" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index 93f1832301a..75054c1a7de 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index f1fa51236e5..71226fb6177 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index 8e0b58c3f1c..3d2e0d1e4d8 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Adiaŭita" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Via seanco eksvalidiĝis." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Averto" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index 8eed13491ee..f3fddf45bce 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Sesión terminada" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Tu sesión ha expirado." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copiar UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Advertencia" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotar el token de sincronización de facturación invalidará el token anterior." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Autoalojamiento" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index 27f15dc4745..138351449a9 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Välja logitud" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sessioon on aegunud." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Hoiatus" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index 3bb6a81998c..6a5e3782bc0 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Saioa itxita" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Saioa amaitu da." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Kontuz" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Fakturazioa sinkronizatzeko tokena berrituz gero, aurreko tokena baliogabetuko da." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Ostatatze propioa" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index 42e1ff68cc5..fe38a1e7e7e 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "خارج شد" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "نشست ورود شما منقضی شده است." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "کپی UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "هشدار" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "چرخاندن توکن همگام‌سازی صورتحساب، توکن قبلی را باطل می‌کند." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "خود میزبانی" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index 3b0e8b4b844..2347c83d0d5 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Kirjauduttu ulos" }, + "loggedOutDesc": { + "message": "Sinut on kirjattu ulos tililtäsi." + }, "loginExpired": { "message": "Kirjautumisistuntosi on erääntynyt." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Kopioi UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Varoitus" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Laskutuksen synkronointitunnisteen uudistus mitätöi edellisen tunnisteen." }, + "selfHostedServer": { + "message": "itse ylläpidetty" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API-palvelimen URL" + }, + "webVaultUrl": { + "message": "Verkkoholvipalvelimen URL" + }, + "identityUrl": { + "message": "Henkilöllisyyspalvelimen URL" + }, + "notificationsUrl": { + "message": "Ilmoituspalvelimen URL" + }, + "iconsUrl": { + "message": "Kuvakepalvelimen URL" + }, + "environmentSaved": { + "message": "Palvelinympäristön URL-osoitteet tallennettiin" + }, "selfHostingTitle": { "message": "Itse ylläpidetty" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Kaikki kirjautumispyynnöt hyväksyttiin" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Päivitetyt verotiedot" + }, + "unverified": { + "message": "Vahvistamaton" + }, + "verified": { + "message": "Vahvistettu" } } diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index 1a9f2d67823..b73d6af58ff 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Naka-log out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Nag-expire na ang login session mo." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Babala" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Ang pag ikot ng token ng pag sync ng pagsingil ay magpapawalang bisa sa nakaraang token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Pag host sa sarili" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index 189571f70d0..1c1191476ee 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Déconnecté" }, + "loggedOutDesc": { + "message": "Vous avez été déconnecté de votre compte." + }, "loginExpired": { "message": "Votre session a expiré." }, @@ -639,7 +642,7 @@ "message": "Utilisez une clé d'accès générée qui vous connectera automatiquement sans mot de passe. La biométrie, comme la reconnaissance faciale ou les empreintes digitales, ou une autre méthode de sécurité FIDO2 vérifiera votre identité." }, "newPasskey": { - "message": "Nouvelle clé d'accès" + "message": "Nouvelle clé d'identification (passkey)" }, "learnMoreAboutPasswordless": { "message": "En savoir plus sur l'identification sans mots de passe" @@ -657,7 +660,7 @@ "message": "Il y a eu un problème lors de la crétion de votre clé d'accès." }, "passkeySuccessfullyCreated": { - "message": "Clé d'accès créée avec succès!" + "message": "Clé d'identification (passkey) créée avec succès !" }, "customPasskeyNameInfo": { "message": "Nommez votre clé d'accès pour vous aider à l'identifier." @@ -693,10 +696,10 @@ } }, "passkeyRemoved": { - "message": "Clé d'accès supprimée" + "message": "Clé d'identification (passkey) retirée" }, "removePasskey": { - "message": "Supprimer la clé d'accès" + "message": "Retirer la clé d'identification (passkey)" }, "removePasskeyInfo": { "message": "Si toutes les clés d'accès sont supprimées, vous ne pourrez pas vous connecter à de nouveaux appareils sans votre mot de passe principal." @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copier l'UUID" }, + "errorRefreshingAccessToken": { + "message": "Erreur d'Actualisation du Jeton d'Accès" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Aucun jeton de rafraîchissement ou clé d'API trouvé. Veuillez essayer de vous déconnecter et de vous reconnecter." + }, "warning": { "message": "Attention" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Permuter le Jeton de Synchronisation de Facturation invalidera le jeton précédent." }, + "selfHostedServer": { + "message": "auto-hébergé" + }, + "customEnvironment": { + "message": "Environnement personnalisé" + }, + "selfHostedBaseUrlHint": { + "message": "Spécifiez l'URL de base de votre installation auto-hébergée par Bitwarden. Exemple: https://bitwarden.compagnie.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Pour un configuration avancée. Vous pouvez spécifier l'URL de base indépendamment pour chaque service." + }, + "selfHostedEnvFormInvalid": { + "message": "Vous devez ajouter soit l'URL du Serveur de base, soit au moins un environnement personnalisé." + }, + "apiUrl": { + "message": "URL du serveur API" + }, + "webVaultUrl": { + "message": "URL du serveur du coffre Web" + }, + "identityUrl": { + "message": "URL du serveur d'identité" + }, + "notificationsUrl": { + "message": "URL du serveur de notifications" + }, + "iconsUrl": { + "message": "URL du serveur d’icônes" + }, + "environmentSaved": { + "message": "URLs d'environnement enregistrées" + }, "selfHostingTitle": { "message": "Auto-Hébergement" }, @@ -6137,7 +6179,7 @@ "message": "Ce n'est pas vous ?" }, "pickAnAvatarColor": { - "message": "Choisissez la couleur de votre avatar" + "message": "Choisissez une couleur d'avatar" }, "customizeAvatar": { "message": "Personnaliser l'avatar" @@ -7773,7 +7815,7 @@ "message": "Vous ne pouvez vous ajoutez vous-même aux groupes." }, "cannotAddYourselfToCollections": { - "message": "You cannot add yourself to collections." + "message": "Vous ne pouvez pas vous ajouter vous-même aux collections." }, "assign": { "message": "Assigner" @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Toutes les demandes de connexion approuvées" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Informations sur les taxes mises à jour" + }, + "unverified": { + "message": "Non vérifié" + }, + "verified": { + "message": "Vérifié" } } diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index 99c15045cc9..b34ccbb9013 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index f84612ef46b..6eae24eee0f 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "בוצעה יציאה" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "תוקף החיבור שלך הסתיים." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "אזהרה" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index 65a353768a5..21cabab4b5f 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 7f939ba90ca..ba98ea021f8 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Odjavljen/a" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesija je istekla." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Kopiraj UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Upozorenje" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotiranje tokena za sinkornizaciju naplate će poništiti prethodni token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Vlastiti poslužitelj" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index 9226307792f..1371ceb262f 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Megtörtént a kijelentkezés." }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "A bejelentkezési munkamenet lejárt." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "UUID másolása" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Figyelmeztetés" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "A Számlázási szinkron vezérjel gördülő váltása érvényteleníti ez előző vezérjelet." }, + "selfHostedServer": { + "message": "saját üzemeltetésű" + }, + "customEnvironment": { + "message": "Egyedi környezet" + }, + "selfHostedBaseUrlHint": { + "message": "Adjuk meg a helyileg tárolt Bitwarden telepítés alap webcímét. Példa: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Speciális konfigurációhoz külön-külön megadhatjuk az egyes szolgáltatások alap webcímét." + }, + "selfHostedEnvFormInvalid": { + "message": "Hozzá kell adni az alapszerver webcímét vagy legalább egy egyedi környezetet." + }, + "apiUrl": { + "message": "API szerver webcím" + }, + "webVaultUrl": { + "message": "Webes széf szerver webcím" + }, + "identityUrl": { + "message": "Személyazonosság szerver webcím" + }, + "notificationsUrl": { + "message": "Értesítési szerver webcím" + }, + "iconsUrl": { + "message": "Ikonok szerver webcím" + }, + "environmentSaved": { + "message": "A környezeti webcímek mentésre kerültek." + }, "selfHostingTitle": { "message": "Saját kiszolgáló" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "At összes bejelentkezési kérés óváhagyásra került." + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Frissített adó információ" + }, + "unverified": { + "message": "Nem ellenőrzött" + }, + "verified": { + "message": "Ellenőrzött" } } diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index a767d3bcb0a..c481ca8a095 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Keluar" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesi masuk Anda telah berakhir." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Peringatan" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index d7869336003..192115c13f9 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Uscito" }, + "loggedOutDesc": { + "message": "Sei stato fatto uscire dal tuo account." + }, "loginExpired": { "message": "La tua sessione è scaduta." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copia UUID" }, + "errorRefreshingAccessToken": { + "message": "Errore di aggiornamento del token di accesso" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nessun token di aggiornamento o chiave API trovati. Prova ad uscire ed entrare di nuovo." + }, "warning": { "message": "Attenzione" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "La rotazione del token di sincronizzazione della fatturazione invaliderà il token precedente." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Ambiente personalizzato" + }, + "selfHostedBaseUrlHint": { + "message": "Specifica lo URL principale della tua installazione self-hosted di Bitwarden. Esempio: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Per la configurazione avanzata, puoi specificare lo URL di base di ciascun servizio in modo indipendente." + }, + "selfHostedEnvFormInvalid": { + "message": "Devi aggiungere lo URL del server di base o almeno un ambiente personalizzato." + }, + "apiUrl": { + "message": "URL del server API" + }, + "webVaultUrl": { + "message": "URL della cassaforte web" + }, + "identityUrl": { + "message": "URL del server di identità" + }, + "notificationsUrl": { + "message": "URL del server delle notifiche" + }, + "iconsUrl": { + "message": "URL del server di icone" + }, + "environmentSaved": { + "message": "URL dell'ambiente salvati" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Tutte le richieste di accesso approvate" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Informazioni fiscali aggiornate" + }, + "unverified": { + "message": "Non verificato" + }, + "verified": { + "message": "Verificato" } } diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index b8016fb1f80..a1f71ef90b9 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "ログアウトしました" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "ログインセッションの有効期限が切れています。" }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "UUID をコピー" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "注意" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "請求同期トークンを更新すると、前のトークンは無効になります。" }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "セルフホスティング" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "すべてのログイン要求を承認しました" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "ビットコイン" + }, + "updatedTaxInformation": { + "message": "更新された税情報" + }, + "unverified": { + "message": "未認証" + }, + "verified": { + "message": "認証済み" } } diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index c1cb6d9a96a..e5697457baf 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "გამოსვლა" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "თქვენი სისტემაში შესვლის სესიას ვადა გაუვიდა." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "გაფრთხილება" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index 99c15045cc9..b34ccbb9013 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index 3d369d33fc7..0ab6aa294dc 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "ಲಾಗ್ ಔಟ್" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "ನಿಮ್ಮ ಲಾಗಿನ್ ಸೆಷನ್ ಅವಧಿ ಮೀರಿದೆ." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "ಎಚ್ಚರಿಕೆ" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index 6a7b32983b6..4fb8aa34212 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "로그아웃됨" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "로그인 세션이 만료되었습니다." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "UUID 복사" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "경고" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index 61edf711b4d..7a5f85fa918 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Atteicies" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Pieteikšanās sesija ir beigusies." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Ievietot UUID starpliktuvē" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Brīdinājums" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Norēķinu sinhronizācijas pilnvaras nomaiņa padarīs nederīgu iepriekšējo." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Pašizvietošana" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Visi pieteikšanās pieprasījumi apstiprināti" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index ca944a6bc2f..e05b1a15918 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "ലോഗ് ഔട്ട് ചെയ്തിരിക്കുന്നു" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "നിങ്ങളുടെ പ്രവർത്തന സമയം കഴിഞ്ഞിരിക്കുന്നു." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "മുന്നറിയിപ്പ്" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index 99c15045cc9..b34ccbb9013 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index 99c15045cc9..b34ccbb9013 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index 15d8a6aeef7..1ebfb3f0031 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -579,14 +579,17 @@ "message": "Tilgang" }, "accessLevel": { - "message": "Access level" + "message": "Tilgangsnivå" }, "accessing": { - "message": "Accessing" + "message": "Aksesserer" }, "loggedOut": { "message": "Logget av" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Din innloggingsøkt har utløpt." }, @@ -612,79 +615,79 @@ "message": "Logg på med enhet" }, "loginWithDeviceEnabledNote": { - "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" + "message": "Logg på med enhet må settes opp i Bitwarden-innstillingene. Trenger du et annet alternativ?" }, "loginWithMasterPassword": { "message": "Logg på med hovedpassord" }, "readingPasskeyLoading": { - "message": "Reading passkey..." + "message": "Leser Passkey..." }, "readingPasskeyLoadingInfo": { - "message": "Keep this window open and follow prompts from your browser." + "message": "Hold dette vinduet åpent og følg anvisningene fra nettleseren." }, "useADifferentLogInMethod": { - "message": "Use a different log in method" + "message": "Bruk en annen innloggingsmetode" }, "loginWithPasskey": { - "message": "Log in with passkey" + "message": "Logg inn med Passkey" }, "invalidPasskeyPleaseTryAgain": { - "message": "Invalid Passkey. Please try again." + "message": "Ugyldig Passkey. Vennligst prøv igjen." }, "twoFactorForPasskeysNotSupportedOnClientUpdateToLogIn": { - "message": "2FA for passkeys is not supported. Update the app to log in." + "message": "2FA for Passkeys støttes ikke. Oppdater appen for å logge inn." }, "loginWithPasskeyInfo": { - "message": "Use a generated passkey that will automatically log you in without a password. Biometrics, like facial recognition or fingerprint, or another FIDO2 security method will verify your identity." + "message": "Bruk en generert Passkey som automatisk logger deg inn uten bruk av passord. Biometri, som ansiktsgjenkjenning eller fingeravtrykk, eller en annen FIDO2-sikkerhetsmetode, vil bekrefte identiteten din." }, "newPasskey": { - "message": "New passkey" + "message": "Ny Passkey" }, "learnMoreAboutPasswordless": { - "message": "Learn more about passwordless" + "message": "Lær mer om passordfri løsning" }, "creatingPasskeyLoading": { - "message": "Creating passkey..." + "message": "Oppretter Passkey..." }, "creatingPasskeyLoadingInfo": { - "message": "Keep this window open and follow prompts from your browser." + "message": "Hold dette vinduet åpent og følg anvisningene fra nettleseren." }, "errorCreatingPasskey": { - "message": "Error creating passkey" + "message": "Feil ved oppretting av Passkey" }, "errorCreatingPasskeyInfo": { - "message": "There was a problem creating your passkey." + "message": "Det oppstod et problem under oppretting av Passkeyen." }, "passkeySuccessfullyCreated": { - "message": "Passkey successfully created!" + "message": "Passkey opprettet!" }, "customPasskeyNameInfo": { - "message": "Name your passkey to help you identify it." + "message": "Gi Passkeyen et navn for å hjelpe deg med å identifisere den." }, "useForVaultEncryption": { - "message": "Use for vault encryption" + "message": "Bruk for hvelvkryptering" }, "useForVaultEncryptionInfo": { - "message": "Log in and unlock on supported devices without your master password. Follow the prompts from your browser to finalize setup." + "message": "Logg inn og lås opp på støttede enheter uten hovedpassord. Følg anvisningene fra nettleseren din for å avslutte oppsettet." }, "useForVaultEncryptionErrorReadingPasskey": { - "message": "Error reading passkey. Try again or uncheck this option." + "message": "Feil under lesing av Paskey. Prøv igjen, eller fjern avmerkingen for dette alternativet." }, "encryptionNotSupported": { - "message": "Encryption not supported" + "message": "Kryptering ikke støttet" }, "enablePasskeyEncryption": { - "message": "Set up encryption" + "message": "Sett opp kryptering" }, "usedForEncryption": { - "message": "Used for encryption" + "message": "Brukes til kryptering" }, "loginWithPasskeyEnabled": { - "message": "Log in with passkey turned on" + "message": "Logg inn med Passkey aktivert" }, "passkeySaved": { - "message": "$NAME$ saved", + "message": "$NAME$ lagret", "placeholders": { "name": { "content": "$1", @@ -693,19 +696,19 @@ } }, "passkeyRemoved": { - "message": "Passkey removed" + "message": "Passkey fjernet" }, "removePasskey": { - "message": "Remove passkey" + "message": "Fjern Passkey" }, "removePasskeyInfo": { - "message": "If all passkeys are removed, you will be unable to log into new devices without your master password." + "message": "Hvis alle Passkeys fjernes, vil det ikke være mulig å logge inn på nye enheter uten hovedpassordet ditt." }, "passkeyLimitReachedInfo": { - "message": "Passkey limit reached. Remove a passkey to add another." + "message": "Grense for antall Passkeys er nådd. Fjern en Passkey for å legge til en annen." }, "tryAgain": { - "message": "Try again" + "message": "Prøv igjen" }, "createAccount": { "message": "Opprett en konto" @@ -805,7 +808,7 @@ "message": "En uventet feil har oppstått." }, "expirationDateError": { - "message": "Please select an expiration date that is in the future." + "message": "Vennligst velg en utløpsdato som er frem i tid." }, "emailAddress": { "message": "E-postadresse" @@ -1048,7 +1051,13 @@ "message": "Kopier verifiseringskoden" }, "copyUuid": { - "message": "Copy UUID" + "message": "Kopier UUID" + }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." }, "warning": { "message": "Advarsel" @@ -1057,7 +1066,7 @@ "message": "Bekreft eksport av hvelvet" }, "confirmSecretsExport": { - "message": "Confirm secrets export" + "message": "Bekreft eksport av hemmeligheter" }, "exportWarningDesc": { "message": "Eksporten inneholder dine hvelvdata i ukryptert format. Du bør ikke lagre eller sende den eksporterte filen over usikre tjenester (som e-post). Slett filen umiddelbart etter at du er ferdig med å bruke den." @@ -1075,13 +1084,13 @@ "message": "Eksporter" }, "exportFrom": { - "message": "Export from" + "message": "Eksport fra" }, "exportVault": { "message": "Eksporter hvelvet" }, "exportSecrets": { - "message": "Export secrets" + "message": "Eksporter hemmeligheter" }, "fileFormat": { "message": "Filformat" @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotasjon av faktureringssynkroniserings-token vil gjøre den forrige token ugyldig." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Selvhosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index c67c7570a11..30be37fe071 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index 70a171bf756..fac7616a090 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Uitgelogd" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Je inlogsessie is verlopen." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "UUID kopiëren" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Waarschuwing" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Het roteren van het factureringssynchronisatietoken maakt het vorige token ongeldig." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Zelfgehost" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Alle inlogverzoeken goedgekeurd" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index b9231eac28a..bc3bd862ed5 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Åtvaring" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index 99c15045cc9..b34ccbb9013 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index 1cd176861cf..be31574e754 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Wylogowano" }, + "loggedOutDesc": { + "message": "Zostałeś wylogowany z konta." + }, "loginExpired": { "message": "Twoja sesja wygasła." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Skopiuj UUID" }, + "errorRefreshingAccessToken": { + "message": "Błąd podczas odświeżania tokenu" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Nie znaleziono tokenu odświeżającego ani kluczy API. Spróbuj wylogować się i zalogować ponownie." + }, "warning": { "message": "Ostrzeżenie" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Wymiana tokenu synchronizacji płatności spowoduje unieważnienie poprzedniego tokenu." }, + "selfHostedServer": { + "message": "samodzielnie hostowany" + }, + "customEnvironment": { + "message": "Niestandardowe środowisko" + }, + "selfHostedBaseUrlHint": { + "message": "Określ bazowy adres URL swojej instalacji Bitwarden. Przykład: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Dla zaawansowanych konfiguracji możesz określić podstawowy adres URL niezależnie dla każdej usługi." + }, + "selfHostedEnvFormInvalid": { + "message": "Musisz dodać podstawowy adres URL serwera lub co najmniej jedno niestandardowe środowisko." + }, + "apiUrl": { + "message": "Adres URL serwera API" + }, + "webVaultUrl": { + "message": "Adres URL serwera sejfu internetowego" + }, + "identityUrl": { + "message": "Adres URL serwera tożsamości" + }, + "notificationsUrl": { + "message": "Adres URL serwera powiadomień" + }, + "iconsUrl": { + "message": "Adres URL serwera ikon" + }, + "environmentSaved": { + "message": "Adresy URL środowiska zostały zapisane" + }, "selfHostingTitle": { "message": "Samodzielnie hostowany" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Wszystkie prośby o logowanie zatwierdzone" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Zaktualizowane informacje podatkowe" + }, + "unverified": { + "message": "Niezweryfikowane" + }, + "verified": { + "message": "Zweryfikowane" } } diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index b7a248ff691..81f0fab1496 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Sessão encerrada" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "A sua sessão expirou." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copiar URL" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Aviso" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Renovar o Token de Sincronização de Cobrança invalidará o token anterior." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Auto-hospedado" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index 30d8dad0ca6..617e7e67af1 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Sessão terminada" }, + "loggedOutDesc": { + "message": "Foi terminada a sessão da sua conta." + }, "loginExpired": { "message": "A sua sessão expirou." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copiar UUID" }, + "errorRefreshingAccessToken": { + "message": "Erro no acesso ao token de atualização" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Não foi encontrado nenhum token de atualização ou chaves API. Por favor, tente terminar a sessão e voltar a iniciá-la." + }, "warning": { "message": "Aviso" }, @@ -2376,7 +2385,7 @@ "message": "Para criar uma organização alojada no local, é necessário carregar um ficheiro de licença válido." }, "accountEmailMustBeVerified": { - "message": "O endereço de e-mail da sua conta deve ser verificado." + "message": "O endereço de e-mail da sua conta precisa de ser verificado." }, "newOrganizationDesc": { "message": "As organizações permitem-lhe partilhar partes do seu cofre com outras pessoas, bem como gerir utilizadores relacionados para uma entidade específica, como uma família, uma pequena equipa ou uma grande empresa." @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Regenerar o token de sincronização de faturação invalidará o token anterior." }, + "selfHostedServer": { + "message": "auto-hospedado" + }, + "customEnvironment": { + "message": "Ambiente personalizado" + }, + "selfHostedBaseUrlHint": { + "message": "Especifique o URL de base da sua instalação Bitwarden hospedada no local. Exemplo: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Para uma configuração avançada, pode especificar o URL de base de cada serviço de forma independente." + }, + "selfHostedEnvFormInvalid": { + "message": "Deve adicionar o URL do servidor de base ou pelo menos um ambiente personalizado." + }, + "apiUrl": { + "message": "URL do servidor da API" + }, + "webVaultUrl": { + "message": "URL do servidor do cofre Web" + }, + "identityUrl": { + "message": "URL do servidor de identidade" + }, + "notificationsUrl": { + "message": "URL do servidor de notificações" + }, + "iconsUrl": { + "message": "URL do servidor de ícones" + }, + "environmentSaved": { + "message": "URLs de ambiente guardados" + }, "selfHostingTitle": { "message": "Auto-hospedagem" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Todos os pedidos de início de sessão aprovados" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Informações fiscais atualizadas" + }, + "unverified": { + "message": "Não verificado" + }, + "verified": { + "message": "Verificado" } } diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 50b7329f760..d0c7e7a0f77 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Deconectat" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Sesiunea de autentificare a expirat." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Avertisment" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Revocarea tokenului de sincronizare a facturării va invalida tokenul anterior." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Auto-găzduire" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index c331541cfd9..51275705380 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Вы вышли из хранилища" }, + "loggedOutDesc": { + "message": "Вы вышли из своего аккаунта." + }, "loginExpired": { "message": "Истек срок действия вашей сессии." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Скопировать UUID" }, + "errorRefreshingAccessToken": { + "message": "Ошибка обновления токена доступа" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Не найдены токен обновления или ключи API. Пожалуйста, попробуйте выполнить выход и повторно авторизоваться." + }, "warning": { "message": "Предупреждение" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Смена токена синхронизации биллинга сделает предыдущий токен недействительным." }, + "selfHostedServer": { + "message": "собственный хостинг" + }, + "customEnvironment": { + "message": "Пользовательское окружение" + }, + "selfHostedBaseUrlHint": { + "message": "Укажите базовый URL вашего локального хостинга Bitwarden. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Для продвинутой конфигурации можно указать базовый URL каждой службы отдельно." + }, + "selfHostedEnvFormInvalid": { + "message": "Вы должны добавить либо базовый URL сервера, либо хотя бы одно пользовательское окружение." + }, + "apiUrl": { + "message": "URL API сервера" + }, + "webVaultUrl": { + "message": "URL сервера веб-хранилища" + }, + "identityUrl": { + "message": "URL сервера идентификации" + }, + "notificationsUrl": { + "message": "URL сервера уведомлений" + }, + "iconsUrl": { + "message": "URL сервера значков" + }, + "environmentSaved": { + "message": "URL окружения сохранены" + }, "selfHostingTitle": { "message": "Собственное размещение" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Все запросы на вход одобрены" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Обновление сведений о налогах" + }, + "unverified": { + "message": "Неверифицирован" + }, + "verified": { + "message": "Верифицирован" } } diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index 2e9b80899c1..e0cd81be1b1 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "අවවාදයයි" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index 73f52e77637..1bf83692b6b 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Odhlásený" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Platnosť prihlásenia vypršala." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Upozornenie" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Vlastný hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Všetky žiadosti o prihlásenie schválené" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Aktualizované daňové informácie" + }, + "unverified": { + "message": "Neoverený" + }, + "verified": { + "message": "Overený" } } diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index 56f6a14c394..a14b2beb117 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Odjavljen" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Vaša seja je potekla." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Opozorilo" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index be4ceddfe97..d120e1bb4b8 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -582,11 +582,14 @@ "message": "Ниво приступа" }, "accessing": { - "message": "Accessing" + "message": "Приступ" }, "loggedOut": { "message": "Одјављено" }, + "loggedOutDesc": { + "message": "Одјављени сте са свог налога." + }, "loginExpired": { "message": "Ваша сесија је истекла." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Копирај UUID" }, + "errorRefreshingAccessToken": { + "message": "Грешка при освежавању токена приступа" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Није пронађен токен за освежавање или АПИ кључеви. Покушајте да се одјавите и поново пријавите." + }, "warning": { "message": "Упозорење" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "личан хостинг" + }, + "customEnvironment": { + "message": "Прилагођено окружење" + }, + "selfHostedBaseUrlHint": { + "message": "Наведите основну УРЛ адресу вашег локалног хостовања Bitwarden-а. Пример: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "За напредну конфигурацију, можете навести основну УРЛ адресу сваке услуге независно." + }, + "selfHostedEnvFormInvalid": { + "message": "Морате додати или основни УРЛ сервера или бар једно прилагођено окружење." + }, + "apiUrl": { + "message": "УРЛ АПИ Сервера" + }, + "webVaultUrl": { + "message": "УРЛ сервера Сефа" + }, + "identityUrl": { + "message": "УРЛ сервера идентитета" + }, + "notificationsUrl": { + "message": "УРЛ сервера обавештења" + }, + "iconsUrl": { + "message": "УРЛ сервера иконица" + }, + "environmentSaved": { + "message": "УРЛ адресе окружења су сачуване" + }, "selfHostingTitle": { "message": "Ауто-хстинг" }, @@ -8293,9 +8335,24 @@ "message": "Будите испред безбедносних пропуста надоградњом на плаћени план за побољшано праћење." }, "approveAllRequests": { - "message": "Approve all requests" + "message": "Одобри све захтеве" }, "allLoginRequestsApproved": { - "message": "All login requests approved" + "message": "Сви захтеви за пријаву су одобрени" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Ажуриране пореске информације" + }, + "unverified": { + "message": "Непроверено" + }, + "verified": { + "message": "Проверено" } } diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index 12dd9c91e8c..c7148218b3b 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Odjavljeni ste" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Vaša sesija je istekla." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Upozorenje" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index 16d838f3ccf..84db5a570ca 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Utloggad" }, + "loggedOutDesc": { + "message": "Du har blivit utloggad från ditt konto." + }, "loginExpired": { "message": "Din inloggningssession har upphört." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Kopiera UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Varning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index 99c15045cc9..b34ccbb9013 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Logged out" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Your login session has expired." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Warning" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index ed1fb050472..2f6fcd82645 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "ออกจากระบบ" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "เซสชันของคุณหมดอายุแล้ว" }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "คำเตือน" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index 4c7862da277..32dcc5f14e1 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Çıkış yapıldı" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Oturumunuz zaman aşımına uğradı." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "UUID'yi kopyala" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Uyarı" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Faturalandırma Senkronizasyonu Anahtarını yenilemek, önceki anahtarı geçersiz kılar." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Barındırılan" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index a937da85ee8..0bbd19b8b80 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Ви вийшли" }, + "loggedOutDesc": { + "message": "Ви вийшли з облікового запису." + }, "loginExpired": { "message": "Тривалість вашого сеансу завершилась." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Копіювати UUID" }, + "errorRefreshingAccessToken": { + "message": "Помилка оновлення токена доступу" + }, + "errorRefreshingAccessTokenDesc": { + "message": "Не знайдено токен оновлення або ключі API. Спробуйте вийти, а потім увійти знову." + }, "warning": { "message": "Попередження" }, @@ -2373,7 +2382,7 @@ "message": "Щоб оновити обліковий запис до Premium, вам необхідно вивантажити дійсний файл ліцензії." }, "uploadLicenseFileOrg": { - "message": "Для створення організації з локальним хостингом вам необхідно вивантажити дійсний файл ліцензії." + "message": "Щоб створити організацію, розміщену на локальному хостингу, вам необхідно вивантажити дійсний файл ліцензії." }, "accountEmailMustBeVerified": { "message": "Необхідно підтвердити адресу електронної пошти вашого облікового запису." @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Оновлення токена платіжної синхронізації призведе до скасування попереднього токена." }, + "selfHostedServer": { + "message": "власне розміщення" + }, + "customEnvironment": { + "message": "Власне середовище" + }, + "selfHostedBaseUrlHint": { + "message": "Вкажіть основну URL-адресу вашого локально розміщеного встановлення Bitwarden. Зразок: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "Для розширеної конфігурації ви можете вказати основну URL-адресу окремо для кожної служби." + }, + "selfHostedEnvFormInvalid": { + "message": "Необхідно додати URL-адресу основного сервера, або принаймні одне користувацьке середовище." + }, + "apiUrl": { + "message": "URL-адреса сервера API" + }, + "webVaultUrl": { + "message": "URL-адреса сервера веб сховища" + }, + "identityUrl": { + "message": "URL-адреса сервера ідентифікації" + }, + "notificationsUrl": { + "message": "URL-адреса сервера сповіщень" + }, + "iconsUrl": { + "message": "URL-адреса сервера піктограм" + }, + "environmentSaved": { + "message": "URL-адреси середовища збережено" + }, "selfHostingTitle": { "message": "Власне розміщення" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "Усі запити на вхід схвалено" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Податкову інформацію оновлено" + }, + "unverified": { + "message": "Не перевірений" + }, + "verified": { + "message": "Перевірений" } } diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 55a34e2f2ab..47d69033e0d 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "Đã đăng xuất" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "Phiên đăng nhập của bạn đã hết hạn." }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "Copy UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "Cảnh báo" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "Rotating the billing sync token will invalidate the previous token." }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "Self-hosting" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index 652a1f3d671..535c2abb7f3 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "已注销" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "您的登录会话已过期。" }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "复制 UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "警告" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "轮换计费同步令牌将使之前的令牌失效。" }, + "selfHostedServer": { + "message": "自托管" + }, + "customEnvironment": { + "message": "自定义环境" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API 服务器 URL" + }, + "webVaultUrl": { + "message": "网页密码库服务器 URL" + }, + "identityUrl": { + "message": "身份服务器 URL" + }, + "notificationsUrl": { + "message": "通知服务器 URL" + }, + "iconsUrl": { + "message": "图标服务器 URL" + }, + "environmentSaved": { + "message": "环境 URL 已保存" + }, "selfHostingTitle": { "message": "自托管" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "所有登录请求已批准" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "未验证" + }, + "verified": { + "message": "已验证" } } diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index b4abbc7f3e2..e8413ed6fac 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -587,6 +587,9 @@ "loggedOut": { "message": "已登出" }, + "loggedOutDesc": { + "message": "You have been logged out of your account." + }, "loginExpired": { "message": "您的登入工作階段已逾期。" }, @@ -1050,6 +1053,12 @@ "copyUuid": { "message": "複製 UUID" }, + "errorRefreshingAccessToken": { + "message": "Access Token Refresh Error" + }, + "errorRefreshingAccessTokenDesc": { + "message": "No refresh token or API keys found. Please try logging out and logging back in." + }, "warning": { "message": "警告" }, @@ -5586,6 +5595,39 @@ "rotateBillingSyncTokenTitle": { "message": "輪換「計費同步權杖」會導致之前的權杖失效。" }, + "selfHostedServer": { + "message": "self-hosted" + }, + "customEnvironment": { + "message": "Custom environment" + }, + "selfHostedBaseUrlHint": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "For advanced configuration, you can specify the base URL of each service independently." + }, + "selfHostedEnvFormInvalid": { + "message": "You must add either the base Server URL or at least one custom environment." + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, "selfHostingTitle": { "message": "自我裝載" }, @@ -8297,5 +8339,20 @@ }, "allLoginRequestsApproved": { "message": "All login requests approved" + }, + "payPal": { + "message": "PayPal" + }, + "bitcoin": { + "message": "Bitcoin" + }, + "updatedTaxInformation": { + "message": "Updated tax information" + }, + "unverified": { + "message": "Unverified" + }, + "verified": { + "message": "Verified" } } diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/providers.module.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/providers.module.ts index 2d4b39fa8bd..baa3e5e1bbd 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/providers/providers.module.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/providers/providers.module.ts @@ -18,6 +18,7 @@ import { ProviderSelectPaymentMethodDialogComponent, ProviderSubscriptionComponent, } from "../../billing/providers"; +import { SubscriptionStatusComponent } from "../../billing/providers/subscription/subscription-status.component"; import { AddOrganizationComponent } from "./clients/add-organization.component"; import { ClientsComponent } from "./clients/clients.component"; @@ -70,6 +71,7 @@ import { SetupComponent } from "./setup/setup.component"; ProviderSubscriptionComponent, ProviderSelectPaymentMethodDialogComponent, ProviderPaymentMethodComponent, + SubscriptionStatusComponent, ], providers: [WebProviderService, ProviderPermissionsGuard], }) diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-organization.component.html b/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-organization.component.html index 87169b6d9c0..110990d709d 100644 --- a/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-organization.component.html +++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-organization.component.html @@ -1,5 +1,5 @@
- + {{ "newClientOrganization" | i18n }} @@ -49,11 +49,21 @@
- + {{ "seats" | i18n }} + + {{ unassignedSeatsForSelectedPlan }} + {{ "unassignedSeatsDescription" | i18n | lowercase }} + 0 {{ "purchaseSeatDescription" | i18n | lowercase }} +
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-organization.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-organization.component.ts index 8427572516a..13d74136cf4 100644 --- a/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-organization.component.ts +++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-organization.component.ts @@ -2,11 +2,12 @@ import { DIALOG_DATA, DialogConfig, DialogRef } from "@angular/cdk/dialog"; import { Component, Inject, OnInit } from "@angular/core"; import { FormBuilder, Validators } from "@angular/forms"; +import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstractions/billilng-api.service.abstraction"; import { PlanType } from "@bitwarden/common/billing/enums"; import { PlanResponse } from "@bitwarden/common/billing/models/response/plan.response"; +import { ProviderPlanResponse } from "@bitwarden/common/billing/models/response/provider-subscription-response"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { DialogService } from "@bitwarden/components"; +import { DialogService, ToastService } from "@bitwarden/components"; import { WebProviderService } from "../../../admin-console/providers/services/web-provider.service"; @@ -33,6 +34,7 @@ type PlanCard = { name: string; cost: number; type: PlanType; + plan: PlanResponse; selected: boolean; }; @@ -41,20 +43,24 @@ type PlanCard = { templateUrl: "./create-client-organization.component.html", }) export class CreateClientOrganizationComponent implements OnInit { - protected ResultType = CreateClientOrganizationResultType; protected formGroup = this.formBuilder.group({ clientOwnerEmail: ["", [Validators.required, Validators.email]], organizationName: ["", Validators.required], seats: [null, [Validators.required, Validators.min(1)]], }); + protected loading = true; protected planCards: PlanCard[]; + protected ResultType = CreateClientOrganizationResultType; + + private providerPlans: ProviderPlanResponse[]; constructor( + private billingApiService: BillingApiServiceAbstraction, @Inject(DIALOG_DATA) private dialogParams: CreateClientOrganizationParams, private dialogRef: DialogRef, private formBuilder: FormBuilder, private i18nService: I18nService, - private platformUtilsService: PlatformUtilsService, + private toastService: ToastService, private webProviderService: WebProviderService, ) {} @@ -92,6 +98,11 @@ export class CreateClientOrganizationComponent implements OnInit { } async ngOnInit(): Promise { + const subscription = await this.billingApiService.getProviderSubscription( + this.dialogParams.providerId, + ); + this.providerPlans = subscription?.plans ?? []; + const teamsPlan = this.dialogParams.plans.find((plan) => plan.type === PlanType.TeamsMonthly); const enterprisePlan = this.dialogParams.plans.find( (plan) => plan.type === PlanType.EnterpriseMonthly, @@ -102,15 +113,19 @@ export class CreateClientOrganizationComponent implements OnInit { name: this.i18nService.t("planNameTeams"), cost: teamsPlan.PasswordManager.seatPrice * 0.65, // 35% off for MSPs, type: teamsPlan.type, + plan: teamsPlan, selected: true, }, { name: this.i18nService.t("planNameEnterprise"), cost: enterprisePlan.PasswordManager.seatPrice * 0.65, // 35% off for MSPs, type: enterprisePlan.type, + plan: enterprisePlan, selected: false, }, ]; + + this.loading = false; } protected selectPlan(name: string) { @@ -135,8 +150,23 @@ export class CreateClientOrganizationComponent implements OnInit { this.formGroup.value.seats, ); - this.platformUtilsService.showToast("success", null, this.i18nService.t("createdNewClient")); + this.toastService.showToast({ + variant: "success", + title: null, + message: this.i18nService.t("createdNewClient"), + }); this.dialogRef.close(this.ResultType.Submitted); }; + + protected get unassignedSeatsForSelectedPlan(): number { + if (this.loading || !this.planCards) { + return 0; + } + const selectedPlan = this.planCards.find((planCard) => planCard.selected).plan; + const selectedProviderPlan = this.providerPlans.find( + (providerPlan) => providerPlan.planName === selectedPlan.name, + ); + return selectedProviderPlan.seatMinimum - selectedProviderPlan.assignedSeats; + } } diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-organization-subscription.component.html b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-organization-subscription.component.html index d1e4fe8b1f3..8181c285c28 100644 --- a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-organization-subscription.component.html +++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-organization-subscription.component.html @@ -7,22 +7,20 @@

{{ "manageSeatsDescription" | i18n }}

- + {{ "assignedSeats" | i18n }} + +
+ {{ unassignedSeats }} {{ "unassignedSeatsDescription" | i18n | lowercase }} + 0 {{ "purchaseSeatDescription" | i18n | lowercase }} +
+
- -

- {{ unassignedSeats }} - {{ "unassignedSeatsDescription" | i18n }} -

-

- {{ AdditionalSeatPurchased }} - {{ "purchaseSeatDescription" | i18n }} -

-
+ +
+
{{ "billingPlan" | i18n }}
+
{{ "providerPlan" | i18n }}
+ +
{{ data.status.label }}
+
+ + {{ displayedStatus }} + +
+
+ {{ data.date.label | titlecase }} +
+
+ {{ data.date.value | date: "mediumDate" }} +
+
+
+
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/subscription/subscription-status.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/subscription/subscription-status.component.ts new file mode 100644 index 00000000000..fa9a892254e --- /dev/null +++ b/bitwarden_license/bit-web/src/app/billing/providers/subscription/subscription-status.component.ts @@ -0,0 +1,188 @@ +import { DatePipe } from "@angular/common"; +import { Component, EventEmitter, Input, Output } from "@angular/core"; + +import { ProviderSubscriptionResponse } from "@bitwarden/common/billing/models/response/provider-subscription-response"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; + +type ComponentData = { + status?: { + label: string; + value: string; + }; + date?: { + label: string; + value: string; + }; + callout?: { + severity: "danger" | "warning"; + header: string; + body: string; + showReinstatementButton: boolean; + }; +}; + +@Component({ + selector: "app-subscription-status", + templateUrl: "subscription-status.component.html", +}) +export class SubscriptionStatusComponent { + @Input({ required: true }) providerSubscriptionResponse: ProviderSubscriptionResponse; + @Output() reinstatementRequested = new EventEmitter(); + + constructor( + private datePipe: DatePipe, + private i18nService: I18nService, + ) {} + + get displayedStatus(): string { + return this.data.status.value; + } + + get planName() { + return this.providerSubscriptionResponse.plans[0]; + } + + get status(): string { + return this.subscription.status; + } + + get isExpired() { + return this.subscription.status !== "active"; + } + + get subscription() { + return this.providerSubscriptionResponse; + } + + get data(): ComponentData { + const defaultStatusLabel = this.i18nService.t("status"); + + const nextChargeDateLabel = this.i18nService.t("nextCharge"); + const subscriptionExpiredDateLabel = this.i18nService.t("subscriptionExpired"); + const cancellationDateLabel = this.i18nService.t("cancellationDate"); + + switch (this.status) { + case "free": { + return {}; + } + case "trialing": { + return { + status: { + label: defaultStatusLabel, + value: this.i18nService.t("trial"), + }, + date: { + label: nextChargeDateLabel, + value: this.subscription.currentPeriodEndDate.toDateString(), + }, + }; + } + case "active": { + return { + status: { + label: defaultStatusLabel, + value: this.i18nService.t("active"), + }, + date: { + label: nextChargeDateLabel, + value: this.subscription.currentPeriodEndDate.toDateString(), + }, + }; + } + case "past_due": { + const pastDueText = this.i18nService.t("pastDue"); + const suspensionDate = this.datePipe.transform( + this.subscription.suspensionDate, + "mediumDate", + ); + const calloutBody = + this.subscription.collectionMethod === "charge_automatically" + ? this.i18nService.t( + "pastDueWarningForChargeAutomatically", + this.subscription.gracePeriod, + suspensionDate, + ) + : this.i18nService.t( + "pastDueWarningForSendInvoice", + this.subscription.gracePeriod, + suspensionDate, + ); + return { + status: { + label: defaultStatusLabel, + value: pastDueText, + }, + date: { + label: subscriptionExpiredDateLabel, + value: this.subscription.unpaidPeriodEndDate, + }, + callout: { + severity: "warning", + header: pastDueText, + body: calloutBody, + showReinstatementButton: false, + }, + }; + } + case "unpaid": { + return { + status: { + label: defaultStatusLabel, + value: this.i18nService.t("unpaid"), + }, + date: { + label: subscriptionExpiredDateLabel, + value: this.subscription.currentPeriodEndDate.toDateString(), + }, + callout: { + severity: "danger", + header: this.i18nService.t("unpaidInvoice"), + body: this.i18nService.t("toReactivateYourSubscription"), + showReinstatementButton: false, + }, + }; + } + case "pending_cancellation": { + const pendingCancellationText = this.i18nService.t("pendingCancellation"); + return { + status: { + label: defaultStatusLabel, + value: pendingCancellationText, + }, + date: { + label: cancellationDateLabel, + value: this.subscription.currentPeriodEndDate.toDateString(), + }, + callout: { + severity: "warning", + header: pendingCancellationText, + body: this.i18nService.t("subscriptionPendingCanceled"), + showReinstatementButton: true, + }, + }; + } + case "incomplete_expired": + case "canceled": { + const canceledText = this.i18nService.t("canceled"); + return { + status: { + label: defaultStatusLabel, + value: canceledText, + }, + date: { + label: cancellationDateLabel, + value: this.subscription.currentPeriodEndDate.toDateString(), + }, + callout: { + severity: "danger", + header: canceledText, + body: this.i18nService.t("subscriptionCanceled"), + showReinstatementButton: false, + }, + }; + } + } + } + + requestReinstatement = () => this.reinstatementRequested.emit(); +} diff --git a/libs/common/spec/fake-state-provider.ts b/libs/common/spec/fake-state-provider.ts index 2078fe3abde..cd868931f20 100644 --- a/libs/common/spec/fake-state-provider.ts +++ b/libs/common/spec/fake-state-provider.ts @@ -15,8 +15,6 @@ import { DerivedStateProvider, UserKeyDefinition, } from "../src/platform/state"; -// eslint-disable-next-line import/no-restricted-paths -- Needed to type check similarly to the real state providers -import { isUserKeyDefinition } from "../src/platform/state/user-key-definition"; import { UserId } from "../src/types/guid"; import { DerivedStateDependencies } from "../src/types/state"; @@ -71,37 +69,28 @@ export class FakeSingleUserStateProvider implements SingleUserStateProvider { mock = mock(); establishedMocks: Map> = new Map(); states: Map> = new Map(); - get( - userId: UserId, - keyDefinition: KeyDefinition | UserKeyDefinition, - ): SingleUserState { - this.mock.get(userId, keyDefinition); - if (keyDefinition instanceof KeyDefinition) { - keyDefinition = UserKeyDefinition.fromBaseKeyDefinition(keyDefinition); - } - const cacheKey = `${keyDefinition.fullName}_${keyDefinition.stateDefinition.defaultStorageLocation}_${userId}`; + get(userId: UserId, userKeyDefinition: UserKeyDefinition): SingleUserState { + this.mock.get(userId, userKeyDefinition); + const cacheKey = `${userKeyDefinition.fullName}_${userKeyDefinition.stateDefinition.defaultStorageLocation}_${userId}`; let result = this.states.get(cacheKey); if (result == null) { let fake: FakeSingleUserState; // Look for established mock - if (this.establishedMocks.has(keyDefinition.key)) { - fake = this.establishedMocks.get(keyDefinition.key) as FakeSingleUserState; + if (this.establishedMocks.has(userKeyDefinition.key)) { + fake = this.establishedMocks.get(userKeyDefinition.key) as FakeSingleUserState; } else { fake = new FakeSingleUserState(userId); } - fake.keyDefinition = keyDefinition; + fake.keyDefinition = userKeyDefinition; result = fake; this.states.set(cacheKey, result); } return result as SingleUserState; } - getFake( - userId: UserId, - keyDefinition: KeyDefinition | UserKeyDefinition, - ): FakeSingleUserState { - return this.get(userId, keyDefinition) as FakeSingleUserState; + getFake(userId: UserId, userKeyDefinition: UserKeyDefinition): FakeSingleUserState { + return this.get(userId, userKeyDefinition) as FakeSingleUserState; } mockFor(userId: UserId, keyDefinitionKey: string, initialValue?: T): FakeSingleUserState { @@ -122,28 +111,25 @@ export class FakeActiveUserStateProvider implements ActiveUserStateProvider { this.activeUserId$ = accountService.activeAccountSubject.asObservable().pipe(map((a) => a?.id)); } - get(keyDefinition: KeyDefinition | UserKeyDefinition): ActiveUserState { - if (keyDefinition instanceof KeyDefinition) { - keyDefinition = UserKeyDefinition.fromBaseKeyDefinition(keyDefinition); - } - const cacheKey = `${keyDefinition.fullName}_${keyDefinition.stateDefinition.defaultStorageLocation}`; + get(userKeyDefinition: UserKeyDefinition): ActiveUserState { + const cacheKey = `${userKeyDefinition.fullName}_${userKeyDefinition.stateDefinition.defaultStorageLocation}`; let result = this.states.get(cacheKey); if (result == null) { // Look for established mock - if (this.establishedMocks.has(keyDefinition.key)) { - result = this.establishedMocks.get(keyDefinition.key); + if (this.establishedMocks.has(userKeyDefinition.key)) { + result = this.establishedMocks.get(userKeyDefinition.key); } else { result = new FakeActiveUserState(this.accountService); } - result.keyDefinition = keyDefinition; + result.keyDefinition = userKeyDefinition; this.states.set(cacheKey, result); } return result as ActiveUserState; } - getFake(keyDefinition: KeyDefinition | UserKeyDefinition): FakeActiveUserState { - return this.get(keyDefinition) as FakeActiveUserState; + getFake(userKeyDefinition: UserKeyDefinition): FakeActiveUserState { + return this.get(userKeyDefinition) as FakeActiveUserState; } mockFor(keyDefinitionKey: string, initialValue?: T): FakeActiveUserState { @@ -159,70 +145,56 @@ export class FakeActiveUserStateProvider implements ActiveUserStateProvider { export class FakeStateProvider implements StateProvider { mock = mock(); - getUserState$( - keyDefinition: KeyDefinition | UserKeyDefinition, - userId?: UserId, - ): Observable { - if (isUserKeyDefinition(keyDefinition)) { - this.mock.getUserState$(keyDefinition, userId); - } else { - this.mock.getUserState$(keyDefinition, userId); - } + getUserState$(userKeyDefinition: UserKeyDefinition, userId?: UserId): Observable { + this.mock.getUserState$(userKeyDefinition, userId); if (userId) { - return this.getUser(userId, keyDefinition).state$; + return this.getUser(userId, userKeyDefinition).state$; } - return this.getActive(keyDefinition).state$; + return this.getActive(userKeyDefinition).state$; } getUserStateOrDefault$( - keyDefinition: KeyDefinition | UserKeyDefinition, + userKeyDefinition: UserKeyDefinition, config: { userId: UserId | undefined; defaultValue?: T }, ): Observable { const { userId, defaultValue = null } = config; - if (isUserKeyDefinition(keyDefinition)) { - this.mock.getUserStateOrDefault$(keyDefinition, config); - } else { - this.mock.getUserStateOrDefault$(keyDefinition, config); - } + this.mock.getUserStateOrDefault$(userKeyDefinition, config); if (userId) { - return this.getUser(userId, keyDefinition).state$; + return this.getUser(userId, userKeyDefinition).state$; } return this.activeUserId$.pipe( take(1), switchMap((userId) => - userId != null ? this.getUser(userId, keyDefinition).state$ : of(defaultValue), + userId != null ? this.getUser(userId, userKeyDefinition).state$ : of(defaultValue), ), ); } async setUserState( - keyDefinition: KeyDefinition | UserKeyDefinition, + userKeyDefinition: UserKeyDefinition, value: T, userId?: UserId, ): Promise<[UserId, T]> { - await this.mock.setUserState(keyDefinition, value, userId); + await this.mock.setUserState(userKeyDefinition, value, userId); if (userId) { - return [userId, await this.getUser(userId, keyDefinition).update(() => value)]; + return [userId, await this.getUser(userId, userKeyDefinition).update(() => value)]; } else { - return await this.getActive(keyDefinition).update(() => value); + return await this.getActive(userKeyDefinition).update(() => value); } } - getActive(keyDefinition: KeyDefinition | UserKeyDefinition): ActiveUserState { - return this.activeUser.get(keyDefinition); + getActive(userKeyDefinition: UserKeyDefinition): ActiveUserState { + return this.activeUser.get(userKeyDefinition); } getGlobal(keyDefinition: KeyDefinition): GlobalState { return this.global.get(keyDefinition); } - getUser( - userId: UserId, - keyDefinition: KeyDefinition | UserKeyDefinition, - ): SingleUserState { - return this.singleUser.get(userId, keyDefinition); + getUser(userId: UserId, userKeyDefinition: UserKeyDefinition): SingleUserState { + return this.singleUser.get(userId, userKeyDefinition); } getDerived( diff --git a/libs/common/src/billing/models/response/provider-subscription-response.ts b/libs/common/src/billing/models/response/provider-subscription-response.ts index 522c5187254..fb8818fb39d 100644 --- a/libs/common/src/billing/models/response/provider-subscription-response.ts +++ b/libs/common/src/billing/models/response/provider-subscription-response.ts @@ -4,21 +4,29 @@ export class ProviderSubscriptionResponse extends BaseResponse { status: string; currentPeriodEndDate: Date; discountPercentage?: number | null; - plans: Plans[] = []; + plans: ProviderPlanResponse[] = []; + collectionMethod: string; + unpaidPeriodEndDate?: string; + gracePeriod?: number | null; + suspensionDate?: string; constructor(response: any) { super(response); this.status = this.getResponseProperty("status"); this.currentPeriodEndDate = new Date(this.getResponseProperty("currentPeriodEndDate")); this.discountPercentage = this.getResponseProperty("discountPercentage"); + this.collectionMethod = this.getResponseProperty("collectionMethod"); + this.unpaidPeriodEndDate = this.getResponseProperty("unpaidPeriodEndDate"); + this.gracePeriod = this.getResponseProperty("gracePeriod"); + this.suspensionDate = this.getResponseProperty("suspensionDate"); const plans = this.getResponseProperty("plans"); if (plans != null) { - this.plans = plans.map((i: any) => new Plans(i)); + this.plans = plans.map((i: any) => new ProviderPlanResponse(i)); } } } -export class Plans extends BaseResponse { +export class ProviderPlanResponse extends BaseResponse { planName: string; seatMinimum: number; assignedSeats: number; diff --git a/libs/common/src/platform/abstractions/state.service.ts b/libs/common/src/platform/abstractions/state.service.ts index b73a0ec7843..6f69dca8a5a 100644 --- a/libs/common/src/platform/abstractions/state.service.ts +++ b/libs/common/src/platform/abstractions/state.service.ts @@ -82,13 +82,6 @@ export abstract class StateService { ) => Promise; getDuckDuckGoSharedKey: (options?: StorageOptions) => Promise; setDuckDuckGoSharedKey: (value: string, options?: StorageOptions) => Promise; - getEnableBrowserIntegration: (options?: StorageOptions) => Promise; - setEnableBrowserIntegration: (value: boolean, options?: StorageOptions) => Promise; - getEnableBrowserIntegrationFingerprint: (options?: StorageOptions) => Promise; - setEnableBrowserIntegrationFingerprint: ( - value: boolean, - options?: StorageOptions, - ) => Promise; getEncryptedPasswordGenerationHistory: ( options?: StorageOptions, ) => Promise; @@ -99,8 +92,6 @@ export abstract class StateService { getIsAuthenticated: (options?: StorageOptions) => Promise; getLastSync: (options?: StorageOptions) => Promise; setLastSync: (value: string, options?: StorageOptions) => Promise; - getMinimizeOnCopyToClipboard: (options?: StorageOptions) => Promise; - setMinimizeOnCopyToClipboard: (value: boolean, options?: StorageOptions) => Promise; getPasswordGenerationOptions: (options?: StorageOptions) => Promise; setPasswordGenerationOptions: ( value: PasswordGeneratorOptions, diff --git a/libs/common/src/platform/models/domain/account.ts b/libs/common/src/platform/models/domain/account.ts index 8c7d70948cb..8e26e4ed30e 100644 --- a/libs/common/src/platform/models/domain/account.ts +++ b/libs/common/src/platform/models/domain/account.ts @@ -143,7 +143,6 @@ export class AccountProfile { export class AccountSettings { defaultUriMatch?: UriMatchStrategySetting; - minimizeOnCopyToClipboard?: boolean; passwordGenerationOptions?: PasswordGeneratorOptions; usernameGenerationOptions?: UsernameGeneratorOptions; generatorOptions?: GeneratorOptions; diff --git a/libs/common/src/platform/models/domain/global-state.ts b/libs/common/src/platform/models/domain/global-state.ts index f4b22702df4..a8faeccd39a 100644 --- a/libs/common/src/platform/models/domain/global-state.ts +++ b/libs/common/src/platform/models/domain/global-state.ts @@ -1,5 +1,3 @@ export class GlobalState { - enableBrowserIntegration?: boolean; - enableBrowserIntegrationFingerprint?: boolean; enableDuckDuckGoBrowserIntegration?: boolean; } diff --git a/libs/common/src/platform/services/state.service.ts b/libs/common/src/platform/services/state.service.ts index 6906c031903..122ade0510c 100644 --- a/libs/common/src/platform/services/state.service.ts +++ b/libs/common/src/platform/services/state.service.ts @@ -347,45 +347,6 @@ export class StateService< : await this.secureStorageService.save(DDG_SHARED_KEY, value, options); } - async getEnableBrowserIntegration(options?: StorageOptions): Promise { - return ( - (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.enableBrowserIntegration ?? false - ); - } - - async setEnableBrowserIntegration(value: boolean, options?: StorageOptions): Promise { - const globals = await this.getGlobals( - this.reconcileOptions(options, await this.defaultOnDiskOptions()), - ); - globals.enableBrowserIntegration = value; - await this.saveGlobals( - globals, - this.reconcileOptions(options, await this.defaultOnDiskOptions()), - ); - } - - async getEnableBrowserIntegrationFingerprint(options?: StorageOptions): Promise { - return ( - (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.enableBrowserIntegrationFingerprint ?? false - ); - } - - async setEnableBrowserIntegrationFingerprint( - value: boolean, - options?: StorageOptions, - ): Promise { - const globals = await this.getGlobals( - this.reconcileOptions(options, await this.defaultOnDiskOptions()), - ); - globals.enableBrowserIntegrationFingerprint = value; - await this.saveGlobals( - globals, - this.reconcileOptions(options, await this.defaultOnDiskOptions()), - ); - } - async setEnableDuckDuckGoBrowserIntegration( value: boolean, options?: StorageOptions, @@ -456,24 +417,6 @@ export class StateService< ); } - async getMinimizeOnCopyToClipboard(options?: StorageOptions): Promise { - return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.minimizeOnCopyToClipboard ?? false - ); - } - - async setMinimizeOnCopyToClipboard(value: boolean, options?: StorageOptions): Promise { - const account = await this.getAccount( - this.reconcileOptions(options, await this.defaultOnDiskOptions()), - ); - account.settings.minimizeOnCopyToClipboard = value; - await this.saveAccount( - account, - this.reconcileOptions(options, await this.defaultOnDiskOptions()), - ); - } - async getPasswordGenerationOptions(options?: StorageOptions): Promise { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) diff --git a/libs/common/src/platform/state/implementations/default-active-user-state.provider.ts b/libs/common/src/platform/state/implementations/default-active-user-state.provider.ts index 3c12477b798..9c81c69d152 100644 --- a/libs/common/src/platform/state/implementations/default-active-user-state.provider.ts +++ b/libs/common/src/platform/state/implementations/default-active-user-state.provider.ts @@ -2,8 +2,7 @@ import { Observable, distinctUntilChanged, map } from "rxjs"; import { AccountService } from "../../../auth/abstractions/account.service"; import { UserId } from "../../../types/guid"; -import { KeyDefinition } from "../key-definition"; -import { UserKeyDefinition, isUserKeyDefinition } from "../user-key-definition"; +import { UserKeyDefinition } from "../user-key-definition"; import { ActiveUserState } from "../user-state"; import { ActiveUserStateProvider, SingleUserStateProvider } from "../user-state.provider"; @@ -23,11 +22,7 @@ export class DefaultActiveUserStateProvider implements ActiveUserStateProvider { ); } - get(keyDefinition: KeyDefinition | UserKeyDefinition): ActiveUserState { - if (!isUserKeyDefinition(keyDefinition)) { - keyDefinition = UserKeyDefinition.fromBaseKeyDefinition(keyDefinition); - } - + get(keyDefinition: UserKeyDefinition): ActiveUserState { // All other providers cache the creation of their corresponding `State` objects, this instance // doesn't need to do that since it calls `SingleUserStateProvider` it will go through their caching // layer, because of that, the creation of this instance is quite simple and not worth caching. diff --git a/libs/common/src/platform/state/implementations/default-single-user-state.provider.ts b/libs/common/src/platform/state/implementations/default-single-user-state.provider.ts index 9c01c2a76ed..a913bb02bdc 100644 --- a/libs/common/src/platform/state/implementations/default-single-user-state.provider.ts +++ b/libs/common/src/platform/state/implementations/default-single-user-state.provider.ts @@ -1,8 +1,7 @@ import { UserId } from "../../../types/guid"; import { StorageServiceProvider } from "../../services/storage-service.provider"; -import { KeyDefinition } from "../key-definition"; import { StateEventRegistrarService } from "../state-event-registrar.service"; -import { UserKeyDefinition, isUserKeyDefinition } from "../user-key-definition"; +import { UserKeyDefinition } from "../user-key-definition"; import { SingleUserState } from "../user-state"; import { SingleUserStateProvider } from "../user-state.provider"; @@ -16,13 +15,7 @@ export class DefaultSingleUserStateProvider implements SingleUserStateProvider { private readonly stateEventRegistrarService: StateEventRegistrarService, ) {} - get( - userId: UserId, - keyDefinition: KeyDefinition | UserKeyDefinition, - ): SingleUserState { - if (!isUserKeyDefinition(keyDefinition)) { - keyDefinition = UserKeyDefinition.fromBaseKeyDefinition(keyDefinition); - } + get(userId: UserId, keyDefinition: UserKeyDefinition): SingleUserState { const [location, storageService] = this.storageServiceProvider.get( keyDefinition.stateDefinition.defaultStorageLocation, keyDefinition.stateDefinition.storageLocationOverrides, diff --git a/libs/common/src/platform/state/implementations/default-state.provider.spec.ts b/libs/common/src/platform/state/implementations/default-state.provider.spec.ts index 98d423cf484..5b8b2d1bfeb 100644 --- a/libs/common/src/platform/state/implementations/default-state.provider.spec.ts +++ b/libs/common/src/platform/state/implementations/default-state.provider.spec.ts @@ -17,6 +17,7 @@ import { UserId } from "../../../types/guid"; import { DeriveDefinition } from "../derive-definition"; import { KeyDefinition } from "../key-definition"; import { StateDefinition } from "../state-definition"; +import { UserKeyDefinition } from "../user-key-definition"; import { DefaultStateProvider } from "./default-state.provider"; @@ -52,12 +53,12 @@ describe("DefaultStateProvider", () => { describe.each([ [ "getUserState$", - (keyDefinition: KeyDefinition, userId?: UserId) => + (keyDefinition: UserKeyDefinition, userId?: UserId) => sut.getUserState$(keyDefinition, userId), ], [ "getUserStateOrDefault$", - (keyDefinition: KeyDefinition, userId?: UserId) => + (keyDefinition: UserKeyDefinition, userId?: UserId) => sut.getUserStateOrDefault$(keyDefinition, { userId: userId }), ], ])( @@ -65,7 +66,7 @@ describe("DefaultStateProvider", () => { ( _testName: string, methodUnderTest: ( - keyDefinition: KeyDefinition, + keyDefinition: UserKeyDefinition, userId?: UserId, ) => Observable, ) => { @@ -75,9 +76,14 @@ describe("DefaultStateProvider", () => { name: "name", status: AuthenticationStatus.LoggedOut, }; - const keyDefinition = new KeyDefinition(new StateDefinition("test", "disk"), "test", { - deserializer: (s) => s, - }); + const keyDefinition = new UserKeyDefinition( + new StateDefinition("test", "disk"), + "test", + { + deserializer: (s) => s, + clearOn: [], + }, + ); it("should follow the specified user if userId is provided", async () => { const state = singleUserStateProvider.getFake(userId, keyDefinition); @@ -125,9 +131,14 @@ describe("DefaultStateProvider", () => { name: "name", status: AuthenticationStatus.LoggedOut, }; - const keyDefinition = new KeyDefinition(new StateDefinition("test", "disk"), "test", { - deserializer: (s) => s, - }); + const keyDefinition = new UserKeyDefinition( + new StateDefinition("test", "disk"), + "test", + { + deserializer: (s) => s, + clearOn: [], + }, + ); it("should not emit any values until a truthy user id is supplied", async () => { accountService.activeAccountSubject.next(null); @@ -149,9 +160,14 @@ describe("DefaultStateProvider", () => { }); describe("getUserStateOrDefault$", () => { - const keyDefinition = new KeyDefinition(new StateDefinition("test", "disk"), "test", { - deserializer: (s) => s, - }); + const keyDefinition = new UserKeyDefinition( + new StateDefinition("test", "disk"), + "test", + { + deserializer: (s) => s, + clearOn: [], + }, + ); it("should emit default value if no userId supplied and first active user id emission in falsy", async () => { accountService.activeAccountSubject.next(null); @@ -168,9 +184,14 @@ describe("DefaultStateProvider", () => { }); describe("setUserState", () => { - const keyDefinition = new KeyDefinition(new StateDefinition("test", "disk"), "test", { - deserializer: (s) => s, - }); + const keyDefinition = new UserKeyDefinition( + new StateDefinition("test", "disk"), + "test", + { + deserializer: (s) => s, + clearOn: [], + }, + ); it("should set the state for the active user if no userId is provided", async () => { const value = "value"; @@ -202,8 +223,9 @@ describe("DefaultStateProvider", () => { }); it("should bind the activeUserStateProvider", () => { - const keyDefinition = new KeyDefinition(new StateDefinition("test", "disk"), "test", { + const keyDefinition = new UserKeyDefinition(new StateDefinition("test", "disk"), "test", { deserializer: () => null, + clearOn: [], }); const existing = activeUserStateProvider.get(keyDefinition); const actual = sut.getActive(keyDefinition); @@ -212,8 +234,9 @@ describe("DefaultStateProvider", () => { it("should bind the singleUserStateProvider", () => { const userId = "user" as UserId; - const keyDefinition = new KeyDefinition(new StateDefinition("test", "disk"), "test", { + const keyDefinition = new UserKeyDefinition(new StateDefinition("test", "disk"), "test", { deserializer: () => null, + clearOn: [], }); const existing = singleUserStateProvider.get(userId, keyDefinition); const actual = sut.getUser(userId, keyDefinition); diff --git a/libs/common/src/platform/state/implementations/default-state.provider.ts b/libs/common/src/platform/state/implementations/default-state.provider.ts index 1413d26ce51..22aed80e8af 100644 --- a/libs/common/src/platform/state/implementations/default-state.provider.ts +++ b/libs/common/src/platform/state/implementations/default-state.provider.ts @@ -6,7 +6,6 @@ import { DeriveDefinition } from "../derive-definition"; import { DerivedState } from "../derived-state"; import { DerivedStateProvider } from "../derived-state.provider"; import { GlobalStateProvider } from "../global-state.provider"; -import { KeyDefinition } from "../key-definition"; import { StateProvider } from "../state.provider"; import { UserKeyDefinition } from "../user-key-definition"; import { ActiveUserStateProvider, SingleUserStateProvider } from "../user-state.provider"; @@ -22,47 +21,44 @@ export class DefaultStateProvider implements StateProvider { this.activeUserId$ = this.activeUserStateProvider.activeUserId$; } - getUserState$( - keyDefinition: KeyDefinition | UserKeyDefinition, - userId?: UserId, - ): Observable { + getUserState$(userKeyDefinition: UserKeyDefinition, userId?: UserId): Observable { if (userId) { - return this.getUser(userId, keyDefinition).state$; + return this.getUser(userId, userKeyDefinition).state$; } else { return this.activeUserId$.pipe( filter((userId) => userId != null), // Filter out null-ish user ids since we can't get state for a null user id take(1), - switchMap((userId) => this.getUser(userId, keyDefinition).state$), + switchMap((userId) => this.getUser(userId, userKeyDefinition).state$), ); } } getUserStateOrDefault$( - keyDefinition: KeyDefinition | UserKeyDefinition, + userKeyDefinition: UserKeyDefinition, config: { userId: UserId | undefined; defaultValue?: T }, ): Observable { const { userId, defaultValue = null } = config; if (userId) { - return this.getUser(userId, keyDefinition).state$; + return this.getUser(userId, userKeyDefinition).state$; } else { return this.activeUserId$.pipe( take(1), switchMap((userId) => - userId != null ? this.getUser(userId, keyDefinition).state$ : of(defaultValue), + userId != null ? this.getUser(userId, userKeyDefinition).state$ : of(defaultValue), ), ); } } async setUserState( - keyDefinition: KeyDefinition | UserKeyDefinition, + userKeyDefinition: UserKeyDefinition, value: T, userId?: UserId, ): Promise<[UserId, T]> { if (userId) { - return [userId, await this.getUser(userId, keyDefinition).update(() => value)]; + return [userId, await this.getUser(userId, userKeyDefinition).update(() => value)]; } else { - return await this.getActive(keyDefinition).update(() => value); + return await this.getActive(userKeyDefinition).update(() => value); } } diff --git a/libs/common/src/platform/state/implementations/specific-state.provider.spec.ts b/libs/common/src/platform/state/implementations/specific-state.provider.spec.ts index da41908935b..94e9c9c3e26 100644 --- a/libs/common/src/platform/state/implementations/specific-state.provider.spec.ts +++ b/libs/common/src/platform/state/implementations/specific-state.provider.spec.ts @@ -7,6 +7,7 @@ import { StorageServiceProvider } from "../../services/storage-service.provider" import { KeyDefinition } from "../key-definition"; import { StateDefinition } from "../state-definition"; import { StateEventRegistrarService } from "../state-event-registrar.service"; +import { UserKeyDefinition } from "../user-key-definition"; import { DefaultActiveUserState } from "./default-active-user-state"; import { DefaultActiveUserStateProvider } from "./default-active-user-state.provider"; @@ -41,94 +42,132 @@ describe("Specific State Providers", () => { const fakeDiskStateDefinition = new StateDefinition("fake", "disk"); const fakeAlternateDiskStateDefinition = new StateDefinition("fakeAlternate", "disk"); const fakeMemoryStateDefinition = new StateDefinition("fake", "memory"); - - const fakeDiskKeyDefinition = new KeyDefinition(fakeDiskStateDefinition, "fake", { - deserializer: (b) => b, - }); - const fakeAlternateKeyDefinition = new KeyDefinition( - fakeAlternateDiskStateDefinition, - "fake", - { + const makeKeyDefinition = (stateDefinition: StateDefinition, key: string) => + new KeyDefinition(stateDefinition, key, { deserializer: (b) => b, - }, - ); - const fakeMemoryKeyDefinition = new KeyDefinition(fakeMemoryStateDefinition, "fake", { - deserializer: (b) => b, - }); - const fakeDiskKeyDefinitionAlternate = new KeyDefinition( - fakeDiskStateDefinition, - "fakeAlternate", - { + }); + const makeUserKeyDefinition = (stateDefinition: StateDefinition, key: string) => + new UserKeyDefinition(stateDefinition, key, { deserializer: (b) => b, + clearOn: [], + }); + const keyDefinitions = { + disk: { + keyDefinition: makeKeyDefinition(fakeDiskStateDefinition, "fake"), + userKeyDefinition: makeUserKeyDefinition(fakeDiskStateDefinition, "fake"), + altKeyDefinition: makeKeyDefinition(fakeDiskStateDefinition, "fakeAlternate"), + altUserKeyDefinition: makeUserKeyDefinition(fakeDiskStateDefinition, "fakeAlternate"), }, - ); + memory: { + keyDefinition: makeKeyDefinition(fakeMemoryStateDefinition, "fake"), + userKeyDefinition: makeUserKeyDefinition(fakeMemoryStateDefinition, "fake"), + }, + alternateDisk: { + keyDefinition: makeKeyDefinition(fakeAlternateDiskStateDefinition, "fake"), + userKeyDefinition: makeUserKeyDefinition(fakeAlternateDiskStateDefinition, "fake"), + }, + }; - const globalAndSingle = [ - { - getMethod: (keyDefinition: KeyDefinition) => globalSut.get(keyDefinition), - expectedInstance: DefaultGlobalState, - }, - { - // Use a static user id so that it has the same signature as the rest and then write special tests - // handling differing user id - getMethod: (keyDefinition: KeyDefinition) => singleSut.get(fakeUser1, keyDefinition), - expectedInstance: DefaultSingleUserState, - }, - ]; + describe("active provider", () => { + it("returns a DefaultActiveUserState", () => { + const state = activeSut.get(keyDefinitions.disk.userKeyDefinition); - describe.each([ - { - getMethod: (keyDefinition: KeyDefinition) => activeSut.get(keyDefinition), - expectedInstance: DefaultActiveUserState, - }, - ...globalAndSingle, - ])("common behavior %s", ({ getMethod, expectedInstance }) => { - it("returns expected instance", () => { - const state = getMethod(fakeDiskKeyDefinition); - - expect(state).toBeTruthy(); - expect(state).toBeInstanceOf(expectedInstance); + expect(state).toBeInstanceOf(DefaultActiveUserState); }); it("returns different instances when the storage location differs", () => { - const stateDisk = getMethod(fakeDiskKeyDefinition); - const stateMemory = getMethod(fakeMemoryKeyDefinition); + const stateDisk = activeSut.get(keyDefinitions.disk.userKeyDefinition); + const stateMemory = activeSut.get(keyDefinitions.memory.userKeyDefinition); expect(stateDisk).not.toStrictEqual(stateMemory); }); it("returns different instances when the state name differs", () => { - const state = getMethod(fakeDiskKeyDefinition); - const stateAlt = getMethod(fakeAlternateKeyDefinition); + const state = activeSut.get(keyDefinitions.disk.userKeyDefinition); + const stateAlt = activeSut.get(keyDefinitions.alternateDisk.userKeyDefinition); expect(state).not.toStrictEqual(stateAlt); }); it("returns different instances when the key differs", () => { - const state = getMethod(fakeDiskKeyDefinition); - const stateAlt = getMethod(fakeDiskKeyDefinitionAlternate); + const state = activeSut.get(keyDefinitions.disk.userKeyDefinition); + const stateAlt = activeSut.get(keyDefinitions.disk.altUserKeyDefinition); expect(state).not.toStrictEqual(stateAlt); }); }); - describe.each(globalAndSingle)("Global And Single Behavior", ({ getMethod }) => { - it("returns cached instance on repeated request", () => { - const stateFirst = getMethod(fakeDiskKeyDefinition); - const stateCached = getMethod(fakeDiskKeyDefinition); - expect(stateFirst).toStrictEqual(stateCached); - }); - }); + describe("single provider", () => { + it("returns a DefaultSingleUserState", () => { + const state = singleSut.get(fakeUser1, keyDefinitions.disk.userKeyDefinition); + + expect(state).toBeInstanceOf(DefaultSingleUserState); + }); + + it("returns different instances when the storage location differs", () => { + const stateDisk = singleSut.get(fakeUser1, keyDefinitions.disk.userKeyDefinition); + const stateMemory = singleSut.get(fakeUser1, keyDefinitions.memory.userKeyDefinition); + expect(stateDisk).not.toStrictEqual(stateMemory); + }); + + it("returns different instances when the state name differs", () => { + const state = singleSut.get(fakeUser1, keyDefinitions.disk.userKeyDefinition); + const stateAlt = singleSut.get(fakeUser1, keyDefinitions.alternateDisk.userKeyDefinition); + expect(state).not.toStrictEqual(stateAlt); + }); + + it("returns different instances when the key differs", () => { + const state = singleSut.get(fakeUser1, keyDefinitions.disk.userKeyDefinition); + const stateAlt = singleSut.get(fakeUser1, keyDefinitions.disk.altUserKeyDefinition); + expect(state).not.toStrictEqual(stateAlt); + }); - describe("DefaultSingleUserStateProvider only behavior", () => { const fakeUser2 = "00000000-0000-1000-a000-000000000002" as UserId; it("returns different instances when the user id differs", () => { - const user1State = singleSut.get(fakeUser1, fakeDiskKeyDefinition); - const user2State = singleSut.get(fakeUser2, fakeDiskKeyDefinition); + const user1State = singleSut.get(fakeUser1, keyDefinitions.disk.userKeyDefinition); + const user2State = singleSut.get(fakeUser2, keyDefinitions.disk.userKeyDefinition); expect(user1State).not.toStrictEqual(user2State); }); it("returns an instance with the userId property corresponding to the user id passed in", () => { - const userState = singleSut.get(fakeUser1, fakeDiskKeyDefinition); + const userState = singleSut.get(fakeUser1, keyDefinitions.disk.userKeyDefinition); expect(userState.userId).toBe(fakeUser1); }); + + it("returns cached instance on repeated request", () => { + const stateFirst = singleSut.get(fakeUser1, keyDefinitions.disk.userKeyDefinition); + const stateCached = singleSut.get(fakeUser1, keyDefinitions.disk.userKeyDefinition); + expect(stateFirst).toStrictEqual(stateCached); + }); + }); + + describe("global provider", () => { + it("returns a DefaultGlobalState", () => { + const state = globalSut.get(keyDefinitions.disk.keyDefinition); + + expect(state).toBeInstanceOf(DefaultGlobalState); + }); + + it("returns different instances when the storage location differs", () => { + const stateDisk = globalSut.get(keyDefinitions.disk.keyDefinition); + const stateMemory = globalSut.get(keyDefinitions.memory.keyDefinition); + expect(stateDisk).not.toStrictEqual(stateMemory); + }); + + it("returns different instances when the state name differs", () => { + const state = globalSut.get(keyDefinitions.disk.keyDefinition); + const stateAlt = globalSut.get(keyDefinitions.alternateDisk.keyDefinition); + expect(state).not.toStrictEqual(stateAlt); + }); + + it("returns different instances when the key differs", () => { + const state = globalSut.get(keyDefinitions.disk.keyDefinition); + const stateAlt = globalSut.get(keyDefinitions.disk.altKeyDefinition); + expect(state).not.toStrictEqual(stateAlt); + }); + + it("returns cached instance on repeated request", () => { + const stateFirst = globalSut.get(keyDefinitions.disk.keyDefinition); + const stateCached = globalSut.get(keyDefinitions.disk.keyDefinition); + expect(stateFirst).toStrictEqual(stateCached); + }); }); }); diff --git a/libs/common/src/platform/state/state.provider.ts b/libs/common/src/platform/state/state.provider.ts index a1e51552c73..44736500afc 100644 --- a/libs/common/src/platform/state/state.provider.ts +++ b/libs/common/src/platform/state/state.provider.ts @@ -21,22 +21,6 @@ export abstract class StateProvider { /** @see{@link ActiveUserStateProvider.activeUserId$} */ abstract activeUserId$: Observable; - /** - * Gets a state observable for a given key and userId. - * - * @remarks If userId is falsy the observable returned will attempt to point to the currently active user _and not update if the active user changes_. - * This is different to how `getActive` works and more similar to `getUser` for whatever user happens to be active at the time of the call. - * If no user happens to be active at the time this method is called with a falsy userId then this observable will not emit a value until - * a user becomes active. If you are not confident a user is active at the time this method is called, you may want to pipe a call to `timeout` - * or instead call {@link getUserStateOrDefault$} and supply a value you would rather have given in the case of no passed in userId and no active user. - * - * @note consider converting your {@link KeyDefinition} to a {@link UserKeyDefinition} for additional features. - * - * @param keyDefinition - The key definition for the state you want to get. - * @param userId - The userId for which you want the state for. If not provided, the state for the currently active user will be returned. - */ - abstract getUserState$(keyDefinition: KeyDefinition, userId?: UserId): Observable; - /** * Gets a state observable for a given key and userId. * @@ -51,23 +35,6 @@ export abstract class StateProvider { */ abstract getUserState$(keyDefinition: UserKeyDefinition, userId?: UserId): Observable; - /** - * Gets a state observable for a given key and userId - * - * @remarks If userId is falsy the observable return will first attempt to point to the currently active user but will not follow subsequent active user changes, - * if there is no immediately available active user, then it will fallback to returning a default value in an observable that immediately completes. - * - * @note consider converting your {@link KeyDefinition} to a {@link UserKeyDefinition} for additional features. - * - * @param keyDefinition - The key definition for the state you want to get. - * @param config.userId - The userId for which you want the state for. If not provided, the state for the currently active user will be returned. - * @param config.defaultValue - The default value that should be wrapped in an observable if no active user is immediately available and no truthy userId is passed in. - */ - abstract getUserStateOrDefault$( - keyDefinition: KeyDefinition, - config: { userId: UserId | undefined; defaultValue?: T }, - ): Observable; - /** * Gets a state observable for a given key and userId * @@ -97,56 +64,11 @@ export abstract class StateProvider { userId?: UserId, ): Promise<[UserId, T]>; - /** - * Sets the state for a given key and userId. - * - * **NOTE** Consider converting your {@link KeyDefinition} to a {@link UserKeyDefinition} for additional features. - * - * @overload - * @param keyDefinition - The key definition for the state you want to set. - * @param value - The value to set the state to. - * @param userId - The userId for which you want to set the state for. If not provided, the state for the currently active user will be set. - */ - abstract setUserState( - keyDefinition: KeyDefinition, - value: T, - userId?: UserId, - ): Promise<[UserId, T]>; - - abstract setUserState( - keyDefinition: KeyDefinition | UserKeyDefinition, - value: T, - userId?: UserId, - ): Promise<[UserId, T]>; - /** @see{@link ActiveUserStateProvider.get} */ - abstract getActive(keyDefinition: UserKeyDefinition): ActiveUserState; - - /** - * @see{@link ActiveUserStateProvider.get} - * - * **NOTE** Consider converting your {@link KeyDefinition} to a {@link UserKeyDefinition} for additional features. - */ - abstract getActive(keyDefinition: KeyDefinition): ActiveUserState; - - /** @see{@link ActiveUserStateProvider.get} */ - abstract getActive(keyDefinition: KeyDefinition | UserKeyDefinition): ActiveUserState; + abstract getActive(userKeyDefinition: UserKeyDefinition): ActiveUserState; /** @see{@link SingleUserStateProvider.get} */ - abstract getUser(userId: UserId, keyDefinition: UserKeyDefinition): SingleUserState; - - /** - * @see{@link SingleUserStateProvider.get} - * - * **NOTE** Consider converting your {@link KeyDefinition} to a {@link UserKeyDefinition} for additional features. - */ - abstract getUser(userId: UserId, keyDefinition: KeyDefinition): SingleUserState; - - /** @see{@link SingleUserStateProvider.get} */ - abstract getUser( - userId: UserId, - keyDefinition: KeyDefinition | UserKeyDefinition, - ): SingleUserState; + abstract getUser(userId: UserId, userKeyDefinition: UserKeyDefinition): SingleUserState; /** @see{@link GlobalStateProvider.get} */ abstract getGlobal(keyDefinition: KeyDefinition): GlobalState; diff --git a/libs/common/src/platform/state/user-key-definition.ts b/libs/common/src/platform/state/user-key-definition.ts index 4c622e29f1e..7e845fc8585 100644 --- a/libs/common/src/platform/state/user-key-definition.ts +++ b/libs/common/src/platform/state/user-key-definition.ts @@ -3,7 +3,7 @@ import { StorageKey } from "../../types/state"; import { Utils } from "../misc/utils"; import { array, record } from "./deserialization-helpers"; -import { KeyDefinition, KeyDefinitionOptions } from "./key-definition"; +import { KeyDefinitionOptions } from "./key-definition"; import { StateDefinition } from "./state-definition"; export type ClearEvent = "lock" | "logout"; @@ -14,15 +14,6 @@ export type UserKeyDefinitionOptions = KeyDefinitionOptions & { const USER_KEY_DEFINITION_MARKER: unique symbol = Symbol("UserKeyDefinition"); -export function isUserKeyDefinition( - keyDefinition: KeyDefinition | UserKeyDefinition, -): keyDefinition is UserKeyDefinition { - return ( - USER_KEY_DEFINITION_MARKER in keyDefinition && - keyDefinition[USER_KEY_DEFINITION_MARKER] === true - ); -} - export class UserKeyDefinition { readonly [USER_KEY_DEFINITION_MARKER] = true; /** @@ -63,20 +54,6 @@ export class UserKeyDefinition { return this.options.cleanupDelayMs < 0 ? 0 : this.options.cleanupDelayMs ?? 1000; } - /** - * - * @param keyDefinition - * @returns - * - * @deprecated You should not use this to convert, just create a {@link UserKeyDefinition} - */ - static fromBaseKeyDefinition(keyDefinition: KeyDefinition) { - return new UserKeyDefinition(keyDefinition.stateDefinition, keyDefinition.key, { - ...keyDefinition["options"], - clearOn: [], // Default to not clearing - }); - } - /** * Creates a {@link UserKeyDefinition} for state that is an array. * @param stateDefinition The state definition to be added to the UserKeyDefinition diff --git a/libs/common/src/platform/state/user-state.provider.ts b/libs/common/src/platform/state/user-state.provider.ts index 3af10218f87..677f8b472dc 100644 --- a/libs/common/src/platform/state/user-state.provider.ts +++ b/libs/common/src/platform/state/user-state.provider.ts @@ -2,22 +2,11 @@ import { Observable } from "rxjs"; import { UserId } from "../../types/guid"; -import { KeyDefinition } from "./key-definition"; import { UserKeyDefinition } from "./user-key-definition"; import { ActiveUserState, SingleUserState } from "./user-state"; /** A provider for getting an implementation of state scoped to a given key and userId */ export abstract class SingleUserStateProvider { - /** - * Gets a {@link SingleUserState} scoped to the given {@link KeyDefinition} and {@link UserId} - * - * **NOTE** Consider converting your {@link KeyDefinition} to a {@link UserKeyDefinition} for additional features. - * - * @param userId - The {@link UserId} for which you want the user state for. - * @param keyDefinition - The {@link KeyDefinition} for which you want the user state for. - */ - abstract get(userId: UserId, keyDefinition: KeyDefinition): SingleUserState; - /** * Gets a {@link SingleUserState} scoped to the given {@link UserKeyDefinition} and {@link UserId} * @@ -25,11 +14,6 @@ export abstract class SingleUserStateProvider { * @param userKeyDefinition - The {@link UserKeyDefinition} for which you want the user state for. */ abstract get(userId: UserId, userKeyDefinition: UserKeyDefinition): SingleUserState; - - abstract get( - userId: UserId, - keyDefinition: KeyDefinition | UserKeyDefinition, - ): SingleUserState; } /** A provider for getting an implementation of state scoped to a given key, but always pointing @@ -48,16 +32,4 @@ export abstract class ActiveUserStateProvider { * @param keyDefinition - The {@link UserKeyDefinition} for which you want the user state for. */ abstract get(userKeyDefinition: UserKeyDefinition): ActiveUserState; - - /** - * Gets a {@link ActiveUserState} scoped to the given {@link KeyDefinition}, but updates when active user changes such - * that the emitted values always represents the state for the currently active user. - * - * **NOTE** Consider converting your {@link KeyDefinition} to a {@link UserKeyDefinition} for additional features. - * - * @param keyDefinition - The {@link KeyDefinition} for which you want the user state for. - */ - abstract get(keyDefinition: KeyDefinition): ActiveUserState; - - abstract get(keyDefinition: KeyDefinition | UserKeyDefinition): ActiveUserState; } diff --git a/libs/common/src/state-migrations/migrate.ts b/libs/common/src/state-migrations/migrate.ts index d0543fb8c3a..3d849cfbf77 100644 --- a/libs/common/src/state-migrations/migrate.ts +++ b/libs/common/src/state-migrations/migrate.ts @@ -63,13 +63,14 @@ import { VaultTimeoutSettingsServiceStateProviderMigrator } from "./migrations/6 import { PasswordOptionsMigrator } from "./migrations/63-migrate-password-settings"; import { GeneratorHistoryMigrator } from "./migrations/64-migrate-generator-history"; import { ForwarderOptionsMigrator } from "./migrations/65-migrate-forwarder-settings"; +import { MoveFinalDesktopSettingsMigrator } from "./migrations/66-move-final-desktop-settings"; import { MoveBiometricAutoPromptToAccount } from "./migrations/7-move-biometric-auto-prompt-to-account"; import { MoveStateVersionMigrator } from "./migrations/8-move-state-version"; import { MoveBrowserSettingsToGlobal } from "./migrations/9-move-browser-settings-to-global"; import { MinVersionMigrator } from "./migrations/min-version"; export const MIN_VERSION = 3; -export const CURRENT_VERSION = 65; +export const CURRENT_VERSION = 66; export type MinVersion = typeof MIN_VERSION; export function createMigrationBuilder() { @@ -136,7 +137,8 @@ export function createMigrationBuilder() { .with(VaultTimeoutSettingsServiceStateProviderMigrator, 61, 62) .with(PasswordOptionsMigrator, 62, 63) .with(GeneratorHistoryMigrator, 63, 64) - .with(ForwarderOptionsMigrator, 64, CURRENT_VERSION); + .with(ForwarderOptionsMigrator, 64, 65) + .with(MoveFinalDesktopSettingsMigrator, 65, CURRENT_VERSION); } export async function currentVersion( diff --git a/libs/common/src/state-migrations/migration-helper.spec.ts b/libs/common/src/state-migrations/migration-helper.spec.ts index 9f6fa747478..49e6e7fe9cf 100644 --- a/libs/common/src/state-migrations/migration-helper.spec.ts +++ b/libs/common/src/state-migrations/migration-helper.spec.ts @@ -356,10 +356,12 @@ export async function runMigrator< initalData?: InitialDataHint, direction: "migrate" | "rollback" = "migrate", ): Promise> { - // Inject fake data at every level of the object - const allInjectedData = injectData(initalData, []); + const clonedData = JSON.parse(JSON.stringify(initalData ?? {})); - const fakeStorageService = new FakeStorageService(initalData); + // Inject fake data at every level of the object + const allInjectedData = injectData(clonedData, []); + + const fakeStorageService = new FakeStorageService(clonedData); const helper = new MigrationHelper( migrator.fromVersion, fakeStorageService, diff --git a/libs/common/src/state-migrations/migrations/66-move-final-desktop-settings.spec.ts b/libs/common/src/state-migrations/migrations/66-move-final-desktop-settings.spec.ts new file mode 100644 index 00000000000..19be45640fb --- /dev/null +++ b/libs/common/src/state-migrations/migrations/66-move-final-desktop-settings.spec.ts @@ -0,0 +1,143 @@ +import { runMigrator } from "../migration-helper.spec"; + +import { MoveFinalDesktopSettingsMigrator } from "./66-move-final-desktop-settings"; + +describe("MoveDesktopSettings", () => { + const sut = new MoveFinalDesktopSettingsMigrator(65, 66); + + const cases: { + it: string; + preMigration: Record; + postMigration: Record; + }[] = [ + { + it: "moves truthy values", + preMigration: { + global_account_accounts: { + user1: {}, + otherUser: {}, + }, + user1: { + settings: { + minimizeOnCopyToClipboard: true, + }, + }, + otherUser: { + settings: { + random: "stuff", + }, + }, + global: { + enableBrowserIntegration: true, + enableBrowserIntegrationFingerprint: true, + }, + }, + postMigration: { + global_account_accounts: { + user1: {}, + otherUser: {}, + }, + global: {}, + user1: { + settings: {}, + }, + otherUser: { + settings: { + random: "stuff", + }, + }, + global_desktopSettings_browserIntegrationEnabled: true, + user_user1_desktopSettings_minimizeOnCopy: true, + global_desktopSettings_browserIntegrationFingerprintEnabled: true, + }, + }, + { + it: "moves falsey values", + preMigration: { + global_account_accounts: { + user1: {}, + otherUser: {}, + }, + user1: { + settings: { + minimizeOnCopyToClipboard: false, + }, + }, + otherUser: { + settings: { + random: "stuff", + }, + }, + global: { + enableBrowserIntegration: false, + enableBrowserIntegrationFingerprint: false, + }, + }, + postMigration: { + global_account_accounts: { + user1: {}, + otherUser: {}, + }, + global: {}, + user1: { + settings: {}, + }, + otherUser: { + settings: { + random: "stuff", + }, + }, + global_desktopSettings_browserIntegrationEnabled: false, + user_user1_desktopSettings_minimizeOnCopy: false, + global_desktopSettings_browserIntegrationFingerprintEnabled: false, + }, + }, + { + it: "does not move non-existant values", + preMigration: { + global_account_accounts: { + user1: {}, + otherUser: {}, + }, + user1: { + settings: {}, + }, + otherUser: { + settings: { + random: "stuff", + }, + }, + global: {}, + }, + postMigration: { + global_account_accounts: { + user1: {}, + otherUser: {}, + }, + global: {}, + user1: { + settings: {}, + }, + otherUser: { + settings: { + random: "stuff", + }, + }, + }, + }, + ]; + + describe("migrate", () => { + it.each(cases)("$it", async ({ preMigration, postMigration }) => { + const actualOutput = await runMigrator(sut, preMigration, "migrate"); + expect(actualOutput).toEqual(postMigration); + }); + }); + + describe("rollback", () => { + it.each(cases)("$it", async ({ postMigration, preMigration }) => { + const actualOutput = await runMigrator(sut, postMigration, "rollback"); + expect(actualOutput).toEqual(preMigration); + }); + }); +}); diff --git a/libs/common/src/state-migrations/migrations/66-move-final-desktop-settings.ts b/libs/common/src/state-migrations/migrations/66-move-final-desktop-settings.ts new file mode 100644 index 00000000000..67fbc6ec00c --- /dev/null +++ b/libs/common/src/state-migrations/migrations/66-move-final-desktop-settings.ts @@ -0,0 +1,119 @@ +import { KeyDefinitionLike, MigrationHelper, StateDefinitionLike } from "../migration-helper"; +import { Migrator } from "../migrator"; + +type ExpectedGlobal = { + enableBrowserIntegration?: boolean; + enableBrowserIntegrationFingerprint?: boolean; +}; + +type ExpectedAccount = { + settings?: { + minimizeOnCopyToClipboard?: boolean; + }; +}; + +const DESKTOP_SETTINGS_DISK: StateDefinitionLike = { + name: "desktopSettings", +}; + +const BROWSER_INTEGRATION_ENABLED: KeyDefinitionLike = { + key: "browserIntegrationEnabled", + stateDefinition: DESKTOP_SETTINGS_DISK, +}; + +const BROWSER_INTEGRATION_FINGERPRINT_ENABLED: KeyDefinitionLike = { + key: "browserIntegrationFingerprintEnabled", + stateDefinition: DESKTOP_SETTINGS_DISK, +}; + +const MINIMIZE_ON_COPY: KeyDefinitionLike = { + key: "minimizeOnCopy", + stateDefinition: DESKTOP_SETTINGS_DISK, +}; + +export class MoveFinalDesktopSettingsMigrator extends Migrator<65, 66> { + async migrate(helper: MigrationHelper): Promise { + const legacyGlobal = await helper.get("global"); + const enableBrowserIntegrationValue = legacyGlobal?.enableBrowserIntegration; + const enableBrowserIntegrationFingerprintValue = + legacyGlobal?.enableBrowserIntegrationFingerprint; + + let updatedGlobal = false; + + if (enableBrowserIntegrationValue != null) { + await helper.setToGlobal(BROWSER_INTEGRATION_ENABLED, enableBrowserIntegrationValue); + delete legacyGlobal.enableBrowserIntegration; + updatedGlobal = true; + } + + if (enableBrowserIntegrationValue != null) { + await helper.setToGlobal( + BROWSER_INTEGRATION_FINGERPRINT_ENABLED, + enableBrowserIntegrationFingerprintValue, + ); + delete legacyGlobal.enableBrowserIntegrationFingerprint; + updatedGlobal = true; + } + + if (updatedGlobal) { + await helper.set("global", legacyGlobal); + } + + async function migrateAccount(userId: string, account: ExpectedAccount) { + const minimizeOnCopyToClipboardValue = account?.settings?.minimizeOnCopyToClipboard; + + if (minimizeOnCopyToClipboardValue != null) { + await helper.setToUser(userId, MINIMIZE_ON_COPY, minimizeOnCopyToClipboardValue); + delete account.settings.minimizeOnCopyToClipboard; + await helper.set(userId, account); + } + } + + const accounts = await helper.getAccounts(); + + await Promise.all(accounts.map(({ userId, account }) => migrateAccount(userId, account))); + } + + async rollback(helper: MigrationHelper): Promise { + const browserIntegrationEnabledValue = await helper.getFromGlobal( + BROWSER_INTEGRATION_ENABLED, + ); + + const browserIntegrationFingerprintEnabled = await helper.getFromGlobal( + BROWSER_INTEGRATION_FINGERPRINT_ENABLED, + ); + + if (browserIntegrationEnabledValue != null) { + let legacyGlobal = await helper.get("global"); + legacyGlobal ??= {}; + legacyGlobal.enableBrowserIntegration = browserIntegrationEnabledValue; + await helper.set("global", legacyGlobal); + await helper.removeFromGlobal(BROWSER_INTEGRATION_ENABLED); + } + + if (browserIntegrationFingerprintEnabled != null) { + let legacyGlobal = await helper.get("global"); + legacyGlobal ??= {}; + legacyGlobal.enableBrowserIntegrationFingerprint = browserIntegrationFingerprintEnabled; + await helper.set("global", legacyGlobal); + await helper.removeFromGlobal(BROWSER_INTEGRATION_FINGERPRINT_ENABLED); + } + + async function rollbackAccount(userId: string, account: ExpectedAccount) { + const minimizeOnCopyToClipboardValue = await helper.getFromUser( + userId, + MINIMIZE_ON_COPY, + ); + + if (minimizeOnCopyToClipboardValue != null) { + account ??= { settings: {} }; + account.settings.minimizeOnCopyToClipboard = minimizeOnCopyToClipboardValue; + await helper.set(userId, account); + await helper.removeFromUser(userId, MINIMIZE_ON_COPY); + } + } + + const accounts = await helper.getAccounts(); + await Promise.all(accounts.map(({ userId, account }) => rollbackAccount(userId, account))); + } +} diff --git a/libs/components/src/icon/icons/no-results.ts b/libs/components/src/icon/icons/no-results.ts index f68e67f88ce..02e03f4c4ec 100644 --- a/libs/components/src/icon/icons/no-results.ts +++ b/libs/components/src/icon/icons/no-results.ts @@ -2,17 +2,17 @@ import { svgIcon } from "../icon"; export const NoResults = svgIcon` - - - - - - - - - - - + + + + + + + + + + + `;