Merge branch 'master' into auth/pm-3797/emergency-access-refactor

This commit is contained in:
Jacob Fink 2023-10-16 12:48:11 -04:00
commit ee677eaffe
422 changed files with 10697 additions and 1589 deletions

View File

@ -179,6 +179,23 @@
"rules": {
"no-restricted-imports": ["error", { "patterns": ["@bitwarden/vault/*", "src/**/*"] }]
}
},
{
"files": ["apps/browser/src/**/*.ts", "libs/**/*.ts"],
"excludedFiles": "apps/browser/src/autofill/{content,notification}/**/*.ts",
"rules": {
"no-restricted-syntax": [
"error",
{
"message": "Using addListener in the browser popup produces a memory leak in Safari, use `BrowserApi.messageListener` instead",
"selector": "CallExpression > [object.object.object.name='chrome'][object.object.property.name='runtime'][object.property.name='onMessage'][property.name='addListener']"
},
{
"message": "Using addListener in the browser popup produces a memory leak in Safari, use `BrowserApi.storageChangeListener` instead",
"selector": "CallExpression > [object.object.object.name='chrome'][object.object.property.name='storage'][object.property.name='onChanged'][property.name='addListener']"
}
]
}
}
]
}

View File

@ -23,7 +23,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "brew-bump-workflow-pat"

View File

@ -23,7 +23,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "brew-bump-workflow-pat"

View File

@ -58,7 +58,11 @@ jobs:
outputs:
repo_url: ${{ steps.gen_vars.outputs.repo_url }}
adj_build_number: ${{ steps.gen_vars.outputs.adj_build_number }}
node_version: ${{ steps.retrieve-node-version.outputs.node_version }}
steps:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- name: Get Package Version
id: gen_vars
run: |
@ -68,6 +72,14 @@ jobs:
echo "repo_url=$repo_url" >> $GITHUB_OUTPUT
echo "adj_build_number=$adj_build_num" >> $GITHUB_OUTPUT
- name: Get Node Version
id: retrieve-node-version
working-directory: ./
run: |
NODE_NVMRC=$(cat .nvmrc)
NODE_VERSION=${NODE_NVMRC/v/''}
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
locales-test:
name: Locales Test
@ -114,6 +126,7 @@ jobs:
- locales-test
env:
_BUILD_NUMBER: ${{ needs.setup.outputs.adj_build_number }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
steps:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
@ -123,7 +136,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Install node-gyp
run: |
@ -251,6 +264,7 @@ jobs:
- locales-test
env:
_BUILD_NUMBER: ${{ needs.setup.outputs.adj_build_number }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
steps:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
@ -260,7 +274,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Print environment
run: |
@ -361,7 +375,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "crowdin-api-token"
@ -423,7 +437,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
if: failure()
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "devops-alerts-slack-webhook-url"

View File

@ -53,17 +53,26 @@ jobs:
name: Setup
runs-on: ubuntu-22.04
outputs:
package_version: ${{ steps.retrieve-version.outputs.package_version }}
package_version: ${{ steps.retrieve-package-version.outputs.package_version }}
node_version: ${{ steps.retrieve-node-version.outputs.node_version }}
steps:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- name: Get Package Version
id: retrieve-version
id: retrieve-package-version
run: |
PKG_VERSION=$(jq -r .version package.json)
echo "package_version=$PKG_VERSION" >> $GITHUB_OUTPUT
- name: Get Node Version
id: retrieve-node-version
working-directory: ./
run: |
NODE_NVMRC=$(cat .nvmrc)
NODE_VERSION=${NODE_NVMRC/v/''}
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
cli:
name: Build CLI ${{ matrix.os }}
@ -75,6 +84,7 @@ jobs:
- setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
_WIN_PKG_FETCH_VERSION: 18.5.0
_WIN_PKG_VERSION: 3.4
steps:
@ -92,7 +102,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Install node-gyp
run: |
@ -149,6 +159,7 @@ jobs:
- setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
_WIN_PKG_FETCH_VERSION: 18.5.0
_WIN_PKG_VERSION: 3.4
steps:
@ -166,7 +177,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Install node-gyp
run: |
@ -404,7 +415,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
if: failure()
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "devops-alerts-slack-webhook-url"

View File

@ -78,6 +78,7 @@ jobs:
build_number: ${{ steps.increment-version.outputs.build_number }}
rc_branch_exists: ${{ steps.branch-check.outputs.rc_branch_exists }}
hotfix_branch_exists: ${{ steps.branch-check.outputs.hotfix_branch_exists }}
node_version: ${{ steps.retrieve-node-version.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -130,6 +131,13 @@ jobs:
echo "hotfix_branch_exists=0" >> $GITHUB_OUTPUT
fi
- name: Get Node Version
id: retrieve-node-version
working-directory: ./
run: |
NODE_NVMRC=$(cat .nvmrc)
NODE_VERSION=${NODE_NVMRC/v/''}
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
linux:
name: Linux Build
@ -138,6 +146,7 @@ jobs:
- setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -150,7 +159,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -257,6 +266,7 @@ jobs:
working-directory: apps/desktop
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
steps:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
@ -266,7 +276,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
@ -277,7 +287,7 @@ jobs:
node-gyp install $(node -v)
- name: Install AST
uses: bitwarden/gh-actions/install-ast@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/install-ast@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
- name: Set up environmentF
run: choco install checksum --no-progress
@ -302,7 +312,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "code-signing-vault-url,
@ -467,6 +477,7 @@ jobs:
- setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -479,7 +490,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -619,6 +630,7 @@ jobs:
- setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -631,7 +643,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -816,6 +828,7 @@ jobs:
- setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -828,7 +841,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -1005,6 +1018,7 @@ jobs:
- setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -1017,7 +1031,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -1190,7 +1204,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "crowdin-api-token"
@ -1269,7 +1283,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
if: failure()
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "devops-alerts-slack-webhook-url"

View File

@ -57,6 +57,7 @@ jobs:
runs-on: ubuntu-22.04
outputs:
version: ${{ steps.version.outputs.value }}
node_version: ${{ steps.retrieve-node-version.outputs.node_version }}
steps:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
@ -65,12 +66,20 @@ jobs:
id: version
run: echo "value=${GITHUB_SHA:0:7}" >> $GITHUB_OUTPUT
- name: Get Node Version
id: retrieve-node-version
run: |
NODE_NVMRC=$(cat .nvmrc)
NODE_VERSION=${NODE_NVMRC/v/''}
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
build-artifacts:
name: Build artifacts
runs-on: ubuntu-22.04
needs: setup
env:
_VERSION: ${{ needs.setup.outputs.version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
strategy:
matrix:
include:
@ -98,7 +107,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: "16"
node-version: ${{ env._NODE_VERSION }}
- name: Print environment
run: |
@ -188,7 +197,7 @@ jobs:
- name: Retrieve github PAT secrets
id: retrieve-secret-pat
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
@ -264,7 +273,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "crowdin-api-token"
@ -325,7 +334,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
if: failure()
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "devops-alerts-slack-webhook-url"

View File

@ -12,16 +12,23 @@ jobs:
runs-on: ubuntu-20.04
steps:
- name: Set up Node
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with:
node-version: "16"
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
with:
fetch-depth: 0
- name: Get Node Version
id: retrieve-node-version
run: |
NODE_NVMRC=$(cat .nvmrc)
NODE_VERSION=${NODE_NVMRC/v/''}
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
- name: Set up Node
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with:
node-version: ${{ steps.retrieve-node-version.outputs.node_version }}
- name: Cache npm
id: npm-cache
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
@ -31,7 +38,7 @@ jobs:
- name: Install Node dependencies
run: npm ci
# Manual build the storybook to resolve a chromatic/storybook bug related to TurboSnap
- name: Build Storybook
run: npm run build-storybook:ci

View File

@ -32,13 +32,13 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase"
- name: Download translations
uses: bitwarden/gh-actions/crowdin@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/crowdin@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}

View File

@ -24,13 +24,13 @@ jobs:
- name: Retrieve Storage Account connection string
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: webvault-westeurope-prod
secrets: "sa-bitwarden-web-vault-dev-key-temp"
- name: Download latest cloud asset
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-web.yml
path: apps/web

View File

@ -24,13 +24,13 @@ jobs:
- name: Retrieve Storage Account connection string
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: webvaulteu-westeurope-qa
secrets: "sa-bitwarden-web-vault-dev-key-temp"
- name: Download latest cloud asset
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-web.yml
path: apps/web

View File

@ -67,7 +67,7 @@ jobs:
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- name: Download latest cloud asset
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-web.yml
path: apps/web

View File

@ -38,12 +38,19 @@ jobs:
> tmp.txt
diff <(sort .github/whitelist-capital-letters.txt) <(sort tmp.txt)
- name: Get Node Version
id: retrieve-node-version
run: |
NODE_NVMRC=$(cat .nvmrc)
NODE_VERSION=${NODE_NVMRC/v/''}
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
- name: Set up Node
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ steps.retrieve-node-version.outputs.node_version }}
- name: Run linter
run: |

View File

@ -41,7 +41,7 @@ jobs:
- name: Check Release Version
id: version
uses: bitwarden/gh-actions/release-version-check@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/release-version-check@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
release-type: ${{ github.event.inputs.release_type }}
project-type: ts
@ -103,7 +103,7 @@ jobs:
- name: Download latest Release build artifacts
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-browser.yml
workflow_conclusion: success
@ -116,7 +116,7 @@ jobs:
- name: Dry Run - Download latest master build artifacts
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-browser.yml
workflow_conclusion: success

View File

@ -57,7 +57,7 @@ jobs:
- name: Check Release Version
id: version
uses: bitwarden/gh-actions/release-version-check@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/release-version-check@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
release-type: ${{ github.event.inputs.release_type }}
project-type: ts
@ -78,7 +78,7 @@ jobs:
- name: Download all Release artifacts
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-cli.yml
path: apps/cli
@ -87,7 +87,7 @@ jobs:
- name: Dry Run - Download all artifacts
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-cli.yml
path: apps/cli
@ -150,19 +150,17 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "snapcraft-store-token"
- name: Install Snap
uses: samuelmeuli/action-snapcraft@d33c176a9b784876d966f80fb1b461808edc0641 # v2.1.1
with:
snapcraft_token: ${{ steps.retrieve-secrets.outputs.snapcraft-store-token }}
- name: Download artifacts
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-cli.yml
path: apps/cli
@ -172,7 +170,7 @@ jobs:
- name: Dry Run - Download artifacts
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-cli.yml
path: apps/cli
@ -185,7 +183,7 @@ jobs:
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ steps.retrieve-secrets.outputs.snapcraft-store-token }}
run: |
snapcraft push bw_${{ env._PKG_VERSION }}_amd64.snap --release stable
snapcraft upload bw_${{ env._PKG_VERSION }}_amd64.snap --release stable
snapcraft logout
choco:
@ -206,7 +204,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "cli-choco-api-key"
@ -222,7 +220,7 @@ jobs:
- name: Download artifacts
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-cli.yml
path: apps/cli/dist
@ -232,7 +230,7 @@ jobs:
- name: Dry Run - Download artifacts
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-cli.yml
path: apps/cli/dist
@ -265,14 +263,14 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "npm-api-key"
- name: Download artifacts
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-cli.yml
path: apps/cli/build
@ -282,7 +280,7 @@ jobs:
- name: Dry Run - Download artifacts
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-cli.yml
path: apps/cli/build

View File

@ -21,6 +21,7 @@ jobs:
release-channel: ${{ steps.release-channel.outputs.channel }}
branch-name: ${{ steps.branch.outputs.branch-name }}
build_number: ${{ steps.increment-version.outputs.build_number }}
node_version: ${{ steps.retrieve-node-version.outputs.node_version }}
steps:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
@ -47,7 +48,7 @@ jobs:
- name: Check Release Version
id: version
uses: bitwarden/gh-actions/release-version-check@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/release-version-check@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
release-type: 'Initial Release'
project-type: ts
@ -104,12 +105,20 @@ jobs:
echo "branch-name=$branch_name" >> $GITHUB_OUTPUT
- name: Get Node Version
id: retrieve-node-version
run: |
NODE_NVMRC=$(cat .nvmrc)
NODE_VERSION=${NODE_NVMRC/v/''}
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
linux:
name: Linux Build
runs-on: ubuntu-20.04
needs: setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.release-version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -124,7 +133,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -209,6 +218,7 @@ jobs:
working-directory: apps/desktop
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.release-version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
steps:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
@ -220,7 +230,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
@ -231,7 +241,7 @@ jobs:
node-gyp install $(node -v)
- name: Install AST
uses: bitwarden/gh-actions/install-ast@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/install-ast@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
- name: Set up environment
run: choco install checksum --no-progress
@ -249,7 +259,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "code-signing-vault-url,
@ -401,6 +411,7 @@ jobs:
needs: setup
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.release-version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -415,7 +426,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -530,6 +541,7 @@ jobs:
- macos-build
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.release-version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -544,7 +556,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -732,6 +744,7 @@ jobs:
- macos-build
env:
_PACKAGE_VERSION: ${{ needs.setup.outputs.release-version }}
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
defaults:
run:
working-directory: apps/desktop
@ -746,7 +759,7 @@ jobs:
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ env._NODE_VERSION }}
- name: Set Node options
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
@ -932,7 +945,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "aws-electron-access-id,

View File

@ -67,7 +67,7 @@ jobs:
- name: Check Release Version
id: version
uses: bitwarden/gh-actions/release-version-check@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/release-version-check@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
release-type: ${{ inputs.release_type }}
project-type: ts
@ -110,7 +110,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "aws-electron-access-id,
@ -123,7 +123,7 @@ jobs:
- name: Download all artifacts
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-desktop.yml
workflow_conclusion: success
@ -132,7 +132,7 @@ jobs:
- name: Dry Run - Download all artifacts
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-desktop.yml
workflow_conclusion: success
@ -185,7 +185,7 @@ jobs:
--endpoint-url https://${CF_ACCOUNT}.r2.cloudflarestorage.com
- name: Get checksum files
uses: bitwarden/gh-actions/get-checksum@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-checksum@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
packages_dir: "apps/desktop/artifacts"
file_path: "apps/desktop/artifacts/sha256-checksums.txt"
@ -263,15 +263,13 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "snapcraft-store-token"
- name: Install Snap
uses: samuelmeuli/action-snapcraft@d33c176a9b784876d966f80fb1b461808edc0641 # v2.1.1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ steps.retrieve-secrets.outputs.snapcraft-store-token }}
- name: Setup
run: mkdir dist
@ -279,7 +277,7 @@ jobs:
- name: Download Snap artifact
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-desktop.yml
workflow_conclusion: success
@ -289,7 +287,7 @@ jobs:
- name: Dry Run - Download Snap artifact
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-desktop.yml
workflow_conclusion: success
@ -302,8 +300,8 @@ jobs:
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ steps.retrieve-secrets.outputs.snapcraft-store-token }}
run: |
/snap/bin/snapcraft upload bitwarden_${{ env._PKG_VERSION }}_amd64.snap --release stable
/snap/bin/snapcraft logout
snapcraft upload bitwarden_${{ env._PKG_VERSION }}_amd64.snap --release stable
snapcraft logout
working-directory: apps/desktop/dist
choco:
@ -329,7 +327,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "cli-choco-api-key"
@ -347,7 +345,7 @@ jobs:
- name: Download choco artifact
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-desktop.yml
workflow_conclusion: success
@ -357,7 +355,7 @@ jobs:
- name: Dry Run - Download choco artifact
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-desktop.yml
workflow_conclusion: success

View File

@ -41,7 +41,7 @@ jobs:
- name: Check Release Version
id: version
uses: bitwarden/gh-actions/release-version-check@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/release-version-check@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
release-type: ${{ github.event.inputs.release_type }}
project-type: ts
@ -130,7 +130,7 @@ jobs:
- name: Retrieve bot secrets
id: retrieve-bot-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: bitwarden-ci
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
@ -144,7 +144,7 @@ jobs:
- name: Download latest cloud asset
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-web.yml
path: assets
@ -154,7 +154,7 @@ jobs:
- name: Dry Run - Download latest cloud asset
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-web.yml
path: assets
@ -227,7 +227,7 @@ jobs:
- name: Download latest build artifacts
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-web.yml
path: apps/web/artifacts
@ -238,7 +238,7 @@ jobs:
- name: Dry Run - Download latest build artifacts
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/download-artifacts@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
workflow: build-web.yml
path: apps/web/artifacts

View File

@ -26,7 +26,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "aws-electron-access-id,

View File

@ -27,12 +27,19 @@ jobs:
- name: Checkout repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- name: Get Node Version
id: retrieve-node-version
run: |
NODE_NVMRC=$(cat .nvmrc)
NODE_VERSION=${NODE_NVMRC/v/''}
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
- name: Set up Node
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
with:
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
node-version: '18'
node-version: ${{ steps.retrieve-node-version.outputs.node_version }}
- name: Print environment
run: |

View File

@ -54,7 +54,7 @@ jobs:
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/get-keyvault-secrets@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
keyvault: "bitwarden-ci"
secrets: "github-gpg-private-key, github-gpg-private-key-passphrase"
@ -125,14 +125,14 @@ jobs:
- name: Bump Browser Version - Manifest
if: ${{ inputs.bump_browser == true }}
uses: bitwarden/gh-actions/version-bump@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/version-bump@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
version: ${{ inputs.version_number }}
file_path: "apps/browser/src/manifest.json"
- name: Bump Browser Version - Manifest v3
if: ${{ inputs.bump_browser == true }}
uses: bitwarden/gh-actions/version-bump@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/version-bump@f1125802b1ccae8c601d7c4f61ce39ea254b10c8
with:
version: ${{ inputs.version_number }}
file_path: "apps/browser/src/manifest.v3.json"

View File

@ -8,4 +8,4 @@ on:
jobs:
call-workflow:
uses: bitwarden/gh-actions/.github/workflows/workflow-linter.yml@62d1bf7c3e31c458cc7236b1e69a475d235cd78f
uses: bitwarden/gh-actions/.github/workflows/workflow-linter.yml@f1125802b1ccae8c601d7c4f61ce39ea254b10c8

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "التعبئة التلقائية"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "إنشاء كلمة مرور (تم النسخ)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "لا توجد تسجيلات دخول مطابقة."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "افتح خزنتك"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Avto-doldurma"
},
"autoFillLogin": {
"message": "Giriş avto-doldurma"
},
"autoFillCard": {
"message": "Kart avto-doldurma"
},
"autoFillIdentity": {
"message": "Kimlik avto-doldurma"
},
"generatePasswordCopied": {
"message": "Parol yarat (kopyalandı)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Uyğun gələn hesab yoxdur."
},
"noCards": {
"message": "Kart yoxdur"
},
"noIdentities": {
"message": "Kimlik yoxdur"
},
"addLoginMenu": {
"message": "Giriş əlavə et"
},
"addCardMenu": {
"message": "Kart əlavə et"
},
"addIdentityMenu": {
"message": "Kimlik əlavə et"
},
"unlockVaultMenu": {
"message": "Anbarın kilidini açın"
},
@ -671,7 +695,7 @@
"description": "'Solarized' is a noun and the name of a color scheme. It should not be translated."
},
"exportVault": {
"message": "Anbarı ixrac et"
"message": "Anbarı xaricə köçür"
},
"fileFormat": {
"message": "Fayl formatı"
@ -681,19 +705,19 @@
"description": "WARNING (should stay in capitalized letters if the language permits)"
},
"confirmVaultExport": {
"message": "Anbarın ixracını təsdiqləyin"
"message": "Anbarın xaricə köçürülməsini təsdiqləyin"
},
"exportWarningDesc": {
"message": "Bu ixrac faylındakı anbar verilənləriniz şifrələnməmiş formatdadır. İxrac edilən faylı, güvənli olmayan kanallar üzərində saxlamamalı və ya göndərməməlisiniz (e-poçt kimi). Bu faylı işiniz bitdikdən sonra dərhal silin."
"message": "Xaricə köçürdüyünüz bu fayldakı datanız şifrələnməmiş formatdadır. Bu faylı güvənli olmayan kanallar (e-poçt kimi) üzərində saxlamamalı və ya göndərməməlisiniz. İşiniz bitdikdən sonra faylı dərhal silin."
},
"encExportKeyWarningDesc": {
"message": "Bu ixrac faylı, hesabınızın şifrələmə açarını istifadə edərək verilənlərinizi şifrələyir. Hesabınızın şifrələmə açarını döndərsəniz, bu ixrac faylının şifrəsini aça bilməyəcəyiniz üçün yenidən ixrac etməli olacaqsınız."
"message": "Xaricə köçürdüyünüz bu fayldakı data, hesabınızın şifrələmə açarı istifadə edilərək şifrələnir. Hesabınızın şifrələmə açarını dəyişdirsəniz, bu faylın şifrəsini aça bilməyəcəksiniz və onu yenidən xaricə köçürməli olacaqsınız."
},
"encExportAccountWarningDesc": {
"message": "Hesab şifrələmə açarları, hər Bitwarden istifadəçi hesabı üçün unikaldır, buna görə də şifrələnmiş bir ixracı, fərqli bir hesaba idxal edə bilməzsiniz."
},
"exportMasterPassword": {
"message": "Anbar verilənlərinizi ixrac etmək üçün ana parolunuzu daxil edin."
"message": "Anbar datanızı xaricə köçürmək üçün ana parolunuzu daxil edin."
},
"shared": {
"message": "Paylaşılan"
@ -799,7 +823,7 @@
"message": "YubiKey və Duo kimi mülkiyyətçi iki addımlı giriş seçimləri."
},
"ppremiumSignUpReports": {
"message": "Anbarınızın təhlükəsiyini təmin etmək üçün parol gigiyenası, hesab sağlamlığıverilənlərin pozulması hesabatları."
"message": "Anbarınızın təhlükəsizliyini təmin etmək üçün parol gigiyenası, hesab sağlamlığıdata pozuntusu hesabatları."
},
"ppremiumSignUpTotp": {
"message": "Anbarınızdakı hesablar üçün TOTP təsdiqləmə kodu (2FA) yaradıcısı."
@ -2408,18 +2432,18 @@
"description": "Toggling an expand/collapse state."
},
"aliasDomain": {
"message": "Alias domain"
"message": "Domen ləqəbi"
},
"passwordRepromptDisabledAutofillOnPageLoad": {
"message": "Items with master password re-prompt cannot be auto-filled on page load. Auto-fill on page load turned off.",
"message": "\"Ana parolu təkrar soruş\" özəlliyi olan elementlər səhifə yüklənəndə avto-doldurulmur. \"Səhifə yüklənəndə avto-doldurma\" özəlliyi söndürülüb.",
"description": "Toast message for describing that master password re-prompt cannot be auto-filled on page load."
},
"autofillOnPageLoadSetToDefault": {
"message": "Auto-fill on page load set to use default setting.",
"message": "\"Səhifə yüklənəndə avto-doldurma\" özəlliyi ilkin tənzimləməni istifadə etmək üzrə tənzimləndi.",
"description": "Toast message for informing the user that auto-fill on page load has been set to the default setting."
},
"turnOffMasterPasswordPromptToEditField": {
"message": "Turn off master password re-prompt to edit this field",
"message": "Bu sahəyə düzəliş etmək üçün \"Ana parolu təkrar soruş\"u söndürün",
"description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item."
}
}

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Аўтазапаўненне"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Генерыраваць пароль (з капіяваннем)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Няма адпаведных лагінаў."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Разблакіраваць сховішча"
},

View File

@ -14,7 +14,7 @@
"message": "Впишете се или създайте нов абонамент, за да достъпите защитен трезор."
},
"createAccount": {
"message": "Създаване на абонамент"
"message": "Създаване на акаунт"
},
"login": {
"message": "Вписване"
@ -83,7 +83,7 @@
"message": "Копиране на потребителското име"
},
"copyNumber": {
"message": "Копиране на номера"
"message": "Копиране на но̀мера"
},
"copySecurityCode": {
"message": "Копиране на кода за сигурност"
@ -91,6 +91,15 @@
"autoFill": {
"message": "Автоматично дописване"
},
"autoFillLogin": {
"message": "Авт. попълване на данни за вход"
},
"autoFillCard": {
"message": "Самопопълваща се карта"
},
"autoFillIdentity": {
"message": "Самопопълваща се самоличност"
},
"generatePasswordCopied": {
"message": "Генериране на парола (копирана)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Няма съвпадащи записи."
},
"noCards": {
"message": "Няма карти"
},
"noIdentities": {
"message": "Няма самоличности"
},
"addLoginMenu": {
"message": "Добавяне на запис за вход"
},
"addCardMenu": {
"message": "Добавяне на карта"
},
"addIdentityMenu": {
"message": "Добавяне на самоличност"
},
"unlockVaultMenu": {
"message": "Отключете трезора си"
},
@ -233,7 +257,7 @@
"message": "Избор"
},
"generatePassword": {
"message": "Генериране на парола"
"message": "Нова парола"
},
"regeneratePassword": {
"message": "Регенериране на паролата"
@ -467,7 +491,7 @@
"message": "Грешен код за потвърждаване"
},
"valueCopied": {
"message": "$VALUE$ — копирано",
"message": "Копирано е $VALUE$",
"description": "Value has been copied to the clipboard.",
"placeholders": {
"value": {
@ -537,7 +561,7 @@
"message": "Копирана парола"
},
"uri": {
"message": "Адрес"
"message": "Унифициран идентификатор на ресурс"
},
"uriPosition": {
"message": "Адрес $POSITION$",
@ -550,7 +574,7 @@
}
},
"newUri": {
"message": "Нов адрес"
"message": "Нов унифициран идентификатор на ресурс"
},
"addedItem": {
"message": "Елементът е добавен"
@ -631,7 +655,7 @@
"message": "Да се обнови ли паролата в Bitwarden?"
},
"notificationChangeSave": {
"message": "Да, нека се обнови сега"
"message": "Осъвременяване"
},
"notificationUnlockDesc": {
"message": "Отключете трезора си в Битуорден, за да завършите заявката за автоматично попълване."
@ -684,7 +708,7 @@
"message": "Потвърждаване на изнасянето на трезора"
},
"exportWarningDesc": {
"message": "Данните от трезора ви ще се изнесат в незащитен формат. Не го пращайте по незащитени канали като е-поща. Изтрийте файла незабавно след като свършите работата си с него."
"message": "Този износ съдържа данни на трезора ви в некриптиран формат. Не трябва да съхранявате или изпращате износния файл през незащитени канали (като имейл). Изтрийте файла моментално след като свършите работата си с него."
},
"encExportKeyWarningDesc": {
"message": "При изнасяне данните се шифрират с ключа ви. Ако го смените, ще трябва наново да ги изнесете, защото няма да може да дешифрирате настоящия файл."
@ -699,10 +723,10 @@
"message": "Споделено"
},
"learnOrg": {
"message": "Разберете повече за организациите"
"message": "Научете за организациите"
},
"learnOrgConfirmation": {
"message": "Битуорден позволява да споделяте части от трезора си чрез използването на организация. Искате ли да научите повече от сайта bitwarden.com?"
"message": "Битуорден позволява да споделяте елементи от трезора си а други, използвайки организация. Бихте ли посетили сайта bitwarden.com, за да научите повече?"
},
"moveToOrganization": {
"message": "Преместване в организация"
@ -781,7 +805,7 @@
"message": "Управление на абонамента"
},
"premiumManageAlert": {
"message": "Можете да управлявате абонамента си през сайта bitwarden.com. Искате ли да го посетите сега?"
"message": "Може да управлявате членството си в мрежата на трезора в bitwarden.com. Искате ли да посетите уебсайта сега?"
},
"premiumRefresh": {
"message": "Опресняване на абонамента"
@ -901,7 +925,7 @@
"message": "Регистрацията е защитена с двустепенно удостоверяване, но никой от настроените доставчици на удостоверяване не се поддържа от този браузър."
},
"noTwoStepProviders2": {
"message": "Пробвайте с поддържан уеб браузър (като Chrome или Firefox) и други доставчици на удостоверяване, които се поддържат от браузърите (като специални програми за удостоверяване)."
"message": "Употребявайте поддържан браузър (като Chrome, Firefox) и/или добавете други доставчици на удостоверяване, които се поддържат по-добре от браузърите (като специални програми за удостоверяване)."
},
"twoStepOptions": {
"message": "Настройки на двустепенното удостоверяване"
@ -920,10 +944,10 @@
"description": "'Authy' and 'Google Authenticator' are product names and should not be translated."
},
"yubiKeyTitle": {
"message": "Устройство YubiKey OTP"
"message": "Ключ за сигурност YubiKey OTP"
},
"yubiKeyDesc": {
"message": "Използвайте устройство на YubiKey, за да влезете в абонамента си. Поддържат се моделите YubiKey 4, 4 Nano, 4C и NEO."
"message": "Използвайте ключа за сигурност YubiKey, за да влезете в акаунта си. Работи с устройствата YubiKey 4, 4 Nano, 4C и NEO."
},
"duoDesc": {
"message": "Удостоверяване чрез Duo Security, с ползване на приложението Duo Mobile, SMS, телефонен разговор или устройство U2F.",
@ -2096,7 +2120,7 @@
"message": "собствен хостинг"
},
"thirdParty": {
"message": "Third-party"
"message": "Трета страна"
},
"thirdPartyServerMessage": {
"message": "Connected to third-party server implementation, $SERVERNAME$. Please verify bugs using the official server, or report them to the third-party server.",

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "স্বতঃপূরণ"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "পাসওয়ার্ড তৈরি করুন (অনুলিপিকৃত)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "কোনও মিলত লগইন নেই।"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Emplenament automàtic"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Genera contrasenya (copiada)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No hi ha inicis de sessió coincidents."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "1. Desbloquegeu la caixa forta."
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Automatické vyplňování"
},
"autoFillLogin": {
"message": "Automaticky vyplnit přihlášení"
},
"autoFillCard": {
"message": "Automaticky vyplnit kartu"
},
"autoFillIdentity": {
"message": "Automaticky vyplnit identitu"
},
"generatePasswordCopied": {
"message": "Vygenerovat heslo a zkopírovat do schránky"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Žádné odpovídající přihlašovací údaje"
},
"noCards": {
"message": "Žádné karty"
},
"noIdentities": {
"message": "Žádné identity"
},
"addLoginMenu": {
"message": "Přidat přihlašovací údaje"
},
"addCardMenu": {
"message": "Přidat kartu"
},
"addIdentityMenu": {
"message": "Přidat identitu"
},
"unlockVaultMenu": {
"message": "Odemknout Váš trezor"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Llenwi'n awtomatig"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Cynhyrchu cyfrinair (wedi'i gopïo)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Datgloi'ch cell"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-udfyld"
},
"autoFillLogin": {
"message": "Autoudfyld login"
},
"autoFillCard": {
"message": "Autoudfyld kort"
},
"autoFillIdentity": {
"message": "Autoudfyld identitet"
},
"generatePasswordCopied": {
"message": "Generér adgangskode (kopieret)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Ingen matchende logins"
},
"noCards": {
"message": "Ingen kort"
},
"noIdentities": {
"message": "Ingen identiteter"
},
"addLoginMenu": {
"message": "Tilføj login"
},
"addCardMenu": {
"message": "Tilføj kort"
},
"addIdentityMenu": {
"message": "Tilføj identitet"
},
"unlockVaultMenu": {
"message": "Lås din boks op"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-Ausfüllen"
},
"autoFillLogin": {
"message": "Zugangsdaten automatisch ausfüllen"
},
"autoFillCard": {
"message": "Karte automatisch ausfüllen"
},
"autoFillIdentity": {
"message": "Identität automatisch ausfüllen"
},
"generatePasswordCopied": {
"message": "Passwort generieren (kopiert)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Keine passenden Zugangsdaten"
},
"noCards": {
"message": "Keine Karten"
},
"noIdentities": {
"message": "Keine Identitäten"
},
"addLoginMenu": {
"message": "Zugangsdaten hinzufügen"
},
"addCardMenu": {
"message": "Karte hinzufügen"
},
"addIdentityMenu": {
"message": "Identität hinzufügen"
},
"unlockVaultMenu": {
"message": "Entsperre deinen Tresor"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Αυτόματη συμπλήρωση"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Δημιουργία Κωδικού (αντιγράφηκε)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Δεν υπάρχουν αντιστοιχίσεις σύνδεσης."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Ξεκλειδώστε το vault σας"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Autorellenar"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generar contraseña (copiada)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Sin entradas coincidentes."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Desbloquea la caja fuerte"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Automaatne täitmine"
},
"autoFillLogin": {
"message": "Täida konto andmed"
},
"autoFillCard": {
"message": "Täida kaardi andmed"
},
"autoFillIdentity": {
"message": "Täida identiteet"
},
"generatePasswordCopied": {
"message": "Genereeri parool (kopeeritakse)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Sobivaid kontoandmeid ei leitud."
},
"noCards": {
"message": "Kaardid puuduvad"
},
"noIdentities": {
"message": "Identiteedid puuduvad"
},
"addLoginMenu": {
"message": "Lisa konto andmed"
},
"addCardMenu": {
"message": "Lisa kaart"
},
"addIdentityMenu": {
"message": "Lisa identiteet"
},
"unlockVaultMenu": {
"message": "Lukusta hoidla lahti"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-betetzea"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Sortu pasahitza (kopiatuta)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Bat datozen saio-hasierarik gabe"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Desblokeatu kutxa gotorra"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "پر کردن خودکار"
},
"autoFillLogin": {
"message": "پر کردن خودکار ورود"
},
"autoFillCard": {
"message": "پر کردن خودکار کارت"
},
"autoFillIdentity": {
"message": "پر کردن خودکار هویت"
},
"generatePasswordCopied": {
"message": "ساخت کلمه عبور (کپی شد)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "ورودی‌ها منتطبق نیست"
},
"noCards": {
"message": "کارتی وجود ندارد"
},
"noIdentities": {
"message": "هویتی وجود ندارد"
},
"addLoginMenu": {
"message": "افزودن ورود"
},
"addCardMenu": {
"message": "افزودن کارت"
},
"addIdentityMenu": {
"message": "افزودن هویت"
},
"unlockVaultMenu": {
"message": "قفل گاوصندوق خود را باز کنید"
},
@ -637,7 +661,7 @@
"message": "برای پر کردن خودکار گاوصندوق Bitwarden خود را باز کنید."
},
"notificationUnlock": {
"message": "بازگشایی"
"message": "باز کردن قفل"
},
"enableContextMenuItem": {
"message": "نمایش گزینه‌های منوی زمینه"
@ -702,7 +726,7 @@
"message": "درباره سازمان‌ها اطلاعات کسب کنید"
},
"learnOrgConfirmation": {
"message": "Bitwarden به شما اجازه می‌دهد با استفاده از سازماندهی، موارد گاوصندوق خود را با دیگران به اشتراک بگذارید. آیا مایل به بازدید از وب سایت bitwarden.com برای کسب اطلاعات بیشتر هستید؟"
"message": "Bitwarden به شما اجازه می‌دهد با استفاده از سازمان، موارد گاوصندوق خود را با دیگران به اشتراک بگذارید. آیا مایل به بازدید از وب سایت bitwarden.com برای کسب اطلاعات بیشتر هستید؟"
},
"moveToOrganization": {
"message": "انتقال به سازمان"
@ -772,7 +796,7 @@
"message": "ویژگی موجود نیست"
},
"encryptionKeyMigrationRequired": {
"message": "Encryption key migration required. Please login through the web vault to update your encryption key."
"message": "انتقال کلید رمزگذاری مورد نیاز است. لطفاً از طریق گاوصندوق وب وارد شوید تا کلید رمزگذاری خود را به روز کنید."
},
"premiumMembership": {
"message": "عضویت پرمیوم"
@ -1606,10 +1630,10 @@
"message": "بیومتریک مرورگر در این دستگاه پشتیبانی نمی‌شود."
},
"biometricsFailedTitle": {
"message": "زیست‌سنجی ناتمام ماند"
"message": "زیست‌سنجی ناموفق بود"
},
"biometricsFailedDesc": {
"message": "زیست‌سنجی نمی تواند انجام شود، استفاده از کلمه عبور اصلی یا خروج را در نظر بگیرید. اگر این مشکل ادامه یافت لطفا با پشتیبانی Bitwarden تماس بگیرید."
"message": "زیست‌سنجی نمیتواند انجام شود، استفاده از کلمه عبور اصلی یا خروج را در نظر بگیرید. اگر این مشکل ادامه یافت لطفاً با پشتیبانی Bitwarden تماس بگیرید."
},
"nativeMessaginPermissionErrorTitle": {
"message": "مجوز ارائه نشده است"
@ -1992,7 +2016,7 @@
"message": "برون ریزی گاو‌صندوق شخصی"
},
"exportingIndividualVaultDescription": {
"message": "Only the individual vault items associated with $EMAIL$ will be exported. Organization vault items will not be included. Only vault item information will be exported and will not include associated attachments.",
"message": "فقط موارد شخصی گاوصندوق مرتبط با $EMAIL$ برون ریزی خواهند شد. موارد گاوصندوق سازمان شامل نخواهد شد. فقط اطلاعات مورد گاوصندوق برون ریزی خواهد شد و شامل تاریخچه کلمه عبور مرتبط یا پیوست نمی‌شود.",
"placeholders": {
"email": {
"content": "$1",
@ -2234,28 +2258,28 @@
}
},
"loggingInOn": {
"message": "ورود به عنوان"
"message": "ورود با"
},
"opensInANewWindow": {
"message": "در پنجره جدید باز می‌شود"
},
"deviceApprovalRequired": {
"message": ایید دستگاه لازم است. یک روش تایید برگزینید:"
"message": أیید دستگاه لازم است. یک روش تأیید انتخاب کنید:"
},
"rememberThisDevice": {
"message": "این دستگاه را به خاطر بسپار"
},
"uncheckIfPublicDevice": {
"message": "بردارید اگر از دستگاه عمومی استفاده میکنید"
"message": "اگر از دستگاه عمومی استفاده میکنید علامت را بردارید"
},
"approveFromYourOtherDevice": {
"message": ایید با دستگاه دیگرتان"
"message": أیید با دستگاه دیگرتان"
},
"requestAdminApproval": {
"message": "درخواست تایید مدیر"
"message": "درخواست تأیید مدیر"
},
"approveWithMasterPassword": {
"message": ایید با کلمه عبور اصلی"
"message": أیید با کلمه عبور اصلی"
},
"ssoIdentifierRequired": {
"message": "شناسه سازمان SSO مورد نیاز است."
@ -2283,37 +2307,37 @@
"message": "حساب کاربری با موفقیت ایجاد شد!"
},
"adminApprovalRequested": {
"message": ایید مدیر در خواست شد"
"message": أیید مدیر درخواست شد"
},
"adminApprovalRequestSentToAdmins": {
"message": "درخواست شما به مدیرتان فرستاده شد."
},
"youWillBeNotifiedOnceApproved": {
"message": "به محض تایید مطلع خواهید شد."
"message": "به محض تأیید مطلع خواهید شد."
},
"troubleLoggingIn": {
"message": "در ورود مشکلی دارید؟"
},
"loginApproved": {
"message": "ورود تایید شد"
"message": "ورود تأیید شد"
},
"userEmailMissing": {
"message": "رایانامه کاربر کم است"
"message": "ایمیل کاربر وجود ندارد"
},
"deviceTrusted": {
"message": "دستگاه مورد اعتماد است"
},
"inputRequired": {
"message": "ورودی مورد نیاز است."
"message": "ورودی ضروری است."
},
"required": {
"message": "الزامی"
"message": "ضروری"
},
"search": {
"message": "جستجو"
},
"inputMinLength": {
"message": "ورودی باید حداقل $COUNT$ نشانه داشته باشد.",
"message": "ورودی باید حداقل $COUNT$ کاراکتر داشته باشد.",
"placeholders": {
"count": {
"content": "$1",
@ -2322,7 +2346,7 @@
}
},
"inputMaxLength": {
"message": "اندازه ورودی نباید بیش از $COUNT$ نشانه باشد.",
"message": "طول ورودی نباید بیش از $COUNT$ کاراکتر باشد.",
"placeholders": {
"count": {
"content": "$1",
@ -2331,7 +2355,7 @@
}
},
"inputForbiddenCharacters": {
"message": "نشانه های زیر مجاز نیستند: $CHARACTERS$",
"message": "کاراکترهای زیر مجاز نیستند: $CHARACTERS$",
"placeholders": {
"characters": {
"content": "$1",
@ -2340,7 +2364,7 @@
}
},
"inputMinValue": {
"message": "مقدار ورودی باید دست کم $MIN$ باشد.",
"message": "مقدار ورودی باید حداقل $MIN$ باشد.",
"placeholders": {
"min": {
"content": "$1",
@ -2349,7 +2373,7 @@
}
},
"inputMaxValue": {
"message": "مقدار ورودی نباید بیش از $MAX$ باشد.",
"message": "مقدار ورودی نباید از $MAX$ تجاوز کند.",
"placeholders": {
"max": {
"content": "$1",
@ -2358,17 +2382,17 @@
}
},
"multipleInputEmails": {
"message": "یک یا چند رایانامه نامعتبر است"
"message": "یک یا چند ایمیل نامعتبر است"
},
"inputTrimValidator": {
"message": "ورودی نباید فقط فاصله باشد.",
"message": "ورودی نباید فقط حاوی فضای خالی باشد.",
"description": "Notification to inform the user that a form's input can't contain only whitespace."
},
"inputEmail": {
"message": "ورودی یک نشانی رایانامه نیست."
"message": "ورودی یک نشانی ایمیل نیست."
},
"fieldsNeedAttention": {
"message": "بخش (های) $COUNT$ در بالا نیازمند توجه شما است.",
"message": "فیلد $COUNT$ در بالا به توجه شما نیاز دارد.",
"placeholders": {
"count": {
"content": "$1",
@ -2380,16 +2404,16 @@
"message": "-- انتخاب --"
},
"multiSelectPlaceholder": {
"message": "-- برای گزینش چیزی بنویسید --"
"message": "-- برای فیلتر تایپ کنید --"
},
"multiSelectLoading": {
"message": "در حال بازیابی گزینه‌ها..."
},
"multiSelectNotFound": {
"message": "موردی پیدا نشد"
"message": "موردی یافت نشد"
},
"multiSelectClearAll": {
"message": "پاک کردن همه"
"message": "پاککردن همه"
},
"plusNMore": {
"message": "+ $QUANTITY$ بیشتر",
@ -2401,25 +2425,25 @@
}
},
"submenu": {
"message": "زیرفهرست"
"message": "زیرمنو"
},
"toggleCollapse": {
"message": "باز و بسته کردن",
"message": "دکمه بستن",
"description": "Toggling an expand/collapse state."
},
"aliasDomain": {
"message": "Alias domain"
"message": "دامنه مستعار"
},
"passwordRepromptDisabledAutofillOnPageLoad": {
"message": "Items with master password re-prompt cannot be auto-filled on page load. Auto-fill on page load turned off.",
"message": "موارد با درخواست مجدد کلمه عبور اصلی را نمی‌توان در بارگذاری صفحه به‌صورت خودکار پر کرد. پر کردن خودکار در بارگیری صفحه خاموش شد.",
"description": "Toast message for describing that master password re-prompt cannot be auto-filled on page load."
},
"autofillOnPageLoadSetToDefault": {
"message": "Auto-fill on page load set to use default setting.",
"message": "پر کردن خودکار در بارگیری صفحه برای استفاده از تنظیمات پیش‌فرض تنظیم شده است.",
"description": "Toast message for informing the user that auto-fill on page load has been set to the default setting."
},
"turnOffMasterPasswordPromptToEditField": {
"message": "Turn off master password re-prompt to edit this field",
"message": "برای ویرایش این فیلد، درخواست مجدد کلمه عبور اصلی را خاموش کنید",
"description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item."
}
}

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Automaattinen täyttö"
},
"autoFillLogin": {
"message": "Täytä kirjautumistieto automaattisesti"
},
"autoFillCard": {
"message": "Täytä kortti automaattisesti"
},
"autoFillIdentity": {
"message": "Täytä identiteetti automaattisesti"
},
"generatePasswordCopied": {
"message": "Luo salasana (leikepöydälle)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Ei tunnistettuja kirjautumistietoja."
},
"noCards": {
"message": "Kortteja ei ole"
},
"noIdentities": {
"message": "Identiteettejä ei ole"
},
"addLoginMenu": {
"message": "Lisää kirjautumistieto"
},
"addCardMenu": {
"message": "Lisää kortti"
},
"addIdentityMenu": {
"message": "Lisää identiteetti"
},
"unlockVaultMenu": {
"message": "Avaa holvisi"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill sa Filipino ay Awtomatikong Pagpuno"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Maglagay ng Password"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Walang tumutugmang mga login"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Buksan ang iyong kahadeyero"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Saisie automatique"
},
"autoFillLogin": {
"message": "Saisie automatique de l'identifiant"
},
"autoFillCard": {
"message": "Saisie automatique de la carte"
},
"autoFillIdentity": {
"message": "Saisie automatique de l'identité"
},
"generatePasswordCopied": {
"message": "Générer un mot de passe (copié)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Aucun identifiant correspondant."
},
"noCards": {
"message": "Aucune carte"
},
"noIdentities": {
"message": "Aucune identité"
},
"addLoginMenu": {
"message": "Ajouter un identifiant"
},
"addCardMenu": {
"message": "Ajouter une carte"
},
"addIdentityMenu": {
"message": "Ajouter une identité"
},
"unlockVaultMenu": {
"message": "Déverrouillez votre coffre"
},
@ -634,7 +658,7 @@
"message": "Mettre à jour"
},
"notificationUnlockDesc": {
"message": "Unlock your Bitwarden vault to complete the auto-fill request."
"message": "Déverrouillez votre coffre Bitwarden pour terminer la demande de saisie automatique."
},
"notificationUnlock": {
"message": "Déverrouiller"

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "השלמה אוטומטית"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "צור סיסמה (העתק)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "לא נמצאו פרטי כניסה תואמים."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "שחרור הכספת שלך"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "स्वत:भरण"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate Password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "कोई मेल-मिला लॉगिन नहीं |"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "आपकी तिजोरी का ताला खोलें"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-ispuna"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generiraj lozinku (i kopiraj)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Nema podudarajućih prijava"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Otključaj svoj trezor"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Automatikus kitöltés"
},
"autoFillLogin": {
"message": "Automatikus kitöltés bejelentkezés"
},
"autoFillCard": {
"message": "Automatikus kitöltés kártya"
},
"autoFillIdentity": {
"message": "Automatikus kitöltés személyazonosság"
},
"generatePasswordCopied": {
"message": "Jelszó generálás (másolt)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Nincsenek egyező bejelentkezések."
},
"noCards": {
"message": "Nincsenek kártyák"
},
"noIdentities": {
"message": "Nincsenek személyazonosságok"
},
"addLoginMenu": {
"message": "Bejelentkezés hozzáadása"
},
"addCardMenu": {
"message": "Kártya hozzáadása"
},
"addIdentityMenu": {
"message": "Személyazonossság hozzáadása"
},
"unlockVaultMenu": {
"message": "Széf kinyitása"
},
@ -143,7 +167,7 @@
"message": "A folytatáshoz meg kell erősíteni a személyazonosságot."
},
"account": {
"message": "Felhasználó"
"message": "Fiók"
},
"changeMasterPassword": {
"message": "Mesterjelszó módosítása"
@ -513,7 +537,7 @@
"message": "A kétlépcsős bejelentkezés biztonságosabbá teszi a fiókot azáltal, hogy ellenőrizni kell a bejelentkezést egy másik olyan eszközzel mint például biztonsági kulcs, hitelesítő alkalmazás, SMS, telefon hívás vagy email. A kétlépcsős bejelentkezést a bitwarden.com webes széfben lehet engedélyezni. Felkeressük a webhelyet most?"
},
"editedFolder": {
"message": "A mappa módosításra került."
"message": "A mappa mentésre került."
},
"deleteFolderConfirmation": {
"message": "Biztos, hogy törölni akarod ezt a mappát?"
@ -562,7 +586,7 @@
"message": "Biztosan törlésre kerüljön ezt az elem?"
},
"deletedItem": {
"message": "Az elem törlésre került."
"message": "Az elem a lomtárba került."
},
"overwritePassword": {
"message": "Jelszó felülírása"
@ -769,7 +793,7 @@
"message": "A naximális fájlméret 500 MB."
},
"featureUnavailable": {
"message": "Ez a funkció nem érhető el."
"message": "A funkció nem érhető el."
},
"encryptionKeyMigrationRequired": {
"message": "Titkosítási kulcs migráció szükséges. Jelentkezzünk be a webes széfen keresztül a titkosítási kulcs frissítéséhez."
@ -787,7 +811,7 @@
"message": "Tagság frissítése"
},
"premiumNotCurrentMember": {
"message": "Jelenleg nincs prémium tagság."
"message": "Jelenleg nem vagyunk prémium tag."
},
"premiumSignUpAndGet": {
"message": "Regisztráció a prémium tagságra az alábbi funkciókért:"
@ -796,7 +820,7 @@
"message": "1 GB titkosított tárhely a fájlmellékleteknek."
},
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
"message": "Saját kétlépcsős bejelentkezési lehetőségek mint a YubiKey és a Duo."
},
"ppremiumSignUpReports": {
"message": "Jelszó higiénia, fiók biztonság és adatszivárgási jelentések a széf biztonsága érdekében."
@ -817,7 +841,7 @@
"message": "A prémium tagság megvásárolható a bitwarden.com webes széfben. Szeretnénk felkeresni a webhelyet most?"
},
"premiumCurrentMember": {
"message": "Jelenleg a prémium tagság érvényben van."
"message": "Prémium tag vagyunk!"
},
"premiumCurrentMemberThanks": {
"message": "Köszönjük a Bitwarden támogatását."
@ -994,7 +1018,7 @@
"message": "Alapértelmezett beállítások bejelentkezési elemekhez"
},
"defaultAutoFillOnPageLoadDesc": {
"message": "Az Automatikus kitöltés engedélyezése az oldalbetöltéskor engedélyezheti vagy letilthatja a funkciót az egyes bejelentkezési elemeknél. Ez az alapértelmezett beállítás a bejelentkezési elemeknéll, amelyek nincsenek külön konfigurálva."
"message": "Az egyes bejelentkezési elemeknél kikapcsolhatjuk oldalbetöltéskor az automatikus kitöltést az elem Szerkesztés nézetében."
},
"itemAutoFillOnPageLoad": {
"message": "Automatikus kitöltés oldal betöltésnél (Ha engedélyezett az opcióknál)"
@ -1905,7 +1929,7 @@
"message": "Perc"
},
"vaultTimeoutPolicyInEffect": {
"message": "A szervezeti házirendek hatással vannak a széf időkorlátjára. A széf időkorlátja legfeljebb $HOURS$ óra és $MINUTES$ perc lehet.",
"message": "A szervezeti szabályzata $HOURS$ órára és $MINUTES$ percre állította be a maximálisan megengedett széf időtúllépést.",
"placeholders": {
"hours": {
"content": "$1",

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Isi otomatis"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Membuat Kata Sandi (tersalin)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Tidak ada info masuk yang cocok."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Buka brankas Anda"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Riempimento automatico"
},
"autoFillLogin": {
"message": "Riempi automaticamente login"
},
"autoFillCard": {
"message": "Riempi automaticamente carta"
},
"autoFillIdentity": {
"message": "Riempi automaticamente identità"
},
"generatePasswordCopied": {
"message": "Genera password e copiala"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Nessun login corrispondente"
},
"noCards": {
"message": "Nessuna carta"
},
"noIdentities": {
"message": "Nessuna identità"
},
"addLoginMenu": {
"message": "Aggiungi login"
},
"addCardMenu": {
"message": "Aggiungi carta"
},
"addIdentityMenu": {
"message": "Aggiungi identità"
},
"unlockVaultMenu": {
"message": "Sblocca la tua cassaforte"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "自動入力"
},
"autoFillLogin": {
"message": "自動入力ログイン"
},
"autoFillCard": {
"message": "自動入力カード"
},
"autoFillIdentity": {
"message": "自動入力 ID"
},
"generatePasswordCopied": {
"message": "パスワードを生成 (コピー)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "一致するログインがありません。"
},
"noCards": {
"message": "カードなし"
},
"noIdentities": {
"message": "ID なし"
},
"addLoginMenu": {
"message": "ログイン情報を追加"
},
"addCardMenu": {
"message": "カードを追加"
},
"addIdentityMenu": {
"message": "ID を追加"
},
"unlockVaultMenu": {
"message": "保管庫のロックを解除"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "თვითშევსება"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "ಸ್ವಯಂ ಭರ್ತಿ"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "ಪಾಸ್ವರ್ಡ್ ರಚಿಸಿ (ನಕಲಿಸಲಾಗಿದೆ)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "ಹೊಂದಾಣಿಕೆಯ ಲಾಗಿನ್‌ಗಳು ಇಲ್ಲ."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "자동 완성"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "비밀번호 생성 및 클립보드에 복사"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "사용할 수 있는 로그인이 없습니다."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "보관함 잠금 해제"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Automatinis užpildymas"
},
"autoFillLogin": {
"message": "Automatinio užpildymo prisijungimas"
},
"autoFillCard": {
"message": "Automatinio užpildymo kortelė"
},
"autoFillIdentity": {
"message": "Automatinio užpildymo tapatybė"
},
"generatePasswordCopied": {
"message": "Kurti slaptažodį (paruoštas įterpti)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Nėra atitinkančių prisijungimų."
},
"noCards": {
"message": "Nėra kortelių"
},
"noIdentities": {
"message": "Nėra tapatybių"
},
"addLoginMenu": {
"message": "Pridėti prisijungimą"
},
"addCardMenu": {
"message": "Pridėti kortelę"
},
"addIdentityMenu": {
"message": "Pridėti tapatybę"
},
"unlockVaultMenu": {
"message": "Atrakinti saugyklą"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Automātiskā aizpildīšana"
},
"autoFillLogin": {
"message": "Automātiski aizpildīt pieteikšanos"
},
"autoFillCard": {
"message": "Automātiski aizpildīt karti"
},
"autoFillIdentity": {
"message": "Automātiski aizpildīt identitāti"
},
"generatePasswordCopied": {
"message": "Izveidot paroli (tiks ievietota starpliktuvē)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Nav atbilstošu pieteikšanās vienumu"
},
"noCards": {
"message": "Nav karšu"
},
"noIdentities": {
"message": "Nav identitāšu"
},
"addLoginMenu": {
"message": "Pievienot pieteikšanās vienumu"
},
"addCardMenu": {
"message": "Pievienot karti"
},
"addIdentityMenu": {
"message": "Pievienot identitāti"
},
"unlockVaultMenu": {
"message": "Atslēgt glabātavu"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "ഓട്ടോഫിൽ"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "പാസ്‌വേഡ് സൃഷ്ടിക്കുക (പകർത്തുക )"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "പൊരുത്തപ്പെടുന്ന ലോഗിനുകളൊന്നുമില്ല."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "स्वयंभरण"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "तिजोरी उघडा"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-utfylling"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generer et passord (kopiert)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Ingen samsvarende innlogginger."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Lås opp hvelvet ditt"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-invullen"
},
"autoFillLogin": {
"message": "Login automatisch invullen"
},
"autoFillCard": {
"message": "Kaart automatisch invullen"
},
"autoFillIdentity": {
"message": "Identiteit automatisch invullen"
},
"generatePasswordCopied": {
"message": "Wachtwoord genereren (op klembord)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Geen overeenkomstige logins."
},
"noCards": {
"message": "Geen kaarten"
},
"noIdentities": {
"message": "Geen identiteiten"
},
"addLoginMenu": {
"message": "Login toevoegen"
},
"addCardMenu": {
"message": "Kaart toevoegen"
},
"addIdentityMenu": {
"message": "Identiteit toevoegen"
},
"unlockVaultMenu": {
"message": "Ontgrendel je kluis"
},
@ -772,7 +796,7 @@
"message": "Functionaliteit niet beschikbaar"
},
"encryptionKeyMigrationRequired": {
"message": "Encryption key migration required. Please login through the web vault to update your encryption key."
"message": "Migratie van de encryptiesleutel vereist. Login via de website om je sleutel te bij te werken."
},
"premiumMembership": {
"message": "Premium-abonnement"

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Autouzupełnianie"
},
"autoFillLogin": {
"message": "Autouzupełnianie logowania"
},
"autoFillCard": {
"message": "Autouzupełnianie karty"
},
"autoFillIdentity": {
"message": "Autouzupełnianie tożsamości"
},
"generatePasswordCopied": {
"message": "Wygeneruj hasło (do schowka)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Brak pasujących danych logowania"
},
"noCards": {
"message": "Brak kart"
},
"noIdentities": {
"message": "Brak tożsamości"
},
"addLoginMenu": {
"message": "Dodaj dane logowania"
},
"addCardMenu": {
"message": "Dodaj kartę"
},
"addIdentityMenu": {
"message": "Dodaj tożsamość"
},
"unlockVaultMenu": {
"message": "Odblokuj sejf"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Autopreencher"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Gerar Senha (copiada)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Sem credenciais correspondentes."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Desbloqueie seu cofre"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Preenchimento automático"
},
"autoFillLogin": {
"message": "Preenchimento automático da credencial"
},
"autoFillCard": {
"message": "Preenchimento automático do cartão"
},
"autoFillIdentity": {
"message": "Preenchimento automático da identidade"
},
"generatePasswordCopied": {
"message": "Gerar palavra-passe (copiada)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Sem credenciais correspondentes"
},
"noCards": {
"message": "Sem cartões"
},
"noIdentities": {
"message": "Sem identidades"
},
"addLoginMenu": {
"message": "Adicionar credencial"
},
"addCardMenu": {
"message": "Adicionar cartão"
},
"addIdentityMenu": {
"message": "Adicionar identidade"
},
"unlockVaultMenu": {
"message": "Desbloquear o cofre"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-completare"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generare parolă (s-a copiat)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Nu există potrivire de autentificări"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Deblocați-vă seiful"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Автозаполнение"
},
"autoFillLogin": {
"message": "Автозаполнение логина"
},
"autoFillCard": {
"message": "Автозаполнение карты"
},
"autoFillIdentity": {
"message": "Автозаполнение личности"
},
"generatePasswordCopied": {
"message": "Сгенерировать пароль (с копированием)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Нет подходящих логинов."
},
"noCards": {
"message": "Нет карт"
},
"noIdentities": {
"message": "Нет личностей"
},
"addLoginMenu": {
"message": "Добавить логин"
},
"addCardMenu": {
"message": "Добавить карту"
},
"addIdentityMenu": {
"message": "Добавить личность"
},
"unlockVaultMenu": {
"message": "Разблокировать хранилище"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "ස්වයං-පිරවීම"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "මුරපදය ජනනය (පිටපත්)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "ගැලපෙන පිවිසුම් නොමැත."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Automatické vypĺňanie"
},
"autoFillLogin": {
"message": "Automatické vyplnenie prihlasovacích údajov"
},
"autoFillCard": {
"message": "Automatické vyplnenie karty"
},
"autoFillIdentity": {
"message": "Automatické vyplnenie identity"
},
"generatePasswordCopied": {
"message": "Vygenerovať heslo (skopírované)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Žiadne zodpovedajúce prihlasovacie údaje."
},
"noCards": {
"message": "Žiadne karty"
},
"noIdentities": {
"message": "Žiadne identity"
},
"addLoginMenu": {
"message": "Pridať prihlasovacie údaje"
},
"addCardMenu": {
"message": "Pridať kartu"
},
"addIdentityMenu": {
"message": "Pridať identitu"
},
"unlockVaultMenu": {
"message": "Odomknúť trezor"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Samodejno izpolnjevanje"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generiraj geslo (kopirano)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Ni ustreznih prijav."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Odkleni svoj trezor"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Аутоматско допуњавање"
},
"autoFillLogin": {
"message": "Ауто-пуњење пријаве"
},
"autoFillCard": {
"message": "Ауто-пуњење картице"
},
"autoFillIdentity": {
"message": "Ауто-пуњење идентитета"
},
"generatePasswordCopied": {
"message": "Генериши Лозинку (копирано)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Нема одговарајућих пријављивања."
},
"noCards": {
"message": "Нема карте"
},
"noIdentities": {
"message": "Нема идентитета"
},
"addLoginMenu": {
"message": "Нема пријаве"
},
"addCardMenu": {
"message": "Додати картицу"
},
"addIdentityMenu": {
"message": "Додати идентитет"
},
"unlockVaultMenu": {
"message": "Откључај свој сеф"
},
@ -2408,7 +2432,7 @@
"description": "Toggling an expand/collapse state."
},
"aliasDomain": {
"message": "Alias domain"
"message": "Домен алијаса"
},
"passwordRepromptDisabledAutofillOnPageLoad": {
"message": "Ставке са упитом за поновно постављање главне лозинке не могу се ауто-попунити при учитавању странице. Ауто-попуњавање при учитавању странице је искључено.",

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Fyll i automatiskt"
},
"autoFillLogin": {
"message": "Autofyll inloggning"
},
"autoFillCard": {
"message": "Autofyll kort"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Skapa lösenord (kopierad)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Inga matchande inloggningar"
},
"noCards": {
"message": "Inga kort"
},
"noIdentities": {
"message": "Inga identiteter"
},
"addLoginMenu": {
"message": "Lägg till inloggning"
},
"addCardMenu": {
"message": "Lägg till kort"
},
"addIdentityMenu": {
"message": "Lägg till identitet"
},
"unlockVaultMenu": {
"message": "Lås upp ditt valv"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Auto-fill"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "No matching logins"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Unlock your vault"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "กรอกข้อมูลอัตโนมัติ"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Generate Password (copied)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "ไม่พบข้อมูลล็อกอินที่ตรงกัน"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "ปลดล็อกกตู้นิรภัยของคุณ"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Otomatik doldur"
},
"autoFillLogin": {
"message": "Hesabı otomatik doldur"
},
"autoFillCard": {
"message": "Kartı otomatik doldur"
},
"autoFillIdentity": {
"message": "Kimliği otomatik doldur"
},
"generatePasswordCopied": {
"message": "Parola oluştur (ve kopyala)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Eşleşen hesap yok"
},
"noCards": {
"message": "Kart yok"
},
"noIdentities": {
"message": "Kimlik yok"
},
"addLoginMenu": {
"message": "Hesap ekle"
},
"addCardMenu": {
"message": "Kart ekle"
},
"addIdentityMenu": {
"message": "Kimlik ekle"
},
"unlockVaultMenu": {
"message": "Kasanızın kilidini açın"
},
@ -1609,7 +1633,7 @@
"message": "Biyometri doğrulanamadı"
},
"biometricsFailedDesc": {
"message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support."
"message": "Biyometri doğrulaması tamamlanamadı. Ana parolanızı kullanabilir veya çıkış yapabilirsiniz. Sorun devam ederse Bitwarden destek ekibiyle iletişime geçin."
},
"nativeMessaginPermissionErrorTitle": {
"message": "İzin verilmedi"

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Автозаповнення"
},
"autoFillLogin": {
"message": "Автозаповнення входу"
},
"autoFillCard": {
"message": "Автозаповнення картки"
},
"autoFillIdentity": {
"message": "Автозаповнення особистих даних"
},
"generatePasswordCopied": {
"message": "Генерувати пароль (з копіюванням)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Немає відповідних записів"
},
"noCards": {
"message": "Немає карток"
},
"noIdentities": {
"message": "Немає особистих даних"
},
"addLoginMenu": {
"message": "Додати запис входу"
},
"addCardMenu": {
"message": "Додати картку"
},
"addIdentityMenu": {
"message": "Додати особисті дані"
},
"unlockVaultMenu": {
"message": "Розблокуйте сховище"
},
@ -2408,18 +2432,18 @@
"description": "Toggling an expand/collapse state."
},
"aliasDomain": {
"message": "Alias domain"
"message": "Псевдонім домену"
},
"passwordRepromptDisabledAutofillOnPageLoad": {
"message": "Items with master password re-prompt cannot be auto-filled on page load. Auto-fill on page load turned off.",
"message": "Записи з повторним запитом головного пароля не можна автоматично заповнювати під час завантаження сторінки. Автозаповнення на сторінці вимкнено.",
"description": "Toast message for describing that master password re-prompt cannot be auto-filled on page load."
},
"autofillOnPageLoadSetToDefault": {
"message": "Auto-fill on page load set to use default setting.",
"message": "Автозаповнення на сторінці налаштовано з типовими параметрами.",
"description": "Toast message for informing the user that auto-fill on page load has been set to the default setting."
},
"turnOffMasterPasswordPromptToEditField": {
"message": "Turn off master password re-prompt to edit this field",
"message": "Вимкніть повторний запит головного пароля, щоб редагувати це поле",
"description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item."
}
}

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "Tự động điền"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "Tạo mật khẩu (đã sao chép)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "Không có thông tin đăng nhập phù hợp."
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "Mở khoá kho lưu trữ của bạn"
},

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "自动填充"
},
"autoFillLogin": {
"message": "自动填充登录"
},
"autoFillCard": {
"message": "自动填充支付卡"
},
"autoFillIdentity": {
"message": "自动填充身份"
},
"generatePasswordCopied": {
"message": "生成密码(并复制)"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "无匹配的登录项目"
},
"noCards": {
"message": "无支付卡"
},
"noIdentities": {
"message": "无身份"
},
"addLoginMenu": {
"message": "添加登录项目"
},
"addCardMenu": {
"message": "添加支付卡"
},
"addIdentityMenu": {
"message": "添加身份"
},
"unlockVaultMenu": {
"message": "解锁您的密码库"
},
@ -850,7 +874,7 @@
"message": "使用此功能需要高级会员资格。"
},
"enterVerificationCodeApp": {
"message": "请输入您的验证器应用中的 6 位验证码。"
"message": "请输入您的验证器应用中的 6 位验证码。"
},
"enterVerificationCodeEmail": {
"message": "请输入发送给电子邮件 $EMAIL$ 的 6 位数验证码。",
@ -2117,7 +2141,7 @@
}
},
"loginWithMasterPassword": {
"message": "主密码登录"
"message": "使用主密码登录"
},
"loggingInAs": {
"message": "正登录为"
@ -2132,7 +2156,7 @@
"message": "记住电子邮件地址"
},
"loginWithDevice": {
"message": "设备登录"
"message": "使用设备登录"
},
"loginWithDeviceEnabledInfo": {
"message": "设备登录必须在 Bitwarden 应用程序的设置中启用。需要其他登录选项吗?"

View File

@ -91,6 +91,15 @@
"autoFill": {
"message": "自動填入"
},
"autoFillLogin": {
"message": "Auto-fill login"
},
"autoFillCard": {
"message": "Auto-fill card"
},
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"generatePasswordCopied": {
"message": "產生及複製密碼"
},
@ -100,6 +109,21 @@
"noMatchingLogins": {
"message": "無符合的登入資料"
},
"noCards": {
"message": "No cards"
},
"noIdentities": {
"message": "No identities"
},
"addLoginMenu": {
"message": "Add login"
},
"addCardMenu": {
"message": "Add card"
},
"addIdentityMenu": {
"message": "Add identity"
},
"unlockVaultMenu": {
"message": "解鎖您的密碼庫"
},

View File

@ -113,7 +113,10 @@
"
>
<div id="duo-frame">
<iframe id="duo_iframe" sandbox="allow-scripts allow-forms allow-same-origin"></iframe>
<iframe
id="duo_iframe"
sandbox="allow-scripts allow-forms allow-same-origin allow-popups allow-popups-to-escape-sandbox"
></iframe>
</div>
<div class="box">
<div class="box-content">

View File

@ -4,6 +4,7 @@ import { EventCollectionService } from "@bitwarden/common/abstractions/event/eve
import { TotpService } from "@bitwarden/common/abstractions/totp.service";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type";
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
@ -65,6 +66,7 @@ describe("ContextMenuClickedHandler", () => {
let autofill: AutofillAction;
let authService: MockProxy<AuthService>;
let cipherService: MockProxy<CipherService>;
let stateService: MockProxy<StateService>;
let totpService: MockProxy<TotpService>;
let eventCollectionService: MockProxy<EventCollectionService>;
let userVerificationService: MockProxy<UserVerificationService>;
@ -77,6 +79,7 @@ describe("ContextMenuClickedHandler", () => {
autofill = jest.fn<Promise<void>, [tab: chrome.tabs.Tab, cipher: CipherView]>();
authService = mock();
cipherService = mock();
stateService = mock();
totpService = mock();
eventCollectionService = mock();
@ -86,6 +89,7 @@ describe("ContextMenuClickedHandler", () => {
autofill,
authService,
cipherService,
stateService,
totpService,
eventCollectionService,
userVerificationService

View File

@ -4,6 +4,7 @@ import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { EventType } from "@bitwarden/common/enums";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { StateFactory } from "@bitwarden/common/platform/factories/state-factory";
import { GlobalState } from "@bitwarden/common/platform/models/domain/global-state";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
@ -63,6 +64,7 @@ export class ContextMenuClickedHandler {
private autofillAction: AutofillAction,
private authService: AuthService,
private cipherService: CipherService,
private stateService: StateService,
private totpService: TotpService,
private eventCollectionService: EventCollectionService,
private userVerificationService: UserVerificationService
@ -114,6 +116,7 @@ export class ContextMenuClickedHandler {
(tab, cipher) => autofillCommand.doAutofillTabWithCipherCommand(tab, cipher),
await authServiceFactory(cachedServices, serviceOptions),
await cipherServiceFactory(cachedServices, serviceOptions),
await stateServiceFactory(cachedServices, serviceOptions),
await totpServiceFactory(cachedServices, serviceOptions),
await eventCollectionServiceFactory(cachedServices, serviceOptions),
await userVerificationServiceFactory(cachedServices, serviceOptions)
@ -224,6 +227,7 @@ export class ContextMenuClickedHandler {
return;
}
this.stateService.setLastActive(new Date().getTime());
switch (info.parentMenuItemId) {
case AUTOFILL_ID:
case AUTOFILL_IDENTITY_ID:

View File

@ -993,11 +993,6 @@
function fillTheElement(el, op) {
var shouldCheck;
if (el && null !== op && void 0 !== op && !(el.disabled || el.a || el.readOnly)) {
const tabURLChanged = !fillScript.savedUrls?.some(url => url.startsWith(window.location.origin))
// Check to make sure the page location didn't change
if (tabURLChanged) {
return;
}
switch (markTheFilling && el.form && !el.form.opfilled && (el.form.opfilled = true),
el.type ? el.type.toLowerCase() : null) {
case 'checkbox':

View File

@ -148,7 +148,7 @@ export default class AutofillService implements AutofillServiceInterface {
throw new Error("Nothing to auto-fill.");
}
let totpPromise: Promise<string> = null;
let totp: string | null = null;
const canAccessPremium = await this.stateService.getCanAccessPremium();
const defaultUriMatch = (await this.stateService.getDefaultUriMatch()) ?? UriMatchType.Domain;
@ -205,15 +205,14 @@ export default class AutofillService implements AutofillServiceInterface {
if (
options.cipher.type !== CipherType.Login ||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
totpPromise ||
totp !== null ||
!options.cipher.login.totp ||
(!canAccessPremium && !options.cipher.organizationUseTotp)
) {
return;
}
totpPromise = this.stateService.getDisableAutoTotpCopy().then((disabled) => {
totp = await this.stateService.getDisableAutoTotpCopy().then((disabled) => {
if (!disabled) {
return this.totpService.getCode(options.cipher.login.totp);
}
@ -224,8 +223,8 @@ export default class AutofillService implements AutofillServiceInterface {
if (didAutofill) {
this.eventCollectionService.collect(EventType.Cipher_ClientAutofilled, options.cipher.id);
if (totpPromise != null) {
return await totpPromise;
if (totp !== null) {
return totp;
} else {
return null;
}

View File

@ -108,7 +108,6 @@ describe("InsertAutofillContentService", () => {
jest.spyOn(insertAutofillContentService as any, "fillingWithinSandboxedIframe");
jest.spyOn(insertAutofillContentService as any, "userCancelledInsecureUrlAutofill");
jest.spyOn(insertAutofillContentService as any, "userCancelledUntrustedIframeAutofill");
jest.spyOn(insertAutofillContentService as any, "tabURLChanged");
jest.spyOn(insertAutofillContentService as any, "runFillScriptAction");
insertAutofillContentService.fillForm(fillScript);
@ -120,7 +119,6 @@ describe("InsertAutofillContentService", () => {
expect(
insertAutofillContentService["userCancelledUntrustedIframeAutofill"]
).not.toHaveBeenCalled();
expect(insertAutofillContentService["tabURLChanged"]).not.toHaveBeenCalled();
expect(insertAutofillContentService["runFillScriptAction"]).not.toHaveBeenCalled();
});
@ -130,7 +128,6 @@ describe("InsertAutofillContentService", () => {
.mockReturnValue(true);
jest.spyOn(insertAutofillContentService as any, "userCancelledInsecureUrlAutofill");
jest.spyOn(insertAutofillContentService as any, "userCancelledUntrustedIframeAutofill");
jest.spyOn(insertAutofillContentService as any, "tabURLChanged");
jest.spyOn(insertAutofillContentService as any, "runFillScriptAction");
insertAutofillContentService.fillForm(fillScript);
@ -142,7 +139,6 @@ describe("InsertAutofillContentService", () => {
expect(
insertAutofillContentService["userCancelledUntrustedIframeAutofill"]
).not.toHaveBeenCalled();
expect(insertAutofillContentService["tabURLChanged"]).not.toHaveBeenCalled();
expect(insertAutofillContentService["runFillScriptAction"]).not.toHaveBeenCalled();
});
@ -154,7 +150,6 @@ describe("InsertAutofillContentService", () => {
.spyOn(insertAutofillContentService as any, "userCancelledInsecureUrlAutofill")
.mockReturnValue(true);
jest.spyOn(insertAutofillContentService as any, "userCancelledUntrustedIframeAutofill");
jest.spyOn(insertAutofillContentService as any, "tabURLChanged");
jest.spyOn(insertAutofillContentService as any, "runFillScriptAction");
insertAutofillContentService.fillForm(fillScript);
@ -164,7 +159,6 @@ describe("InsertAutofillContentService", () => {
expect(
insertAutofillContentService["userCancelledUntrustedIframeAutofill"]
).not.toHaveBeenCalled();
expect(insertAutofillContentService["tabURLChanged"]).not.toHaveBeenCalled();
expect(insertAutofillContentService["runFillScriptAction"]).not.toHaveBeenCalled();
});
@ -178,7 +172,6 @@ describe("InsertAutofillContentService", () => {
jest
.spyOn(insertAutofillContentService as any, "userCancelledUntrustedIframeAutofill")
.mockReturnValue(true);
jest.spyOn(insertAutofillContentService as any, "tabURLChanged").mockReturnValue(false);
jest.spyOn(insertAutofillContentService as any, "runFillScriptAction");
insertAutofillContentService.fillForm(fillScript);
@ -188,31 +181,6 @@ describe("InsertAutofillContentService", () => {
expect(
insertAutofillContentService["userCancelledUntrustedIframeAutofill"]
).toHaveBeenCalled();
expect(insertAutofillContentService["tabURLChanged"]).not.toHaveBeenCalled();
expect(insertAutofillContentService["runFillScriptAction"]).not.toHaveBeenCalled();
});
it("returns early if the page location origin does not match against any of the cipher saved URLs", () => {
jest
.spyOn(insertAutofillContentService as any, "fillingWithinSandboxedIframe")
.mockReturnValue(false);
jest
.spyOn(insertAutofillContentService as any, "userCancelledInsecureUrlAutofill")
.mockReturnValue(false);
jest
.spyOn(insertAutofillContentService as any, "userCancelledUntrustedIframeAutofill")
.mockReturnValue(false);
jest.spyOn(insertAutofillContentService as any, "tabURLChanged").mockReturnValue(true);
jest.spyOn(insertAutofillContentService as any, "runFillScriptAction");
insertAutofillContentService.fillForm(fillScript);
expect(insertAutofillContentService["fillingWithinSandboxedIframe"]).toHaveBeenCalled();
expect(insertAutofillContentService["userCancelledInsecureUrlAutofill"]).toHaveBeenCalled();
expect(
insertAutofillContentService["userCancelledUntrustedIframeAutofill"]
).toHaveBeenCalled();
expect(insertAutofillContentService["tabURLChanged"]).toHaveBeenCalled();
expect(insertAutofillContentService["runFillScriptAction"]).not.toHaveBeenCalled();
});
@ -226,7 +194,6 @@ describe("InsertAutofillContentService", () => {
jest
.spyOn(insertAutofillContentService as any, "userCancelledUntrustedIframeAutofill")
.mockReturnValue(false);
jest.spyOn(insertAutofillContentService as any, "tabURLChanged").mockReturnValue(false);
jest.spyOn(insertAutofillContentService as any, "runFillScriptAction");
insertAutofillContentService.fillForm(fillScript);
@ -236,7 +203,6 @@ describe("InsertAutofillContentService", () => {
expect(
insertAutofillContentService["userCancelledUntrustedIframeAutofill"]
).toHaveBeenCalled();
expect(insertAutofillContentService["tabURLChanged"]).toHaveBeenCalled();
expect(insertAutofillContentService["runFillScriptAction"]).toHaveBeenCalledTimes(3);
expect(insertAutofillContentService["runFillScriptAction"]).toHaveBeenNthCalledWith(
1,

View File

@ -38,8 +38,7 @@ class InsertAutofillContentService implements InsertAutofillContentServiceInterf
!fillScript.script?.length ||
this.fillingWithinSandboxedIframe() ||
this.userCancelledInsecureUrlAutofill(fillScript.savedUrls) ||
this.userCancelledUntrustedIframeAutofill(fillScript) ||
this.tabURLChanged(fillScript.savedUrls)
this.userCancelledUntrustedIframeAutofill(fillScript)
) {
return;
}
@ -47,16 +46,6 @@ class InsertAutofillContentService implements InsertAutofillContentServiceInterf
fillScript.script.forEach(this.runFillScriptAction);
}
/**
* Determines if the page URL no longer matches one of the cipher's savedURL domains
* @param {string[] | null} savedUrls
* @returns {boolean}
* @private
*/
private tabURLChanged(savedUrls?: AutofillScript["savedUrls"]): boolean {
return savedUrls && !savedUrls.some((url) => url.startsWith(window.location.origin));
}
/**
* Identifies if the execution of this script is happening
* within a sandboxed iframe.

View File

@ -103,6 +103,12 @@ import {
VaultExportService,
VaultExportServiceAbstraction,
} from "@bitwarden/exporter/vault-export";
import {
ImportApiServiceAbstraction,
ImportApiService,
ImportServiceAbstraction,
ImportService,
} from "@bitwarden/importer";
import { BrowserOrganizationService } from "../admin-console/services/browser-organization.service";
import { BrowserPolicyService } from "../admin-console/services/browser-policy.service";
@ -172,6 +178,8 @@ export default class MainBackground {
containerService: ContainerService;
auditService: AuditServiceAbstraction;
authService: AuthServiceAbstraction;
importApiService: ImportApiServiceAbstraction;
importService: ImportServiceAbstraction;
exportService: VaultExportServiceAbstraction;
searchService: SearchServiceAbstraction;
notificationsService: NotificationsServiceAbstraction;
@ -527,6 +535,18 @@ export default class MainBackground {
this.userVerificationService
);
this.auditService = new AuditService(this.cryptoFunctionService, this.apiService);
this.importApiService = new ImportApiService(this.apiService);
this.importService = new ImportService(
this.cipherService,
this.folderService,
this.importApiService,
this.i18nService,
this.collectionService,
this.cryptoService
);
this.exportService = new VaultExportService(
this.folderService,
this.cipherService,
@ -575,6 +595,7 @@ export default class MainBackground {
this.platformUtilsService as BrowserPlatformUtilsService,
this.i18nService,
this.notificationsService,
this.stateService,
this.systemService,
this.environmentService,
this.messagingService,
@ -635,6 +656,7 @@ export default class MainBackground {
},
this.authService,
this.cipherService,
this.stateService,
this.totpService,
this.eventCollectionService,
this.userVerificationService

View File

@ -11,6 +11,7 @@ import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
import { AutofillService } from "../autofill/services/abstractions/autofill.service";
import { BrowserApi } from "../platform/browser/browser-api";
import { BrowserPopoutWindowService } from "../platform/popup/abstractions/browser-popout-window.service";
import { BrowserStateService } from "../platform/services/abstractions/browser-state.service";
import { BrowserEnvironmentService } from "../platform/services/browser-environment.service";
import BrowserPlatformUtilsService from "../platform/services/browser-platform-utils.service";
@ -29,6 +30,7 @@ export default class RuntimeBackground {
private platformUtilsService: BrowserPlatformUtilsService,
private i18nService: I18nService,
private notificationsService: NotificationsService,
private stateService: BrowserStateService,
private systemService: SystemService,
private environmentService: BrowserEnvironmentService,
private messagingService: MessagingService,
@ -176,6 +178,7 @@ export default class RuntimeBackground {
switch (msg.sender) {
case "autofiller":
case "autofill_cmd": {
this.stateService.setLastActive(new Date().getTime());
const totpCode = await this.autofillService.doAutoFillActiveTab(
[
{

View File

@ -208,6 +208,7 @@ export class BrowserApi {
name: string,
callback: (message: any, sender: chrome.runtime.MessageSender, response: any) => void
) {
// eslint-disable-next-line no-restricted-syntax
chrome.runtime.onMessage.addListener(callback);
if (BrowserApi.isSafariApi && !BrowserApi.isBackgroundPage(window)) {
@ -219,6 +220,7 @@ export class BrowserApi {
static storageChangeListener(
callback: Parameters<typeof chrome.storage.onChanged.addListener>[0]
) {
// eslint-disable-next-line no-restricted-syntax
chrome.storage.onChanged.addListener(callback);
if (BrowserApi.isSafariApi && !BrowserApi.isBackgroundPage(window)) {

View File

@ -39,7 +39,6 @@ import { SendTypeComponent } from "../tools/popup/send/send-type.component";
import { ExportComponent } from "../tools/popup/settings/export.component";
import { ActionButtonsComponent } from "../vault/popup/components/action-buttons.component";
import { CipherRowComponent } from "../vault/popup/components/cipher-row.component";
import { PasswordRepromptComponent } from "../vault/popup/components/password-reprompt.component";
import { AddEditCustomFieldsComponent } from "../vault/popup/components/vault/add-edit-custom-fields.component";
import { AddEditComponent } from "../vault/popup/components/vault/add-edit.component";
import { AttachmentsComponent } from "../vault/popup/components/vault/attachments.component";
@ -125,7 +124,6 @@ import "../platform/popup/locales";
GeneratorComponent,
PasswordGeneratorHistoryComponent,
PasswordHistoryComponent,
PasswordRepromptComponent,
PopOutComponent,
PremiumComponent,
PrivateModeWarningComponent,

View File

@ -80,11 +80,11 @@ import {
FolderService,
InternalFolderService,
} from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
import { PasswordRepromptService as PasswordRepromptServiceAbstraction } from "@bitwarden/common/vault/abstractions/password-reprompt.service";
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
import { FolderApiService } from "@bitwarden/common/vault/services/folder/folder-api.service";
import { DialogService } from "@bitwarden/components";
import { VaultExportServiceAbstraction } from "@bitwarden/exporter/vault-export";
import { ImportServiceAbstraction } from "@bitwarden/importer";
import { BrowserOrganizationService } from "../../admin-console/services/browser-organization.service";
import { BrowserPolicyService } from "../../admin-console/services/browser-policy.service";
@ -103,7 +103,6 @@ import BrowserMessagingService from "../../platform/services/browser-messaging.s
import { BrowserStateService } from "../../platform/services/browser-state.service";
import { BrowserSendService } from "../../services/browser-send.service";
import { BrowserSettingsService } from "../../services/browser-settings.service";
import { PasswordRepromptService } from "../../vault/popup/services/password-reprompt.service";
import { BrowserFolderService } from "../../vault/services/browser-folder.service";
import { VaultFilterService } from "../../vault/services/vault-filter.service";
@ -368,6 +367,11 @@ function getBgService<T>(service: keyof MainBackground) {
useFactory: getBgService<AutofillService>("autofillService"),
deps: [],
},
{
provide: ImportServiceAbstraction,
useFactory: getBgService<ImportServiceAbstraction>("importService"),
deps: [],
},
{
provide: VaultExportServiceAbstraction,
useFactory: getBgService<VaultExportServiceAbstraction>("exportService"),
@ -403,7 +407,6 @@ function getBgService<T>(service: keyof MainBackground) {
useFactory: getBgService<ConsoleLogService>("logService"),
deps: [],
},
{ provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },
{
provide: OrganizationService,
useFactory: (stateService: StateServiceAbstraction) => {

View File

@ -0,0 +1,26 @@
import { ImportApiService, ImportApiServiceAbstraction } from "@bitwarden/importer";
import {
ApiServiceInitOptions,
apiServiceFactory,
} from "../../../platform/background/service-factories/api-service.factory";
import {
FactoryOptions,
CachedServices,
factory,
} from "../../../platform/background/service-factories/factory-options";
export type ImportApiServiceInitOptions = FactoryOptions & ApiServiceInitOptions;
type ServiceCache = { importApiService?: ImportApiServiceAbstraction } & CachedServices;
export function importApiServiceFactory(
cache: ServiceCache,
opts: ImportApiServiceInitOptions
): Promise<ImportApiServiceAbstraction> {
return factory(
cache,
"importApiService",
opts,
async () => new ImportApiService(await apiServiceFactory(cache, opts))
);
}

View File

@ -0,0 +1,61 @@
import { ImportService, ImportServiceAbstraction } from "@bitwarden/importer";
import {
cryptoServiceFactory,
CryptoServiceInitOptions,
} from "../../../platform/background/service-factories/crypto-service.factory";
import {
CachedServices,
factory,
FactoryOptions,
} from "../../../platform/background/service-factories/factory-options";
import {
i18nServiceFactory,
I18nServiceInitOptions,
} from "../../../platform/background/service-factories/i18n-service.factory";
import {
cipherServiceFactory,
CipherServiceInitOptions,
} from "../../../vault/background/service_factories/cipher-service.factory";
import {
collectionServiceFactory,
CollectionServiceInitOptions,
} from "../../../vault/background/service_factories/collection-service.factory";
import {
folderServiceFactory,
FolderServiceInitOptions,
} from "../../../vault/background/service_factories/folder-service.factory";
import { importApiServiceFactory, ImportApiServiceInitOptions } from "./import-api-service.factory";
type ImportServiceFactoryOptions = FactoryOptions;
export type ImportServiceInitOptions = ImportServiceFactoryOptions &
CipherServiceInitOptions &
FolderServiceInitOptions &
ImportApiServiceInitOptions &
I18nServiceInitOptions &
CollectionServiceInitOptions &
CryptoServiceInitOptions;
export function importServiceFactory(
cache: {
importService?: ImportServiceAbstraction;
} & CachedServices,
opts: ImportServiceInitOptions
): Promise<ImportServiceAbstraction> {
return factory(
cache,
"importService",
opts,
async () =>
new ImportService(
await cipherServiceFactory(cache, opts),
await folderServiceFactory(cache, opts),
await importApiServiceFactory(cache, opts),
await i18nServiceFactory(cache, opts),
await collectionServiceFactory(cache, opts),
await cryptoServiceFactory(cache, opts)
)
);
}

View File

@ -6,10 +6,10 @@ import { EventType } from "@bitwarden/common/enums";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { PasswordRepromptService } from "@bitwarden/common/vault/abstractions/password-reprompt.service";
import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type";
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import { PasswordRepromptService } from "@bitwarden/vault";
@Component({
selector: "app-action-buttons",

View File

@ -1,55 +0,0 @@
<div class="modal fade" role="dialog" aria-modal="true">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<form class="modal-content" #form (ngSubmit)="submit()">
<div class="modal-body">
<div class="box">
<h1 class="box-header">{{ "passwordConfirmation" | i18n }}</h1>
<div class="box-content">
<div class="box-content-row box-content-row-flex" appBoxRow>
<div class="row-main">
<label for="masterPassword">{{ "masterPass" | i18n }}</label>
<input
id="masterPassword"
type="{{ showPassword ? 'text' : 'password' }}"
name="MasterPassword"
aria-describedby="masterPasswordHelp"
class="monospaced"
[(ngModel)]="masterPassword"
required
appAutofocus
/>
</div>
<div class="action-buttons">
<button
type="button"
class="row-btn"
appStopClick
appA11yTitle="{{ 'toggleVisibility' | i18n }}"
(click)="togglePassword()"
[attr.aria-pressed]="showPassword"
>
<i
class="bwi bwi-lg"
aria-hidden="true"
[ngClass]="{ 'bwi-eye': !showPassword, 'bwi-eye-slash': showPassword }"
></i>
</button>
</div>
</div>
</div>
<div id="masterPasswordHelp" class="box-footer">
{{ "passwordConfirmationDesc" | i18n }}
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary btn-submit">
<span>{{ "ok" | i18n }}</span>
</button>
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">
{{ "cancel" | i18n }}
</button>
</div>
</form>
</div>
</div>

View File

@ -1,8 +0,0 @@
import { Component } from "@angular/core";
import { PasswordRepromptComponent as BasePasswordRepromptComponent } from "@bitwarden/angular/vault/components/password-reprompt.component";
@Component({
templateUrl: "password-reprompt.component.html",
})
export class PasswordRepromptComponent extends BasePasswordRepromptComponent {}

View File

@ -17,10 +17,10 @@ import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.s
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service";
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
import { PasswordRepromptService } from "@bitwarden/common/vault/abstractions/password-reprompt.service";
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
import { LoginUriView } from "@bitwarden/common/vault/models/view/login-uri.view";
import { DialogService } from "@bitwarden/components";
import { PasswordRepromptService } from "@bitwarden/vault";
import { BrowserApi } from "../../../../platform/browser/browser-api";
import { PopupUtilsService } from "../../../../popup/services/popup-utils.service";

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