Compare commits

..

1 Commits

Author SHA1 Message Date
Crowdin Bot
800ad23811 New Crowdin translations by GitHub Action 2025-12-18 00:34:54 +00:00
12 changed files with 90 additions and 33 deletions

View File

@@ -14,7 +14,7 @@
@if (previewText) {
<div class="bg-light p-3 overflow-auto whitespace-preserve" width="100%">{{previewText}}</div>
} @else {
<object [data]="previewURL" width="100%" class="bg-light" [class.p-2]="!isPdf"></object>
<object [data]="previewURL | safeUrl" width="100%" class="bg-light" [class.p-2]="!isPdf"></object>
}
} @else {
@if (requiresPassword) {

View File

@@ -7,6 +7,7 @@ import { first, Subject, takeUntil } from 'rxjs'
import { Document } from 'src/app/data/document'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
import { DocumentService } from 'src/app/services/rest/document.service'
import { SettingsService } from 'src/app/services/settings.service'
@@ -18,6 +19,7 @@ import { SettingsService } from 'src/app/services/settings.service'
NgbPopoverModule,
DocumentTitlePipe,
PdfViewerModule,
SafeUrlPipe,
NgxBootstrapIconsModule,
],
})

View File

@@ -32,6 +32,7 @@ import { IfPermissionsDirective } from 'src/app/directives/if-permissions.direct
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import { PermissionsService } from 'src/app/services/permissions.service'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
@@ -127,6 +128,7 @@ describe('SavedViewWidgetComponent', () => {
IfPermissionsDirective,
CustomDatePipe,
DocumentTitlePipe,
SafeUrlPipe,
PreviewPopupComponent,
CustomFieldDisplayComponent,
],

View File

@@ -379,7 +379,7 @@
<ng-template #previewContent>
<div class="thumb-preview position-absolute pe-none text-center" [class.fade]="previewLoaded">
@if (showThumbnailOverlay) {
<img [src]="thumbUrl" class="mx-auto" [attr.width]="previewZoomScale === 'page-fit' ? 'auto' : '100%'" [attr.height]="previewZoomScale === 'page-fit' ? '100%' : 'auto'" alt="Document loading..." i18n-alt />
<img [src]="thumbUrl | safeUrl" class="mx-auto" [attr.width]="previewZoomScale === 'page-fit' ? 'auto' : '100%'" [attr.height]="previewZoomScale === 'page-fit' ? '100%' : 'auto'" alt="Document loading..." i18n-alt />
}
<div class="position-absolute top-0 start-0 m-2 p-2 d-flex align-items-center justify-content-center">
<div>
@@ -406,7 +406,7 @@
</pdf-viewer>
</div>
} @else {
<object [data]="previewUrl" class="preview-sticky" width="100%"></object>
<object [data]="previewUrl | safeUrl" class="preview-sticky" width="100%"></object>
}
}
@case (ContentRenderType.Text) {
@@ -414,7 +414,7 @@
}
@case (ContentRenderType.Image) {
<div class="preview-sticky">
<img [src]="previewUrl" width="100%" height="100%" alt="{{title}}" />
<img [src]="previewUrl | safeUrl" width="100%" height="100%" alt="{{title}}" />
</div>
}
@case (ContentRenderType.TIFF) {
@@ -427,7 +427,7 @@
}
}
@case (ContentRenderType.Other) {
<object [data]="previewUrl" class="preview-sticky" width="100%"></object>
<object [data]="previewUrl | safeUrl" class="preview-sticky" width="100%"></object>
}
}
@if (requiresPassword) {

View File

@@ -60,6 +60,7 @@ import { IfPermissionsDirective } from 'src/app/directives/if-permissions.direct
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
import { FileSizePipe } from 'src/app/pipes/file-size.pipe'
import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
import { ComponentRouterService } from 'src/app/services/component-router.service'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import { HotKeyService } from 'src/app/services/hot-key.service'
@@ -168,6 +169,7 @@ export enum ZoomSetting {
FormsModule,
ReactiveFormsModule,
NgTemplateOutlet,
SafeUrlPipe,
NgbNavModule,
NgbDropdownModule,
NgxBootstrapIconsModule,

View File

@@ -14,6 +14,7 @@ import { IfPermissionsDirective } from 'src/app/directives/if-permissions.direct
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
import { IsNumberPipe } from 'src/app/pipes/is-number.pipe'
import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
import { CustomFieldDisplayComponent } from '../../common/custom-field-display/custom-field-display.component'
import { PreviewPopupComponent } from '../../common/preview-popup/preview-popup.component'
import { DocumentCardLargeComponent } from './document-card-large.component'
@@ -52,6 +53,7 @@ describe('DocumentCardLargeComponent', () => {
DocumentTitlePipe,
CustomDatePipe,
IfPermissionsDirective,
SafeUrlPipe,
IsNumberPipe,
PreviewPopupComponent,
CustomFieldDisplayComponent,

View File

@@ -0,0 +1,32 @@
import { TestBed } from '@angular/core/testing'
import { BrowserModule, DomSanitizer } from '@angular/platform-browser'
import { SafeUrlPipe } from './safeurl.pipe'
describe('SafeUrlPipe', () => {
let pipe: SafeUrlPipe
beforeEach(() => {
TestBed.configureTestingModule({
providers: [SafeUrlPipe],
imports: [BrowserModule],
})
pipe = TestBed.inject(SafeUrlPipe)
})
it('should bypass security and trust the url', () => {
const url = 'https://example.com'
const domSanitizer = TestBed.inject(DomSanitizer)
const sanitizerSpy = jest.spyOn(
domSanitizer,
'bypassSecurityTrustResourceUrl'
)
let safeResourceUrl = pipe.transform(url)
expect(safeResourceUrl).not.toBeNull()
expect(sanitizerSpy).toHaveBeenCalled()
safeResourceUrl = pipe.transform(null)
expect(safeResourceUrl).not.toBeNull()
expect(sanitizerSpy).toHaveBeenCalled()
})
})

View File

@@ -0,0 +1,17 @@
import { Pipe, PipeTransform, inject } from '@angular/core'
import { DomSanitizer } from '@angular/platform-browser'
@Pipe({
name: 'safeUrl',
})
export class SafeUrlPipe implements PipeTransform {
private sanitizer = inject(DomSanitizer)
transform(url) {
if (url == null) {
return this.sanitizer.bypassSecurityTrustResourceUrl('')
} else {
return this.sanitizer.bypassSecurityTrustResourceUrl(url)
}
}
}

View File

@@ -496,7 +496,7 @@
<context context-type="sourcefile">src/app/components/manage/mail/mail.component.html</context>
<context context-type="linenumber">4</context>
</context-group>
<target state="translated">E-mailaccounts en regels voor automatisch importeren van documenten beheren.</target>
<target state="translated">Beheer e-mailaccounts en regels voor het automatisch importeren van documenten.</target>
</trans-unit>
<trans-unit id="2258659358902319601" datatype="html">
<source>Workflows give you more control over the document pipeline.</source>
@@ -740,7 +740,7 @@
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
<context context-type="linenumber">4</context>
</context-group>
<target state="translated">Bekijk de logbestanden voor de applicatie en voor het ophalen van e-mails.</target>
<target state="translated">Bekijk de logbestanden van de applicatie en voor het ophalen van e-mails.</target>
</trans-unit>
<trans-unit id="8461842260159597706" datatype="html">
<source>Show</source>
@@ -764,7 +764,7 @@
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<target state="needs-translation">lines</target>
<target state="translated">regels</target>
</trans-unit>
<trans-unit id="8838884664569764142" datatype="html">
<source>Auto refresh</source>
@@ -892,7 +892,7 @@
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
<context context-type="linenumber">62</context>
</context-group>
<target state="needs-translation">Jump to bottom</target>
<target state="translated">Spring naar beneden</target>
</trans-unit>
<trans-unit id="1255048712725285892" datatype="html">
<source>Options to customize appearance, notifications and more. Settings apply to the &lt;strong&gt;current user only&lt;/strong&gt;.</source>
@@ -1416,7 +1416,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">266,268</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
<target state="translated"> Instellingen zijn van toepassing op dit account voor objecten (tags, mailregels, enz., maar niet op documenten) die via de webinterface zijn aangemaakt. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -1956,7 +1956,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">64</context>
</context-group>
<target state="translated">Resultaten</target>
<target state="translated">Resultaat</target>
</trans-unit>
<trans-unit id="314315645942131479" datatype="html" approved="yes">
<source>Info</source>
@@ -3952,7 +3952,7 @@
<context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context>
<context context-type="linenumber">121</context>
</context-group>
<target state="needs-translation">Previous week</target>
<target state="translated">Vorige week</target>
</trans-unit>
<trans-unit id="8586908745456864217" datatype="html">
<source>Previous month</source>
@@ -3960,7 +3960,7 @@
<context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context>
<context context-type="linenumber">135</context>
</context-group>
<target state="needs-translation">Previous month</target>
<target state="translated">Vorige maand</target>
</trans-unit>
<trans-unit id="357608474534295480" datatype="html">
<source>Previous quarter</source>
@@ -3968,7 +3968,7 @@
<context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context>
<context context-type="linenumber">141</context>
</context-group>
<target state="needs-translation">Previous quarter</target>
<target state="translated">Vorig kwartaal</target>
</trans-unit>
<trans-unit id="100513227838842152" datatype="html">
<source>Previous year</source>
@@ -3976,7 +3976,7 @@
<context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context>
<context context-type="linenumber">155</context>
</context-group>
<target state="needs-translation">Previous year</target>
<target state="translated">Vorig jaar</target>
</trans-unit>
<trans-unit id="8743659855412792665" datatype="html" approved="yes">
<source>Matching algorithm</source>
@@ -4700,7 +4700,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
<context context-type="linenumber">118</context>
</context-group>
<target state="translated">Titel van deze regel niet gebruiken</target>
<target state="translated">Geen titel van deze regel toewijzen</target>
</trans-unit>
<trans-unit id="1568902914205618549" datatype="html">
<source>Do not assign a correspondent</source>
@@ -4724,7 +4724,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
<context context-type="linenumber">133</context>
</context-group>
<target state="translated">Gebruik de naam (of het e-mailadres indien niet beschikbaar)</target>
<target state="translated">Gebruik de naam (of e-mailadres indien niet beschikbaar)</target>
</trans-unit>
<trans-unit id="1258862217749148424" datatype="html">
<source>Use correspondent selected below</source>
@@ -5276,7 +5276,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">183</context>
</context-group>
<target state="needs-translation">Advanced Filters</target>
<target state="translated">Geavanceerde filters</target>
</trans-unit>
<trans-unit id="910026778839409110" datatype="html">
<source>Add filter</source>
@@ -5284,7 +5284,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">190</context>
</context-group>
<target state="needs-translation">Add filter</target>
<target state="translated">Filter toevoegen</target>
</trans-unit>
<trans-unit id="5671193617280178107" datatype="html">
<source>No advanced workflow filters defined.</source>
@@ -5292,7 +5292,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">195</context>
</context-group>
<target state="needs-translation">No advanced workflow filters defined.</target>
<target state="translated">Er zijn geen geavanceerde workflow filters gedefinieerd.</target>
</trans-unit>
<trans-unit id="6892734625735572404" datatype="html">
<source> Complete the custom field query configuration. </source>
@@ -5300,7 +5300,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">224,226</context>
</context-group>
<target state="needs-translation"> Complete the custom field query configuration. </target>
<target state="translated"> Voltooi de query configuratie van het aangepaste veld. </target>
</trans-unit>
<trans-unit id="6417103744331194518" datatype="html">
<source>Action type</source>
@@ -5680,7 +5680,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">Has any of these tags</target>
<target state="translated">Heeft een van deze labels</target>
</trans-unit>
<trans-unit id="4166903555074156852" datatype="html">
<source>Has all of these tags</source>
@@ -5688,7 +5688,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">210</context>
</context-group>
<target state="needs-translation">Has all of these tags</target>
<target state="translated">Heeft al deze labels</target>
</trans-unit>
<trans-unit id="6624363795312783141" datatype="html">
<source>Does not have these tags</source>
@@ -5696,7 +5696,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">Does not have these tags</target>
<target state="translated">Geen van deze labels</target>
</trans-unit>
<trans-unit id="5281365940563983618" datatype="html">
<source>Has correspondent</source>
@@ -5712,7 +5712,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">232</context>
</context-group>
<target state="needs-translation">Does not have correspondents</target>
<target state="translated">Geen van deze correspondenten</target>
</trans-unit>
<trans-unit id="4806713133917046341" datatype="html">
<source>Has document type</source>
@@ -5728,7 +5728,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">248</context>
</context-group>
<target state="needs-translation">Does not have document types</target>
<target state="translated">Geen van deze documenttypes</target>
</trans-unit>
<trans-unit id="4277260190522078330" datatype="html">
<source>Has storage path</source>
@@ -5736,7 +5736,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">256</context>
</context-group>
<target state="needs-translation">Has storage path</target>
<target state="translated">Heeft opslagpad</target>
</trans-unit>
<trans-unit id="6070943364927280151" datatype="html">
<source>Does not have storage paths</source>
@@ -5744,7 +5744,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">264</context>
</context-group>
<target state="needs-translation">Does not have storage paths</target>
<target state="translated">Geen van deze opslagpaden</target>
</trans-unit>
<trans-unit id="6250799006816371860" datatype="html">
<source>Matches custom field query</source>
@@ -5752,7 +5752,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">272</context>
</context-group>
<target state="needs-translation">Matches custom field query</target>
<target state="translated">Komt overeen met aangepast veld query</target>
</trans-unit>
<trans-unit id="3138206142174978019" datatype="html">
<source>Create new workflow</source>
@@ -8735,7 +8735,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Select:</target>
<target state="translated">Selecteer:</target>
</trans-unit>
<trans-unit id="6252070156626006029" datatype="html">
<source>None</source>

View File

@@ -5736,7 +5736,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">256</context>
</context-group>
<target state="needs-translation">Has storage path</target>
<target state="translated">Имеет путь к хранилищу</target>
</trans-unit>
<trans-unit id="6070943364927280151" datatype="html">
<source>Does not have storage paths</source>

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-12 17:41+0000\n"
"PO-Revision-Date: 2025-12-12 17:44\n"
"PO-Revision-Date: 2025-12-13 12:13\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-12 17:41+0000\n"
"PO-Revision-Date: 2025-12-12 17:44\n"
"PO-Revision-Date: 2025-12-17 00:36\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"