mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-14 10:26:19 +01:00
Merge branch 'main' into pm-13868-remove-upgrade-password-manager-feature-flag
This commit is contained in:
commit
340f689064
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
@ -122,6 +122,9 @@ apps/cli/src/locales/en/messages.json
|
||||
apps/desktop/src/locales/en/messages.json
|
||||
apps/web/src/locales/en/messages.json
|
||||
|
||||
## Ssh agent temporary co-codeowner
|
||||
apps/desktop/desktop_native/core/src/ssh_agent @bitwarden/team-platform-dev @bitwarden/wg-ssh-keys
|
||||
|
||||
## BRE team owns these workflows ##
|
||||
.github/workflows/brew-bump-desktop.yml @bitwarden/dept-bre
|
||||
.github/workflows/deploy-web.yml @bitwarden/dept-bre
|
||||
|
66
.github/renovate.json
vendored
66
.github/renovate.json
vendored
@ -41,16 +41,12 @@
|
||||
},
|
||||
{
|
||||
"matchPackageNames": [
|
||||
"@ngtools/webpack",
|
||||
"base64-loader",
|
||||
"buffer",
|
||||
"bufferutil",
|
||||
"copy-webpack-plugin",
|
||||
"core-js",
|
||||
"css-loader",
|
||||
"html-loader",
|
||||
"html-webpack-injector",
|
||||
"html-webpack-plugin",
|
||||
"mini-css-extract-plugin",
|
||||
"ngx-infinite-scroll",
|
||||
"postcss",
|
||||
@ -60,20 +56,15 @@
|
||||
"sass-loader",
|
||||
"style-loader",
|
||||
"ts-loader",
|
||||
"tsconfig-paths-webpack-plugin",
|
||||
"url",
|
||||
"util",
|
||||
"webpack",
|
||||
"webpack-cli",
|
||||
"webpack-dev-server",
|
||||
"webpack-node-externals"
|
||||
"util"
|
||||
],
|
||||
"description": "Admin Console owned dependencies",
|
||||
"commitMessagePrefix": "[deps] AC:",
|
||||
"reviewers": ["team:team-admin-console-dev"]
|
||||
},
|
||||
{
|
||||
"matchPackageNames": ["@types/node-ipc", "node-ipc", "qrious", "regedit"],
|
||||
"matchPackageNames": ["qrious"],
|
||||
"description": "Auth owned dependencies",
|
||||
"commitMessagePrefix": "[deps] Auth:",
|
||||
"reviewers": ["team:team-auth-dev"]
|
||||
@ -110,19 +101,43 @@
|
||||
},
|
||||
{
|
||||
"matchPackageNames": [
|
||||
"@types/argon2-browser",
|
||||
"@babel/core",
|
||||
"@babel/preset-env",
|
||||
"@electron/notarize",
|
||||
"@electron/rebuild",
|
||||
"@ngtools/webpack",
|
||||
"@types/chrome",
|
||||
"@types/firefox-webext-browser",
|
||||
"@types/glob",
|
||||
"@types/jquery",
|
||||
"@types/lowdb",
|
||||
"@types/node",
|
||||
"@types/node-forge",
|
||||
"argon2",
|
||||
"argon2-browser",
|
||||
"big-integer",
|
||||
"@types/node-ipc",
|
||||
"@yao-pkg",
|
||||
"babel-loader",
|
||||
"browserslist",
|
||||
"copy-webpack-plugin",
|
||||
"electron",
|
||||
"electron-builder",
|
||||
"electron-log",
|
||||
"electron-reload",
|
||||
"electron-store",
|
||||
"electron-updater",
|
||||
"html-webpack-injector",
|
||||
"html-webpack-plugin",
|
||||
"lowdb",
|
||||
"node-forge",
|
||||
"node-ipc",
|
||||
"pkg",
|
||||
"rxjs",
|
||||
"tsconfig-paths-webpack-plugin",
|
||||
"type-fest",
|
||||
"typescript"
|
||||
"typescript",
|
||||
"webpack",
|
||||
"webpack-cli",
|
||||
"webpack-dev-server",
|
||||
"webpack-node-externals"
|
||||
],
|
||||
"description": "Platform owned dependencies",
|
||||
"commitMessagePrefix": "[deps] Platform:",
|
||||
@ -197,19 +212,11 @@
|
||||
},
|
||||
{
|
||||
"matchPackageNames": [
|
||||
"@electron/notarize",
|
||||
"@electron/rebuild",
|
||||
"@microsoft/signalr-protocol-msgpack",
|
||||
"@microsoft/signalr",
|
||||
"@types/jsdom",
|
||||
"@types/papaparse",
|
||||
"@types/zxcvbn",
|
||||
"electron-builder",
|
||||
"electron-log",
|
||||
"electron-reload",
|
||||
"electron-store",
|
||||
"electron-updater",
|
||||
"electron",
|
||||
"jsdom",
|
||||
"jszip",
|
||||
"oidc-client-ts",
|
||||
@ -231,7 +238,6 @@
|
||||
"@types/koa__router",
|
||||
"@types/koa-bodyparser",
|
||||
"@types/koa-json",
|
||||
"@types/lowdb",
|
||||
"@types/lunr",
|
||||
"@types/node-fetch",
|
||||
"@types/proper-lockfile",
|
||||
@ -244,19 +250,23 @@
|
||||
"koa",
|
||||
"koa-bodyparser",
|
||||
"koa-json",
|
||||
"lowdb",
|
||||
"lunr",
|
||||
"multer",
|
||||
"node-fetch",
|
||||
"open",
|
||||
"pkg",
|
||||
"proper-lockfile",
|
||||
"qrcode-parser"
|
||||
],
|
||||
"description": "Vault owned dependencies",
|
||||
"commitMessagePrefix": "[deps] Vault:",
|
||||
"reviewers": ["team:team-vault-dev"]
|
||||
},
|
||||
{
|
||||
"matchPackageNames": ["@types/argon2-browser", "argon2", "argon2-browser", "big-integer"],
|
||||
"description": "Key Management owned dependencies",
|
||||
"commitMessagePrefix": "[deps] KM:",
|
||||
"reviewers": ["team:team-key-management-dev"]
|
||||
}
|
||||
],
|
||||
"ignoreDeps": ["@types/koa-bodyparser", "bootstrap", "node-ipc", "node", "npm", "regedit"]
|
||||
"ignoreDeps": ["@types/koa-bodyparser", "bootstrap", "node-ipc", "node", "npm"]
|
||||
}
|
||||
|
2
.github/workflows/auto-branch-updater.yml
vendored
2
.github/workflows/auto-branch-updater.yml
vendored
@ -28,7 +28,7 @@ jobs:
|
||||
run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: 'eu-web-${{ steps.setup.outputs.branch }}'
|
||||
fetch-depth: 0
|
||||
|
61
.github/workflows/build-browser.yml
vendored
61
.github/workflows/build-browser.yml
vendored
@ -1,7 +1,8 @@
|
||||
name: Build Browser
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize]
|
||||
branches-ignore:
|
||||
- 'l10n_master'
|
||||
- 'cf-pages'
|
||||
@ -33,16 +34,24 @@ defaults:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
check-run:
|
||||
name: Check PR run
|
||||
uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main
|
||||
|
||||
setup:
|
||||
name: Setup
|
||||
runs-on: ubuntu-22.04
|
||||
needs:
|
||||
- check-run
|
||||
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@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Get Package Version
|
||||
id: gen_vars
|
||||
@ -71,8 +80,10 @@ jobs:
|
||||
run:
|
||||
working-directory: apps/browser
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Testing locales - extName length
|
||||
run: |
|
||||
@ -109,11 +120,13 @@ jobs:
|
||||
_BUILD_NUMBER: ${{ needs.setup.outputs.adj_build_number }}
|
||||
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -163,10 +176,6 @@ jobs:
|
||||
run: npm run dist:mv3
|
||||
working-directory: browser-source/apps/browser
|
||||
|
||||
- name: Build Chrome Manifest v3 Beta
|
||||
run: npm run dist:chrome:beta
|
||||
working-directory: browser-source/apps/browser
|
||||
|
||||
- name: Upload Opera artifact
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
@ -188,13 +197,6 @@ jobs:
|
||||
path: browser-source/apps/browser/dist/dist-chrome-mv3.zip
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Upload Chrome MV3 Beta artifact (DO NOT USE FOR PROD)
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: DO-NOT-USE-FOR-PROD-dist-chrome-MV3-beta-${{ env._BUILD_NUMBER }}.zip
|
||||
path: browser-source/apps/browser/dist/dist-chrome-mv3-beta.zip
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Upload Firefox artifact
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
@ -240,11 +242,13 @@ jobs:
|
||||
_BUILD_NUMBER: ${{ needs.setup.outputs.adj_build_number }}
|
||||
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -347,14 +351,16 @@ jobs:
|
||||
|
||||
crowdin-push:
|
||||
name: Crowdin Push
|
||||
if: github.ref == 'refs/heads/main'
|
||||
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main'
|
||||
runs-on: ubuntu-22.04
|
||||
needs:
|
||||
- build
|
||||
- build-safari
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@ -392,7 +398,10 @@ jobs:
|
||||
- crowdin-push
|
||||
steps:
|
||||
- name: Check if any job failed
|
||||
if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc') && contains(needs.*.result, 'failure')
|
||||
if: |
|
||||
github.event_name != 'pull_request_target'
|
||||
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc-browser')
|
||||
&& contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
|
||||
- name: Login to Azure - Prod Subscription
|
||||
|
43
.github/workflows/build-cli.yml
vendored
43
.github/workflows/build-cli.yml
vendored
@ -1,7 +1,8 @@
|
||||
name: Build CLI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize]
|
||||
branches-ignore:
|
||||
- 'l10n_master'
|
||||
- 'cf-pages'
|
||||
@ -34,15 +35,23 @@ defaults:
|
||||
working-directory: apps/cli
|
||||
|
||||
jobs:
|
||||
check-run:
|
||||
name: Check PR run
|
||||
uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main
|
||||
|
||||
setup:
|
||||
name: Setup
|
||||
runs-on: ubuntu-22.04
|
||||
needs:
|
||||
- check-run
|
||||
outputs:
|
||||
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@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Get Package Version
|
||||
id: retrieve-package-version
|
||||
@ -58,7 +67,6 @@ jobs:
|
||||
NODE_VERSION=${NODE_NVMRC/v/''}
|
||||
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
|
||||
cli:
|
||||
name: "${{ matrix.os.base }} - ${{ matrix.license_type.readable }}"
|
||||
strategy:
|
||||
@ -82,8 +90,10 @@ jobs:
|
||||
_WIN_PKG_FETCH_VERSION: 20.11.1
|
||||
_WIN_PKG_VERSION: 3.5
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Setup Unix Vars
|
||||
run: |
|
||||
@ -92,7 +102,7 @@ jobs:
|
||||
awk '{print tolower($0)}')" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -160,8 +170,10 @@ jobs:
|
||||
_WIN_PKG_FETCH_VERSION: 20.11.1
|
||||
_WIN_PKG_VERSION: 3.5
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Setup Windows builder
|
||||
run: |
|
||||
@ -170,7 +182,7 @@ jobs:
|
||||
choco install nasm --no-progress
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -310,8 +322,10 @@ jobs:
|
||||
env:
|
||||
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Print environment
|
||||
run: |
|
||||
@ -389,7 +403,10 @@ jobs:
|
||||
steps:
|
||||
- name: Check if any job failed
|
||||
working-directory: ${{ github.workspace }}
|
||||
if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc') && contains(needs.*.result, 'failure')
|
||||
if: |
|
||||
github.event_name != 'pull_request_target'
|
||||
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc-cli')
|
||||
&& contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
|
||||
- name: Login to Azure - Prod Subscription
|
||||
|
126
.github/workflows/build-desktop.yml
vendored
126
.github/workflows/build-desktop.yml
vendored
@ -1,7 +1,8 @@
|
||||
name: Build Desktop
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize]
|
||||
branches-ignore:
|
||||
- 'l10n_master'
|
||||
- 'cf-pages'
|
||||
@ -32,12 +33,20 @@ defaults:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
check-run:
|
||||
name: Check PR run
|
||||
uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main
|
||||
|
||||
electron-verify:
|
||||
name: Verify Electron Version
|
||||
runs-on: ubuntu-22.04
|
||||
needs:
|
||||
- check-run
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Verify
|
||||
run: |
|
||||
@ -54,6 +63,8 @@ jobs:
|
||||
setup:
|
||||
name: Setup
|
||||
runs-on: ubuntu-22.04
|
||||
needs:
|
||||
- check-run
|
||||
outputs:
|
||||
package_version: ${{ steps.retrieve-version.outputs.package_version }}
|
||||
release_channel: ${{ steps.release-channel.outputs.channel }}
|
||||
@ -65,8 +76,10 @@ jobs:
|
||||
run:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Get Package Version
|
||||
id: retrieve-version
|
||||
@ -138,11 +151,13 @@ jobs:
|
||||
run:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -168,7 +183,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
@ -238,7 +253,8 @@ jobs:
|
||||
windows:
|
||||
name: Windows Build
|
||||
runs-on: windows-2022
|
||||
needs: setup
|
||||
needs:
|
||||
- setup
|
||||
defaults:
|
||||
run:
|
||||
shell: pwsh
|
||||
@ -248,11 +264,13 @@ jobs:
|
||||
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
|
||||
NODE_OPTIONS: --max_old_space_size=4096
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -298,7 +316,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
@ -447,7 +465,8 @@ jobs:
|
||||
macos-build:
|
||||
name: MacOS Build
|
||||
runs-on: macos-13
|
||||
needs: setup
|
||||
needs:
|
||||
- setup
|
||||
env:
|
||||
_PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
|
||||
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
|
||||
@ -456,11 +475,13 @@ jobs:
|
||||
run:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -483,14 +504,14 @@ jobs:
|
||||
|
||||
- name: Cache Build
|
||||
id: build-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Cache Safari
|
||||
id: safari-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
@ -583,7 +604,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
@ -622,11 +643,13 @@ jobs:
|
||||
run:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -649,14 +672,14 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
@ -749,7 +772,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
@ -841,11 +864,13 @@ jobs:
|
||||
run:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -868,14 +893,14 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
@ -975,7 +1000,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
@ -1033,9 +1058,8 @@ jobs:
|
||||
- name: Deploy to TestFlight
|
||||
id: testflight-deploy
|
||||
if: |
|
||||
(github.ref == 'refs/heads/main'
|
||||
|| github.ref == 'refs/heads/rc'
|
||||
|| github.ref == 'refs/heads/hotfix-rc-desktop')
|
||||
github.event_name != 'pull_request_target'
|
||||
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc-desktop')
|
||||
env:
|
||||
APP_STORE_CONNECT_TEAM_ISSUER: ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }}
|
||||
APP_STORE_CONNECT_AUTH_KEY: 6TV9MKN3GP
|
||||
@ -1050,9 +1074,8 @@ jobs:
|
||||
- name: Post message to a Slack channel
|
||||
id: slack-message
|
||||
if: |
|
||||
(github.ref == 'refs/heads/main'
|
||||
|| github.ref == 'refs/heads/rc'
|
||||
|| github.ref == 'refs/heads/hotfix-rc-desktop')
|
||||
github.event_name != 'pull_request_target'
|
||||
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc-desktop')
|
||||
uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0
|
||||
with:
|
||||
channel-id: C074F5UESQ0
|
||||
@ -1088,11 +1111,13 @@ jobs:
|
||||
run:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -1110,14 +1135,14 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
@ -1210,7 +1235,7 @@ jobs:
|
||||
working-directory: ./
|
||||
|
||||
- name: Cache Native Module
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
@ -1279,8 +1304,10 @@ jobs:
|
||||
- macos-package-mas
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@ -1323,7 +1350,10 @@ jobs:
|
||||
- crowdin-push
|
||||
steps:
|
||||
- name: Check if any job failed
|
||||
if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc') && contains(needs.*.result, 'failure')
|
||||
if: |
|
||||
github.event_name != 'pull_request_target'
|
||||
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc-desktop')
|
||||
&& contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
|
||||
- name: Login to Azure - Prod Subscription
|
||||
|
53
.github/workflows/build-web.yml
vendored
53
.github/workflows/build-web.yml
vendored
@ -1,7 +1,8 @@
|
||||
name: Build Web
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize]
|
||||
branches-ignore:
|
||||
- 'l10n_master'
|
||||
- 'cf-pages'
|
||||
@ -36,15 +37,23 @@ env:
|
||||
_AZ_REGISTRY: bitwardenprod.azurecr.io
|
||||
|
||||
jobs:
|
||||
check-run:
|
||||
name: Check PR run
|
||||
uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main
|
||||
|
||||
setup:
|
||||
name: Setup
|
||||
runs-on: ubuntu-22.04
|
||||
needs:
|
||||
- check-run
|
||||
outputs:
|
||||
version: ${{ steps.version.outputs.value }}
|
||||
node_version: ${{ steps.retrieve-node-version.outputs.node_version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Get GitHub sha as version
|
||||
id: version
|
||||
@ -60,7 +69,8 @@ jobs:
|
||||
build-artifacts:
|
||||
name: Build artifacts
|
||||
runs-on: ubuntu-22.04
|
||||
needs: setup
|
||||
needs:
|
||||
- setup
|
||||
env:
|
||||
_VERSION: ${{ needs.setup.outputs.version }}
|
||||
_NODE_VERSION: ${{ needs.setup.outputs.node_version }}
|
||||
@ -89,11 +99,13 @@ jobs:
|
||||
git_metadata: true
|
||||
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -155,8 +167,10 @@ jobs:
|
||||
env:
|
||||
_VERSION: ${{ needs.setup.outputs.version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Check Branch to Publish
|
||||
env:
|
||||
@ -249,12 +263,15 @@ jobs:
|
||||
|
||||
crowdin-push:
|
||||
name: Crowdin Push
|
||||
if: github.ref == 'refs/heads/main'
|
||||
needs: build-artifacts
|
||||
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main'
|
||||
needs:
|
||||
- build-artifacts
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@ -282,9 +299,10 @@ jobs:
|
||||
|
||||
trigger-web-vault-deploy:
|
||||
name: Trigger web vault deploy
|
||||
if: github.ref == 'refs/heads/main'
|
||||
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main'
|
||||
runs-on: ubuntu-22.04
|
||||
needs: build-artifacts
|
||||
needs:
|
||||
- build-artifacts
|
||||
steps:
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@ -326,7 +344,10 @@ jobs:
|
||||
- trigger-web-vault-deploy
|
||||
steps:
|
||||
- name: Check if any job failed
|
||||
if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc') && contains(needs.*.result, 'failure')
|
||||
if: |
|
||||
github.event_name != 'pull_request_target'
|
||||
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc-web')
|
||||
&& contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
|
||||
- name: Login to Azure - Prod Subscription
|
||||
|
8
.github/workflows/chromatic.yml
vendored
8
.github/workflows/chromatic.yml
vendored
@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
@ -37,13 +37,13 @@ jobs:
|
||||
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.retrieve-node-version.outputs.node_version }}
|
||||
|
||||
- name: Cache NPM
|
||||
id: npm-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: "~/.npm"
|
||||
key: ${{ runner.os }}-npm-chromatic-${{ hashFiles('**/package-lock.json') }}
|
||||
@ -56,7 +56,7 @@ jobs:
|
||||
run: npm run build-storybook:ci
|
||||
|
||||
- name: Publish to Chromatic
|
||||
uses: chromaui/action@bbbf288765438d5fd2be13e1d80d542a39e74108 # v11.12.1
|
||||
uses: chromaui/action@dd2eecb9bef44f54774581f4163b0327fd8cf607 # v11.16.3
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
||||
|
2
.github/workflows/crowdin-pull.yml
vendored
2
.github/workflows/crowdin-pull.yml
vendored
@ -22,7 +22,7 @@ jobs:
|
||||
crowdin_project_id: "308189"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
|
4
.github/workflows/lint.yml
vendored
4
.github/workflows/lint.yml
vendored
@ -20,7 +20,7 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Lint filenames (no capital characters)
|
||||
run: |
|
||||
@ -47,7 +47,7 @@ jobs:
|
||||
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
|
4
.github/workflows/locales-lint.yml
vendored
4
.github/workflows/locales-lint.yml
vendored
@ -14,9 +14,9 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: Checkout base branch repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.base.sha }}
|
||||
path: base
|
||||
|
6
.github/workflows/publish-cli.yml
vendored
6
.github/workflows/publish-cli.yml
vendored
@ -91,7 +91,7 @@ jobs:
|
||||
_PKG_VERSION: ${{ needs.setup.outputs.release-version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@ -128,7 +128,7 @@ jobs:
|
||||
_PKG_VERSION: ${{ needs.setup.outputs.release-version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@ -168,7 +168,7 @@ jobs:
|
||||
_PKG_VERSION: ${{ needs.setup.outputs.release-version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
|
4
.github/workflows/publish-desktop.yml
vendored
4
.github/workflows/publish-desktop.yml
vendored
@ -183,7 +183,7 @@ jobs:
|
||||
_RELEASE_TAG: ${{ needs.setup.outputs.tag-name }}
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@ -227,7 +227,7 @@ jobs:
|
||||
_RELEASE_TAG: ${{ needs.setup.outputs.tag-name }}
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Print Environment
|
||||
run: |
|
||||
|
4
.github/workflows/publish-web.yml
vendored
4
.github/workflows/publish-web.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
||||
tag_version: ${{ steps.version.outputs.tag }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Branch check
|
||||
if: ${{ inputs.publish_type != 'Dry Run' }}
|
||||
@ -66,7 +66,7 @@ jobs:
|
||||
echo "Github Release Option: $_RELEASE_OPTION"
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
########## ACR ##########
|
||||
- name: Login to Azure - PROD Subscription
|
||||
|
4
.github/workflows/release-browser.yml
vendored
4
.github/workflows/release-browser.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
||||
release-version: ${{ steps.version.outputs.version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Branch check
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
||||
@ -55,7 +55,7 @@ jobs:
|
||||
needs: setup
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Testing locales - extName length
|
||||
run: |
|
||||
|
2
.github/workflows/release-cli.yml
vendored
2
.github/workflows/release-cli.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
||||
release-version: ${{ steps.version.outputs.version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Branch check
|
||||
if: ${{ inputs.release_type != 'Dry Run' }}
|
||||
|
36
.github/workflows/release-desktop-beta.yml
vendored
36
.github/workflows/release-desktop-beta.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
||||
node_version: ${{ steps.retrieve-node-version.outputs.node_version }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Branch check
|
||||
run: |
|
||||
@ -124,12 +124,12 @@ jobs:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ needs.setup.outputs.branch-name }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -214,12 +214,12 @@ jobs:
|
||||
NODE_OPTIONS: --max_old_space_size=4096
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ needs.setup.outputs.branch-name }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -403,12 +403,12 @@ jobs:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ needs.setup.outputs.branch-name }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -426,14 +426,14 @@ jobs:
|
||||
|
||||
- name: Cache Build
|
||||
id: build-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Cache Safari
|
||||
id: safari-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
@ -537,12 +537,12 @@ jobs:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ needs.setup.outputs.branch-name }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -560,14 +560,14 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
@ -750,12 +750,12 @@ jobs:
|
||||
working-directory: apps/desktop
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ needs.setup.outputs.branch-name }}
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -773,14 +773,14 @@ jobs:
|
||||
|
||||
- name: Get Build Cache
|
||||
id: build-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/desktop/build
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-build
|
||||
|
||||
- name: Setup Safari Cache
|
||||
id: safari-cache
|
||||
uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
|
||||
with:
|
||||
path: apps/browser/dist/Safari
|
||||
key: ${{ runner.os }}-${{ github.run_id }}-safari-extension
|
||||
@ -1010,7 +1010,7 @@ jobs:
|
||||
- release
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Setup git config
|
||||
run: |
|
||||
|
2
.github/workflows/release-desktop.yml
vendored
2
.github/workflows/release-desktop.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
||||
release-channel: ${{ steps.release-channel.outputs.channel }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Branch check
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
||||
|
2
.github/workflows/release-web.yml
vendored
2
.github/workflows/release-web.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
||||
tag_version: ${{ steps.version.outputs.tag }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Branch check
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
||||
|
@ -1,124 +1,130 @@
|
||||
name: Version Bump
|
||||
name: Repository management
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
task:
|
||||
default: "Version Bump"
|
||||
description: "Task to execute"
|
||||
options:
|
||||
- "Version Bump"
|
||||
- "Version Bump and Cut rc"
|
||||
required: true
|
||||
type: choice
|
||||
bump_browser:
|
||||
description: "Bump Browser?"
|
||||
description: "Bump Browser version?"
|
||||
type: boolean
|
||||
default: false
|
||||
bump_cli:
|
||||
description: "Bump CLI?"
|
||||
description: "Bump CLI version?"
|
||||
type: boolean
|
||||
default: false
|
||||
bump_desktop:
|
||||
description: "Bump Desktop?"
|
||||
description: "Bump Desktop version?"
|
||||
type: boolean
|
||||
default: false
|
||||
bump_web:
|
||||
description: "Bump Web?"
|
||||
description: "Bump Web version?"
|
||||
type: boolean
|
||||
default: false
|
||||
target_ref:
|
||||
default: "main"
|
||||
description: "Branch/Tag to target for cut"
|
||||
required: true
|
||||
type: string
|
||||
version_number_override:
|
||||
description: "New version override (leave blank for automatic calculation, example: '2024.1.0')"
|
||||
required: false
|
||||
type: string
|
||||
cut_rc_branch:
|
||||
description: "Cut RC branch?"
|
||||
default: true
|
||||
type: boolean
|
||||
enable_slack_notification:
|
||||
description: "Enable Slack notifications for upcoming release?"
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
|
||||
jobs:
|
||||
setup:
|
||||
name: Setup
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
branch: ${{ steps.set-branch.outputs.branch }}
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
steps:
|
||||
- name: Set branch
|
||||
id: set-branch
|
||||
env:
|
||||
TASK: ${{ inputs.task }}
|
||||
run: |
|
||||
if [[ "$TASK" == "Version Bump" ]]; then
|
||||
BRANCH="none"
|
||||
elif [[ "$TASK" == "Version Bump and Cut rc" ]]; then
|
||||
BRANCH="rc"
|
||||
fi
|
||||
|
||||
echo "branch=$BRANCH" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Generate GH App token
|
||||
uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 # v1.11.0
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ secrets.BW_GHAPP_ID }}
|
||||
private-key: ${{ secrets.BW_GHAPP_KEY }}
|
||||
|
||||
|
||||
cut_branch:
|
||||
name: Cut branch
|
||||
if: ${{ needs.setup.outputs.branch == 'rc' }}
|
||||
needs: setup
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Check out target ref
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ inputs.target_ref }}
|
||||
token: ${{ needs.setup.outputs.token }}
|
||||
|
||||
- name: Check if ${{ needs.setup.outputs.branch }} branch exists
|
||||
env:
|
||||
BRANCH_NAME: ${{ needs.setup.outputs.branch }}
|
||||
run: |
|
||||
if [[ $(git ls-remote --heads origin $BRANCH_NAME) ]]; then
|
||||
echo "$BRANCH_NAME already exists! Please delete $BRANCH_NAME before running again." >> $GITHUB_STEP_SUMMARY
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Cut branch
|
||||
env:
|
||||
BRANCH_NAME: ${{ needs.setup.outputs.branch }}
|
||||
run: |
|
||||
git switch --quiet --create $BRANCH_NAME
|
||||
git push --quiet --set-upstream origin $BRANCH_NAME
|
||||
|
||||
|
||||
bump_version:
|
||||
name: Bump Version
|
||||
runs-on: ubuntu-22.04
|
||||
if: ${{ always() }}
|
||||
runs-on: ubuntu-24.04
|
||||
needs:
|
||||
- cut_branch
|
||||
- setup
|
||||
outputs:
|
||||
version_browser: ${{ steps.set-final-version-output.outputs.version_browser }}
|
||||
version_cli: ${{ steps.set-final-version-output.outputs.version_cli }}
|
||||
version_desktop: ${{ steps.set-final-version-output.outputs.version_desktop }}
|
||||
version_web: ${{ steps.set-final-version-output.outputs.version_web }}
|
||||
steps:
|
||||
- name: Validate version input
|
||||
- name: Validate version input format
|
||||
if: ${{ inputs.version_number_override != '' }}
|
||||
uses: bitwarden/gh-actions/version-check@main
|
||||
with:
|
||||
version: ${{ inputs.version_number_override }}
|
||||
|
||||
- name: Slack Notification Check
|
||||
run: |
|
||||
if [[ "${{ inputs.enable_slack_notification }}" == true ]]; then
|
||||
echo "Slack notifications enabled."
|
||||
else
|
||||
echo "Slack notifications disabled."
|
||||
fi
|
||||
|
||||
- name: Checkout Branch
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out branch
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: main
|
||||
token: ${{ needs.setup.outputs.token }}
|
||||
|
||||
- name: Check if RC branch exists
|
||||
if: ${{ inputs.cut_rc_branch == true }}
|
||||
- name: Configure Git
|
||||
run: |
|
||||
remote_rc_branch_check=$(git ls-remote --heads origin rc | wc -l)
|
||||
if [[ "${remote_rc_branch_check}" -gt 0 ]]; then
|
||||
echo "Remote RC branch exists."
|
||||
echo "Please delete current RC branch before running again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Retrieve secrets
|
||||
id: retrieve-secrets
|
||||
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
||||
with:
|
||||
keyvault: "bitwarden-ci"
|
||||
secrets: "github-gpg-private-key,
|
||||
github-gpg-private-key-passphrase"
|
||||
|
||||
- name: Import GPG key
|
||||
uses: crazy-max/ghaction-import-gpg@01dd5d3ca463c7f10f7f4f7b4f177225ac661ee4 # v6.1.0
|
||||
with:
|
||||
gpg_private_key: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key }}
|
||||
passphrase: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key-passphrase }}
|
||||
git_user_signingkey: true
|
||||
git_commit_gpgsign: true
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --local user.email "106330231+bitwarden-devops-bot@users.noreply.github.com"
|
||||
git config --local user.name "bitwarden-devops-bot"
|
||||
|
||||
- name: Create Version Branch
|
||||
id: create-branch
|
||||
run: |
|
||||
CLIENTS=()
|
||||
if [[ ${{ inputs.bump_browser }} == true ]]; then
|
||||
CLIENTS+=("browser")
|
||||
fi
|
||||
if [[ ${{ inputs.bump_cli }} == true ]]; then
|
||||
CLIENTS+=("cli")
|
||||
fi
|
||||
if [[ ${{ inputs.bump_desktop }} == true ]]; then
|
||||
CLIENTS+=("desktop")
|
||||
fi
|
||||
if [[ ${{ inputs.bump_web }} == true ]]; then
|
||||
CLIENTS+=("web")
|
||||
fi
|
||||
printf -v joined '%s,' "${CLIENTS[@]}"
|
||||
echo "client=${joined%,}" >> $GITHUB_OUTPUT
|
||||
|
||||
NAME=version_bump_${{ github.ref_name }}_$(date +"%Y-%m-%d")
|
||||
git switch -c $NAME
|
||||
echo "name=$NAME" >> $GITHUB_OUTPUT
|
||||
git config --local user.email "actions@github.com"
|
||||
git config --local user.name "Github Actions"
|
||||
|
||||
########################
|
||||
# VERSION BUMP SECTION #
|
||||
@ -165,7 +171,9 @@ jobs:
|
||||
- name: Bump Browser Version - Version Override
|
||||
if: ${{ inputs.bump_browser == true && inputs.version_number_override != '' }}
|
||||
id: bump-browser-version-override
|
||||
run: npm version --workspace=@bitwarden/browser ${{ inputs.version_number_override }}
|
||||
env:
|
||||
VERSION: ${{ inputs.version_number_override }}
|
||||
run: npm version --workspace=@bitwarden/browser $VERSION
|
||||
|
||||
- name: Bump Browser Version - Automatic Calculation
|
||||
if: ${{ inputs.bump_browser == true && inputs.version_number_override == '' }}
|
||||
@ -250,7 +258,9 @@ jobs:
|
||||
- name: Bump CLI Version - Version Override
|
||||
if: ${{ inputs.bump_cli == true && inputs.version_number_override != '' }}
|
||||
id: bump-cli-version-override
|
||||
run: npm version --workspace=@bitwarden/cli ${{ inputs.version_number_override }}
|
||||
env:
|
||||
VERSION: ${{ inputs.version_number_override }}
|
||||
run: npm version --workspace=@bitwarden/cli $VERSION
|
||||
|
||||
- name: Bump CLI Version - Automatic Calculation
|
||||
if: ${{ inputs.bump_cli == true && inputs.version_number_override == '' }}
|
||||
@ -300,7 +310,9 @@ jobs:
|
||||
- name: Bump Desktop Version - Root - Version Override
|
||||
if: ${{ inputs.bump_desktop == true && inputs.version_number_override != '' }}
|
||||
id: bump-desktop-version-override
|
||||
run: npm version --workspace=@bitwarden/desktop ${{ inputs.version_number_override }}
|
||||
env:
|
||||
VERSION: ${{ inputs.version_number_override }}
|
||||
run: npm version --workspace=@bitwarden/desktop $VERSION
|
||||
|
||||
- name: Bump Desktop Version - Root - Automatic Calculation
|
||||
if: ${{ inputs.bump_desktop == true && inputs.version_number_override == '' }}
|
||||
@ -311,7 +323,9 @@ jobs:
|
||||
|
||||
- name: Bump Desktop Version - App - Version Override
|
||||
if: ${{ inputs.bump_desktop == true && inputs.version_number_override != '' }}
|
||||
run: npm version ${{ inputs.version_number_override }}
|
||||
env:
|
||||
VERSION: ${{ inputs.version_number_override }}
|
||||
run: npm version $VERSION
|
||||
working-directory: "apps/desktop/src"
|
||||
|
||||
- name: Bump Desktop Version - App - Automatic Calculation
|
||||
@ -362,7 +376,9 @@ jobs:
|
||||
- name: Bump Web Version - Version Override
|
||||
if: ${{ inputs.bump_web == true && inputs.version_number_override != '' }}
|
||||
id: bump-web-version-override
|
||||
run: npm version --workspace=@bitwarden/web-vault ${{ inputs.version_number_override }}
|
||||
env:
|
||||
VERSION: ${{ inputs.version_number_override }}
|
||||
run: npm version --workspace=@bitwarden/web-vault $VERSION
|
||||
|
||||
- name: Bump Web Version - Automatic Calculation
|
||||
if: ${{ inputs.bump_web == true && inputs.version_number_override == '' }}
|
||||
@ -375,27 +391,29 @@ jobs:
|
||||
|
||||
- name: Set final version output
|
||||
id: set-final-version-output
|
||||
env:
|
||||
VERSION: ${{ inputs.version_number_override }}
|
||||
run: |
|
||||
if [[ "${{ steps.bump-browser-version-override.outcome }}" = "success" ]]; then
|
||||
echo "version_browser=${{ inputs.version_number_override }}" >> $GITHUB_OUTPUT
|
||||
echo "version_browser=$VERSION" >> $GITHUB_OUTPUT
|
||||
elif [[ "${{ steps.bump-browser-version-automatic.outcome }}" = "success" ]]; then
|
||||
echo "version_browser=${{ steps.calculate-next-browser-version.outputs.version }}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
if [[ "${{ steps.bump-cli-version-override.outcome }}" = "success" ]]; then
|
||||
echo "version_cli=${{ inputs.version_number_override }}" >> $GITHUB_OUTPUT
|
||||
echo "version_cli=$VERSION" >> $GITHUB_OUTPUT
|
||||
elif [[ "${{ steps.bump-cli-version-automatic.outcome }}" = "success" ]]; then
|
||||
echo "version_cli=${{ steps.calculate-next-cli-version.outputs.version }}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
if [[ "${{ steps.bump-desktop-version-override.outcome }}" = "success" ]]; then
|
||||
echo "version_desktop=${{ inputs.version_number_override }}" >> $GITHUB_OUTPUT
|
||||
echo "version_desktop=$VERSION" >> $GITHUB_OUTPUT
|
||||
elif [[ "${{ steps.bump-desktop-version-automatic.outcome }}" = "success" ]]; then
|
||||
echo "version_desktop=${{ steps.calculate-next-desktop-version.outputs.version }}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
if [[ "${{ steps.bump-web-version-override.outcome }}" = "success" ]]; then
|
||||
echo "version_web=${{ inputs.version_number_override }}" >> $GITHUB_OUTPUT
|
||||
echo "version_web=$VERSION" >> $GITHUB_OUTPUT
|
||||
elif [[ "${{ steps.bump-web-version-automatic.outcome }}" = "success" ]]; then
|
||||
echo "version_web=${{ steps.calculate-next-web-version.outputs.version }}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
@ -416,199 +434,52 @@ jobs:
|
||||
|
||||
- name: Push changes
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
||||
env:
|
||||
PR_BRANCH: ${{ steps.create-branch.outputs.name }}
|
||||
run: git push -u origin $PR_BRANCH
|
||||
run: git push
|
||||
|
||||
- name: Generate PR message
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
||||
id: pr-message
|
||||
run: |
|
||||
MESSAGE=""
|
||||
if [[ "${{ inputs.bump_browser }}" == "true" ]]; then
|
||||
MESSAGE+=$' Browser version bump to ${{ steps.set-final-version-output.outputs.version_browser }}\n'
|
||||
fi
|
||||
|
||||
if [[ "${{ inputs.bump_cli }}" == "true" ]]; then
|
||||
MESSAGE+=$' CLI version bump to ${{ steps.set-final-version-output.outputs.version_cli }}\n'
|
||||
fi
|
||||
|
||||
if [[ "${{ inputs.bump_desktop }}" == "true" ]]; then
|
||||
MESSAGE+=$' Desktop version bump to ${{ steps.set-final-version-output.outputs.version_desktop }}\n'
|
||||
fi
|
||||
|
||||
if [[ "${{ inputs.bump_web }}" == "true" ]]; then
|
||||
MESSAGE+=$' Web version bump to ${{ steps.set-final-version-output.outputs.version_web }}\n'
|
||||
fi
|
||||
|
||||
echo "MESSAGE<<EOF" >> $GITHUB_ENV
|
||||
echo "$MESSAGE" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
|
||||
- name: Generate GH App token
|
||||
uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 # v1.11.0
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ secrets.BW_GHAPP_ID }}
|
||||
private-key: ${{ secrets.BW_GHAPP_KEY }}
|
||||
owner: ${{ github.repository_owner }}
|
||||
|
||||
- name: Create Version PR
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
||||
id: create-pr
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
PR_BRANCH: ${{ steps.create-branch.outputs.name }}
|
||||
TITLE: "Bump client(s) version"
|
||||
run: |
|
||||
PR_URL=$(gh pr create --title "$TITLE" \
|
||||
--base "main" \
|
||||
--head "$PR_BRANCH" \
|
||||
--label "version update" \
|
||||
--label "automated pr" \
|
||||
--body "
|
||||
## Type of change
|
||||
- [ ] Bug fix
|
||||
- [ ] New feature development
|
||||
- [ ] Tech debt (refactoring, code cleanup, dependency upgrades, etc)
|
||||
- [ ] Build/deploy pipeline (DevOps)
|
||||
- [X] Other
|
||||
|
||||
## Objective
|
||||
$MESSAGE")
|
||||
|
||||
echo "pr_number=${PR_URL##*/}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Approve PR
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PR_NUMBER: ${{ steps.create-pr.outputs.pr_number }}
|
||||
run: gh pr review $PR_NUMBER --approve
|
||||
|
||||
- name: Merge PR
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
PR_NUMBER: ${{ steps.create-pr.outputs.pr_number }}
|
||||
run: gh pr merge $PR_NUMBER --squash --auto --delete-branch
|
||||
|
||||
- name: Report upcoming browser release version to Slack
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' && steps.set-final-version-output.outputs.version_browser != '' && inputs.enable_slack_notification == true }}
|
||||
uses: bitwarden/gh-actions/report-upcoming-release-version@main
|
||||
with:
|
||||
version: ${{ steps.set-final-version-output.outputs.version_browser }}
|
||||
project: browser
|
||||
AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Report upcoming cli release version to Slack
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' && steps.set-final-version-output.outputs.version_cli != '' && inputs.enable_slack_notification == true }}
|
||||
uses: bitwarden/gh-actions/report-upcoming-release-version@main
|
||||
with:
|
||||
version: ${{ steps.set-final-version-output.outputs.version_cli }}
|
||||
project: cli
|
||||
AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Report upcoming desktop release version to Slack
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' && steps.set-final-version-output.outputs.version_desktop != '' && inputs.enable_slack_notification == true }}
|
||||
uses: bitwarden/gh-actions/report-upcoming-release-version@main
|
||||
with:
|
||||
version: ${{ steps.set-final-version-output.outputs.version_desktop }}
|
||||
project: desktop
|
||||
AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
- name: Report upcoming web release version to Slack
|
||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' && steps.set-final-version-output.outputs.version_web != '' && inputs.enable_slack_notification == true }}
|
||||
uses: bitwarden/gh-actions/report-upcoming-release-version@main
|
||||
with:
|
||||
version: ${{ steps.set-final-version-output.outputs.version_web }}
|
||||
project: web
|
||||
AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
|
||||
cut_rc:
|
||||
name: Cut RC branch
|
||||
if: ${{ inputs.cut_rc_branch == true }}
|
||||
needs: bump_version
|
||||
runs-on: ubuntu-22.04
|
||||
cherry_pick:
|
||||
name: Cherry-Pick Commit(s)
|
||||
if: ${{ needs.setup.outputs.branch == 'rc' }}
|
||||
runs-on: ubuntu-24.04
|
||||
needs:
|
||||
- bump_version
|
||||
- setup
|
||||
steps:
|
||||
- name: Checkout Branch
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
- name: Check out main branch
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: main
|
||||
token: ${{ needs.setup.outputs.token }}
|
||||
|
||||
### Browser
|
||||
- name: Browser - Verify version has been updated
|
||||
if: ${{ inputs.bump_browser == true }}
|
||||
env:
|
||||
NEW_VERSION: ${{ needs.bump_version.outputs.version_browser }}
|
||||
- name: Configure Git
|
||||
run: |
|
||||
# Wait for version to change.
|
||||
while : ; do
|
||||
echo "Waiting for version to be updated..."
|
||||
git pull --force
|
||||
CURRENT_VERSION=$(cat package.json | jq -r '.version')
|
||||
git config --local user.email "actions@github.com"
|
||||
git config --local user.name "Github Actions"
|
||||
|
||||
# If the versions don't match we continue the loop, otherwise we break out of the loop.
|
||||
[[ "$NEW_VERSION" != "$CURRENT_VERSION" ]] || break
|
||||
sleep 10
|
||||
done
|
||||
working-directory: apps/browser
|
||||
|
||||
### CLI
|
||||
- name: CLI - Verify version has been updated
|
||||
if: ${{ inputs.bump_cli == true }}
|
||||
env:
|
||||
NEW_VERSION: ${{ needs.bump_version.outputs.version_cli }}
|
||||
- name: Perform cherry-pick(s)
|
||||
run: |
|
||||
# Wait for version to change.
|
||||
while : ; do
|
||||
echo "Waiting for version to be updated..."
|
||||
git pull --force
|
||||
CURRENT_VERSION=$(cat package.json | jq -r '.version')
|
||||
# Function for cherry-picking
|
||||
cherry_pick () {
|
||||
local package_path="apps/$1/package.json"
|
||||
local source_branch=$2
|
||||
local destination_branch=$3
|
||||
|
||||
# If the versions don't match we continue the loop, otherwise we break out of the loop.
|
||||
[[ "$NEW_VERSION" != "$CURRENT_VERSION" ]] || break
|
||||
sleep 10
|
||||
done
|
||||
working-directory: apps/cli
|
||||
# Get project commit/version from source branch
|
||||
git switch $source_branch
|
||||
SOURCE_COMMIT=$(git log --reverse --pretty=format:"%H" --max-count=1 $package_path)
|
||||
SOURCE_VERSION=$(cat $package_path | jq -r '.version')
|
||||
|
||||
### Desktop
|
||||
- name: Desktop - Verify version has been updated
|
||||
if: ${{ inputs.bump_desktop == true }}
|
||||
env:
|
||||
NEW_VERSION: ${{ needs.bump_version.outputs.version_desktop }}
|
||||
run: |
|
||||
# Wait for version to change.
|
||||
while : ; do
|
||||
echo "Waiting for version to be updated..."
|
||||
git pull --force
|
||||
CURRENT_VERSION=$(cat package.json | jq -r '.version')
|
||||
# Get project commit/version from destination branch
|
||||
git switch $destination_branch
|
||||
DESTINATION_VERSION=$(cat $package_path | jq -r '.version')
|
||||
|
||||
# If the versions don't match we continue the loop, otherwise we break out of the loop.
|
||||
[[ "$NEW_VERSION" != "$CURRENT_VERSION" ]] || break
|
||||
sleep 10
|
||||
done
|
||||
working-directory: apps/desktop
|
||||
if [[ "$DESTINATION_VERSION" != "$SOURCE_VERSION" ]]; then
|
||||
git cherry-pick --strategy-option=theirs -x $SOURCE_COMMIT
|
||||
git push -u origin $destination_branch
|
||||
fi
|
||||
|
||||
### Web
|
||||
- name: Web - Verify version has been updated
|
||||
if: ${{ inputs.bump_web == true }}
|
||||
env:
|
||||
NEW_VERSION: ${{ needs.bump_version.outputs.version_web }}
|
||||
run: |
|
||||
# Wait for version to change.
|
||||
while : ; do
|
||||
echo "Waiting for version to be updated..."
|
||||
git pull --force
|
||||
CURRENT_VERSION=$(cat package.json | jq -r '.version')
|
||||
|
||||
# If the versions don't match we continue the loop, otherwise we break out of the loop.
|
||||
[[ "$NEW_VERSION" != "$CURRENT_VERSION" ]] || break
|
||||
sleep 10
|
||||
done
|
||||
working-directory: apps/web
|
||||
|
||||
- name: Cut RC branch
|
||||
run: |
|
||||
git switch --quiet --create rc
|
||||
git push --quiet --set-upstream origin rc
|
||||
# Cherry-pick from 'main' into 'rc'
|
||||
cherry_pick browser main rc
|
||||
cherry_pick cli main rc
|
||||
cherry_pick desktop main rc
|
||||
cherry_pick web main rc
|
6
.github/workflows/scan.yml
vendored
6
.github/workflows/scan.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
@ -46,7 +46,7 @@ jobs:
|
||||
--output-path . ${{ env.INCREMENTAL }}
|
||||
|
||||
- name: Upload Checkmarx results to GitHub
|
||||
uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13
|
||||
uses: github/codeql-action/upload-sarif@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0
|
||||
with:
|
||||
sarif_file: cx_result.sarif
|
||||
|
||||
@ -60,7 +60,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
6
.github/workflows/test.yml
vendored
6
.github/workflows/test.yml
vendored
@ -40,7 +40,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Get Node Version
|
||||
id: retrieve-node-version
|
||||
@ -50,7 +50,7 @@ jobs:
|
||||
echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
@ -120,7 +120,7 @@ jobs:
|
||||
sudo apt-get install -y gnome-keyring dbus-x11
|
||||
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Build
|
||||
working-directory: ./apps/desktop/desktop_native
|
||||
|
64
.github/workflows/version-auto-bump.yml
vendored
64
.github/workflows/version-auto-bump.yml
vendored
@ -8,27 +8,55 @@ on:
|
||||
jobs:
|
||||
bump-version:
|
||||
name: Bump Desktop Version
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
- name: Generate GH App token
|
||||
uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 # v1.11.0
|
||||
id: app-token
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||
app-id: ${{ secrets.BW_GHAPP_ID }}
|
||||
private-key: ${{ secrets.BW_GHAPP_KEY }}
|
||||
|
||||
- name: Retrieve bot secrets
|
||||
id: retrieve-bot-secrets
|
||||
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
||||
- name: Check out target ref
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
keyvault: bitwarden-ci
|
||||
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
|
||||
ref: main
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
|
||||
- name: Trigger Version Bump workflow
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.retrieve-bot-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
|
||||
- name: Configure Git
|
||||
run: |
|
||||
echo '{"cut_rc_branch": "false",
|
||||
"bump_browser": "false",
|
||||
"bump_cli": "false",
|
||||
"bump_desktop": "true",
|
||||
"bump_web": "false"}' | \
|
||||
gh workflow run version-bump.yml --json --repo bitwarden/clients
|
||||
git config --local user.email "actions@github.com"
|
||||
git config --local user.name "Github Actions"
|
||||
|
||||
- name: Get current Desktop version
|
||||
id: current-desktop-version
|
||||
run: |
|
||||
CURRENT_VERSION=$(cat package.json | jq -r '.version')
|
||||
echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
||||
working-directory: apps/desktop
|
||||
|
||||
- name: Calculate next Desktop release version
|
||||
id: calculate-next-desktop-version
|
||||
uses: bitwarden/gh-actions/version-next@main
|
||||
with:
|
||||
version: ${{ steps.current-desktop-version.outputs.version }}
|
||||
|
||||
- name: Bump Desktop Version - Root - Automatic Calculation
|
||||
id: bump-desktop-version-automatic
|
||||
env:
|
||||
VERSION: ${{ steps.calculate-next-desktop-version.outputs.version }}
|
||||
run: npm version --workspace=@bitwarden/desktop $VERSION
|
||||
|
||||
- name: Bump Desktop Version - App - Automatic Calculation
|
||||
env:
|
||||
VERSION: ${{ steps.calculate-next-desktop-version.outputs.version }}
|
||||
run: npm version $VERSION
|
||||
working-directory: "apps/desktop/src"
|
||||
|
||||
- name: Commit files
|
||||
env:
|
||||
VERSION: ${{ steps.calculate-next-desktop-version.outputs.version }}
|
||||
run: git commit -m "Bumped Desktop client to $VERSION" -a
|
||||
|
||||
- name: Push changes
|
||||
run: git push
|
||||
|
@ -128,10 +128,10 @@
|
||||
"builder": "@angular-devkit/build-angular:dev-server",
|
||||
"configurations": {
|
||||
"production": {
|
||||
"browserTarget": "test-storybook:build:production"
|
||||
"buildTarget": "test-storybook:build:production"
|
||||
},
|
||||
"development": {
|
||||
"browserTarget": "test-storybook:build:development"
|
||||
"buildTarget": "test-storybook:build:development"
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "development"
|
||||
|
@ -9,7 +9,6 @@ const replace = require("gulp-replace");
|
||||
|
||||
const manifest = require("./src/manifest.json");
|
||||
const manifestVersion = parseInt(process.env.MANIFEST_VERSION || manifest.version);
|
||||
const betaBuild = process.env.BETA_BUILD === "1";
|
||||
|
||||
const paths = {
|
||||
build: "./build/",
|
||||
@ -17,27 +16,11 @@ const paths = {
|
||||
safari: "./src/safari/",
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts a number to a tuple containing two Uint16's
|
||||
* @param num {number} This number is expected to be a integer style number with no decimals
|
||||
*
|
||||
* @returns {number[]} A tuple containing two elements that are both numbers.
|
||||
*/
|
||||
function numToUint16s(num) {
|
||||
var arr = new ArrayBuffer(4);
|
||||
var view = new DataView(arr);
|
||||
view.setUint32(0, num, false);
|
||||
return [view.getUint16(0), view.getUint16(2)];
|
||||
}
|
||||
|
||||
function buildString() {
|
||||
var build = "";
|
||||
if (process.env.MANIFEST_VERSION) {
|
||||
build = `-mv${process.env.MANIFEST_VERSION}`;
|
||||
}
|
||||
if (betaBuild) {
|
||||
build += "-beta";
|
||||
}
|
||||
if (process.env.BUILD_NUMBER && process.env.BUILD_NUMBER !== "") {
|
||||
build = `-${process.env.BUILD_NUMBER}`;
|
||||
}
|
||||
@ -71,9 +54,6 @@ function distFirefox() {
|
||||
manifest.optional_permissions = manifest.optional_permissions.filter(
|
||||
(permission) => permission !== "privacy",
|
||||
);
|
||||
if (betaBuild) {
|
||||
manifest = applyBetaLabels(manifest);
|
||||
}
|
||||
return manifest;
|
||||
});
|
||||
}
|
||||
@ -90,9 +70,6 @@ function distOpera() {
|
||||
delete manifest.commands._execute_sidebar_action;
|
||||
}
|
||||
|
||||
if (betaBuild) {
|
||||
manifest = applyBetaLabels(manifest);
|
||||
}
|
||||
return manifest;
|
||||
});
|
||||
}
|
||||
@ -102,9 +79,6 @@ function distChrome() {
|
||||
delete manifest.applications;
|
||||
delete manifest.sidebar_action;
|
||||
delete manifest.commands._execute_sidebar_action;
|
||||
if (betaBuild) {
|
||||
manifest = applyBetaLabels(manifest);
|
||||
}
|
||||
return manifest;
|
||||
});
|
||||
}
|
||||
@ -114,9 +88,6 @@ function distEdge() {
|
||||
delete manifest.applications;
|
||||
delete manifest.sidebar_action;
|
||||
delete manifest.commands._execute_sidebar_action;
|
||||
if (betaBuild) {
|
||||
manifest = applyBetaLabels(manifest);
|
||||
}
|
||||
return manifest;
|
||||
});
|
||||
}
|
||||
@ -237,9 +208,6 @@ async function safariCopyBuild(source, dest) {
|
||||
delete manifest.commands._execute_sidebar_action;
|
||||
delete manifest.optional_permissions;
|
||||
manifest.permissions.push("nativeMessaging");
|
||||
if (betaBuild) {
|
||||
manifest = applyBetaLabels(manifest);
|
||||
}
|
||||
return manifest;
|
||||
}),
|
||||
),
|
||||
@ -254,30 +222,6 @@ function stdOutProc(proc) {
|
||||
proc.stderr.on("data", (data) => console.error(data.toString()));
|
||||
}
|
||||
|
||||
function applyBetaLabels(manifest) {
|
||||
manifest.name = "Bitwarden Password Manager BETA";
|
||||
manifest.short_name = "Bitwarden BETA";
|
||||
manifest.description = "THIS EXTENSION IS FOR BETA TESTING BITWARDEN.";
|
||||
if (process.env.GITHUB_RUN_ID) {
|
||||
const existingVersionParts = manifest.version.split("."); // 3 parts expected 2024.4.0
|
||||
|
||||
// GITHUB_RUN_ID is a number like: 8853654662
|
||||
// which will convert to [ 4024, 3206 ]
|
||||
// and a single incremented id of 8853654663 will become [ 4024, 3207 ]
|
||||
const runIdParts = numToUint16s(parseInt(process.env.GITHUB_RUN_ID));
|
||||
|
||||
// Only use the first 2 parts from the given version number and base the other 2 numbers from the GITHUB_RUN_ID
|
||||
// Example: 2024.4.4024.3206
|
||||
const betaVersion = `${existingVersionParts[0]}.${existingVersionParts[1]}.${runIdParts[0]}.${runIdParts[1]}`;
|
||||
|
||||
manifest.version_name = `${betaVersion} beta - ${process.env.GITHUB_SHA.slice(0, 8)}`;
|
||||
manifest.version = betaVersion;
|
||||
} else {
|
||||
manifest.version = `${manifest.version}.0`;
|
||||
}
|
||||
return manifest;
|
||||
}
|
||||
|
||||
exports["dist:firefox"] = distFirefox;
|
||||
exports["dist:chrome"] = distChrome;
|
||||
exports["dist:opera"] = distOpera;
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bitwarden/browser",
|
||||
"version": "2024.10.1",
|
||||
"version": "2024.11.1",
|
||||
"scripts": {
|
||||
"build": "cross-env MANIFEST_VERSION=3 webpack",
|
||||
"build:mv2": "webpack",
|
||||
@ -10,12 +10,9 @@
|
||||
"build:watch:safari": "cross-env MANIFEST_VERSION=3 BROWSER=safari webpack --watch",
|
||||
"build:watch:mv2": "webpack --watch",
|
||||
"build:prod": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" webpack",
|
||||
"build:prod:beta": "cross-env BETA_BUILD=1 NODE_ENV=production webpack",
|
||||
"build:prod:watch": "cross-env NODE_ENV=production webpack --watch",
|
||||
"dist": "npm run build:prod && gulp dist",
|
||||
"dist:beta": "npm run build:prod:beta && cross-env BETA_BUILD=1 gulp dist",
|
||||
"dist:mv3": "cross-env MANIFEST_VERSION=3 npm run build:prod && cross-env MANIFEST_VERSION=3 gulp dist",
|
||||
"dist:mv3:beta": "cross-env MANIFEST_VERSION=3 npm run build:prod:beta && cross-env MANIFEST_VERSION=3 BETA_BUILD=1 gulp dist",
|
||||
"dist:chrome": "npm run build:prod && gulp dist:chrome",
|
||||
"dist:chrome:beta": "cross-env MANIFEST_VERSION=3 npm run build:prod:beta && cross-env MANIFEST_VERSION=3 BETA_BUILD=1 gulp dist:chrome",
|
||||
"dist:firefox": "npm run build:prod && gulp dist:firefox",
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "نوع اسم المستخدم"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "جارٍ تسجيل الدخول على"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "تُفتح في نافذة جديدة"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "E-poçt yarat"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Dəyər $MIN$-$MAX$ arasında olmalıdır",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "İstifadəçi adı növü"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Giriş edilir"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Yeni bir pəncərədə açılır"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Тып імя карыстальніка"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Увайсці на"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Адкрываць у новым акне"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Генериране на електронна поща"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Стойността трябва да бъде между $MIN$ и $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Тип потребителско име"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Вписване в"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Отваря се в нов прозорец"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Tipus de nom d'usuari"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Inici de sessió en"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "S'obri en una finestra nova"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Vygenerovat e-mail"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Hodnota musí být mezi $MIN$ a $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Typ uživatelského jména"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Přihlašování na"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Otevře se v novém okně"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Math o enw defnyddiwr"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Mewngofnodi ar"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generér e-mail"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Værdi skal være mellem $MIN$ og $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Brugernavnstype"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logger ind på"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Åbnes i et nyt vindue"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "E-Mail generieren"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Wert muss zwischen $MIN$ und $MAX$ liegen",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Benutzernamenstyp"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Anmelden bei"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Wird in einem neuen Fenster geöffnet"
|
||||
},
|
||||
|
@ -1022,7 +1022,7 @@
|
||||
"message": "Ρώτησε για να ενημερώσεις τον κωδικό πρόσβασης μιας σύνδεσης όταν εντοπιστεί μια αλλαγή σε έναν ιστότοπο. Ισχύει για όλους τους συνδεδεμένους λογαριασμούς."
|
||||
},
|
||||
"enableUsePasskeys": {
|
||||
"message": "Ρώτησε για αποθήκευση και χρήση κλειδιών πρόσβασης"
|
||||
"message": "Ερώτηση για αποθήκευση και χρήση κλειδιών πρόσβασης"
|
||||
},
|
||||
"usePasskeysDesc": {
|
||||
"message": "Ρώτησε με για την αποθήκευση νέων συνθηματικών ή σύνδεση με κλειδιά πρόσβασης αποθηκευμένα στο θησαυ/κιό μου. Ισχύει για όλους τους συνδεδεμένους λογαριασμούς."
|
||||
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Δημιουργία email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Η τιμή πρέπει να είναι μεταξύ $MIN$ και $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Τύπος ονόματος χρήστη"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Σύνδεση στο"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Ανοίγει σε νέο παράθυρο"
|
||||
},
|
||||
@ -4753,7 +4764,7 @@
|
||||
"description": "Represents the > key in screen reader content as a readable word"
|
||||
},
|
||||
"commaCharacterDescriptor": {
|
||||
"message": "Comma",
|
||||
"message": "Κόμμα",
|
||||
"description": "Represents the , key in screen reader content as a readable word"
|
||||
},
|
||||
"periodCharacterDescriptor": {
|
||||
|
@ -152,6 +152,15 @@
|
||||
"copyLicenseNumber": {
|
||||
"message": "Copy license number"
|
||||
},
|
||||
"copyPrivateKey": {
|
||||
"message": "Copy private key"
|
||||
},
|
||||
"copyPublicKey": {
|
||||
"message": "Copy public key"
|
||||
},
|
||||
"copyFingerprint": {
|
||||
"message": "Copy fingerprint"
|
||||
},
|
||||
"copyCustomField": {
|
||||
"message": "Copy $FIELD$",
|
||||
"placeholders": {
|
||||
@ -1764,6 +1773,9 @@
|
||||
"typeIdentity": {
|
||||
"message": "Identity"
|
||||
},
|
||||
"typeSshKey": {
|
||||
"message": "SSH key"
|
||||
},
|
||||
"newItemHeader": {
|
||||
"message": "New $TYPE$",
|
||||
"placeholders": {
|
||||
@ -4593,6 +4605,30 @@
|
||||
"enterprisePolicyRequirementsApplied": {
|
||||
"message": "Enterprise policy requirements have been applied to this setting"
|
||||
},
|
||||
"sshPrivateKey": {
|
||||
"message": "Private key"
|
||||
},
|
||||
"sshPublicKey": {
|
||||
"message": "Public key"
|
||||
},
|
||||
"sshFingerprint": {
|
||||
"message": "Fingerprint"
|
||||
},
|
||||
"sshKeyAlgorithm": {
|
||||
"message": "Key type"
|
||||
},
|
||||
"sshKeyAlgorithmED25519": {
|
||||
"message": "ED25519"
|
||||
},
|
||||
"sshKeyAlgorithmRSA2048": {
|
||||
"message": "RSA 2048-Bit"
|
||||
},
|
||||
"sshKeyAlgorithmRSA3072": {
|
||||
"message": "RSA 3072-Bit"
|
||||
},
|
||||
"sshKeyAlgorithmRSA4096": {
|
||||
"message": "RSA 4096-Bit"
|
||||
},
|
||||
"retry": {
|
||||
"message": "Retry"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username Type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -20,16 +20,16 @@
|
||||
"message": "Crear cuenta"
|
||||
},
|
||||
"newToBitwarden": {
|
||||
"message": "New to Bitwarden?"
|
||||
"message": "¿Nuevo en Bitwarden?"
|
||||
},
|
||||
"logInWithPasskey": {
|
||||
"message": "Log in with passkey"
|
||||
"message": "Iniciar sesión con clave de acceso"
|
||||
},
|
||||
"useSingleSignOn": {
|
||||
"message": "Use single sign-on"
|
||||
"message": "Usar inicio de sesión único"
|
||||
},
|
||||
"welcomeBack": {
|
||||
"message": "Welcome back"
|
||||
"message": "Bienvenido de nuevo"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Establece una contraseña fuerte"
|
||||
@ -84,7 +84,7 @@
|
||||
"message": "Incorporarse a la organización"
|
||||
},
|
||||
"joinOrganizationName": {
|
||||
"message": "Join $ORGANIZATIONNAME$",
|
||||
"message": "Unirse a $ORGANIZATIONNAME$",
|
||||
"placeholders": {
|
||||
"organizationName": {
|
||||
"content": "$1",
|
||||
@ -120,7 +120,7 @@
|
||||
"message": "Copiar contraseña"
|
||||
},
|
||||
"copyPassphrase": {
|
||||
"message": "Copy passphrase"
|
||||
"message": "Copiar frase de contraseña"
|
||||
},
|
||||
"copyNote": {
|
||||
"message": "Copiar nota"
|
||||
@ -153,7 +153,7 @@
|
||||
"message": "Copiar número de licencia"
|
||||
},
|
||||
"copyCustomField": {
|
||||
"message": "Copy $FIELD$",
|
||||
"message": "Copiar $FIELD$",
|
||||
"placeholders": {
|
||||
"field": {
|
||||
"content": "$1",
|
||||
@ -162,13 +162,13 @@
|
||||
}
|
||||
},
|
||||
"copyWebsite": {
|
||||
"message": "Copy website"
|
||||
"message": "Copiar sitio web"
|
||||
},
|
||||
"copyNotes": {
|
||||
"message": "Copy notes"
|
||||
"message": "Copiar notas"
|
||||
},
|
||||
"fill": {
|
||||
"message": "Fill",
|
||||
"message": "Rellenar",
|
||||
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
|
||||
},
|
||||
"autoFill": {
|
||||
@ -223,13 +223,13 @@
|
||||
"message": "Añadir elemento"
|
||||
},
|
||||
"accountEmail": {
|
||||
"message": "Account email"
|
||||
"message": "Correo electrónico de la cuenta"
|
||||
},
|
||||
"requestHint": {
|
||||
"message": "Request hint"
|
||||
"message": "Solicitar pista"
|
||||
},
|
||||
"requestPasswordHint": {
|
||||
"message": "Request password hint"
|
||||
"message": "Solicitar pista de la contraseña"
|
||||
},
|
||||
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
|
||||
"message": "Enter your account email address and your password hint will be sent to you"
|
||||
@ -427,7 +427,7 @@
|
||||
"message": "Generar contraseña"
|
||||
},
|
||||
"generatePassphrase": {
|
||||
"message": "Generate passphrase"
|
||||
"message": "Generar frase de contraseña"
|
||||
},
|
||||
"regeneratePassword": {
|
||||
"message": "Regenerar contraseña"
|
||||
@ -567,7 +567,7 @@
|
||||
"message": "Notas"
|
||||
},
|
||||
"privateNote": {
|
||||
"message": "Private note"
|
||||
"message": "Nota privada"
|
||||
},
|
||||
"note": {
|
||||
"message": "Nota"
|
||||
@ -624,7 +624,7 @@
|
||||
"message": "Tiempo de sesión agotado"
|
||||
},
|
||||
"vaultTimeoutHeader": {
|
||||
"message": "Vault timeout"
|
||||
"message": "Tiempo de espera de la caja fuerte"
|
||||
},
|
||||
"otherOptions": {
|
||||
"message": "Otras opciones"
|
||||
@ -645,13 +645,13 @@
|
||||
"message": "Tu caja fuerte está bloqueada. Verifica tu identidad para continuar."
|
||||
},
|
||||
"yourVaultIsLockedV2": {
|
||||
"message": "Your vault is locked"
|
||||
"message": "Tu caja fuerte está bloqueada"
|
||||
},
|
||||
"yourAccountIsLocked": {
|
||||
"message": "Your account is locked"
|
||||
"message": "Tu cuenta está bloqueada"
|
||||
},
|
||||
"or": {
|
||||
"message": "or"
|
||||
"message": "o"
|
||||
},
|
||||
"unlock": {
|
||||
"message": "Desbloquear"
|
||||
@ -676,7 +676,7 @@
|
||||
"message": "Tiempo de espera de la caja fuerte"
|
||||
},
|
||||
"vaultTimeout1": {
|
||||
"message": "Timeout"
|
||||
"message": "Tiempo de espera"
|
||||
},
|
||||
"lockNow": {
|
||||
"message": "Bloquear"
|
||||
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Tipo de nombre de usuario"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Iniciando sesión en"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Abre en una nueva ventana"
|
||||
},
|
||||
@ -4697,11 +4708,11 @@
|
||||
"description": "Represents the - key in screen reader content as a readable word"
|
||||
},
|
||||
"plusCharacterDescriptor": {
|
||||
"message": "Plus",
|
||||
"message": "Más",
|
||||
"description": "Represents the + key in screen reader content as a readable word"
|
||||
},
|
||||
"equalsCharacterDescriptor": {
|
||||
"message": "Equals",
|
||||
"message": "Igual",
|
||||
"description": "Represents the = key in screen reader content as a readable word"
|
||||
},
|
||||
"braceLeftCharacterDescriptor": {
|
||||
@ -4725,15 +4736,15 @@
|
||||
"description": "Represents the | key in screen reader content as a readable word"
|
||||
},
|
||||
"backSlashCharacterDescriptor": {
|
||||
"message": "Back slash",
|
||||
"message": "Contrabarra",
|
||||
"description": "Represents the back slash key in screen reader content as a readable word"
|
||||
},
|
||||
"colonCharacterDescriptor": {
|
||||
"message": "Colon",
|
||||
"message": "Dos puntos",
|
||||
"description": "Represents the : key in screen reader content as a readable word"
|
||||
},
|
||||
"semicolonCharacterDescriptor": {
|
||||
"message": "Semicolon",
|
||||
"message": "Punto y coma",
|
||||
"description": "Represents the ; key in screen reader content as a readable word"
|
||||
},
|
||||
"doubleQuoteCharacterDescriptor": {
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Kasutajanime tüüp"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Sisselogimas kui"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Avaneb uues aknas"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Erabiltzaile izen mota"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Leiho berri batean irekitzen da"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "نوع نام کاربری"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "ورود با"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "در پنجره جدید باز میشود"
|
||||
},
|
||||
|
@ -20,16 +20,16 @@
|
||||
"message": "Luo tili"
|
||||
},
|
||||
"newToBitwarden": {
|
||||
"message": "New to Bitwarden?"
|
||||
"message": "Oletko uusi Bitwarden-käyttäjä?"
|
||||
},
|
||||
"logInWithPasskey": {
|
||||
"message": "Log in with passkey"
|
||||
"message": "Kirjaudu pääsyavaimella"
|
||||
},
|
||||
"useSingleSignOn": {
|
||||
"message": "Use single sign-on"
|
||||
"message": "Käytä kertakirjautumista"
|
||||
},
|
||||
"welcomeBack": {
|
||||
"message": "Welcome back"
|
||||
"message": "Tervetuloa takaisin"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Aseta vahva salasana"
|
||||
@ -120,7 +120,7 @@
|
||||
"message": "Kopioi salasana"
|
||||
},
|
||||
"copyPassphrase": {
|
||||
"message": "Copy passphrase"
|
||||
"message": "Kopioi salalause"
|
||||
},
|
||||
"copyNote": {
|
||||
"message": "Kopioi merkinnät"
|
||||
@ -168,7 +168,7 @@
|
||||
"message": "Kopioi merkinnät"
|
||||
},
|
||||
"fill": {
|
||||
"message": "Fill",
|
||||
"message": "Täytä",
|
||||
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
|
||||
},
|
||||
"autoFill": {
|
||||
@ -427,7 +427,7 @@
|
||||
"message": "Luo salasana"
|
||||
},
|
||||
"generatePassphrase": {
|
||||
"message": "Generate passphrase"
|
||||
"message": "Luo salalause"
|
||||
},
|
||||
"regeneratePassword": {
|
||||
"message": "Luo uusi salasana"
|
||||
@ -591,7 +591,7 @@
|
||||
"message": "Avaa verkkosivusto"
|
||||
},
|
||||
"launchWebsiteName": {
|
||||
"message": "Launch website $ITEMNAME$",
|
||||
"message": "Avaa verkkosivusto $ITEMNAME$",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
@ -846,7 +846,7 @@
|
||||
"message": "Kirjaudu"
|
||||
},
|
||||
"logInToBitwarden": {
|
||||
"message": "Log in to Bitwarden"
|
||||
"message": "Kirjaudu Bitwardeniin"
|
||||
},
|
||||
"restartRegistration": {
|
||||
"message": "Aloita rekisteröityminen alusta"
|
||||
@ -1424,7 +1424,7 @@
|
||||
"message": "Palvelimen URL"
|
||||
},
|
||||
"selfHostBaseUrl": {
|
||||
"message": "Self-host server URL",
|
||||
"message": "Itse ylläpidetyn palvelimen URL-osoite",
|
||||
"description": "Label for field requesting a self-hosted integration service URL"
|
||||
},
|
||||
"apiUrl": {
|
||||
@ -1795,13 +1795,13 @@
|
||||
"message": "Salasanahistoria"
|
||||
},
|
||||
"generatorHistory": {
|
||||
"message": "Generator history"
|
||||
"message": "Generaattorihistoria"
|
||||
},
|
||||
"clearGeneratorHistoryTitle": {
|
||||
"message": "Clear generator history"
|
||||
"message": "Tyhjennä generaattorihistoria"
|
||||
},
|
||||
"cleargGeneratorHistoryDescription": {
|
||||
"message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?"
|
||||
"message": "Jos jatkat, kaikki generaattorihistorian kohteet poistetaan. Haluatko varmasti jatkaa?"
|
||||
},
|
||||
"back": {
|
||||
"message": "Takaisin"
|
||||
@ -1920,10 +1920,10 @@
|
||||
"message": "Tyhjennä historia"
|
||||
},
|
||||
"nothingToShow": {
|
||||
"message": "Nothing to show"
|
||||
"message": "Mitään näytettävää ei ole"
|
||||
},
|
||||
"nothingGeneratedRecently": {
|
||||
"message": "You haven't generated anything recently"
|
||||
"message": "Et ole luonut mitään hiljattain"
|
||||
},
|
||||
"remove": {
|
||||
"message": "Poista"
|
||||
@ -2710,7 +2710,7 @@
|
||||
"description": "Used as a card title description on the set password page to explain why the user is there"
|
||||
},
|
||||
"cardMetrics": {
|
||||
"message": "out of $TOTAL$",
|
||||
"message": "/$TOTAL$",
|
||||
"placeholders": {
|
||||
"total": {
|
||||
"content": "$1",
|
||||
@ -2875,7 +2875,21 @@
|
||||
"message": "Luo käyttäjätunnus"
|
||||
},
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
"message": "Luo sähköpostiosoite"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Arvon tulee olla väliltä $MIN$—$MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Käyttäjätunnuksen tyyppi"
|
||||
@ -2918,11 +2932,11 @@
|
||||
"message": "Luo sähköpostialias ulkoisella ohjauspalvelulla."
|
||||
},
|
||||
"forwarderDomainName": {
|
||||
"message": "Email domain",
|
||||
"message": "Sähköpostin verkkotunnus",
|
||||
"description": "Labels the domain name email forwarder service option"
|
||||
},
|
||||
"forwarderDomainNameHint": {
|
||||
"message": "Choose a domain that is supported by the selected service",
|
||||
"message": "Valitse verkkotunnus, jota valittu palvelu tukee",
|
||||
"description": "Guidance provided for email forwarding services that support multiple email domains."
|
||||
},
|
||||
"forwarderError": {
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Kirjaudutaan sijaintiin"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Avautuu uudessa ikkunassa"
|
||||
},
|
||||
@ -4625,47 +4636,47 @@
|
||||
"message": "Todennetaan"
|
||||
},
|
||||
"fillGeneratedPassword": {
|
||||
"message": "Fill generated password",
|
||||
"message": "Täytä luotu salasana",
|
||||
"description": "Heading for the password generator within the inline menu"
|
||||
},
|
||||
"passwordRegenerated": {
|
||||
"message": "Password regenerated",
|
||||
"message": "Salasana luotiin uudelleen",
|
||||
"description": "Notification message for when a password has been regenerated"
|
||||
},
|
||||
"saveLoginToBitwarden": {
|
||||
"message": "Save login to Bitwarden?",
|
||||
"message": "Tallennetaanko kirjautumistieto Bitwardeniin?",
|
||||
"description": "Confirmation message for saving a login to Bitwarden"
|
||||
},
|
||||
"spaceCharacterDescriptor": {
|
||||
"message": "Space",
|
||||
"message": "Välilyönti",
|
||||
"description": "Represents the space key in screen reader content as a readable word"
|
||||
},
|
||||
"tildeCharacterDescriptor": {
|
||||
"message": "Tilde",
|
||||
"message": "Aaltoviiva",
|
||||
"description": "Represents the ~ key in screen reader content as a readable word"
|
||||
},
|
||||
"backtickCharacterDescriptor": {
|
||||
"message": "Backtick",
|
||||
"message": "Graaviaksentti",
|
||||
"description": "Represents the ` key in screen reader content as a readable word"
|
||||
},
|
||||
"exclamationCharacterDescriptor": {
|
||||
"message": "Exclamation mark",
|
||||
"message": "Huutomerkkli",
|
||||
"description": "Represents the ! key in screen reader content as a readable word"
|
||||
},
|
||||
"atSignCharacterDescriptor": {
|
||||
"message": "At sign",
|
||||
"message": "Ät-merkki",
|
||||
"description": "Represents the @ key in screen reader content as a readable word"
|
||||
},
|
||||
"hashSignCharacterDescriptor": {
|
||||
"message": "Hash sign",
|
||||
"message": "Ristikkomerkki",
|
||||
"description": "Represents the # key in screen reader content as a readable word"
|
||||
},
|
||||
"dollarSignCharacterDescriptor": {
|
||||
"message": "Dollar sign",
|
||||
"message": "Dollarin merkki",
|
||||
"description": "Represents the $ key in screen reader content as a readable word"
|
||||
},
|
||||
"percentSignCharacterDescriptor": {
|
||||
"message": "Percent sign",
|
||||
"message": "Prosenttimerkki",
|
||||
"description": "Represents the % key in screen reader content as a readable word"
|
||||
},
|
||||
"caretCharacterDescriptor": {
|
||||
@ -4673,27 +4684,27 @@
|
||||
"description": "Represents the ^ key in screen reader content as a readable word"
|
||||
},
|
||||
"ampersandCharacterDescriptor": {
|
||||
"message": "Ampersand",
|
||||
"message": "Ampersandi",
|
||||
"description": "Represents the & key in screen reader content as a readable word"
|
||||
},
|
||||
"asteriskCharacterDescriptor": {
|
||||
"message": "Asterisk",
|
||||
"message": "Asteriski",
|
||||
"description": "Represents the * key in screen reader content as a readable word"
|
||||
},
|
||||
"parenLeftCharacterDescriptor": {
|
||||
"message": "Left parenthesis",
|
||||
"message": "Vasen kaarisulje",
|
||||
"description": "Represents the ( key in screen reader content as a readable word"
|
||||
},
|
||||
"parenRightCharacterDescriptor": {
|
||||
"message": "Right parenthesis",
|
||||
"message": "Oikea kaarisulje",
|
||||
"description": "Represents the ) key in screen reader content as a readable word"
|
||||
},
|
||||
"hyphenCharacterDescriptor": {
|
||||
"message": "Underscore",
|
||||
"message": "Alaviiva",
|
||||
"description": "Represents the _ key in screen reader content as a readable word"
|
||||
},
|
||||
"underscoreCharacterDescriptor": {
|
||||
"message": "Hyphen",
|
||||
"message": "Yhdysmerkki",
|
||||
"description": "Represents the - key in screen reader content as a readable word"
|
||||
},
|
||||
"plusCharacterDescriptor": {
|
||||
@ -4701,80 +4712,80 @@
|
||||
"description": "Represents the + key in screen reader content as a readable word"
|
||||
},
|
||||
"equalsCharacterDescriptor": {
|
||||
"message": "Equals",
|
||||
"message": "Yhtäsuuri kuin",
|
||||
"description": "Represents the = key in screen reader content as a readable word"
|
||||
},
|
||||
"braceLeftCharacterDescriptor": {
|
||||
"message": "Left brace",
|
||||
"message": "Vasen aaltosulje",
|
||||
"description": "Represents the { key in screen reader content as a readable word"
|
||||
},
|
||||
"braceRightCharacterDescriptor": {
|
||||
"message": "Right brace",
|
||||
"message": "Oikea aaltosulje",
|
||||
"description": "Represents the } key in screen reader content as a readable word"
|
||||
},
|
||||
"bracketLeftCharacterDescriptor": {
|
||||
"message": "Left bracket",
|
||||
"message": "Vasen hakasulje",
|
||||
"description": "Represents the [ key in screen reader content as a readable word"
|
||||
},
|
||||
"bracketRightCharacterDescriptor": {
|
||||
"message": "Right bracket",
|
||||
"message": "Oikea hakasulje",
|
||||
"description": "Represents the ] key in screen reader content as a readable word"
|
||||
},
|
||||
"pipeCharacterDescriptor": {
|
||||
"message": "Pipe",
|
||||
"message": "Putkimerkki",
|
||||
"description": "Represents the | key in screen reader content as a readable word"
|
||||
},
|
||||
"backSlashCharacterDescriptor": {
|
||||
"message": "Back slash",
|
||||
"message": "Kenoviiva",
|
||||
"description": "Represents the back slash key in screen reader content as a readable word"
|
||||
},
|
||||
"colonCharacterDescriptor": {
|
||||
"message": "Colon",
|
||||
"message": "Kaksoispiste",
|
||||
"description": "Represents the : key in screen reader content as a readable word"
|
||||
},
|
||||
"semicolonCharacterDescriptor": {
|
||||
"message": "Semicolon",
|
||||
"message": "Puolipiste",
|
||||
"description": "Represents the ; key in screen reader content as a readable word"
|
||||
},
|
||||
"doubleQuoteCharacterDescriptor": {
|
||||
"message": "Double quote",
|
||||
"message": "Lainausmerkki",
|
||||
"description": "Represents the double quote key in screen reader content as a readable word"
|
||||
},
|
||||
"singleQuoteCharacterDescriptor": {
|
||||
"message": "Single quote",
|
||||
"message": "Heittomerkki",
|
||||
"description": "Represents the ' key in screen reader content as a readable word"
|
||||
},
|
||||
"lessThanCharacterDescriptor": {
|
||||
"message": "Less than",
|
||||
"message": "Pienempi kuin",
|
||||
"description": "Represents the < key in screen reader content as a readable word"
|
||||
},
|
||||
"greaterThanCharacterDescriptor": {
|
||||
"message": "Greater than",
|
||||
"message": "Suurempi kuin",
|
||||
"description": "Represents the > key in screen reader content as a readable word"
|
||||
},
|
||||
"commaCharacterDescriptor": {
|
||||
"message": "Comma",
|
||||
"message": "Pilkku",
|
||||
"description": "Represents the , key in screen reader content as a readable word"
|
||||
},
|
||||
"periodCharacterDescriptor": {
|
||||
"message": "Period",
|
||||
"message": "Piste",
|
||||
"description": "Represents the . key in screen reader content as a readable word"
|
||||
},
|
||||
"questionCharacterDescriptor": {
|
||||
"message": "Question mark",
|
||||
"message": "Kysymysmerkki",
|
||||
"description": "Represents the ? key in screen reader content as a readable word"
|
||||
},
|
||||
"forwardSlashCharacterDescriptor": {
|
||||
"message": "Forward slash",
|
||||
"message": "Kauttaviiva",
|
||||
"description": "Represents the / key in screen reader content as a readable word"
|
||||
},
|
||||
"lowercaseAriaLabel": {
|
||||
"message": "Lowercase"
|
||||
"message": "Pienet kirjaimet"
|
||||
},
|
||||
"uppercaseAriaLabel": {
|
||||
"message": "Uppercase"
|
||||
"message": "Isot kirjaimet"
|
||||
},
|
||||
"generatedPassword": {
|
||||
"message": "Generated password"
|
||||
"message": "Luotu salasana"
|
||||
}
|
||||
}
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Uri ng username"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Générer un courriel"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "La valeur doit être comprise entre $MIN$ et $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Type de nom d'utilisateur"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Connexion sur"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "S'ouvre dans une nouvelle fenêtre"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "סוג שם משתמש"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Tip korisničkog imena"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Prijava na"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Otvara u novom prozoru"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Email generálása"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Az érték legyen $MIN$ és $MAX$ között.",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Felhasználónév típusa"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Bejelentkezés:"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Megnyitás új ablakban"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Jenis nama pengguna"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -11,7 +11,7 @@
|
||||
"description": "Extension description, MUST be less than 112 characters (Safari restriction)"
|
||||
},
|
||||
"loginOrCreateNewAccount": {
|
||||
"message": "Accedi o crea un nuovo account per accedere alla tua cassaforte."
|
||||
"message": "Entra o crea un nuovo account per accedere alla tua cassaforte."
|
||||
},
|
||||
"inviteAccepted": {
|
||||
"message": "Invito accettato"
|
||||
@ -20,16 +20,16 @@
|
||||
"message": "Crea account"
|
||||
},
|
||||
"newToBitwarden": {
|
||||
"message": "New to Bitwarden?"
|
||||
"message": "Nuovo a Bitwarden?"
|
||||
},
|
||||
"logInWithPasskey": {
|
||||
"message": "Log in with passkey"
|
||||
"message": "Accedi con passkey"
|
||||
},
|
||||
"useSingleSignOn": {
|
||||
"message": "Use single sign-on"
|
||||
"message": "Usa il Single Sign-On"
|
||||
},
|
||||
"welcomeBack": {
|
||||
"message": "Welcome back"
|
||||
"message": "Bentornato"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Imposta una password robusta"
|
||||
@ -84,7 +84,7 @@
|
||||
"message": "Unisciti all'organizzazione"
|
||||
},
|
||||
"joinOrganizationName": {
|
||||
"message": "Join $ORGANIZATIONNAME$",
|
||||
"message": "Unisciti a $ORGANIZATIONNAME$",
|
||||
"placeholders": {
|
||||
"organizationName": {
|
||||
"content": "$1",
|
||||
@ -120,7 +120,7 @@
|
||||
"message": "Copia password"
|
||||
},
|
||||
"copyPassphrase": {
|
||||
"message": "Copy passphrase"
|
||||
"message": "Copia passphrase"
|
||||
},
|
||||
"copyNote": {
|
||||
"message": "Copia nota"
|
||||
@ -153,7 +153,7 @@
|
||||
"message": "Copia numero licenza"
|
||||
},
|
||||
"copyCustomField": {
|
||||
"message": "Copy $FIELD$",
|
||||
"message": "Copia $FIELD$",
|
||||
"placeholders": {
|
||||
"field": {
|
||||
"content": "$1",
|
||||
@ -162,13 +162,13 @@
|
||||
}
|
||||
},
|
||||
"copyWebsite": {
|
||||
"message": "Copy website"
|
||||
"message": "Copia sito web"
|
||||
},
|
||||
"copyNotes": {
|
||||
"message": "Copy notes"
|
||||
"message": "Copia note"
|
||||
},
|
||||
"fill": {
|
||||
"message": "Fill",
|
||||
"message": "Riempi",
|
||||
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
|
||||
},
|
||||
"autoFill": {
|
||||
@ -226,13 +226,13 @@
|
||||
"message": "Account email"
|
||||
},
|
||||
"requestHint": {
|
||||
"message": "Request hint"
|
||||
"message": "Richiedi suggerimento"
|
||||
},
|
||||
"requestPasswordHint": {
|
||||
"message": "Request password hint"
|
||||
"message": "Richiedi il suggerimento per la password"
|
||||
},
|
||||
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
|
||||
"message": "Enter your account email address and your password hint will be sent to you"
|
||||
"message": "Inserisci l'indirizzo email dell'account e ti invieremo il tuo suggerimento per la password"
|
||||
},
|
||||
"passwordHint": {
|
||||
"message": "Suggerimento per la password"
|
||||
@ -1684,7 +1684,7 @@
|
||||
"message": "Sig.ra"
|
||||
},
|
||||
"dr": {
|
||||
"message": "Dott"
|
||||
"message": "Dr"
|
||||
},
|
||||
"mx": {
|
||||
"message": "Mx"
|
||||
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Tipo di nome utente"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Accedendo su"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Si apre in una nuova finestra"
|
||||
},
|
||||
@ -4775,6 +4786,6 @@
|
||||
"message": "Uppercase"
|
||||
},
|
||||
"generatedPassword": {
|
||||
"message": "Generated password"
|
||||
"message": "Password generata"
|
||||
}
|
||||
}
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "ユーザー名の種類"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "ログイン先"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "新しいウィンドウで開く"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "아이디 유형"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Vartotojo prisijungimo vardo tipas"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Izveidot e-pastu"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Vērtībai jābūt starp $MIN$ un $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Lietotājvārda veids"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Piesakās"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Atver jaunā logā"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -3,7 +3,7 @@
|
||||
"message": "Bitwarden"
|
||||
},
|
||||
"extName": {
|
||||
"message": "Bitwarden Password Manager",
|
||||
"message": "Bitwarden passordbehandler",
|
||||
"description": "Extension name, MUST be less than 40 characters (Safari restriction)"
|
||||
},
|
||||
"extDesc": {
|
||||
@ -29,7 +29,7 @@
|
||||
"message": "Use single sign-on"
|
||||
},
|
||||
"welcomeBack": {
|
||||
"message": "Welcome back"
|
||||
"message": "Velkommen tilbake"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Set a strong password"
|
||||
@ -168,7 +168,7 @@
|
||||
"message": "Copy notes"
|
||||
},
|
||||
"fill": {
|
||||
"message": "Fill",
|
||||
"message": "Fyll",
|
||||
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
|
||||
},
|
||||
"autoFill": {
|
||||
@ -357,10 +357,10 @@
|
||||
"message": "Rediger mappen"
|
||||
},
|
||||
"newFolder": {
|
||||
"message": "New folder"
|
||||
"message": "Ny mappe"
|
||||
},
|
||||
"folderName": {
|
||||
"message": "Folder name"
|
||||
"message": "Mappenavn"
|
||||
},
|
||||
"folderHintText": {
|
||||
"message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
|
||||
@ -458,7 +458,7 @@
|
||||
"description": "deprecated. Use specialCharactersLabel instead."
|
||||
},
|
||||
"include": {
|
||||
"message": "Include",
|
||||
"message": "Inkluder",
|
||||
"description": "Card header for password generator include block"
|
||||
},
|
||||
"uppercaseDescription": {
|
||||
@ -466,7 +466,7 @@
|
||||
"description": "Tooltip for the password generator uppercase character checkbox"
|
||||
},
|
||||
"uppercaseLabel": {
|
||||
"message": "A-Z",
|
||||
"message": "A-Å",
|
||||
"description": "Label for the password generator uppercase character checkbox"
|
||||
},
|
||||
"lowercaseDescription": {
|
||||
@ -478,7 +478,7 @@
|
||||
"description": "Label for the password generator lowercase character checkbox"
|
||||
},
|
||||
"numbersDescription": {
|
||||
"message": "Include numbers",
|
||||
"message": "Inkluder tall",
|
||||
"description": "Full description for the password generator numbers checkbox"
|
||||
},
|
||||
"numbersLabel": {
|
||||
@ -627,7 +627,7 @@
|
||||
"message": "Vault timeout"
|
||||
},
|
||||
"otherOptions": {
|
||||
"message": "Other options"
|
||||
"message": "Andre valg"
|
||||
},
|
||||
"rateExtension": {
|
||||
"message": "Gi denne utvidelsen en vurdering"
|
||||
@ -676,7 +676,7 @@
|
||||
"message": "Tidsavbrudd i hvelvet"
|
||||
},
|
||||
"vaultTimeout1": {
|
||||
"message": "Timeout"
|
||||
"message": "Tidsavbrudd"
|
||||
},
|
||||
"lockNow": {
|
||||
"message": "Lås nå"
|
||||
@ -730,10 +730,10 @@
|
||||
"message": "Sikkerhet"
|
||||
},
|
||||
"confirmMasterPassword": {
|
||||
"message": "Confirm master password"
|
||||
"message": "Bekreft hovedpassord"
|
||||
},
|
||||
"masterPassword": {
|
||||
"message": "Master password"
|
||||
"message": "Hovedpassord"
|
||||
},
|
||||
"masterPassImportant": {
|
||||
"message": "Your master password cannot be recovered if you forget it!"
|
||||
@ -843,7 +843,7 @@
|
||||
"message": "Din innloggingsøkt har utløpt."
|
||||
},
|
||||
"logIn": {
|
||||
"message": "Log in"
|
||||
"message": "Logg inn"
|
||||
},
|
||||
"logInToBitwarden": {
|
||||
"message": "Log in to Bitwarden"
|
||||
@ -928,7 +928,7 @@
|
||||
"message": "Ny URI"
|
||||
},
|
||||
"addDomain": {
|
||||
"message": "Add domain",
|
||||
"message": "Legg til domene",
|
||||
"description": "'Domain' here refers to an internet domain name (e.g. 'bitwarden.com') and the message in whole described the act of putting a domain value into the context."
|
||||
},
|
||||
"addedItem": {
|
||||
@ -1092,7 +1092,7 @@
|
||||
"message": "This file export will be password protected and require the file password to decrypt."
|
||||
},
|
||||
"filePassword": {
|
||||
"message": "File password"
|
||||
"message": "Filpassord"
|
||||
},
|
||||
"exportPasswordDescription": {
|
||||
"message": "This password will be used to export and import this file"
|
||||
@ -1917,10 +1917,10 @@
|
||||
"message": "Det er ingen passord å liste opp."
|
||||
},
|
||||
"clearHistory": {
|
||||
"message": "Clear history"
|
||||
"message": "Tøm historikk"
|
||||
},
|
||||
"nothingToShow": {
|
||||
"message": "Nothing to show"
|
||||
"message": "Ingenting å vise"
|
||||
},
|
||||
"nothingGeneratedRecently": {
|
||||
"message": "You haven't generated anything recently"
|
||||
@ -1984,10 +1984,10 @@
|
||||
"message": "Lås opp med PIN-kode"
|
||||
},
|
||||
"setYourPinTitle": {
|
||||
"message": "Set PIN"
|
||||
"message": "Velg PIN"
|
||||
},
|
||||
"setYourPinButton": {
|
||||
"message": "Set PIN"
|
||||
"message": "Velg PIN"
|
||||
},
|
||||
"setYourPinCode": {
|
||||
"message": "Angi PIN-koden din for å låse opp Bitwarden. PIN-innstillingene tilbakestilles hvis du logger deg helt ut av programmet."
|
||||
@ -2041,7 +2041,7 @@
|
||||
"message": "Username generator"
|
||||
},
|
||||
"useThisPassword": {
|
||||
"message": "Use this password"
|
||||
"message": "Bruk dette passordet"
|
||||
},
|
||||
"useThisUsername": {
|
||||
"message": "Use this username"
|
||||
@ -2186,7 +2186,7 @@
|
||||
"message": "Get advice, announcements, and research opportunities from Bitwarden in your inbox."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Unsubscribe"
|
||||
"message": "Avslutt abonnement"
|
||||
},
|
||||
"atAnyTime": {
|
||||
"message": "at any time."
|
||||
@ -2195,7 +2195,7 @@
|
||||
"message": "By continuing, you agree to the"
|
||||
},
|
||||
"and": {
|
||||
"message": "and"
|
||||
"message": "og"
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Ved å merke av denne boksen sier du deg enig i følgende:"
|
||||
@ -2315,7 +2315,7 @@
|
||||
"message": "An organization policy has blocked importing items into your individual vault."
|
||||
},
|
||||
"domainsTitle": {
|
||||
"message": "Domains",
|
||||
"message": "Domener",
|
||||
"description": "A category title describing the concept of web domains"
|
||||
},
|
||||
"excludedDomains": {
|
||||
@ -2411,7 +2411,7 @@
|
||||
"message": "Passord beskyttet"
|
||||
},
|
||||
"copyLink": {
|
||||
"message": "Copy link"
|
||||
"message": "Kopier lenke"
|
||||
},
|
||||
"copySendLink": {
|
||||
"message": "Kopier Send-lenke",
|
||||
@ -2668,7 +2668,7 @@
|
||||
"message": "E-postbekreftelse kreves"
|
||||
},
|
||||
"emailVerifiedV2": {
|
||||
"message": "Email verified"
|
||||
"message": "E-post bekreftet"
|
||||
},
|
||||
"emailVerificationRequiredDesc": {
|
||||
"message": "Du må bekrefte e-posten din for å bruke denne funksjonen. Du kan bekrefte e-postadressen din i netthvelvet."
|
||||
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Brukernavntype"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logger inn på"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Åpnes i et nytt vindu"
|
||||
},
|
||||
@ -3236,10 +3247,10 @@
|
||||
"message": "Uncheck if using a public device"
|
||||
},
|
||||
"approveFromYourOtherDevice": {
|
||||
"message": "Approve from your other device"
|
||||
"message": "Godkjenn fra en av dine andre enheter"
|
||||
},
|
||||
"requestAdminApproval": {
|
||||
"message": "Request admin approval"
|
||||
"message": "Be om administratorgodkjennelse"
|
||||
},
|
||||
"approveWithMasterPassword": {
|
||||
"message": "Godkjenn med hovedpassord"
|
||||
@ -3263,7 +3274,7 @@
|
||||
"message": "No email?"
|
||||
},
|
||||
"goBack": {
|
||||
"message": "Go back"
|
||||
"message": "Gå tilbake"
|
||||
},
|
||||
"toEditYourEmailAddress": {
|
||||
"message": "to edit your email address."
|
||||
@ -3279,7 +3290,7 @@
|
||||
"message": "Generelt"
|
||||
},
|
||||
"display": {
|
||||
"message": "Display"
|
||||
"message": "Vis"
|
||||
},
|
||||
"accountSuccessfullyCreated": {
|
||||
"message": "Account successfully created!"
|
||||
@ -3405,7 +3416,7 @@
|
||||
"message": "— Skriv for å filtrere —"
|
||||
},
|
||||
"multiSelectLoading": {
|
||||
"message": "Retrieving options..."
|
||||
"message": "Innhenter alternativer..."
|
||||
},
|
||||
"multiSelectNotFound": {
|
||||
"message": "Ingen gjenstander funnet"
|
||||
@ -3531,7 +3542,7 @@
|
||||
"description": "Screen reader text (aria-label) for new item button in overlay"
|
||||
},
|
||||
"newLogin": {
|
||||
"message": "New login",
|
||||
"message": "Ny innlogging",
|
||||
"description": "Button text to display within inline menu when there are no matching items on a login field"
|
||||
},
|
||||
"addNewLoginItemAria": {
|
||||
@ -3547,7 +3558,7 @@
|
||||
"description": "Screen reader text (aria-label) for new card button within inline menu"
|
||||
},
|
||||
"newIdentity": {
|
||||
"message": "New identity",
|
||||
"message": "Ny identitet",
|
||||
"description": "Button text to display within inline menu when there are no matching items on an identity field"
|
||||
},
|
||||
"addNewIdentityItemAria": {
|
||||
@ -3581,7 +3592,7 @@
|
||||
"message": "Beskrivelse"
|
||||
},
|
||||
"importSuccess": {
|
||||
"message": "Data successfully imported"
|
||||
"message": "Dataene ble vellykket importert"
|
||||
},
|
||||
"importSuccessNumberOfItems": {
|
||||
"message": "$AMOUNT$ gjenstander totalt ble importert.",
|
||||
@ -3671,7 +3682,7 @@
|
||||
"message": "Invalid file password, please use the password you entered when you created the export file."
|
||||
},
|
||||
"destination": {
|
||||
"message": "Destination"
|
||||
"message": "Destinasjon"
|
||||
},
|
||||
"learnAboutImportOptions": {
|
||||
"message": "Lær mer om importalternativene dine"
|
||||
@ -3708,7 +3719,7 @@
|
||||
"message": "Ingen fil er valgt"
|
||||
},
|
||||
"orCopyPasteFileContents": {
|
||||
"message": "or copy/paste the import file contents"
|
||||
"message": "eller kopier/lim inn importfilens innhold"
|
||||
},
|
||||
"instructionsFor": {
|
||||
"message": "$NAME$-instruksjoner",
|
||||
@ -3799,7 +3810,7 @@
|
||||
"message": "Multifaktorautentisering ble avbrutt"
|
||||
},
|
||||
"noLastPassDataFound": {
|
||||
"message": "No LastPass data found"
|
||||
"message": "Ingen LastPass-data ble funnet"
|
||||
},
|
||||
"incorrectUsernameOrPassword": {
|
||||
"message": "Feil brukernavn eller passord"
|
||||
@ -3826,7 +3837,7 @@
|
||||
"message": "Importerer kontoen din…"
|
||||
},
|
||||
"lastPassMFARequired": {
|
||||
"message": "LastPass multifactor authentication required"
|
||||
"message": "LastPass-multifaktorautentisering kreves"
|
||||
},
|
||||
"lastPassMFADesc": {
|
||||
"message": "Enter your one-time passcode from your authentication app"
|
||||
@ -3992,7 +4003,7 @@
|
||||
"description": "Notification message for when saving credentials has failed."
|
||||
},
|
||||
"success": {
|
||||
"message": "Success"
|
||||
"message": "Suksess"
|
||||
},
|
||||
"removePasskey": {
|
||||
"message": "Remove passkey"
|
||||
@ -4094,13 +4105,13 @@
|
||||
"message": "Admin Console"
|
||||
},
|
||||
"accountSecurity": {
|
||||
"message": "Account security"
|
||||
"message": "Kontosikkerhet"
|
||||
},
|
||||
"notifications": {
|
||||
"message": "Notifications"
|
||||
"message": "Varsler"
|
||||
},
|
||||
"appearance": {
|
||||
"message": "Appearance"
|
||||
"message": "Utseende"
|
||||
},
|
||||
"errorAssigningTargetCollection": {
|
||||
"message": "Error assigning target collection."
|
||||
@ -4129,7 +4140,7 @@
|
||||
}
|
||||
},
|
||||
"new": {
|
||||
"message": "New"
|
||||
"message": "Ny"
|
||||
},
|
||||
"removeItem": {
|
||||
"message": "Remove $NAME$",
|
||||
@ -4163,17 +4174,17 @@
|
||||
"message": "Organization is deactivated"
|
||||
},
|
||||
"owner": {
|
||||
"message": "Owner"
|
||||
"message": "Eier"
|
||||
},
|
||||
"selfOwnershipLabel": {
|
||||
"message": "You",
|
||||
"message": "Du",
|
||||
"description": "Used as a label to indicate that the user is the owner of an item."
|
||||
},
|
||||
"contactYourOrgAdmin": {
|
||||
"message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance."
|
||||
},
|
||||
"additionalInformation": {
|
||||
"message": "Additional information"
|
||||
"message": "Tilleggsinformasjon"
|
||||
},
|
||||
"itemHistory": {
|
||||
"message": "Item history"
|
||||
@ -4185,13 +4196,13 @@
|
||||
"message": "Owner: You"
|
||||
},
|
||||
"linked": {
|
||||
"message": "Linked"
|
||||
"message": "Tilknyttet"
|
||||
},
|
||||
"copySuccessful": {
|
||||
"message": "Copy Successful"
|
||||
},
|
||||
"upload": {
|
||||
"message": "Upload"
|
||||
"message": "Last opp"
|
||||
},
|
||||
"addAttachment": {
|
||||
"message": "Add attachment"
|
||||
@ -4227,7 +4238,7 @@
|
||||
"message": "Free organizations cannot use attachments"
|
||||
},
|
||||
"filters": {
|
||||
"message": "Filters"
|
||||
"message": "Filtre"
|
||||
},
|
||||
"personalDetails": {
|
||||
"message": "Personal details"
|
||||
@ -4236,7 +4247,7 @@
|
||||
"message": "Identification"
|
||||
},
|
||||
"contactInfo": {
|
||||
"message": "Contact info"
|
||||
"message": "Kontaktinfo"
|
||||
},
|
||||
"downloadAttachment": {
|
||||
"message": "Download - $ITEMNAME$",
|
||||
@ -4252,7 +4263,7 @@
|
||||
"description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher."
|
||||
},
|
||||
"loginCredentials": {
|
||||
"message": "Login credentials"
|
||||
"message": "Legitimasjoner for innlogging"
|
||||
},
|
||||
"authenticatorKey": {
|
||||
"message": "Authenticator key"
|
||||
@ -4277,10 +4288,10 @@
|
||||
"message": "Website added"
|
||||
},
|
||||
"addWebsite": {
|
||||
"message": "Add website"
|
||||
"message": "Legg til nettsted"
|
||||
},
|
||||
"deleteWebsite": {
|
||||
"message": "Delete website"
|
||||
"message": "Slett nettsted"
|
||||
},
|
||||
"defaultLabel": {
|
||||
"message": "Default ($VALUE$)",
|
||||
@ -4332,16 +4343,16 @@
|
||||
}
|
||||
},
|
||||
"enableAnimations": {
|
||||
"message": "Enable animations"
|
||||
"message": "Aktiver animasjoner"
|
||||
},
|
||||
"showAnimations": {
|
||||
"message": "Show animations"
|
||||
},
|
||||
"addAccount": {
|
||||
"message": "Add account"
|
||||
"message": "Legg til konto"
|
||||
},
|
||||
"loading": {
|
||||
"message": "Loading"
|
||||
"message": "Laster"
|
||||
},
|
||||
"data": {
|
||||
"message": "Data"
|
||||
@ -4359,7 +4370,7 @@
|
||||
"description": "ARIA label for the inline menu button that logs in with a passkey."
|
||||
},
|
||||
"assign": {
|
||||
"message": "Assign"
|
||||
"message": "Knytt"
|
||||
},
|
||||
"bulkCollectionAssignmentDialogDescriptionSingular": {
|
||||
"message": "Only organization members with access to these collections will be able to see the item."
|
||||
@ -4383,7 +4394,7 @@
|
||||
"message": "Add field"
|
||||
},
|
||||
"add": {
|
||||
"message": "Add"
|
||||
"message": "Legg til"
|
||||
},
|
||||
"fieldType": {
|
||||
"message": "Field type"
|
||||
@ -4407,7 +4418,7 @@
|
||||
"message": "Enter the the field's html id, name, aria-label, or placeholder."
|
||||
},
|
||||
"editField": {
|
||||
"message": "Edit field"
|
||||
"message": "Rediger felt"
|
||||
},
|
||||
"editFieldLabel": {
|
||||
"message": "Edit $LABEL$",
|
||||
@ -4577,13 +4588,13 @@
|
||||
"message": "Show number of login autofill suggestions on extension icon"
|
||||
},
|
||||
"systemDefault": {
|
||||
"message": "System default"
|
||||
"message": "Systemforvalg"
|
||||
},
|
||||
"enterprisePolicyRequirementsApplied": {
|
||||
"message": "Enterprise policy requirements have been applied to this setting"
|
||||
},
|
||||
"retry": {
|
||||
"message": "Retry"
|
||||
"message": "Prøv igjen"
|
||||
},
|
||||
"vaultCustomTimeoutMinimum": {
|
||||
"message": "Minimum custom timeout is 1 minute."
|
||||
@ -4613,16 +4624,16 @@
|
||||
"message": "Items that have been in trash more than 30 days will automatically be deleted"
|
||||
},
|
||||
"restore": {
|
||||
"message": "Restore"
|
||||
"message": "Gjenopprett"
|
||||
},
|
||||
"deleteForever": {
|
||||
"message": "Delete forever"
|
||||
"message": "Slett for alltid"
|
||||
},
|
||||
"noEditPermissions": {
|
||||
"message": "You don't have permission to edit this item"
|
||||
},
|
||||
"authenticating": {
|
||||
"message": "Authenticating"
|
||||
"message": "Autentiserer"
|
||||
},
|
||||
"fillGeneratedPassword": {
|
||||
"message": "Fill generated password",
|
||||
@ -4637,7 +4648,7 @@
|
||||
"description": "Confirmation message for saving a login to Bitwarden"
|
||||
},
|
||||
"spaceCharacterDescriptor": {
|
||||
"message": "Space",
|
||||
"message": "Mellomrom",
|
||||
"description": "Represents the space key in screen reader content as a readable word"
|
||||
},
|
||||
"tildeCharacterDescriptor": {
|
||||
@ -4645,15 +4656,15 @@
|
||||
"description": "Represents the ~ key in screen reader content as a readable word"
|
||||
},
|
||||
"backtickCharacterDescriptor": {
|
||||
"message": "Backtick",
|
||||
"message": "Baklengs apostrof",
|
||||
"description": "Represents the ` key in screen reader content as a readable word"
|
||||
},
|
||||
"exclamationCharacterDescriptor": {
|
||||
"message": "Exclamation mark",
|
||||
"message": "Utropstegn",
|
||||
"description": "Represents the ! key in screen reader content as a readable word"
|
||||
},
|
||||
"atSignCharacterDescriptor": {
|
||||
"message": "At sign",
|
||||
"message": "Alfakrøll",
|
||||
"description": "Represents the @ key in screen reader content as a readable word"
|
||||
},
|
||||
"hashSignCharacterDescriptor": {
|
||||
@ -4661,7 +4672,7 @@
|
||||
"description": "Represents the # key in screen reader content as a readable word"
|
||||
},
|
||||
"dollarSignCharacterDescriptor": {
|
||||
"message": "Dollar sign",
|
||||
"message": "Dollartegn",
|
||||
"description": "Represents the $ key in screen reader content as a readable word"
|
||||
},
|
||||
"percentSignCharacterDescriptor": {
|
||||
@ -4673,7 +4684,7 @@
|
||||
"description": "Represents the ^ key in screen reader content as a readable word"
|
||||
},
|
||||
"ampersandCharacterDescriptor": {
|
||||
"message": "Ampersand",
|
||||
"message": "Prosenttegn",
|
||||
"description": "Represents the & key in screen reader content as a readable word"
|
||||
},
|
||||
"asteriskCharacterDescriptor": {
|
||||
@ -4689,7 +4700,7 @@
|
||||
"description": "Represents the ) key in screen reader content as a readable word"
|
||||
},
|
||||
"hyphenCharacterDescriptor": {
|
||||
"message": "Underscore",
|
||||
"message": "Understrek",
|
||||
"description": "Represents the _ key in screen reader content as a readable word"
|
||||
},
|
||||
"underscoreCharacterDescriptor": {
|
||||
@ -4729,11 +4740,11 @@
|
||||
"description": "Represents the back slash key in screen reader content as a readable word"
|
||||
},
|
||||
"colonCharacterDescriptor": {
|
||||
"message": "Colon",
|
||||
"message": "Kolon",
|
||||
"description": "Represents the : key in screen reader content as a readable word"
|
||||
},
|
||||
"semicolonCharacterDescriptor": {
|
||||
"message": "Semicolon",
|
||||
"message": "Semikolon",
|
||||
"description": "Represents the ; key in screen reader content as a readable word"
|
||||
},
|
||||
"doubleQuoteCharacterDescriptor": {
|
||||
@ -4745,7 +4756,7 @@
|
||||
"description": "Represents the ' key in screen reader content as a readable word"
|
||||
},
|
||||
"lessThanCharacterDescriptor": {
|
||||
"message": "Less than",
|
||||
"message": "Mindre enn",
|
||||
"description": "Represents the < key in screen reader content as a readable word"
|
||||
},
|
||||
"greaterThanCharacterDescriptor": {
|
||||
@ -4753,7 +4764,7 @@
|
||||
"description": "Represents the > key in screen reader content as a readable word"
|
||||
},
|
||||
"commaCharacterDescriptor": {
|
||||
"message": "Comma",
|
||||
"message": "Komma",
|
||||
"description": "Represents the , key in screen reader content as a readable word"
|
||||
},
|
||||
"periodCharacterDescriptor": {
|
||||
@ -4761,7 +4772,7 @@
|
||||
"description": "Represents the . key in screen reader content as a readable word"
|
||||
},
|
||||
"questionCharacterDescriptor": {
|
||||
"message": "Question mark",
|
||||
"message": "Spørsmålstegn",
|
||||
"description": "Represents the ? key in screen reader content as a readable word"
|
||||
},
|
||||
"forwardSlashCharacterDescriptor": {
|
||||
@ -4769,10 +4780,10 @@
|
||||
"description": "Represents the / key in screen reader content as a readable word"
|
||||
},
|
||||
"lowercaseAriaLabel": {
|
||||
"message": "Lowercase"
|
||||
"message": "Små bokstaver"
|
||||
},
|
||||
"uppercaseAriaLabel": {
|
||||
"message": "Uppercase"
|
||||
"message": "Store bokstaver"
|
||||
},
|
||||
"generatedPassword": {
|
||||
"message": "Generated password"
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "E-mailadres genereren"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Waarde moet tussen $MIN$ en $MAX$ liggen",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Type gebruikersnaam"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Inloggen op"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opent in een nieuw venster"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Wygenruj adres e-mail"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Rodzaj nazwy użytkownika"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logowanie do"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Otwiera w nowym oknie"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Tipo de usuário"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Entrando em"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Abrir em uma nova janela"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Gerar e-mail"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "O valor deve estar entre $MIN$ e $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Tipo de nome de utilizador"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "A iniciar sessão em"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Abrir numa nova janela"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Tip de nume de utilizator"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Conectare la"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Se deschide într-o nouă fereastră"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Сгенерировать email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Значение должно быть между $MIN$ и $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Тип имени пользователя"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Войти на"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Откроется в новом окне"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generovať e-mail"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Hodnota musí byť medzi $MIN$ a $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Typ používateľského mena"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Prihlásenie na"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Otvárať v novom okne"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Vrsta uporabniškega imena"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Odpre se v novem oknu"
|
||||
},
|
||||
|
@ -20,16 +20,16 @@
|
||||
"message": "Креирај налог"
|
||||
},
|
||||
"newToBitwarden": {
|
||||
"message": "New to Bitwarden?"
|
||||
"message": "Нови сте у Bitwarden-у?"
|
||||
},
|
||||
"logInWithPasskey": {
|
||||
"message": "Log in with passkey"
|
||||
"message": "Пријавите се са приступним кључем"
|
||||
},
|
||||
"useSingleSignOn": {
|
||||
"message": "Use single sign-on"
|
||||
"message": "Употребити једнократну пријаву"
|
||||
},
|
||||
"welcomeBack": {
|
||||
"message": "Welcome back"
|
||||
"message": "Добродошли назад"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "Поставите јаку лозинку"
|
||||
@ -120,7 +120,7 @@
|
||||
"message": "Копирај лозинку"
|
||||
},
|
||||
"copyPassphrase": {
|
||||
"message": "Copy passphrase"
|
||||
"message": "Копирај приступну фразу"
|
||||
},
|
||||
"copyNote": {
|
||||
"message": "Копирај белешку"
|
||||
@ -168,7 +168,7 @@
|
||||
"message": "Копирати белешке"
|
||||
},
|
||||
"fill": {
|
||||
"message": "Fill",
|
||||
"message": "Попуни",
|
||||
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
|
||||
},
|
||||
"autoFill": {
|
||||
@ -427,7 +427,7 @@
|
||||
"message": "Генерисање лозинке"
|
||||
},
|
||||
"generatePassphrase": {
|
||||
"message": "Generate passphrase"
|
||||
"message": "Генеришите приступну фразу"
|
||||
},
|
||||
"regeneratePassword": {
|
||||
"message": "Поново генериши лозинку"
|
||||
@ -591,7 +591,7 @@
|
||||
"message": "Покрените веб локацију"
|
||||
},
|
||||
"launchWebsiteName": {
|
||||
"message": "Launch website $ITEMNAME$",
|
||||
"message": "Покренути сајт $ITEMNAME$",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
@ -846,7 +846,7 @@
|
||||
"message": "Пријави се"
|
||||
},
|
||||
"logInToBitwarden": {
|
||||
"message": "Log in to Bitwarden"
|
||||
"message": "Пријавите се на Bitwarden"
|
||||
},
|
||||
"restartRegistration": {
|
||||
"message": "Поново покрените регистрацију"
|
||||
@ -1424,7 +1424,7 @@
|
||||
"message": "УРЛ Сервера"
|
||||
},
|
||||
"selfHostBaseUrl": {
|
||||
"message": "Self-host server URL",
|
||||
"message": "УРЛ сервера који се самостално хостује",
|
||||
"description": "Label for field requesting a self-hosted integration service URL"
|
||||
},
|
||||
"apiUrl": {
|
||||
@ -1795,13 +1795,13 @@
|
||||
"message": "Историја Лозинке"
|
||||
},
|
||||
"generatorHistory": {
|
||||
"message": "Generator history"
|
||||
"message": "Генератор историје"
|
||||
},
|
||||
"clearGeneratorHistoryTitle": {
|
||||
"message": "Clear generator history"
|
||||
"message": "Испразнити генератор историје"
|
||||
},
|
||||
"cleargGeneratorHistoryDescription": {
|
||||
"message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?"
|
||||
"message": "Ако наставите, сви уноси ће бити трајно избрисани из генератора историје. Да ли сте сигурни да желите да наставите?"
|
||||
},
|
||||
"back": {
|
||||
"message": "Назад"
|
||||
@ -1920,10 +1920,10 @@
|
||||
"message": "Обриши историју"
|
||||
},
|
||||
"nothingToShow": {
|
||||
"message": "Nothing to show"
|
||||
"message": "Нема шта да се прикаже"
|
||||
},
|
||||
"nothingGeneratedRecently": {
|
||||
"message": "You haven't generated anything recently"
|
||||
"message": "Недавно нисте ништа генерисали"
|
||||
},
|
||||
"remove": {
|
||||
"message": "Уклони"
|
||||
@ -2183,7 +2183,7 @@
|
||||
"message": "Ваша нова главна лозинка не испуњава захтеве смерница."
|
||||
},
|
||||
"receiveMarketingEmailsV2": {
|
||||
"message": "Get advice, announcements, and research opportunities from Bitwarden in your inbox."
|
||||
"message": "Добијајте савете, најаве и могућности истраживања од Bitwarden-а у пријемном сандучету."
|
||||
},
|
||||
"unsubscribe": {
|
||||
"message": "Одјави се"
|
||||
@ -2512,7 +2512,7 @@
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"sendPasswordDescV3": {
|
||||
"message": "Add an optional password for recipients to access this Send.",
|
||||
"message": "Додајте опционалну лозинку за примаоце да приступе овом Send.",
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"sendNotesDesc": {
|
||||
@ -2875,7 +2875,21 @@
|
||||
"message": "Генериши име"
|
||||
},
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
"message": "Генеришите имејл"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Вредност мора бити између $MIN$ и $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Тип имена"
|
||||
@ -2918,11 +2932,11 @@
|
||||
"message": "Генеришите псеудоним е-поште помоћу екстерне услуге прослеђивања."
|
||||
},
|
||||
"forwarderDomainName": {
|
||||
"message": "Email domain",
|
||||
"message": "Домен имејла",
|
||||
"description": "Labels the domain name email forwarder service option"
|
||||
},
|
||||
"forwarderDomainNameHint": {
|
||||
"message": "Choose a domain that is supported by the selected service",
|
||||
"message": "Изаберите домен који подржава изабрана услуга",
|
||||
"description": "Guidance provided for email forwarding services that support multiple email domains."
|
||||
},
|
||||
"forwarderError": {
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Пријављено на"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Отвара се у новом прозору"
|
||||
},
|
||||
@ -3653,7 +3664,7 @@
|
||||
"message": "Искачући додатак да бисте довршили пријаву."
|
||||
},
|
||||
"popoutExtension": {
|
||||
"message": "Popout extension"
|
||||
"message": "Искачући додатак"
|
||||
},
|
||||
"launchDuo": {
|
||||
"message": "Покренути DUO"
|
||||
@ -3733,25 +3744,25 @@
|
||||
"message": "Подаци из сефа су извезени"
|
||||
},
|
||||
"typePasskey": {
|
||||
"message": "Приступачни кључ"
|
||||
"message": "Приступни кључ"
|
||||
},
|
||||
"accessing": {
|
||||
"message": "Приступ"
|
||||
},
|
||||
"passkeyNotCopied": {
|
||||
"message": "Приступачни кључ неће бити копиран"
|
||||
"message": "Приступни кључ неће бити копиран"
|
||||
},
|
||||
"passkeyNotCopiedAlert": {
|
||||
"message": "Приступачни кључ неће бити копиран на клонирану ставку. Да ли желите да наставите са клонирањем ставке?"
|
||||
"message": "Приступни кључ неће бити копиран на клонирану ставку. Да ли желите да наставите са клонирањем ставке?"
|
||||
},
|
||||
"passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": {
|
||||
"message": "Верификацију захтева сајт који покреће. Ова функција још увек није имплементирана за налоге без главне лозинке."
|
||||
},
|
||||
"logInWithPasskeyQuestion": {
|
||||
"message": "Пријавите се са приступачним кључем?"
|
||||
"message": "Пријавите се са приступним кључем?"
|
||||
},
|
||||
"passkeyAlreadyExists": {
|
||||
"message": "За ову апликацију већ постоји приступачни кључ."
|
||||
"message": "За ову апликацију већ постоји приступни кључ."
|
||||
},
|
||||
"noPasskeysFoundForThisApplication": {
|
||||
"message": "Нису пронађени приступни кључеви за ову апликацију."
|
||||
@ -3781,7 +3792,7 @@
|
||||
"message": "Изаберите приступни кључ за пријаву"
|
||||
},
|
||||
"passkeyItem": {
|
||||
"message": "Ставка приступачног кључа"
|
||||
"message": "Ставка приступног кључа"
|
||||
},
|
||||
"overwritePasskey": {
|
||||
"message": "Заменити приступни кључ?"
|
||||
@ -3899,7 +3910,7 @@
|
||||
"message": "сервер"
|
||||
},
|
||||
"hostedAt": {
|
||||
"message": "hosted at"
|
||||
"message": "хостиран на"
|
||||
},
|
||||
"useDeviceOrHardwareKey": {
|
||||
"message": "Користите свој уређај или хардверски кључ"
|
||||
@ -3995,10 +4006,10 @@
|
||||
"message": "Успех"
|
||||
},
|
||||
"removePasskey": {
|
||||
"message": "Уклонити приступачни кључ"
|
||||
"message": "Уклонити приступни кључ"
|
||||
},
|
||||
"passkeyRemoved": {
|
||||
"message": "Приступачни кључ је уклоњен"
|
||||
"message": "Приступни кључ је уклоњен"
|
||||
},
|
||||
"autofillSuggestions": {
|
||||
"message": "Предлози за ауто-попуњавање"
|
||||
@ -4347,7 +4358,7 @@
|
||||
"message": "Подаци"
|
||||
},
|
||||
"passkeys": {
|
||||
"message": "Приступачни кључеви",
|
||||
"message": "Приступни кључеви",
|
||||
"description": "A section header for a list of passkeys."
|
||||
},
|
||||
"passwords": {
|
||||
@ -4355,7 +4366,7 @@
|
||||
"description": "A section header for a list of passwords."
|
||||
},
|
||||
"logInWithPasskeyAriaLabel": {
|
||||
"message": "Пријавите се са приступачним кључем",
|
||||
"message": "Пријавите се са приступним кључем",
|
||||
"description": "ARIA label for the inline menu button that logs in with a passkey."
|
||||
},
|
||||
"assign": {
|
||||
@ -4553,13 +4564,13 @@
|
||||
"message": "Смештај ставке"
|
||||
},
|
||||
"fileSend": {
|
||||
"message": "File Send"
|
||||
"message": "Датотека „Send“"
|
||||
},
|
||||
"fileSends": {
|
||||
"message": "Датотека „Send“"
|
||||
},
|
||||
"textSend": {
|
||||
"message": "Text Send"
|
||||
"message": "Текст „Send“"
|
||||
},
|
||||
"textSends": {
|
||||
"message": "Текст „Send“"
|
||||
@ -4592,7 +4603,7 @@
|
||||
"message": "Додатни садржај је доступан"
|
||||
},
|
||||
"fileSavedToDevice": {
|
||||
"message": "File saved to device. Manage from your device downloads."
|
||||
"message": "Датотека је сачувана на уређају. Управљајте преузимањима са свог уређаја."
|
||||
},
|
||||
"showCharacterCount": {
|
||||
"message": "Прикажи бројање слова"
|
||||
@ -4625,23 +4636,23 @@
|
||||
"message": "Аутентификација"
|
||||
},
|
||||
"fillGeneratedPassword": {
|
||||
"message": "Fill generated password",
|
||||
"message": "Попуните генерисану лозинку",
|
||||
"description": "Heading for the password generator within the inline menu"
|
||||
},
|
||||
"passwordRegenerated": {
|
||||
"message": "Password regenerated",
|
||||
"message": "Лозинка поново генерисана",
|
||||
"description": "Notification message for when a password has been regenerated"
|
||||
},
|
||||
"saveLoginToBitwarden": {
|
||||
"message": "Save login to Bitwarden?",
|
||||
"message": "Сачувати пријаву на Bitwarden?",
|
||||
"description": "Confirmation message for saving a login to Bitwarden"
|
||||
},
|
||||
"spaceCharacterDescriptor": {
|
||||
"message": "Space",
|
||||
"message": "Простор",
|
||||
"description": "Represents the space key in screen reader content as a readable word"
|
||||
},
|
||||
"tildeCharacterDescriptor": {
|
||||
"message": "Tilde",
|
||||
"message": "Тилда",
|
||||
"description": "Represents the ~ key in screen reader content as a readable word"
|
||||
},
|
||||
"backtickCharacterDescriptor": {
|
||||
@ -4649,55 +4660,55 @@
|
||||
"description": "Represents the ` key in screen reader content as a readable word"
|
||||
},
|
||||
"exclamationCharacterDescriptor": {
|
||||
"message": "Exclamation mark",
|
||||
"message": "Узвичник",
|
||||
"description": "Represents the ! key in screen reader content as a readable word"
|
||||
},
|
||||
"atSignCharacterDescriptor": {
|
||||
"message": "At sign",
|
||||
"message": "Знак „ет“",
|
||||
"description": "Represents the @ key in screen reader content as a readable word"
|
||||
},
|
||||
"hashSignCharacterDescriptor": {
|
||||
"message": "Hash sign",
|
||||
"message": "Знак „хеш“",
|
||||
"description": "Represents the # key in screen reader content as a readable word"
|
||||
},
|
||||
"dollarSignCharacterDescriptor": {
|
||||
"message": "Dollar sign",
|
||||
"message": "Знак долар",
|
||||
"description": "Represents the $ key in screen reader content as a readable word"
|
||||
},
|
||||
"percentSignCharacterDescriptor": {
|
||||
"message": "Percent sign",
|
||||
"message": "Знак постотак",
|
||||
"description": "Represents the % key in screen reader content as a readable word"
|
||||
},
|
||||
"caretCharacterDescriptor": {
|
||||
"message": "Caret",
|
||||
"message": "Знак за уметање",
|
||||
"description": "Represents the ^ key in screen reader content as a readable word"
|
||||
},
|
||||
"ampersandCharacterDescriptor": {
|
||||
"message": "Ampersand",
|
||||
"message": "Знак Ampersand",
|
||||
"description": "Represents the & key in screen reader content as a readable word"
|
||||
},
|
||||
"asteriskCharacterDescriptor": {
|
||||
"message": "Asterisk",
|
||||
"message": "Знак звездица",
|
||||
"description": "Represents the * key in screen reader content as a readable word"
|
||||
},
|
||||
"parenLeftCharacterDescriptor": {
|
||||
"message": "Left parenthesis",
|
||||
"message": "Отворена заграда",
|
||||
"description": "Represents the ( key in screen reader content as a readable word"
|
||||
},
|
||||
"parenRightCharacterDescriptor": {
|
||||
"message": "Right parenthesis",
|
||||
"message": "Затворена заграда",
|
||||
"description": "Represents the ) key in screen reader content as a readable word"
|
||||
},
|
||||
"hyphenCharacterDescriptor": {
|
||||
"message": "Underscore",
|
||||
"message": "Доња црта",
|
||||
"description": "Represents the _ key in screen reader content as a readable word"
|
||||
},
|
||||
"underscoreCharacterDescriptor": {
|
||||
"message": "Hyphen",
|
||||
"message": "Цртица",
|
||||
"description": "Represents the - key in screen reader content as a readable word"
|
||||
},
|
||||
"plusCharacterDescriptor": {
|
||||
"message": "Plus",
|
||||
"message": "Плус",
|
||||
"description": "Represents the + key in screen reader content as a readable word"
|
||||
},
|
||||
"equalsCharacterDescriptor": {
|
||||
|
@ -147,7 +147,7 @@
|
||||
"message": "Kopiera personnummer"
|
||||
},
|
||||
"copyPassportNumber": {
|
||||
"message": "Copy passport number"
|
||||
"message": "Kopiera passnummer"
|
||||
},
|
||||
"copyLicenseNumber": {
|
||||
"message": "Copy license number"
|
||||
@ -1511,7 +1511,7 @@
|
||||
"message": "Komprometterade eller ej betrodda webbplatser kan utnyttja automatisk ifyllnad vid sidladdning."
|
||||
},
|
||||
"learnMoreAboutAutofillOnPageLoadLinkText": {
|
||||
"message": "Learn more about risks"
|
||||
"message": "Läs mer om risker"
|
||||
},
|
||||
"learnMoreAboutAutofill": {
|
||||
"message": "Läs mer om automatisk ifyllnad"
|
||||
@ -2411,7 +2411,7 @@
|
||||
"message": "Lösenordsskyddad"
|
||||
},
|
||||
"copyLink": {
|
||||
"message": "Copy link"
|
||||
"message": "Kopiera länk"
|
||||
},
|
||||
"copySendLink": {
|
||||
"message": "Kopiera Send-länk",
|
||||
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Typ av användarnamn"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logga in på"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Öppnas i ett nytt fönster"
|
||||
},
|
||||
@ -4613,7 +4624,7 @@
|
||||
"message": "Items that have been in trash more than 30 days will automatically be deleted"
|
||||
},
|
||||
"restore": {
|
||||
"message": "Restore"
|
||||
"message": "Återställ"
|
||||
},
|
||||
"deleteForever": {
|
||||
"message": "Delete forever"
|
||||
@ -4733,7 +4744,7 @@
|
||||
"description": "Represents the : key in screen reader content as a readable word"
|
||||
},
|
||||
"semicolonCharacterDescriptor": {
|
||||
"message": "Semicolon",
|
||||
"message": "Semikolon",
|
||||
"description": "Represents the ; key in screen reader content as a readable word"
|
||||
},
|
||||
"doubleQuoteCharacterDescriptor": {
|
||||
@ -4745,11 +4756,11 @@
|
||||
"description": "Represents the ' key in screen reader content as a readable word"
|
||||
},
|
||||
"lessThanCharacterDescriptor": {
|
||||
"message": "Less than",
|
||||
"message": "Mindre än",
|
||||
"description": "Represents the < key in screen reader content as a readable word"
|
||||
},
|
||||
"greaterThanCharacterDescriptor": {
|
||||
"message": "Greater than",
|
||||
"message": "Större än",
|
||||
"description": "Represents the > key in screen reader content as a readable word"
|
||||
},
|
||||
"commaCharacterDescriptor": {
|
||||
@ -4761,7 +4772,7 @@
|
||||
"description": "Represents the . key in screen reader content as a readable word"
|
||||
},
|
||||
"questionCharacterDescriptor": {
|
||||
"message": "Question mark",
|
||||
"message": "Frågetecken",
|
||||
"description": "Represents the ? key in screen reader content as a readable word"
|
||||
},
|
||||
"forwardSlashCharacterDescriptor": {
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Logging in on"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Opens in a new window"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "E-posta oluştur"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Değer $MIN$ ile $MAX$ arasında olmalıdır",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Kullanıcı adı türü"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Giriş yapılan konum"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Yeni pencerede açılır"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Генерувати е-пошту"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Значення має бути між $MIN$ та $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Тип імені користувача"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Увійти на"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Відкривається у новому вікні"
|
||||
},
|
||||
|
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Loại tên người dùng"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "Đang đăng nhập vào"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "Mở trong cửa sổ mới"
|
||||
},
|
||||
|
@ -20,16 +20,16 @@
|
||||
"message": "创建账户"
|
||||
},
|
||||
"newToBitwarden": {
|
||||
"message": "New to Bitwarden?"
|
||||
"message": "Bitwarden 新手吗?"
|
||||
},
|
||||
"logInWithPasskey": {
|
||||
"message": "Log in with passkey"
|
||||
"message": "使用通行密钥登录"
|
||||
},
|
||||
"useSingleSignOn": {
|
||||
"message": "Use single sign-on"
|
||||
"message": "使用单点登录"
|
||||
},
|
||||
"welcomeBack": {
|
||||
"message": "Welcome back"
|
||||
"message": "欢迎回来"
|
||||
},
|
||||
"setAStrongPassword": {
|
||||
"message": "设置强密码"
|
||||
@ -120,7 +120,7 @@
|
||||
"message": "复制密码"
|
||||
},
|
||||
"copyPassphrase": {
|
||||
"message": "Copy passphrase"
|
||||
"message": "复制密码短语"
|
||||
},
|
||||
"copyNote": {
|
||||
"message": "复制备注"
|
||||
@ -168,7 +168,7 @@
|
||||
"message": "复制备注"
|
||||
},
|
||||
"fill": {
|
||||
"message": "Fill",
|
||||
"message": "填充",
|
||||
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
|
||||
},
|
||||
"autoFill": {
|
||||
@ -427,7 +427,7 @@
|
||||
"message": "生成密码"
|
||||
},
|
||||
"generatePassphrase": {
|
||||
"message": "Generate passphrase"
|
||||
"message": "生成密码短语"
|
||||
},
|
||||
"regeneratePassword": {
|
||||
"message": "重新生成密码"
|
||||
@ -591,7 +591,7 @@
|
||||
"message": "启动网站"
|
||||
},
|
||||
"launchWebsiteName": {
|
||||
"message": "Launch website $ITEMNAME$",
|
||||
"message": "前往 $ITEMNAME$ 的网站",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
@ -846,7 +846,7 @@
|
||||
"message": "登录"
|
||||
},
|
||||
"logInToBitwarden": {
|
||||
"message": "Log in to Bitwarden"
|
||||
"message": "登录到 Bitwarden"
|
||||
},
|
||||
"restartRegistration": {
|
||||
"message": "重新开始注册"
|
||||
@ -1424,7 +1424,7 @@
|
||||
"message": "服务器 URL"
|
||||
},
|
||||
"selfHostBaseUrl": {
|
||||
"message": "Self-host server URL",
|
||||
"message": "自托管服务器 URL",
|
||||
"description": "Label for field requesting a self-hosted integration service URL"
|
||||
},
|
||||
"apiUrl": {
|
||||
@ -1795,13 +1795,13 @@
|
||||
"message": "密码历史记录"
|
||||
},
|
||||
"generatorHistory": {
|
||||
"message": "Generator history"
|
||||
"message": "生成器历史记录"
|
||||
},
|
||||
"clearGeneratorHistoryTitle": {
|
||||
"message": "Clear generator history"
|
||||
"message": "清除生成器历史记录"
|
||||
},
|
||||
"cleargGeneratorHistoryDescription": {
|
||||
"message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?"
|
||||
"message": "若继续,所有条目将从生成器历史记录中永久删除。确定要继续吗?"
|
||||
},
|
||||
"back": {
|
||||
"message": "后退"
|
||||
@ -1920,10 +1920,10 @@
|
||||
"message": "清除历史记录"
|
||||
},
|
||||
"nothingToShow": {
|
||||
"message": "Nothing to show"
|
||||
"message": "没有可显示的内容"
|
||||
},
|
||||
"nothingGeneratedRecently": {
|
||||
"message": "You haven't generated anything recently"
|
||||
"message": "您最近没有生成任何内容"
|
||||
},
|
||||
"remove": {
|
||||
"message": "移除"
|
||||
@ -2512,7 +2512,7 @@
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"sendPasswordDescV3": {
|
||||
"message": "Add an optional password for recipients to access this Send.",
|
||||
"message": "添加一个用于收件人访问此 Send 的可选密码。",
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"sendNotesDesc": {
|
||||
@ -2875,7 +2875,21 @@
|
||||
"message": "生成用户名"
|
||||
},
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
"message": "生成邮件地址"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "值必须在 $MIN$ 和 $MAX$ 之间",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "用户名类型"
|
||||
@ -2918,11 +2932,11 @@
|
||||
"message": "使用外部转发服务生成一个电子邮件别名。"
|
||||
},
|
||||
"forwarderDomainName": {
|
||||
"message": "Email domain",
|
||||
"message": "邮件域名",
|
||||
"description": "Labels the domain name email forwarder service option"
|
||||
},
|
||||
"forwarderDomainNameHint": {
|
||||
"message": "Choose a domain that is supported by the selected service",
|
||||
"message": "选择一个所选服务支持的域名",
|
||||
"description": "Guidance provided for email forwarding services that support multiple email domains."
|
||||
},
|
||||
"forwarderError": {
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "登录到"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "在新窗口中打开"
|
||||
},
|
||||
@ -4625,156 +4636,156 @@
|
||||
"message": "正在验证"
|
||||
},
|
||||
"fillGeneratedPassword": {
|
||||
"message": "Fill generated password",
|
||||
"message": "填充已生成的密码",
|
||||
"description": "Heading for the password generator within the inline menu"
|
||||
},
|
||||
"passwordRegenerated": {
|
||||
"message": "Password regenerated",
|
||||
"message": "密码已重新生成",
|
||||
"description": "Notification message for when a password has been regenerated"
|
||||
},
|
||||
"saveLoginToBitwarden": {
|
||||
"message": "Save login to Bitwarden?",
|
||||
"message": "将登录保存到 Bitwarden 吗?",
|
||||
"description": "Confirmation message for saving a login to Bitwarden"
|
||||
},
|
||||
"spaceCharacterDescriptor": {
|
||||
"message": "Space",
|
||||
"message": "空格",
|
||||
"description": "Represents the space key in screen reader content as a readable word"
|
||||
},
|
||||
"tildeCharacterDescriptor": {
|
||||
"message": "Tilde",
|
||||
"message": "波浪号",
|
||||
"description": "Represents the ~ key in screen reader content as a readable word"
|
||||
},
|
||||
"backtickCharacterDescriptor": {
|
||||
"message": "Backtick",
|
||||
"message": "反引号",
|
||||
"description": "Represents the ` key in screen reader content as a readable word"
|
||||
},
|
||||
"exclamationCharacterDescriptor": {
|
||||
"message": "Exclamation mark",
|
||||
"message": "感叹号",
|
||||
"description": "Represents the ! key in screen reader content as a readable word"
|
||||
},
|
||||
"atSignCharacterDescriptor": {
|
||||
"message": "At sign",
|
||||
"message": "艾特号",
|
||||
"description": "Represents the @ key in screen reader content as a readable word"
|
||||
},
|
||||
"hashSignCharacterDescriptor": {
|
||||
"message": "Hash sign",
|
||||
"message": "井号",
|
||||
"description": "Represents the # key in screen reader content as a readable word"
|
||||
},
|
||||
"dollarSignCharacterDescriptor": {
|
||||
"message": "Dollar sign",
|
||||
"message": "美元符号",
|
||||
"description": "Represents the $ key in screen reader content as a readable word"
|
||||
},
|
||||
"percentSignCharacterDescriptor": {
|
||||
"message": "Percent sign",
|
||||
"message": "百分号",
|
||||
"description": "Represents the % key in screen reader content as a readable word"
|
||||
},
|
||||
"caretCharacterDescriptor": {
|
||||
"message": "Caret",
|
||||
"message": "脱字符",
|
||||
"description": "Represents the ^ key in screen reader content as a readable word"
|
||||
},
|
||||
"ampersandCharacterDescriptor": {
|
||||
"message": "Ampersand",
|
||||
"message": "与和符",
|
||||
"description": "Represents the & key in screen reader content as a readable word"
|
||||
},
|
||||
"asteriskCharacterDescriptor": {
|
||||
"message": "Asterisk",
|
||||
"message": "星号",
|
||||
"description": "Represents the * key in screen reader content as a readable word"
|
||||
},
|
||||
"parenLeftCharacterDescriptor": {
|
||||
"message": "Left parenthesis",
|
||||
"message": "左括号",
|
||||
"description": "Represents the ( key in screen reader content as a readable word"
|
||||
},
|
||||
"parenRightCharacterDescriptor": {
|
||||
"message": "Right parenthesis",
|
||||
"message": "右括号",
|
||||
"description": "Represents the ) key in screen reader content as a readable word"
|
||||
},
|
||||
"hyphenCharacterDescriptor": {
|
||||
"message": "Underscore",
|
||||
"message": "下划线",
|
||||
"description": "Represents the _ key in screen reader content as a readable word"
|
||||
},
|
||||
"underscoreCharacterDescriptor": {
|
||||
"message": "Hyphen",
|
||||
"message": "连字符",
|
||||
"description": "Represents the - key in screen reader content as a readable word"
|
||||
},
|
||||
"plusCharacterDescriptor": {
|
||||
"message": "Plus",
|
||||
"message": "加号",
|
||||
"description": "Represents the + key in screen reader content as a readable word"
|
||||
},
|
||||
"equalsCharacterDescriptor": {
|
||||
"message": "Equals",
|
||||
"message": "等号",
|
||||
"description": "Represents the = key in screen reader content as a readable word"
|
||||
},
|
||||
"braceLeftCharacterDescriptor": {
|
||||
"message": "Left brace",
|
||||
"message": "左大括号",
|
||||
"description": "Represents the { key in screen reader content as a readable word"
|
||||
},
|
||||
"braceRightCharacterDescriptor": {
|
||||
"message": "Right brace",
|
||||
"message": "右大括号",
|
||||
"description": "Represents the } key in screen reader content as a readable word"
|
||||
},
|
||||
"bracketLeftCharacterDescriptor": {
|
||||
"message": "Left bracket",
|
||||
"message": "左中括号",
|
||||
"description": "Represents the [ key in screen reader content as a readable word"
|
||||
},
|
||||
"bracketRightCharacterDescriptor": {
|
||||
"message": "Right bracket",
|
||||
"message": "右中括号",
|
||||
"description": "Represents the ] key in screen reader content as a readable word"
|
||||
},
|
||||
"pipeCharacterDescriptor": {
|
||||
"message": "Pipe",
|
||||
"message": "竖线",
|
||||
"description": "Represents the | key in screen reader content as a readable word"
|
||||
},
|
||||
"backSlashCharacterDescriptor": {
|
||||
"message": "Back slash",
|
||||
"message": "反斜杠",
|
||||
"description": "Represents the back slash key in screen reader content as a readable word"
|
||||
},
|
||||
"colonCharacterDescriptor": {
|
||||
"message": "Colon",
|
||||
"message": "冒号",
|
||||
"description": "Represents the : key in screen reader content as a readable word"
|
||||
},
|
||||
"semicolonCharacterDescriptor": {
|
||||
"message": "Semicolon",
|
||||
"message": "分号",
|
||||
"description": "Represents the ; key in screen reader content as a readable word"
|
||||
},
|
||||
"doubleQuoteCharacterDescriptor": {
|
||||
"message": "Double quote",
|
||||
"message": "双引号",
|
||||
"description": "Represents the double quote key in screen reader content as a readable word"
|
||||
},
|
||||
"singleQuoteCharacterDescriptor": {
|
||||
"message": "Single quote",
|
||||
"message": "单引号",
|
||||
"description": "Represents the ' key in screen reader content as a readable word"
|
||||
},
|
||||
"lessThanCharacterDescriptor": {
|
||||
"message": "Less than",
|
||||
"message": "小于号",
|
||||
"description": "Represents the < key in screen reader content as a readable word"
|
||||
},
|
||||
"greaterThanCharacterDescriptor": {
|
||||
"message": "Greater than",
|
||||
"message": "大于号",
|
||||
"description": "Represents the > key in screen reader content as a readable word"
|
||||
},
|
||||
"commaCharacterDescriptor": {
|
||||
"message": "Comma",
|
||||
"message": "逗号",
|
||||
"description": "Represents the , key in screen reader content as a readable word"
|
||||
},
|
||||
"periodCharacterDescriptor": {
|
||||
"message": "Period",
|
||||
"message": "句号",
|
||||
"description": "Represents the . key in screen reader content as a readable word"
|
||||
},
|
||||
"questionCharacterDescriptor": {
|
||||
"message": "Question mark",
|
||||
"message": "问号",
|
||||
"description": "Represents the ? key in screen reader content as a readable word"
|
||||
},
|
||||
"forwardSlashCharacterDescriptor": {
|
||||
"message": "Forward slash",
|
||||
"message": "正斜杠",
|
||||
"description": "Represents the / key in screen reader content as a readable word"
|
||||
},
|
||||
"lowercaseAriaLabel": {
|
||||
"message": "Lowercase"
|
||||
"message": "小写"
|
||||
},
|
||||
"uppercaseAriaLabel": {
|
||||
"message": "Uppercase"
|
||||
"message": "大写"
|
||||
},
|
||||
"generatedPassword": {
|
||||
"message": "Generated password"
|
||||
"message": "生成密码"
|
||||
}
|
||||
}
|
||||
|
@ -168,7 +168,7 @@
|
||||
"message": "複製備註"
|
||||
},
|
||||
"fill": {
|
||||
"message": "Fill",
|
||||
"message": "填入",
|
||||
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
|
||||
},
|
||||
"autoFill": {
|
||||
@ -458,7 +458,7 @@
|
||||
"description": "deprecated. Use specialCharactersLabel instead."
|
||||
},
|
||||
"include": {
|
||||
"message": "Include",
|
||||
"message": "包含",
|
||||
"description": "Card header for password generator include block"
|
||||
},
|
||||
"uppercaseDescription": {
|
||||
@ -730,10 +730,10 @@
|
||||
"message": "安全"
|
||||
},
|
||||
"confirmMasterPassword": {
|
||||
"message": "Confirm master password"
|
||||
"message": "確認主密碼"
|
||||
},
|
||||
"masterPassword": {
|
||||
"message": "Master password"
|
||||
"message": "主密碼"
|
||||
},
|
||||
"masterPassImportant": {
|
||||
"message": "Your master password cannot be recovered if you forget it!"
|
||||
@ -1092,10 +1092,10 @@
|
||||
"message": "This file export will be password protected and require the file password to decrypt."
|
||||
},
|
||||
"filePassword": {
|
||||
"message": "File password"
|
||||
"message": "檔案密碼"
|
||||
},
|
||||
"exportPasswordDescription": {
|
||||
"message": "This password will be used to export and import this file"
|
||||
"message": "此密碼將用於匯出和匯入此檔案"
|
||||
},
|
||||
"accountRestrictedOptionDescription": {
|
||||
"message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account."
|
||||
@ -2877,6 +2877,20 @@
|
||||
"generateEmail": {
|
||||
"message": "Generate email"
|
||||
},
|
||||
"generatorBoundariesHint": {
|
||||
"message": "Value must be between $MIN$ and $MAX$",
|
||||
"description": "Explains spin box minimum and maximum values to the user",
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"content": "$1",
|
||||
"example": "8"
|
||||
},
|
||||
"max": {
|
||||
"content": "$2",
|
||||
"example": "128"
|
||||
}
|
||||
}
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "使用者名稱類型"
|
||||
},
|
||||
@ -3220,9 +3234,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"loggingInOn": {
|
||||
"message": "正登入到"
|
||||
},
|
||||
"opensInANewWindow": {
|
||||
"message": "在新視窗開啟"
|
||||
},
|
||||
@ -3531,7 +3542,7 @@
|
||||
"description": "Screen reader text (aria-label) for new item button in overlay"
|
||||
},
|
||||
"newLogin": {
|
||||
"message": "New login",
|
||||
"message": "新增登入資訊",
|
||||
"description": "Button text to display within inline menu when there are no matching items on a login field"
|
||||
},
|
||||
"addNewLoginItemAria": {
|
||||
|
@ -1,7 +1,11 @@
|
||||
import { matches, mock } from "jest-mock-extended";
|
||||
import { BehaviorSubject, ReplaySubject, firstValueFrom, of, timeout } from "rxjs";
|
||||
|
||||
import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
||||
import {
|
||||
Account,
|
||||
AccountInfo,
|
||||
AccountService,
|
||||
} from "@bitwarden/common/auth/abstractions/account.service";
|
||||
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
|
||||
import { AvatarService } from "@bitwarden/common/auth/abstractions/avatar.service";
|
||||
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
||||
@ -14,7 +18,7 @@ import { AccountSwitcherService } from "./account-switcher.service";
|
||||
|
||||
describe("AccountSwitcherService", () => {
|
||||
let accountsSubject: BehaviorSubject<Record<UserId, AccountInfo>>;
|
||||
let activeAccountSubject: BehaviorSubject<{ id: UserId } & AccountInfo>;
|
||||
let activeAccountSubject: BehaviorSubject<Account | null>;
|
||||
let authStatusSubject: ReplaySubject<Record<UserId, AuthenticationStatus>>;
|
||||
|
||||
const accountService = mock<AccountService>();
|
||||
@ -29,7 +33,7 @@ describe("AccountSwitcherService", () => {
|
||||
beforeEach(() => {
|
||||
jest.resetAllMocks();
|
||||
accountsSubject = new BehaviorSubject<Record<UserId, AccountInfo>>(null);
|
||||
activeAccountSubject = new BehaviorSubject<{ id: UserId } & AccountInfo>(null);
|
||||
activeAccountSubject = new BehaviorSubject<Account | null>(null);
|
||||
authStatusSubject = new ReplaySubject<Record<UserId, AuthenticationStatus>>(1);
|
||||
|
||||
// Use subject to allow for easy updates
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
<ng-container slot="end">
|
||||
<app-pop-out></app-pop-out>
|
||||
<app-current-account *ngIf="showAcctSwitcher"></app-current-account>
|
||||
<app-current-account *ngIf="showAcctSwitcher && hasLoggedInAccount"></app-current-account>
|
||||
</ng-container>
|
||||
</popup-header>
|
||||
|
||||
|
@ -15,6 +15,7 @@ import { PopOutComponent } from "../../../platform/popup/components/pop-out.comp
|
||||
import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-header.component";
|
||||
import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.component";
|
||||
import { CurrentAccountComponent } from "../account-switching/current-account.component";
|
||||
import { AccountSwitcherService } from "../account-switching/services/account-switcher.service";
|
||||
|
||||
import { ExtensionBitwardenLogo } from "./extension-bitwarden-logo.icon";
|
||||
|
||||
@ -50,6 +51,7 @@ export class ExtensionAnonLayoutWrapperComponent implements OnInit, OnDestroy {
|
||||
protected pageIcon: Icon;
|
||||
protected showReadonlyHostname: boolean;
|
||||
protected maxWidth: "md" | "3xl";
|
||||
protected hasLoggedInAccount: boolean = false;
|
||||
|
||||
protected theme: string;
|
||||
protected logo = ExtensionBitwardenLogo;
|
||||
@ -59,6 +61,7 @@ export class ExtensionAnonLayoutWrapperComponent implements OnInit, OnDestroy {
|
||||
private route: ActivatedRoute,
|
||||
private i18nService: I18nService,
|
||||
private extensionAnonLayoutWrapperDataService: AnonLayoutWrapperDataService,
|
||||
private accountSwitcherService: AccountSwitcherService,
|
||||
) {}
|
||||
|
||||
async ngOnInit(): Promise<void> {
|
||||
@ -68,6 +71,12 @@ export class ExtensionAnonLayoutWrapperComponent implements OnInit, OnDestroy {
|
||||
// Listen for page changes and update the page data appropriately
|
||||
this.listenForPageDataChanges();
|
||||
this.listenForServiceDataChanges();
|
||||
|
||||
this.accountSwitcherService.availableAccounts$
|
||||
.pipe(takeUntil(this.destroy$))
|
||||
.subscribe((accounts) => {
|
||||
this.hasLoggedInAccount = accounts.some((account) => account.id !== "addAccount");
|
||||
});
|
||||
}
|
||||
|
||||
private listenForPageDataChanges() {
|
||||
|
@ -27,6 +27,7 @@ import { ButtonModule, I18nMockService } from "@bitwarden/components";
|
||||
|
||||
import { RegistrationCheckEmailIcon } from "../../../../../../libs/auth/src/angular/icons/registration-check-email.icon";
|
||||
import { PopupRouterCacheService } from "../../../platform/popup/view-cache/popup-router-cache.service";
|
||||
import { AccountSwitcherService } from "../account-switching/services/account-switcher.service";
|
||||
|
||||
import { ExtensionAnonLayoutWrapperDataService } from "./extension-anon-layout-wrapper-data.service";
|
||||
import {
|
||||
@ -45,6 +46,7 @@ const decorators = (options: {
|
||||
applicationVersion?: string;
|
||||
clientType?: ClientType;
|
||||
hostName?: string;
|
||||
accounts?: any[];
|
||||
}) => {
|
||||
return [
|
||||
componentWrapperDecorator(
|
||||
@ -83,6 +85,13 @@ const decorators = (options: {
|
||||
}),
|
||||
},
|
||||
},
|
||||
{
|
||||
provide: AccountSwitcherService,
|
||||
useValue: {
|
||||
availableAccounts$: of(options.accounts || []),
|
||||
SPECIAL_ADD_ACCOUNT_ID: "addAccount",
|
||||
} as Partial<AccountSwitcherService>,
|
||||
},
|
||||
{
|
||||
provide: AuthService,
|
||||
useValue: {
|
||||
@ -300,3 +309,64 @@ export const DynamicContentExample: Story = {
|
||||
],
|
||||
}),
|
||||
};
|
||||
|
||||
export const HasLoggedInAccountExample: Story = {
|
||||
render: (args) => ({
|
||||
props: args,
|
||||
template: "<router-outlet></router-outlet>",
|
||||
}),
|
||||
decorators: decorators({
|
||||
components: [DefaultPrimaryOutletExampleComponent],
|
||||
routes: [
|
||||
{
|
||||
path: "**",
|
||||
redirectTo: "has-logged-in-account",
|
||||
pathMatch: "full",
|
||||
},
|
||||
{
|
||||
path: "",
|
||||
component: ExtensionAnonLayoutWrapperComponent,
|
||||
children: [
|
||||
{
|
||||
path: "has-logged-in-account",
|
||||
data: {
|
||||
hasLoggedInAccount: true,
|
||||
showAcctSwitcher: true,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "",
|
||||
component: DefaultPrimaryOutletExampleComponent,
|
||||
},
|
||||
{
|
||||
path: "",
|
||||
component: DefaultSecondaryOutletExampleComponent,
|
||||
outlet: "secondary",
|
||||
},
|
||||
{
|
||||
path: "",
|
||||
component: DefaultEnvSelectorOutletExampleComponent,
|
||||
outlet: "environment-selector",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
accounts: [
|
||||
{
|
||||
name: "Test User",
|
||||
email: "testuser@bitwarden.com",
|
||||
id: "123e4567-e89b-12d3-a456-426614174000",
|
||||
server: "bitwarden.com",
|
||||
status: 2,
|
||||
isActive: false,
|
||||
},
|
||||
{
|
||||
name: "addAccount",
|
||||
id: "addAccount",
|
||||
isActive: false,
|
||||
},
|
||||
],
|
||||
}),
|
||||
};
|
||||
|
@ -1,10 +1,12 @@
|
||||
import { Component, OnDestroy, OnInit, ViewChild } from "@angular/core";
|
||||
import { FormBuilder, Validators } from "@angular/forms";
|
||||
import { Router } from "@angular/router";
|
||||
import { Subject, firstValueFrom, switchMap, takeUntil } from "rxjs";
|
||||
import { ActivatedRoute, Router } from "@angular/router";
|
||||
import { Subject, firstValueFrom, switchMap, takeUntil, tap } from "rxjs";
|
||||
|
||||
import { EnvironmentSelectorComponent } from "@bitwarden/angular/auth/components/environment-selector.component";
|
||||
import { LoginEmailServiceAbstraction, RegisterRouteService } from "@bitwarden/auth/common";
|
||||
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||
import { ToastService } from "@bitwarden/components";
|
||||
@ -38,9 +40,13 @@ export class HomeComponent implements OnInit, OnDestroy {
|
||||
private accountSwitcherService: AccountSwitcherService,
|
||||
private registerRouteService: RegisterRouteService,
|
||||
private toastService: ToastService,
|
||||
private configService: ConfigService,
|
||||
private route: ActivatedRoute,
|
||||
) {}
|
||||
|
||||
async ngOnInit(): Promise<void> {
|
||||
this.listenForUnauthUiRefreshFlagChanges();
|
||||
|
||||
const email = await firstValueFrom(this.loginEmailService.loginEmail$);
|
||||
const rememberEmail = this.loginEmailService.getRememberEmail();
|
||||
|
||||
@ -70,6 +76,29 @@ export class HomeComponent implements OnInit, OnDestroy {
|
||||
this.destroyed$.complete();
|
||||
}
|
||||
|
||||
private listenForUnauthUiRefreshFlagChanges() {
|
||||
this.configService
|
||||
.getFeatureFlag$(FeatureFlag.UnauthenticatedExtensionUIRefresh)
|
||||
.pipe(
|
||||
tap(async (flag) => {
|
||||
// If the flag is turned ON, we must force a reload to ensure the correct UI is shown
|
||||
if (flag) {
|
||||
const uniqueQueryParams = {
|
||||
...this.route.queryParams,
|
||||
// adding a unique timestamp to the query params to force a reload
|
||||
t: new Date().getTime().toString(),
|
||||
};
|
||||
|
||||
await this.router.navigate(["/login"], {
|
||||
queryParams: uniqueQueryParams,
|
||||
});
|
||||
}
|
||||
}),
|
||||
takeUntil(this.destroyed$),
|
||||
)
|
||||
.subscribe();
|
||||
}
|
||||
|
||||
get availableAccounts$() {
|
||||
return this.accountSwitcherService.availableAccounts$;
|
||||
}
|
||||
|
@ -216,7 +216,6 @@ export type OverlayBackgroundExtensionMessageHandlers = {
|
||||
getCurrentTabFrameId: ({ sender }: BackgroundSenderParam) => number;
|
||||
updateSubFrameData: ({ message, sender }: BackgroundOnMessageHandlerParams) => void;
|
||||
triggerSubFrameFocusInRebuild: ({ sender }: BackgroundSenderParam) => void;
|
||||
shouldRepositionSubFrameInlineMenuOnScroll: ({ sender }: BackgroundSenderParam) => void;
|
||||
destroyAutofillInlineMenuListeners: ({
|
||||
message,
|
||||
sender,
|
||||
|
@ -32,6 +32,7 @@ import {
|
||||
} from "@bitwarden/common/spec";
|
||||
import { UserId } from "@bitwarden/common/types/guid";
|
||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
|
||||
import { VaultSettingsService } from "@bitwarden/common/vault/abstractions/vault-settings/vault-settings.service";
|
||||
import { CipherRepromptType, CipherType } from "@bitwarden/common/vault/enums";
|
||||
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
||||
@ -106,6 +107,7 @@ describe("OverlayBackground", () => {
|
||||
let selectedThemeMock$: BehaviorSubject<ThemeType>;
|
||||
let inlineMenuFieldQualificationService: InlineMenuFieldQualificationService;
|
||||
let themeStateService: MockProxy<ThemeStateService>;
|
||||
let totpService: MockProxy<TotpService>;
|
||||
let overlayBackground: OverlayBackground;
|
||||
let portKeyForTabSpy: Record<number, string>;
|
||||
let pageDetailsForTabSpy: PageDetailsForTab;
|
||||
@ -184,6 +186,7 @@ describe("OverlayBackground", () => {
|
||||
inlineMenuFieldQualificationService = new InlineMenuFieldQualificationService();
|
||||
themeStateService = mock<ThemeStateService>();
|
||||
themeStateService.selectedTheme$ = selectedThemeMock$;
|
||||
totpService = mock<TotpService>();
|
||||
overlayBackground = new OverlayBackground(
|
||||
logService,
|
||||
cipherService,
|
||||
@ -198,6 +201,7 @@ describe("OverlayBackground", () => {
|
||||
fido2ActiveRequestManager,
|
||||
inlineMenuFieldQualificationService,
|
||||
themeStateService,
|
||||
totpService,
|
||||
generatedPasswordCallbackMock,
|
||||
addPasswordCallbackMock,
|
||||
);
|
||||
@ -629,9 +633,7 @@ describe("OverlayBackground", () => {
|
||||
|
||||
it("skips updating the inline menu list if the user has the inline menu set to open on button click", async () => {
|
||||
inlineMenuVisibilityMock$.next(AutofillOverlayVisibility.OnButtonClick);
|
||||
jest
|
||||
.spyOn(overlayBackground as any, "checkIsInlineMenuListVisible")
|
||||
.mockReturnValue(false);
|
||||
overlayBackground["inlineMenuListPort"] = null;
|
||||
tabsSendMessageSpy.mockImplementation((_tab, message, _options) => {
|
||||
if (message.command === "checkFocusedFieldHasValue") {
|
||||
return Promise.resolve(true);
|
||||
@ -2267,7 +2269,7 @@ describe("OverlayBackground", () => {
|
||||
});
|
||||
|
||||
it("closes the list if the user has the inline menu set to show on button click and the list is open", async () => {
|
||||
overlayBackground["isInlineMenuListVisible"] = true;
|
||||
overlayBackground["inlineMenuListPort"] = listPortSpy;
|
||||
inlineMenuVisibilityMock$.next(AutofillOverlayVisibility.OnButtonClick);
|
||||
|
||||
sendMockExtensionMessage({ command: "openAutofillInlineMenu" }, sender);
|
||||
|
@ -33,6 +33,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl
|
||||
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
||||
import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service";
|
||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
|
||||
import { VaultSettingsService } from "@bitwarden/common/vault/abstractions/vault-settings/vault-settings.service";
|
||||
import { CipherType } from "@bitwarden/common/vault/enums";
|
||||
import { buildCipherIcon } from "@bitwarden/common/vault/icon/build-cipher-icon";
|
||||
@ -168,8 +169,6 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
||||
getCurrentTabFrameId: ({ sender }) => this.getSenderFrameId(sender),
|
||||
updateSubFrameData: ({ message, sender }) => this.updateSubFrameData(message, sender),
|
||||
triggerSubFrameFocusInRebuild: ({ sender }) => this.triggerSubFrameFocusInRebuild(sender),
|
||||
shouldRepositionSubFrameInlineMenuOnScroll: ({ sender }) =>
|
||||
this.shouldRepositionSubFrameInlineMenuOnScroll(sender),
|
||||
destroyAutofillInlineMenuListeners: ({ message, sender }) =>
|
||||
this.triggerDestroyInlineMenuListeners(sender.tab, message.subFrameData.frameId),
|
||||
collectPageDetailsResponse: ({ message, sender }) => this.storePageDetails(message, sender),
|
||||
@ -219,6 +218,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
||||
private fido2ActiveRequestManager: Fido2ActiveRequestManager,
|
||||
private inlineMenuFieldQualificationService: InlineMenuFieldQualificationService,
|
||||
private themeStateService: ThemeStateService,
|
||||
private totpService: TotpService,
|
||||
private generatePasswordCallback: () => Promise<string>,
|
||||
private addPasswordCallback: (password: string) => Promise<void>,
|
||||
) {
|
||||
@ -1010,7 +1010,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
||||
);
|
||||
|
||||
if (
|
||||
!this.checkIsInlineMenuListVisible() &&
|
||||
!this.inlineMenuListPort &&
|
||||
(await this.getInlineMenuVisibility()) === AutofillOverlayVisibility.OnButtonClick
|
||||
) {
|
||||
return;
|
||||
@ -1060,7 +1060,6 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
||||
}
|
||||
|
||||
const cipher = this.inlineMenuCiphers.get(inlineMenuCipherId);
|
||||
|
||||
if (usePasskey && cipher.login?.hasFido2Credentials) {
|
||||
await this.authenticatePasskeyCredential(
|
||||
sender,
|
||||
@ -1068,6 +1067,11 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
||||
);
|
||||
this.updateLastUsedInlineMenuCipher(inlineMenuCipherId, cipher);
|
||||
|
||||
if (cipher.login?.totp) {
|
||||
this.platformUtilsService.copyToClipboard(
|
||||
await this.totpService.getCode(cipher.login.totp),
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1819,7 +1823,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isInlineMenuListVisible) {
|
||||
if (this.inlineMenuListPort) {
|
||||
this.closeInlineMenu(sender, {
|
||||
forceCloseInlineMenu: true,
|
||||
overlayElement: AutofillOverlayElement.List,
|
||||
@ -2600,20 +2604,6 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
||||
this.repositionInlineMenu$.next(sender);
|
||||
}
|
||||
|
||||
/**
|
||||
* Triggers on scroll of a frame within the tab. Will reposition the inline menu
|
||||
* if the focused field is within a sub-frame and the inline menu is visible.
|
||||
*
|
||||
* @param sender - The sender of the message
|
||||
*/
|
||||
private shouldRepositionSubFrameInlineMenuOnScroll(sender: chrome.runtime.MessageSender) {
|
||||
if (!this.isInlineMenuButtonVisible || sender.tab.id !== this.focusedFieldData?.tabId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.focusedFieldData.frameId > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles determining if the inline menu should be repositioned or closed, and initiates
|
||||
* the process of calculating the new position of the inline menu.
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { EVENTS } from "@bitwarden/common/autofill/constants";
|
||||
import { ThemeType } from "@bitwarden/common/platform/enums";
|
||||
import { ThemeTypes } from "@bitwarden/common/platform/enums";
|
||||
|
||||
import { setElementStyles } from "../../../utils";
|
||||
import {
|
||||
@ -210,19 +210,19 @@ class AutofillOverlayIframeService implements AutofillOverlayIframeServiceInterf
|
||||
const { theme } = message;
|
||||
let borderColor: string;
|
||||
let verifiedTheme = theme;
|
||||
if (verifiedTheme === ThemeType.System) {
|
||||
if (verifiedTheme === ThemeTypes.System) {
|
||||
verifiedTheme = globalThis.matchMedia("(prefers-color-scheme: dark)").matches
|
||||
? ThemeType.Dark
|
||||
: ThemeType.Light;
|
||||
? ThemeTypes.Dark
|
||||
: ThemeTypes.Light;
|
||||
}
|
||||
|
||||
if (verifiedTheme === ThemeType.Dark) {
|
||||
if (verifiedTheme === ThemeTypes.Dark) {
|
||||
borderColor = "#4c525f";
|
||||
}
|
||||
if (theme === ThemeType.Nord) {
|
||||
if (theme === ThemeTypes.Nord) {
|
||||
borderColor = "#2E3440";
|
||||
}
|
||||
if (theme === ThemeType.SolarizedDark) {
|
||||
if (theme === ThemeTypes.SolarizedDark) {
|
||||
borderColor = "#073642";
|
||||
}
|
||||
if (borderColor) {
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { Theme } from "@bitwarden/common/platform/enums";
|
||||
|
||||
type NotificationBarIframeInitData = {
|
||||
type?: string;
|
||||
isVaultLocked?: boolean;
|
||||
theme?: string;
|
||||
theme?: Theme;
|
||||
removeIndividualVault?: boolean;
|
||||
importType?: string;
|
||||
applyRedesign?: boolean;
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { ThemeType } from "@bitwarden/common/platform/enums";
|
||||
import { ThemeTypes } from "@bitwarden/common/platform/enums";
|
||||
import { ConsoleLogService } from "@bitwarden/common/platform/services/console-log.service";
|
||||
import type { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
|
||||
|
||||
@ -392,10 +392,10 @@ function setupLogoLink(i18n: Record<string, string>) {
|
||||
|
||||
function setNotificationBarTheme() {
|
||||
let theme = notificationBarIframeInitData.theme;
|
||||
if (theme === ThemeType.System) {
|
||||
if (theme === ThemeTypes.System) {
|
||||
theme = globalThis.matchMedia("(prefers-color-scheme: dark)").matches
|
||||
? ThemeType.Dark
|
||||
: ThemeType.Light;
|
||||
? ThemeTypes.Dark
|
||||
: ThemeTypes.Light;
|
||||
}
|
||||
|
||||
document.documentElement.classList.add(`theme_${theme}`);
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { EVENTS } from "@bitwarden/common/autofill/constants";
|
||||
import { ThemeType } from "@bitwarden/common/platform/enums";
|
||||
import { ThemeTypes } from "@bitwarden/common/platform/enums";
|
||||
|
||||
import { sendExtensionMessage, setElementStyles } from "../../../utils";
|
||||
import {
|
||||
@ -239,19 +239,19 @@ export class AutofillInlineMenuIframeService implements AutofillInlineMenuIframe
|
||||
const { theme } = message;
|
||||
let borderColor: string;
|
||||
let verifiedTheme = theme;
|
||||
if (verifiedTheme === ThemeType.System) {
|
||||
if (verifiedTheme === ThemeTypes.System) {
|
||||
verifiedTheme = globalThis.matchMedia("(prefers-color-scheme: dark)").matches
|
||||
? ThemeType.Dark
|
||||
: ThemeType.Light;
|
||||
? ThemeTypes.Dark
|
||||
: ThemeTypes.Light;
|
||||
}
|
||||
|
||||
if (verifiedTheme === ThemeType.Dark) {
|
||||
if (verifiedTheme === ThemeTypes.Dark) {
|
||||
borderColor = "#4c525f";
|
||||
}
|
||||
if (theme === ThemeType.Nord) {
|
||||
if (theme === ThemeTypes.Nord) {
|
||||
borderColor = "#2E3440";
|
||||
}
|
||||
if (theme === ThemeType.SolarizedDark) {
|
||||
if (theme === ThemeTypes.SolarizedDark) {
|
||||
borderColor = "#073642";
|
||||
}
|
||||
if (borderColor) {
|
||||
|
@ -1,6 +1,8 @@
|
||||
import { Theme } from "@bitwarden/common/platform/enums";
|
||||
|
||||
export type NotificationTypeData = {
|
||||
isVaultLocked?: boolean;
|
||||
theme?: string;
|
||||
theme?: Theme;
|
||||
removeIndividualVault?: boolean;
|
||||
importType?: string;
|
||||
launchTimestamp?: number;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user