[PM-6426] Merging main into branch
This commit is contained in:
commit
29a515d941
|
@ -186,17 +186,10 @@ jobs:
|
|||
# path: browser-source/apps/browser/dist/dist-opera-mv3.zip
|
||||
# if-no-files-found: error
|
||||
|
||||
- name: Upload Chrome artifact
|
||||
- name: Upload Chrome MV3 artifact
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
|
||||
with:
|
||||
name: dist-chrome-${{ env._BUILD_NUMBER }}.zip
|
||||
path: browser-source/apps/browser/dist/dist-chrome.zip
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Upload Chrome MV3 artifact (DO NOT USE FOR PROD)
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
|
||||
with:
|
||||
name: DO-NOT-USE-FOR-PROD-dist-chrome-MV3-${{ env._BUILD_NUMBER }}.zip
|
||||
name: dist-chrome-MV3-${{ env._BUILD_NUMBER }}.zip
|
||||
path: browser-source/apps/browser/dist/dist-chrome-mv3.zip
|
||||
if-no-files-found: error
|
||||
|
||||
|
|
|
@ -132,7 +132,7 @@ jobs:
|
|||
PACKAGE_VERSION: ${{ needs.setup.outputs.release-version }}
|
||||
run: |
|
||||
mv browser-source.zip browser-source-$PACKAGE_VERSION.zip
|
||||
mv dist-chrome.zip dist-chrome-$PACKAGE_VERSION.zip
|
||||
mv dist-chrome-mv3.zip dist-chrome-$PACKAGE_VERSION.zip
|
||||
mv dist-opera.zip dist-opera-$PACKAGE_VERSION.zip
|
||||
mv dist-firefox.zip dist-firefox-$PACKAGE_VERSION.zip
|
||||
mv dist-edge.zip dist-edge-$PACKAGE_VERSION.zip
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
---
|
||||
name: Run tests
|
||||
name: Testing
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
@ -8,29 +7,20 @@ on:
|
|||
- "main"
|
||||
- "rc"
|
||||
- "hotfix-rc-*"
|
||||
pull_request_target:
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
check-run:
|
||||
name: Check PR run
|
||||
uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main
|
||||
|
||||
test:
|
||||
name: Run tests
|
||||
runs-on: ubuntu-22.04
|
||||
needs: check-run
|
||||
permissions:
|
||||
checks: write
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Get Node Version
|
||||
|
@ -75,14 +65,26 @@ jobs:
|
|||
reporter: jest-junit
|
||||
fail-on-error: true
|
||||
|
||||
- name: Check for Codecov secret
|
||||
id: check-codecov-secret
|
||||
run: |
|
||||
if [ "${{ secrets.CODECOV_TOKEN }}" != '' ]; then
|
||||
echo "available=true" >> $GITHUB_OUTPUT;
|
||||
else
|
||||
echo "available=false" >> $GITHUB_OUTPUT;
|
||||
fi
|
||||
|
||||
- name: Upload to codecov.io
|
||||
uses: codecov/codecov-action@54bcd8715eee62d40e33596ef5e8f0f48dbbccab # v4.1.0
|
||||
if: steps.check-codecov-secret.outputs.available == 'true'
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
rust:
|
||||
name: rust - ${{ matrix.os }}
|
||||
name: Run Rust tests on ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
|
@ -92,7 +94,7 @@ jobs:
|
|||
- windows-latest
|
||||
|
||||
steps:
|
||||
- name: Rust version check
|
||||
- name: Check Rust version
|
||||
run: rustup --version
|
||||
|
||||
- name: Install gnome-keyring
|
||||
|
@ -101,7 +103,7 @@ jobs:
|
|||
sudo apt-get update
|
||||
sudo apt-get install -y gnome-keyring dbus-x11
|
||||
|
||||
- name: Checkout repo
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Build
|
||||
|
|
10
angular.json
10
angular.json
|
@ -160,7 +160,15 @@
|
|||
"configDir": ".storybook",
|
||||
"browserTarget": "components:build",
|
||||
"compodoc": true,
|
||||
"compodocArgs": ["-e", "json", "-d", "."],
|
||||
"compodocArgs": [
|
||||
"-p",
|
||||
"./tsconfig.json",
|
||||
"-e",
|
||||
"json",
|
||||
"-d",
|
||||
".",
|
||||
"--disableRoutesGraph"
|
||||
],
|
||||
"outputDir": "storybook-static"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"devFlags": {},
|
||||
"flags": {
|
||||
"showPasswordless": true,
|
||||
"enableCipherKeyEncryption": false,
|
||||
"enableCipherKeyEncryption": true,
|
||||
"accountSwitching": false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
},
|
||||
"flags": {
|
||||
"showPasswordless": true,
|
||||
"enableCipherKeyEncryption": false,
|
||||
"enableCipherKeyEncryption": true,
|
||||
"accountSwitching": true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"flags": {
|
||||
"enableCipherKeyEncryption": false,
|
||||
"enableCipherKeyEncryption": true,
|
||||
"accountSwitching": true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@bitwarden/browser",
|
||||
"version": "2024.6.0",
|
||||
"version": "2024.6.2",
|
||||
"scripts": {
|
||||
"build": "cross-env MANIFEST_VERSION=3 webpack",
|
||||
"build:mv2": "webpack",
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "إنشاء حساب"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "تسجيل الدخول"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "الهوية"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "سجل كلمة المرور"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "كلمة المرور الرئيسية الجديدة لا تفي بمتطلبات السياسة العامة."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "من خلال تحديد هذا المربع فإنك توافق على ما يلي:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Hesab yarat"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Güclü bir parol təyin et"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Bir parol təyin edərək hesabınızı yaratmağı başa çatdırın"
|
||||
},
|
||||
"login": {
|
||||
"message": "Giriş et"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Sevimlilərdən sil"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Element sevimlilərə əlavə edildi"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Element sevimlilərdən çıxarıldı"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Notlar"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Kimlik"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Yeni $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "$TYPE$ - düzəliş et",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Parol tarixçəsi"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Yeni ana parolunuz siyasət tələblərini qarşılamır."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Elanlar, məsləhətlər və araşdırma fürsətləri üçün Bitwarden-dən e-poçt alın."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Abunəlikdən çıx"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "istənilən vaxt."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Davam edərək, bunlarla razılaşırsınız"
|
||||
},
|
||||
"and": {
|
||||
"message": "və"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Bu qutunu işarələyərək aşağıdakılarla razılaşırsınız:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Filtrləri təmizləyin və ya başqa bir axtarış terminini sınayın"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Məlumatları kopyala - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Avto-doldur - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Kopyalanacaq dəyər yoxdur"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Kolleksiyaları təyin et"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Стварыць уліковы запіс"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Увайсці"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Пасведчанне"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Гісторыя пароляў"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Ваш новы асноўны пароль не адпавядае патрабаванням палітыкі."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Ставячы гэты сцяжок, вы пагаджаецеся з наступным:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Създаване на акаунт"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Използвайте сложна парола"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Завършете регистрацията си като зададете парола"
|
||||
},
|
||||
"login": {
|
||||
"message": "Вписване"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Изваждане от любими"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Елементът е добавен към любимите"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Елементът е премахнат от любимите"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Бележки"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Самоличност"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Редактиране на $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Хронология на паролата"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Паролата ви не отговаря на политиките."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Получавайте е-писма от Битоурден за новини, съвети и възможности за проучвания."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Отписване"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "по всяко време."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Ако продължите, Вие се съгласявате с"
|
||||
},
|
||||
"and": {
|
||||
"message": "и"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Чрез тази отметка вие се съгласявате със следното:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Изчистете филтрите или опитайте да търсите нещо друго"
|
||||
},
|
||||
"copyInfoLabel": {
|
||||
"message": "Копиране на информацията, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Копиране на информацията – $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Авт. попълване – $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Няма стойности за копиране"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Свързване на колекции"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "অ্যাকাউন্ট তৈরি করুন"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "প্রবেশ করুন"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "পরিচয়"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "পাসওয়ার্ড ইতিহাস"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "আপনার নতুন মূল পাসওয়ার্ড নীতির প্রয়োজনীয়তা পূরণ করে না।"
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "এই বাক্সটি টিক করে আপনি নিম্নলিখিতগুলিতে সম্মত হন:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Napravi račun"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Prijavite se"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Crea un compte"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Inicia sessió"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitat"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Historial de les contrasenyes"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "La nova contrasenya principal no compleix els requisits de la política."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Si activeu aquesta casella, indiqueu que esteu d’acord amb el següent:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Vytvořit účet"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Nastavit hlavní heslo"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Dokončete vytváření účtu nastavením hesla"
|
||||
},
|
||||
"login": {
|
||||
"message": "Přihlásit se"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Unfavorite"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Položka byla přidána do oblíbených"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Položka byla odebrána z oblíbených"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Poznámky"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identita"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Nové $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Upravit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Historie hesel"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Vaše nové hlavní heslo nesplňuje požadavky zásad organizace."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Získejte e-maily od Bitwardenu pro oznámení, poradenství a výzkumné příležitosti."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Odhlásit odběr"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "kdykoli."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Pokračováním souhlasíte s"
|
||||
},
|
||||
"and": {
|
||||
"message": "a"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Zaškrtnutím tohoto políčka souhlasíte s následujícím:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Vymažte filtry nebo zkuste jiný hledaný výraz"
|
||||
},
|
||||
"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": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Kopírovat informace - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Automatické vyplnění - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Žádné hodnoty ke zkopírování"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Creu cyfrif"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Mewngofnodi"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Hunaniaeth"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Hanes cyfrineiriau"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Drwy dicio'r blwch hwn, rydych yn cytuno i'r canlynol:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Opret konto"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Indstil en stærk adgangskode"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Afslut kontooprettelsen med at indstille en adgangskode"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log ind"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitet"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Ny $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Redigér $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Adgangskodehistorik"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Din nye hovedadgangskode opfylder ikke politikkravene."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Afmeld"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "til enhver tid."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Ved at fortsætte, accepterer du"
|
||||
},
|
||||
"and": {
|
||||
"message": "og"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Ved at markere dette felt accepterer du følgende:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Ryd filtre eller prøv med et andet søgeord"
|
||||
},
|
||||
"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": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Kopiér info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Autoudfyld - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Ingen værdier at kopiere"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Tildel samlinger"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Konto erstellen"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Ein starkes Passwort festlegen"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Schließe die Erstellung deines Kontos ab, indem du ein Passwort festlegst"
|
||||
},
|
||||
"login": {
|
||||
"message": "Anmelden"
|
||||
},
|
||||
|
@ -390,13 +396,13 @@
|
|||
"message": "Favoriten"
|
||||
},
|
||||
"unfavorite": {
|
||||
"message": "Unfavorite"
|
||||
"message": "Aus Favoriten entfernen"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Eintrag zu Favoriten hinzugefügt"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Eintrag aus Favoriten entfernt"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Notizen"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identität"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Neue $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "$TYPE$ bearbeiten",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Passwortverlauf"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Ihr neues Master-Passwort entspricht nicht den Anforderungen der Richtlinie."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Erhalte E-Mails von Bitwarden für Ankündigungen, Ratschläge und Forschungsmöglichkeiten."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Deabonnieren"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Durch Anwählen dieses Kästchens erklärst du dich mit Folgendem einverstanden:"
|
||||
},
|
||||
|
@ -3305,18 +3344,8 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Entferne die Filter oder versuche einen anderen Suchbegriff"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"message": "Information kopieren - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3325,18 +3354,8 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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$",
|
||||
"message": "Notiz kopieren - $ITEMNAME$",
|
||||
"description": "Title for a button copies a note to the clipboard.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3346,7 +3365,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsLabel": {
|
||||
"message": "More options, $ITEMNAME$",
|
||||
"message": "Weitere Optionen, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3356,7 +3375,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsTitle": {
|
||||
"message": "More options - $ITEMNAME$",
|
||||
"message": "Weitere Optionen - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3366,7 +3385,7 @@
|
|||
}
|
||||
},
|
||||
"viewItemTitle": {
|
||||
"message": "View item - $ITEMNAME$",
|
||||
"message": "Eintrag anzeigen - $ITEMNAME$",
|
||||
"description": "Title for a link that opens a view for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-Ausfüllen - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Keine Werte zum Kopieren"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Sammlungen zuweisen"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Δημιουργία λογαριασμού"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Σύνδεση"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Ταυτότητα"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Ιστορικό Κωδικού"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Ο νέος κύριος κωδικός δεν πληροί τις απαιτήσεις πολιτικής."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Επιλέγοντας αυτό το πλαίσιο, συμφωνείτε με τα εξής:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -43,6 +49,19 @@
|
|||
"masterPassHintDesc": {
|
||||
"message": "A master password hint can help you remember your password if you forget it."
|
||||
},
|
||||
"masterPassHintText": {
|
||||
"message": "If you forget your password, the password hint can be sent to your email. $CURRENT$/$MAXIMUM$ character maximum.",
|
||||
"placeholders": {
|
||||
"current": {
|
||||
"content": "$1",
|
||||
"example": "0"
|
||||
},
|
||||
"maximum": {
|
||||
"content": "$2",
|
||||
"example": "50"
|
||||
}
|
||||
}
|
||||
},
|
||||
"reTypeMasterPass": {
|
||||
"message": "Re-type master password"
|
||||
},
|
||||
|
@ -1780,6 +1799,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -2855,6 +2889,9 @@
|
|||
"message": "Turn off master password re-prompt to edit this field",
|
||||
"description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item."
|
||||
},
|
||||
"toggleSideNavigation": {
|
||||
"message": "Toggle side navigation"
|
||||
},
|
||||
"skipToContent": {
|
||||
"message": "Skip to content"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Unfavourite"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Item added to favourites"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Item removed from favourites"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Notes"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Crear cuenta"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Establece una contraseña fuerte"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Termina de crear tu cuenta estableciendo una contraseña"
|
||||
},
|
||||
"login": {
|
||||
"message": "Iniciar sesión"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Eliminar favorito"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Elemento añadido a favoritos"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Elemento eliminado de favoritos"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Notas"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identidad"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Nuevo $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Editar $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Historial de contraseñas"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Su nueva contraseña maestra no cumple con los requisitos de la política."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Obtén correos electrónicos de Bitwarden para anuncios, consejos y oportunidades de investigación."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Cancelar suscripción"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "en cualquier momento."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Continuando, aceptas los"
|
||||
},
|
||||
"and": {
|
||||
"message": "y"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Al seleccionar esta casilla, acepta lo siguiente:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Limpia los filtros o prueba otro término de búsqueda"
|
||||
},
|
||||
"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": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copiar información - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Autocompletar - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No hay valores para copiar"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Asignar colecciones"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Loo konto"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Logi sisse"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identiteet"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Paroolide ajalugu"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Uus ülemparool ei vasta eeskirjades väljatoodud tingimustele."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Märkeruudu markeerimisel nõustud järgnevaga:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Sortu kontua"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Hasi saioa"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitatea"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Pasahitz historia"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Zure pasahitz nagusi berriak ez ditu baldintzak betetzen."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Laukitxo hau markatzean, honakoa onartzen duzu:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "ایجاد حساب کاربری"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "ورود"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "هویت"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "تاریخچه کلمه عبور"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "کلمه عبور اصلی جدید شما از شرایط سیاست پیروی نمیکند."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "با علامت زدن این کادر با موارد زیر موافقت میکنید:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Luo tili"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Aseta vahva salasana"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Viimeistele tilin luonti asettamalla salasana"
|
||||
},
|
||||
"login": {
|
||||
"message": "Kirjaudu"
|
||||
},
|
||||
|
@ -390,13 +396,13 @@
|
|||
"message": "Suosikki"
|
||||
},
|
||||
"unfavorite": {
|
||||
"message": "Unfavorite"
|
||||
"message": "Poista suosikeista"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Kohde lisättiin suosikkeihin"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Kohde poistettiin suosikeista"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Merkinnät"
|
||||
|
@ -420,7 +426,7 @@
|
|||
"message": "Avaa"
|
||||
},
|
||||
"launchWebsite": {
|
||||
"message": "Launch website"
|
||||
"message": "Avaa verkkosivusto"
|
||||
},
|
||||
"website": {
|
||||
"message": "Verkkosivusto"
|
||||
|
@ -778,7 +784,7 @@
|
|||
"message": "Avaa"
|
||||
},
|
||||
"additionalOptions": {
|
||||
"message": "Lisäasetukset"
|
||||
"message": "Lisävalinnat"
|
||||
},
|
||||
"enableContextMenuItem": {
|
||||
"message": "Näytä sisältövalikon valinnat"
|
||||
|
@ -845,7 +851,7 @@
|
|||
"message": "Viennin tyyppi"
|
||||
},
|
||||
"accountRestricted": {
|
||||
"message": "Rajoitettu tilille"
|
||||
"message": "Tiliä on rajoitettu"
|
||||
},
|
||||
"filePasswordAndConfirmFilePasswordDoNotMatch": {
|
||||
"message": "\"Tiedoston salasana\" ja \"Vahvista tiedoston salasana\" eivät täsmää."
|
||||
|
@ -1120,22 +1126,22 @@
|
|||
"message": "Itse ylläpidetty palvelinympäristö"
|
||||
},
|
||||
"selfHostedEnvironmentFooter": {
|
||||
"message": "Määritä omassa palvelinympäristössäsi suoritettavan Bitwarden-asennuksen pääverkkotunnus."
|
||||
"message": "Määritä omassa palvelinympäristössäsi suoritettavan Bitwarden-asennuksen perusosoite."
|
||||
},
|
||||
"selfHostedBaseUrlHint": {
|
||||
"message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com"
|
||||
"message": "Määritä itse ylläpitämäsi Bitwarden-asennuksen perusosoite. Esimerkki: https://bitwarden.yritys.fi."
|
||||
},
|
||||
"selfHostedCustomEnvHeader": {
|
||||
"message": "For advanced configuration, you can specify the base URL of each service independently."
|
||||
"message": "Edistynyttä määritystä varten voit syöttää jokaisen palvelun perusosoitteen erikseen."
|
||||
},
|
||||
"selfHostedEnvFormInvalid": {
|
||||
"message": "You must add either the base Server URL or at least one custom environment."
|
||||
"message": "Sinun on lisättävä joko palvelimen perusosoite tai ainakin yksi mukautettu palvelinympäristö."
|
||||
},
|
||||
"customEnvironment": {
|
||||
"message": "Mukautettu palvelinympäristö"
|
||||
},
|
||||
"customEnvironmentFooter": {
|
||||
"message": "Edistyneille käyttäjille. Voit määrittää jokaiselle palvelulle oman pääverkkotunnuksen."
|
||||
"message": "Edistyneille käyttäjille. Voit määrittää jokaiselle palvelulle oman perusosoitteen."
|
||||
},
|
||||
"baseUrl": {
|
||||
"message": "Palvelimen URL"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Henkilöllisyys"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Uusi $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Muokkaa $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Salasanahistoria"
|
||||
},
|
||||
|
@ -1444,7 +1468,7 @@
|
|||
"message": "Kokoelmat"
|
||||
},
|
||||
"nCollections": {
|
||||
"message": "$COUNT$ collections",
|
||||
"message": "$COUNT$ kokoelmaa",
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"content": "$1",
|
||||
|
@ -1682,7 +1706,7 @@
|
|||
"message": "Automaattitäytä ja tallenna"
|
||||
},
|
||||
"fillAndSave": {
|
||||
"message": "Fill and save"
|
||||
"message": "Täytä ja tallenna"
|
||||
},
|
||||
"autoFillSuccessAndSavedUri": {
|
||||
"message": "Kohde täytettiin automaattisesti ja URI tallennettiin"
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Uusi pääsalasanasi ei täytä käytännön määrittämiä vaatimuksia."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Vastaanota Bitwardenilta uutiskirjeitä julkaisuista, tukiresursseista ja tutkimusmahdollisuuksista."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Lopeta tilaus"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "milloin tahansa."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Jatkaessasi hyväksyt"
|
||||
},
|
||||
"and": {
|
||||
"message": "ja"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Valitsemalla tämän hyväksyt seuraavat:"
|
||||
},
|
||||
|
@ -1781,10 +1820,10 @@
|
|||
"message": "Ok"
|
||||
},
|
||||
"errorRefreshingAccessToken": {
|
||||
"message": "Access Token Refresh Error"
|
||||
"message": "Käyttötunnisteen päivitysvirhe"
|
||||
},
|
||||
"errorRefreshingAccessTokenDesc": {
|
||||
"message": "No refresh token or API keys found. Please try logging out and logging back in."
|
||||
"message": "Päivitystunnistetta tai API-avaimia ei löytynyt. Kokeile kirjautua ulos ja takaisin sisään."
|
||||
},
|
||||
"desktopSyncVerificationTitle": {
|
||||
"message": "Työpöytäsynkronoinnin vahvistus"
|
||||
|
@ -2344,7 +2383,7 @@
|
|||
}
|
||||
},
|
||||
"forwaderInvalidToken": {
|
||||
"message": "Virheellinen $SERVICENAME$ -rajapinnan tunniste",
|
||||
"message": "Virheellinen $SERVICENAME$ API -tunniste",
|
||||
"description": "Displayed when the user's API token is empty or rejected by the forwarding service.",
|
||||
"placeholders": {
|
||||
"servicename": {
|
||||
|
@ -2354,7 +2393,7 @@
|
|||
}
|
||||
},
|
||||
"forwaderInvalidTokenWithMessage": {
|
||||
"message": "Virheellinen $SERVICENAME$ -rajapinnan tunniste: $ERRORMESSAGE$",
|
||||
"message": "Virheellinen $SERVICENAME$ API -tunniste: $ERRORMESSAGE$",
|
||||
"description": "Displayed when the user's API token is rejected by the forwarding service with an error message.",
|
||||
"placeholders": {
|
||||
"servicename": {
|
||||
|
@ -2368,7 +2407,7 @@
|
|||
}
|
||||
},
|
||||
"forwarderNoAccountId": {
|
||||
"message": "$SERVICENAME$ -palvelun peittämän sähköpostitilin tunnistetta ei saatu.",
|
||||
"message": "$SERVICENAME$ -palvelun peittämän sähköpostitilin tunnusta ei saatu.",
|
||||
"description": "Displayed when the forwarding service fails to return an account ID.",
|
||||
"placeholders": {
|
||||
"servicename": {
|
||||
|
@ -3305,18 +3344,8 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Tyhjennä suodattimet tai kokeile toista hakutermiä"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"message": "Kopioi tietoja - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3325,18 +3354,8 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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$",
|
||||
"message": "Kopioi muistio - $ITEMNAME$",
|
||||
"description": "Title for a button copies a note to the clipboard.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3346,7 +3365,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsLabel": {
|
||||
"message": "More options, $ITEMNAME$",
|
||||
"message": "Lisää valintoja, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3356,7 +3375,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsTitle": {
|
||||
"message": "More options - $ITEMNAME$",
|
||||
"message": "Lisää valintoja - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3366,7 +3385,7 @@
|
|||
}
|
||||
},
|
||||
"viewItemTitle": {
|
||||
"message": "View item - $ITEMNAME$",
|
||||
"message": "Tarkastele kohdetta - $ITEMNAME$",
|
||||
"description": "Title for a link that opens a view for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3375,17 +3394,30 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Automaattitäyttö - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Ei kopioitavia arvoja"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
"message": "Määritä kokoelmat"
|
||||
},
|
||||
"copyEmail": {
|
||||
"message": "Copy email"
|
||||
"message": "Kopioi sähköpostiosoite"
|
||||
},
|
||||
"copyPhone": {
|
||||
"message": "Copy phone"
|
||||
"message": "Kopioi puhelinnumero"
|
||||
},
|
||||
"copyAddress": {
|
||||
"message": "Copy address"
|
||||
"message": "Kopioi osoite"
|
||||
},
|
||||
"adminConsole": {
|
||||
"message": "Hallintapaneelista"
|
||||
|
@ -3439,7 +3471,7 @@
|
|||
}
|
||||
},
|
||||
"itemsWithNoFolder": {
|
||||
"message": "Kohteet, joilla ei ole kansioita"
|
||||
"message": "Kansiottomat kohteet"
|
||||
},
|
||||
"organizationIsDeactivated": {
|
||||
"message": "Organisaatio on poistettu käytöstä"
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Gumawa ng Account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Mag-login"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Pagkakakilanlan"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Kasaysayan ng Password"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Hindi matugunan ng iyong bagong pangunahing password ang mga kinakailangan ng patakaran."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Sa pamamagitan ng pag-tsek sa kahon na ito ay sumasang-ayon ka sa sumusunod:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Créer un compte"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Se connecter"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identité"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Historique des mots de passe"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Votre nouveau mot de passe principal ne répond pas aux exigences de politique de sécurité."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "En cochant cette case vous acceptez ce qui suit :"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Effacer les filtres ou essayer un autre terme de recherche"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copier les informations - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assigner une collection"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Crea unha conta"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Iniciar sesión"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identidade"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Historial de contrasinais"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "צור חשבון"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "התחבר"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Unfavorite"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "פריט נוסף למועדפים"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "פריט הוסר מהמועדפים"
|
||||
},
|
||||
"notes": {
|
||||
"message": "הערות"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "זהות"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "היסטוריית סיסמאות"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "הסיסמה הראשית החדשה השלך לא עומדת בדרישות המדיניות."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "סימון תיבה זו מהווה את הסכמתך לתנאים הבאים:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create Account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log In"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "पहचान"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "नया $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "$TYPE$ संपादन",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "पासवर्ड इतिहास"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "आपका नया मास्टर पासवर्ड पॉलिसी आवश्यकताओं को पूरा नहीं करता है।"
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "इस बॉक्स की जांच करके आप निम्नलिखित से सहमत हैं:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Stvori račun"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Prijava"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitet"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Povijest"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Tvoja nova glavna lozinka ne ispunjava zahtjeve."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Označavanjem ove kućice slažete se sa sljedećim:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Fiók létrehozása"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Erős jelszó beállítása"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "A fiók létrehozásának befejezése jelszó beállításával"
|
||||
},
|
||||
"login": {
|
||||
"message": "Bejelentkezés"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Nem kedvenc"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Az elem bekerült a kedvencekhez."
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Az elem kikerült a kedvencekből."
|
||||
},
|
||||
"notes": {
|
||||
"message": "Jegyzetek"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Személyazonosság"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Új $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "$TYPE$ szerkesztése",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Jelszó előzmények"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Az új mesterjelszó nem felel meg a szabály követelményeknek."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Emaileket kaphatunk a Bitwardentől bejelentésekről, tanácsokról és kutatási lehetőségekről."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Leiratkozás"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "bármikor."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "A folytatással elfogadjuk"
|
||||
},
|
||||
"and": {
|
||||
"message": "és"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "A doboz bejelölésével elfogadjuk a következőket:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Töröljük a szűrőket vagy próbálkozzunk másik keresési kifejezéssel."
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Infó másolása - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Automatikus kitöltés - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Nincsenek másolandó értékek."
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Gyűjtemények hozzárendelése"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Buat Akun"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Masuk"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitas"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Riwayat Kata Sandi"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Kata sandi utama Anda yang baru tidak memenuhi persyaratan kebijakan."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Dengan mencentang kotak ini, Anda menyetujui yang berikut:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Crea account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Accedi"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identità"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Cronologia delle password"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "La tua nuova password principale non soddisfa i requisiti di sicurezza."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Selezionando questa casella accetti quanto segue:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Cancella i filtri o prova un altro termine di ricerca"
|
||||
},
|
||||
"copyInfoLabel": {
|
||||
"message": "Copia informazioni, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copia informazioni - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assegna raccolte"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "アカウントの作成"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "強力なパスワードを設定する"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "パスワードを設定してアカウントの作成を完了してください"
|
||||
},
|
||||
"login": {
|
||||
"message": "ログイン"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "ID"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "$TYPE$ を新規作成",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "$TYPE$ を編集",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "パスワードの履歴"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "新しいマスターパスワードは最低要件を満たしていません。"
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Bitwarden からのお知らせ、アドバイス、アンケート調査等のメールを受信します。"
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "配信停止"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "はいつでもできます。"
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "続行すると以下に同意したものとみなします:"
|
||||
},
|
||||
"and": {
|
||||
"message": "と"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "以下に同意しチェックします:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "フィルタをクリアするか、別の検索ワードをお試しください"
|
||||
},
|
||||
"copyInfoLabel": {
|
||||
"message": "$ITEMNAME$ の情報をコピー",
|
||||
"description": "Aria label for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "情報をコピー - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "自動入力 - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "コピーする値がありません"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "コレクションを割り当て"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "ანგარიშის შექმნა"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "ავტორიზაცია"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "ಖಾತೆ ತೆರೆ"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "ಲಾಗಿನ್"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "ಗುರುತಿಸುವಿಕೆ"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "ಪಾಸ್ವರ್ಡ್ ಇತಿಹಾಸ"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "ನಿಮ್ಮ ಹೊಸ ಮಾಸ್ಟರ್ ಪಾಸ್ವರ್ಡ್ ನೀತಿಯ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸುವುದಿಲ್ಲ."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "ಈ ಪೆಟ್ಟಿಗೆಯನ್ನು ಪರಿಶೀಲಿಸುವ ಮೂಲಕ ನೀವು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಒಪ್ಪುತ್ತೀರಿ:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "계정 만들기"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "로그인"
|
||||
},
|
||||
|
@ -173,16 +179,16 @@
|
|||
"message": "웹 앱에서 계속하시겠용?"
|
||||
},
|
||||
"continueToWebAppDesc": {
|
||||
"message": "Explore more features of your Bitwarden account on the web app."
|
||||
"message": "웹 앱에서 Bitwarden 계정의 더 많은 기능을 탐색해보세요."
|
||||
},
|
||||
"continueToHelpCenter": {
|
||||
"message": "Continue to Help Center?"
|
||||
"message": "도움말 센터로 이동"
|
||||
},
|
||||
"continueToHelpCenterDesc": {
|
||||
"message": "Learn more about how to use Bitwarden on the Help Center."
|
||||
"message": "Bitwarden의 자세한 사용법은 도움말 센터에서 확인하세요."
|
||||
},
|
||||
"continueToBrowserExtensionStore": {
|
||||
"message": "Continue to browser extension store?"
|
||||
"message": "브라우저 확장 스토어로 이동하시겠습니까?"
|
||||
},
|
||||
"continueToBrowserExtensionStoreDesc": {
|
||||
"message": "Help others find out if Bitwarden is right for them. Visit your browser's extension store and leave a rating now."
|
||||
|
@ -205,7 +211,7 @@
|
|||
"message": "로그아웃"
|
||||
},
|
||||
"aboutBitwarden": {
|
||||
"message": "About Bitwarden"
|
||||
"message": "Bitwarden 에 대하여"
|
||||
},
|
||||
"about": {
|
||||
"message": "정보"
|
||||
|
@ -390,7 +396,7 @@
|
|||
"message": "즐겨찾기"
|
||||
},
|
||||
"unfavorite": {
|
||||
"message": "Unfavorite"
|
||||
"message": "즐겨찾기 해제"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
|
@ -420,7 +426,7 @@
|
|||
"message": "열기"
|
||||
},
|
||||
"launchWebsite": {
|
||||
"message": "Launch website"
|
||||
"message": "웹사이트 열기"
|
||||
},
|
||||
"website": {
|
||||
"message": "웹 사이트"
|
||||
|
@ -435,7 +441,7 @@
|
|||
"message": "기타"
|
||||
},
|
||||
"unlockMethods": {
|
||||
"message": "Unlock options"
|
||||
"message": "잠금 해제 옵션"
|
||||
},
|
||||
"unlockMethodNeededToChangeTimeoutActionDesc": {
|
||||
"message": "잠금 해제 방법을 설정하여 보관함의 시간 초과 동작을 변경하세요."
|
||||
|
@ -444,10 +450,10 @@
|
|||
"message": "설정에서 잠금 해제 수단 설정하기"
|
||||
},
|
||||
"sessionTimeoutHeader": {
|
||||
"message": "Session timeout"
|
||||
"message": "세션 만료"
|
||||
},
|
||||
"otherOptions": {
|
||||
"message": "Other options"
|
||||
"message": "기타 옵션"
|
||||
},
|
||||
"rateExtension": {
|
||||
"message": "확장 프로그램 평가"
|
||||
|
@ -722,7 +728,7 @@
|
|||
"message": "\"로그인 추가 알림\"을 사용하면 새 로그인을 사용할 때마다 보관함에 그 로그인을 추가할 것인지 물어봅니다."
|
||||
},
|
||||
"addLoginNotificationDescAlt": {
|
||||
"message": "Ask to add an item if one isn't found in your vault. Applies to all logged in accounts."
|
||||
"message": "보관함에 항목이 없을 경우 추가하라는 메시지를 표시합니다. 모든 로그인된 계정에 적용됩니다."
|
||||
},
|
||||
"showCardsCurrentTab": {
|
||||
"message": "탭 페이지에 카드 표시"
|
||||
|
@ -754,10 +760,10 @@
|
|||
"message": "현재 로그인으로 업데이트할 건지 묻기"
|
||||
},
|
||||
"changedPasswordNotificationDesc": {
|
||||
"message": "Ask to update a login's password when a change is detected on a website."
|
||||
"message": "웹사이트에서 변경 사항이 감지되면 로그인 비밀번호를 업데이트하라는 메시지를 표시합니다."
|
||||
},
|
||||
"changedPasswordNotificationDescAlt": {
|
||||
"message": "Ask to update a login's password when a change is detected on a website. Applies to all logged in accounts."
|
||||
"message": "웹사이트에서 변경 사항이 감지되면 로그인 비밀번호를 업데이트하라는 메시지를 표시합니다. 모든 로그인된 계정에 적용됩니다."
|
||||
},
|
||||
"enableUsePasskeys": {
|
||||
"message": "패스키를 저장 및 사용할지 묻기"
|
||||
|
@ -778,7 +784,7 @@
|
|||
"message": "잠금 해제"
|
||||
},
|
||||
"additionalOptions": {
|
||||
"message": "Additional options"
|
||||
"message": "추가 옵션"
|
||||
},
|
||||
"enableContextMenuItem": {
|
||||
"message": "Show context menu options"
|
||||
|
@ -803,7 +809,7 @@
|
|||
"message": "애플리케이션의 색상 테마를 변경합니다."
|
||||
},
|
||||
"themeDescAlt": {
|
||||
"message": "Change the application's color theme. Applies to all logged in accounts."
|
||||
"message": "애플리케이션 색상 테마를 변경합니다. 모든 로그인된 계정에 적용됩니다."
|
||||
},
|
||||
"dark": {
|
||||
"message": "어두운 테마",
|
||||
|
@ -830,7 +836,7 @@
|
|||
"message": "This file export will be password protected and require the file password to decrypt."
|
||||
},
|
||||
"filePassword": {
|
||||
"message": "File password"
|
||||
"message": "파일 비밀번호"
|
||||
},
|
||||
"exportPasswordDescription": {
|
||||
"message": "This password will be used to export and import this file"
|
||||
|
@ -842,10 +848,10 @@
|
|||
"message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption."
|
||||
},
|
||||
"exportTypeHeading": {
|
||||
"message": "Export type"
|
||||
"message": "내보내기 유형"
|
||||
},
|
||||
"accountRestricted": {
|
||||
"message": "Account restricted"
|
||||
"message": "계정 제한됨"
|
||||
},
|
||||
"filePasswordAndConfirmFilePasswordDoNotMatch": {
|
||||
"message": "“File password” and “Confirm file password“ do not match."
|
||||
|
@ -1159,28 +1165,28 @@
|
|||
"message": "환경 URL 값을 저장했습니다."
|
||||
},
|
||||
"showAutoFillMenuOnFormFields": {
|
||||
"message": "Show auto-fill menu on form fields",
|
||||
"message": "입력 필드에 자동 완성 메뉴 표시",
|
||||
"description": "Represents the message for allowing the user to enable the auto-fill overlay"
|
||||
},
|
||||
"showAutoFillMenuOnFormFieldsDescAlt": {
|
||||
"message": "Applies to all logged in accounts."
|
||||
"message": "모든 로그인된 계정에 적용됩니다."
|
||||
},
|
||||
"turnOffBrowserBuiltInPasswordManagerSettings": {
|
||||
"message": "Turn off your browser’s built in password manager settings to avoid conflicts."
|
||||
"message": "충돌을 방지하기 위해 브라우저의 기본 암호 관리 설정을 해제합니다."
|
||||
},
|
||||
"turnOffBrowserBuiltInPasswordManagerSettingsLink": {
|
||||
"message": "Edit browser settings."
|
||||
},
|
||||
"autofillOverlayVisibilityOff": {
|
||||
"message": "Off",
|
||||
"message": "끄기",
|
||||
"description": "Overlay setting select option for disabling autofill overlay"
|
||||
},
|
||||
"autofillOverlayVisibilityOnFieldFocus": {
|
||||
"message": "When field is selected (on focus)",
|
||||
"message": "필드가 선택되었을 때 (포커스 상태)",
|
||||
"description": "Overlay appearance select option for showing the field on focus of the input element"
|
||||
},
|
||||
"autofillOverlayVisibilityOnButtonClick": {
|
||||
"message": "When auto-fill icon is selected",
|
||||
"message": "자동 완성 아이콘이 선택되었을 때",
|
||||
"description": "Overlay appearance select option for showing the field on click of the overlay icon"
|
||||
},
|
||||
"enableAutoFillOnPageLoad": {
|
||||
|
@ -1190,7 +1196,7 @@
|
|||
"message": "로그인 양식을 감지하면 웹 페이지 로드 시 자동 완성을 자동으로 수행합니다."
|
||||
},
|
||||
"experimentalFeature": {
|
||||
"message": "Compromised or untrusted websites can exploit auto-fill on page load."
|
||||
"message": "취약하거나 신뢰할 수 없는 웹사이트 페이지 로드 시 자동 완성이 악용될 수 있습니다."
|
||||
},
|
||||
"learnMoreAboutAutofill": {
|
||||
"message": "Learn more about auto-fill"
|
||||
|
@ -1273,13 +1279,13 @@
|
|||
"message": "Show a recognizable image next to each login."
|
||||
},
|
||||
"faviconDescAlt": {
|
||||
"message": "Show a recognizable image next to each login. Applies to all logged in accounts."
|
||||
"message": "각 로그인 정보 옆에 인식할 수 있는 이미지를 표시합니다. 모든 로그인된 계정에 적용됩니다."
|
||||
},
|
||||
"enableBadgeCounter": {
|
||||
"message": "Show badge counter"
|
||||
"message": "배지 갯수 표시"
|
||||
},
|
||||
"badgeCounterDesc": {
|
||||
"message": "Indicate how many logins you have for the current web page."
|
||||
"message": "현재 웹 페이지에 저장된 로그인 정보의 수를 표시합니다."
|
||||
},
|
||||
"cardholderName": {
|
||||
"message": "카드 소유자 이름"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "신원"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "비밀번호 변경 기록"
|
||||
},
|
||||
|
@ -1557,7 +1581,7 @@
|
|||
"description": "ex. Date this item was updated"
|
||||
},
|
||||
"dateCreated": {
|
||||
"message": "Created",
|
||||
"message": "생성됨",
|
||||
"description": "ex. Date this item was created"
|
||||
},
|
||||
"datePasswordUpdated": {
|
||||
|
@ -1614,7 +1638,7 @@
|
|||
"message": "잘못된 PIN 코드입니다."
|
||||
},
|
||||
"tooManyInvalidPinEntryAttemptsLoggingOut": {
|
||||
"message": "Too many invalid PIN entry attempts. Logging out."
|
||||
"message": "잘못된 PIN 입력 시도가 너무 많습니다. 로그아웃 합니다."
|
||||
},
|
||||
"unlockWithBiometrics": {
|
||||
"message": "생체 인식을 사용하여 잠금 해제"
|
||||
|
@ -1712,13 +1736,13 @@
|
|||
"message": "마스터 비밀번호 설정"
|
||||
},
|
||||
"currentMasterPass": {
|
||||
"message": "Current master password"
|
||||
"message": "현재 마스터 비밀번호"
|
||||
},
|
||||
"newMasterPass": {
|
||||
"message": "New master password"
|
||||
"message": "새 마스터 비밀번호"
|
||||
},
|
||||
"confirmNewMasterPass": {
|
||||
"message": "Confirm new master password"
|
||||
"message": "새 마스터 비밀번호 확인"
|
||||
},
|
||||
"masterPasswordPolicyInEffect": {
|
||||
"message": "하나 이상의 단체 정책이 마스터 비밀번호가 다음 사항을 따르도록 요구합니다:"
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "새 마스터 비밀번호가 정책 요구 사항을 따르지 않습니다."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "이 박스를 체크하면 다음에 동의하는 것으로 간주됩니다:"
|
||||
},
|
||||
|
@ -2137,7 +2176,7 @@
|
|||
"message": "폴더 선택..."
|
||||
},
|
||||
"noFoldersFound": {
|
||||
"message": "No folders found",
|
||||
"message": "폴더를 찾을 수 없습니다.",
|
||||
"description": "Used as a message within the notification bar when no folders are found"
|
||||
},
|
||||
"orgPermissionsUpdatedMustSetPassword": {
|
||||
|
@ -2149,7 +2188,7 @@
|
|||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
},
|
||||
"verificationRequired": {
|
||||
"message": "Verification required",
|
||||
"message": "인증 필요",
|
||||
"description": "Default title for the user verification dialog."
|
||||
},
|
||||
"hours": {
|
||||
|
@ -2310,7 +2349,7 @@
|
|||
"message": "서비스"
|
||||
},
|
||||
"forwardedEmail": {
|
||||
"message": "Forwarded email alias"
|
||||
"message": "포워딩된 이메일 별칭"
|
||||
},
|
||||
"forwardedEmailDesc": {
|
||||
"message": "Generate an email alias with an external forwarding service."
|
||||
|
@ -2418,7 +2457,7 @@
|
|||
}
|
||||
},
|
||||
"hostname": {
|
||||
"message": "Hostname",
|
||||
"message": "호스트 이름",
|
||||
"description": "Part of a URL."
|
||||
},
|
||||
"apiAccessToken": {
|
||||
|
@ -2431,7 +2470,7 @@
|
|||
"message": "키 커넥터 오류: 키 커넥터가 사용 가능한지 및 정상적으로 작동하고 있는지 확인해주세요."
|
||||
},
|
||||
"premiumSubcriptionRequired": {
|
||||
"message": "Premium subscription required"
|
||||
"message": "프리미엄 구독이 필요합니다"
|
||||
},
|
||||
"organizationIsDisabled": {
|
||||
"message": "Organization suspended."
|
||||
|
@ -2458,13 +2497,13 @@
|
|||
"message": "to reset to pre-configured settings"
|
||||
},
|
||||
"serverVersion": {
|
||||
"message": "Server version"
|
||||
"message": "서버 버전"
|
||||
},
|
||||
"selfHostedServer": {
|
||||
"message": "self-hosted"
|
||||
"message": "자체 호스팅"
|
||||
},
|
||||
"thirdParty": {
|
||||
"message": "Third-party"
|
||||
"message": "제 3자"
|
||||
},
|
||||
"thirdPartyServerMessage": {
|
||||
"message": "Connected to third-party server implementation, $SERVERNAME$. Please verify bugs using the official server, or report them to the third-party server.",
|
||||
|
@ -2491,13 +2530,13 @@
|
|||
"message": "Logging in as"
|
||||
},
|
||||
"notYou": {
|
||||
"message": "Not you?"
|
||||
"message": "본인이 아닌가요?"
|
||||
},
|
||||
"newAroundHere": {
|
||||
"message": "New around here?"
|
||||
"message": "새로 찾아오셨나요?"
|
||||
},
|
||||
"rememberEmail": {
|
||||
"message": "Remember email"
|
||||
"message": "이메일 기억하기"
|
||||
},
|
||||
"loginWithDevice": {
|
||||
"message": "Log in with device"
|
||||
|
@ -2575,13 +2614,13 @@
|
|||
"message": "Got it"
|
||||
},
|
||||
"autofillSettings": {
|
||||
"message": "Auto-fill settings"
|
||||
"message": "자동 완성 설정"
|
||||
},
|
||||
"autofillShortcut": {
|
||||
"message": "Auto-fill keyboard shortcut"
|
||||
"message": "자동 완성 키보드 단축키"
|
||||
},
|
||||
"autofillShortcutNotSet": {
|
||||
"message": "The auto-fill shortcut is not set. Change this in the browser's settings."
|
||||
"message": "자동 완성 단축키가 설정되지 않았습니다. 브라우저 설정에서 단축키를 변경하세요."
|
||||
},
|
||||
"autofillShortcutText": {
|
||||
"message": "The auto-fill shortcut is: $COMMAND$. Change this in the browser's settings.",
|
||||
|
@ -2611,7 +2650,7 @@
|
|||
"message": "Device approval required. Select an approval option below:"
|
||||
},
|
||||
"rememberThisDevice": {
|
||||
"message": "Remember this device"
|
||||
"message": "이 기기 기억하기"
|
||||
},
|
||||
"uncheckIfPublicDevice": {
|
||||
"message": "Uncheck if using a public device"
|
||||
|
@ -2620,7 +2659,7 @@
|
|||
"message": "Approve from your other device"
|
||||
},
|
||||
"requestAdminApproval": {
|
||||
"message": "Request admin approval"
|
||||
"message": "관리자 승인 필요"
|
||||
},
|
||||
"approveWithMasterPassword": {
|
||||
"message": "Approve with master password"
|
||||
|
@ -2657,16 +2696,16 @@
|
|||
"message": "Access denied. You do not have permission to view this page."
|
||||
},
|
||||
"general": {
|
||||
"message": "General"
|
||||
"message": "일반"
|
||||
},
|
||||
"display": {
|
||||
"message": "Display"
|
||||
"message": "화면"
|
||||
},
|
||||
"accountSuccessfullyCreated": {
|
||||
"message": "Account successfully created!"
|
||||
"message": "계정이 생성되었습니다!"
|
||||
},
|
||||
"adminApprovalRequested": {
|
||||
"message": "Admin approval requested"
|
||||
"message": "관리자 승인 필요"
|
||||
},
|
||||
"adminApprovalRequestSentToAdmins": {
|
||||
"message": "Your request has been sent to your admin."
|
||||
|
@ -2693,7 +2732,7 @@
|
|||
"message": "required"
|
||||
},
|
||||
"search": {
|
||||
"message": "Search"
|
||||
"message": "검색"
|
||||
},
|
||||
"inputMinLength": {
|
||||
"message": "Input must be at least $COUNT$ characters long.",
|
||||
|
@ -2741,7 +2780,7 @@
|
|||
}
|
||||
},
|
||||
"multipleInputEmails": {
|
||||
"message": "1 or more emails are invalid"
|
||||
"message": "하나 이상의 이메일이 유효하지 않습니다."
|
||||
},
|
||||
"inputTrimValidator": {
|
||||
"message": "Input must not contain only whitespace.",
|
||||
|
@ -2811,7 +2850,7 @@
|
|||
"description": "Notification message for when an import is in progress."
|
||||
},
|
||||
"dataSuccessfullyImported": {
|
||||
"message": "Data successfully imported!",
|
||||
"message": "데이터 가져오기 성공!",
|
||||
"description": "Notification message for when an import has completed successfully."
|
||||
},
|
||||
"dataImportFailed": {
|
||||
|
@ -2857,7 +2896,7 @@
|
|||
"description": "Text to display in overlay when the account is locked."
|
||||
},
|
||||
"unlockAccount": {
|
||||
"message": "Unlock account",
|
||||
"message": "계정 잠금 해제",
|
||||
"description": "Button text to display in overlay when the account is locked."
|
||||
},
|
||||
"fillCredentialsFor": {
|
||||
|
@ -2873,7 +2912,7 @@
|
|||
"description": "Text to show in overlay if there are no matching items"
|
||||
},
|
||||
"newItem": {
|
||||
"message": "New item",
|
||||
"message": "새 항목",
|
||||
"description": "Button text to display in overlay when there are no matching items"
|
||||
},
|
||||
"addNewVaultItem": {
|
||||
|
@ -2919,7 +2958,7 @@
|
|||
}
|
||||
},
|
||||
"tryAgain": {
|
||||
"message": "Try again"
|
||||
"message": "다시 시도"
|
||||
},
|
||||
"verificationRequiredForActionSetPinToContinue": {
|
||||
"message": "Verification required for this action. Set a PIN to continue."
|
||||
|
@ -2979,13 +3018,13 @@
|
|||
"message": "Popout extension"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Launch Duo"
|
||||
"message": "Duo 실행"
|
||||
},
|
||||
"importFormatError": {
|
||||
"message": "Data is not formatted correctly. Please check your import file and try again."
|
||||
"message": "데이터의 포맷이 올바르지 않습니다. 불러올 파일을 확인하고 다시 시도해 주십시오."
|
||||
},
|
||||
"importNothingError": {
|
||||
"message": "Nothing was imported."
|
||||
"message": "아무것도 가져오지 못했습니다."
|
||||
},
|
||||
"importEncKeyError": {
|
||||
"message": "Error decrypting the exported file. Your encryption key does not match the encryption key used export the data."
|
||||
|
@ -3232,7 +3271,7 @@
|
|||
"description": "Label indicating the most common import formats"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillTitle": {
|
||||
"message": "Make Bitwarden your default password manager?",
|
||||
"message": "Bitwarden을 기본 비밀번호 관리자로 지정하시겠습니까?",
|
||||
"description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutofillDescription": {
|
||||
|
@ -3240,7 +3279,7 @@
|
|||
"description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior"
|
||||
},
|
||||
"overrideDefaultBrowserAutoFillSettings": {
|
||||
"message": "Make Bitwarden your default password manager",
|
||||
"message": "Bitwarden을 기본 비밀번호 관리자로 지정",
|
||||
"description": "Label for the setting that allows overriding the default browser autofill settings"
|
||||
},
|
||||
"privacyPermissionAdditionNotGrantedTitle": {
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
@ -3391,13 +3423,13 @@
|
|||
"message": "Admin Console"
|
||||
},
|
||||
"accountSecurity": {
|
||||
"message": "Account security"
|
||||
"message": "계정 보안"
|
||||
},
|
||||
"notifications": {
|
||||
"message": "Notifications"
|
||||
"message": "알림"
|
||||
},
|
||||
"appearance": {
|
||||
"message": "Appearance"
|
||||
"message": "화면 스타일"
|
||||
},
|
||||
"errorAssigningTargetCollection": {
|
||||
"message": "Error assigning target collection."
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Sukurti paskyrą"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Nustatyti stiprų slaptažodį"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Baigkite kurti paskyrą nustatydami slaptažodį"
|
||||
},
|
||||
"login": {
|
||||
"message": "Prisijungti"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Tapatybė"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Naujas $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Redaguoti $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Slaptažodžio istorija"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Tavo naujasis pagrindinis slaptažodis neatitinka politikos reikalavimų."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Gaukite „Bitwarden“ el. laiškus su skelbimais, patarimais ir tyrimų galimybėmis."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Atsisakyti prenumeratos"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "bet kuriuo metu."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Tęsiant sutinkate su"
|
||||
},
|
||||
"and": {
|
||||
"message": "ir"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Pažymėdami šį laukelį, sutinkate su šiais dalykais:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Izveidot kontu"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Jāiestata droša parole"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Jāpabeidz sava konta izveida ar paroles iestatīšanu"
|
||||
},
|
||||
"login": {
|
||||
"message": "Pieteikties"
|
||||
},
|
||||
|
@ -390,13 +396,13 @@
|
|||
"message": "Izlasē"
|
||||
},
|
||||
"unfavorite": {
|
||||
"message": "Unfavorite"
|
||||
"message": "Noņemt no izlases"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Vienums pievienots izlasē"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Vienums noņemts no izlases"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Piezīmes"
|
||||
|
@ -420,7 +426,7 @@
|
|||
"message": "Palaist"
|
||||
},
|
||||
"launchWebsite": {
|
||||
"message": "Launch website"
|
||||
"message": "Atvērt tīmekļvietni"
|
||||
},
|
||||
"website": {
|
||||
"message": "Tīmekļa vietne"
|
||||
|
@ -612,7 +618,7 @@
|
|||
"message": "Atteicies"
|
||||
},
|
||||
"loggedOutDesc": {
|
||||
"message": "You have been logged out of your account."
|
||||
"message": "Notika izrakstīšanās no Tava konta."
|
||||
},
|
||||
"loginExpired": {
|
||||
"message": "Pieteikšanās sesija ir beigusies."
|
||||
|
@ -1123,13 +1129,13 @@
|
|||
"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"
|
||||
"message": "Jānorāda sava pašizvietotā Bitward servera pamata URL. Piemērs: https://bitwarden.uznemums.lv"
|
||||
},
|
||||
"selfHostedCustomEnvHeader": {
|
||||
"message": "For advanced configuration, you can specify the base URL of each service independently."
|
||||
"message": "Papildu konfigurācijā ir iespējams norādīt URL katram pakalpojumam atsevišķi."
|
||||
},
|
||||
"selfHostedEnvFormInvalid": {
|
||||
"message": "You must add either the base Server URL or at least one custom environment."
|
||||
"message": "Jāpievieno vai no servera pamata URL vai vismaz viena pielāgota vide."
|
||||
},
|
||||
"customEnvironment": {
|
||||
"message": "Pielāgota vide"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitāte"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Jauns/a $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Labot $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Paroļu vēsture"
|
||||
},
|
||||
|
@ -1444,7 +1468,7 @@
|
|||
"message": "Krājumi"
|
||||
},
|
||||
"nCollections": {
|
||||
"message": "$COUNT$ collections",
|
||||
"message": "$COUNT$ krājumi",
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"content": "$1",
|
||||
|
@ -1682,7 +1706,7 @@
|
|||
"message": "Automātiski aizpildīt un saglabāt"
|
||||
},
|
||||
"fillAndSave": {
|
||||
"message": "Fill and save"
|
||||
"message": "Aizpildīt un saglabāt"
|
||||
},
|
||||
"autoFillSuccessAndSavedUri": {
|
||||
"message": "Automātiski aizpildīts vienums un saglabāts URI"
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Jaunā galvenā parole neatbilst nosacījumu prasībām."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Saņemt e-pasta ziņojumus no Bitwarden par paziņojumiem, padomiem un izpētes iespējām."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Atteikt abonēšanu"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "jebkurā laikā."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Turpinot tiek sniegta piekrišana"
|
||||
},
|
||||
"and": {
|
||||
"message": "un"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Ar šīs rūtiņas atzīmēšanu tiek piekrists sekojošajam:"
|
||||
},
|
||||
|
@ -1781,10 +1820,10 @@
|
|||
"message": "Labi"
|
||||
},
|
||||
"errorRefreshingAccessToken": {
|
||||
"message": "Access Token Refresh Error"
|
||||
"message": "Piekļuves pilnvaras atsvaizināšanas kļūda"
|
||||
},
|
||||
"errorRefreshingAccessTokenDesc": {
|
||||
"message": "No refresh token or API keys found. Please try logging out and logging back in."
|
||||
"message": "Netika atrastas atsvaidzināšanas pilnvaras vai API atslēgas. Lūgums mēģināt izrakstīties un atkal pieteikties."
|
||||
},
|
||||
"desktopSyncVerificationTitle": {
|
||||
"message": "Darbvirsmas sinhronizācijas apstiprinājums"
|
||||
|
@ -3305,18 +3344,8 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Jānotīra atlases vērtības vai jāmēģina cits meklēšanas vaicājums"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"message": "Ievietot starpliktuvē informāciju - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3325,18 +3354,8 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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$",
|
||||
"message": "Ievietot starpliktuvē piezīmi - $ITEMNAME$",
|
||||
"description": "Title for a button copies a note to the clipboard.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3346,7 +3365,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsLabel": {
|
||||
"message": "More options, $ITEMNAME$",
|
||||
"message": "Vairāk iespēju, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3356,7 +3375,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsTitle": {
|
||||
"message": "More options - $ITEMNAME$",
|
||||
"message": "Vairāk iespēju - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3366,7 +3385,7 @@
|
|||
}
|
||||
},
|
||||
"viewItemTitle": {
|
||||
"message": "View item - $ITEMNAME$",
|
||||
"message": "Skatīt vienumu - $ITEMNAME$",
|
||||
"description": "Title for a link that opens a view for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3375,17 +3394,30 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Automātiski aizpildīt - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Nav vērtību, ko ievietot starpliktuvē"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
"message": "Piešķirt krājumus"
|
||||
},
|
||||
"copyEmail": {
|
||||
"message": "Copy email"
|
||||
"message": "Ievietot starpliktuvē e-pasta adresi"
|
||||
},
|
||||
"copyPhone": {
|
||||
"message": "Copy phone"
|
||||
"message": "Ievietot starpliktuvē tālruņa numuru"
|
||||
},
|
||||
"copyAddress": {
|
||||
"message": "Copy address"
|
||||
"message": "Ievietot starpliktuvē adresi"
|
||||
},
|
||||
"adminConsole": {
|
||||
"message": "pārvaldības konsolē,"
|
||||
|
@ -3439,12 +3471,12 @@
|
|||
}
|
||||
},
|
||||
"itemsWithNoFolder": {
|
||||
"message": "Items with no folder"
|
||||
"message": "Vienumi bez mapes"
|
||||
},
|
||||
"organizationIsDeactivated": {
|
||||
"message": "Organization is deactivated"
|
||||
"message": "Apvienība ir atspējota"
|
||||
},
|
||||
"contactYourOrgAdmin": {
|
||||
"message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance."
|
||||
"message": "Atspējotu apvienību vienumiem nevar piekļūt. Jāsazinās ar apvienības īpašnieku, lai iegūtu palīdzību."
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "അക്കൗണ്ട് സൃഷ്ടിക്കുക"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "ലോഗിൻ"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "ഐഡന്റിറ്റി"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "പാസ്സ്വേഡ് നാൾവഴി"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "നിങ്ങളുടെ പുതിയ മാസ്റ്റർ പാസ്വേഡ് നയ ആവശ്യകതകൾ നിറവേറ്റുന്നില്ല."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "ഈ ബോക്സ് ചെക്കുചെയ്യുന്നതിലൂടെ നിങ്ങൾ ഇനിപ്പറയുന്നവ അംഗീകരിക്കുന്നു:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "खाते तयार करा"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "प्रवेश करा"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Opprett en konto"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Logg inn"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitet"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Passordhistorikk"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Det nye hovedpassordet ditt oppfyller ikke vilkår i virksomhetsreglene."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Ved å merke av denne boksen sier du deg enig i følgende:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Account aanmaken"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Sterk wachtwoord instellen"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Rond het aanmaken van je account af met het instellen van een wachtwoord"
|
||||
},
|
||||
"login": {
|
||||
"message": "Inloggen"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identiteit"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Nieuw $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "$TYPE$ bewerken",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Geschiedenis"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Je nieuwe hoofdwachtwoord voldoet niet aan de beleidseisen."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Ontvang e-mailberichten van Bitwarden voor aankondigingen, advies en onderzoeksmogelijkheden."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Afmelden"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "op ieder moment."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Door verder te gaan, ga je akkoord met de"
|
||||
},
|
||||
"and": {
|
||||
"message": "en"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Door dit vakje aan te vinken, ga je akkoord met het volgende:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Wis filters of probeer een andere zoekterm"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Automatisch invullen - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Geen waarden om te kopiëren"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Collecties toewijzen"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Utwórz konto"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Ustaw silne hasło"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Ukończ tworzenie konta poprzez ustawienie hasła"
|
||||
},
|
||||
"login": {
|
||||
"message": "Zaloguj się"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Tożsamość"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Nowy $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edytuj $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Historia hasła"
|
||||
},
|
||||
|
@ -1444,7 +1468,7 @@
|
|||
"message": "Kolekcje"
|
||||
},
|
||||
"nCollections": {
|
||||
"message": "$COUNT$ collections",
|
||||
"message": "Kolekcje: $COUNT$",
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"content": "$1",
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Nowe hasło główne nie spełnia wymaganych zasad."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Otrzymuj e-maile od Bitwarden z ogłoszeniami, poradami i badaniami."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Anuluj subskrypcję"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "w każdej chwili."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Kontynuując, zgadzasz się na"
|
||||
},
|
||||
"and": {
|
||||
"message": "i"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Zaznaczając tę opcję, akceptujesz:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Wyczyść filtry lub użyj innej frazy"
|
||||
},
|
||||
"copyInfoLabel": {
|
||||
"message": "Skopiuj informacje, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Skopiuj informacje - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Autouzupełnij - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Brak wartości do skopiowania"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Przypisz kolekcje"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Criar Conta"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Defina uma senha forte"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Termine de criar a sua conta definindo uma senha"
|
||||
},
|
||||
"login": {
|
||||
"message": "Iniciar Sessão"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Desfavoritar"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Item adicionado aos favoritos"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Item removido dos favoritos"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Notas"
|
||||
|
@ -836,19 +842,19 @@
|
|||
"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."
|
||||
"message": "Use sua chave criptográfica da conta, derivada do nome de usuário e Senha Mestra da sua conta, para criptografar a exportação e restringir importação para apenas a conta atual do Bitwarden."
|
||||
},
|
||||
"passwordProtectedOptionDescription": {
|
||||
"message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption."
|
||||
"message": "Defina uma senha de arquivo para criptografar a exportação e importá-la para qualquer conta do Bitwarden usando a senha para descriptografia."
|
||||
},
|
||||
"exportTypeHeading": {
|
||||
"message": "Export type"
|
||||
"message": "Tipo da exportação"
|
||||
},
|
||||
"accountRestricted": {
|
||||
"message": "Account restricted"
|
||||
"message": "Conta restrita"
|
||||
},
|
||||
"filePasswordAndConfirmFilePasswordDoNotMatch": {
|
||||
"message": "“File password” and “Confirm file password“ do not match."
|
||||
"message": "\"Senha do arquivo\" e \"Confirmação de senha\" não correspondem."
|
||||
},
|
||||
"warning": {
|
||||
"message": "AVISO",
|
||||
|
@ -1123,13 +1129,13 @@
|
|||
"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"
|
||||
"message": "Especifique a URL de base da sua instalação local do Bitwarden. Exemplo: https://bitwarden.company.com"
|
||||
},
|
||||
"selfHostedCustomEnvHeader": {
|
||||
"message": "For advanced configuration, you can specify the base URL of each service independently."
|
||||
"message": "Para usuários avançados. Você pode especificar a URL de base de cada serviço independentemente."
|
||||
},
|
||||
"selfHostedEnvFormInvalid": {
|
||||
"message": "You must add either the base Server URL or at least one custom environment."
|
||||
"message": "Você deve adicionar um URL do servidor de base ou pelo menos um ambiente personalizado."
|
||||
},
|
||||
"customEnvironment": {
|
||||
"message": "Ambiente Personalizado"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identidade"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Nova $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Editar $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Histórico de Senha"
|
||||
},
|
||||
|
@ -1444,7 +1468,7 @@
|
|||
"message": "Coleções"
|
||||
},
|
||||
"nCollections": {
|
||||
"message": "$COUNT$ collections",
|
||||
"message": "Coleções $COUNT$",
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"content": "$1",
|
||||
|
@ -1682,7 +1706,7 @@
|
|||
"message": "Autopreencher e Salvar"
|
||||
},
|
||||
"fillAndSave": {
|
||||
"message": "Fill and save"
|
||||
"message": "Preencher e salvar"
|
||||
},
|
||||
"autoFillSuccessAndSavedUri": {
|
||||
"message": "Item Auto-Preenchido e URI Salvo"
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "A sua nova senha mestra não cumpre aos requisitos da política."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Obtenha e-mails do Bitwarden para anúncios, conselhos e oportunidades de pesquisa."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Cancelar subscrição"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "a qualquer momento."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Ao continuar, você concorda com os"
|
||||
},
|
||||
"and": {
|
||||
"message": "e"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Ao marcar esta caixa, você concorda com o seguinte:"
|
||||
},
|
||||
|
@ -1781,10 +1820,10 @@
|
|||
"message": "Ok"
|
||||
},
|
||||
"errorRefreshingAccessToken": {
|
||||
"message": "Access Token Refresh Error"
|
||||
"message": "Erro ao Atualizar Token"
|
||||
},
|
||||
"errorRefreshingAccessTokenDesc": {
|
||||
"message": "No refresh token or API keys found. Please try logging out and logging back in."
|
||||
"message": "Nenhum token de atualização ou chave de API foi encontrado. Tente sair e entrar novamente."
|
||||
},
|
||||
"desktopSyncVerificationTitle": {
|
||||
"message": "Verificação de sincronização do Desktop"
|
||||
|
@ -2255,10 +2294,10 @@
|
|||
}
|
||||
},
|
||||
"exportingOrganizationVaultTitle": {
|
||||
"message": "Exporting organization vault"
|
||||
"message": "Exportando cofre da organização"
|
||||
},
|
||||
"exportingOrganizationVaultDesc": {
|
||||
"message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Items in individual vaults or other organizations will not be included.",
|
||||
"message": "Apenas o cofre da organização associado com $ORGANIZATION$ será exportado. Itens do cofre pessoal e itens de outras organizações não serão incluídos.",
|
||||
"placeholders": {
|
||||
"organization": {
|
||||
"content": "$1",
|
||||
|
@ -3305,18 +3344,8 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Limpar filtros ou tentar outro termo de pesquisa"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"message": "Copiar informação - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3325,18 +3354,8 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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$",
|
||||
"message": "Copiar Nota - $ITEMNAME$",
|
||||
"description": "Title for a button copies a note to the clipboard.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3346,7 +3365,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsLabel": {
|
||||
"message": "More options, $ITEMNAME$",
|
||||
"message": "Mais opções, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3356,7 +3375,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsTitle": {
|
||||
"message": "More options - $ITEMNAME$",
|
||||
"message": "Mais opções - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3366,7 +3385,7 @@
|
|||
}
|
||||
},
|
||||
"viewItemTitle": {
|
||||
"message": "View item - $ITEMNAME$",
|
||||
"message": "Visualizar item - $ITEMNAME$",
|
||||
"description": "Title for a link that opens a view for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3375,17 +3394,30 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-preenchimento - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Não há valores para copiar"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
"message": "Aplicar coleção"
|
||||
},
|
||||
"copyEmail": {
|
||||
"message": "Copy email"
|
||||
"message": "Copiar e-mail"
|
||||
},
|
||||
"copyPhone": {
|
||||
"message": "Copy phone"
|
||||
"message": "Copiar telefone"
|
||||
},
|
||||
"copyAddress": {
|
||||
"message": "Copy address"
|
||||
"message": "Copiar endereço"
|
||||
},
|
||||
"adminConsole": {
|
||||
"message": "Painel de administração"
|
||||
|
@ -3439,12 +3471,12 @@
|
|||
}
|
||||
},
|
||||
"itemsWithNoFolder": {
|
||||
"message": "Items with no folder"
|
||||
"message": "Itens sem pasta"
|
||||
},
|
||||
"organizationIsDeactivated": {
|
||||
"message": "Organization is deactivated"
|
||||
"message": "A organização está desativada"
|
||||
},
|
||||
"contactYourOrgAdmin": {
|
||||
"message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance."
|
||||
"message": "Itens em organizações desativadas não podem ser acessados. Entre em contato com o proprietário da sua organização para obter assistência."
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Criar conta"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Defina uma palavra-passe forte"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Termine a criação da sua conta definindo uma palavra-passe"
|
||||
},
|
||||
"login": {
|
||||
"message": "Iniciar sessão"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identidade"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Novo(a) $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Editar $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Histórico de palavras-passe"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "A sua nova palavra-passe mestra não cumpre os requisitos da política."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Receba e-mails do Bitwarden com anúncios, conselhos e oportunidades de investigação."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Anular subscrição"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "a qualquer altura."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Ao continuar, concorda com os"
|
||||
},
|
||||
"and": {
|
||||
"message": "e"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Ao marcar esta caixa concorda com o seguinte:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Limpe os filtros ou tente outro termo de pesquisa"
|
||||
},
|
||||
"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": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copiar informações - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Preencher automaticamente - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Não há valores a copiar"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Atribuir coleções"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Creare cont"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Conectare"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitate"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Istoric parole"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Noua dvs. parolă principală nu îndeplinește cerințele politicii."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Dacă bifați această casetă sunteți de acord cu următoarele:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Создать аккаунт"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Задайте надежный пароль"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Завершите создание аккаунта, задав пароль"
|
||||
},
|
||||
"login": {
|
||||
"message": "Войти"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Удалить из избранного"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Элемент добавлен в избранное"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Элемент удален из избранного"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Заметки"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Личная информация"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Новый $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Изменить $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "История паролей"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Ваш новый мастер-пароль не соответствует требованиям политики."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Получайте электронные письма от Bitwarden с анонсами, советами и возможностями для исследований."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Отписаться"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "в любое время."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Продолжая, вы соглашаетесь с"
|
||||
},
|
||||
"and": {
|
||||
"message": "и"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Отметив этот флажок, вы соглашаетесь со следующим:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Очистите фильтры или попробуйте другой поисковый запрос"
|
||||
},
|
||||
"copyInfoLabel": {
|
||||
"message": "Скопировать информацию, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Скопировать информацию - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Автозаполнение - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Нет значений для копирования"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Назначить коллекции"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "ගිණුමක් සාදන්න"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "පිවිසෙන්න"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "අනන්යතාවය"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "මුරපද ඉතිහාසය"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "ඔබගේ නව ප්රධාන මුරපදය ප්රතිපත්ති අවශ්යතා සපුරාලන්නේ නැත."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "මෙම කොටුව පරීක්ෂා කිරීමෙන් ඔබ පහත සඳහන් දෑ වලට එකඟ වේ:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Vytvoriť účet"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Nastavte silné heslo"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Zdajte heslo na vytvorenie účtu"
|
||||
},
|
||||
"login": {
|
||||
"message": "Prihlásiť sa"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Odstrániť z obľúbených"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Položka pridaná medzi obľúbené"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Položka odobraná z obľúbených"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Poznámky"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identita"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Nové $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Upraviť $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "História hesla"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Vaše nové heslo nespĺňa pravidlá."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Dostávať e-maily od Bitwardenu s oznámeniami, radami a možnosťami výskumu."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Odhlásiť sa z odberu"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "môžete kedykoľvek."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Pokračovaním súhlasíte s"
|
||||
},
|
||||
"and": {
|
||||
"message": "a"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Označením tohto políčka súhlasíte s nasledovným:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Vymažte filtre alebo zmeňte vyhľadávaný výraz"
|
||||
},
|
||||
"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": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Skopírovať info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Automatické vyplnenie - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Nie je čo kopírovať"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Prideliť zbierky"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Ustvari račun"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Prijavi se"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identiteta"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Zgodovina gesel"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Vaše novo glavno geslo ne ustreza zahtevam."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Strinjam se z naslednjim:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Креирај налог"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Поставите јаку лозинку"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Завршите креирање налога постављањем лозинке"
|
||||
},
|
||||
"login": {
|
||||
"message": "Пријавите се"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Скини омиљено"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Ставка је додата у фаворите"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Ставка је уклоњена из фаворите"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Белешке"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Идентитет"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Уреди $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Историја Лозинке"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Ваша нова главна лозинка не испуњава захтеве смерница."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Добијајте е-пошту од Bitwarden-а за најаве, савете и могућности истраживања."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Одјави се"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "било када."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Ако наставите, слажете се са"
|
||||
},
|
||||
"and": {
|
||||
"message": "и"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Означавањем овог поља пристајете на следеће:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Обришите филтере или покушајте са другим термином"
|
||||
},
|
||||
"copyInfoLabel": {
|
||||
"message": "Копирај информације, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Копирај информације - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Ауто-пуњење - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Нема вредности за копирање"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Додели колекције"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Skapa konto"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Ställ in ett starkt lösenord"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Logga in"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identitet"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Ny $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Redigera $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Lösenordshistorik"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Ditt nya huvudlösenord uppfyller inte kraven i policyn."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "och"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Genom att markera denna ruta godkänner du följande:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Tilldela samlingar"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Create account"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Log in"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Password history"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Your new master password does not meet the policy requirements."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "สร้างบัญชี"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "เข้าสู่ระบบ"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "ข้อมูลระบุตัวตน"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "ประวัติของรหัสผ่าน"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "รหัสผ่านหลักใหม่ของคุณไม่เป็นไปตามข้อกำหนดของนโยบาย"
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "By checking this box you agree to the following:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Hesap oluştur"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Güçlü bir parola belirleyin"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Parolanızı belirleyerek hesabınızı oluşturmayı tamamlayın"
|
||||
},
|
||||
"login": {
|
||||
"message": "Giriş yap"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Kimlik"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Yeni $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "$TYPE$ düzenle",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Parola geçmişi"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Yeni ana parolanız ilke gereksinimlerini karşılamıyor."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Bitwarden'dan duyurular, öneriler ve araştırmalarla ilgili e-postalar alın."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "İstediğiniz zaman"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "aboneliğinizi iptal edebilirsiniz."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Devam ederek şunları kabul etmiş olursunuz:"
|
||||
},
|
||||
"and": {
|
||||
"message": "ve"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Bu kutuyu işaretleyerek aşağıdakileri kabul etmiş olursunuz:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Filtreleri temizleyin veya başka bir arama yapmayı deneyin"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Bilgileri kopyala - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Otomatik doldur - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Kopyalanacak değer yok"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Koleksiyon ata"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Створити обліковий запис"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Встановіть надійний пароль"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Завершіть створення облікового запису, встановивши пароль"
|
||||
},
|
||||
"login": {
|
||||
"message": "Увійти"
|
||||
},
|
||||
|
@ -393,10 +399,10 @@
|
|||
"message": "Вилучити з обраного"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "Запис додано до обраного"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "Запис вилучено з обраного"
|
||||
},
|
||||
"notes": {
|
||||
"message": "Нотатки"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Особисті дані"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "Новий $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Редагувати $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Історія паролів"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Ваш новий головний пароль не задовольняє вимоги політики."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Отримуйте електронні листи від Bitwarden з оголошеннями, порадами та інформацією про нові можливості."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Відписатися"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "можна будь-коли."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "Продовжуючи, ви погоджуєтеся з"
|
||||
},
|
||||
"and": {
|
||||
"message": "і"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Позначивши цей прапорець, ви погоджуєтеся з:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Скиньте фільтри або спробуйте іншу умову пошуку"
|
||||
},
|
||||
"copyInfoLabel": {
|
||||
"message": "Копіювати інформацію, $ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Копіювати інформацію – $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Автозаповнення – $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "Немає значень для копіювання"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Призначити збірки"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "Tạo tài khoản"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "Đăng nhập"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "Danh tính"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "Lịch sử mật khẩu"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "Mật khẩu chính bạn chọn không đáp ứng yêu cầu."
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Bạn đồng ý với những điều sau khi nhấn chọn ô này:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "创建账户"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "设置强密码"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "设置密码后就能完成账户创建"
|
||||
},
|
||||
"login": {
|
||||
"message": "登录"
|
||||
},
|
||||
|
@ -390,13 +396,13 @@
|
|||
"message": "收藏"
|
||||
},
|
||||
"unfavorite": {
|
||||
"message": "Unfavorite"
|
||||
"message": "取消收藏"
|
||||
},
|
||||
"itemAddedToFavorites": {
|
||||
"message": "Item added to favorites"
|
||||
"message": "项目已添加到收藏夹"
|
||||
},
|
||||
"itemRemovedFromFavorites": {
|
||||
"message": "Item removed from favorites"
|
||||
"message": "项目已移出收藏夹"
|
||||
},
|
||||
"notes": {
|
||||
"message": "备注"
|
||||
|
@ -420,7 +426,7 @@
|
|||
"message": "前往"
|
||||
},
|
||||
"launchWebsite": {
|
||||
"message": "Launch website"
|
||||
"message": "启动网站"
|
||||
},
|
||||
"website": {
|
||||
"message": "网站"
|
||||
|
@ -612,7 +618,7 @@
|
|||
"message": "已注销"
|
||||
},
|
||||
"loggedOutDesc": {
|
||||
"message": "You have been logged out of your account."
|
||||
"message": "您已注销您的账户。"
|
||||
},
|
||||
"loginExpired": {
|
||||
"message": "您的登录会话已过期。"
|
||||
|
@ -1123,13 +1129,13 @@
|
|||
"message": "指定您本地托管的 Bitwarden 安装的基础 URL。"
|
||||
},
|
||||
"selfHostedBaseUrlHint": {
|
||||
"message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com"
|
||||
"message": "指定您的本地托管 Bitwarden 安装的基础 URL。例如:https://bitwarden.company.com"
|
||||
},
|
||||
"selfHostedCustomEnvHeader": {
|
||||
"message": "For advanced configuration, you can specify the base URL of each service independently."
|
||||
"message": "对于高级配置,您可以单独指定每个服务的基础 URL。"
|
||||
},
|
||||
"selfHostedEnvFormInvalid": {
|
||||
"message": "You must add either the base Server URL or at least one custom environment."
|
||||
"message": "您必须添加基础服务器 URL 或至少添加一个自定义环境。"
|
||||
},
|
||||
"customEnvironment": {
|
||||
"message": "自定义环境"
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "身份"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "新增 $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "编辑 $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "密码历史记录"
|
||||
},
|
||||
|
@ -1444,7 +1468,7 @@
|
|||
"message": "集合"
|
||||
},
|
||||
"nCollections": {
|
||||
"message": "$COUNT$ collections",
|
||||
"message": "$COUNT$ 个集合",
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"content": "$1",
|
||||
|
@ -1682,7 +1706,7 @@
|
|||
"message": "自动填充并保存"
|
||||
},
|
||||
"fillAndSave": {
|
||||
"message": "Fill and save"
|
||||
"message": "填充并保存"
|
||||
},
|
||||
"autoFillSuccessAndSavedUri": {
|
||||
"message": "项目已自动填充且 URI 已保存"
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "您的新主密码不符合策略要求。"
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "接收来自 Bitwarden 的电子邮件,以获取公告、建议和调研。"
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "取消订阅"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "随时"
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "若继续,代表您同意"
|
||||
},
|
||||
"and": {
|
||||
"message": "以及"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "选中此框表示您同意:"
|
||||
},
|
||||
|
@ -1781,10 +1820,10 @@
|
|||
"message": "确定"
|
||||
},
|
||||
"errorRefreshingAccessToken": {
|
||||
"message": "Access Token Refresh Error"
|
||||
"message": "访问令牌刷新错误"
|
||||
},
|
||||
"errorRefreshingAccessTokenDesc": {
|
||||
"message": "No refresh token or API keys found. Please try logging out and logging back in."
|
||||
"message": "未找到刷新令牌或 API 密钥。请尝试注销然后重新登录。"
|
||||
},
|
||||
"desktopSyncVerificationTitle": {
|
||||
"message": "桌面同步验证"
|
||||
|
@ -2675,7 +2714,7 @@
|
|||
"message": "批准后,您将收到通知。"
|
||||
},
|
||||
"troubleLoggingIn": {
|
||||
"message": "登录遇到问题?"
|
||||
"message": "登录遇到问题吗?"
|
||||
},
|
||||
"loginApproved": {
|
||||
"message": "登录已批准"
|
||||
|
@ -3305,18 +3344,8 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "清除筛选器或尝试另一个搜索词"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"message": "复制信息 - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3325,18 +3354,8 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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$",
|
||||
"message": "复制备注 - $ITEMNAME$",
|
||||
"description": "Title for a button copies a note to the clipboard.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3346,7 +3365,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsLabel": {
|
||||
"message": "More options, $ITEMNAME$",
|
||||
"message": "更多选项,$ITEMNAME$",
|
||||
"description": "Aria label for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3356,7 +3375,7 @@
|
|||
}
|
||||
},
|
||||
"moreOptionsTitle": {
|
||||
"message": "More options - $ITEMNAME$",
|
||||
"message": "更多选项 - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with more options for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3366,7 +3385,7 @@
|
|||
}
|
||||
},
|
||||
"viewItemTitle": {
|
||||
"message": "View item - $ITEMNAME$",
|
||||
"message": "查看项目 - $ITEMNAME$",
|
||||
"description": "Title for a link that opens a view for an item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
|
@ -3375,17 +3394,30 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "自动填充 - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "没有要复制的值"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
"message": "分配集合"
|
||||
},
|
||||
"copyEmail": {
|
||||
"message": "Copy email"
|
||||
"message": "复制电子邮件地址"
|
||||
},
|
||||
"copyPhone": {
|
||||
"message": "Copy phone"
|
||||
"message": "复制电话号码"
|
||||
},
|
||||
"copyAddress": {
|
||||
"message": "Copy address"
|
||||
"message": "复制地址"
|
||||
},
|
||||
"adminConsole": {
|
||||
"message": "管理控制台"
|
||||
|
@ -3426,7 +3458,7 @@
|
|||
}
|
||||
},
|
||||
"new": {
|
||||
"message": "新建"
|
||||
"message": "新增"
|
||||
},
|
||||
"removeItem": {
|
||||
"message": "删除 $NAME$",
|
||||
|
@ -3439,12 +3471,12 @@
|
|||
}
|
||||
},
|
||||
"itemsWithNoFolder": {
|
||||
"message": "Items with no folder"
|
||||
"message": "无文件夹的项目"
|
||||
},
|
||||
"organizationIsDeactivated": {
|
||||
"message": "组织已停用"
|
||||
},
|
||||
"contactYourOrgAdmin": {
|
||||
"message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance."
|
||||
"message": "无法访问已停用组织中的项目。请联系您的组织所有者获取协助。"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
"createAccount": {
|
||||
"message": "建立帳戶"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
},
|
||||
"finishCreatingYourAccountBySettingAPassword": {
|
||||
"message": "Finish creating your account by setting a password"
|
||||
},
|
||||
"login": {
|
||||
"message": "登入"
|
||||
},
|
||||
|
@ -1434,6 +1440,24 @@
|
|||
"typeIdentity": {
|
||||
"message": "身分"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editItemHeader": {
|
||||
"message": "Edit $TYPE$",
|
||||
"placeholders": {
|
||||
"type": {
|
||||
"content": "$1",
|
||||
"example": "Login"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"message": "密碼歷史記錄"
|
||||
},
|
||||
|
@ -1762,6 +1786,21 @@
|
|||
"masterPasswordPolicyRequirementsNotMet": {
|
||||
"message": "您新的主密碼不符合原則要求。"
|
||||
},
|
||||
"receiveMarketingEmails": {
|
||||
"message": "Get emails from Bitwarden for announcements, advice, and research opportunities."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
},
|
||||
"byContinuingYouAgreeToThe": {
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "選中此選取框,即表示您同意下列條款:"
|
||||
},
|
||||
|
@ -3305,16 +3344,6 @@
|
|||
"clearFiltersOrTryAnother": {
|
||||
"message": "Clear filters or try another search term"
|
||||
},
|
||||
"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": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyInfoTitle": {
|
||||
"message": "Copy info - $ITEMNAME$",
|
||||
"description": "Title for a button that opens a menu with options to copy information from an item.",
|
||||
|
@ -3325,16 +3354,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
|
@ -3375,6 +3394,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"autofillTitle": {
|
||||
"message": "Auto-fill - $ITEMNAME$",
|
||||
"description": "Title for a button that auto-fills a login item.",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
"example": "Secret Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noValuesToCopy": {
|
||||
"message": "No values to copy"
|
||||
},
|
||||
"assignCollections": {
|
||||
"message": "Assign collections"
|
||||
},
|
||||
|
|
|
@ -30,7 +30,9 @@
|
|||
</form>
|
||||
<p class="createAccountLink">
|
||||
{{ "newAroundHere" | i18n }}
|
||||
<a routerLink="/register" (click)="setLoginEmailValues()">{{ "createAccount" | i18n }}</a>
|
||||
<a [routerLink]="registerRoute" (click)="setLoginEmailValues()">{{
|
||||
"createAccount" | i18n
|
||||
}}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -5,6 +5,8 @@ import { Subject, firstValueFrom, takeUntil } from "rxjs";
|
|||
|
||||
import { EnvironmentSelectorComponent } from "@bitwarden/angular/auth/components/environment-selector.component";
|
||||
import { LoginEmailServiceAbstraction } from "@bitwarden/auth/common";
|
||||
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
|
||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||
|
@ -26,6 +28,9 @@ export class HomeComponent implements OnInit, OnDestroy {
|
|||
rememberEmail: [false],
|
||||
});
|
||||
|
||||
// TODO: remove when email verification flag is removed
|
||||
registerRoute = "/register";
|
||||
|
||||
constructor(
|
||||
protected platformUtilsService: PlatformUtilsService,
|
||||
private formBuilder: FormBuilder,
|
||||
|
@ -34,9 +39,19 @@ export class HomeComponent implements OnInit, OnDestroy {
|
|||
private environmentService: EnvironmentService,
|
||||
private loginEmailService: LoginEmailServiceAbstraction,
|
||||
private accountSwitcherService: AccountSwitcherService,
|
||||
private configService: ConfigService,
|
||||
) {}
|
||||
|
||||
async ngOnInit(): Promise<void> {
|
||||
// TODO: remove when email verification flag is removed
|
||||
const emailVerification = await this.configService.getFeatureFlag(
|
||||
FeatureFlag.EmailVerification,
|
||||
);
|
||||
|
||||
if (emailVerification) {
|
||||
this.registerRoute = "/signup";
|
||||
}
|
||||
|
||||
const email = this.loginEmailService.getEmail();
|
||||
const rememberEmail = this.loginEmailService.getRememberEmail();
|
||||
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
<div id="login-initiated">
|
||||
<header>
|
||||
<h1 class="margin-auto">
|
||||
<app-header>
|
||||
<div class="left">
|
||||
<app-pop-out></app-pop-out>
|
||||
</div>
|
||||
<h1 class="center">
|
||||
<span class="title">{{ "loginInitiated" | i18n }}</span>
|
||||
</h1>
|
||||
</header>
|
||||
|
||||
<div class="right"></div>
|
||||
</app-header>
|
||||
<div class="content login-page">
|
||||
<div class="full-loading-spinner" *ngIf="loading">
|
||||
<i class="bwi bwi-spinner bwi-spin bwi-3x" aria-hidden="true"></i>
|
||||
|
|
|
@ -13,6 +13,7 @@ import { DevicesApiServiceAbstraction } from "@bitwarden/common/auth/abstraction
|
|||
import { SsoLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/sso-login.service.abstraction";
|
||||
import { WebAuthnLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/webauthn/webauthn-login.service.abstraction";
|
||||
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
|
||||
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||
import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service";
|
||||
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
|
||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||
|
@ -51,6 +52,7 @@ export class LoginComponent extends BaseLoginComponent {
|
|||
loginEmailService: LoginEmailServiceAbstraction,
|
||||
ssoLoginService: SsoLoginServiceAbstraction,
|
||||
webAuthnLoginService: WebAuthnLoginServiceAbstraction,
|
||||
configService: ConfigService,
|
||||
) {
|
||||
super(
|
||||
devicesApiService,
|
||||
|
@ -71,6 +73,7 @@ export class LoginComponent extends BaseLoginComponent {
|
|||
loginEmailService,
|
||||
ssoLoginService,
|
||||
webAuthnLoginService,
|
||||
configService,
|
||||
);
|
||||
super.onSuccessfulLogin = async () => {
|
||||
await syncService.fullSync(true);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
||||
|
||||
import AutofillField from "../../models/autofill-field";
|
||||
import AutofillPageDetails from "../../models/autofill-page-details";
|
||||
import { ElementWithOpId, FormFieldElement } from "../../types";
|
||||
|
||||
type OpenAutofillOverlayOptions = {
|
||||
|
@ -19,6 +20,7 @@ interface AutofillOverlayContentService {
|
|||
setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement: ElementWithOpId<FormFieldElement>,
|
||||
autofillFieldData: AutofillField,
|
||||
pageDetails: AutofillPageDetails,
|
||||
): Promise<void>;
|
||||
openAutofillOverlay(options: OpenAutofillOverlayOptions): void;
|
||||
removeAutofillOverlay(): void;
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
import AutofillField from "../../models/autofill-field";
|
||||
import AutofillPageDetails from "../../models/autofill-page-details";
|
||||
|
||||
export interface InlineMenuFieldQualificationsService {
|
||||
isFieldForLoginForm(field: AutofillField, pageDetails: AutofillPageDetails): boolean;
|
||||
}
|
|
@ -4,6 +4,8 @@ import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authenticatio
|
|||
import { EVENTS, AutofillOverlayVisibility } from "@bitwarden/common/autofill/constants";
|
||||
|
||||
import AutofillField from "../models/autofill-field";
|
||||
import AutofillForm from "../models/autofill-form";
|
||||
import AutofillPageDetails from "../models/autofill-page-details";
|
||||
import { createAutofillFieldMock } from "../spec/autofill-mocks";
|
||||
import { flushPromises } from "../spec/testing-utils";
|
||||
import { ElementWithOpId, FormFieldElement } from "../types";
|
||||
|
@ -146,6 +148,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
describe("setupAutofillOverlayListenerOnField", () => {
|
||||
let autofillFieldElement: ElementWithOpId<FormFieldElement>;
|
||||
let autofillFieldData: AutofillField;
|
||||
let pageDetailsMock: AutofillPageDetails;
|
||||
|
||||
beforeEach(() => {
|
||||
document.body.innerHTML = `
|
||||
|
@ -166,11 +169,27 @@ describe("AutofillOverlayContentService", () => {
|
|||
placeholder: "username",
|
||||
elementNumber: 1,
|
||||
});
|
||||
const passwordFieldData = createAutofillFieldMock({
|
||||
opid: "password-field",
|
||||
form: "validFormId",
|
||||
elementNumber: 2,
|
||||
autocompleteType: "current-password",
|
||||
type: "password",
|
||||
});
|
||||
pageDetailsMock = mock<AutofillPageDetails>({
|
||||
forms: { validFormId: mock<AutofillForm>() },
|
||||
fields: [autofillFieldData, passwordFieldData],
|
||||
});
|
||||
});
|
||||
|
||||
describe("skips setup for ignored form fields", () => {
|
||||
beforeEach(() => {
|
||||
autofillFieldData = mock<AutofillField>();
|
||||
autofillFieldData = mock<AutofillField>({
|
||||
type: "text",
|
||||
htmlName: "username",
|
||||
htmlID: "username",
|
||||
placeholder: "username",
|
||||
});
|
||||
});
|
||||
|
||||
it("ignores fields that are readonly", async () => {
|
||||
|
@ -179,6 +198,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.addEventListener).not.toHaveBeenCalled();
|
||||
|
@ -190,6 +210,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.addEventListener).not.toHaveBeenCalled();
|
||||
|
@ -201,6 +222,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.addEventListener).not.toHaveBeenCalled();
|
||||
|
@ -213,6 +235,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.addEventListener).not.toHaveBeenCalled();
|
||||
|
@ -225,6 +248,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.addEventListener).not.toHaveBeenCalled();
|
||||
|
@ -236,6 +260,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.addEventListener).not.toHaveBeenCalled();
|
||||
|
@ -247,6 +272,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.addEventListener).not.toHaveBeenCalled();
|
||||
|
@ -259,6 +285,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.addEventListener).not.toHaveBeenCalled();
|
||||
|
@ -272,6 +299,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(sendExtensionMessageSpy).toHaveBeenCalledWith("getAutofillOverlayVisibility");
|
||||
|
@ -287,6 +315,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillOverlayContentService["autofillOverlayVisibility"]).toEqual(
|
||||
|
@ -310,6 +339,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillFieldElement.removeEventListener).toHaveBeenNthCalledWith(
|
||||
|
@ -334,6 +364,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -357,6 +388,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
jest.spyOn(globalThis.customElements, "define").mockImplementation();
|
||||
});
|
||||
|
@ -440,6 +472,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
spanAutofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
spanAutofillFieldElement.dispatchEvent(new Event("input"));
|
||||
|
@ -451,6 +484,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
autofillFieldElement.dispatchEvent(new Event("input"));
|
||||
|
||||
|
@ -467,6 +501,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
passwordFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
passwordFieldElement.dispatchEvent(new Event("input"));
|
||||
|
||||
|
@ -486,6 +521,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
autofillFieldElement.dispatchEvent(new Event("input"));
|
||||
|
||||
|
@ -504,6 +540,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
autofillFieldElement.dispatchEvent(new Event("input"));
|
||||
|
||||
|
@ -517,6 +554,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
autofillFieldElement.dispatchEvent(new Event("input"));
|
||||
|
||||
|
@ -531,6 +569,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
autofillFieldElement.dispatchEvent(new Event("input"));
|
||||
|
||||
|
@ -546,6 +585,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
autofillFieldElement.dispatchEvent(new Event("input"));
|
||||
|
||||
|
@ -563,6 +603,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -613,6 +654,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
autofillFieldElement.dispatchEvent(new Event("focus"));
|
||||
|
@ -624,6 +666,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
autofillFieldElement.dispatchEvent(new Event("focus"));
|
||||
|
@ -641,6 +684,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
autofillFieldElement.dispatchEvent(new Event("focus"));
|
||||
|
@ -660,6 +704,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
autofillFieldElement.dispatchEvent(new Event("focus"));
|
||||
|
@ -678,6 +723,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
autofillFieldElement.dispatchEvent(new Event("focus"));
|
||||
|
@ -695,6 +741,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
autofillFieldElement.dispatchEvent(new Event("focus"));
|
||||
|
@ -711,6 +758,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
autofillFieldElement.dispatchEvent(new Event("focus"));
|
||||
|
@ -733,6 +781,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(sendExtensionMessageSpy).toHaveBeenCalledWith("openAutofillOverlay");
|
||||
|
@ -747,6 +796,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
|
||||
expect(autofillOverlayContentService["mostRecentlyFocusedField"]).toEqual(
|
||||
|
@ -1589,6 +1639,7 @@ describe("AutofillOverlayContentService", () => {
|
|||
describe("destroy", () => {
|
||||
let autofillFieldElement: ElementWithOpId<FormFieldElement>;
|
||||
let autofillFieldData: AutofillField;
|
||||
let pageDetailsMock: AutofillPageDetails;
|
||||
|
||||
beforeEach(() => {
|
||||
document.body.innerHTML = `
|
||||
|
@ -1608,11 +1659,21 @@ describe("AutofillOverlayContentService", () => {
|
|||
placeholder: "username",
|
||||
elementNumber: 1,
|
||||
});
|
||||
// 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
|
||||
autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
const passwordFieldData = createAutofillFieldMock({
|
||||
opid: "password-field",
|
||||
form: "validFormId",
|
||||
elementNumber: 2,
|
||||
autocompleteType: "current-password",
|
||||
type: "password",
|
||||
});
|
||||
pageDetailsMock = mock<AutofillPageDetails>({
|
||||
forms: { validFormId: mock<AutofillForm>() },
|
||||
fields: [autofillFieldData, passwordFieldData],
|
||||
});
|
||||
void autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
pageDetailsMock,
|
||||
);
|
||||
autofillOverlayContentService["mostRecentlyFocusedField"] = autofillFieldElement;
|
||||
});
|
||||
|
|
|
@ -7,6 +7,7 @@ import { EVENTS, AutofillOverlayVisibility } from "@bitwarden/common/autofill/co
|
|||
|
||||
import { FocusedFieldData } from "../background/abstractions/overlay.background";
|
||||
import AutofillField from "../models/autofill-field";
|
||||
import AutofillPageDetails from "../models/autofill-page-details";
|
||||
import AutofillOverlayButtonIframe from "../overlay/iframe-content/autofill-overlay-button-iframe";
|
||||
import AutofillOverlayListIframe from "../overlay/iframe-content/autofill-overlay-list-iframe";
|
||||
import { ElementWithOpId, FillableFormFieldElement, FormFieldElement } from "../types";
|
||||
|
@ -23,8 +24,10 @@ import {
|
|||
OpenAutofillOverlayOptions,
|
||||
} from "./abstractions/autofill-overlay-content.service";
|
||||
import { AutoFillConstants } from "./autofill-constants";
|
||||
import { InlineMenuFieldQualificationService } from "./inline-menu-field-qualification.service";
|
||||
|
||||
class AutofillOverlayContentService implements AutofillOverlayContentServiceInterface {
|
||||
private readonly inlineMenuFieldQualificationService: InlineMenuFieldQualificationService;
|
||||
isFieldCurrentlyFocused = false;
|
||||
isCurrentlyFilling = false;
|
||||
isOverlayCiphersPopulated = false;
|
||||
|
@ -62,6 +65,10 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
|||
zIndex: "2147483647",
|
||||
};
|
||||
|
||||
constructor() {
|
||||
this.inlineMenuFieldQualificationService = new InlineMenuFieldQualificationService();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the autofill overlay content service by setting up the mutation observers.
|
||||
* The observers will be instantiated on DOMContentLoaded if the page is current loading.
|
||||
|
@ -81,12 +88,17 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
|||
*
|
||||
* @param formFieldElement - Form field elements identified during the page details collection process.
|
||||
* @param autofillFieldData - Autofill field data captured from the form field element.
|
||||
* @param pageDetails - The collected page details from the tab.
|
||||
*/
|
||||
async setupAutofillOverlayListenerOnField(
|
||||
formFieldElement: ElementWithOpId<FormFieldElement>,
|
||||
autofillFieldData: AutofillField,
|
||||
pageDetails: AutofillPageDetails,
|
||||
) {
|
||||
if (this.isIgnoredField(autofillFieldData) || this.formFieldElements.has(formFieldElement)) {
|
||||
if (
|
||||
this.formFieldElements.has(formFieldElement) ||
|
||||
this.isIgnoredField(autofillFieldData, pageDetails)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -524,51 +536,6 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
|||
return this.authStatus === AuthenticationStatus.Unlocked;
|
||||
}
|
||||
|
||||
/**
|
||||
* Identifies if the autofill field's data contains any of
|
||||
* the keyboards matching the passed list of keywords.
|
||||
*
|
||||
* @param autofillFieldData - Autofill field data captured from the form field element.
|
||||
* @param keywords - Keywords to search for in the autofill field data.
|
||||
*/
|
||||
private keywordsFoundInFieldData(autofillFieldData: AutofillField, keywords: string[]) {
|
||||
const searchedString = this.getAutofillFieldDataKeywords(autofillFieldData);
|
||||
return keywords.some((keyword) => searchedString.includes(keyword));
|
||||
}
|
||||
|
||||
/**
|
||||
* Aggregates the autofill field's data into a single string
|
||||
* that can be used to search for keywords.
|
||||
*
|
||||
* @param autofillFieldData - Autofill field data captured from the form field element.
|
||||
*/
|
||||
private getAutofillFieldDataKeywords(autofillFieldData: AutofillField) {
|
||||
if (this.autofillFieldKeywordsMap.has(autofillFieldData)) {
|
||||
return this.autofillFieldKeywordsMap.get(autofillFieldData);
|
||||
}
|
||||
|
||||
const keywordValues = [
|
||||
autofillFieldData.htmlID,
|
||||
autofillFieldData.htmlName,
|
||||
autofillFieldData.htmlClass,
|
||||
autofillFieldData.type,
|
||||
autofillFieldData.title,
|
||||
autofillFieldData.placeholder,
|
||||
autofillFieldData.autoCompleteType,
|
||||
autofillFieldData["label-data"],
|
||||
autofillFieldData["label-aria"],
|
||||
autofillFieldData["label-left"],
|
||||
autofillFieldData["label-right"],
|
||||
autofillFieldData["label-tag"],
|
||||
autofillFieldData["label-top"],
|
||||
]
|
||||
.join(",")
|
||||
.toLowerCase();
|
||||
this.autofillFieldKeywordsMap.set(autofillFieldData, keywordValues);
|
||||
|
||||
return keywordValues;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates that the most recently focused field is currently
|
||||
* focused within the root node relative to the field.
|
||||
|
@ -739,23 +706,25 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
|||
* updated in the future to support other types of forms.
|
||||
*
|
||||
* @param autofillFieldData - Autofill field data captured from the form field element.
|
||||
* @param pageDetails - The collected page details from the tab.
|
||||
*/
|
||||
private isIgnoredField(autofillFieldData: AutofillField): boolean {
|
||||
private isIgnoredField(
|
||||
autofillFieldData: AutofillField,
|
||||
pageDetails: AutofillPageDetails,
|
||||
): boolean {
|
||||
if (
|
||||
autofillFieldData.readonly ||
|
||||
autofillFieldData.disabled ||
|
||||
!autofillFieldData.viewable ||
|
||||
this.ignoredFieldTypes.has(autofillFieldData.type) ||
|
||||
this.keywordsFoundInFieldData(autofillFieldData, ["search", "captcha"])
|
||||
this.ignoredFieldTypes.has(autofillFieldData.type)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const isLoginCipherField =
|
||||
autofillFieldData.type === "password" ||
|
||||
this.keywordsFoundInFieldData(autofillFieldData, AutoFillConstants.UsernameFieldNames);
|
||||
|
||||
return !isLoginCipherField;
|
||||
return !this.inlineMenuFieldQualificationService.isFieldForLoginForm(
|
||||
autofillFieldData,
|
||||
pageDetails,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -35,6 +35,7 @@ describe("CollectAutofillContentService", () => {
|
|||
|
||||
beforeEach(() => {
|
||||
globalThis.requestIdleCallback = jest.fn((cb, options) => setTimeout(cb, 100));
|
||||
globalThis.cancelIdleCallback = jest.fn((id) => clearTimeout(id));
|
||||
document.body.innerHTML = mockLoginForm;
|
||||
collectAutofillContentService = new CollectAutofillContentService(
|
||||
domElementVisibilityService,
|
||||
|
@ -247,11 +248,16 @@ describe("CollectAutofillContentService", () => {
|
|||
const isFormFieldViewableSpy = jest
|
||||
.spyOn(collectAutofillContentService["domElementVisibilityService"], "isFormFieldViewable")
|
||||
.mockResolvedValue(true);
|
||||
const setupAutofillOverlayListenerOnFieldSpy = jest.spyOn(
|
||||
collectAutofillContentService["autofillOverlayContentService"],
|
||||
"setupAutofillOverlayListenerOnField",
|
||||
);
|
||||
|
||||
await collectAutofillContentService.getPageDetails();
|
||||
|
||||
expect(autofillField.viewable).toBe(true);
|
||||
expect(isFormFieldViewableSpy).toHaveBeenCalledWith(fieldElement);
|
||||
expect(setupAutofillOverlayListenerOnFieldSpy).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("returns an object containing information about the current page as well as autofill data for the forms and fields of the page", async () => {
|
||||
|
@ -1191,7 +1197,7 @@ describe("CollectAutofillContentService", () => {
|
|||
"aria-disabled": false,
|
||||
"aria-haspopup": false,
|
||||
"aria-hidden": false,
|
||||
autoCompleteType: null,
|
||||
autoCompleteType: "off",
|
||||
checked: false,
|
||||
"data-stripe": hiddenField.dataStripe,
|
||||
disabled: false,
|
||||
|
@ -2606,6 +2612,7 @@ describe("CollectAutofillContentService", () => {
|
|||
expect(setupAutofillOverlayListenerOnFieldSpy).toHaveBeenCalledWith(
|
||||
formFieldElement,
|
||||
autofillField,
|
||||
expect.anything(),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -4,31 +4,33 @@ import AutofillPageDetails from "../models/autofill-page-details";
|
|||
import {
|
||||
ElementWithOpId,
|
||||
FillableFormFieldElement,
|
||||
FormFieldElement,
|
||||
FormElementWithAttribute,
|
||||
FormFieldElement,
|
||||
} from "../types";
|
||||
import {
|
||||
elementIsDescriptionDetailsElement,
|
||||
elementIsDescriptionTermElement,
|
||||
elementIsFillableFormField,
|
||||
elementIsFormElement,
|
||||
elementIsInputElement,
|
||||
elementIsLabelElement,
|
||||
elementIsSelectElement,
|
||||
elementIsSpanElement,
|
||||
nodeIsElement,
|
||||
elementIsInputElement,
|
||||
elementIsTextAreaElement,
|
||||
nodeIsFormElement,
|
||||
nodeIsInputElement,
|
||||
sendExtensionMessage,
|
||||
// sendExtensionMessage,
|
||||
requestIdleCallbackPolyfill,
|
||||
cancelIdleCallbackPolyfill,
|
||||
} from "../utils";
|
||||
|
||||
import { AutofillOverlayContentService } from "./abstractions/autofill-overlay-content.service";
|
||||
import {
|
||||
UpdateAutofillDataAttributeParams,
|
||||
AutofillFieldElements,
|
||||
AutofillFormElements,
|
||||
CollectAutofillContentService as CollectAutofillContentServiceInterface,
|
||||
UpdateAutofillDataAttributeParams,
|
||||
} from "./abstractions/collect-autofill-content.service";
|
||||
import { DomElementVisibilityService } from "./abstractions/dom-element-visibility.service";
|
||||
|
||||
|
@ -43,9 +45,9 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
private intersectionObserver: IntersectionObserver;
|
||||
private elementInitializingIntersectionObserver: Set<Element> = new Set();
|
||||
private mutationObserver: MutationObserver;
|
||||
private updateAutofillElementsAfterMutationTimeout: number | NodeJS.Timeout;
|
||||
private mutationsQueue: MutationRecord[][] = [];
|
||||
private readonly updateAfterMutationTimeoutDelay = 1000;
|
||||
private updateAfterMutationIdleCallback: NodeJS.Timeout | number;
|
||||
private readonly updateAfterMutationTimeout = 1000;
|
||||
private readonly formFieldQueryString;
|
||||
private readonly nonInputFormFieldTags = new Set(["textarea", "select"]);
|
||||
private readonly ignoredInputTypes = new Set([
|
||||
|
@ -56,7 +58,7 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
"image",
|
||||
"file",
|
||||
]);
|
||||
private useTreeWalkerStrategyFlagSet = false;
|
||||
private useTreeWalkerStrategyFlagSet = true;
|
||||
|
||||
constructor(
|
||||
domElementVisibilityService: DomElementVisibilityService,
|
||||
|
@ -71,10 +73,10 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
}
|
||||
this.formFieldQueryString = `${inputQuery}, textarea:not([data-bwignore]), select:not([data-bwignore]), span[data-bwautofill]`;
|
||||
|
||||
void sendExtensionMessage("getUseTreeWalkerApiForPageDetailsCollectionFeatureFlag").then(
|
||||
(useTreeWalkerStrategyFlag) =>
|
||||
(this.useTreeWalkerStrategyFlagSet = !!useTreeWalkerStrategyFlag?.result),
|
||||
);
|
||||
// void sendExtensionMessage("getUseTreeWalkerApiForPageDetailsCollectionFeatureFlag").then(
|
||||
// (useTreeWalkerStrategyFlag) =>
|
||||
// (this.useTreeWalkerStrategyFlagSet = !!useTreeWalkerStrategyFlag?.result),
|
||||
// );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -119,7 +121,10 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
}
|
||||
|
||||
this.domRecentlyMutated = false;
|
||||
return this.getFormattedPageDetails(autofillFormsData, autofillFieldsData);
|
||||
const pageDetails = this.getFormattedPageDetails(autofillFormsData, autofillFieldsData);
|
||||
this.setupInlineMenuListeners(pageDetails);
|
||||
|
||||
return pageDetails;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -276,11 +281,14 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
* @private
|
||||
*/
|
||||
private updateCachedAutofillFieldVisibility() {
|
||||
this.autofillFieldElements.forEach(
|
||||
async (autofillField, element) =>
|
||||
(autofillField.viewable =
|
||||
await this.domElementVisibilityService.isFormFieldViewable(element)),
|
||||
);
|
||||
this.autofillFieldElements.forEach(async (autofillField, element) => {
|
||||
const previouslyViewable = autofillField.viewable;
|
||||
autofillField.viewable = await this.domElementVisibilityService.isFormFieldViewable(element);
|
||||
|
||||
if (!previouslyViewable && autofillField.viewable) {
|
||||
this.setupInlineMenuListenerOnField(element, autofillField);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -452,10 +460,6 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
|
||||
if (elementIsSpanElement(element)) {
|
||||
this.cacheAutofillFieldElement(index, element, autofillFieldBase);
|
||||
void this.autofillOverlayContentService?.setupAutofillOverlayListenerOnField(
|
||||
element,
|
||||
autofillFieldBase,
|
||||
);
|
||||
return autofillFieldBase;
|
||||
}
|
||||
|
||||
|
@ -495,10 +499,6 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
};
|
||||
|
||||
this.cacheAutofillFieldElement(index, element, autofillField);
|
||||
void this.autofillOverlayContentService?.setupAutofillOverlayListenerOnField(
|
||||
element,
|
||||
autofillField,
|
||||
);
|
||||
return autofillField;
|
||||
};
|
||||
|
||||
|
@ -530,11 +530,11 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
* @private
|
||||
*/
|
||||
private getAutoCompleteAttribute(element: ElementWithOpId<FormFieldElement>): string {
|
||||
const autoCompleteType =
|
||||
return (
|
||||
this.getPropertyOrAttribute(element, "x-autocompletetype") ||
|
||||
this.getPropertyOrAttribute(element, "autocompletetype") ||
|
||||
this.getPropertyOrAttribute(element, "autocomplete");
|
||||
return autoCompleteType !== "off" ? autoCompleteType : null;
|
||||
this.getPropertyOrAttribute(element, "autocomplete")
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1057,7 +1057,7 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
}
|
||||
|
||||
if (!this.mutationsQueue.length) {
|
||||
globalThis.requestIdleCallback(this.processMutations, { timeout: 500 });
|
||||
requestIdleCallbackPolyfill(this.processMutations, { timeout: 500 });
|
||||
}
|
||||
this.mutationsQueue.push(mutations);
|
||||
};
|
||||
|
@ -1194,7 +1194,7 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
continue;
|
||||
}
|
||||
|
||||
globalThis.requestIdleCallback(
|
||||
requestIdleCallbackPolyfill(
|
||||
// We are setting this item to a -1 index because we do not know its position in the DOM.
|
||||
// This value should be updated with the next call to collect page details.
|
||||
() => void this.buildAutofillFieldItem(node as ElementWithOpId<FormFieldElement>, -1),
|
||||
|
@ -1228,13 +1228,13 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
* @private
|
||||
*/
|
||||
private updateAutofillElementsAfterMutation() {
|
||||
if (this.updateAutofillElementsAfterMutationTimeout) {
|
||||
clearTimeout(this.updateAutofillElementsAfterMutationTimeout);
|
||||
if (this.updateAfterMutationIdleCallback) {
|
||||
cancelIdleCallbackPolyfill(this.updateAfterMutationIdleCallback);
|
||||
}
|
||||
|
||||
this.updateAutofillElementsAfterMutationTimeout = setTimeout(
|
||||
this.updateAfterMutationIdleCallback = requestIdleCallbackPolyfill(
|
||||
this.getPageDetails.bind(this),
|
||||
this.updateAfterMutationTimeoutDelay,
|
||||
{ timeout: this.updateAfterMutationTimeout },
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1424,22 +1424,64 @@ class CollectAutofillContentService implements CollectAutofillContentServiceInte
|
|||
|
||||
cachedAutofillFieldElement.viewable = true;
|
||||
|
||||
void this.autofillOverlayContentService?.setupAutofillOverlayListenerOnField(
|
||||
formFieldElement,
|
||||
cachedAutofillFieldElement,
|
||||
);
|
||||
this.setupInlineMenuListenerOnField(formFieldElement, cachedAutofillFieldElement);
|
||||
|
||||
this.intersectionObserver?.unobserve(entry.target);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Iterates over all cached field elements and sets up the inline menu listeners on each field.
|
||||
*
|
||||
* @param pageDetails - The page details to use for the inline menu listeners
|
||||
*/
|
||||
private setupInlineMenuListeners(pageDetails: AutofillPageDetails) {
|
||||
if (!this.autofillOverlayContentService) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.autofillFieldElements.forEach((autofillField, formFieldElement) => {
|
||||
this.setupInlineMenuListenerOnField(formFieldElement, autofillField, pageDetails);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up the inline menu listener on the passed field element.
|
||||
*
|
||||
* @param formFieldElement - The form field element to set up the inline menu listener on
|
||||
* @param autofillField - The metadata for the form field
|
||||
* @param pageDetails - The page details to use for the inline menu listeners
|
||||
*/
|
||||
private setupInlineMenuListenerOnField(
|
||||
formFieldElement: ElementWithOpId<FormFieldElement>,
|
||||
autofillField: AutofillField,
|
||||
pageDetails?: AutofillPageDetails,
|
||||
) {
|
||||
if (!this.autofillOverlayContentService) {
|
||||
return;
|
||||
}
|
||||
|
||||
const autofillPageDetails =
|
||||
pageDetails ||
|
||||
this.getFormattedPageDetails(
|
||||
this.getFormattedAutofillFormsData(),
|
||||
this.getFormattedAutofillFieldsData(),
|
||||
);
|
||||
|
||||
void this.autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
formFieldElement,
|
||||
autofillField,
|
||||
autofillPageDetails,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys the CollectAutofillContentService. Clears all
|
||||
* timeouts and disconnects the mutation observer.
|
||||
*/
|
||||
destroy() {
|
||||
if (this.updateAutofillElementsAfterMutationTimeout) {
|
||||
clearTimeout(this.updateAutofillElementsAfterMutationTimeout);
|
||||
if (this.updateAfterMutationIdleCallback) {
|
||||
cancelIdleCallbackPolyfill(this.updateAfterMutationIdleCallback);
|
||||
}
|
||||
this.mutationObserver?.disconnect();
|
||||
this.intersectionObserver?.disconnect();
|
||||
|
|
|
@ -0,0 +1,662 @@
|
|||
import { mock, MockProxy } from "jest-mock-extended";
|
||||
|
||||
import AutofillField from "../models/autofill-field";
|
||||
import AutofillForm from "../models/autofill-form";
|
||||
import AutofillPageDetails from "../models/autofill-page-details";
|
||||
|
||||
import { AutoFillConstants } from "./autofill-constants";
|
||||
import { InlineMenuFieldQualificationService } from "./inline-menu-field-qualification.service";
|
||||
|
||||
describe("InlineMenuFieldQualificationService", () => {
|
||||
let pageDetails: MockProxy<AutofillPageDetails>;
|
||||
let inlineMenuFieldQualificationService: InlineMenuFieldQualificationService;
|
||||
|
||||
beforeEach(() => {
|
||||
pageDetails = mock<AutofillPageDetails>({
|
||||
forms: {},
|
||||
fields: [],
|
||||
});
|
||||
inlineMenuFieldQualificationService = new InlineMenuFieldQualificationService();
|
||||
inlineMenuFieldQualificationService["inlineMenuFieldQualificationFlagSet"] = true;
|
||||
});
|
||||
|
||||
describe("isFieldForLoginForm", () => {
|
||||
describe("qualifying a password field for a login form", () => {
|
||||
describe("an invalid password field", () => {
|
||||
it("has a `new-password` autoCompleteType", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "new-password",
|
||||
});
|
||||
|
||||
expect(inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails)).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
|
||||
it("has a type that is an excluded type", () => {
|
||||
AutoFillConstants.ExcludedAutofillLoginTypes.forEach((excludedType) => {
|
||||
const field = mock<AutofillField>({
|
||||
type: excludedType,
|
||||
});
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("has an attribute present on the FieldIgnoreList, indicating that the field is a captcha", () => {
|
||||
AutoFillConstants.FieldIgnoreList.forEach((attribute, index) => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: index === 0 ? attribute : "",
|
||||
htmlName: index === 1 ? attribute : "",
|
||||
placeholder: index > 1 ? attribute : "",
|
||||
});
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("has a type other than `password` or `text`", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "number",
|
||||
htmlID: "not-password",
|
||||
htmlName: "not-password",
|
||||
placeholder: "not-password",
|
||||
});
|
||||
|
||||
expect(inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails)).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
|
||||
it("has a type of `text` without an attribute that indicates the field is a password field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
htmlID: "something-else",
|
||||
htmlName: "something-else",
|
||||
placeholder: "something-else",
|
||||
});
|
||||
|
||||
expect(inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails)).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
|
||||
it("has a type of `text` and contains attributes that indicates the field is a search field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
htmlID: "search",
|
||||
htmlName: "something-else",
|
||||
placeholder: "something-else",
|
||||
});
|
||||
|
||||
expect(inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails)).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
|
||||
describe("does not have a parent form element", () => {
|
||||
beforeEach(() => {
|
||||
pageDetails.forms = {};
|
||||
});
|
||||
|
||||
it("on a page that has more than one password field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "",
|
||||
});
|
||||
const secondField = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "some-other-password",
|
||||
htmlName: "some-other-password",
|
||||
placeholder: "some-other-password",
|
||||
});
|
||||
pageDetails.fields = [field, secondField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("on a page that has more than one visible username field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "",
|
||||
});
|
||||
const usernameField = mock<AutofillField>({
|
||||
type: "text",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
});
|
||||
const secondUsernameField = mock<AutofillField>({
|
||||
type: "text",
|
||||
htmlID: "some-other-user-username",
|
||||
htmlName: "some-other-user-username",
|
||||
placeholder: "some-other-user-username",
|
||||
});
|
||||
pageDetails.fields = [field, usernameField, secondUsernameField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("has a disabled `autocompleteType` value", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "",
|
||||
autoCompleteType: "off",
|
||||
});
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("has a parent form element", () => {
|
||||
let form: MockProxy<AutofillForm>;
|
||||
|
||||
beforeEach(() => {
|
||||
form = mock<AutofillForm>({ opid: "validFormId" });
|
||||
pageDetails.forms = {
|
||||
validFormId: form,
|
||||
};
|
||||
});
|
||||
|
||||
it("is structured with other password fields in the same form", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "validFormId",
|
||||
});
|
||||
const secondField = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "some-other-password",
|
||||
htmlName: "some-other-password",
|
||||
placeholder: "some-other-password",
|
||||
form: "validFormId",
|
||||
});
|
||||
pageDetails.fields = [field, secondField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("a valid password field", () => {
|
||||
it("has an autoCompleteType of `current-password`", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
});
|
||||
|
||||
expect(inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails)).toBe(
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
it("has a type of `text` with an attribute that indicates the field is a password field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
htmlID: null,
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
});
|
||||
|
||||
expect(inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails)).toBe(
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
describe("does not have a parent form element", () => {
|
||||
it("is the only password field on the page, has one username field on the page, and has a non-disabled `autocompleteType` value", () => {
|
||||
pageDetails.forms = {};
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "",
|
||||
autoCompleteType: "current-password",
|
||||
});
|
||||
const usernameField = mock<AutofillField>({
|
||||
type: "text",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
});
|
||||
pageDetails.fields = [field, usernameField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("has a parent form element", () => {
|
||||
let form: MockProxy<AutofillForm>;
|
||||
|
||||
beforeEach(() => {
|
||||
form = mock<AutofillForm>({ opid: "validFormId" });
|
||||
pageDetails.forms = {
|
||||
validFormId: form,
|
||||
};
|
||||
});
|
||||
|
||||
it("is the only password field within the form and has a visible username field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "validFormId",
|
||||
});
|
||||
const secondPasswordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "some-other-password",
|
||||
htmlName: "some-other-password",
|
||||
placeholder: "some-other-password",
|
||||
form: "anotherFormId",
|
||||
});
|
||||
const usernameField = mock<AutofillField>({
|
||||
type: "text",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
form: "validFormId",
|
||||
});
|
||||
pageDetails.fields = [field, secondPasswordField, usernameField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it("is the only password field within the form and has a non-disabled `autocompleteType` value", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "validFormId",
|
||||
autoCompleteType: "",
|
||||
});
|
||||
const secondPasswordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
htmlID: "some-other-password",
|
||||
htmlName: "some-other-password",
|
||||
placeholder: "some-other-password",
|
||||
form: "anotherFormId",
|
||||
});
|
||||
pageDetails.fields = [field, secondPasswordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("qualifying a username field for a login form", () => {
|
||||
describe("an invalid username field", () => {
|
||||
["username", "email"].forEach((autoCompleteType) => {
|
||||
it(`has a ${autoCompleteType} 'autoCompleteType' value when structured on a page with new password fields`, () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType,
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "new-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
});
|
||||
pageDetails.fields = [field, passwordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
["new", "change", "neue", "ändern"].forEach((keyword) => {
|
||||
it(`has a keyword of ${keyword} that indicates a 'new or changed' username is being filled`, () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: `${keyword} username`,
|
||||
});
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("does not have a parent form element", () => {
|
||||
beforeEach(() => {
|
||||
pageDetails.forms = {};
|
||||
});
|
||||
|
||||
it("is structured on a page with multiple password fields", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
});
|
||||
const secondPasswordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "some-other-password",
|
||||
htmlName: "some-other-password",
|
||||
placeholder: "some-other-password",
|
||||
});
|
||||
pageDetails.fields = [field, passwordField, secondPasswordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("has a parent form element", () => {
|
||||
let form: MockProxy<AutofillForm>;
|
||||
|
||||
beforeEach(() => {
|
||||
form = mock<AutofillForm>({ opid: "validFormId" });
|
||||
pageDetails.forms = {
|
||||
validFormId: form,
|
||||
};
|
||||
});
|
||||
|
||||
it("is structured on a page with no password fields and has a disabled `autoCompleteType` value", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "off",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
form: "validFormId",
|
||||
});
|
||||
pageDetails.fields = [field];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("is structured on a page with no password fields but has other types of fields in the form", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
form: "validFormId",
|
||||
});
|
||||
const otherField = mock<AutofillField>({
|
||||
type: "number",
|
||||
autoCompleteType: "",
|
||||
htmlID: "some-other-field",
|
||||
htmlName: "some-other-field",
|
||||
placeholder: "some-other-field",
|
||||
form: "validFormId",
|
||||
});
|
||||
pageDetails.fields = [field, otherField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("is structured on a page with multiple viewable password field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
form: "validFormId",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "validFormId",
|
||||
});
|
||||
const secondPasswordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "some-other-password",
|
||||
htmlName: "some-other-password",
|
||||
placeholder: "some-other-password",
|
||||
form: "validFormId",
|
||||
});
|
||||
pageDetails.fields = [field, passwordField, secondPasswordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("is structured on a page with a with no visible password fields and but contains a disabled autocomplete type", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "off",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
form: "validFormId",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "validFormId",
|
||||
viewable: false,
|
||||
});
|
||||
pageDetails.fields = [field, passwordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("a valid username field", () => {
|
||||
["username", "email"].forEach((autoCompleteType) => {
|
||||
it(`has a ${autoCompleteType} 'autoCompleteType' value`, () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType,
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
});
|
||||
pageDetails.fields = [field, passwordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("does not have a parent form element", () => {
|
||||
beforeEach(() => {
|
||||
pageDetails.forms = {};
|
||||
});
|
||||
|
||||
it("is structured on a page with a single visible password field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "off",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
});
|
||||
pageDetails.fields = [field, passwordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it("is structured on a page with a single non-visible password field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "off",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
viewable: false,
|
||||
});
|
||||
pageDetails.fields = [field, passwordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it("has a non-disabled autoCompleteType and is structured on a page with no other password fields", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
});
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("has a parent form element", () => {
|
||||
let form: MockProxy<AutofillForm>;
|
||||
|
||||
beforeEach(() => {
|
||||
form = mock<AutofillForm>({ opid: "validFormId" });
|
||||
pageDetails.forms = {
|
||||
validFormId: form,
|
||||
};
|
||||
});
|
||||
|
||||
it("is structured on a page with a single password field", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
form: "validFormId",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "validFormId",
|
||||
});
|
||||
pageDetails.fields = [field, passwordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it("is structured on a page with a with no visible password fields and a non-disabled autocomplete type", () => {
|
||||
const field = mock<AutofillField>({
|
||||
type: "text",
|
||||
autoCompleteType: "",
|
||||
htmlID: "user-username",
|
||||
htmlName: "user-username",
|
||||
placeholder: "user-username",
|
||||
form: "validFormId",
|
||||
});
|
||||
const passwordField = mock<AutofillField>({
|
||||
type: "password",
|
||||
autoCompleteType: "current-password",
|
||||
htmlID: "user-password",
|
||||
htmlName: "user-password",
|
||||
placeholder: "user-password",
|
||||
form: "validFormId",
|
||||
viewable: false,
|
||||
});
|
||||
pageDetails.fields = [field, passwordField];
|
||||
|
||||
expect(
|
||||
inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails),
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,438 @@
|
|||
import AutofillField from "../models/autofill-field";
|
||||
import AutofillPageDetails from "../models/autofill-page-details";
|
||||
import { sendExtensionMessage } from "../utils";
|
||||
|
||||
import { InlineMenuFieldQualificationsService as InlineMenuFieldQualificationsServiceInterface } from "./abstractions/inline-menu-field-qualifications.service";
|
||||
import { AutoFillConstants } from "./autofill-constants";
|
||||
|
||||
export class InlineMenuFieldQualificationService
|
||||
implements InlineMenuFieldQualificationsServiceInterface
|
||||
{
|
||||
private searchFieldNamesSet = new Set(AutoFillConstants.SearchFieldNames);
|
||||
private excludedAutofillLoginTypesSet = new Set(AutoFillConstants.ExcludedAutofillLoginTypes);
|
||||
private usernameFieldTypes = new Set(["text", "email", "number", "tel"]);
|
||||
private usernameAutocompleteValues = new Set(["username", "email"]);
|
||||
private fieldIgnoreListString = AutoFillConstants.FieldIgnoreList.join(",");
|
||||
private passwordFieldExcludeListString = AutoFillConstants.PasswordFieldExcludeList.join(",");
|
||||
private autofillFieldKeywordsMap: WeakMap<AutofillField, string> = new WeakMap();
|
||||
private autocompleteDisabledValues = new Set(["off", "false"]);
|
||||
private newFieldKeywords = new Set(["new", "change", "neue", "ändern"]);
|
||||
private inlineMenuFieldQualificationFlagSet = false;
|
||||
|
||||
constructor() {
|
||||
void sendExtensionMessage("getInlineMenuFieldQualificationFeatureFlag").then(
|
||||
(getInlineMenuFieldQualificationFlag) =>
|
||||
(this.inlineMenuFieldQualificationFlagSet = !!getInlineMenuFieldQualificationFlag?.result),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided field as a field for a login form.
|
||||
*
|
||||
* @param field - The field to validate, should be a username or password field.
|
||||
* @param pageDetails - The details of the page that the field is on.
|
||||
*/
|
||||
isFieldForLoginForm(field: AutofillField, pageDetails: AutofillPageDetails): boolean {
|
||||
if (!this.inlineMenuFieldQualificationFlagSet) {
|
||||
return this.isFieldForLoginFormFallback(field);
|
||||
}
|
||||
|
||||
const isCurrentPasswordField = this.isCurrentPasswordField(field);
|
||||
if (isCurrentPasswordField) {
|
||||
return this.isPasswordFieldForLoginForm(field, pageDetails);
|
||||
}
|
||||
|
||||
const isUsernameField = this.isUsernameField(field);
|
||||
if (!isUsernameField) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.isUsernameFieldForLoginForm(field, pageDetails);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided field as a password field for a login form.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
* @param pageDetails - The details of the page that the field is on.
|
||||
*/
|
||||
private isPasswordFieldForLoginForm(
|
||||
field: AutofillField,
|
||||
pageDetails: AutofillPageDetails,
|
||||
): boolean {
|
||||
// If the provided field is set with an autocomplete value of "current-password", we should assume that
|
||||
// the page developer intends for this field to be interpreted as a password field for a login form.
|
||||
if (field.autoCompleteType === "current-password") {
|
||||
return true;
|
||||
}
|
||||
|
||||
const usernameFieldsInPageDetails = pageDetails.fields.filter(this.isUsernameField);
|
||||
const passwordFieldsInPageDetails = pageDetails.fields.filter(this.isCurrentPasswordField);
|
||||
|
||||
// If a single username and a single password field exists on the page, we
|
||||
// should assume that this field is part of a login form.
|
||||
if (usernameFieldsInPageDetails.length === 1 && passwordFieldsInPageDetails.length === 1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If the field is not structured within a form, we need to identify if the field is present on
|
||||
// a page with multiple password fields. If that isn't the case, we can assume this is a login form field.
|
||||
const parentForm = pageDetails.forms[field.form];
|
||||
if (!parentForm) {
|
||||
// If no parent form is found, and multiple password fields are present, we should assume that
|
||||
// the passed field belongs to a user account creation form.
|
||||
if (passwordFieldsInPageDetails.length > 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If multiple username fields exist on the page, we should assume that
|
||||
// the provided field is part of an account creation form.
|
||||
const visibleUsernameFields = usernameFieldsInPageDetails.filter((f) => f.viewable);
|
||||
if (visibleUsernameFields.length > 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If a single username field or less is present on the page, then we can assume that the
|
||||
// provided field is for a login form. This will only be the case if the field does not
|
||||
// explicitly have its autocomplete attribute set to "off" or "false".
|
||||
return !this.autocompleteDisabledValues.has(field.autoCompleteType);
|
||||
}
|
||||
|
||||
// If the field has a form parent and there are multiple visible password fields
|
||||
// in the form, this is not a login form field
|
||||
const visiblePasswordFieldsInPageDetails = passwordFieldsInPageDetails.filter(
|
||||
(f) => f.form === field.form && f.viewable,
|
||||
);
|
||||
if (visiblePasswordFieldsInPageDetails.length > 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the form has any visible username fields, we should treat the field as part of a login form
|
||||
const visibleUsernameFields = usernameFieldsInPageDetails.filter(
|
||||
(f) => f.form === field.form && f.viewable,
|
||||
);
|
||||
if (visibleUsernameFields.length > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If the field has a form parent and no username field exists and the field has an
|
||||
// autocomplete attribute set to "off" or "false", this is not a password field
|
||||
return !this.autocompleteDisabledValues.has(field.autoCompleteType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided field as a username field for a login form.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
* @param pageDetails - The details of the page that the field is on.
|
||||
*/
|
||||
private isUsernameFieldForLoginForm(
|
||||
field: AutofillField,
|
||||
pageDetails: AutofillPageDetails,
|
||||
): boolean {
|
||||
// If the provided field is set with an autocomplete of "username", we should assume that
|
||||
// the page developer intends for this field to be interpreted as a username field.
|
||||
if (this.usernameAutocompleteValues.has(field.autoCompleteType)) {
|
||||
const newPasswordFieldsInPageDetails = pageDetails.fields.filter(this.isNewPasswordField);
|
||||
return newPasswordFieldsInPageDetails.length === 0;
|
||||
}
|
||||
|
||||
// If any keywords in the field's data indicates that this is a field for a "new" or "changed"
|
||||
// username, we should assume that this field is not for a login form.
|
||||
if (this.keywordsFoundInFieldData(field, [...this.newFieldKeywords])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the field is not explicitly set as a username field, we need to qualify
|
||||
// the field based on the other fields that are present on the page.
|
||||
const parentForm = pageDetails.forms[field.form];
|
||||
const passwordFieldsInPageDetails = pageDetails.fields.filter(this.isCurrentPasswordField);
|
||||
|
||||
// If the field is not structured within a form, we need to identify if the field is used in conjunction
|
||||
// with a password field. If that's the case, then we should assume that it is a form field element.
|
||||
if (!parentForm) {
|
||||
// If a formless field is present in a webpage with a single password field, we
|
||||
// should assume that it is part of a login workflow.
|
||||
const visiblePasswordFieldsInPageDetails = passwordFieldsInPageDetails.filter(
|
||||
(passwordField) => passwordField.viewable,
|
||||
);
|
||||
if (visiblePasswordFieldsInPageDetails.length === 1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If more than a single password field exists on the page, we should assume that the field
|
||||
// is part of an account creation form.
|
||||
if (visiblePasswordFieldsInPageDetails.length > 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If no visible fields are found on the page, but we have a single password
|
||||
// field we should assume that the field is part of a login form.
|
||||
if (passwordFieldsInPageDetails.length === 1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If the page does not contain any password fields, it might be part of a multistep login form.
|
||||
// That will only be the case if the field does not explicitly have its autocomplete attribute
|
||||
// set to "off" or "false".
|
||||
return !this.autocompleteDisabledValues.has(field.autoCompleteType);
|
||||
}
|
||||
|
||||
// If the field is structured within a form, but no password fields are present in the form,
|
||||
// we need to consider whether the field is part of a multistep login form.
|
||||
if (passwordFieldsInPageDetails.length === 0) {
|
||||
// If the field's autocomplete is set to a disabled value, we should assume that the field is
|
||||
// not part of a login form.
|
||||
if (this.autocompleteDisabledValues.has(field.autoCompleteType)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the form that contains the field has more than one visible field, we should assume
|
||||
// that the field is part of an account creation form.
|
||||
const fieldsWithinForm = pageDetails.fields.filter(
|
||||
(pageDetailsField) => pageDetailsField.form === field.form && pageDetailsField.viewable,
|
||||
);
|
||||
return fieldsWithinForm.length === 1;
|
||||
}
|
||||
|
||||
// If a single password field exists within the page details, and that password field is part of
|
||||
// the same form as the provided field, we should assume that the field is part of a login form.
|
||||
const visiblePasswordFieldsInPageDetails = passwordFieldsInPageDetails.filter(
|
||||
(passwordField) => passwordField.form === field.form && passwordField.viewable,
|
||||
);
|
||||
if (visiblePasswordFieldsInPageDetails.length === 1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If multiple visible password fields exist within the page details, we need to assume that the
|
||||
// provided field is part of an account creation form.
|
||||
if (visiblePasswordFieldsInPageDetails.length > 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If no visible password fields are found, this field might be part of a multipart form.
|
||||
// Check for an invalid autocompleteType to determine if the field is part of a login form.
|
||||
return !this.autocompleteDisabledValues.has(field.autoCompleteType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided field as a username field.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
*/
|
||||
private isUsernameField = (field: AutofillField): boolean => {
|
||||
if (
|
||||
!this.usernameFieldTypes.has(field.type) ||
|
||||
this.isExcludedFieldType(field, this.excludedAutofillLoginTypesSet)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.keywordsFoundInFieldData(field, AutoFillConstants.UsernameFieldNames);
|
||||
};
|
||||
|
||||
/**
|
||||
* Validates the provided field as a current password field.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
*/
|
||||
private isCurrentPasswordField = (field: AutofillField): boolean => {
|
||||
if (field.autoCompleteType === "new-password") {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.isPasswordField(field);
|
||||
};
|
||||
|
||||
/**
|
||||
* Validates the provided field as a new password field.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
*/
|
||||
private isNewPasswordField = (field: AutofillField): boolean => {
|
||||
if (field.autoCompleteType === "current-password") {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.isPasswordField(field);
|
||||
};
|
||||
|
||||
/**
|
||||
* Validates the provided field as a password field.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
*/
|
||||
private isPasswordField = (field: AutofillField): boolean => {
|
||||
const isInputPasswordType = field.type === "password";
|
||||
if (
|
||||
(!isInputPasswordType &&
|
||||
this.isExcludedFieldType(field, this.excludedAutofillLoginTypesSet)) ||
|
||||
this.fieldHasDisqualifyingAttributeValue(field)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return isInputPasswordType || this.isLikePasswordField(field);
|
||||
};
|
||||
|
||||
/**
|
||||
* Validates the provided field as a field to indicate if the
|
||||
* field potentially acts as a password field.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
*/
|
||||
private isLikePasswordField(field: AutofillField): boolean {
|
||||
if (field.type !== "text") {
|
||||
return false;
|
||||
}
|
||||
|
||||
const testedValues = [field.htmlID, field.htmlName, field.placeholder];
|
||||
for (let i = 0; i < testedValues.length; i++) {
|
||||
if (this.valueIsLikePassword(testedValues[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided value to indicate if the value is like a password.
|
||||
*
|
||||
* @param value - The value to validate
|
||||
*/
|
||||
private valueIsLikePassword(value: string): boolean {
|
||||
if (value == null) {
|
||||
return false;
|
||||
}
|
||||
// Removes all whitespace, _ and - characters
|
||||
const cleanedValue = value.toLowerCase().replace(/[\s_-]/g, "");
|
||||
|
||||
if (cleanedValue.indexOf("password") < 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !(this.passwordFieldExcludeListString.indexOf(cleanedValue) > -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided field to indicate if the field has a
|
||||
* disqualifying attribute that would impede autofill entirely.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
*/
|
||||
private fieldHasDisqualifyingAttributeValue(field: AutofillField): boolean {
|
||||
const checkedAttributeValues = [field.htmlID, field.htmlName, field.placeholder];
|
||||
|
||||
for (let i = 0; i < checkedAttributeValues.length; i++) {
|
||||
const checkedAttributeValue = checkedAttributeValues[i];
|
||||
const cleanedValue = checkedAttributeValue?.toLowerCase().replace(/[\s_-]/g, "");
|
||||
|
||||
if (cleanedValue && this.fieldIgnoreListString.indexOf(cleanedValue) > -1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided field to indicate if the field is excluded from autofill.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
* @param excludedTypes - The set of excluded types
|
||||
*/
|
||||
private isExcludedFieldType(field: AutofillField, excludedTypes: Set<string>): boolean {
|
||||
if (excludedTypes.has(field.type)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return this.isSearchField(field);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided field to indicate if the field is a search field.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
*/
|
||||
private isSearchField(field: AutofillField): boolean {
|
||||
const matchFieldAttributeValues = [field.type, field.htmlName, field.htmlID, field.placeholder];
|
||||
for (let attrIndex = 0; attrIndex < matchFieldAttributeValues.length; attrIndex++) {
|
||||
if (!matchFieldAttributeValues[attrIndex]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Separate camel case words and case them to lower case values
|
||||
const camelCaseSeparatedFieldAttribute = matchFieldAttributeValues[attrIndex]
|
||||
.replace(/([a-z])([A-Z])/g, "$1 $2")
|
||||
.toLowerCase();
|
||||
// Split the attribute by non-alphabetical characters to get the keywords
|
||||
const attributeKeywords = camelCaseSeparatedFieldAttribute.split(/[^a-z]/gi);
|
||||
|
||||
for (let keywordIndex = 0; keywordIndex < attributeKeywords.length; keywordIndex++) {
|
||||
if (this.searchFieldNamesSet.has(attributeKeywords[keywordIndex])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the provided field to indicate if the field has any of the provided keywords.
|
||||
*
|
||||
* @param autofillFieldData - The field data to search for keywords
|
||||
* @param keywords - The keywords to search for
|
||||
*/
|
||||
private keywordsFoundInFieldData(autofillFieldData: AutofillField, keywords: string[]) {
|
||||
const searchedString = this.getAutofillFieldDataKeywords(autofillFieldData);
|
||||
return keywords.some((keyword) => searchedString.includes(keyword));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the keywords from the provided autofill field data.
|
||||
*
|
||||
* @param autofillFieldData - The field data to search for keywords
|
||||
*/
|
||||
private getAutofillFieldDataKeywords(autofillFieldData: AutofillField) {
|
||||
if (this.autofillFieldKeywordsMap.has(autofillFieldData)) {
|
||||
return this.autofillFieldKeywordsMap.get(autofillFieldData);
|
||||
}
|
||||
|
||||
const keywordValues = [
|
||||
autofillFieldData.htmlID,
|
||||
autofillFieldData.htmlName,
|
||||
autofillFieldData.htmlClass,
|
||||
autofillFieldData.type,
|
||||
autofillFieldData.title,
|
||||
autofillFieldData.placeholder,
|
||||
autofillFieldData.autoCompleteType,
|
||||
autofillFieldData["label-data"],
|
||||
autofillFieldData["label-aria"],
|
||||
autofillFieldData["label-left"],
|
||||
autofillFieldData["label-right"],
|
||||
autofillFieldData["label-tag"],
|
||||
autofillFieldData["label-top"],
|
||||
]
|
||||
.join(",")
|
||||
.toLowerCase();
|
||||
this.autofillFieldKeywordsMap.set(autofillFieldData, keywordValues);
|
||||
|
||||
return keywordValues;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method represents the previous rudimentary approach to qualifying fields for login forms.
|
||||
*
|
||||
* @param field - The field to validate
|
||||
* @deprecated - This method will only be used when the fallback flag is set to true.
|
||||
*/
|
||||
private isFieldForLoginFormFallback(field: AutofillField): boolean {
|
||||
if (field.type === "password") {
|
||||
return true;
|
||||
}
|
||||
|
||||
return this.isUsernameField(field);
|
||||
}
|
||||
}
|
|
@ -1,6 +1,36 @@
|
|||
import { AutofillPort } from "../enums/autofill-port.enums";
|
||||
import { FillableFormFieldElement, FormFieldElement } from "../types";
|
||||
|
||||
/**
|
||||
* Polyfills the requestIdleCallback API with a setTimeout fallback.
|
||||
*
|
||||
* @param callback - The callback function to run when the browser is idle.
|
||||
* @param options - The options to pass to the requestIdleCallback function.
|
||||
*/
|
||||
export function requestIdleCallbackPolyfill(
|
||||
callback: () => void,
|
||||
options?: Record<string, any>,
|
||||
): number | NodeJS.Timeout {
|
||||
if ("requestIdleCallback" in globalThis) {
|
||||
return globalThis.requestIdleCallback(() => callback(), options);
|
||||
}
|
||||
|
||||
return globalThis.setTimeout(() => callback(), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Polyfills the cancelIdleCallback API with a clearTimeout fallback.
|
||||
*
|
||||
* @param id - The ID of the idle callback to cancel.
|
||||
*/
|
||||
export function cancelIdleCallbackPolyfill(id: NodeJS.Timeout | number) {
|
||||
if ("cancelIdleCallback" in globalThis) {
|
||||
return globalThis.cancelIdleCallback(id as number);
|
||||
}
|
||||
|
||||
return globalThis.clearTimeout(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random string of characters that formatted as a custom element name.
|
||||
*/
|
||||
|
|
|
@ -758,7 +758,6 @@ export default class MainBackground {
|
|||
this.folderApiService = new FolderApiService(this.folderService, this.apiService);
|
||||
|
||||
this.userVerificationService = new UserVerificationService(
|
||||
this.stateService,
|
||||
this.cryptoService,
|
||||
this.accountService,
|
||||
this.masterPasswordService,
|
||||
|
@ -953,7 +952,6 @@ export default class MainBackground {
|
|||
logoutCallback,
|
||||
this.stateService,
|
||||
this.authService,
|
||||
this.authRequestService,
|
||||
this.messagingService,
|
||||
this.taskSchedulerService,
|
||||
);
|
||||
|
|
|
@ -69,6 +69,7 @@ export default class RuntimeBackground {
|
|||
const messagesWithResponse = [
|
||||
"biometricUnlock",
|
||||
"getUseTreeWalkerApiForPageDetailsCollectionFeatureFlag",
|
||||
"getInlineMenuFieldQualificationFeatureFlag",
|
||||
];
|
||||
|
||||
if (messagesWithResponse.includes(msg.command)) {
|
||||
|
@ -186,6 +187,9 @@ export default class RuntimeBackground {
|
|||
FeatureFlag.UseTreeWalkerApiForPageDetailsCollection,
|
||||
);
|
||||
}
|
||||
case "getInlineMenuFieldQualificationFeatureFlag": {
|
||||
return await this.configService.getFeatureFlag(FeatureFlag.InlineMenuFieldQualification);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"manifest_version": 2,
|
||||
"name": "__MSG_extName__",
|
||||
"short_name": "__MSG_appName__",
|
||||
"version": "2024.6.0",
|
||||
"version": "2024.6.2",
|
||||
"description": "__MSG_extDesc__",
|
||||
"default_locale": "en",
|
||||
"author": "Bitwarden Inc.",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"minimum_chrome_version": "102.0",
|
||||
"name": "__MSG_extName__",
|
||||
"short_name": "__MSG_appName__",
|
||||
"version": "2024.6.0",
|
||||
"version": "2024.6.2",
|
||||
"description": "__MSG_extDesc__",
|
||||
"default_locale": "en",
|
||||
"author": "Bitwarden Inc.",
|
||||
|
|
|
@ -8,6 +8,16 @@ import {
|
|||
tdeDecryptionRequiredGuard,
|
||||
unauthGuardFn,
|
||||
} from "@bitwarden/angular/auth/guards";
|
||||
import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard";
|
||||
import {
|
||||
AnonLayoutWrapperComponent,
|
||||
AnonLayoutWrapperData,
|
||||
RegistrationFinishComponent,
|
||||
RegistrationStartComponent,
|
||||
RegistrationStartSecondaryComponent,
|
||||
RegistrationStartSecondaryComponentData,
|
||||
} from "@bitwarden/auth/angular";
|
||||
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||
|
||||
import { fido2AuthGuard } from "../auth/guards/fido2-auth.guard";
|
||||
import { AccountSwitcherComponent } from "../auth/popup/account-switching/account-switcher.component";
|
||||
|
@ -343,6 +353,45 @@ const routes: Routes = [
|
|||
canActivate: [AuthGuard],
|
||||
data: { state: "update-temp-password" },
|
||||
},
|
||||
{
|
||||
path: "",
|
||||
component: AnonLayoutWrapperComponent,
|
||||
children: [
|
||||
{
|
||||
path: "signup",
|
||||
canActivate: [canAccessFeature(FeatureFlag.EmailVerification), unauthGuardFn()],
|
||||
data: { pageTitle: "createAccount" } satisfies AnonLayoutWrapperData,
|
||||
children: [
|
||||
{
|
||||
path: "",
|
||||
component: RegistrationStartComponent,
|
||||
},
|
||||
{
|
||||
path: "",
|
||||
component: RegistrationStartSecondaryComponent,
|
||||
outlet: "secondary",
|
||||
data: {
|
||||
loginRoute: "/home",
|
||||
} satisfies RegistrationStartSecondaryComponentData,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "finish-signup",
|
||||
canActivate: [canAccessFeature(FeatureFlag.EmailVerification), unauthGuardFn()],
|
||||
data: {
|
||||
pageTitle: "setAStrongPassword",
|
||||
pageSubtitle: "finishCreatingYourAccountBySettingAPassword",
|
||||
} satisfies AnonLayoutWrapperData,
|
||||
children: [
|
||||
{
|
||||
path: "",
|
||||
component: RegistrationFinishComponent,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
...extensionRefreshSwap(AboutPageComponent, AboutPageV2Component, {
|
||||
path: "about",
|
||||
canActivate: [AuthGuard],
|
||||
|
|
|
@ -13,6 +13,7 @@ import { UsernameGenerationServiceAbstraction } from "@bitwarden/common/tools/ge
|
|||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
||||
import { AddEditCipherInfo } from "@bitwarden/common/vault/types/add-edit-cipher-info";
|
||||
import { ToastService } from "@bitwarden/components";
|
||||
|
||||
@Component({
|
||||
selector: "app-generator",
|
||||
|
@ -34,6 +35,7 @@ export class GeneratorComponent extends BaseGeneratorComponent {
|
|||
logService: LogService,
|
||||
ngZone: NgZone,
|
||||
private location: Location,
|
||||
toastService: ToastService,
|
||||
) {
|
||||
super(
|
||||
passwordGenerationService,
|
||||
|
@ -45,6 +47,7 @@ export class GeneratorComponent extends BaseGeneratorComponent {
|
|||
route,
|
||||
ngZone,
|
||||
window,
|
||||
toastService,
|
||||
);
|
||||
this.cipherService = cipherService;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryCompon
|
|||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||
import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password";
|
||||
import { ToastService } from "@bitwarden/components";
|
||||
|
||||
@Component({
|
||||
selector: "app-password-generator-history",
|
||||
|
@ -16,8 +17,9 @@ export class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHist
|
|||
platformUtilsService: PlatformUtilsService,
|
||||
i18nService: I18nService,
|
||||
private location: Location,
|
||||
toastService: ToastService,
|
||||
) {
|
||||
super(passwordGenerationService, platformUtilsService, i18nService, window);
|
||||
super(passwordGenerationService, platformUtilsService, i18nService, window, toastService);
|
||||
}
|
||||
|
||||
close() {
|
||||
|
|
|
@ -15,7 +15,7 @@ import { MessagingService } from "@bitwarden/common/platform/abstractions/messag
|
|||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||
import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction";
|
||||
import { SendService } from "@bitwarden/common/tools/send/services/send.service.abstraction";
|
||||
import { DialogService } from "@bitwarden/components";
|
||||
import { DialogService, ToastService } from "@bitwarden/components";
|
||||
|
||||
import BrowserPopupUtils from "../../../platform/popup/browser-popup-utils";
|
||||
import { BrowserStateService } from "../../../platform/services/abstractions/browser-state.service";
|
||||
|
@ -53,6 +53,7 @@ export class SendAddEditComponent extends BaseAddEditComponent {
|
|||
private filePopoutUtilsService: FilePopoutUtilsService,
|
||||
billingAccountProfileStateService: BillingAccountProfileStateService,
|
||||
accountService: AccountService,
|
||||
toastService: ToastService,
|
||||
) {
|
||||
super(
|
||||
i18nService,
|
||||
|
@ -69,6 +70,7 @@ export class SendAddEditComponent extends BaseAddEditComponent {
|
|||
formBuilder,
|
||||
billingAccountProfileStateService,
|
||||
accountService,
|
||||
toastService,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -124,7 +126,8 @@ export class SendAddEditComponent extends BaseAddEditComponent {
|
|||
|
||||
cancel() {
|
||||
// If true, the window was pop'd out on the add-send page. location.back will not work
|
||||
if ((window as any).previousPopupUrl.startsWith("/add-send")) {
|
||||
const isPopup = (window as any)?.previousPopupUrl?.startsWith("/add-send") ?? false;
|
||||
if (!isPopup) {
|
||||
// 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.router.navigate(["tabs/send"]);
|
||||
|
|
|
@ -14,7 +14,7 @@ import { SendView } from "@bitwarden/common/tools/send/models/view/send.view";
|
|||
import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction";
|
||||
import { SendService } from "@bitwarden/common/tools/send/services/send.service.abstraction";
|
||||
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
|
||||
import { DialogService } from "@bitwarden/components";
|
||||
import { DialogService, ToastService } from "@bitwarden/components";
|
||||
|
||||
import { BrowserSendComponentState } from "../../../models/browserSendComponentState";
|
||||
import BrowserPopupUtils from "../../../platform/popup/browser-popup-utils";
|
||||
|
@ -49,6 +49,7 @@ export class SendGroupingsComponent extends BaseSendComponent {
|
|||
logService: LogService,
|
||||
sendApiService: SendApiService,
|
||||
dialogService: DialogService,
|
||||
toastService: ToastService,
|
||||
) {
|
||||
super(
|
||||
sendService,
|
||||
|
@ -61,6 +62,7 @@ export class SendGroupingsComponent extends BaseSendComponent {
|
|||
logService,
|
||||
sendApiService,
|
||||
dialogService,
|
||||
toastService,
|
||||
);
|
||||
super.onSuccessfulLoad = async () => {
|
||||
this.selectAll();
|
||||
|
|
|
@ -15,7 +15,7 @@ import { SendType } from "@bitwarden/common/tools/send/enums/send-type";
|
|||
import { SendView } from "@bitwarden/common/tools/send/models/view/send.view";
|
||||
import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction";
|
||||
import { SendService } from "@bitwarden/common/tools/send/services/send.service.abstraction";
|
||||
import { DialogService } from "@bitwarden/components";
|
||||
import { DialogService, ToastService } from "@bitwarden/components";
|
||||
|
||||
import { BrowserComponentState } from "../../../models/browserComponentState";
|
||||
import BrowserPopupUtils from "../../../platform/popup/browser-popup-utils";
|
||||
|
@ -51,6 +51,7 @@ export class SendTypeComponent extends BaseSendComponent {
|
|||
logService: LogService,
|
||||
sendApiService: SendApiService,
|
||||
dialogService: DialogService,
|
||||
toastService: ToastService,
|
||||
) {
|
||||
super(
|
||||
sendService,
|
||||
|
@ -63,6 +64,7 @@ export class SendTypeComponent extends BaseSendComponent {
|
|||
logService,
|
||||
sendApiService,
|
||||
dialogService,
|
||||
toastService,
|
||||
);
|
||||
super.onSuccessfulLoad = async () => {
|
||||
this.selectType(this.type);
|
||||
|
|
|
@ -57,12 +57,12 @@
|
|||
>
|
||||
<div class="vault-select-org-text-container">
|
||||
<i
|
||||
*ngIf="organization.planProductType !== 1"
|
||||
*ngIf="organization.productTierType !== 1"
|
||||
class="bwi bwi-fw bwi-business vault-select-prefix-icon"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
*ngIf="organization.planProductType === 1"
|
||||
*ngIf="organization.productTierType === 1"
|
||||
class="bwi bwi-fw bwi-family vault-select-prefix-icon"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
|
|
|
@ -5,7 +5,7 @@ import { BehaviorSubject } from "rxjs";
|
|||
import { SearchService } from "@bitwarden/common/abstractions/search.service";
|
||||
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 { ProductTierType } from "@bitwarden/common/billing/enums";
|
||||
import { ObservableTracker } from "@bitwarden/common/spec";
|
||||
import { CipherId } from "@bitwarden/common/types/guid";
|
||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
|
@ -78,7 +78,7 @@ describe("VaultPopupItemsService", () => {
|
|||
mockOrg = {
|
||||
id: "org1",
|
||||
name: "Organization 1",
|
||||
planProductType: ProductType.Enterprise,
|
||||
productTierType: ProductTierType.Enterprise,
|
||||
} as Organization;
|
||||
|
||||
mockCollections = [
|
||||
|
|
|
@ -6,7 +6,7 @@ import { OrganizationService } from "@bitwarden/common/admin-console/abstraction
|
|||
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
|
||||
import { PolicyType } from "@bitwarden/common/admin-console/enums";
|
||||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||
import { ProductType } from "@bitwarden/common/enums";
|
||||
import { ProductTierType } from "@bitwarden/common/billing/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";
|
||||
|
@ -206,7 +206,7 @@ describe("VaultPopupListFiltersService", () => {
|
|||
name: "family org",
|
||||
id: "1234-3323-23223",
|
||||
enabled: true,
|
||||
planProductType: ProductType.Families,
|
||||
productTierType: ProductTierType.Families,
|
||||
},
|
||||
] as Organization[];
|
||||
|
||||
|
@ -224,7 +224,7 @@ describe("VaultPopupListFiltersService", () => {
|
|||
name: "free org",
|
||||
id: "1234-3323-23223",
|
||||
enabled: true,
|
||||
planProductType: ProductType.Free,
|
||||
productTierType: ProductTierType.Free,
|
||||
},
|
||||
] as Organization[];
|
||||
|
||||
|
@ -242,7 +242,7 @@ describe("VaultPopupListFiltersService", () => {
|
|||
name: "free org",
|
||||
id: "1234-3323-23223",
|
||||
enabled: false,
|
||||
planProductType: ProductType.Free,
|
||||
productTierType: ProductTierType.Free,
|
||||
},
|
||||
] as Organization[];
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@ import { Injectable } from "@angular/core";
|
|||
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
||||
import { FormBuilder } from "@angular/forms";
|
||||
import {
|
||||
Observable,
|
||||
combineLatest,
|
||||
distinctUntilChanged,
|
||||
map,
|
||||
Observable,
|
||||
startWith,
|
||||
switchMap,
|
||||
tap,
|
||||
|
@ -16,7 +16,7 @@ import { OrganizationService } from "@bitwarden/common/admin-console/abstraction
|
|||
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
|
||||
import { PolicyType } from "@bitwarden/common/admin-console/enums";
|
||||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||
import { ProductType } from "@bitwarden/common/enums";
|
||||
import { ProductTierType } from "@bitwarden/common/billing/enums";
|
||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
|
@ -104,6 +104,11 @@ export class VaultPopupListFiltersService {
|
|||
map(
|
||||
(filters) => (ciphers: CipherView[]) =>
|
||||
ciphers.filter((cipher) => {
|
||||
// Vault popup lists never shows deleted ciphers
|
||||
if (cipher.isDeleted) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (filters.cipherType !== null && cipher.type !== filters.cipherType) {
|
||||
return false;
|
||||
}
|
||||
|
@ -211,8 +216,8 @@ export class VaultPopupListFiltersService {
|
|||
// Show a warning icon if the organization is deactivated
|
||||
icon = "bwi-exclamation-triangle tw-text-danger";
|
||||
} else if (
|
||||
org.planProductType === ProductType.Families ||
|
||||
org.planProductType === ProductType.Free
|
||||
org.productTierType === ProductTierType.Families ||
|
||||
org.productTierType === ProductTierType.Free
|
||||
) {
|
||||
// Show a family icon if the organization is a family or free org
|
||||
icon = "bwi-family";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||
import { ProductType } from "@bitwarden/common/enums";
|
||||
import { ProductTierType } from "@bitwarden/common/billing/enums";
|
||||
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
||||
import { CollectionView } from "@bitwarden/common/vault/models/view/collection.view";
|
||||
|
||||
|
@ -26,13 +26,13 @@ export class PopupCipherView extends CipherView {
|
|||
* Get the bwi icon for the cipher according to the organization type.
|
||||
*/
|
||||
get orgIcon(): "bwi-family" | "bwi-business" | null {
|
||||
switch (this.organization?.planProductType) {
|
||||
case ProductType.Free:
|
||||
case ProductType.Families:
|
||||
switch (this.organization?.productTierType) {
|
||||
case ProductTierType.Free:
|
||||
case ProductTierType.Families:
|
||||
return "bwi-family";
|
||||
case ProductType.Teams:
|
||||
case ProductType.Enterprise:
|
||||
case ProductType.TeamsStarter:
|
||||
case ProductTierType.Teams:
|
||||
case ProductTierType.Enterprise:
|
||||
case ProductTierType.TeamsStarter:
|
||||
return "bwi-business";
|
||||
default:
|
||||
return null;
|
||||
|
|
|
@ -118,7 +118,7 @@
|
|||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>Bitwarden Password Manager</value>
|
||||
<value>Bitwarden 비밀번호 관리자</value>
|
||||
</data>
|
||||
<data name="Summary" xml:space="preserve">
|
||||
<value>집에서도, 직장에서도, 이동 중에도 Bitwarden은 비밀번호, 패스키, 민감 정보를 쉽게 보호합니다.</value>
|
||||
|
|
|
@ -124,48 +124,48 @@
|
|||
<value>Вдома, на роботі чи в дорозі, Bitwarden захищає ваші паролі, ключі доступу та конфіденційну інформацію.</value>
|
||||
</data>
|
||||
<data name="Description" xml:space="preserve">
|
||||
<value>Визнаний найкращим менеджером паролів за версією PCMag, WIRED, The Verge, CNET, G2 та інших!
|
||||
<value>Визнаний найкращим менеджером паролів виданнями PCMag, WIRED, The Verge, CNET, G2 та іншими!
|
||||
|
||||
ЗАХИСТІТЬ СВОЄ ЦИФРОВЕ ЖИТТЯ
|
||||
Убезпечте своє цифрове життя та захистіться від витоку даних, створивши та зберігши унікальні, надійні паролі для кожного облікового запису. Зберігайте всі дані в наскрізному зашифрованому сховищі паролів, доступ до якого маєте лише ви.
|
||||
Убезпечте своє цифрове життя та захистіться від витоків даних, генеруючи та зберігаючи унікальні надійні паролі для кожного облікового запису. Зберігайте все в наскрізно зашифрованому сховищі паролів, доступ до якого маєте тільки ви.
|
||||
|
||||
ОТРИМУВАТИ ДОСТУП ДО СВОЇХ ДАНИХ БУДЬ-ДЕ, БУДЬ-КОЛИ, БУДЬ НА ЯКОМУ ПРИСТРОЇ
|
||||
Легко керуйте, зберігайте, захищайте та діліться необмеженою кількістю паролів на необмеженій кількості пристроїв без обмежень.
|
||||
ДОСТУП ДО ДАНИХ БУДЬ-ДЕ, БУДЬ-КОЛИ, НА БУДЬ-ЯКОМУ ПРИСТРОЇ
|
||||
Легко керуйте, зберігайте, захищайте та діліться необмеженою кількістю паролів на необмеженій кількості пристроїв.
|
||||
|
||||
КОЖЕН ПОВИНЕН МАТИ ІНСТРУМЕНТИ, ЩОБ ЗАЛИШАТИСЯ В БЕЗПЕЦІ В ІНТЕРНЕТІ
|
||||
Користуйтеся Bitwarden безкоштовно, без реклами і без продажу даних. Bitwarden вважає, що кожен повинен мати можливість залишатися в безпеці в Інтернеті. Преміум-плани пропонують доступ до розширених функцій.
|
||||
КОЖЕН ПОВИНЕН МАТИ ІНСТРУМЕНТИ ДЛЯ БЕЗПЕКИ В ІНТЕРНЕТІ
|
||||
Використовуйте Bitwarden безплатно без реклами або продажу даних. Bitwarden вважає, що кожен повинен мати можливість залишатися в безпеці в Інтернеті. Завдяки тарифним планам Преміум можна отримати доступ до розширених можливостей.
|
||||
|
||||
РОЗШИРЮЙТЕ МОЖЛИВОСТІ СВОЇХ КОМАНД ЗА ДОПОМОГОЮ BITWARDEN
|
||||
Плани для Команд та Підприємства містять професійні бізнес-функції. Деякі приклади включають інтеграцію SSO, самостійний хостинг, інтеграцію каталогів і забезпечення SCIM, глобальні політики, доступ до API, журнали подій і багато іншого.
|
||||
РОЗШИРТЕ МОЖЛИВОСТІ СВОЇХ КОМАНД ЗА ДОПОМОГОЮ BITWARDEN
|
||||
Плани для команд і компаній мають професійні бізнес-функції. Вони передбачають інтеграцію єдиного входу (SSO), власне розміщення, інтеграцію каталогів та забезпечення SCIM, глобальні політики, доступ до API, журнали подій тощо.
|
||||
|
||||
Використовуйте Bitwarden, щоб захистити своїх співробітників і ділитися конфіденційною інформацією з колегами.
|
||||
Використовуйте Bitwarden для захисту персоналу та обміну конфіденційною інформацією з колегами.
|
||||
|
||||
|
||||
Більше причин вибрати Bitwarden:
|
||||
Інші причини для вибору Bitwarden:
|
||||
|
||||
Шифрування світового класу
|
||||
Паролі захищені вдосконаленим наскрізним шифруванням (біт AES-256, солоний хештег і PBKDF2 SHA-256), тому ваші дані залишаються надійно захищеними та конфіденційними.
|
||||
Паролі захищаються розширеним наскрізним шифруванням (AES-256, сіллю хешування і PBKDF2 SHA-256), тому ваші дані завжди зберігаються приватно і в безпеці.
|
||||
|
||||
Аудит третьої сторони
|
||||
Bitwarden регулярно проводить комплексні сторонні аудити безпеки з відомими компаніями, що займаються безпекою. Ці щорічні аудити включають оцінку вихідного коду та тестування на проникнення на всіх IP-адресах, серверах і веб-додатках Bitwarden.
|
||||
Сторонні аудити
|
||||
Bitwarden регулярно проводить комплексні аудити безпеки із залученням третіх сторін – відомих компаній у сфері безпеки. Під час цих щорічних аудитів проводиться оцінка програмного коду і тестування на проникнення через IP-адреси Bitwarden, сервери та вебпрограми.
|
||||
|
||||
Розширений 2FA
|
||||
Захистіть свій вхід за допомогою стороннього автентифікатора, кодів, надісланих електронною поштою, або облікових даних FIDO2 WebAuthn, наприклад, апаратного ключа безпеки або пароля.
|
||||
Розширена 2FA
|
||||
Захистіть свої дані входу за допомогою стороннього автентифікатора, кодів, що надсилаються електронною поштою, або облікових даних FIDO2 WebAuthn, як-от апаратний ключ безпеки або ключ доступу.
|
||||
|
||||
Bitwarden Send
|
||||
Передавайте дані безпосередньо іншим, зберігаючи при цьому наскрізну зашифровану безпеку та обмежуючи вразливість.
|
||||
Відправлення Bitwarden
|
||||
Передавайте дані безпосередньо іншим користувачам, зберігаючи наскрізне шифрування та обмежуючи їх викриття.
|
||||
|
||||
Вбудований генератор
|
||||
Створюйте довгі, складні та відмінні паролі та унікальні імена користувачів для кожного сайту, який ви відвідуєте. Інтеграція з провайдерами псевдонімів електронної пошти для додаткової конфіденційності.
|
||||
Створюйте довгі, складні та чіткі паролі, а також унікальні імена користувачів для кожного сайту, який ви відвідуєте. Користуйтеся інтеграцією з провайдерами псевдонімів електронної пошти для забезпечення додаткової приватності.
|
||||
|
||||
Глобальні переклади
|
||||
Переклади Bitwarden існують для більш ніж 60 мов, перекладені світовою спільнотою за допомогою Crowdin.
|
||||
Переклад різними мовами
|
||||
Bitwarden перекладено понад 60 мовами завдяки зусиллям нашої світової спільноти на Crowdin.
|
||||
|
||||
Крос-платформні додатки
|
||||
Захищайте конфіденційні дані у своєму сховищі Bitwarden Vault та діліться ними з будь-якого браузера, мобільного пристрою, настільної операційної системи тощо.
|
||||
Програми для різних платформ
|
||||
Захищайте та діліться конфіденційними даними в межах свого сховища Bitwarden з будь-якого браузера, мобільного пристрою або комп'ютерної ОС, а також інших можливостей.
|
||||
|
||||
Bitwarden захищає більше, ніж просто паролі
|
||||
Наскрізні рішення для управління зашифрованими обліковими даними від Bitwarden дозволяють організаціям захистити все, включаючи секрети розробників і досвід роботи з ключами. Відвідайте Bitwarden.com, щоб дізнатися більше про Bitwarden Secrets Manager і Bitwarden Passwordless.dev!
|
||||
Bitwarden захищає не лише паролі
|
||||
Комплексні рішення для керування наскрізно зашифрованими обліковими даними від Bitwarden дають змогу організаціям захищати все, включно з секретами розробників та ключами доступу. Відвідайте Bitwarden.com, щоб дізнатися більше про Менеджер секретів Bitwarden і Bitwarden Passwordless.dev!
|
||||
</value>
|
||||
</data>
|
||||
<data name="AssetTitle" xml:space="preserve">
|
||||
|
|
|
@ -4,6 +4,7 @@ const config = require("../../libs/components/tailwind.config.base");
|
|||
config.content = [
|
||||
"./src/**/*.{html,ts}",
|
||||
"../../libs/components/src/**/*.{html,ts}",
|
||||
"../../libs/auth/src/**/*.{html,ts}",
|
||||
"../../libs/angular/src/**/*.{html,ts}",
|
||||
];
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue