Merge branch 'master' of github.com:bitwarden/desktop into feature/header

# Conflicts:
#	src/app/app.module.ts
This commit is contained in:
Hinton 2021-09-22 16:11:24 +02:00
commit 22d8b5efeb
24 changed files with 323 additions and 319 deletions

View File

@ -10,7 +10,7 @@ on:
jobs:
cloc:
name: CLOC
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
@ -23,9 +23,10 @@ jobs:
- name: Print lines of code
run: cloc --include-lang TypeScript,JavaScript,HTML,Sass,CSS --vcs git
linux:
name: Linux Build
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
@ -115,18 +116,14 @@ jobs:
path: ./dist/Bitwarden-${{ env.PACKAGE_VERSION }}-x86_64.AppImage
if-no-files-found: error
windows:
name: Windows Build
runs-on: windows-latest
runs-on: windows-2019
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
- name: Set up dotnet
uses: actions/setup-dotnet@a71d1eb2c86af85faa8c772c03fb365e377e45ea # v1.8.0
with:
dotnet-version: "3.1.x"
- name: Set up Node
uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea # v2.1.5
with:
@ -150,24 +147,7 @@ jobs:
node-gyp install $(node -v)
- name: Install AST
shell: pwsh
run: |
cd $HOME
git clone https://github.com/vcsjones/AzureSignTool.git
cd AzureSignTool
$latest_head = $(git rev-parse HEAD)[0..9] -join ""
$latest_version = "0.0.0-g$latest_head"
Write-Host "--------"
Write-Host "git commit - $(git rev-parse HEAD)"
Write-Host "latest_head - $latest_head"
Write-Host "PACKAGE VERSION TO BUILD - $latest_version"
Write-Host "--------"
dotnet restore
dotnet pack --output ./nupkg
dotnet tool install --global --ignore-failed-sources --add-source ./nupkg --version $latest_version azuresigntool
uses: bitwarden/gh-actions/install-ast@f135c42c8596cb535c5bcb7523c0b2eef89709ac
- name: Set up environment
shell: pwsh
@ -267,7 +247,7 @@ jobs:
macos-build:
name: MacOS Build
runs-on: macos-latest
runs-on: macos-10.15
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
@ -368,7 +348,7 @@ jobs:
macos-package-github:
name: MacOS Package GitHub Release Assets
runs-on: macos-latest
runs-on: macos-10.15
needs: macos-build
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/rc'
steps:
@ -498,7 +478,7 @@ jobs:
macos-package-mas:
name: MacOS Package Prod Release Asset
runs-on: macos-latest
runs-on: macos-10.15
needs: macos-build
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/rc'
steps:
@ -624,7 +604,7 @@ jobs:
macos-package-dev:
name: MacOS Package Dev Release Asset
if: false # We need to look into how code signing works for dev
runs-on: macos-latest
runs-on: macos-10.15
needs: macos-build
steps:
- name: Checkout repo

View File

@ -11,7 +11,7 @@ on:
jobs:
setup:
name: Setup
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
outputs:
package_version: ${{ steps.create_tags.outputs.package_version }}
tag_version: ${{ steps.create_tags.outputs.tag_version }}
@ -45,7 +45,7 @@ jobs:
snap:
name: Deploy Snap
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
needs: setup
env:
_PKG_VERSION: ${{ needs.setup.outputs.package_version }}
@ -81,7 +81,7 @@ jobs:
choco:
name: Deploy Choco
runs-on: windows-latest
runs-on: windows-2019
needs: setup
env:
_PKG_VERSION: ${{ needs.setup.outputs.package_version }}
@ -124,7 +124,7 @@ jobs:
macos:
name: Deploy MacOS
runs-on: macos-latest
runs-on: macos-10.15
needs: setup
env:
_PKG_VERSION: ${{ needs.setup.outputs.package_version }}
@ -153,7 +153,7 @@ jobs:
auto-updater-deploy:
name: Release auto-updater files
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
needs:
- setup
- snap
@ -178,7 +178,8 @@ jobs:
#cat release.json
RELEASE_UPLOAD_URL=$(cat release.json | jq -r ' .upload_url ' | cut -d { -f 1)
cat release.json | jq -rc ' .assets[] | select( .name | test("prerelease-latest.*[yml|json]")) | {name: .name, url: .url, content_type: .content_type}' > release_assets.jsonl
cat release.json \
| jq -rc ' .assets[] | select( .name | test("prerelease-latest.*[yml|json]")) | {name: .name, url: .url, content_type: .content_type}' > release_assets.jsonl
echo "=====ASSETS====="
echo Release Upload URL: $RELEASE_UPLOAD_URL

View File

@ -14,7 +14,7 @@ on:
jobs:
setup:
name: Setup
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
outputs:
release_upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
@ -62,7 +62,7 @@ jobs:
linux:
name: Linux
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
needs: setup
steps:
- name: Checkout repo
@ -117,17 +117,12 @@ jobs:
windows-signed:
name: Windows Signed
runs-on: windows-latest
runs-on: windows-2019
needs: setup
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
- name: Set up dotnet
uses: actions/setup-dotnet@a71d1eb2c86af85faa8c772c03fb365e377e45ea # v1.8.0
with:
dotnet-version: "3.1.x"
- name: Set up Node
uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea # v2.1.5
with:
@ -151,24 +146,7 @@ jobs:
node-gyp install $(node -v)
- name: Install AST
shell: pwsh
run: |
cd $HOME
git clone https://github.com/vcsjones/AzureSignTool.git
cd AzureSignTool
$latest_head = $(git rev-parse HEAD)[0..9] -join ""
$latest_version = "0.0.0-g$latest_head"
Write-Host "--------"
Write-Host "git commit - $(git rev-parse HEAD)"
Write-Host "latest_head - $latest_head"
Write-Host "PACKAGE VERSION TO BUILD - $latest_version"
Write-Host "--------"
dotnet restore
dotnet pack --output ./nupkg
dotnet tool install --global --ignore-failed-sources --add-source ./nupkg --version $latest_version azuresigntool
uses: bitwarden/gh-actions/install-ast@f135c42c8596cb535c5bcb7523c0b2eef89709ac
- name: Set up environment
shell: pwsh
@ -231,7 +209,7 @@ jobs:
windows-store:
name: Windows Store
runs-on: windows-latest
runs-on: windows-2019
needs: setup
steps:
- name: Checkout repo
@ -316,7 +294,7 @@ jobs:
macos:
name: MacOS
runs-on: macos-latest
runs-on: macos-10.15
needs: setup
steps:
- name: Checkout repo
@ -437,7 +415,7 @@ jobs:
update-release-assets:
name: Update Release Assets
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
needs:
- setup
- linux

2
jslib

@ -1 +1 @@
Subproject commit da132217da553365538bbb66a21c40d3966610c1
Subproject commit d7823f4e7e27732dba540b655e495436e547a8bd

View File

@ -5,7 +5,7 @@ exports.default = async function(configuration) {
) {
console.log(`[*] Signing file: ${configuration.path}`)
require("child_process").execSync(
`azuresigntool sign ` +
`azuresigntool sign -v ` +
`-kvu ${process.env.SIGNING_VAULT_URL} ` +
`-kvi ${process.env.SIGNING_CLIENT_ID} ` +
`-kvt ${process.env.SIGNING_TENANT_ID} ` +

View File

@ -24,7 +24,7 @@ import { BroadcasterService } from 'jslib-angular/services/broadcaster.service';
import { LockComponent as BaseLockComponent } from 'jslib-angular/components/lock.component';
import { ElectronConstants } from 'jslib-electron/electronConstants';
import { ConstantsService } from 'jslib-common/services/constants.service';
const BroadcasterSubscriptionId = 'LockComponent';
@ -48,7 +48,7 @@ export class LockComponent extends BaseLockComponent implements OnDestroy {
async ngOnInit() {
await super.ngOnInit();
const autoPromptBiometric = !await this.storageService.get<boolean>(ElectronConstants.noAutoPromptBiometrics);
const autoPromptBiometric = !await this.storageService.get<boolean>(ConstantsService.disableAutoBiometricsPromptKey);
this.route.queryParams.subscribe(params => {
if (this.supportsBiometric && params.promptBiometric && autoPromptBiometric) {

View File

@ -10,7 +10,7 @@
<div class="box">
<app-callout type="tip">{{'ssoCompleteRegistration' | i18n}}</app-callout>
<app-callout type="warning" title="{{'resetPasswordPolicyAutoEnroll' | i18n}}"
*ngIf="resetPassswordAutoEnroll">
*ngIf="resetPasswordAutoEnroll">
{{'resetPasswordAutoEnrollInviteWarning' | i18n}}
</app-callout>
<app-callout type="info" [enforcedPolicyOptions]="enforcedPolicyOptions" *ngIf="enforcedPolicyOptions">

View File

@ -172,7 +172,7 @@ export class SettingsComponent implements OnInit {
this.supportsBiometric = await this.platformUtilsService.supportsBiometric();
this.biometric = await this.vaultTimeoutService.isBiometricLockSet();
this.biometricText = await this.storageService.get<string>(ConstantsService.biometricText);
this.noAutoPromptBiometrics = await this.storageService.get<boolean>(ElectronConstants.noAutoPromptBiometrics);
this.noAutoPromptBiometrics = await this.storageService.get<boolean>(ConstantsService.disableAutoBiometricsPromptKey);
this.noAutoPromptBiometricsText = await this.storageService.get<string>(ElectronConstants.noAutoPromptBiometricsText);
this.alwaysShowDock = await this.storageService.get<boolean>(ElectronConstants.alwaysShowDock);
this.showAlwaysShowDock = this.platformUtilsService.getDevice() === DeviceType.MacOsDesktop;
@ -235,7 +235,7 @@ export class SettingsComponent implements OnInit {
await this.storageService.save(ConstantsService.biometricUnlockKey, true);
} else {
await this.storageService.remove(ConstantsService.biometricUnlockKey);
await this.storageService.remove(ElectronConstants.noAutoPromptBiometrics);
await this.storageService.remove(ConstantsService.disableAutoBiometricsPromptKey);
this.noAutoPromptBiometrics = false;
}
this.vaultTimeoutService.biometricLocked = false;
@ -248,9 +248,9 @@ export class SettingsComponent implements OnInit {
}
if (this.noAutoPromptBiometrics) {
await this.storageService.save(ElectronConstants.noAutoPromptBiometrics, true);
await this.storageService.save(ConstantsService.disableAutoBiometricsPromptKey, true);
} else {
await this.storageService.remove(ElectronConstants.noAutoPromptBiometrics);
await this.storageService.remove(ConstantsService.disableAutoBiometricsPromptKey);
}
}

View File

@ -49,6 +49,7 @@ import { ColorPasswordPipe } from 'jslib-angular/pipes/color-password.pipe';
import { I18nPipe } from 'jslib-angular/pipes/i18n.pipe';
import { SearchCiphersPipe } from 'jslib-angular/pipes/search-ciphers.pipe';
import { AddEditCustomFieldsComponent } from './vault/add-edit-custom-fields.component';
import { AddEditComponent } from './vault/add-edit.component';
import { AttachmentsComponent } from './vault/attachments.component';
import { CiphersComponent } from './vault/ciphers.component';
@ -61,6 +62,7 @@ import { PasswordGeneratorComponent } from './vault/password-generator.component
import { PasswordHistoryComponent } from './vault/password-history.component';
import { ShareComponent } from './vault/share.component';
import { VaultComponent } from './vault/vault.component';
import { ViewCustomFieldsComponent } from './vault/view-custom-fields.component';
import { ViewComponent } from './vault/view.component';
import { AddEditComponent as SendAddEditComponent } from './send/add-edit.component';
@ -230,6 +232,8 @@ registerLocaleData(localeZhTw, 'zh-TW');
PasswordRepromptComponent,
SetPinComponent,
VaultTimeoutInputComponent,
AddEditCustomFieldsComponent,
ViewCustomFieldsComponent,
HeaderComponent,
AccountSwitcherComponent,
AvatarComponent,

View File

@ -0,0 +1,52 @@
<div class="box">
<div class="box-header">
{{'customFields' | i18n}}
</div>
<div class="box-content">
<div cdkDropList (cdkDropListDropped)="drop($event)" *ngIf="cipher.hasFields">
<div class="box-content-row box-content-row-multi box-draggable-row" cdkDrag
*ngFor="let f of cipher.fields; let i = index; trackBy:trackByFunction"
[ngClass]="{'box-content-row-checkbox': f.type === fieldType.Boolean}">
<a href="#" appStopClick (click)="removeField(f)" appA11yTitle="{{'remove' | i18n}}"
role="button">
<i class="fa fa-minus-circle fa-lg" aria-hidden="true"></i>
</a>
<label for="fieldName{{i}}" class="sr-only">{{'name' | i18n}}</label>
<label for="fieldValue{{i}}" class="sr-only">{{'value' | i18n}}</label>
<div class="row-main">
<input id="fieldName{{i}}" type="text" name="Field.Name{{i}}" [(ngModel)]="f.name"
class="row-label" placeholder="{{'name' | i18n}}">
<input id="fieldValue{{i}}" type="text" name="Field.Value{{i}}" [(ngModel)]="f.value"
*ngIf="f.type === fieldType.Text" placeholder="{{'value' | i18n}}">
<input id="fieldValue{{i}}" type="{{f.showValue ? 'text' : 'password'}}"
name="Field.Value{{i}}" [(ngModel)]="f.value" class="monospaced"
*ngIf="f.type === fieldType.Hidden" placeholder="{{'value' | i18n}}"
[disabled]="!cipher.viewPassword && !f.newField">
</div>
<input id="fieldValue{{i}}" name="Field.Value{{i}}" type="checkbox" [(ngModel)]="f.value"
*ngIf="f.type === fieldType.Boolean" appTrueFalseValue trueValue="true"
falseValue="false">
<div class="action-buttons"
*ngIf="f.type === fieldType.Hidden && (cipher.viewPassword || f.newField)">
<a class="row-btn" href="#" appStopClick appBlurClick role="button"
appA11yTitle="{{'toggleVisibility' | i18n}}" (click)="toggleFieldValue(f)">
<i class="fa fa-lg" aria-hidden="true"
[ngClass]="{'fa-eye': !f.showValue, 'fa-eye-slash': f.showValue}"></i>
</a>
</div>
<div class="drag-handle" appA11yTitle="{{'dragToSort' | i18n}}" cdkDragHandle>
<i class="fa fa-bars" aria-hidden="true"></i>
</div>
</div>
</div>
<div class="box-content-row" appBoxRow>
<a href="#" appStopClick (click)="addField()" role="button">
<i class="fa fa-plus-circle fa-fw fa-lg" aria-hidden="true"></i> {{'newCustomField' | i18n}}
</a>
<label for="addFieldType" class="sr-only">{{'type' | i18n}}</label>
<select id="addFieldType" name="AddFieldType" [(ngModel)]="addFieldType" class="field-type">
<option *ngFor="let o of addFieldTypeOptions" [ngValue]="o.value">{{o.name}}</option>
</select>
</div>
</div>
</div>

View File

@ -0,0 +1,18 @@
import { Component } from '@angular/core';
import {
AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent
} from 'jslib-angular/components/add-edit-custom-fields.component';
import { EventService } from 'jslib-common/abstractions/event.service';
import { I18nService } from 'jslib-common/abstractions/i18n.service';
@Component({
selector: 'app-vault-add-edit-custom-fields',
templateUrl: 'add-edit-custom-fields.component.html',
})
export class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent {
constructor(i18nService: I18nService, eventService: EventService) {
super(i18nService, eventService);
}
}

View File

@ -281,58 +281,7 @@
</div>
</div>
</div>
<div class="box">
<div class="box-header">
{{'customFields' | i18n}}
</div>
<div class="box-content">
<div cdkDropList (cdkDropListDropped)="drop($event)" *ngIf="cipher.hasFields">
<div class="box-content-row box-content-row-multi box-draggable-row" cdkDrag
*ngFor="let f of cipher.fields; let i = index; trackBy:trackByFunction"
[ngClass]="{'box-content-row-checkbox': f.type === fieldType.Boolean}">
<a href="#" appStopClick (click)="removeField(f)" appA11yTitle="{{'remove' | i18n}}"
role="button">
<i class="fa fa-minus-circle fa-lg" aria-hidden="true"></i>
</a>
<label for="fieldName{{i}}" class="sr-only">{{'name' | i18n}}</label>
<label for="fieldValue{{i}}" class="sr-only">{{'value' | i18n}}</label>
<div class="row-main">
<input id="fieldName{{i}}" type="text" name="Field.Name{{i}}" [(ngModel)]="f.name"
class="row-label" placeholder="{{'name' | i18n}}">
<input id="fieldValue{{i}}" type="text" name="Field.Value{{i}}" [(ngModel)]="f.value"
*ngIf="f.type === fieldType.Text" placeholder="{{'value' | i18n}}">
<input id="fieldValue{{i}}" type="{{f.showValue ? 'text' : 'password'}}"
name="Field.Value{{i}}" [(ngModel)]="f.value" class="monospaced"
*ngIf="f.type === fieldType.Hidden" placeholder="{{'value' | i18n}}"
[disabled]="!cipher.viewPassword && !f.newField">
</div>
<input id="fieldValue{{i}}" name="Field.Value{{i}}" type="checkbox" [(ngModel)]="f.value"
*ngIf="f.type === fieldType.Boolean" appTrueFalseValue trueValue="true"
falseValue="false">
<div class="action-buttons"
*ngIf="f.type === fieldType.Hidden && (cipher.viewPassword || f.newField)">
<a class="row-btn" href="#" appStopClick appBlurClick role="button"
appA11yTitle="{{'toggleVisibility' | i18n}}" (click)="toggleFieldValue(f)">
<i class="fa fa-lg" aria-hidden="true"
[ngClass]="{'fa-eye': !f.showValue, 'fa-eye-slash': f.showValue}"></i>
</a>
</div>
<div class="drag-handle" appA11yTitle="{{'dragToSort' | i18n}}" cdkDragHandle>
<i class="fa fa-bars" aria-hidden="true"></i>
</div>
</div>
</div>
<div class="box-content-row" appBoxRow>
<a href="#" appStopClick (click)="addField()" role="button">
<i class="fa fa-plus-circle fa-fw fa-lg" aria-hidden="true"></i> {{'newCustomField' | i18n}}
</a>
<label for="addFieldType" class="sr-only">{{'type' | i18n}}</label>
<select id="addFieldType" name="AddFieldType" [(ngModel)]="addFieldType" class="field-type">
<option *ngFor="let o of addFieldTypeOptions" [ngValue]="o.value">{{o.name}}</option>
</select>
</div>
</div>
</div>
<app-vault-add-edit-custom-fields [cipher]="cipher" [editMode]="editMode"></app-vault-add-edit-custom-fields>
<div class="box" *ngIf="allowOwnershipOptions()">
<div class="box-header">
{{'ownership' | i18n}}

View File

@ -0,0 +1,38 @@
<div class="box" >
<div class="box-header">
{{'customFields' | i18n}}
</div>
<div class="box-content">
<div class="box-content-row box-content-row-flex" *ngFor="let field of cipher.fields">
<div class="row-main">
<span class="row-label">{{field.name}}</span>
<div *ngIf="field.type === fieldType.Text">
{{field.value || '&nbsp;'}}
</div>
<div *ngIf="field.type === fieldType.Hidden">
<span *ngIf="field.showValue" class="monospaced show-whitespace">{{field.value}}</span>
<span *ngIf="!field.showValue" class="monospaced">{{field.maskedValue}}</span>
</div>
<div *ngIf="field.type === fieldType.Boolean">
<i class="fa fa-check-square-o" *ngIf="field.value === 'true'" aria-hidden="true"></i>
<i class="fa fa-square-o" *ngIf="field.value !== 'true'" aria-hidden="true"></i>
<span class="sr-only">{{field.value}}</span>
</div>
</div>
<div class="action-buttons">
<a class="row-btn" href="#" appStopClick appA11yTitle="{{'toggleVisibility' | i18n}}"
*ngIf="field.type === fieldType.Hidden && cipher.viewPassword"
(click)="toggleFieldValue(field)" role="button">
<i class="fa fa-lg" aria-hidden="true"
[ngClass]="{'fa-eye': !field.showValue, 'fa-eye-slash': field.showValue}"></i>
</a>
<a class="row-btn" href="#" appStopClick appA11yTitle="{{'copyValue' | i18n}}"
*ngIf="field.value && field.type !== fieldType.Boolean && !(field.type === fieldType.Hidden && !cipher.viewPassword)"
(click)="copy(field.value, 'value', field.type === fieldType.Hidden ? 'H_Field' : 'Field')"
role="button">
<i class="fa fa-lg fa-clone" aria-hidden="true"></i>
</a>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,19 @@
import {
Component,
} from '@angular/core';
import { EventService } from 'jslib-common/abstractions/event.service';
import {
ViewCustomFieldsComponent as BaseViewCustomFieldsComponent
} from 'jslib-angular/components/view-custom-fields.component';
@Component({
selector: 'app-vault-view-custom-fields',
templateUrl: 'view-custom-fields.component.html',
})
export class ViewCustomFieldsComponent extends BaseViewCustomFieldsComponent {
constructor(eventService: EventService) {
super(eventService);
}
}

View File

@ -204,44 +204,9 @@
<div class="box-content-row pre-wrap">{{cipher.notes}}</div>
</div>
</div>
<div class="box" *ngIf="cipher.hasFields">
<div class="box-header">
{{'customFields' | i18n}}
</div>
<div class="box-content">
<div class="box-content-row box-content-row-flex" *ngFor="let field of cipher.fields">
<div class="row-main">
<span class="row-label">{{field.name}}</span>
<div *ngIf="field.type === fieldType.Text">
{{field.value || '&nbsp;'}}
</div>
<div *ngIf="field.type === fieldType.Hidden">
<span *ngIf="field.showValue" class="monospaced show-whitespace">{{field.value}}</span>
<span *ngIf="!field.showValue" class="monospaced">{{field.maskedValue}}</span>
</div>
<div *ngIf="field.type === fieldType.Boolean">
<i class="fa fa-check-square-o" *ngIf="field.value === 'true'" aria-hidden="true"></i>
<i class="fa fa-square-o" *ngIf="field.value !== 'true'" aria-hidden="true"></i>
<span class="sr-only">{{field.value}}</span>
</div>
</div>
<div class="action-buttons">
<a class="row-btn" href="#" appStopClick appA11yTitle="{{'toggleVisibility' | i18n}}"
*ngIf="field.type === fieldType.Hidden && cipher.viewPassword"
(click)="toggleFieldValue(field)" role="button">
<i class="fa fa-lg" aria-hidden="true"
[ngClass]="{'fa-eye': !field.showValue, 'fa-eye-slash': field.showValue}"></i>
</a>
<a class="row-btn" href="#" appStopClick appA11yTitle="{{'copyValue' | i18n}}"
*ngIf="field.value && field.type !== fieldType.Boolean && !(field.type === fieldType.Hidden && !cipher.viewPassword)"
(click)="copy(field.value, 'value', field.type === fieldType.Hidden ? 'H_Field' : 'Field')"
role="button">
<i class="fa fa-lg fa-clone" aria-hidden="true"></i>
</a>
</div>
</div>
</div>
</div>
<app-vault-view-custom-fields *ngIf="cipher.hasFields" [cipher]="cipher"
[promptPassword]="promptPassword.bind(this)" [copy]="copy.bind(this)">
</app-vault-view-custom-fields>
<div class="box" *ngIf="cipher.hasAttachments && (canAccessPremium || cipher.organizationId)">
<div class="box-header">
{{'attachments' | i18n}}

View File

@ -61,7 +61,7 @@
}
},
"moveToOrgDesc": {
"message": "Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved."
"message": "Kies n organisasie waarheen u hierdie item wil skuif. Deur te skuif kry die organisasie die einaarskap van die item. U is dan nie meer die direkte eienaar van die item wanneer dit geskuif is nie."
},
"attachments": {
"message": "Aanhegsels"
@ -104,7 +104,7 @@
"message": "E-posadres"
},
"verificationCodeTotp": {
"message": "Verification Code (TOTP)"
"message": "Bevestigingskode (TOTP)"
},
"website": {
"message": "Webwerf"
@ -123,10 +123,10 @@
"description": "Copy value to clipboard"
},
"minimizeOnCopyToClipboard": {
"message": "Minimize when copying to clipboard"
"message": "Minimaliseer by kopieer na knipbord"
},
"minimizeOnCopyToClipboardDesc": {
"message": "Minimize when copying an item's data to the clipboard."
"message": "Minimaliseer by die kopieer van itemdata na die knipbord."
},
"toggleVisibility": {
"message": "Tokkel sigbaarheid"
@ -175,10 +175,10 @@
"message": "Adres"
},
"premiumRequired": {
"message": "Premium Required"
"message": "Premie word vereis"
},
"premiumRequiredDesc": {
"message": "A premium membership is required to use this feature."
"message": "n Premie-lidmaatskap is nodig om hierdie funksie te gebruik."
},
"errorOccurred": {
"message": "n Fout het voorgekom."
@ -305,7 +305,7 @@
"message": "Wysig"
},
"authenticatorKeyTotp": {
"message": "Authenticator Key (TOTP)"
"message": "Waarmerksleutel (TOTP)"
},
"folder": {
"message": "Vouer"
@ -326,7 +326,7 @@
"message": "Versteek"
},
"cfTypeBoolean": {
"message": "Boolean"
"message": "Booleaans"
},
"remove": {
"message": "Verwyder"
@ -378,7 +378,7 @@
"message": "Kopieer URI"
},
"copyVerificationCodeTotp": {
"message": "Copy Verification Code (TOTP)"
"message": "Kopieer bevestigingskode (TOTP)"
},
"length": {
"message": "Lengte"
@ -394,16 +394,16 @@
"description": "Make the first letter of a work uppercase."
},
"includeNumber": {
"message": "Include Number"
"message": "Voeg syfer toe"
},
"close": {
"message": "Sluit"
},
"minNumbers": {
"message": "Minimum Numbers"
"message": "Min. aantal syfers"
},
"minSpecial": {
"message": "Minimum Special",
"message": "Min. aantal spesiaal",
"description": "Minimum Special Characters"
},
"ambiguous": {
@ -552,7 +552,7 @@
}
},
"verificationCodeEmailSent": {
"message": "Verification email sent to $EMAIL$.",
"message": "E-pos met bevestigingskode is na $EMAIL$ gestuur.",
"placeholders": {
"email": {
"content": "$1",
@ -564,22 +564,22 @@
"message": "Onthou my"
},
"sendVerificationCodeEmailAgain": {
"message": "Send verification code email again"
"message": "Stuur weer e-pos met bevestigingskode"
},
"useAnotherTwoStepMethod": {
"message": "Use another two-step login method"
"message": "Gebruik n ander tweestapaantekenmetode"
},
"insertYubiKey": {
"message": "Insert your YubiKey into your computer's USB port, then touch its button."
"message": "Plaas u YubiKey in u rekenaar se USB-poort en druk dan op sy knop."
},
"insertU2f": {
"message": "Insert your security key into your computer's USB port. If it has a button, touch it."
"message": "Plaas u beveilingsleutel in u rekenaar se USB-poort. Indien dit n knop het, druk dit dan."
},
"recoveryCodeDesc": {
"message": "Lost access to all of your two-factor providers? Use your recovery code to disable all two-factor providers from your account."
"message": "Het u toegang tot al u tweestapaanbieders verloor? Gebruik dan u terugstelkode om alle tweestapaanbieders op u rekening te deaktiveer."
},
"recoveryCodeTitle": {
"message": "Recovery Code"
"message": "Terugstelkode"
},
"authenticatorAppTitle": {
"message": "Waarmerktoep"
@ -589,51 +589,51 @@
"description": "'Authy' and 'Google Authenticator' are product names and should not be translated."
},
"yubiKeyTitle": {
"message": "YubiKey OTP Security Key"
"message": "YubiKey-OTP-beveiligingsleutel"
},
"yubiKeyDesc": {
"message": "Gebruik n YubiKey vir toegang tot u rekening. Werk met YubiKey 4, 4 Nano, 4C en NEO-toestelle."
},
"duoDesc": {
"message": "Verify with Duo Security using the Duo Mobile app, SMS, phone call, or U2F security key.",
"message": "Bevestig met Duo Security d.m.v. die Duo Mobile-toep, SMS, spraakoproep of n U2F-beveiligingsleutel.",
"description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated."
},
"duoOrganizationDesc": {
"message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.",
"message": "Bevestig met Duo Security vir u organisasie d.m.v. die Duo Mobile-toep, SMS, spraakoproep of n U2F-beveiligingsleutel.",
"description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated."
},
"webAuthnTitle": {
"message": "FIDO2 WebAuthn"
},
"webAuthnDesc": {
"message": "Use any WebAuthn enabled security key to access your account."
"message": "Gebruik n WebAuthn-beveilingssleutel om toegang tot u rekening te verkry."
},
"emailTitle": {
"message": "E-pos"
},
"emailDesc": {
"message": "Verification codes will be emailed to you."
"message": "U sal bevestigingskodes per e-pos ontvang."
},
"loginUnavailable": {
"message": "Aantekening onbeskikbaar"
},
"noTwoStepProviders": {
"message": "This account has two-step login enabled, however, none of the configured two-step providers are supported by this device."
"message": "Tweestapaantekening is op die rekening geaktiveer, maar hierdie toestel ondersteun geen van die gekonfigureerde aanbieders nie."
},
"noTwoStepProviders2": {
"message": "Please add additional providers that are better supported across devices (such as an authenticator app)."
"message": "Voeg bykomende aanbieders toe wat beter ondersteun word op verskillende toestelle (soos n waarmerktoep)."
},
"twoStepOptions": {
"message": "Two-step Login Options"
"message": "Opsies vir tweestapaantekening"
},
"selfHostedEnvironment": {
"message": "Self-hosted Environment"
"message": "Selfgehuisveste omgewing"
},
"selfHostedEnvironmentFooter": {
"message": "Specify the base URL of your on-premises hosted Bitwarden installation."
"message": "Spesifiseer die basisbronadres van u selfgehuisveste Bitwarden-installasie."
},
"customEnvironment": {
"message": "Custom Environment"
"message": "Pasgemaakte omgewing"
},
"customEnvironmentFooter": {
"message": "Vir gevorderde gebruikers. U kan die basisbronadres van elke diens onafhanklik instel."
@ -657,7 +657,7 @@
"message": "Ikoonbedienerbronadres"
},
"environmentSaved": {
"message": "The environment URLs have been saved."
"message": "Die omgewingbronadresse is bewaar."
},
"ok": {
"message": "Goed"
@ -714,7 +714,7 @@
"message": "Wagwoordgenereerder"
},
"emailUs": {
"message": "Email Us"
"message": "Stuur n e-pos"
},
"visitOurWebsite": {
"message": "Besoek Ons Webwerf"
@ -783,16 +783,16 @@
"message": "Ongeldige hoofwagwoord"
},
"twoStepLoginConfirmation": {
"message": "Two-step login makes your account more secure by requiring you to verify your login with another device such as a security key, authenticator app, SMS, phone call, or email. Two-step login can be enabled on the bitwarden.com web vault. Do you want to visit the website now?"
"message": "Tweestapsaantekening maak u rekening veiliger deur u aantekenpoging te bevestig met n ander toestel soos n beveiligingsleutel, waarmerktoep, SMS, telefoonoproep of e-pos. U kan tweestapsaantekening in die webkluis op bitwarden.com aktiveer. Wil u die webwerf nou besoek?"
},
"twoStepLogin": {
"message": "Tweestapaantekening"
},
"vaultTimeout": {
"message": "Vault Timeout"
"message": "Kluis-uittel"
},
"vaultTimeoutDesc": {
"message": "Choose when your vault will timeout and perform the selected action."
"message": "Kies wanneer u kluis sal uittel en die gekose aksie sal uitvoer."
},
"immediately": {
"message": "Onmiddellik"
@ -828,16 +828,16 @@
"message": "4 uur"
},
"onIdle": {
"message": "On System Idle"
"message": "By stelselonaktiwiteit"
},
"onSleep": {
"message": "On System Sleep"
"message": "By slaapmodus"
},
"onLocked": {
"message": "On System Lock"
"message": "By stelselvergrendeling"
},
"onRestart": {
"message": "On Restart"
"message": "Nadat toep herbegin is"
},
"never": {
"message": "Nooit"
@ -860,64 +860,64 @@
"message": "Webwerfikone verskaf n herkenbare beeld langs elke aantekenitem in u kluis."
},
"enableMinToTray": {
"message": "Minimize to Tray Icon"
"message": "Minimaliseer na stelsellaai"
},
"enableMinToTrayDesc": {
"message": "When minimizing the window, show an icon in the system tray instead."
"message": "By die minimaliseer van die venster, toon eerder n ikoon in die stelsellaai."
},
"enableMinToMenuBar": {
"message": "Minimize to menu bar"
"message": "Minimaliseer na kieslysbalk"
},
"enableMinToMenuBarDesc": {
"message": "When minimizing the window, show an icon in the menu bar instead."
"message": "By die minimaliseer van die venster, toon eerder n ikoon in die kieslysbalk."
},
"enableCloseToTray": {
"message": "Close to Tray Icon"
"message": "Sluit na stelsellaai"
},
"enableCloseToTrayDesc": {
"message": "When closing the window, show an icon in the system tray instead."
"message": "By die sluit van die venster, toon eerder n ikoon in die stelsellaai."
},
"enableCloseToMenuBar": {
"message": "Close to menu bar"
"message": "Sluit na kieslysbalk"
},
"enableCloseToMenuBarDesc": {
"message": "When closing the window, show an icon in the menu bar instead."
"message": "By die sluit van die venster, toon eerder n ikoon in die kieslysbalk."
},
"enableTray": {
"message": "Enable Tray Icon"
"message": "Aktiveer stelsellaai"
},
"enableTrayDesc": {
"message": "Always show an icon in the system tray."
"message": "Toon altyd n ikoon in die stelsellaai."
},
"startToTray": {
"message": "Start To Tray Icon"
"message": "Begin na stelsellaai"
},
"startToTrayDesc": {
"message": "When the application is first started, only show an icon in the system tray."
"message": "Wanneer die toepassing aanvanklik begin word, toon slegs n ikoon in die stelsellaai."
},
"startToMenuBar": {
"message": "Start to menu bar"
"message": "Begin na kieslysbalk"
},
"startToMenuBarDesc": {
"message": "When the application is first started, only show an icon in the menu bar."
"message": "Wanneer die toepassing aanvanklik begin word, toon slegs n ikoon in die kieslysbalk."
},
"openAtLogin": {
"message": "Start automatically on login"
"message": "Begin outomaties by aanskakel"
},
"openAtLoginDesc": {
"message": "Start the Bitwarden Desktop application automatically on login."
"message": "Begin die Bitwarden-werkskermtoep outomaties wanneer rekenaar aangeskakel word."
},
"alwaysShowDock": {
"message": "Toon altyd in die dok"
},
"alwaysShowDockDesc": {
"message": "Show the Bitwarden icon in the Dock even when minimized to the menu bar."
"message": "Toon die Bitwarden-ikoon in die dok, selfs wanneer geminimaliseer in die kieslysbalk."
},
"confirmTrayTitle": {
"message": "Confirm disable tray"
"message": "Bevestig deaktivering van stelsellaai"
},
"confirmTrayDesc": {
"message": "Disabling this setting will also disable all other tray related settings."
"message": "Deaktivering van hierdie instelling sal ook alle ander instellings van die stelsellaai deaktiveer."
},
"language": {
"message": "Taal"
@ -956,7 +956,7 @@
}
},
"restartToUpdate": {
"message": "Restart To Update"
"message": "Herbegin om by te werk"
},
"restartToUpdateDesc": {
"message": "Weergawe $VERSION_NUM$ is gereed vir installasie. U moet die toepassing herbegin om die installasie te voltooi. Wil u nou herbegin en bywerk?",
@ -1027,7 +1027,7 @@
"message": "Wagwoordhigiëne, rekeningwelstand en databreukverslae om u kluis veilig te hou."
},
"premiumSignUpTotp": {
"message": "TOTP verification code (2FA) generator for logins in your vault."
"message": "TOTP-bevestigingskodegenereerder (2FA) vir aantekenings in u kluis."
},
"premiumSignUpSupport": {
"message": "Klantediens met hoë prioriteit."
@ -1057,7 +1057,7 @@
}
},
"refreshComplete": {
"message": "Refresh complete"
"message": "Klaar verfris"
},
"passwordHistory": {
"message": "Wagwoordgeskiedenis"
@ -1207,7 +1207,7 @@
"description": "Text for a button that toggles the visibility of the window. Shows the window when it is hidden or hides the window if it is currently open."
},
"hideToTray": {
"message": "Hide to Tray"
"message": "Versteek na stelsellaai"
},
"alwaysOnTop": {
"message": "Altyd Bo",
@ -1232,7 +1232,7 @@
"description": "WARNING (should stay in capitalized letters if the language permits)"
},
"confirmVaultExport": {
"message": "Confirm Vault Export"
"message": "Bevestig kluisuitstuur"
},
"exportWarningDesc": {
"message": "Hierdie uitstuur bevat u kluisdata in n ongeënkripteerde formaat. U behoort dit nie oor onbeveiligde kanale (soos e-pos) te bewaar of verstuur nie. Skrap dit sodra u dit klaar gebruik het."
@ -1296,10 +1296,10 @@
"message": "U kluis is gesluit. Verifieer u PIN-kode om voort te gaan."
},
"unlockWithWindowsHello": {
"message": "Unlock with Windows Hello"
"message": "Ontgrendel met Windows Hello"
},
"windowsHelloConsentMessage": {
"message": "Verify for Bitwarden."
"message": "Bevestig vir Bitwarden."
},
"unlockWithTouchId": {
"message": "Ontgrendel met Touch ID"
@ -1314,7 +1314,7 @@
"message": "Moenie by lansering vra vir Touch ID nie."
},
"lockWithMasterPassOnRestart": {
"message": "Lock with master password on restart"
"message": "Vergrendel by herbegin met hoofwagwoord"
},
"preferences": {
"message": "Voorkeure"
@ -1326,7 +1326,7 @@
"message": "Toon altyd n ikoon in die kieslysstaaf."
},
"hideToMenuBar": {
"message": "Hide to Menu Bar"
"message": "Versteek na kieslysbalk"
},
"selectOneCollection": {
"message": "U moet ten minste een versameling kies."
@ -1338,7 +1338,7 @@
"message": "Stel terug"
},
"premiumManageAlertAppStore": {
"message": "You can manage your subscription from the App Store. Do you want to visit the App Store now?"
"message": "U kan u intekening vanuit die App Store bestuur. Wil u die App Store nou besoek?"
},
"legal": {
"message": "Juridies",
@ -1363,13 +1363,13 @@
"message": "Een of meer organisasiebeleide beïnvloed u genereerderinstellings."
},
"vaultTimeoutAction": {
"message": "Vault Timeout Action"
"message": "Kluis-uittelaksie"
},
"vaultTimeoutActionLockDesc": {
"message": "A locked vault requires that you re-enter your master password to access it again."
"message": "Om toegang tot n vergendelde kluis te kry moet die hoofwagwoord weer ingevoer word."
},
"vaultTimeoutActionLogOutDesc": {
"message": "A logged out vault requires that you re-authenticate to access it again."
"message": "Om toegang tot n uitgetekende kluis te kry moet u weer waarmerk."
},
"lock": {
"message": "Vergrendel",
@ -1404,19 +1404,19 @@
"message": "Skrap permanent"
},
"vaultTimeoutLogOutConfirmation": {
"message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?"
"message": "Deur uit te teken word alle toegang tot u kluis verwyder en word waarmerking na die uitteltydperk vereis. Is u seker u wil hierdie instelling gebruik?"
},
"vaultTimeoutLogOutConfirmationTitle": {
"message": "Timeout Action Confirmation"
"message": "Uittelaksiebevestiging"
},
"enterpriseSingleSignOn": {
"message": "Enterprise Single Sign-On"
"message": "Onderneming-enkelaanteken"
},
"setMasterPassword": {
"message": "Stel Hoofwagwoord"
},
"ssoCompleteRegistration": {
"message": "In order to complete logging in with SSO, please set a master password to access and protect your vault."
"message": "Om aantekening met SSO te voltooi moet u n hoofwagwoord instel vir toegang tot en beskerming van u kluis."
},
"newMasterPass": {
"message": "Nuwe hoofwagwoord"
@ -1467,52 +1467,52 @@
"message": "U nuwe hoofwagwoord voldoen nie aan die beleidsvereistes nie."
},
"acceptPolicies": {
"message": "By checking this box you agree to the following:"
"message": "Deur hierdie kassie af te merk stem u in tot die volgende:"
},
"acceptPoliciesError": {
"message": "Gebruiksvoorwaardes en privaatheidsbeleid is nie erken nie."
},
"enableBrowserIntegration": {
"message": "Enable browser integration"
"message": "Aktiveer blaaierintegrasie"
},
"enableBrowserIntegrationDesc": {
"message": "Browser integration is used for biometrics in browser."
"message": "Blaaierintegrasie word gebruik vir biometrie in blaaier."
},
"browserIntegrationMasOnlyTitle": {
"message": "Browser integration not supported"
"message": "Blaaierintegrasie word nie ondersteun nie"
},
"browserIntegrationMasOnlyDesc": {
"message": "Unfortunately browser integration is only supported in the Mac App Store version for now."
"message": "Ongelukkig word blaaierintegrasie tans slegs in die weergawe vir die Mac-toepwinkel ondersteun."
},
"browserIntegrationWindowsStoreTitle": {
"message": "Browser integration not supported"
"message": "Blaaierintegrasie word nie ondersteun nie"
},
"browserIntegrationWindowsStoreDesc": {
"message": "Unfortunately browser integration is currently not supported in the Windows Store version."
"message": "Ongelukkig word blaaierintegrasie tans nie in die weergawe vir die Windows-winkel ondersteun nie."
},
"enableBrowserIntegrationFingerprint": {
"message": "Require verification for browser integration"
"message": "Vereis bevestiging vir blaaierintegrasie"
},
"enableBrowserIntegrationFingerprintDesc": {
"message": "Enable an additional layer of security by requiring fingerprint phrase validation when establishing a link between your desktop and browser. When enabled, this requires user intervention and verification each time a connection is established."
"message": "Aktiveer n bykomende sekuriteitsvlak deur n vingerafdrukfrase te vereis wanneer u rekenaar en blaaier gekoppel word. Wanneer geaktiveer moet u elke verbinding bevestig."
},
"approve": {
"message": "Keur goed"
},
"verifyBrowserTitle": {
"message": "Verify browser connection"
"message": "Bevestig blaaierverbinding"
},
"verifyBrowserDesc": {
"message": "Please ensure the shown fingerprint is identical to the fingerprint showed in the browser extension."
"message": "Maak seker dat die getoonde vingerafdruk identies is aan dié wat in die blaaieruitbreiding vertoon word."
},
"biometricsNotEnabledTitle": {
"message": "Biometrics not enabled"
"message": "Biometrie is geaktiveer"
},
"biometricsNotEnabledDesc": {
"message": "Browser biometrics requires desktop biometrics to be enabled in the settings first."
"message": "Vir blaaierbiometrie moet werkskermbiometrie eers in instellings geaktiveer wees."
},
"personalOwnershipSubmitError": {
"message": "Due to an Enterprise Policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organization and choose from available Collections."
"message": "Weens n ondernemingsbeleid mag u geen wagwoorde in u persoonlike kluis bewaar nie. Verander die eienaarskap na n organisasie en kies uit n van die beskikbare versamelings."
},
"hintEqualsPassword": {
"message": "U wagwoordwenk kan nie dieselfde as u wagwoord wees nie."
@ -1559,14 +1559,14 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"maxAccessCount": {
"message": "Maximum Access Count"
"message": "Maksimum toegangsaantal"
},
"maxAccessCountDesc": {
"message": "If set, users will no longer be able to access this Send once the maximum access count is reached.",
"message": "Indien ingestel het gebruikers ne meer toegang tot hierdie Send sodra die maksimum aantal toegang bereik is.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"currentAccessCount": {
"message": "Current Access Count"
"message": "Huidige toegangsaantal"
},
"disableSend": {
"message": "Deaktiveer hierdie Send sodat niemand toegang daartoe het nie.",
@ -1589,7 +1589,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"textHiddenByDefault": {
"message": "When accessing the Send, hide the text by default",
"message": "Versteek die teks be verstek wanneer die Send gebruik word",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"createdSend": {
@ -1652,7 +1652,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendDisabledWarning": {
"message": "Due to an enterprise policy, you are only able to delete an existing Send.",
"message": "A.g.v. n ondernemingsbeleid kan u slegs n bestaande Send skrap.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"copyLink": {
@ -1662,16 +1662,16 @@
"message": "Gedeaktiveer"
},
"maxAccessCountReached": {
"message": "Max access count reached"
"message": "Maks toegangsaantal bereik"
},
"expired": {
"message": "Expired"
"message": "Verstreke"
},
"pendingDeletion": {
"message": "Word geskrap"
},
"webAuthnAuthenticate": {
"message": "Authenticate WebAuthn"
"message": "Waarmerk WebAuthn"
},
"hideEmail": {
"message": "Versteek my e-posadres vir ontvangers."
@ -1680,13 +1680,13 @@
"message": "Een of meer organisasiebeleide beïnvloed u Send-opsies."
},
"emailVerificationRequired": {
"message": "Email Verification Required"
"message": "Vereis e-posbevestiging"
},
"emailVerificationRequiredDesc": {
"message": "You must verify your email to use this feature."
"message": "U moet u e-pos bevestig om die funksie te gebruik."
},
"passwordPrompt": {
"message": "Master password re-prompt"
"message": "Vra weer vir hoofwagwoord"
},
"passwordConfirmation": {
"message": "Hoofwagwoordbevestiging"

View File

@ -123,7 +123,7 @@
"description": "Copy value to clipboard"
},
"minimizeOnCopyToClipboard": {
"message": "Lövhəyə kopyalanda kiçilt"
"message": "Lövhəyə kopyalananda kiçilt"
},
"minimizeOnCopyToClipboardDesc": {
"message": "Elementin verilənlərini lövhəyə kopyalayarkən kiçilt."
@ -789,7 +789,7 @@
"message": "İki mərhələli giriş"
},
"vaultTimeout": {
"message": "Anbara müraciət vaxtı bitdi"
"message": "Anbara müraciət bitəcək"
},
"vaultTimeoutDesc": {
"message": "Anbara müraciətin bitəcəyi vaxtı seçin və seçilən əməliyyatı icra edin."
@ -1476,7 +1476,7 @@
"message": "Səyyah inteqrasiyasını fəallaşdır"
},
"enableBrowserIntegrationDesc": {
"message": "Səyyah inteqrasiyası səyyada biometrik təsdiqləmə üçün istifadə olunur."
"message": "Səyyah inteqrasiyası səyyahda biometrik təsdiqləmə üçün istifadə olunur."
},
"browserIntegrationMasOnlyTitle": {
"message": "Səyyah inteqrasiyası dəstəklənmir"

View File

@ -1416,7 +1416,7 @@
"message": "Задаць асноўны пароль"
},
"ssoCompleteRegistration": {
"message": "Для завяршэння ўваходу праз SSO, усталюйце галоўны пароль для доступу і абароны вашаго сховішча."
"message": "Для завяршэння ўваходу праз SSO, задайце асноўны пароль для доступу і абароны вашаго сховішча."
},
"newMasterPass": {
"message": "Новы асноўны пароль"
@ -1521,38 +1521,38 @@
"message": "An organization policy is affecting your ownership options."
},
"allSends": {
"message": "All Sends",
"message": "Усе адпраўленні",
"description": "'Sends' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendTypeFile": {
"message": "File"
"message": "Файл"
},
"sendTypeText": {
"message": "Text"
"message": "Тэкст"
},
"searchSends": {
"message": "Search Sends",
"message": "Пошук адпраўленняў",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"editSend": {
"message": "Edit Send",
"message": "Рэдагаваць адпраўленне",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"myVault": {
"message": "My Vault"
"message": "Маё сховішча"
},
"text": {
"message": "Text"
"message": "Тэкст"
},
"deletionDate": {
"message": "Deletion Date"
"message": "Дата выдалення"
},
"deletionDateDesc": {
"message": "The Send will be permanently deleted on the specified date and time.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"expirationDate": {
"message": "Expiration Date"
"message": "Дата завяршэння"
},
"expirationDateDesc": {
"message": "If set, access to this Send will expire on the specified date and time.",
@ -1605,21 +1605,21 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"newPassword": {
"message": "New Password"
"message": "Новы пароль"
},
"whatTypeOfSend": {
"message": "What type of Send is this?",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"createSend": {
"message": "Create Send",
"message": "Стварыць адпраўленне",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendTextDesc": {
"message": "The text you want to send."
"message": "Тэкст, які вы хочаце адправіць."
},
"sendFileDesc": {
"message": "The file you want to send."
"message": "Файл, які вы хочаце адправіць."
},
"days": {
"message": "$DAYS$ days",
@ -1634,14 +1634,14 @@
"message": "1 day"
},
"custom": {
"message": "Custom"
"message": "Адвольны"
},
"deleteSendConfirmation": {
"message": "Are you sure you want to delete this Send?",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"copySendLinkToClipboard": {
"message": "Copy Send link to clipboard",
"message": "Скапіяваць спасылку адпраўлення ў буфер абмену",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"copySendLinkOnSave": {
@ -1656,10 +1656,10 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"copyLink": {
"message": "Copy link"
"message": "Капіяваць спасылку"
},
"disabled": {
"message": "Disabled"
"message": "Адключана"
},
"maxAccessCountReached": {
"message": "Max access count reached"
@ -1689,7 +1689,7 @@
"message": "Master password re-prompt"
},
"passwordConfirmation": {
"message": "Master password confirmation"
"message": "Пацвярджэнне асноўнага пароля"
},
"passwordConfirmationDesc": {
"message": "This action is protected. To continue, please re-enter your master password to verify your identity."

View File

@ -61,7 +61,7 @@
}
},
"moveToOrgDesc": {
"message": "Choose an organisation that you wish to move this item to. Moving to an organisation transfers ownership of the item to that organistaion. You will no longer be the direct owner of this item once it has been moved."
"message": "Choose an organisation that you wish to move this item to. Moving to an organisation transfers ownership of the item to that organisation. You will no longer be the direct owner of this item once it has been moved."
},
"attachments": {
"message": "Attachments"
@ -350,7 +350,7 @@
"message": "Delete attachment"
},
"deleteItemConfirmation": {
"message": "Are you sure you want to delete this item?"
"message": "Do you really want to send to the bin?"
},
"deletedItem": {
"message": "Sent item to bin"
@ -866,10 +866,10 @@
"message": "When minimising the window, show an icon in the system tray instead."
},
"enableMinToMenuBar": {
"message": "Minimize to menu bar"
"message": "Minimise to menu bar"
},
"enableMinToMenuBarDesc": {
"message": "When minimizing the window, show an icon in the menu bar instead."
"message": "When minimising the window, show an icon in the menu bar instead."
},
"enableCloseToTray": {
"message": "Close to tray icon"
@ -911,7 +911,7 @@
"message": "Always show in the Dock"
},
"alwaysShowDockDesc": {
"message": "Show the Bitwarden icon in the Dock even when minimized to the menu bar."
"message": "Show the Bitwarden icon in the Dock even when minimised to the menu bar."
},
"confirmTrayTitle": {
"message": "Confirm disable tray"
@ -1305,7 +1305,7 @@
"message": "Unlock with Touch ID"
},
"touchIdConsentMessage": {
"message": "Verify for Bitwarden."
"message": "unlock your vault"
},
"noAutoPromptWindowsHello": {
"message": "Do not prompt for Windows Hello on launch."
@ -1470,7 +1470,7 @@
"message": "By checking this box you agree to the following:"
},
"acceptPoliciesError": {
"message": "Terms of Service and Privacy Policy have not been acknowledged."
"message": "Terms of service and privacy policy have not been acknowledged."
},
"enableBrowserIntegration": {
"message": "Enable browser integration"
@ -1503,7 +1503,7 @@
"message": "Verify browser connection"
},
"verifyBrowserDesc": {
"message": "Please ensure the shown fingerprint is identical to the fingerprint showed in the browser extension."
"message": "Please ensure the shown fingerprint is identical to the fingerprint shown in the browser extension."
},
"biometricsNotEnabledTitle": {
"message": "Biometrics not enabled"
@ -1512,13 +1512,13 @@
"message": "Browser biometrics requires desktop biometrics to be enabled in the settings first."
},
"personalOwnershipSubmitError": {
"message": "Due to an Enterprise Policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organization and choose from available Collections."
"message": "Due to an Enterprise Policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organisation and choose from available Collections."
},
"hintEqualsPassword": {
"message": "Your password hint cannot be the same as your password."
},
"personalOwnershipPolicyInEffect": {
"message": "An organization policy is affecting your ownership options."
"message": "An organisation policy is affecting your ownership options."
},
"allSends": {
"message": "All Sends",
@ -1674,10 +1674,10 @@
"message": "Authenticate WebAuthn"
},
"hideEmail": {
"message": "Hide my email address from recepients."
"message": "Hide my email address from recipients."
},
"sendOptionsPolicyInEffect": {
"message": "One or more organistaion policies are affecting your Send options."
"message": "One or more organisation policies are affecting your Send options."
},
"emailVerificationRequired": {
"message": "Email Verification Required"

View File

@ -45,7 +45,7 @@
"message": "Jaga"
},
"moveToOrganization": {
"message": "Teisalda organisatsioonile"
"message": "Teisalda organisatsiooni"
},
"movedItemToOrg": {
"message": "$ITEMNAME$ teisaldati $ORGNAME$",

View File

@ -45,7 +45,7 @@
"message": "Jaa"
},
"moveToOrganization": {
"message": "Siirrä organisaatioon"
"message": "Siirrä organisaatiolle"
},
"movedItemToOrg": {
"message": "$ITEMNAME$ siirrettiin organisaatioon $ORGNAME$",
@ -61,7 +61,7 @@
}
},
"moveToOrgDesc": {
"message": "Valitse organisaatio, johon haluat siirtää kohteen. Tämä siirtää kohteen organisaation omistukseen, etkä tämän jälkeen ole enää sen suora omistaja."
"message": "Valitse organisaatio, jolle haluat siirtää kohteen. Tämä siirtää kohteen organisaation omistukseen, etkä tämän jälkeen ole enää sen suora omistaja."
},
"attachments": {
"message": "Liitteet"
@ -764,7 +764,7 @@
"message": "Holvisi on lukittu. Syötä pääsalasana jatkaaksesi."
},
"unlock": {
"message": "Avaa lukitus"
"message": "Avaa"
},
"loggedInAsOn": {
"message": "Kirjautuneena tunnuksella $EMAIL$ palveluun $HOSTNAME$.",
@ -1284,7 +1284,7 @@
"message": "Avaa PIN-koodilla"
},
"setYourPinCode": {
"message": "Aseta PIN-koodisi Bitwardenin avausta varten. PIN-asetukset tyhjentyvät, jos kirjaudut kokonaan ulos sovelluksesta."
"message": "Aseta PIN-koodi Bitwardenin avaukselle. PIN-asetukset tyhjentyvät, jos kirjaudut kokonaan ulos laajennuksesta."
},
"pinRequired": {
"message": "PIN-koodi vaaditaan."
@ -1296,16 +1296,16 @@
"message": "Holvisi on lukittu. Vahvista PIN-koodisi jatkaaksesi."
},
"unlockWithWindowsHello": {
"message": "Avaa lukitus Windows Hellolla"
"message": "Avaa Windows Hellolla"
},
"windowsHelloConsentMessage": {
"message": "Vahvista Bitwarden."
},
"unlockWithTouchId": {
"message": "Avaa lukitus Touch ID:llä"
"message": "Avaa Touch ID:llä"
},
"touchIdConsentMessage": {
"message": "avaa holvisi lukitus"
"message": "avaa holvisi"
},
"noAutoPromptWindowsHello": {
"message": "Älä pyydä Windows Hello -kirjautumista käynnistettäessä."

View File

@ -3,7 +3,7 @@
"message": "Bitwarden"
},
"filters": {
"message": "Filters"
"message": "फ़िल्टर"
},
"allItems": {
"message": "All Items"
@ -70,7 +70,7 @@
"message": "View Item"
},
"name": {
"message": "Name"
"message": "नाम"
},
"uri": {
"message": "URI"

View File

@ -61,7 +61,7 @@
}
},
"moveToOrgDesc": {
"message": "Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved."
"message": "Pilihlah sebuah organisasi yang Anda ingin memindahkan item ini. Memindahkan berarti memberikan kepemilikan kepada organisasi tersebut. Anda tidak akan lagi menjadi pemilik item ini."
},
"attachments": {
"message": "Lampiran"
@ -606,7 +606,7 @@
"message": "FIDO2 WebAuthn"
},
"webAuthnDesc": {
"message": "Use any WebAuthn enabled security key to access your account."
"message": "Gunakan kunci yang mendukung WebAUthn untuk mengakses akun anda."
},
"emailTitle": {
"message": "Email"
@ -1308,10 +1308,10 @@
"message": "Verifikasi untuk Bitwarden."
},
"noAutoPromptWindowsHello": {
"message": "Do not prompt for Windows Hello on launch."
"message": "Jangan meminta Windows Hello waktu baru dinyalakan."
},
"noAutoPromptTouchId": {
"message": "Do not prompt for Touch ID on launch."
"message": "Jangan meminta Touch ID waktu baru dinyalakan."
},
"lockWithMasterPassOnRestart": {
"message": "Kunci dengan kata sandi utama saat komputer dihidupkan ulang"
@ -1671,27 +1671,27 @@
"message": "Penghapusan menunggu keputusan"
},
"webAuthnAuthenticate": {
"message": "Authenticate WebAuthn"
"message": "Autentikasi dengan WebAuthn"
},
"hideEmail": {
"message": "Sembunyikan alamat surel saya dari penerima."
},
"sendOptionsPolicyInEffect": {
"message": "One or more organization policies are affecting your Send options."
"message": "Satu atau lebih kebijakan organisasi mempengaruhi pengaturan feature Send anda."
},
"emailVerificationRequired": {
"message": "Verifikasi Email Diperlukan"
},
"emailVerificationRequiredDesc": {
"message": "You must verify your email to use this feature."
"message": "Anda harus mengkonfirmasi email anda untuk menggunakan fitur ini."
},
"passwordPrompt": {
"message": "Master password re-prompt"
"message": "Master password ditanyakan kembali"
},
"passwordConfirmation": {
"message": "Master password confirmation"
"message": "Konfirmasi sandi utama"
},
"passwordConfirmationDesc": {
"message": "This action is protected. To continue, please re-enter your master password to verify your identity."
"message": "Aksi ini terproteksi. Untuk melanjutkan, masukkan kembali sandi utama Anda untuk verifikasi identitas."
}
}

View File

@ -7,10 +7,10 @@ import { I18nService } from 'jslib-common/abstractions/i18n.service';
import { LogService } from 'jslib-common/abstractions/log.service';
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { StorageService } from 'jslib-common/abstractions/storage.service';
import { UserService } from 'jslib-common/abstractions/user.service';
import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';
import { StorageService } from 'jslib-common/abstractions';
import { Utils } from 'jslib-common/misc/utils';
import { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';
import { ElectronConstants } from 'jslib-electron/electronConstants';