mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-10-19 14:28:14 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8fd655e848 |
No files matched your search
+1
-1
@@ -43,7 +43,7 @@ dependencies = [
|
|||||||
"drf-spectacular~=0.30",
|
"drf-spectacular~=0.30",
|
||||||
"drf-spectacular-sidecar>=2026.7.1,<2026.10",
|
"drf-spectacular-sidecar>=2026.7.1,<2026.10",
|
||||||
"drf-writable-nested~=0.7.1",
|
"drf-writable-nested~=0.7.1",
|
||||||
"filelock>=3.32,<4.1",
|
"filelock~=3.32.0",
|
||||||
"flower>=2.0.1,<2.3",
|
"flower>=2.0.1,<2.3",
|
||||||
"gotenberg-client[httpx]~=1.0",
|
"gotenberg-client[httpx]~=1.0",
|
||||||
"httpx-oauth~=0.17",
|
"httpx-oauth~=0.17",
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ module.exports = {
|
|||||||
tsconfig: '<rootDir>/tsconfig.spec.json',
|
tsconfig: '<rootDir>/tsconfig.spec.json',
|
||||||
stringifyContentPathRegex: '\\.(html|svg)$',
|
stringifyContentPathRegex: '\\.(html|svg)$',
|
||||||
useESM: true,
|
useESM: true,
|
||||||
// Disable the builder's deprecated override; tsconfig.spec.json enables isolation.
|
|
||||||
isolatedModules: false,
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
+167
-178
File diff suppressed because it is too large.
Load diff
@@ -102,34 +102,25 @@
|
|||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (selectedSection !== TaskSection.All && totalTasks() > pageSize) {
|
<ngb-pagination
|
||||||
<ngb-pagination
|
[pageSize]="pageSize"
|
||||||
[pageSize]="pageSize"
|
[collectionSize]="totalTasks()"
|
||||||
[collectionSize]="totalTasks()"
|
[page]="page"
|
||||||
[page]="page"
|
[maxSize]="5"
|
||||||
[maxSize]="5"
|
[rotate]="true"
|
||||||
[rotate]="true"
|
size="sm"
|
||||||
size="sm"
|
aria-label="Tasks pagination"
|
||||||
aria-label="Tasks pagination"
|
(pageChange)="setPage($event)">
|
||||||
(pageChange)="setPage($event)">
|
</ngb-pagination>
|
||||||
</ngb-pagination>
|
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ng-template let-tasks="tasks" let-section="section" #tasksTemplate>
|
<ng-template let-tasks="tasks" let-section="section" #tasksTemplate>
|
||||||
<div class="section-header mb-2">
|
<div class="section-header d-flex align-items-center justify-content-between mb-2">
|
||||||
<h5 class="mb-0">{{ sectionLabel(section) }}</h5>
|
<div>
|
||||||
@let count = sectionCount(section);
|
<h5 class="mb-0">{{ sectionLabel(section) }}</h5>
|
||||||
@let hasMore = selectedSection === TaskSection.All && count > tasks.length;
|
<div class="small text-muted">
|
||||||
<div class="small text-muted">
|
<ng-container i18n>{tasks.length, plural, =1 {1 task} other {{{tasks.length}} tasks}}</ng-container>
|
||||||
@if (hasMore) {
|
</div>
|
||||||
<ng-container i18n>{{tasks.length}} of {{count}} tasks</ng-container>
|
|
||||||
<button class="btn btn-link show-all p-0 ms-2 align-baseline" type="button" (click)="setSection(section)">
|
|
||||||
<ng-container i18n>Show all</ng-container><i-bs class="ms-1" width="1em" height="1em" name="arrow-right"></i-bs>
|
|
||||||
</button>
|
|
||||||
} @else {
|
|
||||||
<ng-container i18n>{count, plural, =1 {1 task} other {{{count}} tasks}}</ng-container>
|
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -178,9 +169,10 @@
|
|||||||
<div>{{ taskDisplayName(task) }}</div>
|
<div>{{ taskDisplayName(task) }}</div>
|
||||||
<div class="small text-muted">
|
<div class="small text-muted">
|
||||||
@if (taskShowsSeparateTypeLabel(task)) {
|
@if (taskShowsSeparateTypeLabel(task)) {
|
||||||
<span class="me-2">{{ task.task_type_display }}</span>
|
<span>{{ task.task_type_display }}</span>
|
||||||
|
<span class="mx-1">•</span>
|
||||||
}
|
}
|
||||||
<span class="text-nowrap"><i-bs class="me-1" width="1em" height="1em" name="box-arrow-in-right"></i-bs>{{ task.trigger_source_display }}</span>
|
<span>{{ task.trigger_source_display }}</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="d-none d-lg-table-cell created-col">{{ task.date_created | customDate:'short' }}</td>
|
<td class="d-none d-lg-table-cell created-col">{{ task.date_created | customDate:'short' }}</td>
|
||||||
|
|||||||
@@ -72,7 +72,3 @@ pre {
|
|||||||
tbody tr:nth-last-child(2) td {
|
tbody tr:nth-last-child(2) td {
|
||||||
border-bottom: none !important;
|
border-bottom: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.section-header .show-all {
|
|
||||||
font-size: inherit;
|
|
||||||
}
|
|
||||||
@@ -223,6 +223,16 @@ describe('TasksComponent', () => {
|
|||||||
)
|
)
|
||||||
.flush(paginatedTasks)
|
.flush(paginatedTasks)
|
||||||
|
|
||||||
|
httpTestingController
|
||||||
|
.expectOne(
|
||||||
|
(req) =>
|
||||||
|
req.url === `${environment.apiBaseUrl}tasks/` &&
|
||||||
|
req.params.get('acknowledged') === 'false' &&
|
||||||
|
req.params.get('page_size') === '25' &&
|
||||||
|
req.params.get('page') === '1'
|
||||||
|
)
|
||||||
|
.flush(paginatedTasks)
|
||||||
|
|
||||||
httpTestingController
|
httpTestingController
|
||||||
.expectOne(
|
.expectOne(
|
||||||
(req) =>
|
(req) =>
|
||||||
@@ -231,30 +241,8 @@ describe('TasksComponent', () => {
|
|||||||
!req.params.has('status')
|
!req.params.has('status')
|
||||||
)
|
)
|
||||||
.flush(sectionCountResponse)
|
.flush(sectionCountResponse)
|
||||||
|
|
||||||
flushTaskLists(10)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// answers task list requests with the fixture tasks matching their status filter
|
|
||||||
function flushTaskLists(pageSize: number, count?: number) {
|
|
||||||
httpTestingController
|
|
||||||
.match(
|
|
||||||
(req) =>
|
|
||||||
req.url === `${environment.apiBaseUrl}tasks/` &&
|
|
||||||
req.params.get('page_size') === `${pageSize}`
|
|
||||||
)
|
|
||||||
.forEach((req) => {
|
|
||||||
const statuses = req.request.params.getAll('status')
|
|
||||||
const results = tasks.filter((task) => statuses.includes(task.status))
|
|
||||||
req.flush({ count: count ?? results.length, results })
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectSection(section: TaskSection, count: number) {
|
|
||||||
component.setSection(section)
|
|
||||||
flushTaskLists(25, count)
|
|
||||||
}
|
|
||||||
|
|
||||||
it('should display task sections with counts', () => {
|
it('should display task sections with counts', () => {
|
||||||
expect(component.selectedSection).toBe(TaskSection.All)
|
expect(component.selectedSection).toBe(TaskSection.All)
|
||||||
expect(component.selectedTaskType).toBeNull()
|
expect(component.selectedTaskType).toBeNull()
|
||||||
@@ -350,7 +338,6 @@ describe('TasksComponent', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should render pagination controls next to the task filter', () => {
|
it('should render pagination controls next to the task filter', () => {
|
||||||
selectSection(TaskSection.Completed, 30)
|
|
||||||
fixture.detectChanges()
|
fixture.detectChanges()
|
||||||
|
|
||||||
const controls = fixture.debugElement.query(By.css('.task-controls'))
|
const controls = fixture.debugElement.query(By.css('.task-controls'))
|
||||||
@@ -361,51 +348,6 @@ describe('TasksComponent', () => {
|
|||||||
expect(pagination).not.toBeNull()
|
expect(pagination).not.toBeNull()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should only paginate a section with more than one page of tasks', () => {
|
|
||||||
const pagination = () =>
|
|
||||||
fixture.debugElement.query(By.css('ngb-pagination'))
|
|
||||||
|
|
||||||
fixture.detectChanges()
|
|
||||||
expect(pagination()).toBeNull()
|
|
||||||
|
|
||||||
selectSection(TaskSection.Completed, 2)
|
|
||||||
fixture.detectChanges()
|
|
||||||
expect(pagination()).toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should load the all tasks overview one section at a time', () => {
|
|
||||||
expect(component.tasksForSection(TaskSection.NeedsAttention)).toHaveLength(
|
|
||||||
2
|
|
||||||
)
|
|
||||||
expect(component.tasksForSection(TaskSection.InProgress)).toHaveLength(3)
|
|
||||||
expect(component.tasksForSection(TaskSection.Completed)).toHaveLength(2)
|
|
||||||
expect(component.totalTasks()).toBe(7)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should show section totals and link truncated sections to their full list', () => {
|
|
||||||
component.sectionCounts.update((counts) => ({
|
|
||||||
...counts,
|
|
||||||
[TaskSection.Completed]: 27,
|
|
||||||
}))
|
|
||||||
fixture.detectChanges()
|
|
||||||
|
|
||||||
const header = (label: string) =>
|
|
||||||
fixture.debugElement
|
|
||||||
.queryAll(By.css('.section-header'))
|
|
||||||
.find((h) => h.nativeElement.textContent.includes(label))
|
|
||||||
|
|
||||||
expect(header('Needs attention').nativeElement.textContent).toContain(
|
|
||||||
'2 tasks'
|
|
||||||
)
|
|
||||||
expect(header('Needs attention').query(By.css('button'))).toBeNull()
|
|
||||||
|
|
||||||
expect(header('Recently completed').nativeElement.textContent).toContain(
|
|
||||||
'2 of 27 tasks'
|
|
||||||
)
|
|
||||||
header('Recently completed').query(By.css('button')).nativeElement.click()
|
|
||||||
expect(component.selectedSection).toBe(TaskSection.Completed)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should apply the selected section to the server-side task query', () => {
|
it('should apply the selected section to the server-side task query', () => {
|
||||||
component.setSection(TaskSection.NeedsAttention)
|
component.setSection(TaskSection.NeedsAttention)
|
||||||
|
|
||||||
@@ -426,56 +368,55 @@ describe('TasksComponent', () => {
|
|||||||
it('should apply task type and trigger source filters to the server-side task query', () => {
|
it('should apply task type and trigger source filters to the server-side task query', () => {
|
||||||
component.setTaskType(PaperlessTaskType.SanityCheck)
|
component.setTaskType(PaperlessTaskType.SanityCheck)
|
||||||
|
|
||||||
expect(
|
httpTestingController
|
||||||
httpTestingController.match(
|
.expectOne(
|
||||||
(request) =>
|
(request) =>
|
||||||
request.url === `${environment.apiBaseUrl}tasks/` &&
|
request.url === `${environment.apiBaseUrl}tasks/` &&
|
||||||
request.params.get('page_size') === '10' &&
|
request.params.get('page_size') === '25' &&
|
||||||
request.params.get('task_type') === PaperlessTaskType.SanityCheck
|
request.params.get('task_type') === PaperlessTaskType.SanityCheck
|
||||||
)
|
)
|
||||||
).toHaveLength(3)
|
.flush({ count: 1, results: [tasks[6]] })
|
||||||
|
|
||||||
component.setTriggerSource(PaperlessTaskTriggerSource.System)
|
component.setTriggerSource(PaperlessTaskTriggerSource.System)
|
||||||
|
|
||||||
expect(
|
httpTestingController
|
||||||
httpTestingController.match(
|
.expectOne(
|
||||||
(request) =>
|
(request) =>
|
||||||
request.url === `${environment.apiBaseUrl}tasks/` &&
|
request.url === `${environment.apiBaseUrl}tasks/` &&
|
||||||
request.params.get('page_size') === '10' &&
|
request.params.get('page_size') === '25' &&
|
||||||
request.params.get('task_type') === PaperlessTaskType.SanityCheck &&
|
request.params.get('task_type') === PaperlessTaskType.SanityCheck &&
|
||||||
request.params.get('trigger_source') ===
|
request.params.get('trigger_source') ===
|
||||||
PaperlessTaskTriggerSource.System
|
PaperlessTaskTriggerSource.System
|
||||||
)
|
)
|
||||||
).toHaveLength(3)
|
.flush({ count: 1, results: [tasks[6]] })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should apply text filters to the server-side task query', () => {
|
it('should apply text filters to the server-side task query', () => {
|
||||||
component.filterText = 'invoice'
|
component.filterText = 'invoice'
|
||||||
jest.advanceTimersByTime(150)
|
jest.advanceTimersByTime(150)
|
||||||
|
|
||||||
expect(
|
httpTestingController
|
||||||
httpTestingController.match(
|
.expectOne(
|
||||||
(request) =>
|
(request) =>
|
||||||
request.url === `${environment.apiBaseUrl}tasks/` &&
|
request.url === `${environment.apiBaseUrl}tasks/` &&
|
||||||
request.params.get('page_size') === '10' &&
|
request.params.get('page_size') === '25' &&
|
||||||
request.params.get('name') === 'invoice'
|
request.params.get('name') === 'invoice'
|
||||||
)
|
)
|
||||||
).toHaveLength(3)
|
.flush({ count: 1, results: [tasks[0]] })
|
||||||
|
|
||||||
component.setFilterTarget(TaskFilterTargetID.Result)
|
component.setFilterTarget(TaskFilterTargetID.Result)
|
||||||
|
|
||||||
expect(
|
httpTestingController
|
||||||
httpTestingController.match(
|
.expectOne(
|
||||||
(request) =>
|
(request) =>
|
||||||
request.url === `${environment.apiBaseUrl}tasks/` &&
|
request.url === `${environment.apiBaseUrl}tasks/` &&
|
||||||
request.params.get('page_size') === '10' &&
|
request.params.get('page_size') === '25' &&
|
||||||
request.params.get('result') === 'invoice'
|
request.params.get('result') === 'invoice'
|
||||||
)
|
)
|
||||||
).toHaveLength(3)
|
.flush({ count: 0, results: [] })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should load a different task page when pagination changes', () => {
|
it('should load a different task page when pagination changes', () => {
|
||||||
selectSection(TaskSection.Completed, 30)
|
|
||||||
component.setPage(2)
|
component.setPage(2)
|
||||||
|
|
||||||
const pageTwoTasks = {
|
const pageTwoTasks = {
|
||||||
@@ -499,7 +440,6 @@ describe('TasksComponent', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should not replace section counts with current-page counts', () => {
|
it('should not replace section counts with current-page counts', () => {
|
||||||
selectSection(TaskSection.Completed, 30)
|
|
||||||
component.setPage(2)
|
component.setPage(2)
|
||||||
|
|
||||||
httpTestingController
|
httpTestingController
|
||||||
@@ -515,21 +455,11 @@ describe('TasksComponent', () => {
|
|||||||
results: [tasks[0]],
|
results: [tasks[0]],
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(component.sectionCount(TaskSection.All)).toBe(7)
|
|
||||||
expect(component.sectionCount(TaskSection.NeedsAttention)).toBe(2)
|
expect(component.sectionCount(TaskSection.NeedsAttention)).toBe(2)
|
||||||
expect(component.sectionCount(TaskSection.InProgress)).toBe(3)
|
expect(component.sectionCount(TaskSection.InProgress)).toBe(3)
|
||||||
expect(component.sectionCount(TaskSection.Completed)).toBe(2)
|
expect(component.sectionCount(TaskSection.Completed)).toBe(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should stop loading when the overview fails to load', () => {
|
|
||||||
component.setSection(TaskSection.All)
|
|
||||||
httpTestingController
|
|
||||||
.match((req) => req.params.get('page_size') === '10')[0]
|
|
||||||
.flush('', { status: 500, statusText: 'Error' })
|
|
||||||
|
|
||||||
expect(component.loading()).toBe(false)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should expose stable task type options and disable empty ones', () => {
|
it('should expose stable task type options and disable empty ones', () => {
|
||||||
expect(component.taskTypeOptions.map((option) => option.value)).toContain(
|
expect(component.taskTypeOptions.map((option) => option.value)).toContain(
|
||||||
PaperlessTaskType.TrainClassifier
|
PaperlessTaskType.TrainClassifier
|
||||||
|
|||||||
@@ -15,9 +15,6 @@ import {
|
|||||||
distinctUntilChanged,
|
distinctUntilChanged,
|
||||||
filter,
|
filter,
|
||||||
first,
|
first,
|
||||||
forkJoin,
|
|
||||||
map,
|
|
||||||
Observable,
|
|
||||||
Subject,
|
Subject,
|
||||||
takeUntil,
|
takeUntil,
|
||||||
timer,
|
timer,
|
||||||
@@ -28,7 +25,6 @@ import {
|
|||||||
PaperlessTaskTriggerSource,
|
PaperlessTaskTriggerSource,
|
||||||
PaperlessTaskType,
|
PaperlessTaskType,
|
||||||
} from 'src/app/data/paperless-task'
|
} from 'src/app/data/paperless-task'
|
||||||
import { Results } from 'src/app/data/results'
|
|
||||||
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
|
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
|
||||||
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
|
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
|
||||||
import { TasksService } from 'src/app/services/tasks.service'
|
import { TasksService } from 'src/app/services/tasks.service'
|
||||||
@@ -173,7 +169,6 @@ export class TasksComponent
|
|||||||
public expandedTask: number
|
public expandedTask: number
|
||||||
public autoRefreshEnabled: boolean = true
|
public autoRefreshEnabled: boolean = true
|
||||||
public readonly pageSize = 25
|
public readonly pageSize = 25
|
||||||
public readonly overviewSize = 10
|
|
||||||
public page: number = 1
|
public page: number = 1
|
||||||
readonly totalTasks = signal(0)
|
readonly totalTasks = signal(0)
|
||||||
readonly sectionCounts = signal<Record<TaskSection, number>>({
|
readonly sectionCounts = signal<Record<TaskSection, number>>({
|
||||||
@@ -489,6 +484,13 @@ export class TasksComponent
|
|||||||
return this.sectionCounts()[section]
|
return this.sectionCounts()[section]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private setSectionCount(section: TaskSection, count: number) {
|
||||||
|
this.sectionCounts.update((counts) => ({
|
||||||
|
...counts,
|
||||||
|
[section]: count,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
sectionShowsResults(section: TaskSection): boolean {
|
sectionShowsResults(section: TaskSection): boolean {
|
||||||
return section !== TaskSection.InProgress
|
return section !== TaskSection.InProgress
|
||||||
}
|
}
|
||||||
@@ -735,12 +737,21 @@ export class TasksComponent
|
|||||||
this.reloadSectionCounts()
|
this.reloadSectionCounts()
|
||||||
|
|
||||||
this.loading.set(true)
|
this.loading.set(true)
|
||||||
this.listTasks()
|
this.tasksService
|
||||||
|
.list(
|
||||||
|
this.page,
|
||||||
|
this.pageSize,
|
||||||
|
this.getParamsForSection(this.selectedSection)
|
||||||
|
)
|
||||||
.pipe(first(), takeUntil(this.unsubscribeNotifier))
|
.pipe(first(), takeUntil(this.unsubscribeNotifier))
|
||||||
.subscribe({
|
.subscribe({
|
||||||
next: (result) => {
|
next: (result) => {
|
||||||
this.pagedTasks.set(result.results)
|
this.pagedTasks.set(result.results)
|
||||||
this.totalTasks.set(result.count)
|
this.totalTasks.set(result.count)
|
||||||
|
this.setSectionCount(TaskSection.All, result.count)
|
||||||
|
if (this.selectedSection !== TaskSection.All) {
|
||||||
|
this.setSectionCount(this.selectedSection, result.count)
|
||||||
|
}
|
||||||
this.loading.set(false)
|
this.loading.set(false)
|
||||||
if (
|
if (
|
||||||
this.page > 1 &&
|
this.page > 1 &&
|
||||||
@@ -756,30 +767,4 @@ export class TasksComponent
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private listTasks(): Observable<Results<PaperlessTask>> {
|
|
||||||
if (this.selectedSection !== TaskSection.All) {
|
|
||||||
return this.tasksService.list(
|
|
||||||
this.page,
|
|
||||||
this.pageSize,
|
|
||||||
this.getParamsForSection(this.selectedSection)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// All is an overview of each section to avoid splitting sections across pages
|
|
||||||
return forkJoin(
|
|
||||||
this.sections.map((section) =>
|
|
||||||
this.tasksService.list(
|
|
||||||
1,
|
|
||||||
this.overviewSize,
|
|
||||||
this.getParamsForSection(section)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
).pipe(
|
|
||||||
map((results) => ({
|
|
||||||
count: results.reduce((sum, result) => sum + result.count, 0),
|
|
||||||
results: results.flatMap((result) => result.results),
|
|
||||||
}))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -154,31 +154,6 @@ describe('UsersAndGroupsComponent', () => {
|
|||||||
jest.useRealTimers()
|
jest.useRealTimers()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should logout current user under base href if password changed', () => {
|
|
||||||
jest.useFakeTimers()
|
|
||||||
const base = document.createElement('base')
|
|
||||||
base.href = '/paperless/'
|
|
||||||
document.head.appendChild(base)
|
|
||||||
completeSetup()
|
|
||||||
let modal: NgbModalRef
|
|
||||||
modalService.activeInstances.subscribe((refs) => (modal = refs[0]))
|
|
||||||
component.editUser(users[0])
|
|
||||||
const navSpy = jest
|
|
||||||
.spyOn(navUtils, 'setLocationHref')
|
|
||||||
.mockImplementation(() => {})
|
|
||||||
const editDialog = modal.componentInstance as UserEditDialogComponent
|
|
||||||
editDialog.passwordIsSet = true
|
|
||||||
settingsService.currentUser.set(users[0]) // simulate logged in as same user
|
|
||||||
editDialog.succeeded.emit(users[0])
|
|
||||||
fixture.detectChanges()
|
|
||||||
jest.advanceTimersByTime(2600)
|
|
||||||
expect(navSpy).toHaveBeenCalledWith(
|
|
||||||
`${window.location.origin}/paperless/accounts/logout/?next=/paperless/accounts/login/?next=/paperless/`
|
|
||||||
)
|
|
||||||
base.remove()
|
|
||||||
jest.useRealTimers()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should support edit / create group, show error if needed', () => {
|
it('should support edit / create group, show error if needed', () => {
|
||||||
completeSetup()
|
completeSetup()
|
||||||
let modal: NgbModalRef
|
let modal: NgbModalRef
|
||||||
|
|||||||
@@ -116,9 +116,8 @@ export class UsersAndGroupsComponent
|
|||||||
$localize`Password has been changed, you will be logged out momentarily.`
|
$localize`Password has been changed, you will be logged out momentarily.`
|
||||||
)
|
)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const basePath = new URL(document.baseURI).pathname
|
|
||||||
setLocationHref(
|
setLocationHref(
|
||||||
`${window.location.origin}${basePath}accounts/logout/?next=${basePath}accounts/login/?next=${basePath}`
|
`${window.location.origin}/accounts/logout/?next=/accounts/login/?next=/`
|
||||||
)
|
)
|
||||||
}, 2500)
|
}, 2500)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
-32
@@ -218,38 +218,6 @@ describe('ProfileEditDialogComponent', () => {
|
|||||||
jest.useRealTimers()
|
jest.useRealTimers()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should logout under base href on save if password changed', () => {
|
|
||||||
jest.useFakeTimers()
|
|
||||||
const base = document.createElement('base')
|
|
||||||
base.href = '/paperless/'
|
|
||||||
document.head.appendChild(base)
|
|
||||||
const getSpy = jest.spyOn(profileService, 'get')
|
|
||||||
getSpy.mockReturnValue(of(profile))
|
|
||||||
const getProvidersSpy = jest.spyOn(
|
|
||||||
profileService,
|
|
||||||
'getSocialAccountProviders'
|
|
||||||
)
|
|
||||||
getProvidersSpy.mockReturnValue(of(socialAccountProviders))
|
|
||||||
component.ngOnInit()
|
|
||||||
component['newPassword'] = 'new*pass'
|
|
||||||
component.form.get('password').patchValue('new*pass')
|
|
||||||
component.form.get('password_confirm').patchValue('new*pass')
|
|
||||||
|
|
||||||
const updateSpy = jest.spyOn(profileService, 'update')
|
|
||||||
updateSpy.mockReturnValue(of(null))
|
|
||||||
const navSpy = jest
|
|
||||||
.spyOn(navUtils, 'setLocationHref')
|
|
||||||
.mockImplementation(() => {})
|
|
||||||
component.save()
|
|
||||||
expect(updateSpy).toHaveBeenCalled()
|
|
||||||
jest.advanceTimersByTime(2600)
|
|
||||||
expect(navSpy).toHaveBeenCalledWith(
|
|
||||||
`${window.location.origin}/paperless/accounts/logout/?next=/paperless/accounts/login/?next=/paperless/`
|
|
||||||
)
|
|
||||||
base.remove()
|
|
||||||
jest.useRealTimers()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should support auth token copy', () => {
|
it('should support auth token copy', () => {
|
||||||
jest.useFakeTimers()
|
jest.useFakeTimers()
|
||||||
const getSpy = jest.spyOn(profileService, 'get')
|
const getSpy = jest.spyOn(profileService, 'get')
|
||||||
|
|||||||
+1
-2
@@ -210,9 +210,8 @@ export class ProfileEditDialogComponent
|
|||||||
$localize`Password has been changed, you will be logged out momentarily.`
|
$localize`Password has been changed, you will be logged out momentarily.`
|
||||||
)
|
)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const basePath = new URL(document.baseURI).pathname
|
|
||||||
setLocationHref(
|
setLocationHref(
|
||||||
`${window.location.origin}${basePath}accounts/logout/?next=${basePath}accounts/login/?next=${basePath}`
|
`${window.location.origin}/accounts/logout/?next=/accounts/login/?next=/`
|
||||||
)
|
)
|
||||||
}, 2500)
|
}, 2500)
|
||||||
}
|
}
|
||||||
|
|||||||
+35
-33
@@ -1,6 +1,6 @@
|
|||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" (click)="clickSuggest()" [disabled]="disabled() || loading()" [aria-label]="noSuggestions ? 'No suggestions' : 'Suggest'" i18n-aria-label>
|
<button type="button" class="btn btn-sm btn-outline-primary" (click)="clickSuggest()" [disabled]="disabled() || loading() || (suggestions() && !aiEnabled())" [aria-label]="noSuggestions ? 'No suggestions' : 'Suggest'" i18n-aria-label>
|
||||||
@if (loading()) {
|
@if (loading()) {
|
||||||
<div class="spinner-border spinner-border-sm" role="status"></div>
|
<div class="spinner-border spinner-border-sm" role="status"></div>
|
||||||
} @else if (noSuggestions) {
|
} @else if (noSuggestions) {
|
||||||
@@ -18,44 +18,46 @@
|
|||||||
}
|
}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="btn-group" ngbDropdown #dropdown="ngbDropdown" [popperOptions]="popperOptions">
|
@if (aiEnabled()) {
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" ngbDropdownToggle [disabled]="disabled() || loading() || !suggestions()" aria-expanded="false" aria-controls="suggestionsDropdown" aria-label="Suggestions dropdown">
|
<div class="btn-group" ngbDropdown #dropdown="ngbDropdown" [popperOptions]="popperOptions">
|
||||||
<span class="visually-hidden" i18n>Show suggestions</span>
|
<button type="button" class="btn btn-sm btn-outline-primary" ngbDropdownToggle [disabled]="disabled() || loading() || !suggestions()" aria-expanded="false" aria-controls="suggestionsDropdown" aria-label="Suggestions dropdown">
|
||||||
</button>
|
<span class="visually-hidden" i18n>Show suggestions</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
<div ngbDropdownMenu aria-labelledby="suggestionsDropdown" class="shadow suggestions-dropdown">
|
<div ngbDropdownMenu aria-labelledby="suggestionsDropdown" class="shadow suggestions-dropdown">
|
||||||
<div class="list-group list-group-flush small pb-0">
|
<div class="list-group list-group-flush small pb-0">
|
||||||
@if (novelSuggestions === 0 && fieldSuggestions === 0) {
|
@if (novelSuggestions === 0 && fieldSuggestions === 0) {
|
||||||
<div class="list-group-item text-muted fst-italic">
|
<div class="list-group-item text-muted fst-italic">
|
||||||
<small class="text-muted small fst-italic" i18n>No novel suggestions</small>
|
<small class="text-muted small fst-italic" i18n>No novel suggestions</small>
|
||||||
</div>
|
</div>
|
||||||
}
|
|
||||||
@if (suggestions()?.suggested_tags?.length > 0) {
|
|
||||||
<small class="list-group-item text-uppercase text-muted small"><i-bs class="me-2" name="tags"></i-bs><ng-container i18n>Tags</ng-container></small>
|
|
||||||
@for (tag of suggestions().suggested_tags; track tag) {
|
|
||||||
<button type="button" class="list-group-item list-group-item-action bg-light" (click)="addTag.emit(tag)">{{ tag }}</button>
|
|
||||||
}
|
}
|
||||||
}
|
@if (suggestions()?.suggested_tags?.length > 0) {
|
||||||
@if (suggestions()?.suggested_document_types?.length > 0) {
|
<small class="list-group-item text-uppercase text-muted small"><i-bs class="me-2" name="tags"></i-bs><ng-container i18n>Tags</ng-container></small>
|
||||||
<div class="list-group-item text-uppercase text-muted small"><i-bs class="me-2" name="hash"></i-bs><ng-container i18n>Document Types</ng-container></div>
|
@for (tag of suggestions().suggested_tags; track tag) {
|
||||||
@for (type of suggestions().suggested_document_types; track type) {
|
<button type="button" class="list-group-item list-group-item-action bg-light" (click)="addTag.emit(tag)">{{ tag }}</button>
|
||||||
<button type="button" class="list-group-item list-group-item-action bg-light" (click)="addDocumentType.emit(type)">{{ type }}</button>
|
}
|
||||||
}
|
}
|
||||||
}
|
@if (suggestions()?.suggested_document_types?.length > 0) {
|
||||||
@if (suggestions()?.suggested_correspondents?.length > 0) {
|
<div class="list-group-item text-uppercase text-muted small"><i-bs class="me-2" name="hash"></i-bs><ng-container i18n>Document Types</ng-container></div>
|
||||||
<div class="list-group-item text-uppercase text-muted small"><i-bs class="me-2" name="person"></i-bs><ng-container i18n>Correspondents</ng-container></div>
|
@for (type of suggestions().suggested_document_types; track type) {
|
||||||
@for (correspondent of suggestions().suggested_correspondents; track correspondent) {
|
<button type="button" class="list-group-item list-group-item-action bg-light" (click)="addDocumentType.emit(type)">{{ type }}</button>
|
||||||
<button type="button" class="list-group-item list-group-item-action bg-light" (click)="addCorrespondent.emit(correspondent)">{{ correspondent }}</button>
|
}
|
||||||
}
|
}
|
||||||
}
|
@if (suggestions()?.suggested_correspondents?.length > 0) {
|
||||||
@if (fieldSuggestions > 0) {
|
<div class="list-group-item text-uppercase text-muted small"><i-bs class="me-2" name="person"></i-bs><ng-container i18n>Correspondents</ng-container></div>
|
||||||
<div class="list-group-item text-muted fst-italic">
|
@for (correspondent of suggestions().suggested_correspondents; track correspondent) {
|
||||||
<small class="text-muted small fst-italic" i18n>{fieldSuggestions, plural, =1 {1 suggestion available below} other {{{fieldSuggestions}} suggestions available below}}</small>
|
<button type="button" class="list-group-item list-group-item-action bg-light" (click)="addCorrespondent.emit(correspondent)">{{ correspondent }}</button>
|
||||||
</div>
|
}
|
||||||
}
|
}
|
||||||
|
@if (fieldSuggestions > 0) {
|
||||||
|
<div class="list-group-item text-muted fst-italic">
|
||||||
|
<small class="text-muted small fst-italic" i18n>{fieldSuggestions, plural, =1 {1 suggestion available below} other {{{fieldSuggestions}} suggestions available below}}</small>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if (aiEnabled()) {
|
@if (aiEnabled()) {
|
||||||
|
|||||||
-31
@@ -251,37 +251,6 @@ describe('SuggestionsDropdownComponent', () => {
|
|||||||
expect(fixture.nativeElement.textContent).toContain('No novel suggestions')
|
expect(fixture.nativeElement.textContent).toContain('No novel suggestions')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should open ML date suggestions with AI disabled', () => {
|
|
||||||
const getSuggestions = jest.spyOn(component.getSuggestions, 'emit')
|
|
||||||
fixture.componentRef.setInput('aiEnabled', false)
|
|
||||||
fixture.componentRef.setInput('fetchedSources', [SuggestionSource.ML])
|
|
||||||
fixture.componentRef.setInput('suggestions', {
|
|
||||||
dates: ['2026-01-04', '2026-02-01'],
|
|
||||||
})
|
|
||||||
fixture.componentRef.setInput('appliedCreated', '2026-01-04')
|
|
||||||
fixture.detectChanges()
|
|
||||||
|
|
||||||
const button = fixture.nativeElement.querySelector('button')
|
|
||||||
expect(button.disabled).toBeFalsy()
|
|
||||||
expect(button.querySelector('.badge').textContent.trim()).toBe('1')
|
|
||||||
|
|
||||||
button.click()
|
|
||||||
fixture.detectChanges()
|
|
||||||
|
|
||||||
expect(component.dropdown.isOpen()).toBeTruthy()
|
|
||||||
expect(fixture.nativeElement.textContent).toContain(
|
|
||||||
'1 suggestion available below'
|
|
||||||
)
|
|
||||||
expect(getSuggestions).not.toHaveBeenCalled()
|
|
||||||
expect(
|
|
||||||
fixture.nativeElement.querySelector('button[title="Suggestion options"]')
|
|
||||||
).toBeNull()
|
|
||||||
|
|
||||||
button.click()
|
|
||||||
fixture.detectChanges()
|
|
||||||
expect(component.dropdown.isOpen()).toBeFalsy()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should fetch unfetched sources and show existing suggestions', () => {
|
it('should fetch unfetched sources and show existing suggestions', () => {
|
||||||
jest.spyOn(component.getSuggestions, 'emit')
|
jest.spyOn(component.getSuggestions, 'emit')
|
||||||
fixture.componentRef.setInput('aiEnabled', true)
|
fixture.componentRef.setInput('aiEnabled', true)
|
||||||
|
|||||||
+5
-1
@@ -53,7 +53,11 @@ export class SuggestionsDropdownComponent {
|
|||||||
addCorrespondent: EventEmitter<string> = new EventEmitter()
|
addCorrespondent: EventEmitter<string> = new EventEmitter()
|
||||||
|
|
||||||
public clickSuggest(): void {
|
public clickSuggest(): void {
|
||||||
if (this.disabled() || this.loading()) {
|
if (
|
||||||
|
this.disabled() ||
|
||||||
|
this.loading() ||
|
||||||
|
(this.suggestions() && !this.aiEnabled())
|
||||||
|
) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-2
@@ -25,8 +25,6 @@
|
|||||||
@if (displayFields().includes(field)) {
|
@if (displayFields().includes(field)) {
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="text-truncate"
|
|
||||||
[title]="getColumnTitle(field)"
|
|
||||||
[ngClass]="{
|
[ngClass]="{
|
||||||
'd-none d-md-table-cell': i > 1,
|
'd-none d-md-table-cell': i > 1,
|
||||||
'w-25': field === DisplayField.CREATED || field === DisplayField.ADDED
|
'w-25': field === DisplayField.CREATED || field === DisplayField.ADDED
|
||||||
|
|||||||
+3
-5
@@ -11,7 +11,7 @@
|
|||||||
<div class="input-group input-group-sm w-auto d-none d-md-flex">
|
<div class="input-group input-group-sm w-auto d-none d-md-flex">
|
||||||
<label class="input-group-text bg-transparent border-0" for="managementPageSize" i18n>Show:</label>
|
<label class="input-group-text bg-transparent border-0" for="managementPageSize" i18n>Show:</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group input-group-sm w-auto">
|
<div class="input-group input-group-sm w-auto me-3">
|
||||||
<select id="managementPageSize" class="form-select form-select-sm small" [(ngModel)]="pageSize">
|
<select id="managementPageSize" class="form-select form-select-sm small" [(ngModel)]="pageSize">
|
||||||
<option [ngValue]="25">25</option>
|
<option [ngValue]="25">25</option>
|
||||||
<option [ngValue]="50">50</option>
|
<option [ngValue]="50">50</option>
|
||||||
@@ -19,9 +19,7 @@
|
|||||||
</select>
|
</select>
|
||||||
<span class="input-group-text text-muted d-none d-md-flex" i18n>per page</span>
|
<span class="input-group-text text-muted d-none d-md-flex" i18n>per page</span>
|
||||||
</div>
|
</div>
|
||||||
@if (collectionSize() > pageSize) {
|
<ngb-pagination [pageSize]="pageSize" [collectionSize]="collectionSize()" [page]="page()" [maxSize]="5" (pageChange)="page.set($event); reloadData()" size="sm" aria-label="Pagination"></ngb-pagination>
|
||||||
<ngb-pagination [pageSize]="pageSize" [collectionSize]="collectionSize()" [page]="page()" [maxSize]="5" (pageChange)="page.set($event); reloadData()" class="ms-3" size="sm" aria-label="Pagination"></ngb-pagination>
|
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -72,7 +70,7 @@
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@if (collectionSize() > pageSize) {
|
@if (collectionSize() > 20) {
|
||||||
<ngb-pagination class="ms-auto" [pageSize]="pageSize" [collectionSize]="collectionSize()" [page]="page()" [maxSize]="5" (pageChange)="page.set($event); reloadData()" size="sm" aria-label="Pagination"></ngb-pagination>
|
<ngb-pagination class="ms-auto" [pageSize]="pageSize" [collectionSize]="collectionSize()" [page]="page()" [maxSize]="5" (pageChange)="page.set($event); reloadData()" size="sm" aria-label="Pagination"></ngb-pagination>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+9
-11
@@ -93,17 +93,15 @@
|
|||||||
[disabled]="selectedMailIds().size === 0"
|
[disabled]="selectedMailIds().size === 0"
|
||||||
(confirm)="deleteSelected()">
|
(confirm)="deleteSelected()">
|
||||||
</pngx-confirm-button>
|
</pngx-confirm-button>
|
||||||
@if (processedMails().length > 50) {
|
<div class="ms-auto">
|
||||||
<div class="ms-auto">
|
<ngb-pagination
|
||||||
<ngb-pagination
|
[collectionSize]="processedMails().length"
|
||||||
[collectionSize]="processedMails().length"
|
[(page)]="page"
|
||||||
[(page)]="page"
|
[pageSize]="50"
|
||||||
[pageSize]="50"
|
[maxSize]="5"
|
||||||
[maxSize]="5"
|
(pageChange)="loadProcessedMails()">
|
||||||
(pageChange)="loadProcessedMails()">
|
</ngb-pagination>
|
||||||
</ngb-pagination>
|
</div>
|
||||||
</div>
|
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<context context-type="linenumber">386,393</context>
|
<context context-type="linenumber">386,393</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
|
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
|
||||||
<target state="translated"> スライド <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> / <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target>
|
<target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> of <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="ngb.carousel.previous" datatype="html">
|
<trans-unit id="ngb.carousel.previous" datatype="html">
|
||||||
<source>Previous</source>
|
<source>Previous</source>
|
||||||
@@ -479,7 +479,7 @@
|
|||||||
<context context-type="sourcefile">src/app/app.component.ts</context>
|
<context context-type="sourcefile">src/app/app.component.ts</context>
|
||||||
<context context-type="linenumber">201</context>
|
<context context-type="linenumber">201</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">タグ、取引先、ドキュメントの種類、保存先パス、カスタムフィールドなどの属性をここで管理できます。これらはドキュメントの編集画面から作成することもできます。</target>
|
<target state="needs-translation">Attributes like tags, correspondents, document types, storage paths and custom fields can all be managed here. They can also be created from the document edit view.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7851939076947092983" datatype="html">
|
<trans-unit id="7851939076947092983" datatype="html">
|
||||||
<source>Manage e-mail accounts and rules for automatically importing documents.</source>
|
<source>Manage e-mail accounts and rules for automatically importing documents.</source>
|
||||||
@@ -507,7 +507,7 @@
|
|||||||
<context context-type="sourcefile">src/app/app.component.ts</context>
|
<context context-type="sourcefile">src/app/app.component.ts</context>
|
||||||
<context context-type="linenumber">225</context>
|
<context context-type="linenumber">225</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">タスクでは、バックグラウンド処理の進行状況、対応が必要な項目、最近完了した処理を確認できます。</target>
|
<target state="needs-translation">Tasks helps you track background work, what needs attention, and what recently completed.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2755033621682206902" datatype="html">
|
<trans-unit id="2755033621682206902" datatype="html">
|
||||||
<source>Check out the settings for various tweaks to the web app.</source>
|
<source>Check out the settings for various tweaks to the web app.</source>
|
||||||
@@ -571,7 +571,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
||||||
<context context-type="linenumber">35</context>
|
<context context-type="linenumber">35</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">この値は、Paperless の外で設定されている <x id="INTERPOLATION" equiv-text="{{option.config_key}}"/>を上書きします。</target>
|
<target state="needs-translation">This value overrides <x id="INTERPOLATION" equiv-text="{{option.config_key}}"/>, which is set outside Paperless.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7221396516204435584" datatype="html">
|
<trans-unit id="7221396516204435584" datatype="html">
|
||||||
<source><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</source>
|
<source><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</source>
|
||||||
@@ -579,7 +579,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">37</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated"><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> はPaperlessの外部で設定されています。ここに値を入力すると、その設定を上書きできます。</target>
|
<target state="needs-translation"><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8318849619178340389" datatype="html">
|
<trans-unit id="8318849619178340389" datatype="html">
|
||||||
<source>Use the externally configured value</source>
|
<source>Use the externally configured value</source>
|
||||||
@@ -587,7 +587,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
||||||
<context context-type="linenumber">42</context>
|
<context context-type="linenumber">42</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">外部で設定された値を使用</target>
|
<target state="needs-translation">Use the externally configured value</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6032629623003430385" datatype="html">
|
<trans-unit id="6032629623003430385" datatype="html">
|
||||||
<source>Reset to external</source>
|
<source>Reset to external</source>
|
||||||
@@ -595,7 +595,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
||||||
<context context-type="linenumber">43</context>
|
<context context-type="linenumber">43</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">外部設定に戻す</target>
|
<target state="needs-translation">Reset to external</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7808756054397155068" datatype="html">
|
<trans-unit id="7808756054397155068" datatype="html">
|
||||||
<source>Reset</source>
|
<source>Reset</source>
|
||||||
@@ -875,7 +875,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
|
||||||
<context context-type="linenumber">18,19</context>
|
<context context-type="linenumber">18,19</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">行</target>
|
<target state="needs-translation">lines</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8838884664569764142" datatype="html">
|
<trans-unit id="8838884664569764142" datatype="html">
|
||||||
<source>Auto refresh</source>
|
<source>Auto refresh</source>
|
||||||
@@ -1003,7 +1003,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
|
||||||
<context context-type="linenumber">63,64</context>
|
<context context-type="linenumber">63,64</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">一番下へ移動</target>
|
<target state="needs-translation">Jump to bottom</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1255048712725285892" datatype="html">
|
<trans-unit id="1255048712725285892" datatype="html">
|
||||||
<source>Options to customize appearance, notifications and more. Settings apply to the <strong>current user only</strong>.</source>
|
<source>Options to customize appearance, notifications and more. Settings apply to the <strong>current user only</strong>.</source>
|
||||||
@@ -1135,7 +1135,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">115,116</context>
|
<context context-type="linenumber">115,116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">サイドバーに表示するアイテム:</target>
|
<target state="needs-translation">Sidebar items to show:</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1356890996281769972" datatype="html">
|
<trans-unit id="1356890996281769972" datatype="html">
|
||||||
<source>Dark mode</source>
|
<source>Dark mode</source>
|
||||||
@@ -1323,7 +1323,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">201</context>
|
<context context-type="linenumber">201</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">サイドバーの保存済みビューにドキュメント数を表示</target>
|
<target state="needs-translation">Show document counts in sidebar saved views</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8939587804990976924" datatype="html">
|
<trans-unit id="8939587804990976924" datatype="html">
|
||||||
<source>Items per page</source>
|
<source>Items per page</source>
|
||||||
@@ -1403,7 +1403,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">259,260</context>
|
<context context-type="linenumber">259,260</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">提案機能のデフォルト設定</target>
|
<target state="needs-translation">Suggestions default to</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6251586038459969294" datatype="html">
|
<trans-unit id="6251586038459969294" datatype="html">
|
||||||
<source>Both</source>
|
<source>Both</source>
|
||||||
@@ -1411,7 +1411,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">264</context>
|
<context context-type="linenumber">264</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">両方</target>
|
<target state="needs-translation">Both</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8967224283122923634" datatype="html">
|
<trans-unit id="8967224283122923634" datatype="html">
|
||||||
<source>ML only</source>
|
<source>ML only</source>
|
||||||
@@ -1427,7 +1427,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">268</context>
|
<context context-type="linenumber">268</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">AIのみ</target>
|
<target state="needs-translation">AI only</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1043449647727456069" datatype="html">
|
<trans-unit id="1043449647727456069" datatype="html">
|
||||||
<source>Automatically request suggestions for inbox documents</source>
|
<source>Automatically request suggestions for inbox documents</source>
|
||||||
@@ -1435,7 +1435,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">276</context>
|
<context context-type="linenumber">276</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">受信トレイ内のドキュメントに対して自動的に提案をリクエストする</target>
|
<target state="needs-translation">Automatically request suggestions for inbox documents</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="460700039378563125" datatype="html">
|
<trans-unit id="460700039378563125" datatype="html">
|
||||||
<source>If un-checked, suggestions must be requested via the Suggest button.</source>
|
<source>If un-checked, suggestions must be requested via the Suggest button.</source>
|
||||||
@@ -1443,7 +1443,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">276</context>
|
<context context-type="linenumber">276</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">チェックを外した場合、提案を取得するには「提案」ボタンを押す必要があります。</target>
|
<target state="needs-translation">If un-checked, suggestions must be requested via the Suggest button.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8793267604636304297" datatype="html">
|
<trans-unit id="8793267604636304297" datatype="html">
|
||||||
<source>Show document thumbnail during loading</source>
|
<source>Show document thumbnail during loading</source>
|
||||||
@@ -1467,7 +1467,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">300,301</context>
|
<context context-type="linenumber">300,301</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ドキュメントの詳細ページで非表示にするフィールドは、チェックを外してください。</target>
|
<target state="needs-translation">Uncheck fields to hide them on the document details page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8508424367627989968" datatype="html">
|
<trans-unit id="8508424367627989968" datatype="html">
|
||||||
<source>Bulk editing</source>
|
<source>Bulk editing</source>
|
||||||
@@ -1507,7 +1507,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1907</context>
|
<context context-type="linenumber">1907</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">PDF エディター</target>
|
<target state="needs-translation">PDF Editor</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1577733187050997705" datatype="html">
|
<trans-unit id="1577733187050997705" datatype="html">
|
||||||
<source>Default editing mode</source>
|
<source>Default editing mode</source>
|
||||||
@@ -1515,7 +1515,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">317,318</context>
|
<context context-type="linenumber">317,318</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">デフォルトの編集モード</target>
|
<target state="needs-translation">Default editing mode</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7273640930165035289" datatype="html">
|
<trans-unit id="7273640930165035289" datatype="html">
|
||||||
<source>Create new document(s)</source>
|
<source>Create new document(s)</source>
|
||||||
@@ -1527,7 +1527,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context>
|
<context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context>
|
||||||
<context context-type="linenumber">82,83</context>
|
<context context-type="linenumber">82,83</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">新しいドキュメントを作成</target>
|
<target state="needs-translation">Create new document(s)</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7860582931776068318" datatype="html">
|
<trans-unit id="7860582931776068318" datatype="html">
|
||||||
<source>Add document version</source>
|
<source>Add document version</source>
|
||||||
@@ -1539,7 +1539,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context>
|
<context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context>
|
||||||
<context context-type="linenumber">87,88</context>
|
<context context-type="linenumber">87,88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ドキュメントのバージョンを追加</target>
|
<target state="needs-translation">Add document version</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8104421162933956065" datatype="html">
|
<trans-unit id="8104421162933956065" datatype="html">
|
||||||
<source>Notes</source>
|
<source>Notes</source>
|
||||||
@@ -1639,7 +1639,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">347</context>
|
<context context-type="linenumber">347</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">これらの設定は、Web UIから作成されたオブジェクト(タグ、メールルールなど)に対して、このユーザーアカウントに適用されます。ドキュメントには適用されません。</target>
|
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -2203,7 +2203,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
||||||
<context context-type="linenumber">331</context>
|
<context context-type="linenumber">331</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">タスク</target>
|
<target state="needs-translation">Tasks</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8492095365580052820" datatype="html">
|
<trans-unit id="8492095365580052820" datatype="html">
|
||||||
<source>Tasks shows detailed information about document consumption and system tasks.</source>
|
<source>Tasks shows detailed information about document consumption and system tasks.</source>
|
||||||
@@ -2211,7 +2211,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">4,5</context>
|
<context context-type="linenumber">4,5</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">タスクでは、ドキュメントの取り込み処理やシステムタスクに関する詳細情報を確認できます。</target>
|
<target state="needs-translation">Tasks shows detailed information about document consumption and system tasks.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="103921551219467537" datatype="html">
|
<trans-unit id="103921551219467537" datatype="html">
|
||||||
<source>Clear selection</source>
|
<source>Clear selection</source>
|
||||||
@@ -2235,7 +2235,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">16</context>
|
<context context-type="linenumber">16</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">すべて閉じる</target>
|
<target state="needs-translation">Dismiss all</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1616102757855967475" datatype="html">
|
<trans-unit id="1616102757855967475" datatype="html">
|
||||||
<source>All</source>
|
<source>All</source>
|
||||||
@@ -2295,7 +2295,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">219</context>
|
<context context-type="linenumber">219</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">すべての種類</target>
|
<target state="needs-translation">All types</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="131016739441837046" datatype="html">
|
<trans-unit id="131016739441837046" datatype="html">
|
||||||
<source>All sources</source>
|
<source>All sources</source>
|
||||||
@@ -2307,7 +2307,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">231</context>
|
<context context-type="linenumber">231</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">すべてのソース</target>
|
<target state="needs-translation">All sources</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3643866539136239218" datatype="html">
|
<trans-unit id="3643866539136239218" datatype="html">
|
||||||
<source>Clear search</source>
|
<source>Clear search</source>
|
||||||
@@ -2327,7 +2327,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">92,93</context>
|
<context context-type="linenumber">92,93</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">タスクを検索</target>
|
<target state="needs-translation">Search tasks</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6849725902312323996" datatype="html">
|
<trans-unit id="6849725902312323996" datatype="html">
|
||||||
<source>Reset filters</source>
|
<source>Reset filters</source>
|
||||||
@@ -2351,7 +2351,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">122</context>
|
<context context-type="linenumber">122</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">{VAR_PLURAL, plural, =1 {1件のタスク} other {<x id="INTERPOLATION"/>件のタスク}}</target>
|
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 task} other {<x id="INTERPOLATION"/> tasks}}</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8953033926734869941" datatype="html">
|
<trans-unit id="8953033926734869941" datatype="html">
|
||||||
<source>Name</source>
|
<source>Name</source>
|
||||||
@@ -2651,7 +2651,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">207</context>
|
<context context-type="linenumber">207</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">タスクの詳細を表示</target>
|
<target state="needs-translation">View task details</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1536087519743707362" datatype="html">
|
<trans-unit id="1536087519743707362" datatype="html">
|
||||||
<source>Dismiss</source>
|
<source>Dismiss</source>
|
||||||
@@ -2691,7 +2691,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">232,233</context>
|
<context context-type="linenumber">232,233</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">結果メッセージ</target>
|
<target state="needs-translation">Result message</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6621329748219109148" datatype="html">
|
<trans-unit id="6621329748219109148" datatype="html">
|
||||||
<source>Duplicate</source>
|
<source>Duplicate</source>
|
||||||
@@ -2699,7 +2699,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">239,240</context>
|
<context context-type="linenumber">239,240</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">重複</target>
|
<target state="needs-translation">Duplicate</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7593555694782789615" datatype="html">
|
<trans-unit id="7593555694782789615" datatype="html">
|
||||||
<source>Open</source>
|
<source>Open</source>
|
||||||
@@ -2739,7 +2739,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">257,258</context>
|
<context context-type="linenumber">257,258</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">入力データ</target>
|
<target state="needs-translation">Input data</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1585185618099050920" datatype="html">
|
<trans-unit id="1585185618099050920" datatype="html">
|
||||||
<source>Result data</source>
|
<source>Result data</source>
|
||||||
@@ -2747,7 +2747,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">263,264</context>
|
<context context-type="linenumber">263,264</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">結果データ</target>
|
<target state="needs-translation">Result data</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7976920528153858271" datatype="html">
|
<trans-unit id="7976920528153858271" datatype="html">
|
||||||
<source>No tasks match the current filters.</source>
|
<source>No tasks match the current filters.</source>
|
||||||
@@ -2755,7 +2755,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">285,287</context>
|
<context context-type="linenumber">285,287</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">現在のフィルター条件に一致するタスクはありません。</target>
|
<target state="needs-translation">No tasks match the current filters.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2525230676386818985" datatype="html">
|
<trans-unit id="2525230676386818985" datatype="html">
|
||||||
<source>Result</source>
|
<source>Result</source>
|
||||||
@@ -2771,7 +2771,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">55</context>
|
<context context-type="linenumber">55</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">注意が必要</target>
|
<target state="needs-translation">Needs attention</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3307214558906712688" datatype="html">
|
<trans-unit id="3307214558906712688" datatype="html">
|
||||||
<source>In progress</source>
|
<source>In progress</source>
|
||||||
@@ -2779,7 +2779,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">56</context>
|
<context context-type="linenumber">56</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">進行中</target>
|
<target state="needs-translation">In progress</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1371178633976505412" datatype="html">
|
<trans-unit id="1371178633976505412" datatype="html">
|
||||||
<source>Recently completed</source>
|
<source>Recently completed</source>
|
||||||
@@ -2787,7 +2787,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">57</context>
|
<context context-type="linenumber">57</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">最近完了したタスク</target>
|
<target state="needs-translation">Recently completed</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2936452645673957909" datatype="html">
|
<trans-unit id="2936452645673957909" datatype="html">
|
||||||
<source>Consume File</source>
|
<source>Consume File</source>
|
||||||
@@ -2795,7 +2795,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">66</context>
|
<context context-type="linenumber">66</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ファイルの取り込み</target>
|
<target state="needs-translation">Consume File</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5622386857946132209" datatype="html">
|
<trans-unit id="5622386857946132209" datatype="html">
|
||||||
<source>Train Classifier</source>
|
<source>Train Classifier</source>
|
||||||
@@ -2811,7 +2811,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">74</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">整合性チェック</target>
|
<target state="needs-translation">Sanity Check</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7502272564743467653" datatype="html">
|
<trans-unit id="7502272564743467653" datatype="html">
|
||||||
<source>Mail Fetch</source>
|
<source>Mail Fetch</source>
|
||||||
@@ -2839,7 +2839,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">80</context>
|
<context context-type="linenumber">80</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ゴミ箱を空にする</target>
|
<target state="needs-translation">Empty Trash</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4173754487295857311" datatype="html">
|
<trans-unit id="4173754487295857311" datatype="html">
|
||||||
<source>Check Workflows</source>
|
<source>Check Workflows</source>
|
||||||
@@ -2847,7 +2847,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">84</context>
|
<context context-type="linenumber">84</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ワークフローの確認</target>
|
<target state="needs-translation">Check Workflows</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2065831805515896240" datatype="html">
|
<trans-unit id="2065831805515896240" datatype="html">
|
||||||
<source>Bulk Update</source>
|
<source>Bulk Update</source>
|
||||||
@@ -2855,7 +2855,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">一括更新</target>
|
<target state="needs-translation">Bulk Update</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5062348912423871240" datatype="html">
|
<trans-unit id="5062348912423871240" datatype="html">
|
||||||
<source>Reprocess Document</source>
|
<source>Reprocess Document</source>
|
||||||
@@ -2863,7 +2863,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">92</context>
|
<context context-type="linenumber">92</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ドキュメントの再処理</target>
|
<target state="needs-translation">Reprocess Document</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6903696804811148799" datatype="html">
|
<trans-unit id="6903696804811148799" datatype="html">
|
||||||
<source>Build Share Link</source>
|
<source>Build Share Link</source>
|
||||||
@@ -2871,7 +2871,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">96</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">共有リンクの生成</target>
|
<target state="needs-translation">Build Share Link</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6581973658756561124" datatype="html">
|
<trans-unit id="6581973658756561124" datatype="html">
|
||||||
<source>Bulk Delete</source>
|
<source>Bulk Delete</source>
|
||||||
@@ -2879,7 +2879,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">100</context>
|
<context context-type="linenumber">100</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">一括削除</target>
|
<target state="needs-translation">Bulk Delete</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5672013191898828327" datatype="html">
|
<trans-unit id="5672013191898828327" datatype="html">
|
||||||
<source>Apply AI Suggestions</source>
|
<source>Apply AI Suggestions</source>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<context context-type="linenumber">386,393</context>
|
<context context-type="linenumber">386,393</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
|
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
|
||||||
<target state="translated"> Shlid <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> i <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/></target>
|
<target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> of <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="ngb.carousel.previous" datatype="html">
|
<trans-unit id="ngb.carousel.previous" datatype="html">
|
||||||
<source>Previous</source>
|
<source>Previous</source>
|
||||||
@@ -571,7 +571,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
||||||
<context context-type="linenumber">35</context>
|
<context context-type="linenumber">35</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Ky vlerë mbizotëron <x id="INTERPOLATION" equiv-text="{{option.config_key}}"/>, i cili është vendosur jashtë Paperless.</target>
|
<target state="needs-translation">This value overrides <x id="INTERPOLATION" equiv-text="{{option.config_key}}"/>, which is set outside Paperless.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7221396516204435584" datatype="html">
|
<trans-unit id="7221396516204435584" datatype="html">
|
||||||
<source><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</source>
|
<source><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</source>
|
||||||
@@ -579,7 +579,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
||||||
<context context-type="linenumber">37</context>
|
<context context-type="linenumber">37</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated"><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> është vendosur jashtë Paperless. Shkruani një vlerë këtu për ta mbingarkuar atë.</target>
|
<target state="needs-translation"><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8318849619178340389" datatype="html">
|
<trans-unit id="8318849619178340389" datatype="html">
|
||||||
<source>Use the externally configured value</source>
|
<source>Use the externally configured value</source>
|
||||||
@@ -587,7 +587,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
||||||
<context context-type="linenumber">42</context>
|
<context context-type="linenumber">42</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Përdorni vlerën e konfiguruar nga jashtë</target>
|
<target state="needs-translation">Use the externally configured value</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6032629623003430385" datatype="html">
|
<trans-unit id="6032629623003430385" datatype="html">
|
||||||
<source>Reset to external</source>
|
<source>Reset to external</source>
|
||||||
@@ -595,7 +595,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
|
||||||
<context context-type="linenumber">43</context>
|
<context context-type="linenumber">43</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Rinisni në të jashtëm</target>
|
<target state="needs-translation">Reset to external</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7808756054397155068" datatype="html">
|
<trans-unit id="7808756054397155068" datatype="html">
|
||||||
<source>Reset</source>
|
<source>Reset</source>
|
||||||
@@ -1135,7 +1135,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">115,116</context>
|
<context context-type="linenumber">115,116</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Elementët e shiritit anësor për t'u shfaqur:</target>
|
<target state="needs-translation">Sidebar items to show:</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1356890996281769972" datatype="html">
|
<trans-unit id="1356890996281769972" datatype="html">
|
||||||
<source>Dark mode</source>
|
<source>Dark mode</source>
|
||||||
@@ -1403,7 +1403,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">259,260</context>
|
<context context-type="linenumber">259,260</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Sugjerimet parazgjedhore janë</target>
|
<target state="needs-translation">Suggestions default to</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6251586038459969294" datatype="html">
|
<trans-unit id="6251586038459969294" datatype="html">
|
||||||
<source>Both</source>
|
<source>Both</source>
|
||||||
@@ -1411,7 +1411,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">264</context>
|
<context context-type="linenumber">264</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Të dyja</target>
|
<target state="needs-translation">Both</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8967224283122923634" datatype="html">
|
<trans-unit id="8967224283122923634" datatype="html">
|
||||||
<source>ML only</source>
|
<source>ML only</source>
|
||||||
@@ -1419,7 +1419,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">266</context>
|
<context context-type="linenumber">266</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Vetëm ML</target>
|
<target state="needs-translation">ML only</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6418969597665857901" datatype="html">
|
<trans-unit id="6418969597665857901" datatype="html">
|
||||||
<source>AI only</source>
|
<source>AI only</source>
|
||||||
@@ -1427,7 +1427,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">268</context>
|
<context context-type="linenumber">268</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Vetëm AI</target>
|
<target state="needs-translation">AI only</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1043449647727456069" datatype="html">
|
<trans-unit id="1043449647727456069" datatype="html">
|
||||||
<source>Automatically request suggestions for inbox documents</source>
|
<source>Automatically request suggestions for inbox documents</source>
|
||||||
@@ -1435,7 +1435,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">276</context>
|
<context context-type="linenumber">276</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Kërkoni automatikisht sugjerime për dokumentet në kutinë e postës elektronike</target>
|
<target state="needs-translation">Automatically request suggestions for inbox documents</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="460700039378563125" datatype="html">
|
<trans-unit id="460700039378563125" datatype="html">
|
||||||
<source>If un-checked, suggestions must be requested via the Suggest button.</source>
|
<source>If un-checked, suggestions must be requested via the Suggest button.</source>
|
||||||
@@ -1443,7 +1443,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">276</context>
|
<context context-type="linenumber">276</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Nëse nuk është shënuar, sugjerimet duhet të kërkohen përmes butonit Sugjero.</target>
|
<target state="needs-translation">If un-checked, suggestions must be requested via the Suggest button.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8793267604636304297" datatype="html">
|
<trans-unit id="8793267604636304297" datatype="html">
|
||||||
<source>Show document thumbnail during loading</source>
|
<source>Show document thumbnail during loading</source>
|
||||||
@@ -2319,7 +2319,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
|
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
|
||||||
<context context-type="linenumber">21</context>
|
<context context-type="linenumber">21</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Pastro kërkimin</target>
|
<target state="needs-translation">Clear search</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3570013039254960445" datatype="html">
|
<trans-unit id="3570013039254960445" datatype="html">
|
||||||
<source>Search tasks</source>
|
<source>Search tasks</source>
|
||||||
@@ -2651,7 +2651,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">207</context>
|
<context context-type="linenumber">207</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Shiko detajet e detyrës</target>
|
<target state="needs-translation">View task details</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1536087519743707362" datatype="html">
|
<trans-unit id="1536087519743707362" datatype="html">
|
||||||
<source>Dismiss</source>
|
<source>Dismiss</source>
|
||||||
@@ -2887,7 +2887,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">104</context>
|
<context context-type="linenumber">104</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Apliko sugjerimet e AI</target>
|
<target state="needs-translation">Apply AI Suggestions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="9172233176401579786" datatype="html">
|
<trans-unit id="9172233176401579786" datatype="html">
|
||||||
<source>Scheduled</source>
|
<source>Scheduled</source>
|
||||||
@@ -3783,7 +3783,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
||||||
<context context-type="linenumber">42</context>
|
<context context-type="linenumber">42</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Menuja e përdoruesit</target>
|
<target state="needs-translation">User menu</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2448391510242468907" datatype="html">
|
<trans-unit id="2448391510242468907" datatype="html">
|
||||||
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
|
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
|
||||||
@@ -3939,7 +3939,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context>
|
<context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context>
|
||||||
<context context-type="linenumber">2,3</context>
|
<context context-type="linenumber">2,3</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Ndani lidhjet</target>
|
<target state="needs-translation">Share links</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7844706011418789951" datatype="html">
|
<trans-unit id="7844706011418789951" datatype="html">
|
||||||
<source>Administration</source>
|
<source>Administration</source>
|
||||||
@@ -4015,7 +4015,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
||||||
<context context-type="linenumber">403</context>
|
<context context-type="linenumber">403</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Konfiguro kontrollin e përditësimeve</target>
|
<target state="needs-translation">Configure update checking</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1542489069631984294" datatype="html">
|
<trans-unit id="1542489069631984294" datatype="html">
|
||||||
<source>Sidebar views updated</source>
|
<source>Sidebar views updated</source>
|
||||||
@@ -4259,7 +4259,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/saved-view-icons.ts</context>
|
<context context-type="sourcefile">src/app/data/saved-view-icons.ts</context>
|
||||||
<context context-type="linenumber">21</context>
|
<context context-type="linenumber">21</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Bisedë</target>
|
<target state="needs-translation">Chat</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8066608938393600549" datatype="html">
|
<trans-unit id="8066608938393600549" datatype="html">
|
||||||
<source>Message</source>
|
<source>Message</source>
|
||||||
@@ -4379,7 +4379,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html</context>
|
<context context-type="sourcefile">src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html</context>
|
||||||
<context context-type="linenumber">8,9</context>
|
<context context-type="linenumber">8,9</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Dokumenti rrënjësor:</target>
|
<target state="needs-translation">Root document:</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2121026240713807342" datatype="html">
|
<trans-unit id="2121026240713807342" datatype="html">
|
||||||
<source>Versions (oldest first):</source>
|
<source>Versions (oldest first):</source>
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ import {
|
|||||||
bell,
|
bell,
|
||||||
bodyText,
|
bodyText,
|
||||||
bookmark,
|
bookmark,
|
||||||
boxArrowInRight,
|
|
||||||
boxArrowUp,
|
boxArrowUp,
|
||||||
boxArrowUpRight,
|
boxArrowUpRight,
|
||||||
boxes,
|
boxes,
|
||||||
@@ -294,7 +293,6 @@ const icons = {
|
|||||||
braces,
|
braces,
|
||||||
bodyText,
|
bodyText,
|
||||||
bookmark,
|
bookmark,
|
||||||
boxArrowInRight,
|
|
||||||
boxArrowUp,
|
boxArrowUp,
|
||||||
boxArrowUpRight,
|
boxArrowUpRight,
|
||||||
boxes,
|
boxes,
|
||||||
|
|||||||
@@ -54,10 +54,6 @@ def _predict_with_threshold(classifier, X, threshold: float) -> int | None:
|
|||||||
cutoff so that uncertain predictions are discarded rather than assigned.
|
cutoff so that uncertain predictions are discarded rather than assigned.
|
||||||
"""
|
"""
|
||||||
probas = classifier.predict_proba(X)[0]
|
probas = classifier.predict_proba(X)[0]
|
||||||
if len(classifier.classes_) == 1:
|
|
||||||
# scikit-learn treats a single-class fit as binary, so predict_proba
|
|
||||||
# returns [1 - p, p] for one class. Column 0 is the real class.
|
|
||||||
probas = probas[:1]
|
|
||||||
best_idx = int(probas.argmax())
|
best_idx = int(probas.argmax())
|
||||||
best_class = int(classifier.classes_[best_idx])
|
best_class = int(classifier.classes_[best_idx])
|
||||||
|
|
||||||
|
|||||||
@@ -130,14 +130,12 @@ class DocumentMetadataOverrides:
|
|||||||
get_users_with_perms(
|
get_users_with_perms(
|
||||||
doc,
|
doc,
|
||||||
only_with_perms_in=["view_document"],
|
only_with_perms_in=["view_document"],
|
||||||
with_group_users=False,
|
|
||||||
).values_list("id", flat=True),
|
).values_list("id", flat=True),
|
||||||
)
|
)
|
||||||
overrides.change_users = list(
|
overrides.change_users = list(
|
||||||
get_users_with_perms(
|
get_users_with_perms(
|
||||||
doc,
|
doc,
|
||||||
only_with_perms_in=["change_document"],
|
only_with_perms_in=["change_document"],
|
||||||
with_group_users=False,
|
|
||||||
).values_list("id", flat=True),
|
).values_list("id", flat=True),
|
||||||
)
|
)
|
||||||
overrides.custom_fields = {
|
overrides.custom_fields = {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ from itertools import islice
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from typing import Final
|
|
||||||
|
|
||||||
from allauth.mfa.models import Authenticator
|
from allauth.mfa.models import Authenticator
|
||||||
from allauth.socialaccount.models import SocialAccount
|
from allauth.socialaccount.models import SocialAccount
|
||||||
@@ -71,15 +70,6 @@ from paperless.models import ApplicationConfiguration
|
|||||||
from paperless_mail.models import MailAccount
|
from paperless_mail.models import MailAccount
|
||||||
from paperless_mail.models import MailRule
|
from paperless_mail.models import MailRule
|
||||||
|
|
||||||
# Derived names replace the original's extension with these suffixes
|
|
||||||
THUMBNAIL_SUFFIX: Final[str] = "-thumbnail.webp"
|
|
||||||
ARCHIVE_SUFFIX: Final[str] = "-archive.pdf"
|
|
||||||
# Leave room for the longest derived suffix, which replaces the original's extension
|
|
||||||
MAX_BASE_NAME_BYTES: Final[int] = Document.MAX_PUBLIC_FILENAME_BYTES - max(
|
|
||||||
len(THUMBNAIL_SUFFIX),
|
|
||||||
len(ARCHIVE_SUFFIX),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def serialize_queryset_batched(
|
def serialize_queryset_batched(
|
||||||
queryset: "QuerySet[Any]",
|
queryset: "QuerySet[Any]",
|
||||||
@@ -522,10 +512,7 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
counter=filename_counter,
|
counter=filename_counter,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
base_name = document.get_public_filename(
|
base_name = document.get_public_filename(counter=filename_counter)
|
||||||
counter=filename_counter,
|
|
||||||
max_bytes=MAX_BASE_NAME_BYTES,
|
|
||||||
)
|
|
||||||
|
|
||||||
# The thumbnail and archive names are derived from the stem, so
|
# The thumbnail and archive names are derived from the stem, so
|
||||||
# uniqueness must hold without the original's extension
|
# uniqueness must hold without the original's extension
|
||||||
@@ -554,7 +541,7 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
document_dict[EXPORTER_FILE_NAME] = original_arc
|
document_dict[EXPORTER_FILE_NAME] = original_arc
|
||||||
|
|
||||||
if not self.no_thumbnail:
|
if not self.no_thumbnail:
|
||||||
thumbnail_name = base_name.parent / (base_name.stem + THUMBNAIL_SUFFIX)
|
thumbnail_name = base_name.parent / (base_name.stem + "-thumbnail.webp")
|
||||||
if self.use_folder_prefix:
|
if self.use_folder_prefix:
|
||||||
thumbnail_name = Path("thumbnails") / thumbnail_name
|
thumbnail_name = Path("thumbnails") / thumbnail_name
|
||||||
thumbnail_arc = thumbnail_name.as_posix()
|
thumbnail_arc = thumbnail_name.as_posix()
|
||||||
@@ -563,7 +550,7 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
thumbnail_arc = None
|
thumbnail_arc = None
|
||||||
|
|
||||||
if not self.no_archive and document.has_archive_version:
|
if not self.no_archive and document.has_archive_version:
|
||||||
archive_name = base_name.parent / (base_name.stem + ARCHIVE_SUFFIX)
|
archive_name = base_name.parent / (base_name.stem + "-archive.pdf")
|
||||||
if self.use_folder_prefix:
|
if self.use_folder_prefix:
|
||||||
archive_name = Path("archive") / archive_name
|
archive_name = Path("archive") / archive_name
|
||||||
archive_arc = archive_name.as_posix()
|
archive_arc = archive_name.as_posix()
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ def iter_manifest_records(path: Path) -> Generator[dict, None, None]:
|
|||||||
"""Yield records one at a time from a manifest JSON array via ijson."""
|
"""Yield records one at a time from a manifest JSON array via ijson."""
|
||||||
try:
|
try:
|
||||||
with path.open("rb") as f:
|
with path.open("rb") as f:
|
||||||
yield from ijson.items(f, "item", use_float=True)
|
yield from ijson.items(f, "item")
|
||||||
except ijson.JSONError as e:
|
except ijson.JSONError as e:
|
||||||
raise CommandError(f"Failed to parse manifest file {path}: {e}") from e
|
raise CommandError(f"Failed to parse manifest file {path}: {e}") from e
|
||||||
|
|
||||||
|
|||||||
+12
-23
@@ -157,8 +157,6 @@ class StoragePath(MatchingModel):
|
|||||||
|
|
||||||
class Document(SoftDeleteModel, ModelWithOwner): # type: ignore[django-manager-missing]
|
class Document(SoftDeleteModel, ModelWithOwner): # type: ignore[django-manager-missing]
|
||||||
MAX_STORED_FILENAME_LENGTH: Final[int] = 1024
|
MAX_STORED_FILENAME_LENGTH: Final[int] = 1024
|
||||||
# Per-component limit of common filesystems (ext4, XFS, btrfs, ZFS, APFS)
|
|
||||||
MAX_PUBLIC_FILENAME_BYTES: Final[int] = 255
|
|
||||||
|
|
||||||
correspondent = models.ForeignKey(
|
correspondent = models.ForeignKey(
|
||||||
Correspondent,
|
Correspondent,
|
||||||
@@ -486,37 +484,28 @@ class Document(SoftDeleteModel, ModelWithOwner): # type: ignore[django-manager-
|
|||||||
def archive_file(self):
|
def archive_file(self):
|
||||||
return Path(self.archive_path).open("rb")
|
return Path(self.archive_path).open("rb")
|
||||||
|
|
||||||
def get_public_filename(
|
def get_public_filename(self, *, archive=False, counter=0, suffix=None) -> str:
|
||||||
self,
|
|
||||||
*,
|
|
||||||
archive: bool = False,
|
|
||||||
counter: int = 0,
|
|
||||||
max_bytes: int = MAX_PUBLIC_FILENAME_BYTES,
|
|
||||||
) -> str:
|
|
||||||
"""
|
"""
|
||||||
Returns a sanitized filename for the document, not including any paths.
|
Returns a sanitized filename for the document, not including any paths.
|
||||||
|
|
||||||
The name fits in max_bytes (UTF-8). A long title is shortened before
|
|
||||||
the counter and extension are appended, because sanitize_filename
|
|
||||||
truncates from the end. The tail is cut only when max_bytes is
|
|
||||||
smaller than the tail itself.
|
|
||||||
"""
|
"""
|
||||||
# Root owns metadata for all versions
|
# Root owns metadata for all versions
|
||||||
context_document = (
|
context_document = (
|
||||||
self.root_document if self.root_document_id is not None else self
|
self.root_document if self.root_document_id is not None else self
|
||||||
)
|
)
|
||||||
|
result = str(context_document)
|
||||||
|
|
||||||
extension = ".pdf" if archive else self.file_type
|
if counter:
|
||||||
tail = f"_{counter:02}{extension}" if counter else extension
|
result += f"_{counter:02}"
|
||||||
|
|
||||||
head_bytes = max(0, max_bytes - len(tail.encode()))
|
if suffix:
|
||||||
head = str(context_document).encode()[:head_bytes].decode(errors="ignore")
|
result += suffix
|
||||||
|
|
||||||
return pathvalidate.sanitize_filename(
|
if archive:
|
||||||
head + tail,
|
result += ".pdf"
|
||||||
replacement_text="-",
|
else:
|
||||||
max_len=max_bytes,
|
result += self.file_type
|
||||||
)
|
|
||||||
|
return pathvalidate.sanitize_filename(result, replacement_text="-")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def file_type(self):
|
def file_type(self):
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ from guardian.core import ObjectPermissionChecker
|
|||||||
from guardian.models import GroupObjectPermission
|
from guardian.models import GroupObjectPermission
|
||||||
from guardian.models import UserObjectPermission
|
from guardian.models import UserObjectPermission
|
||||||
from guardian.shortcuts import assign_perm
|
from guardian.shortcuts import assign_perm
|
||||||
from guardian.shortcuts import get_objects_for_user
|
|
||||||
from guardian.shortcuts import get_users_with_perms
|
from guardian.shortcuts import get_users_with_perms
|
||||||
from guardian.shortcuts import remove_perm
|
from guardian.shortcuts import remove_perm
|
||||||
from rest_framework.permissions import BasePermission
|
from rest_framework.permissions import BasePermission
|
||||||
@@ -511,28 +510,6 @@ def restrict_queryset_to_visible(
|
|||||||
return queryset.filter(pk__in=permitted_object_ids(user, queryset.model, perm))
|
return queryset.filter(pk__in=permitted_object_ids(user, queryset.model, perm))
|
||||||
|
|
||||||
|
|
||||||
def user_is_active_superuser(user: User | None) -> bool:
|
|
||||||
"""
|
|
||||||
True only for an active, authenticated superuser.
|
|
||||||
"""
|
|
||||||
return user is not None and user_is_unrestricted(user)
|
|
||||||
|
|
||||||
|
|
||||||
def restrict_queryset_to_owner_visible(
|
|
||||||
queryset: QuerySet[ModelT],
|
|
||||||
user: User | None,
|
|
||||||
perm: str,
|
|
||||||
) -> QuerySet[ModelT]:
|
|
||||||
"""
|
|
||||||
Like ``restrict_queryset_to_visible``, but ``user=None`` sees only unowned
|
|
||||||
rows (``permitted_object_ids(None, ...)`` semantics) instead of every row.
|
|
||||||
See ``user_is_active_superuser``.
|
|
||||||
"""
|
|
||||||
if user_is_active_superuser(user):
|
|
||||||
return queryset
|
|
||||||
return queryset.filter(pk__in=permitted_object_ids(user, queryset.model, perm))
|
|
||||||
|
|
||||||
|
|
||||||
def permitted_document_ids(
|
def permitted_document_ids(
|
||||||
user: User | None,
|
user: User | None,
|
||||||
*,
|
*,
|
||||||
@@ -671,41 +648,6 @@ def annotate_document_count_for_related_queryset(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_objects_for_user_owner_aware(
|
|
||||||
user: User | None,
|
|
||||||
perms: str | list[str],
|
|
||||||
Model: Any,
|
|
||||||
*,
|
|
||||||
include_deleted: bool = False,
|
|
||||||
) -> QuerySet[Any]:
|
|
||||||
"""
|
|
||||||
Returns objects the user owns, are unowned, or has explicit perms.
|
|
||||||
When include_deleted is True, soft-deleted items are also included.
|
|
||||||
|
|
||||||
Legacy slow path (guardian-backed, O(n) style permission resolution).
|
|
||||||
Most queryset-filtering call sites have migrated onto
|
|
||||||
``PermittedObjectsFilter``/``permitted_object_ids()``, but this function
|
|
||||||
is kept because production callers still remain. Several callers remain
|
|
||||||
across ``documents/``, ``paperless_mail/``, and ``paperless_ai/`` --
|
|
||||||
grep for this function name before removing it.
|
|
||||||
"""
|
|
||||||
manager = (
|
|
||||||
Model.global_objects
|
|
||||||
if include_deleted and hasattr(Model, "global_objects")
|
|
||||||
else Model.objects
|
|
||||||
)
|
|
||||||
|
|
||||||
objects_owned = manager.filter(owner=user)
|
|
||||||
objects_unowned = manager.filter(owner__isnull=True)
|
|
||||||
objects_with_perms = get_objects_for_user(
|
|
||||||
user=user,
|
|
||||||
perms=perms,
|
|
||||||
klass=manager.all(),
|
|
||||||
accept_global_perms=False,
|
|
||||||
)
|
|
||||||
return objects_owned | objects_unowned | objects_with_perms
|
|
||||||
|
|
||||||
|
|
||||||
def has_perms_owner_aware(user, perms, obj):
|
def has_perms_owner_aware(user, perms, obj):
|
||||||
"""
|
"""
|
||||||
Legacy slow path (guardian-backed) single-object permission check.
|
Legacy slow path (guardian-backed) single-object permission check.
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ from documents.models import Workflow
|
|||||||
from documents.models import WorkflowAction
|
from documents.models import WorkflowAction
|
||||||
from documents.models import WorkflowRun
|
from documents.models import WorkflowRun
|
||||||
from documents.models import WorkflowTrigger
|
from documents.models import WorkflowTrigger
|
||||||
from documents.permissions import get_objects_for_user_owner_aware
|
from documents.permissions import restrict_queryset_to_visible
|
||||||
from documents.plugins.helpers import DocumentsStatusManager
|
from documents.plugins.helpers import DocumentsStatusManager
|
||||||
from documents.templating.utils import convert_format_str_to_template_format
|
from documents.templating.utils import convert_format_str_to_template_format
|
||||||
from documents.utils import compute_checksum
|
from documents.utils import compute_checksum
|
||||||
@@ -81,15 +81,11 @@ DRF_DATETIME_FIELD = serializers.DateTimeField()
|
|||||||
|
|
||||||
|
|
||||||
def add_inbox_tags(sender, document: Document, logging_group=None, **kwargs) -> None:
|
def add_inbox_tags(sender, document: Document, logging_group=None, **kwargs) -> None:
|
||||||
if document.owner is not None:
|
inbox_tags = restrict_queryset_to_visible(
|
||||||
tags = get_objects_for_user_owner_aware(
|
Tag.objects.filter(is_inbox_tag=True),
|
||||||
document.owner,
|
document.owner,
|
||||||
"documents.view_tag",
|
"view_tag",
|
||||||
Tag,
|
)
|
||||||
)
|
|
||||||
else:
|
|
||||||
tags = Tag.objects.all()
|
|
||||||
inbox_tags = tags.filter(is_inbox_tag=True)
|
|
||||||
document.add_nested_tags(inbox_tags)
|
document.add_nested_tags(inbox_tags)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2137,6 +2137,29 @@ class TestDocumentSearchApi(DirectoriesMixin, APITestCase):
|
|||||||
self.assertEqual(len(response.data["documents"]), 1)
|
self.assertEqual(len(response.data["documents"]), 1)
|
||||||
self.assertEqual(response.data["documents"][0]["id"], title_match.id)
|
self.assertEqual(response.data["documents"][0]["id"], title_match.id)
|
||||||
|
|
||||||
|
def test_global_search_returns_latest_version_content(self) -> None:
|
||||||
|
root = Document.objects.create(
|
||||||
|
title="bank statement",
|
||||||
|
content="superseded content",
|
||||||
|
checksum="GSV1",
|
||||||
|
pk=23,
|
||||||
|
)
|
||||||
|
Document.objects.create(
|
||||||
|
title="bank statement v2",
|
||||||
|
content="latest content",
|
||||||
|
checksum="GSV2",
|
||||||
|
pk=24,
|
||||||
|
root_document=root,
|
||||||
|
version_index=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.client.force_authenticate(self.user)
|
||||||
|
|
||||||
|
response = self.client.get("/api/search/?query=bank&db_only=true")
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
returned = {doc["id"]: doc["content"] for doc in response.data["documents"]}
|
||||||
|
self.assertEqual(returned.get(root.id), "latest content")
|
||||||
|
|
||||||
def test_global_search_filters_owned_mail_objects(self) -> None:
|
def test_global_search_filters_owned_mail_objects(self) -> None:
|
||||||
user1 = UserFactory(username="mail-search-user")
|
user1 = UserFactory(username="mail-search-user")
|
||||||
user2 = UserFactory(username="other-mail-search-user")
|
user2 = UserFactory(username="other-mail-search-user")
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from django.test import override_settings
|
|||||||
from django.test.utils import CaptureQueriesContext
|
from django.test.utils import CaptureQueriesContext
|
||||||
from pytest_django.fixtures import Settings
|
from pytest_django.fixtures import Settings
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
from sklearn.neural_network import MLPClassifier
|
|
||||||
|
|
||||||
from documents.classifier import ClassifierModelCorruptError
|
from documents.classifier import ClassifierModelCorruptError
|
||||||
from documents.classifier import DocumentClassifier
|
from documents.classifier import DocumentClassifier
|
||||||
@@ -1037,49 +1036,6 @@ def test_classifier_match_threshold_default() -> None:
|
|||||||
assert settings.CLASSIFIER_MATCH_THRESHOLD == 0.3
|
assert settings.CLASSIFIER_MATCH_THRESHOLD == 0.3
|
||||||
|
|
||||||
|
|
||||||
class TestPredictWithThresholdSingleClass:
|
|
||||||
@pytest.fixture
|
|
||||||
def single_class_model(self) -> tuple[MLPClassifier, np.ndarray]:
|
|
||||||
X = np.random.default_rng(0).random((2, 5))
|
|
||||||
return MLPClassifier(tol=0.01, random_state=0).fit(X, [3, 3]), X[:1]
|
|
||||||
|
|
||||||
def test_returns_only_class(
|
|
||||||
self,
|
|
||||||
single_class_model: tuple[MLPClassifier, np.ndarray],
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A classifier fitted on a single class (every document shares one label)
|
|
||||||
WHEN:
|
|
||||||
- A prediction is requested with the threshold disabled
|
|
||||||
THEN:
|
|
||||||
- No error is raised and the only class is returned
|
|
||||||
"""
|
|
||||||
classifier, X = single_class_model
|
|
||||||
|
|
||||||
assert _predict_with_threshold(classifier, X, threshold=0.0) == 3
|
|
||||||
|
|
||||||
def test_applies_threshold(
|
|
||||||
self,
|
|
||||||
single_class_model: tuple[MLPClassifier, np.ndarray],
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A classifier fitted on a single class
|
|
||||||
WHEN:
|
|
||||||
- A prediction is requested
|
|
||||||
THEN:
|
|
||||||
- The class's confidence is still compared against the threshold
|
|
||||||
"""
|
|
||||||
classifier, X = single_class_model
|
|
||||||
confidence = classifier.predict_proba(X)[0][0]
|
|
||||||
|
|
||||||
assert _predict_with_threshold(classifier, X, threshold=confidence - 0.01) == 3
|
|
||||||
assert (
|
|
||||||
_predict_with_threshold(classifier, X, threshold=confidence + 0.01) is None
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TestPreprocessContent:
|
class TestPreprocessContent:
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def samples(self) -> Path:
|
def samples(self) -> Path:
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ from documents.tests.utils import GetConsumerMixin
|
|||||||
from paperless_mail.models import MailRule
|
from paperless_mail.models import MailRule
|
||||||
from paperless_testing.assertions import FileSystemAssertsMixin
|
from paperless_testing.assertions import FileSystemAssertsMixin
|
||||||
from paperless_testing.dirs import DirectoriesMixin
|
from paperless_testing.dirs import DirectoriesMixin
|
||||||
from paperless_testing.factories import DocumentFactory
|
from paperless_testing.factories import TagFactory
|
||||||
from paperless_testing.factories import UserFactory
|
from paperless_testing.factories import UserFactory
|
||||||
from paperless_testing.fakes.progress import FakeProgressManager
|
from paperless_testing.fakes.progress import FakeProgressManager
|
||||||
from paperless_testing.permissions import grant_object
|
from paperless_testing.permissions import grant_object
|
||||||
@@ -516,6 +516,65 @@ class TestConsumer(
|
|||||||
self.assertTrue(group_checker.has_perm("view_document", document))
|
self.assertTrue(group_checker.has_perm("view_document", document))
|
||||||
self._assert_first_last_send_progress()
|
self._assert_first_last_send_progress()
|
||||||
|
|
||||||
|
def testInboxTagsScopedToOwner(self) -> None:
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- Inbox tags that are owned by the document owner, unowned, owned by
|
||||||
|
another user but shared with the document owner, and owned by
|
||||||
|
another user and not shared
|
||||||
|
- A non-inbox tag owned by the document owner
|
||||||
|
WHEN:
|
||||||
|
- A document is consumed with that owner
|
||||||
|
THEN:
|
||||||
|
- The document gets the owned, unowned and shared inbox tags only
|
||||||
|
"""
|
||||||
|
owner = UserFactory()
|
||||||
|
other = UserFactory()
|
||||||
|
owned = TagFactory(is_inbox_tag=True, owner=owner)
|
||||||
|
unowned = TagFactory(is_inbox_tag=True, owner=None)
|
||||||
|
shared = TagFactory(is_inbox_tag=True, owner=other)
|
||||||
|
grant_object(owner, shared, "view_tag")
|
||||||
|
TagFactory(is_inbox_tag=True, owner=other)
|
||||||
|
TagFactory(is_inbox_tag=False, owner=owner)
|
||||||
|
|
||||||
|
with self.get_consumer(
|
||||||
|
self.get_test_file(),
|
||||||
|
DocumentMetadataOverrides(owner_id=owner.pk),
|
||||||
|
) as consumer:
|
||||||
|
consumer.run()
|
||||||
|
|
||||||
|
document = Document.objects.first()
|
||||||
|
assert document is not None
|
||||||
|
|
||||||
|
self.assertCountEqual(document.tags.all(), [owned, unowned, shared])
|
||||||
|
self._assert_first_last_send_progress()
|
||||||
|
|
||||||
|
def testInboxTagsUnownedDocument(self) -> None:
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- Inbox tags owned by two different users, an unowned inbox tag and
|
||||||
|
a non-inbox tag
|
||||||
|
WHEN:
|
||||||
|
- A document is consumed with no owner
|
||||||
|
THEN:
|
||||||
|
- The document gets every inbox tag
|
||||||
|
"""
|
||||||
|
inbox_tags = [
|
||||||
|
TagFactory(is_inbox_tag=True, owner=UserFactory()),
|
||||||
|
TagFactory(is_inbox_tag=True, owner=UserFactory()),
|
||||||
|
TagFactory(is_inbox_tag=True, owner=None),
|
||||||
|
]
|
||||||
|
TagFactory(is_inbox_tag=False)
|
||||||
|
|
||||||
|
with self.get_consumer(self.get_test_file()) as consumer:
|
||||||
|
consumer.run()
|
||||||
|
|
||||||
|
document = Document.objects.first()
|
||||||
|
assert document is not None
|
||||||
|
|
||||||
|
self.assertCountEqual(document.tags.all(), inbox_tags)
|
||||||
|
self._assert_first_last_send_progress()
|
||||||
|
|
||||||
def testNotAFile(self) -> None:
|
def testNotAFile(self) -> None:
|
||||||
with self.assertRaisesMessage(ConsumerError, "File not found"):
|
with self.assertRaisesMessage(ConsumerError, "File not found"):
|
||||||
with self.get_consumer(Path("non-existing-file")) as consumer:
|
with self.get_consumer(Path("non-existing-file")) as consumer:
|
||||||
@@ -1685,32 +1744,6 @@ class TestMetadataOverrides(TestCase):
|
|||||||
self.assertEqual(base.actor_id, 2)
|
self.assertEqual(base.actor_id, 2)
|
||||||
self.assertEqual(base.version_label, "v2")
|
self.assertEqual(base.version_label, "v2")
|
||||||
|
|
||||||
def test_from_document_copies_user_and_group_grants_separately(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A document with view and change granted directly to one user and
|
|
||||||
to a group with another user as a member
|
|
||||||
WHEN:
|
|
||||||
- Overrides are built from the document
|
|
||||||
THEN:
|
|
||||||
- The user lists hold only the directly granted user
|
|
||||||
- The group lists hold the group
|
|
||||||
"""
|
|
||||||
direct_user = UserFactory()
|
|
||||||
group_member = UserFactory()
|
|
||||||
group = Group.objects.create(name="group")
|
|
||||||
group_member.groups.add(group)
|
|
||||||
document = DocumentFactory()
|
|
||||||
grant_object(direct_user, document, "view_document", "change_document")
|
|
||||||
grant_object(group, document, "view_document", "change_document")
|
|
||||||
|
|
||||||
overrides = DocumentMetadataOverrides.from_document(document)
|
|
||||||
|
|
||||||
self.assertEqual(overrides.view_users, [direct_user.pk])
|
|
||||||
self.assertEqual(overrides.change_users, [direct_user.pk])
|
|
||||||
self.assertEqual(overrides.view_groups, [group.pk])
|
|
||||||
self.assertEqual(overrides.change_groups, [group.pk])
|
|
||||||
|
|
||||||
|
|
||||||
class TestBarcodeApplyDetectedASN(TestCase):
|
class TestBarcodeApplyDetectedASN(TestCase):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -423,3 +423,35 @@ class TestTrashAndGlobalSearchEffectiveContentIsNeverPerInstance:
|
|||||||
[result] = [r for r in response.data["results"] if r["id"] == root.id]
|
[result] = [r for r in response.data["results"] if r["id"] == root.id]
|
||||||
assert result["content"] == "own-content"
|
assert result["content"] == "own-content"
|
||||||
assert _get_effective_content_fallback_queries(ctx) == []
|
assert _get_effective_content_fallback_queries(ctx) == []
|
||||||
|
|
||||||
|
def test_global_search_db_only_shows_latest_version_content_with_no_extra_query(
|
||||||
|
self,
|
||||||
|
admin_client: APIClient,
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- A root document, findable by title, whose own content differs
|
||||||
|
from its latest version's
|
||||||
|
WHEN:
|
||||||
|
- Using the global search endpoint's db_only mode
|
||||||
|
THEN:
|
||||||
|
- The response shows the latest version's content, resolved by
|
||||||
|
GlobalSearchView's own effective_content annotation
|
||||||
|
- There is no per-instance fallback query
|
||||||
|
"""
|
||||||
|
root = DocumentFactory(title="findme", content="own-content")
|
||||||
|
DocumentFactory(
|
||||||
|
root_document=root,
|
||||||
|
version_index=1,
|
||||||
|
content="version-content",
|
||||||
|
)
|
||||||
|
|
||||||
|
with CaptureQueriesContext(connection) as ctx:
|
||||||
|
response = admin_client.get(
|
||||||
|
"/api/search/?query=findme&db_only=true",
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == status.HTTP_200_OK
|
||||||
|
[result] = [d for d in response.data["documents"] if d["id"] == root.id]
|
||||||
|
assert result["content"] == "version-content"
|
||||||
|
assert _get_effective_content_fallback_queries(ctx) == []
|
||||||
@@ -4,16 +4,13 @@ from datetime import date
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
from faker import Faker
|
from faker import Faker
|
||||||
from pytest_mock import MockerFixture
|
|
||||||
|
|
||||||
from documents.models import Correspondent
|
from documents.models import Correspondent
|
||||||
from documents.models import Document
|
from documents.models import Document
|
||||||
from documents.tasks import empty_trash
|
from documents.tasks import empty_trash
|
||||||
from paperless_testing.factories import DocumentFactory
|
|
||||||
|
|
||||||
|
|
||||||
class TestDocument(TestCase):
|
class TestDocument(TestCase):
|
||||||
@@ -260,72 +257,3 @@ def test_suggestion_content() -> None:
|
|||||||
)
|
)
|
||||||
doc.content = content_over_limit
|
doc.content = content_over_limit
|
||||||
assert doc.suggestion_content == expected_cropped_content
|
assert doc.suggestion_content == expected_cropped_content
|
||||||
|
|
||||||
|
|
||||||
class TestPublicFilenameLength:
|
|
||||||
@pytest.fixture(autouse=True)
|
|
||||||
def _no_parser_registry(self, mocker: MockerFixture) -> None:
|
|
||||||
# The parser registry reads ApplicationConfiguration from the database
|
|
||||||
extensions = {"application/pdf": ".pdf", "image/jpeg": ".jpg"}
|
|
||||||
mocker.patch(
|
|
||||||
"documents.models.get_default_file_extension",
|
|
||||||
side_effect=extensions.__getitem__,
|
|
||||||
)
|
|
||||||
|
|
||||||
LIMIT = Document.MAX_PUBLIC_FILENAME_BYTES
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
("title", "archive", "counter", "max_bytes", "tail"),
|
|
||||||
[
|
|
||||||
pytest.param("a" * 300, False, 0, LIMIT, ".jpg", id="ascii"),
|
|
||||||
pytest.param("a" * 300, True, 0, LIMIT, ".pdf", id="archive"),
|
|
||||||
pytest.param("ä" * 200, False, 0, LIMIT, ".jpg", id="umlaut"),
|
|
||||||
pytest.param("ä" * 200, False, 1, LIMIT, "_01.jpg", id="count"),
|
|
||||||
pytest.param("a" * 300, False, 1, 100, "_01.jpg", id="max"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
def test_long_title_keeps_tail_within_limit(
|
|
||||||
self,
|
|
||||||
title: str,
|
|
||||||
*,
|
|
||||||
archive: bool,
|
|
||||||
counter: int,
|
|
||||||
max_bytes: int,
|
|
||||||
tail: str,
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A document whose title alone is longer than the byte limit
|
|
||||||
WHEN:
|
|
||||||
- The public file name is generated
|
|
||||||
THEN:
|
|
||||||
- The name ends with the counter and extension
|
|
||||||
- The name fits in the limit
|
|
||||||
"""
|
|
||||||
name = DocumentFactory.build(
|
|
||||||
title=title,
|
|
||||||
mime_type="image/jpeg",
|
|
||||||
).get_public_filename(
|
|
||||||
archive=archive,
|
|
||||||
counter=counter,
|
|
||||||
max_bytes=max_bytes,
|
|
||||||
)
|
|
||||||
|
|
||||||
assert name.endswith(tail)
|
|
||||||
assert len(name.encode()) <= max_bytes
|
|
||||||
|
|
||||||
def test_long_title_counters_give_distinct_names(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A document whose title alone is longer than the byte limit
|
|
||||||
WHEN:
|
|
||||||
- Public file names are generated with increasing counters
|
|
||||||
THEN:
|
|
||||||
- Each counter produces a distinct name
|
|
||||||
"""
|
|
||||||
doc = DocumentFactory.build(title="ä" * 200, mime_type="application/pdf")
|
|
||||||
|
|
||||||
names = [doc.get_public_filename(counter=counter) for counter in range(3)]
|
|
||||||
|
|
||||||
assert len(set(names)) == 3
|
|
||||||
assert all(len(n.encode()) <= self.LIMIT for n in names)
|
|
||||||
@@ -50,7 +50,6 @@ from documents.settings import EXPORTER_FILE_NAME
|
|||||||
from documents.settings import EXPORTER_SHARE_LINK_BUNDLE_NAME
|
from documents.settings import EXPORTER_SHARE_LINK_BUNDLE_NAME
|
||||||
from documents.settings import EXPORTER_THUMBNAIL_NAME
|
from documents.settings import EXPORTER_THUMBNAIL_NAME
|
||||||
from documents.tests.utils import SampleDirMixin
|
from documents.tests.utils import SampleDirMixin
|
||||||
from paperless.models import ApplicationConfiguration
|
|
||||||
from paperless_mail.models import MailAccount
|
from paperless_mail.models import MailAccount
|
||||||
from paperless_testing.assertions import FileSystemAssertsMixin
|
from paperless_testing.assertions import FileSystemAssertsMixin
|
||||||
from paperless_testing.dirs import DirectoriesMixin
|
from paperless_testing.dirs import DirectoriesMixin
|
||||||
@@ -1403,45 +1402,6 @@ class TestCryptExportImport(
|
|||||||
social_token = SocialToken.objects.first()
|
social_token = SocialToken.objects.first()
|
||||||
self.assertIsNotNone(social_token)
|
self.assertIsNotNone(social_token)
|
||||||
|
|
||||||
def test_import_passphrase_with_float_field(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- An application configuration with a float field set
|
|
||||||
WHEN:
|
|
||||||
- Export and import are run with a passphrase
|
|
||||||
THEN:
|
|
||||||
- The import succeeds and the float value is preserved
|
|
||||||
"""
|
|
||||||
ApplicationConfiguration.objects.update_or_create(
|
|
||||||
pk=1,
|
|
||||||
defaults={"rotate_pages_threshold": 12.5},
|
|
||||||
)
|
|
||||||
|
|
||||||
call_command(
|
|
||||||
"document_exporter",
|
|
||||||
"--no-progress-bar",
|
|
||||||
"--passphrase",
|
|
||||||
"securepassword",
|
|
||||||
self.target,
|
|
||||||
skip_checks=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
ApplicationConfiguration.objects.all().delete()
|
|
||||||
|
|
||||||
call_command(
|
|
||||||
"document_importer",
|
|
||||||
"--no-progress-bar",
|
|
||||||
"--passphrase",
|
|
||||||
"securepassword",
|
|
||||||
self.target,
|
|
||||||
skip_checks=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.assertEqual(
|
|
||||||
ApplicationConfiguration.objects.get().rotate_pages_threshold,
|
|
||||||
12.5,
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_import_crypt_no_passphrase(self) -> None:
|
def test_import_crypt_no_passphrase(self) -> None:
|
||||||
"""
|
"""
|
||||||
GIVEN:
|
GIVEN:
|
||||||
@@ -1577,70 +1537,3 @@ class TestExportDerivedFileNameCollisions:
|
|||||||
assert (
|
assert (
|
||||||
target / record[EXPORTER_ARCHIVE_NAME]
|
target / record[EXPORTER_ARCHIVE_NAME]
|
||||||
).read_text() == f"archive {pk}"
|
).read_text() == f"archive {pk}"
|
||||||
|
|
||||||
def test_long_titles_export_within_file_name_limit(
|
|
||||||
self,
|
|
||||||
paperless_dirs: PaperlessDirs,
|
|
||||||
tmp_path: Path,
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Two documents with the same created date and the same title
|
|
||||||
- The title alone is longer than 255 bytes and contains umlauts
|
|
||||||
WHEN:
|
|
||||||
- The exporter runs
|
|
||||||
THEN:
|
|
||||||
- The export finishes with distinct original, thumbnail and archive names
|
|
||||||
- Every exported file name fits in the byte limit
|
|
||||||
- Each exported file holds its own document's content
|
|
||||||
"""
|
|
||||||
for pk in (1, 2):
|
|
||||||
(paperless_dirs.originals_dir / f"{pk:07}.pdf").write_bytes(
|
|
||||||
f"original {pk}".encode(),
|
|
||||||
)
|
|
||||||
(paperless_dirs.archive_dir / f"{pk:07}.pdf").write_bytes(
|
|
||||||
f"archive {pk}".encode(),
|
|
||||||
)
|
|
||||||
(paperless_dirs.thumbnail_dir / f"{pk:07}.webp").write_bytes(
|
|
||||||
f"thumbnail {pk}".encode(),
|
|
||||||
)
|
|
||||||
DocumentFactory(
|
|
||||||
pk=pk,
|
|
||||||
title="Bestellbestätigung " * 15,
|
|
||||||
created=date(2026, 10, 15),
|
|
||||||
filename=f"{pk:07}.pdf",
|
|
||||||
archive_filename=f"{pk:07}.pdf",
|
|
||||||
mime_type="application/pdf",
|
|
||||||
)
|
|
||||||
|
|
||||||
target = tmp_path / "export"
|
|
||||||
target.mkdir()
|
|
||||||
call_command(
|
|
||||||
"document_exporter",
|
|
||||||
str(target),
|
|
||||||
"--no-progress-bar",
|
|
||||||
skip_checks=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
manifest = json.loads((target / "manifest.json").read_text())
|
|
||||||
records = {r["pk"]: r for r in manifest if r["model"] == "documents.document"}
|
|
||||||
|
|
||||||
for key in (
|
|
||||||
EXPORTER_FILE_NAME,
|
|
||||||
EXPORTER_THUMBNAIL_NAME,
|
|
||||||
EXPORTER_ARCHIVE_NAME,
|
|
||||||
):
|
|
||||||
assert records[1][key] != records[2][key]
|
|
||||||
|
|
||||||
for pk in (1, 2):
|
|
||||||
record = records[pk]
|
|
||||||
for key, content in (
|
|
||||||
(EXPORTER_FILE_NAME, f"original {pk}"),
|
|
||||||
(EXPORTER_THUMBNAIL_NAME, f"thumbnail {pk}"),
|
|
||||||
(EXPORTER_ARCHIVE_NAME, f"archive {pk}"),
|
|
||||||
):
|
|
||||||
assert (
|
|
||||||
len(Path(record[key]).name.encode())
|
|
||||||
<= Document.MAX_PUBLIC_FILENAME_BYTES
|
|
||||||
)
|
|
||||||
assert (target / record[key]).read_text() == content
|
|
||||||
@@ -7,7 +7,6 @@ from unittest import mock
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.test import override_settings
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
@@ -226,25 +225,6 @@ class ShareLinkBundleAPITests(DirectoriesMixin, APITestCase):
|
|||||||
self.assertEqual(response.status_code, status.HTTP_302_FOUND)
|
self.assertEqual(response.status_code, status.HTTP_302_FOUND)
|
||||||
self.assertIn("sharelink_notfound=1", response["Location"])
|
self.assertIn("sharelink_notfound=1", response["Location"])
|
||||||
|
|
||||||
@override_settings(LOGIN_URL="/paperless/accounts/login/")
|
|
||||||
def test_unknown_share_link_redirects_under_subpath(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Paperless is served under a subpath
|
|
||||||
WHEN:
|
|
||||||
- An unknown public share link is requested
|
|
||||||
THEN:
|
|
||||||
- The redirect to the login page keeps the subpath
|
|
||||||
"""
|
|
||||||
self.client.logout()
|
|
||||||
response = self.client.get("/share/unknownsharelink/")
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_302_FOUND)
|
|
||||||
self.assertEqual(
|
|
||||||
response["Location"],
|
|
||||||
"/paperless/accounts/login/?sharelink_notfound=1",
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_share_link_missing_file_redirects(self) -> None:
|
def test_share_link_missing_file_redirects(self) -> None:
|
||||||
"""
|
"""
|
||||||
GIVEN:
|
GIVEN:
|
||||||
|
|||||||
@@ -6176,50 +6176,6 @@ class TestApplyAISuggestionsWorkflowAction(
|
|||||||
|
|
||||||
self.assertEqual(self.doc.tags.count(), 0)
|
self.assertEqual(self.doc.tags.count(), 0)
|
||||||
|
|
||||||
def test_unowned_document_does_not_get_private_objects_by_id(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- An unowned document
|
|
||||||
- AI suggestions selecting another user's private tag and
|
|
||||||
correspondent by ID, plus an unowned tag
|
|
||||||
WHEN:
|
|
||||||
- The suggestions are applied
|
|
||||||
THEN:
|
|
||||||
- Only the unowned tag is assigned; an unowned document must not
|
|
||||||
be treated as unrestricted
|
|
||||||
"""
|
|
||||||
self.doc.owner = None
|
|
||||||
self.doc.save(update_fields=["owner"])
|
|
||||||
other = User.objects.create(username="someone-else")
|
|
||||||
private_tag = Tag.objects.create(name="Private Tag", owner=other)
|
|
||||||
public_tag = Tag.objects.create(name="Public Tag", owner=None)
|
|
||||||
private_correspondent = Correspondent.objects.create(
|
|
||||||
name="Private Correspondent",
|
|
||||||
owner=other,
|
|
||||||
)
|
|
||||||
action = self.make_action(
|
|
||||||
ai_suggestion_fields=[
|
|
||||||
WorkflowAction.AISuggestionField.TAGS,
|
|
||||||
WorkflowAction.AISuggestionField.CORRESPONDENT,
|
|
||||||
],
|
|
||||||
)
|
|
||||||
suggestions: ClassificationSuggestions = {
|
|
||||||
**SUGGESTIONS,
|
|
||||||
"tags": {
|
|
||||||
"existing_ids": [private_tag.pk, public_tag.pk],
|
|
||||||
"new_names": [],
|
|
||||||
},
|
|
||||||
"correspondents": {
|
|
||||||
"existing_ids": [private_correspondent.pk],
|
|
||||||
"new_names": [],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
self.apply(action, suggestions)
|
|
||||||
|
|
||||||
self.assertEqual(list(self.doc.tags.all()), [public_tag])
|
|
||||||
self.assertIsNone(self.doc.correspondent)
|
|
||||||
|
|
||||||
def test_unparsable_dates_are_skipped(self) -> None:
|
def test_unparsable_dates_are_skipped(self) -> None:
|
||||||
"""
|
"""
|
||||||
GIVEN:
|
GIVEN:
|
||||||
|
|||||||
+38
-43
@@ -175,12 +175,12 @@ from documents.permissions import ViewDocumentsPermissions
|
|||||||
from documents.permissions import annotate_document_count_by_ids
|
from documents.permissions import annotate_document_count_by_ids
|
||||||
from documents.permissions import annotate_document_count_for_related_queryset
|
from documents.permissions import annotate_document_count_for_related_queryset
|
||||||
from documents.permissions import get_document_count_filter_for_user
|
from documents.permissions import get_document_count_filter_for_user
|
||||||
from documents.permissions import get_objects_for_user_owner_aware
|
|
||||||
from documents.permissions import has_global_statistics_permission
|
from documents.permissions import has_global_statistics_permission
|
||||||
from documents.permissions import has_perms_owner_aware
|
from documents.permissions import has_perms_owner_aware
|
||||||
from documents.permissions import has_system_status_permission
|
from documents.permissions import has_system_status_permission
|
||||||
from documents.permissions import permitted_document_ids
|
from documents.permissions import permitted_document_ids
|
||||||
from documents.permissions import permitted_object_ids
|
from documents.permissions import permitted_object_ids
|
||||||
|
from documents.permissions import restrict_queryset_to_visible
|
||||||
from documents.permissions import set_permissions_for_objects
|
from documents.permissions import set_permissions_for_objects
|
||||||
from documents.permissions import user_is_unrestricted
|
from documents.permissions import user_is_unrestricted
|
||||||
from documents.plugins.date_parsing import get_date_parser
|
from documents.plugins.date_parsing import get_date_parser
|
||||||
@@ -3836,49 +3836,51 @@ class GlobalSearchView(PassUserMixin):
|
|||||||
if doc_id in docs_by_id
|
if doc_id in docs_by_id
|
||||||
][:OBJECT_LIMIT]
|
][:OBJECT_LIMIT]
|
||||||
saved_views = (
|
saved_views = (
|
||||||
get_objects_for_user_owner_aware(
|
restrict_queryset_to_visible(
|
||||||
|
SavedView.objects.filter(name__icontains=query),
|
||||||
request.user,
|
request.user,
|
||||||
"view_savedview",
|
"view_savedview",
|
||||||
SavedView,
|
)
|
||||||
).filter(name__icontains=query)
|
|
||||||
if request.user.has_perm("documents.view_savedview")
|
if request.user.has_perm("documents.view_savedview")
|
||||||
else []
|
else []
|
||||||
)
|
)
|
||||||
saved_views = saved_views[:OBJECT_LIMIT]
|
saved_views = saved_views[:OBJECT_LIMIT]
|
||||||
tags = (
|
tags = (
|
||||||
get_objects_for_user_owner_aware(request.user, "view_tag", Tag).filter(
|
restrict_queryset_to_visible(
|
||||||
name__icontains=query,
|
Tag.objects.filter(name__icontains=query),
|
||||||
|
request.user,
|
||||||
|
"view_tag",
|
||||||
)
|
)
|
||||||
if request.user.has_perm("documents.view_tag")
|
if request.user.has_perm("documents.view_tag")
|
||||||
else []
|
else []
|
||||||
)
|
)
|
||||||
tags = tags[:OBJECT_LIMIT]
|
tags = tags[:OBJECT_LIMIT]
|
||||||
correspondents = (
|
correspondents = (
|
||||||
get_objects_for_user_owner_aware(
|
restrict_queryset_to_visible(
|
||||||
|
Correspondent.objects.filter(name__icontains=query),
|
||||||
request.user,
|
request.user,
|
||||||
"view_correspondent",
|
"view_correspondent",
|
||||||
Correspondent,
|
)
|
||||||
).filter(name__icontains=query)
|
|
||||||
if request.user.has_perm("documents.view_correspondent")
|
if request.user.has_perm("documents.view_correspondent")
|
||||||
else []
|
else []
|
||||||
)
|
)
|
||||||
correspondents = correspondents[:OBJECT_LIMIT]
|
correspondents = correspondents[:OBJECT_LIMIT]
|
||||||
document_types = (
|
document_types = (
|
||||||
get_objects_for_user_owner_aware(
|
restrict_queryset_to_visible(
|
||||||
|
DocumentType.objects.filter(name__icontains=query),
|
||||||
request.user,
|
request.user,
|
||||||
"view_documenttype",
|
"view_documenttype",
|
||||||
DocumentType,
|
)
|
||||||
).filter(name__icontains=query)
|
|
||||||
if request.user.has_perm("documents.view_documenttype")
|
if request.user.has_perm("documents.view_documenttype")
|
||||||
else []
|
else []
|
||||||
)
|
)
|
||||||
document_types = document_types[:OBJECT_LIMIT]
|
document_types = document_types[:OBJECT_LIMIT]
|
||||||
storage_paths = (
|
storage_paths = (
|
||||||
get_objects_for_user_owner_aware(
|
restrict_queryset_to_visible(
|
||||||
|
StoragePath.objects.filter(name__icontains=query),
|
||||||
request.user,
|
request.user,
|
||||||
"view_storagepath",
|
"view_storagepath",
|
||||||
StoragePath,
|
)
|
||||||
).filter(name__icontains=query)
|
|
||||||
if request.user.has_perm("documents.view_storagepath")
|
if request.user.has_perm("documents.view_storagepath")
|
||||||
else []
|
else []
|
||||||
)
|
)
|
||||||
@@ -3896,21 +3898,21 @@ class GlobalSearchView(PassUserMixin):
|
|||||||
)
|
)
|
||||||
groups = groups[:OBJECT_LIMIT]
|
groups = groups[:OBJECT_LIMIT]
|
||||||
mail_rules = (
|
mail_rules = (
|
||||||
get_objects_for_user_owner_aware(
|
restrict_queryset_to_visible(
|
||||||
|
MailRule.objects.filter(name__icontains=query),
|
||||||
request.user,
|
request.user,
|
||||||
"view_mailrule",
|
"view_mailrule",
|
||||||
MailRule,
|
)
|
||||||
).filter(name__icontains=query)
|
|
||||||
if request.user.has_perm("paperless_mail.view_mailrule")
|
if request.user.has_perm("paperless_mail.view_mailrule")
|
||||||
else []
|
else []
|
||||||
)
|
)
|
||||||
mail_rules = mail_rules[:OBJECT_LIMIT]
|
mail_rules = mail_rules[:OBJECT_LIMIT]
|
||||||
mail_accounts = (
|
mail_accounts = (
|
||||||
get_objects_for_user_owner_aware(
|
restrict_queryset_to_visible(
|
||||||
|
MailAccount.objects.filter(name__icontains=query),
|
||||||
request.user,
|
request.user,
|
||||||
"view_mailaccount",
|
"view_mailaccount",
|
||||||
MailAccount,
|
)
|
||||||
).filter(name__icontains=query)
|
|
||||||
if request.user.has_perm("paperless_mail.view_mailaccount")
|
if request.user.has_perm("paperless_mail.view_mailaccount")
|
||||||
else []
|
else []
|
||||||
)
|
)
|
||||||
@@ -3932,12 +3934,7 @@ class GlobalSearchView(PassUserMixin):
|
|||||||
"request": request,
|
"request": request,
|
||||||
}
|
}
|
||||||
|
|
||||||
docs_serializer = DocumentSerializer(
|
docs_serializer = DocumentSerializer(docs, many=True, context=context)
|
||||||
docs,
|
|
||||||
many=True,
|
|
||||||
context=context,
|
|
||||||
fields=("id", "title", "created"),
|
|
||||||
)
|
|
||||||
saved_views_serializer = SavedViewSerializer(
|
saved_views_serializer = SavedViewSerializer(
|
||||||
saved_views,
|
saved_views,
|
||||||
many=True,
|
many=True,
|
||||||
@@ -4031,33 +4028,33 @@ class StatisticsView(GenericAPIView[Any]):
|
|||||||
tags = (
|
tags = (
|
||||||
Tag.objects.all()
|
Tag.objects.all()
|
||||||
if can_view_global_stats
|
if can_view_global_stats
|
||||||
else get_objects_for_user_owner_aware(user, "documents.view_tag", Tag)
|
else restrict_queryset_to_visible(Tag.objects.all(), user, "view_tag")
|
||||||
).only("id", "is_inbox_tag")
|
).only("id", "is_inbox_tag")
|
||||||
correspondent_count = (
|
correspondent_count = (
|
||||||
Correspondent.objects.count()
|
Correspondent.objects.count()
|
||||||
if can_view_global_stats
|
if can_view_global_stats
|
||||||
else get_objects_for_user_owner_aware(
|
else restrict_queryset_to_visible(
|
||||||
|
Correspondent.objects.all(),
|
||||||
user,
|
user,
|
||||||
"documents.view_correspondent",
|
"view_correspondent",
|
||||||
Correspondent,
|
|
||||||
).count()
|
).count()
|
||||||
)
|
)
|
||||||
document_type_count = (
|
document_type_count = (
|
||||||
DocumentType.objects.count()
|
DocumentType.objects.count()
|
||||||
if can_view_global_stats
|
if can_view_global_stats
|
||||||
else get_objects_for_user_owner_aware(
|
else restrict_queryset_to_visible(
|
||||||
|
DocumentType.objects.all(),
|
||||||
user,
|
user,
|
||||||
"documents.view_documenttype",
|
"view_documenttype",
|
||||||
DocumentType,
|
|
||||||
).count()
|
).count()
|
||||||
)
|
)
|
||||||
storage_path_count = (
|
storage_path_count = (
|
||||||
StoragePath.objects.count()
|
StoragePath.objects.count()
|
||||||
if can_view_global_stats
|
if can_view_global_stats
|
||||||
else get_objects_for_user_owner_aware(
|
else restrict_queryset_to_visible(
|
||||||
|
StoragePath.objects.all(),
|
||||||
user,
|
user,
|
||||||
"documents.view_storagepath",
|
"view_storagepath",
|
||||||
StoragePath,
|
|
||||||
).count()
|
).count()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -4916,7 +4913,7 @@ class SharedLinkView(View):
|
|||||||
share_link.expiration is not None
|
share_link.expiration is not None
|
||||||
and share_link.expiration < timezone.now()
|
and share_link.expiration < timezone.now()
|
||||||
):
|
):
|
||||||
return HttpResponseRedirect(f"{settings.LOGIN_URL}?sharelink_expired=1")
|
return HttpResponseRedirect("/accounts/login/?sharelink_expired=1")
|
||||||
try:
|
try:
|
||||||
return serve_file(
|
return serve_file(
|
||||||
doc=share_link.document,
|
doc=share_link.document,
|
||||||
@@ -4925,16 +4922,14 @@ class SharedLinkView(View):
|
|||||||
disposition="inline",
|
disposition="inline",
|
||||||
)
|
)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
return HttpResponseRedirect(
|
return HttpResponseRedirect("/accounts/login/?sharelink_notfound=1")
|
||||||
f"{settings.LOGIN_URL}?sharelink_notfound=1",
|
|
||||||
)
|
|
||||||
|
|
||||||
bundle = ShareLinkBundle.objects.filter(slug=slug).first()
|
bundle = ShareLinkBundle.objects.filter(slug=slug).first()
|
||||||
if bundle is None:
|
if bundle is None:
|
||||||
return HttpResponseRedirect(f"{settings.LOGIN_URL}?sharelink_notfound=1")
|
return HttpResponseRedirect("/accounts/login/?sharelink_notfound=1")
|
||||||
|
|
||||||
if bundle.expiration is not None and bundle.expiration < timezone.now():
|
if bundle.expiration is not None and bundle.expiration < timezone.now():
|
||||||
return HttpResponseRedirect(f"{settings.LOGIN_URL}?sharelink_expired=1")
|
return HttpResponseRedirect("/accounts/login/?sharelink_expired=1")
|
||||||
|
|
||||||
if bundle.status in {
|
if bundle.status in {
|
||||||
ShareLinkBundle.Status.PENDING,
|
ShareLinkBundle.Status.PENDING,
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Afrikaans\n"
|
"Language-Team: Afrikaans\n"
|
||||||
"Language: af_ZA\n"
|
"Language: af_ZA\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Ongeldige veranderlike bespeur."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Amharic\n"
|
"Language-Team: Amharic\n"
|
||||||
"Language: am_ET\n"
|
"Language: am_ET\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr ""
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Arabic\n"
|
"Language-Team: Arabic\n"
|
||||||
"Language: ar_SA\n"
|
"Language: ar_SA\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "اكتشاف متغير خاطئ."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "كخطوة أخيرة، يرجى ملء النموذج التالي:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Belarusian\n"
|
"Language-Team: Belarusian\n"
|
||||||
"Language: be_BY\n"
|
"Language: be_BY\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Выяўлена няправільная зменная."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Bulgarian\n"
|
"Language-Team: Bulgarian\n"
|
||||||
"Language: bg_BG\n"
|
"Language: bg_BG\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "стартиране на работните процеси"
|
msgstr "стартиране на работните процеси"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Засечена е невалидна променлива."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Като последна стъпка, моля, попълнете с
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Catalan\n"
|
"Language-Team: Catalan\n"
|
||||||
"Language: ca_ES\n"
|
"Language: ca_ES\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "flux corrents"
|
msgstr "flux corrents"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Permisos insuficients."
|
msgstr "Permisos insuficients."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Variable detectada invàlida."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Duplicat d'identificadors de documents no permès."
|
msgstr "Duplicat d'identificadors de documents no permès."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Documents no trobats: %(ids)s"
|
msgstr "Documents no trobats: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Com a pas final, completa el següent formulari:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Especifica només un dels següents valors: text, title_search, query o more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Invalid more_like_id"
|
msgstr "Invalid more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configuració AI invàlida."
|
msgstr "Configuració AI invàlida."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Especifica només un dels següents valors: text, title_search, query o more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Permisos insuficients per compartir document %(id)s."
|
msgstr "Permisos insuficients per compartir document %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paquet ja s'està processant."
|
msgstr "Paquet ja s'està processant."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "El paquet de link encarà s'està preparant. Prova de nou més tard."
|
msgstr "El paquet de link encarà s'està preparant. Prova de nou més tard."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "El paquet d'enllaç no està disponible."
|
msgstr "El paquet d'enllaç no està disponible."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Czech\n"
|
"Language-Team: Czech\n"
|
||||||
"Language: cs_CZ\n"
|
"Language: cs_CZ\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "spuštění pracovních postupů"
|
msgstr "spuštění pracovních postupů"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Nedostatečná oprávnění."
|
msgstr "Nedostatečná oprávnění."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Zjištěna neplatná proměnná."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Jako poslední krok vyplňte následující formulář:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Nedostatečná oprávnění ke sdílení dokumentu %(id)s."
|
msgstr "Nedostatečná oprávnění ke sdílení dokumentu %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Danish\n"
|
"Language-Team: Danish\n"
|
||||||
"Language: da_DK\n"
|
"Language: da_DK\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "workflow-kørsler"
|
msgstr "workflow-kørsler"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Ugyldig variabel fundet."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Som sidste trin, udfyld venligst flg. formular:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: German, Switzerland\n"
|
"Language-Team: German, Switzerland\n"
|
||||||
"Language: de_CH\n"
|
"Language: de_CH\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "Arbeitsablauf wird ausgeführt"
|
msgstr "Arbeitsablauf wird ausgeführt"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Unzureichende Berechtigungen."
|
msgstr "Unzureichende Berechtigungen."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Ungültige Variable erkannt."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Doppelte Dokumentbezeichner sind nicht erlaubt."
|
msgstr "Doppelte Dokumentbezeichner sind nicht erlaubt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumente nicht gefunden: %(ids)s"
|
msgstr "Dokumente nicht gefunden: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Geben Sie nur einen von text, title_search, query, oder more_like_id an."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Ungültige more_like_id"
|
msgstr "Ungültige more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Ungültige KI-Konfiguration."
|
msgstr "Ungültige KI-Konfiguration."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Geben Sie nur einen von text, title_search, query, oder more_like_id an."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Unzureichende Berechtigungen, um Dokument %(id)s zu teilen."
|
msgstr "Unzureichende Berechtigungen, um Dokument %(id)s zu teilen."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket wird bereits verarbeitet."
|
msgstr "Paket wird bereits verarbeitet."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Das Freigabelink-Paket wird noch vorbereitet. Bitte versuchen Sie es später erneut."
|
msgstr "Das Freigabelink-Paket wird noch vorbereitet. Bitte versuchen Sie es später erneut."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Das Freigabelink-Paket ist nicht verfügbar."
|
msgstr "Das Freigabelink-Paket ist nicht verfügbar."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"Language: de_DE\n"
|
"Language: de_DE\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "Arbeitsablauf wird ausgeführt"
|
msgstr "Arbeitsablauf wird ausgeführt"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Unzureichende Berechtigungen."
|
msgstr "Unzureichende Berechtigungen."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Ungültige Variable erkannt."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Doppelte Dokumentbezeichner sind nicht erlaubt."
|
msgstr "Doppelte Dokumentbezeichner sind nicht erlaubt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumente nicht gefunden: %(ids)s"
|
msgstr "Dokumente nicht gefunden: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Geben Sie nur einen von text, title_search, query, oder more_like_id an."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Ungültige more_like_id"
|
msgstr "Ungültige more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Ungültige KI-Konfiguration."
|
msgstr "Ungültige KI-Konfiguration."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Zeitüberschreitung bei der KI-Backendanfrage."
|
msgstr "Zeitüberschreitung bei der KI-Backendanfrage."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "Das KI-Backend hat die Anfrage abgelehnt. Details in den Protokollen."
|
msgstr "Das KI-Backend hat die Anfrage abgelehnt. Details in den Protokollen."
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Geben Sie nur einen von text, title_search, query, oder more_like_id an."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Unzureichende Berechtigungen, um Dokument %(id)s zu teilen."
|
msgstr "Unzureichende Berechtigungen, um Dokument %(id)s zu teilen."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket wird bereits verarbeitet."
|
msgstr "Paket wird bereits verarbeitet."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Das Freigabelink-Paket wird noch vorbereitet. Bitte versuchen Sie es später erneut."
|
msgstr "Das Freigabelink-Paket wird noch vorbereitet. Bitte versuchen Sie es später erneut."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Das Freigabelink-Paket ist nicht verfügbar."
|
msgstr "Das Freigabelink-Paket ist nicht verfügbar."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Greek\n"
|
"Language-Team: Greek\n"
|
||||||
"Language: el_GR\n"
|
"Language: el_GR\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "εκτελέσεις ροής εργασίας"
|
msgstr "εκτελέσεις ροής εργασίας"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Εντοπίστηκε μη έγκυρη μεταβλητή."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Ως τελικό βήμα, παρακαλούμε να συμπληρώ
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
"Language: es_ES\n"
|
"Language: es_ES\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "ejecuciones de flujo de trabajo"
|
msgstr "ejecuciones de flujo de trabajo"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Permisos insuficientes."
|
msgstr "Permisos insuficientes."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Variable inválida."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "No se permiten identificadores de documento duplicados."
|
msgstr "No se permiten identificadores de documento duplicados."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Documentos no encontrados: %(ids)s"
|
msgstr "Documentos no encontrados: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Como último paso, por favor complete el siguiente formulario:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Especifique solo uno entre text, title_search, query, o more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configuración de IA inválida."
|
msgstr "Configuración de IA inválida."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Especifique solo uno entre text, title_search, query, o more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Permisos insuficientes para compartir el documento %(id)s."
|
msgstr "Permisos insuficientes para compartir el documento %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "El paquete ya está siendo procesado."
|
msgstr "El paquete ya está siendo procesado."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "El paquete de enlace compartido aún está siendo preparado. Por favor, inténtalo de nuevo más tarde."
|
msgstr "El paquete de enlace compartido aún está siendo preparado. Por favor, inténtalo de nuevo más tarde."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "El paquete de enlace compartido no está disponible."
|
msgstr "El paquete de enlace compartido no está disponible."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Estonian\n"
|
"Language-Team: Estonian\n"
|
||||||
"Language: et_EE\n"
|
"Language: et_EE\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr ""
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Persian\n"
|
"Language-Team: Persian\n"
|
||||||
"Language: fa_IR\n"
|
"Language: fa_IR\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "گردش کار اجرا می شود"
|
msgstr "گردش کار اجرا می شود"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "متغیر نامعتبر شناسایی شده است."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr "به عنوان مرحله آخر ، لطفاً فرم زیر را تک
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Finnish\n"
|
"Language-Team: Finnish\n"
|
||||||
"Language: fi_FI\n"
|
"Language: fi_FI\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Virheellinen muuttuja havaittu."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: French\n"
|
"Language-Team: French\n"
|
||||||
"Language: fr_FR\n"
|
"Language: fr_FR\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "le flux de travail s'exécute"
|
msgstr "le flux de travail s'exécute"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Droits insuffisants."
|
msgstr "Droits insuffisants."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Variable invalide détectée."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Les identificateurs de document en double ne sont pas autorisés."
|
msgstr "Les identificateurs de document en double ne sont pas autorisés."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Documents introuvables : %(ids)s"
|
msgstr "Documents introuvables : %(ids)s"
|
||||||
@@ -1916,40 +1916,40 @@ msgstr "Pour finir, veuillez remplir le formulaire suivant :"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Spécifiez seulement un texte, titre, recherche ou more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "More_like_id invalide"
|
msgstr "More_like_id invalide"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configuration IA invalide."
|
msgstr "Configuration IA invalide."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "La requête d'arrière-plan IA a expiré."
|
msgstr "La requête d'arrière-plan IA a expiré."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Spécifiez seulement un texte, titre, recherche ou more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Droits d'accès insuffisant pour partager %(id)s document."
|
msgstr "Droits d'accès insuffisant pour partager %(id)s document."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Le paquet est déjà en cours de traitement."
|
msgstr "Le paquet est déjà en cours de traitement."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Le lot de liens de partage est en cours de préparation. Veuillez réessayer plus tard."
|
msgstr "Le lot de liens de partage est en cours de préparation. Veuillez réessayer plus tard."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Le lot de liens de partage n'est pas disponible."
|
msgstr "Le lot de liens de partage n'est pas disponible."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Hebrew\n"
|
"Language-Team: Hebrew\n"
|
||||||
"Language: he_IL\n"
|
"Language: he_IL\n"
|
||||||
@@ -1637,7 +1637,7 @@ msgid "workflow runs"
|
|||||||
msgstr "הרצות זרימת עבודה"
|
msgstr "הרצות זרימת עבודה"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "הרשאות אינן מספיקות."
|
msgstr "הרשאות אינן מספיקות."
|
||||||
@@ -1677,7 +1677,7 @@ msgstr "משתנה לא חוקי זוהה."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "מזהי מסמכים כפולים אינם מורשים."
|
msgstr "מזהי מסמכים כפולים אינם מורשים."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "מסמכים לא נמצאו: %(ids)s"
|
msgstr "מסמכים לא נמצאו: %(ids)s"
|
||||||
@@ -1918,40 +1918,40 @@ msgstr ": כצעד אחרון, אנא מלא את הטופס הבא:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "יש לציין רק אחד מהבאים: text, title_search, query או more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "מזהה more_like_id אינו תקין"
|
msgstr "מזהה more_like_id אינו תקין"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "הגדרות בינה מלאכותית שגויות."
|
msgstr "הגדרות בינה מלאכותית שגויות."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "יש לציין רק אחד מהבאים: text, title_search, query או more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "הרשאות לא מספיקות לשיתוף מסמך %(id)s."
|
msgstr "הרשאות לא מספיקות לשיתוף מסמך %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "החבילה (Bundle) כבר נמצאת בתהליך עיבוד."
|
msgstr "החבילה (Bundle) כבר נמצאת בתהליך עיבוד."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "חבילת קישור השיתוף עדיין בהכנה. נא לנסות שוב מאוחר יותר."
|
msgstr "חבילת קישור השיתוף עדיין בהכנה. נא לנסות שוב מאוחר יותר."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "חבילת קישור השיתוף אינה זמינה."
|
msgstr "חבילת קישור השיתוף אינה זמינה."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Hindi\n"
|
"Language-Team: Hindi\n"
|
||||||
"Language: hi_IN\n"
|
"Language: hi_IN\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr ""
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Croatian\n"
|
"Language-Team: Croatian\n"
|
||||||
"Language: hr_HR\n"
|
"Language: hr_HR\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "tijek rada pokrenut"
|
msgstr "tijek rada pokrenut"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Nedovoljne ovlasti."
|
msgstr "Nedovoljne ovlasti."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Otkrivena je nevaljana vrsta datoteke."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Duplicirani identifikatori dokumenata nisu dopušteni."
|
msgstr "Duplicirani identifikatori dokumenata nisu dopušteni."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumenti nisu pronađeni: %(ids)s"
|
msgstr "Dokumenti nisu pronađeni: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Kao posljednji korak ispunite sljedeći obrazac:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Navedite samo jedno od: text, title_search, query ili more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Nevažeći more_like_id"
|
msgstr "Nevažeći more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Nevažeća AI konfiguracija."
|
msgstr "Nevažeća AI konfiguracija."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Zahtjev prema AI pozadinskom sustavu je istekao."
|
msgstr "Zahtjev prema AI pozadinskom sustavu je istekao."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "AI pozadinski sustav je odbio zahtjev. Provjerite zapise (logs) za više detalja."
|
msgstr "AI pozadinski sustav je odbio zahtjev. Provjerite zapise (logs) za više detalja."
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Navedite samo jedno od: text, title_search, query ili more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Nedovoljne ovlasti za dijeljenje dokumenta %(id)s."
|
msgstr "Nedovoljne ovlasti za dijeljenje dokumenta %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket se već obrađuje."
|
msgstr "Paket se već obrađuje."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Paket linka za dijeljenje se još priprema. Pokušajte ponovo kasnije."
|
msgstr "Paket linka za dijeljenje se još priprema. Pokušajte ponovo kasnije."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Paket linka za dijeljenje nije dostupan."
|
msgstr "Paket linka za dijeljenje nije dostupan."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Hungarian\n"
|
"Language-Team: Hungarian\n"
|
||||||
"Language: hu_HU\n"
|
"Language: hu_HU\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "munkafolyamat futtatások"
|
msgstr "munkafolyamat futtatások"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Nincs jogosúltsága."
|
msgstr "Nincs jogosúltsága."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Érvénytelen változó észlelve."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "A dokumentumazonosítók duplikálása nem megengedett."
|
msgstr "A dokumentumazonosítók duplikálása nem megengedett."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumentumok nem találhatók: %(ids)s"
|
msgstr "Dokumentumok nem találhatók: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Utolsó lépésként kérjük válaszoljon az alábbi kérdésekre:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "A text, title_search, query, vagy more_like_id közül csak egyet adjon meg."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Érvénytelen more_like_id"
|
msgstr "Érvénytelen more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Érvénytelen MI konfiguráció."
|
msgstr "Érvénytelen MI konfiguráció."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "A text, title_search, query, vagy more_like_id közül csak egyet adjon meg."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Nincs megfelelő jogosultság a %(id)s dokumentum megosztásához."
|
msgstr "Nincs megfelelő jogosultság a %(id)s dokumentum megosztásához."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "A csomag feldolgozása már folyamatban van."
|
msgstr "A csomag feldolgozása már folyamatban van."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "A megosztási linkcsomag készítése folyamatban. Kérjük, próbálja meg később."
|
msgstr "A megosztási linkcsomag készítése folyamatban. Kérjük, próbálja meg később."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "A megosztási linkcsomag nem elérhető."
|
msgstr "A megosztási linkcsomag nem elérhető."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"Language: id_ID\n"
|
"Language: id_ID\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "daftar jalankan alur kerja"
|
msgstr "daftar jalankan alur kerja"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Izin tidak mencukupi"
|
msgstr "Izin tidak mencukupi"
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Variabel ilegal terdeteksi."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Penggunaan pengenal dokumen ganda tidak diperbolehkan."
|
msgstr "Penggunaan pengenal dokumen ganda tidak diperbolehkan."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumen tidak ditemukan: %(ids)s"
|
msgstr "Dokumen tidak ditemukan: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Sebagai langkah terakhir, mohon formulir berikut:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Izin tidak mencukupi untuk berbagi dokumen %(id)s"
|
msgstr "Izin tidak mencukupi untuk berbagi dokumen %(id)s"
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket sedang diproses."
|
msgstr "Paket sedang diproses."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Bundel tautan berbagi masih dalam proses persiapan. Silakan coba lagi nanti."
|
msgstr "Bundel tautan berbagi masih dalam proses persiapan. Silakan coba lagi nanti."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Bundel tautan berbagi tidak tersedia."
|
msgstr "Bundel tautan berbagi tidak tersedia."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Italian\n"
|
"Language-Team: Italian\n"
|
||||||
"Language: it_IT\n"
|
"Language: it_IT\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "esecuzioni del flusso di lavoro"
|
msgstr "esecuzioni del flusso di lavoro"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Autorizzazioni insufficienti."
|
msgstr "Autorizzazioni insufficienti."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Variabile non valida rilevata."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Non sono consentiti identificatori di documenti duplicati."
|
msgstr "Non sono consentiti identificatori di documenti duplicati."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Documenti non trovati: %(ids)s"
|
msgstr "Documenti non trovati: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Come ultimo passo, compila il seguente modulo:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ", "
|
msgstr ", "
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Specificare solo uno tra text, title_search, query o more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "more_like_id non valido"
|
msgstr "more_like_id non valido"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configurazione AI non valida."
|
msgstr "Configurazione AI non valida."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Richiesta di backend AI scaduta."
|
msgstr "Richiesta di backend AI scaduta."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "Il backend IA ha rifiutato la richiesta. Controlla i log per i dettagli."
|
msgstr "Il backend IA ha rifiutato la richiesta. Controlla i log per i dettagli."
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Specificare solo uno tra text, title_search, query o more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Autorizzazioni insufficienti per condividere il documento %(id)s."
|
msgstr "Autorizzazioni insufficienti per condividere il documento %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Il pacchetto è già in fase di elaborazione."
|
msgstr "Il pacchetto è già in fase di elaborazione."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Il pacchetto di link di condivisione è ancora in fase di preparazione. Riprova più tardi."
|
msgstr "Il pacchetto di link di condivisione è ancora in fase di preparazione. Riprova più tardi."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Il pacchetto di link di condivisione non è disponibile."
|
msgstr "Il pacchetto di link di condivisione non è disponibile."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-15 12:29\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Japanese\n"
|
"Language-Team: Japanese\n"
|
||||||
"Language: ja_JP\n"
|
"Language: ja_JP\n"
|
||||||
@@ -136,7 +136,7 @@ msgstr "タグ"
|
|||||||
|
|
||||||
#: documents/models.py:125
|
#: documents/models.py:125
|
||||||
msgid "Cannot set itself as parent."
|
msgid "Cannot set itself as parent."
|
||||||
msgstr "親として設定することはできません。"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:127
|
#: documents/models.py:127
|
||||||
msgid "Cannot set parent to a descendant."
|
msgid "Cannot set parent to a descendant."
|
||||||
@@ -249,23 +249,23 @@ msgstr "物理的なドキュメントアーカイブ内での、このドキュ
|
|||||||
|
|
||||||
#: documents/models.py:321
|
#: documents/models.py:321
|
||||||
msgid "root document for this version"
|
msgid "root document for this version"
|
||||||
msgstr "このバージョンのルートドキュメント"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:325
|
#: documents/models.py:325
|
||||||
msgid "version index"
|
msgid "version index"
|
||||||
msgstr "バージョンのインデックス"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:329
|
#: documents/models.py:329
|
||||||
msgid "Index of this version within the root document."
|
msgid "Index of this version within the root document."
|
||||||
msgstr "ルートドキュメント内における、このバージョンのインデックス"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:333
|
#: documents/models.py:333
|
||||||
msgid "version label"
|
msgid "version label"
|
||||||
msgstr "バージョンラベル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:337
|
#: documents/models.py:337
|
||||||
msgid "Optional short label for a document version."
|
msgid "Optional short label for a document version."
|
||||||
msgstr "ドキュメントバージョンの任意の短いラベル。"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:342 documents/models.py:961 documents/models.py:992
|
#: documents/models.py:342 documents/models.py:961 documents/models.py:992
|
||||||
#: documents/models.py:1096 documents/models.py:2126
|
#: documents/models.py:1096 documents/models.py:2126
|
||||||
@@ -282,119 +282,119 @@ msgstr "アーカイブ"
|
|||||||
|
|
||||||
#: documents/models.py:563
|
#: documents/models.py:563
|
||||||
msgid "Bank"
|
msgid "Bank"
|
||||||
msgstr "銀行"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:564
|
#: documents/models.py:564
|
||||||
msgid "Basket"
|
msgid "Basket"
|
||||||
msgstr "買い物かご"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:565
|
#: documents/models.py:565
|
||||||
msgid "Bell"
|
msgid "Bell"
|
||||||
msgstr "ベル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:566
|
#: documents/models.py:566
|
||||||
msgid "Bookmark"
|
msgid "Bookmark"
|
||||||
msgstr "ブックマーク"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:567
|
#: documents/models.py:567
|
||||||
msgid "Boxes"
|
msgid "Boxes"
|
||||||
msgstr "箱"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:568
|
#: documents/models.py:568
|
||||||
msgid "Briefcase"
|
msgid "Briefcase"
|
||||||
msgstr "ブリーフケース"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:569
|
#: documents/models.py:569
|
||||||
msgid "Building"
|
msgid "Building"
|
||||||
msgstr "建物"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:570
|
#: documents/models.py:570
|
||||||
msgid "Calculator"
|
msgid "Calculator"
|
||||||
msgstr "電卓"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:571
|
#: documents/models.py:571
|
||||||
msgid "Calendar"
|
msgid "Calendar"
|
||||||
msgstr "カレンダー"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:572
|
#: documents/models.py:572
|
||||||
msgid "Camera"
|
msgid "Camera"
|
||||||
msgstr "カメラ"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:573
|
#: documents/models.py:573
|
||||||
msgid "Checklist"
|
msgid "Checklist"
|
||||||
msgstr "チェックリスト"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:574
|
#: documents/models.py:574
|
||||||
msgid "Cash"
|
msgid "Cash"
|
||||||
msgstr "現金"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:575
|
#: documents/models.py:575
|
||||||
msgid "Chat"
|
msgid "Chat"
|
||||||
msgstr "チャット"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:576
|
#: documents/models.py:576
|
||||||
msgid "Check"
|
msgid "Check"
|
||||||
msgstr "確認"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:577
|
#: documents/models.py:577
|
||||||
msgid "Clipboard"
|
msgid "Clipboard"
|
||||||
msgstr "クリップボード"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:578
|
#: documents/models.py:578
|
||||||
msgid "Clock"
|
msgid "Clock"
|
||||||
msgstr "時計"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:579
|
#: documents/models.py:579
|
||||||
msgid "Credit card"
|
msgid "Credit card"
|
||||||
msgstr "クレジットカード"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:580
|
#: documents/models.py:580
|
||||||
msgid "Download"
|
msgid "Download"
|
||||||
msgstr "ダウンロード"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:581
|
#: documents/models.py:581
|
||||||
msgid "Envelope"
|
msgid "Envelope"
|
||||||
msgstr "封筒"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:582
|
#: documents/models.py:582
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr "警告"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:583
|
#: documents/models.py:583
|
||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "ファイル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:584
|
#: documents/models.py:584
|
||||||
msgid "Checked file"
|
msgid "Checked file"
|
||||||
msgstr "チェック済みファイル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:585
|
#: documents/models.py:585
|
||||||
msgid "Locked file"
|
msgid "Locked file"
|
||||||
msgstr "ロックされたファイル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:586
|
#: documents/models.py:586
|
||||||
msgid "Medical file"
|
msgid "Medical file"
|
||||||
msgstr "医療ファイル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:587
|
#: documents/models.py:587
|
||||||
msgid "Person file"
|
msgid "Person file"
|
||||||
msgstr "個人ファイル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:590
|
#: documents/models.py:590
|
||||||
msgid "Spreadsheet"
|
msgid "Spreadsheet"
|
||||||
msgstr "スプレッドシート"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:592
|
#: documents/models.py:592
|
||||||
msgid "Text file"
|
msgid "Text file"
|
||||||
msgstr "テキストファイル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:593
|
#: documents/models.py:593
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "ファイル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:594
|
#: documents/models.py:594
|
||||||
msgid "Folder"
|
msgid "Folder"
|
||||||
msgstr "フォルダー"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:595 paperless_mail/admin.py:58
|
#: documents/models.py:595 paperless_mail/admin.py:58
|
||||||
msgid "Filter"
|
msgid "Filter"
|
||||||
@@ -406,11 +406,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:597
|
#: documents/models.py:597
|
||||||
msgid "Globe"
|
msgid "Globe"
|
||||||
msgstr "地球儀"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:598
|
#: documents/models.py:598
|
||||||
msgid "Hash"
|
msgid "Hash"
|
||||||
msgstr "ハッシュ"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:599
|
#: documents/models.py:599
|
||||||
msgid "Heart"
|
msgid "Heart"
|
||||||
@@ -418,27 +418,27 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:600
|
#: documents/models.py:600
|
||||||
msgid "House"
|
msgid "House"
|
||||||
msgstr "家"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:601
|
#: documents/models.py:601
|
||||||
msgid "Inbox"
|
msgid "Inbox"
|
||||||
msgstr "受信トレイ"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:602
|
#: documents/models.py:602
|
||||||
msgid "Journals"
|
msgid "Journals"
|
||||||
msgstr "日記"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:603
|
#: documents/models.py:603
|
||||||
msgid "Task list"
|
msgid "Task list"
|
||||||
msgstr "タスクリスト"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:604
|
#: documents/models.py:604
|
||||||
msgid "Newspaper"
|
msgid "Newspaper"
|
||||||
msgstr "新聞"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:605
|
#: documents/models.py:605
|
||||||
msgid "Attachment"
|
msgid "Attachment"
|
||||||
msgstr "添付ファイル"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:606
|
#: documents/models.py:606
|
||||||
msgid "People"
|
msgid "People"
|
||||||
@@ -446,15 +446,15 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:607
|
#: documents/models.py:607
|
||||||
msgid "Person"
|
msgid "Person"
|
||||||
msgstr "人物"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:608
|
#: documents/models.py:608
|
||||||
msgid "Printer"
|
msgid "Printer"
|
||||||
msgstr "プリンター"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:609
|
#: documents/models.py:609
|
||||||
msgid "Receipt"
|
msgid "Receipt"
|
||||||
msgstr "領収書"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:610
|
#: documents/models.py:610
|
||||||
msgid "Safe"
|
msgid "Safe"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "ワークフローの実行"
|
msgstr "ワークフローの実行"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "無効な変数を検出しました"
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "最後のステップとして、以下のフォームに記入してく
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"Language: ko_KR\n"
|
"Language: ko_KR\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "워크플로우 실행"
|
msgstr "워크플로우 실행"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "잘못된 변수가 감지되었습니다."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "마지막 단계로 다음 양식을 작성해 주세요:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Luxembourgish\n"
|
"Language-Team: Luxembourgish\n"
|
||||||
"Language: lb_LU\n"
|
"Language: lb_LU\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Ongëlteg Zeechen detektéiert."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Lithuanian\n"
|
"Language-Team: Lithuanian\n"
|
||||||
"Language: lt_LT\n"
|
"Language: lt_LT\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr ""
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr "Galiausiai užpildykite šią formą:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Nepakanka leidimų bendrinti dokumentą %(id)s."
|
msgstr "Nepakanka leidimų bendrinti dokumentą %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Rinkinys jau apdorojamas."
|
msgstr "Rinkinys jau apdorojamas."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Bendrinimo nuorodų rinkinys vis dar ruošiamas. Bandykite dar kartą vėliau."
|
msgstr "Bendrinimo nuorodų rinkinys vis dar ruošiamas. Bandykite dar kartą vėliau."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Dalinimos nuorodų rinkinys yra nepasiekiamas."
|
msgstr "Dalinimos nuorodų rinkinys yra nepasiekiamas."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Latvian\n"
|
"Language-Team: Latvian\n"
|
||||||
"Language: lv_LV\n"
|
"Language: lv_LV\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr ""
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Macedonian\n"
|
"Language-Team: Macedonian\n"
|
||||||
"Language: mk_MK\n"
|
"Language: mk_MK\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr ""
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Malay\n"
|
"Language-Team: Malay\n"
|
||||||
"Language: ms_MY\n"
|
"Language: ms_MY\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr ""
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"Language: nl_NL\n"
|
"Language: nl_NL\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Ongeldige variabele ontdekt."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Vul als laatste stap het volgende formulier in:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Norwegian\n"
|
"Language-Team: Norwegian\n"
|
||||||
"Language: no_NO\n"
|
"Language: no_NO\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "workflow runs (NO)"
|
msgstr "workflow runs (NO)"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Utilstrekkelige tillatelser."
|
msgstr "Utilstrekkelige tillatelser."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Ugyldig variabel oppdaget."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Duplicate document identifiers are not allowed. (NO)"
|
msgstr "Duplicate document identifiers are not allowed. (NO)"
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Documents not found: %(ids)s (NO)"
|
msgstr "Documents not found: %(ids)s (NO)"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "As a final step, please complete the following form: (NO)"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Specify only one of text, title_search, query, or more_like_id. (NO)"
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Invalid more_like_id (NO)"
|
msgstr "Invalid more_like_id (NO)"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Invalid AI configuration. (NO)"
|
msgstr "Invalid AI configuration. (NO)"
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Forespørselen til KI-tjenesten fikk tidsavbrudd."
|
msgstr "Forespørselen til KI-tjenesten fikk tidsavbrudd."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Specify only one of text, title_search, query, or more_like_id. (NO)"
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Insufficient permissions to share document %(id)s. (NO)"
|
msgstr "Insufficient permissions to share document %(id)s. (NO)"
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Bundle is already being processed. (NO)"
|
msgstr "Bundle is already being processed. (NO)"
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "The share link bundle is still being prepared. Please try again later. (NO)"
|
msgstr "The share link bundle is still being prepared. Please try again later. (NO)"
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "The share link bundle is unavailable. (NO)"
|
msgstr "The share link bundle is unavailable. (NO)"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Polish\n"
|
"Language-Team: Polish\n"
|
||||||
"Language: pl_PL\n"
|
"Language: pl_PL\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "uruchomienia przepływu pracy"
|
msgstr "uruchomienia przepływu pracy"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Niewystarczające uprawnienia."
|
msgstr "Niewystarczające uprawnienia."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Wykryto nieprawidłową zmienną."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Nie dopuszcza się powielania identyfikatorów dokumentów."
|
msgstr "Nie dopuszcza się powielania identyfikatorów dokumentów."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Nie znaleziono dokumentów: %(ids)s"
|
msgstr "Nie znaleziono dokumentów: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Na koniec należy wypełnić poniższy formularz:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Nieprawidłowy more_like_id"
|
msgstr "Nieprawidłowy more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Brak uprawnień do udostępnienia dokumentu %(id)s."
|
msgstr "Brak uprawnień do udostępnienia dokumentu %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Pakiet jest już przetwarzany."
|
msgstr "Pakiet jest już przetwarzany."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Pakiet do udostępnienia jest nadal przygotowywany. Spróbuj ponownie później."
|
msgstr "Pakiet do udostępnienia jest nadal przygotowywany. Spróbuj ponownie później."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Pakiet do udostępnienia jest niedostępny."
|
msgstr "Pakiet do udostępnienia jest niedostępny."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Portuguese, Brazilian\n"
|
"Language-Team: Portuguese, Brazilian\n"
|
||||||
"Language: pt_BR\n"
|
"Language: pt_BR\n"
|
||||||
@@ -1637,7 +1637,7 @@ msgid "workflow runs"
|
|||||||
msgstr "execução de fluxo de trabalho"
|
msgstr "execução de fluxo de trabalho"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Permissões insuficientes."
|
msgstr "Permissões insuficientes."
|
||||||
@@ -1677,7 +1677,7 @@ msgstr "Variável inválida detectada."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Não são permitidos identificadores de documento duplicados."
|
msgstr "Não são permitidos identificadores de documento duplicados."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Documentos não encontrados: %(ids)s"
|
msgstr "Documentos não encontrados: %(ids)s"
|
||||||
@@ -1918,40 +1918,40 @@ msgstr "Como etapa final, por favor preencha o seguinte formulário:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Especifique apenas um text, title_search, consulta ou mais_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "more_like_id inválido"
|
msgstr "more_like_id inválido"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configuração de IA inválida."
|
msgstr "Configuração de IA inválida."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "A requisição backend da IA expirou."
|
msgstr "A requisição backend da IA expirou."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Especifique apenas um text, title_search, consulta ou mais_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Permissões insuficientes para compartilhar o documento %(id)s."
|
msgstr "Permissões insuficientes para compartilhar o documento %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Pacote já está sendo processado."
|
msgstr "Pacote já está sendo processado."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "O pacote de link de compartilhamento ainda está sendo preparado. Tente novamente mais tarde."
|
msgstr "O pacote de link de compartilhamento ainda está sendo preparado. Tente novamente mais tarde."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "O pacote de link de compartilhamento não está disponível."
|
msgstr "O pacote de link de compartilhamento não está disponível."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Portuguese\n"
|
"Language-Team: Portuguese\n"
|
||||||
"Language: pt_PT\n"
|
"Language: pt_PT\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Variável inválida detetada."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Romanian\n"
|
"Language-Team: Romanian\n"
|
||||||
"Language: ro_RO\n"
|
"Language: ro_RO\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "rulări flux de lucru"
|
msgstr "rulări flux de lucru"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Variabilă nevalidă detectată."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "În etapa finală, vă rugăm să completați următorul formular:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"Language: ru_RU\n"
|
"Language: ru_RU\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "запуски рабочего процесса"
|
msgstr "запуски рабочего процесса"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Недостаточно прав."
|
msgstr "Недостаточно прав."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Обнаружена неверная переменная."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Повторяющиеся идентификаторы документа не допускаются."
|
msgstr "Повторяющиеся идентификаторы документа не допускаются."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Документы не найдены: %(ids)s"
|
msgstr "Документы не найдены: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "На завершение, пожалуйста заполните сл
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ", "
|
msgstr ", "
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Укажите только одно: текст, title_search, query или more _like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Недопустимый more_like_id"
|
msgstr "Недопустимый more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Неверная конфигурация ИИ."
|
msgstr "Неверная конфигурация ИИ."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Таймаут запроса ИИ."
|
msgstr "Таймаут запроса ИИ."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "Движок ИИ отклонил запрос. Проверьте логи."
|
msgstr "Движок ИИ отклонил запрос. Проверьте логи."
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Укажите только одно: текст, title_search, query или more _like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Недостаточно прав для совместного доступа к документу %(id)s."
|
msgstr "Недостаточно прав для совместного доступа к документу %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Пакет уже обрабатывается."
|
msgstr "Пакет уже обрабатывается."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Набор ссылок все еще готовится. Пожалуйста, повторите попытку позже."
|
msgstr "Набор ссылок все еще готовится. Пожалуйста, повторите попытку позже."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Пакет общих ссылок недоступен."
|
msgstr "Пакет общих ссылок недоступен."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:40\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Slovak\n"
|
"Language-Team: Slovak\n"
|
||||||
"Language: sk_SK\n"
|
"Language: sk_SK\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "spustenia pracovných postupov"
|
msgstr "spustenia pracovných postupov"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Nedostatočné oprávnenia."
|
msgstr "Nedostatočné oprávnenia."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Zistená neplatná premenná."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Duplicitné identifikátory dokumentov nie sú povolené."
|
msgstr "Duplicitné identifikátory dokumentov nie sú povolené."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumenty sa nenašli: %(ids)s"
|
msgstr "Dokumenty sa nenašli: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Ako posledný krok vyplňte nasledujúci formulár:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Zadajte iba jednu z možností: text, title_search, query alebo more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Neplatné more_like_id"
|
msgstr "Neplatné more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Neplatná konfigurácia umelej inteligencie."
|
msgstr "Neplatná konfigurácia umelej inteligencie."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Vypršal časový limit požiadavky na backend umelej inteligencie."
|
msgstr "Vypršal časový limit požiadavky na backend umelej inteligencie."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "Backend umelej inteligencie zamietol požiadavku. Podrobnosti nájdete v záznamoch."
|
msgstr "Backend umelej inteligencie zamietol požiadavku. Podrobnosti nájdete v záznamoch."
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Zadajte iba jednu z možností: text, title_search, query alebo more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Nedostatočné oprávnenia na zdieľanie dokumentu %(id)s."
|
msgstr "Nedostatočné oprávnenia na zdieľanie dokumentu %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Balík sa už spracúva."
|
msgstr "Balík sa už spracúva."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Balík odkazov na zdieľanie sa stále pripravuje. Skúste to znova neskôr."
|
msgstr "Balík odkazov na zdieľanie sa stále pripravuje. Skúste to znova neskôr."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Balík odkazov na zdieľanie nie je k dispozícii."
|
msgstr "Balík odkazov na zdieľanie nie je k dispozícii."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Slovenian\n"
|
"Language-Team: Slovenian\n"
|
||||||
"Language: sl_SI\n"
|
"Language: sl_SI\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "poteka dela"
|
msgstr "poteka dela"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Nezadostna dovoljenja."
|
msgstr "Nezadostna dovoljenja."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Zaznani neveljavni znaki."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Podvojeni identifikatorji dokumentov niso dovoljeni."
|
msgstr "Podvojeni identifikatorji dokumentov niso dovoljeni."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumentov ni bilo mogoče najti: %(ids)s"
|
msgstr "Dokumentov ni bilo mogoče najti: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Kot zadnji korak vas prosimo, da izpolnite naslednji obrazec:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Navedite samo eno od naslednjih vrednosti: text, title_search, query ali more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Neveljaven more_like_id"
|
msgstr "Neveljaven more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Neveljavna konfiguracija umetne inteligence."
|
msgstr "Neveljavna konfiguracija umetne inteligence."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Časovna omejitev zahteve za umetno inteligenco je potekla."
|
msgstr "Časovna omejitev zahteve za umetno inteligenco je potekla."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "Zaledni sistem umetne inteligence je zavrnil zahtevo. Za podrobnosti preverite dnevnike."
|
msgstr "Zaledni sistem umetne inteligence je zavrnil zahtevo. Za podrobnosti preverite dnevnike."
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Navedite samo eno od naslednjih vrednosti: text, title_search, query ali more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Nezadostna dovoljenja za skupno rabo dokumenta %(id)s."
|
msgstr "Nezadostna dovoljenja za skupno rabo dokumenta %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket se že obdeluje."
|
msgstr "Paket se že obdeluje."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Paket povezav za deljenje je še vedno v pripravi. Poskusite znova pozneje."
|
msgstr "Paket povezav za deljenje je še vedno v pripravi. Poskusite znova pozneje."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Paket povezav za deljenje ni na voljo."
|
msgstr "Paket povezav za deljenje ni na voljo."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Albanian\n"
|
"Language-Team: Albanian\n"
|
||||||
"Language: sq_AL\n"
|
"Language: sq_AL\n"
|
||||||
@@ -482,7 +482,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:616
|
#: documents/models.py:616
|
||||||
msgid "Tag"
|
msgid "Tag"
|
||||||
msgstr "Etiketa"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:617 documents/models.py:632 documents/models.py:1804
|
#: documents/models.py:617 documents/models.py:632 documents/models.py:1804
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
@@ -494,15 +494,15 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:619
|
#: documents/models.py:619
|
||||||
msgid "Truck"
|
msgid "Truck"
|
||||||
msgstr "Kamion"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:620
|
#: documents/models.py:620
|
||||||
msgid "Barcode"
|
msgid "Barcode"
|
||||||
msgstr "Barkodi"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:621
|
#: documents/models.py:621
|
||||||
msgid "Wallet"
|
msgid "Wallet"
|
||||||
msgstr "Portofol"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:624
|
#: documents/models.py:624
|
||||||
msgid "Table"
|
msgid "Table"
|
||||||
@@ -562,7 +562,7 @@ msgstr "Faqet"
|
|||||||
|
|
||||||
#: documents/models.py:646
|
#: documents/models.py:646
|
||||||
msgid "icon"
|
msgid "icon"
|
||||||
msgstr "ikonë"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:653
|
#: documents/models.py:653
|
||||||
msgid "sort field"
|
msgid "sort field"
|
||||||
@@ -794,7 +794,7 @@ msgstr "kërkim i thjeshtë teksti"
|
|||||||
|
|
||||||
#: documents/models.py:742
|
#: documents/models.py:742
|
||||||
msgid "has duplicates"
|
msgid "has duplicates"
|
||||||
msgstr "ka dublikatë"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:752
|
#: documents/models.py:752
|
||||||
msgid "rule type"
|
msgid "rule type"
|
||||||
@@ -882,7 +882,7 @@ msgstr "Fshirje në masë"
|
|||||||
|
|
||||||
#: documents/models.py:807
|
#: documents/models.py:807
|
||||||
msgid "Apply AI Suggestions"
|
msgid "Apply AI Suggestions"
|
||||||
msgstr "Apliko sugjerimet e AI"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:816 documents/models.py:1468
|
#: documents/models.py:816 documents/models.py:1468
|
||||||
msgid "Scheduled"
|
msgid "Scheduled"
|
||||||
@@ -1006,23 +1006,23 @@ msgstr "shënime"
|
|||||||
|
|
||||||
#: documents/models.py:996
|
#: documents/models.py:996
|
||||||
msgid "page"
|
msgid "page"
|
||||||
msgstr "Faqe"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:997
|
#: documents/models.py:997
|
||||||
msgid "Page of the original file, starting at 1"
|
msgid "Page of the original file, starting at 1"
|
||||||
msgstr "Faqe e skedarit origjinal, duke filluar nga 1"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1052
|
#: documents/models.py:1052
|
||||||
msgid "format"
|
msgid "format"
|
||||||
msgstr "Format"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1056
|
#: documents/models.py:1056
|
||||||
msgid "document barcode"
|
msgid "document barcode"
|
||||||
msgstr "Dokumenti me barkod"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1057
|
#: documents/models.py:1057
|
||||||
msgid "document barcodes"
|
msgid "document barcodes"
|
||||||
msgstr "Kodi i barkodit në dokument"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1066
|
#: documents/models.py:1066
|
||||||
msgid "Original"
|
msgid "Original"
|
||||||
@@ -1404,23 +1404,23 @@ msgstr "Zhvendos në kosh"
|
|||||||
|
|
||||||
#: documents/models.py:1795
|
#: documents/models.py:1795
|
||||||
msgid "Remote OCR"
|
msgid "Remote OCR"
|
||||||
msgstr "OCR në distancë"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1799
|
#: documents/models.py:1799
|
||||||
msgid "Apply AI suggestions"
|
msgid "Apply AI suggestions"
|
||||||
msgstr "Apliko sugjerimet e IA-së"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1806
|
#: documents/models.py:1806
|
||||||
msgid "Document type"
|
msgid "Document type"
|
||||||
msgstr "Lloji i dokumentit"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1807
|
#: documents/models.py:1807
|
||||||
msgid "Storage path"
|
msgid "Storage path"
|
||||||
msgstr "Rruga e ruajtjes"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1808
|
#: documents/models.py:1808
|
||||||
msgid "Created date"
|
msgid "Created date"
|
||||||
msgstr "Data e krijimit"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1811
|
#: documents/models.py:1811
|
||||||
msgid "Workflow Action Type"
|
msgid "Workflow Action Type"
|
||||||
@@ -1573,27 +1573,27 @@ msgstr "Fjalëkalimet që provohen gjatë heqjes së mbrojtjes PDF. Ndaji me pre
|
|||||||
|
|
||||||
#: documents/models.py:2048
|
#: documents/models.py:2048
|
||||||
msgid "AI suggestion fields"
|
msgid "AI suggestion fields"
|
||||||
msgstr "Fushat e sugjerimeve të AI"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:2052
|
#: documents/models.py:2052
|
||||||
msgid "Which of the AI-suggested fields to apply to the document."
|
msgid "Which of the AI-suggested fields to apply to the document."
|
||||||
msgstr "Cilat nga fushat e sugjeruara nga AI t'i aplikoni në dokument."
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:2057
|
#: documents/models.py:2057
|
||||||
msgid "create missing objects"
|
msgid "create missing objects"
|
||||||
msgstr "krijo objektet e munguara"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:2060
|
#: documents/models.py:2060
|
||||||
msgid "Create suggested tags, correspondents, document types and storage paths that do not already exist instead of skipping them."
|
msgid "Create suggested tags, correspondents, document types and storage paths that do not already exist instead of skipping them."
|
||||||
msgstr "Krijoni etiketa të sugjeruara, korrespondentë, lloje dokumentesh dhe shtigje ruajtjeje që nuk ekzistojnë ende, në vend që t'i anashkaloni."
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:2066
|
#: documents/models.py:2066
|
||||||
msgid "overwrite existing values"
|
msgid "overwrite existing values"
|
||||||
msgstr "mbishkruaj vlera ekzistuese"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:2069
|
#: documents/models.py:2069
|
||||||
msgid "Apply suggestions even if the document already has a value for that field. Tags are always added to, never replaced."
|
msgid "Apply suggestions even if the document already has a value for that field. Tags are always added to, never replaced."
|
||||||
msgstr "Zbato sugjerimet edhe nëse dokumenti tashmë ka një vlerë për atë fushë. Etiketat gjithmonë shtohen, kurrë nuk zëvendësohen."
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:2075
|
#: documents/models.py:2075
|
||||||
msgid "workflow action"
|
msgid "workflow action"
|
||||||
@@ -1605,7 +1605,7 @@ msgstr "veprime rrjedhe pune"
|
|||||||
|
|
||||||
#: documents/models.py:2091
|
#: documents/models.py:2091
|
||||||
msgid "triggers"
|
msgid "triggers"
|
||||||
msgstr "shkaktarë"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:2098
|
#: documents/models.py:2098
|
||||||
msgid "actions"
|
msgid "actions"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "ekzekutime rrjedhash pune"
|
msgstr "ekzekutime rrjedhash pune"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Leje të pamjaftueshme."
|
msgstr "Leje të pamjaftueshme."
|
||||||
@@ -1662,7 +1662,7 @@ msgstr "Fusha e personalizuar me ID %(id)s nuk ekziston"
|
|||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr "Fushat e personalizuara duhet të jenë listë numrash të plotë ose objekt që lidh ID-të me vlerat"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2442
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
@@ -1676,14 +1676,14 @@ msgstr "U zbulua variabël e pavlefshme."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Identifikuesit dublikatë të dokumenteve nuk lejohen."
|
msgstr "Identifikuesit dublikatë të dokumenteve nuk lejohen."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumentet nuk u gjetën: %(ids)s"
|
msgstr "Dokumentet nuk u gjetën: %(ids)s"
|
||||||
|
|
||||||
#: documents/templates/account/account_inactive.html:5
|
#: documents/templates/account/account_inactive.html:5
|
||||||
msgid "Paperless-ngx account inactive"
|
msgid "Paperless-ngx account inactive"
|
||||||
msgstr "Llogaria Paperless-ngx është joaktive."
|
msgstr ""
|
||||||
|
|
||||||
#: documents/templates/account/account_inactive.html:9
|
#: documents/templates/account/account_inactive.html:9
|
||||||
msgid "Account inactive."
|
msgid "Account inactive."
|
||||||
@@ -1807,7 +1807,7 @@ msgstr "Ndrysho fjalëkalimin tim"
|
|||||||
|
|
||||||
#: documents/templates/account/password_reset_from_key_done.html:5
|
#: documents/templates/account/password_reset_from_key_done.html:5
|
||||||
msgid "Paperless-ngx reset password complete"
|
msgid "Paperless-ngx reset password complete"
|
||||||
msgstr "Rivendosja e fjalëkalimit për Paperless-ngx përfundoi me sukses."
|
msgstr ""
|
||||||
|
|
||||||
#: documents/templates/account/password_reset_from_key_done.html:9
|
#: documents/templates/account/password_reset_from_key_done.html:9
|
||||||
msgid "Password reset complete."
|
msgid "Password reset complete."
|
||||||
@@ -1881,20 +1881,20 @@ msgstr "Lidhja e ndarjes ka skaduar."
|
|||||||
#: documents/templates/socialaccount/authentication_error.html:5
|
#: documents/templates/socialaccount/authentication_error.html:5
|
||||||
#: documents/templates/socialaccount/login.html:5
|
#: documents/templates/socialaccount/login.html:5
|
||||||
msgid "Paperless-ngx social account sign in"
|
msgid "Paperless-ngx social account sign in"
|
||||||
msgstr "Hyrje në llogarinë sociale të Paperless-ngx"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/templates/socialaccount/authentication_error.html:10
|
#: documents/templates/socialaccount/authentication_error.html:10
|
||||||
msgid "An error occurred while attempting to login via your social network account. Back to the"
|
msgid "An error occurred while attempting to login via your social network account. Back to the"
|
||||||
msgstr "Ndodhi një gabim gjatë përpjekjes për t'u identifikuar përmes llogarisë tuaj të rrjetit social. Kthehu tek"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/templates/socialaccount/authentication_error.html:10
|
#: documents/templates/socialaccount/authentication_error.html:10
|
||||||
msgid "login page"
|
msgid "login page"
|
||||||
msgstr "faqja e hyrjes"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/templates/socialaccount/login.html:11
|
#: documents/templates/socialaccount/login.html:11
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "You are about to connect a new third-party account from %(provider)s."
|
msgid "You are about to connect a new third-party account from %(provider)s."
|
||||||
msgstr "Jeni duke u lidhur me një llogari të re të palës së tretë nga %(provider)s."
|
msgstr ""
|
||||||
|
|
||||||
#: documents/templates/socialaccount/login.html:15
|
#: documents/templates/socialaccount/login.html:15
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
@@ -1915,64 +1915,64 @@ msgstr "Si hap i fundit, ju lutemi plotësoni formularin e mëposhtëm:"
|
|||||||
|
|
||||||
#: documents/validators.py:36
|
#: documents/validators.py:36
|
||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr " ,"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Specifikoni vetëm njërën prej: text, title_search, query, ose more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "ID e pavlefshme e \"më shumë ngjashmëri\""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Konfigurim AI i pavlefshëm."
|
msgstr "Konfigurim AI i pavlefshëm."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Kërkesa në backend-in e AI-së ka skaduar kohën."
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "Backend-i i AI-së refuzoi kërkesën. Kontrolloni regjistrimet për detaje."
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Leje të pamjaftueshme për të ndarë dokumentin %(id)s."
|
msgstr "Leje të pamjaftueshme për të ndarë dokumentin %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paketa po përpunohet tashmë."
|
msgstr "Paketa po përpunohet tashmë."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Paketa e lidhjes së ndarjes ende po përgatitet. Ju lutemi provoni përsëri më vonë."
|
msgstr "Paketa e lidhjes së ndarjes ende po përgatitet. Ju lutemi provoni përsëri më vonë."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Paketa e lidhjes së ndarjes nuk është e disponueshme."
|
msgstr "Paketa e lidhjes së ndarjes nuk është e disponueshme."
|
||||||
|
|
||||||
#: paperless/apps.py:11
|
#: paperless/apps.py:11
|
||||||
msgid "Paperless"
|
msgid "Paperless"
|
||||||
msgstr "Paperless"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:26
|
#: paperless/models.py:26
|
||||||
msgid "pdf"
|
msgid "pdf"
|
||||||
msgstr "pdf"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:27
|
#: paperless/models.py:27
|
||||||
msgid "pdfa"
|
msgid "pdfa"
|
||||||
msgstr "pdfa"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:28
|
#: paperless/models.py:28
|
||||||
msgid "pdfa-1"
|
msgid "pdfa-1"
|
||||||
msgstr "pdfa-1"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:29
|
#: paperless/models.py:29
|
||||||
msgid "pdfa-2"
|
msgid "pdfa-2"
|
||||||
msgstr "pdfa-2"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:30
|
#: paperless/models.py:30
|
||||||
msgid "pdfa-3"
|
msgid "pdfa-3"
|
||||||
@@ -2004,11 +2004,11 @@ msgstr "kurrë"
|
|||||||
|
|
||||||
#: paperless/models.py:60
|
#: paperless/models.py:60
|
||||||
msgid "clean"
|
msgid "clean"
|
||||||
msgstr "pastro"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:61
|
#: paperless/models.py:61
|
||||||
msgid "clean-final"
|
msgid "clean-final"
|
||||||
msgstr "versioni përfundimtar i pastruar"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:62
|
#: paperless/models.py:62
|
||||||
msgid "none"
|
msgid "none"
|
||||||
@@ -2016,7 +2016,7 @@ msgstr "asnjë"
|
|||||||
|
|
||||||
#: paperless/models.py:70
|
#: paperless/models.py:70
|
||||||
msgid "LeaveColorUnchanged"
|
msgid "LeaveColorUnchanged"
|
||||||
msgstr "LëreNgjyrënTëPandryshuar"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:71
|
#: paperless/models.py:71
|
||||||
msgid "RGB"
|
msgid "RGB"
|
||||||
@@ -2024,7 +2024,7 @@ msgstr "RGB"
|
|||||||
|
|
||||||
#: paperless/models.py:72
|
#: paperless/models.py:72
|
||||||
msgid "UseDeviceIndependentColor"
|
msgid "UseDeviceIndependentColor"
|
||||||
msgstr "PërdorNgjyrën e Pavarur nga Pajisjet"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:73
|
#: paperless/models.py:73
|
||||||
msgid "Gray"
|
msgid "Gray"
|
||||||
@@ -2036,31 +2036,31 @@ msgstr "CMYK"
|
|||||||
|
|
||||||
#: paperless/models.py:82
|
#: paperless/models.py:82
|
||||||
msgid "Azure AI Document Intelligence"
|
msgid "Azure AI Document Intelligence"
|
||||||
msgstr "Inteligjenca e Dokumenteve Azure AI"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:90
|
#: paperless/models.py:90
|
||||||
msgid "All supported documents"
|
msgid "All supported documents"
|
||||||
msgstr "Të gjitha dokumentet e mbështetura"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:91
|
#: paperless/models.py:91
|
||||||
msgid "Only when a workflow enables it"
|
msgid "Only when a workflow enables it"
|
||||||
msgstr "Vetëm kur një rrjedhë pune e lejon"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:95 paperless/models.py:105
|
#: paperless/models.py:95 paperless/models.py:105
|
||||||
msgid "OpenAI-compatible"
|
msgid "OpenAI-compatible"
|
||||||
msgstr "E pajtueshme me OpenAI"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:96
|
#: paperless/models.py:96
|
||||||
msgid "Huggingface"
|
msgid "Huggingface"
|
||||||
msgstr "Huggingface"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:97 paperless/models.py:106
|
#: paperless/models.py:97 paperless/models.py:106
|
||||||
msgid "Ollama"
|
msgid "Ollama"
|
||||||
msgstr "Ollama"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:115
|
#: paperless/models.py:115
|
||||||
msgid "Sets the output PDF type"
|
msgid "Sets the output PDF type"
|
||||||
msgstr "Cakton llojin e PDF-së së daljes"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:127
|
#: paperless/models.py:127
|
||||||
msgid "Do OCR from page 1 to this value"
|
msgid "Do OCR from page 1 to this value"
|
||||||
@@ -2096,7 +2096,7 @@ msgstr "Aktivizon rrotullimin e faqeve"
|
|||||||
|
|
||||||
#: paperless/models.py:178
|
#: paperless/models.py:178
|
||||||
msgid "Sets the threshold for rotation of pages"
|
msgid "Sets the threshold for rotation of pages"
|
||||||
msgstr "Vendos pragun për rrotullimin e faqeve"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:184
|
#: paperless/models.py:184
|
||||||
msgid "Sets the maximum image size for decompression"
|
msgid "Sets the maximum image size for decompression"
|
||||||
@@ -2104,11 +2104,11 @@ msgstr "Cakton madhësinë maksimale të figurës për dekompresim"
|
|||||||
|
|
||||||
#: paperless/models.py:190
|
#: paperless/models.py:190
|
||||||
msgid "Sets the Ghostscript color conversion strategy"
|
msgid "Sets the Ghostscript color conversion strategy"
|
||||||
msgstr "Përcakton strategjinë e konvertimit të ngjyrave për Ghostscript"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:198
|
#: paperless/models.py:198
|
||||||
msgid "Adds additional user arguments for OCRMyPDF"
|
msgid "Adds additional user arguments for OCRMyPDF"
|
||||||
msgstr "Shton argumente shtesë të përdoruesit për OCRMyPDF"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:207
|
#: paperless/models.py:207
|
||||||
msgid "Application title"
|
msgid "Application title"
|
||||||
@@ -2120,7 +2120,7 @@ msgstr "Logoja e aplikacionit"
|
|||||||
|
|
||||||
#: paperless/models.py:229
|
#: paperless/models.py:229
|
||||||
msgid "Enables barcode scanning"
|
msgid "Enables barcode scanning"
|
||||||
msgstr "Mundëson skanimin e kodeve të vijëzuara"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:235
|
#: paperless/models.py:235
|
||||||
msgid "Enables barcode TIFF support"
|
msgid "Enables barcode TIFF support"
|
||||||
@@ -2132,19 +2132,19 @@ msgstr "Cakton vargun e barkodit"
|
|||||||
|
|
||||||
#: paperless/models.py:249
|
#: paperless/models.py:249
|
||||||
msgid "Retains split pages"
|
msgid "Retains split pages"
|
||||||
msgstr "Ruan faqet e ndara"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:255
|
#: paperless/models.py:255
|
||||||
msgid "Enables ASN barcode"
|
msgid "Enables ASN barcode"
|
||||||
msgstr "Aktivizon barkodin ASN"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:261
|
#: paperless/models.py:261
|
||||||
msgid "Sets the ASN barcode prefix"
|
msgid "Sets the ASN barcode prefix"
|
||||||
msgstr "Vendos prefiksin e barkodit ASN"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:269
|
#: paperless/models.py:269
|
||||||
msgid "Sets the barcode upscale factor"
|
msgid "Sets the barcode upscale factor"
|
||||||
msgstr "Vendos faktorin e zmadhimit të barkodit"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:276
|
#: paperless/models.py:276
|
||||||
msgid "Sets the barcode DPI"
|
msgid "Sets the barcode DPI"
|
||||||
@@ -2152,11 +2152,11 @@ msgstr "Cakton DPI-në e barkodit"
|
|||||||
|
|
||||||
#: paperless/models.py:283
|
#: paperless/models.py:283
|
||||||
msgid "Sets the maximum pages for barcode"
|
msgid "Sets the maximum pages for barcode"
|
||||||
msgstr "Vendos numrin maksimal të faqeve për barkodin"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:290
|
#: paperless/models.py:290
|
||||||
msgid "Enables tag barcode"
|
msgid "Enables tag barcode"
|
||||||
msgstr "Aktivizon barkodin e etiketës"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:296
|
#: paperless/models.py:296
|
||||||
msgid "Sets the tag barcode mapping"
|
msgid "Sets the tag barcode mapping"
|
||||||
@@ -2168,23 +2168,23 @@ msgstr "Mundëson ndarjen bazuar në barkodet e etiketave"
|
|||||||
|
|
||||||
#: paperless/models.py:308
|
#: paperless/models.py:308
|
||||||
msgid "Stores the values of detected barcodes"
|
msgid "Stores the values of detected barcodes"
|
||||||
msgstr "Ruan vlerat e barkodeve të zbuluar"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:318
|
#: paperless/models.py:318
|
||||||
msgid "Sets the remote OCR engine"
|
msgid "Sets the remote OCR engine"
|
||||||
msgstr "Cakton motorin OCR të largët"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:327
|
#: paperless/models.py:327
|
||||||
msgid "Sets the remote OCR API key"
|
msgid "Sets the remote OCR API key"
|
||||||
msgstr "Cakton çelësin e API-së së OCR-it në distancë"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:335
|
#: paperless/models.py:335
|
||||||
msgid "Sets the remote OCR endpoint"
|
msgid "Sets the remote OCR endpoint"
|
||||||
msgstr "Cakton pikën e destinacionit të largët të OCR-së"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:343
|
#: paperless/models.py:343
|
||||||
msgid "Sets which documents are sent to the remote OCR engine"
|
msgid "Sets which documents are sent to the remote OCR engine"
|
||||||
msgstr "Cakton se cilat dokumente dërgohen te motori OCR i largët"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:355
|
#: paperless/models.py:355
|
||||||
msgid "Enables AI features"
|
msgid "Enables AI features"
|
||||||
@@ -2192,23 +2192,23 @@ msgstr "Aktivizon veçoritë AI"
|
|||||||
|
|
||||||
#: paperless/models.py:360
|
#: paperless/models.py:360
|
||||||
msgid "Sets the LLM embedding backend"
|
msgid "Sets the LLM embedding backend"
|
||||||
msgstr "Vendos mekanizmin e pasme (backend) për embedding-un e LLM-së"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:368
|
#: paperless/models.py:368
|
||||||
msgid "Sets the LLM embedding model"
|
msgid "Sets the LLM embedding model"
|
||||||
msgstr "Vendos modelin e ngulitjes (embedding) të LLM-së"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:375
|
#: paperless/models.py:375
|
||||||
msgid "Sets the LLM embedding API key"
|
msgid "Sets the LLM embedding API key"
|
||||||
msgstr "Cakton çelësin e API-së së integrimit të LLM-së"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:382
|
#: paperless/models.py:382
|
||||||
msgid "Sets the LLM embedding endpoint, optional"
|
msgid "Sets the LLM embedding endpoint, optional"
|
||||||
msgstr "Vendos pikën përfundimtare të \"embedding\"-ut për LLM-në (opsionale)"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:389
|
#: paperless/models.py:389
|
||||||
msgid "Sets the LLM embedding chunk size"
|
msgid "Sets the LLM embedding chunk size"
|
||||||
msgstr "Vendos madhësinë e segmentit të enkodimit (embedding) për LLM-në."
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:395
|
#: paperless/models.py:395
|
||||||
msgid "Sets the LLM context size"
|
msgid "Sets the LLM context size"
|
||||||
@@ -2216,7 +2216,7 @@ msgstr "Cakton madhësinë e kontekstit LLM"
|
|||||||
|
|
||||||
#: paperless/models.py:401
|
#: paperless/models.py:401
|
||||||
msgid "Sets the LLM backend"
|
msgid "Sets the LLM backend"
|
||||||
msgstr "Vendos backend-in e LLM-së"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:409
|
#: paperless/models.py:409
|
||||||
msgid "Sets the LLM model"
|
msgid "Sets the LLM model"
|
||||||
@@ -2228,7 +2228,7 @@ msgstr "Cakton çelësin API të LLM"
|
|||||||
|
|
||||||
#: paperless/models.py:423
|
#: paperless/models.py:423
|
||||||
msgid "Sets the LLM endpoint, optional"
|
msgid "Sets the LLM endpoint, optional"
|
||||||
msgstr "Cakton endpoint-in e embedding LLM, opsionale"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:430
|
#: paperless/models.py:430
|
||||||
msgid "Sets the LLM output language"
|
msgid "Sets the LLM output language"
|
||||||
@@ -2240,7 +2240,7 @@ msgstr "Cakton kohën limit të LLM në sekonda"
|
|||||||
|
|
||||||
#: paperless/models.py:443
|
#: paperless/models.py:443
|
||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "cilësimet e aplikimit pa përdorim letre"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:562
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
@@ -2252,7 +2252,7 @@ msgstr "Arabisht"
|
|||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:564
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Afrikanisht"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:565
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
@@ -2264,7 +2264,7 @@ msgstr "Bullgarisht"
|
|||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Katalanisht"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@@ -2308,7 +2308,7 @@ msgstr "Hungarisht"
|
|||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr "Indonezisht"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
@@ -2376,7 +2376,7 @@ msgstr "Turqisht"
|
|||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Ukrainisht"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
@@ -2528,7 +2528,7 @@ msgstr "Process full Email (with embedded attachments in skedar) as .eml"
|
|||||||
|
|
||||||
#: paperless_mail/models.py:109
|
#: paperless_mail/models.py:109
|
||||||
msgid "Process full Mail (with embedded attachments in file) as .eml + process attachments as separate documents"
|
msgid "Process full Mail (with embedded attachments in file) as .eml + process attachments as separate documents"
|
||||||
msgstr "Përpuno email-in e plotë (me bashkëngjitje të përfshira në skedar) si .eml + përpuno bashkëngjitjet si dokumente të veçanta."
|
msgstr ""
|
||||||
|
|
||||||
#: paperless_mail/models.py:116
|
#: paperless_mail/models.py:116
|
||||||
msgid "Process all files, including 'inline' attachments."
|
msgid "Process all files, including 'inline' attachments."
|
||||||
@@ -2564,7 +2564,7 @@ msgstr "Zhvendos në dosjen e specifikuar"
|
|||||||
|
|
||||||
#: paperless_mail/models.py:128
|
#: paperless_mail/models.py:128
|
||||||
msgid "Mark as read, don't process read mails"
|
msgid "Mark as read, don't process read mails"
|
||||||
msgstr "Shënoji si të lexuara, mos i përpuno emailet e lexuara"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless_mail/models.py:129
|
#: paperless_mail/models.py:129
|
||||||
msgid "Flag the mail, don't process flagged mails"
|
msgid "Flag the mail, don't process flagged mails"
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Serbian (Latin)\n"
|
"Language-Team: Serbian (Latin)\n"
|
||||||
"Language: sr_CS\n"
|
"Language: sr_CS\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "pokretanje tokova rada"
|
msgstr "pokretanje tokova rada"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Nedovoljne dozvole."
|
msgstr "Nedovoljne dozvole."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Otkrivena je nevažeća promenljiva."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Duplirani identifikatori dokumenata nisu dozvoljeni."
|
msgstr "Duplirani identifikatori dokumenata nisu dozvoljeni."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumenti nisu pronađeni: %(ids)s"
|
msgstr "Dokumenti nisu pronađeni: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Kao poslednji korak, molimo Vas da popunite sledeći obrazac:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Navedite samo jedno od sledećeg: text, title_search, query ili more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Nevažeći more_like_id"
|
msgstr "Nevažeći more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Nevažeća konfiguracija veštačke inteligencije."
|
msgstr "Nevažeća konfiguracija veštačke inteligencije."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Navedite samo jedno od sledećeg: text, title_search, query ili more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Nedovoljne dozvole za deljenje dokumenta %(id)s."
|
msgstr "Nedovoljne dozvole za deljenje dokumenta %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket se već obrađuje."
|
msgstr "Paket se već obrađuje."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Paket linkova za deljenje se još uvek priprema. Molimo pokušajte ponovo kasnije."
|
msgstr "Paket linkova za deljenje se još uvek priprema. Molimo pokušajte ponovo kasnije."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Paket linkova za deljenje nije dostupan."
|
msgstr "Paket linkova za deljenje nije dostupan."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Swedish\n"
|
"Language-Team: Swedish\n"
|
||||||
"Language: sv_SE\n"
|
"Language: sv_SE\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "arbetsflöde körs"
|
msgstr "arbetsflöde körs"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Otillräckliga behörigheter."
|
msgstr "Otillräckliga behörigheter."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Ogiltig variabel upptäckt."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Dubbletter av dokumentidentifierare är inte tillåtna."
|
msgstr "Dubbletter av dokumentidentifierare är inte tillåtna."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumenten hittades inte: %(ids)s"
|
msgstr "Dokumenten hittades inte: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Slutför följande formulär som ett sista steg:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Ange endast ett av text, title_search, query och more_like_id."
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Ogiltig more_like_id"
|
msgstr "Ogiltig more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Ogiltig AI-konfiguration."
|
msgstr "Ogiltig AI-konfiguration."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Begäran till AI-serverdelen tog för lång tid."
|
msgstr "Begäran till AI-serverdelen tog för lång tid."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "AI-serverdelen avvisade begäran. Kontrollera loggarna för detaljer."
|
msgstr "AI-serverdelen avvisade begäran. Kontrollera loggarna för detaljer."
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Ange endast ett av text, title_search, query och more_like_id."
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Otillräckliga behörigheter för att dela dokument %(id)s."
|
msgstr "Otillräckliga behörigheter för att dela dokument %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paketet behandlas redan."
|
msgstr "Paketet behandlas redan."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Delningslänkpaketet förbereds fortfarande. Försök igen senare."
|
msgstr "Delningslänkpaketet förbereds fortfarande. Försök igen senare."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Delningslänkpaketet är inte tillgängligt."
|
msgstr "Delningslänkpaketet är inte tillgängligt."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Thai\n"
|
"Language-Team: Thai\n"
|
||||||
"Language: th_TH\n"
|
"Language: th_TH\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "ตรวจพบตัวแปรไม่ถูกต้อง"
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1916,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:20\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Turkish\n"
|
"Language-Team: Turkish\n"
|
||||||
"Language: tr_TR\n"
|
"Language: tr_TR\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "iş akışı çalıştırma"
|
msgstr "iş akışı çalıştırma"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Yetersiz izin."
|
msgstr "Yetersiz izin."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Geçersiz değişken algılandı."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Doküman kimliği çakışmasına izin verilmiyor."
|
msgstr "Doküman kimliği çakışmasına izin verilmiyor."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dosyalar bulunamadı: %(ids)s"
|
msgstr "Dosyalar bulunamadı: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Son adım olarak, lütfen aşağıdaki formu doldurun:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "Yalnızca bir metin, title_search, sorgu veya more_like_id"
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Geçersiz more_like_id"
|
msgstr "Geçersiz more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Geçersiz yapay zeka konfigürasyonu."
|
msgstr "Geçersiz yapay zeka konfigürasyonu."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Yapay zeka isteği zaman aşımına uğradı."
|
msgstr "Yapay zeka isteği zaman aşımına uğradı."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "Yalnızca bir metin, title_search, sorgu veya more_like_id"
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "%(id)s dosyasını paylaşmak için yetkiniz yok."
|
msgstr "%(id)s dosyasını paylaşmak için yetkiniz yok."
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket zaten işlemede."
|
msgstr "Paket zaten işlemede."
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:20\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Ukrainian\n"
|
"Language-Team: Ukrainian\n"
|
||||||
"Language: uk_UA\n"
|
"Language: uk_UA\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Виявлено неправильну змінну."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Як останній крок, будь ласка, заповніть
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:20\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Vietnamese\n"
|
"Language-Team: Vietnamese\n"
|
||||||
"Language: vi_VN\n"
|
"Language: vi_VN\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "các lần chạy quy trình"
|
msgstr "các lần chạy quy trình"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Không có đủ quyền."
|
msgstr "Không có đủ quyền."
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "Đã phát hiện biến số không hợp lệ."
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Không cho phép các định danh tài liệu trùng lặp"
|
msgstr "Không cho phép các định danh tài liệu trùng lặp"
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Không tìm thấy tài liệu: %(ids)s"
|
msgstr "Không tìm thấy tài liệu: %(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "Là bước cuối cùng, vui lòng hoàn thành mẫu đơn sau:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Không đủ quyền để chia sẻ tài liệu %(id)s"
|
msgstr "Không đủ quyền để chia sẻ tài liệu %(id)s"
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Gói đang được xử lý"
|
msgstr "Gói đang được xử lý"
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Liên kết chia sẻ gói vẫn đang được chuẩn bị. Vui lòng thử lại sau."
|
msgstr "Liên kết chia sẻ gói vẫn đang được chuẩn bị. Vui lòng thử lại sau."
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Không tồn tại liên kết chia sẻ gói"
|
msgstr "Không tồn tại liên kết chia sẻ gói"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Chinese Simplified\n"
|
"Language-Team: Chinese Simplified\n"
|
||||||
"Language: zh_CN\n"
|
"Language: zh_CN\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "工作流运行"
|
msgstr "工作流运行"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "权限不足。"
|
msgstr "权限不足。"
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "检测到无效变量。"
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "不允许重复文档标识符。"
|
msgstr "不允许重复文档标识符。"
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "未找到文档:%(ids)s"
|
msgstr "未找到文档:%(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "作为最后一步,请填写以下表格:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ","
|
msgstr ","
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "只能指定 text、title_search、query 或 more_like_id 中的一项。"
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "无效的more_like_id"
|
msgstr "无效的more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "无效的 AI 配置。"
|
msgstr "无效的 AI 配置。"
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "AI 后端请求超时。"
|
msgstr "AI 后端请求超时。"
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "AI 后端拒绝了请求。请检查日志的详细信息。"
|
msgstr "AI 后端拒绝了请求。请检查日志的详细信息。"
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "只能指定 text、title_search、query 或 more_like_id 中的一项。"
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "权限不足以分享文件:%(id)s。"
|
msgstr "权限不足以分享文件:%(id)s。"
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "捆绑包已在处理中。"
|
msgstr "捆绑包已在处理中。"
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "分享链接包仍在准备中,请稍后再试。"
|
msgstr "分享链接包仍在准备中,请稍后再试。"
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "分享链接包不可用。"
|
msgstr "分享链接包不可用。"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-14 15:18+0000\n"
|
"POT-Creation-Date: 2026-10-12 19:12+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-14 15:19\n"
|
"PO-Revision-Date: 2026-10-12 19:13\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Chinese Traditional\n"
|
"Language-Team: Chinese Traditional\n"
|
||||||
"Language: zh_TW\n"
|
"Language: zh_TW\n"
|
||||||
@@ -1636,7 +1636,7 @@ msgid "workflow runs"
|
|||||||
msgstr "執行工作流程"
|
msgstr "執行工作流程"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2902 documents/views.py:344 documents/views.py:2752
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "權限不足。"
|
msgstr "權限不足。"
|
||||||
@@ -1676,7 +1676,7 @@ msgstr "偵測到無效的變數。"
|
|||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "文件識別碼不得重複。"
|
msgstr "文件識別碼不得重複。"
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4811
|
#: documents/serialisers.py:2988 documents/views.py:4799
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "找不到文件:%(ids)s"
|
msgstr "找不到文件:%(ids)s"
|
||||||
@@ -1917,40 +1917,40 @@ msgstr "最後一步,請填寫以下表單:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:337 documents/views.py:2749
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
|
||||||
msgstr "只能指定 text、title_search、query 或 more_like_id 的其中一項。"
|
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "無效的 more_like_id"
|
msgstr "無效的 more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1684
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "無效的 AI 配置。"
|
msgstr "無效的 AI 配置。"
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1695
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "AI 後端請求逾時。"
|
msgstr "AI 後端請求逾時。"
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1707
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "AI 後端拒絕了請求。請檢查日誌以取得詳細資訊。"
|
msgstr "AI 後端拒絕了請求。請檢查日誌以取得詳細資訊。"
|
||||||
|
|
||||||
#: documents/views.py:4827
|
#: documents/views.py:2574 documents/views.py:2890
|
||||||
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
|
msgstr "只能指定 text、title_search、query 或 more_like_id 的其中一項。"
|
||||||
|
|
||||||
|
#: documents/views.py:4815
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "權限不足,無法共用文件:%(id)s"
|
msgstr "權限不足,無法共用文件:%(id)s"
|
||||||
|
|
||||||
#: documents/views.py:4874
|
#: documents/views.py:4862
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "組合已在處理中。"
|
msgstr "組合已在處理中。"
|
||||||
|
|
||||||
#: documents/views.py:4938
|
#: documents/views.py:4926
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "共用連結組合仍在準備中,請稍後再試。"
|
msgstr "共用連結組合仍在準備中,請稍後再試。"
|
||||||
|
|
||||||
#: documents/views.py:4952
|
#: documents/views.py:4940
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "共用連結組合無法使用。"
|
msgstr "共用連結組合無法使用。"
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ logger = logging.getLogger("paperless.auth")
|
|||||||
class AutoLoginMiddleware(MiddlewareMixin):
|
class AutoLoginMiddleware(MiddlewareMixin):
|
||||||
def process_request(self, request: HttpRequest) -> None:
|
def process_request(self, request: HttpRequest) -> None:
|
||||||
# Dont use auto-login with token request
|
# Dont use auto-login with token request
|
||||||
if request.path_info.startswith("/api/token/") and request.method == "POST":
|
if request.path.startswith("/api/token/") and request.method == "POST":
|
||||||
return None
|
return None
|
||||||
try:
|
try:
|
||||||
request.user = User.objects.get(
|
request.user = User.objects.get(
|
||||||
|
|||||||
@@ -51,21 +51,3 @@ class TestAutoLoginMiddleware(TestCase):
|
|||||||
self._process(request)
|
self._process(request)
|
||||||
|
|
||||||
self.assertFalse(request.user.is_authenticated)
|
self.assertFalse(request.user.is_authenticated)
|
||||||
|
|
||||||
@override_settings(FORCE_SCRIPT_NAME="/paperless")
|
|
||||||
def test_token_request_is_not_logged_in_under_subpath(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Paperless is served under a subpath
|
|
||||||
WHEN:
|
|
||||||
- A token is requested via POST
|
|
||||||
THEN:
|
|
||||||
- The request is left anonymous so the posted credentials are used
|
|
||||||
"""
|
|
||||||
UserFactory(username="autologin")
|
|
||||||
|
|
||||||
request = self.factory.post("/api/token/")
|
|
||||||
request.user = AnonymousUser()
|
|
||||||
self._process(request)
|
|
||||||
|
|
||||||
self.assertFalse(request.user.is_authenticated)
|
|
||||||
@@ -5,7 +5,7 @@ from django.contrib.auth.models import User
|
|||||||
|
|
||||||
from documents.models import Document
|
from documents.models import Document
|
||||||
from documents.permissions import permitted_document_ids
|
from documents.permissions import permitted_document_ids
|
||||||
from documents.permissions import user_is_active_superuser
|
from documents.permissions import user_is_unrestricted
|
||||||
from documents.versioning import annotate_effective_content
|
from documents.versioning import annotate_effective_content
|
||||||
from paperless.config import AIConfig
|
from paperless.config import AIConfig
|
||||||
from paperless_ai.base_model import ClassificationSuggestions
|
from paperless_ai.base_model import ClassificationSuggestions
|
||||||
@@ -50,17 +50,16 @@ def _fulltext_similar_documents(
|
|||||||
similarity - cruder, but far better than no candidates at all.
|
similarity - cruder, but far better than no candidates at all.
|
||||||
more_like_this_ids returns only a ranked ID list, no scores, so weight is
|
more_like_this_ids returns only a ranked ID list, no scores, so weight is
|
||||||
synthesized from rank (descending from top_k) rather than claiming a
|
synthesized from rank (descending from top_k) rather than claiming a
|
||||||
similarity magnitude that doesn't exist. An active superuser is
|
similarity magnitude that doesn't exist. An unrestricted user (none, or an
|
||||||
normalized to ``None`` (no filtering) before calling, since the backend's
|
active superuser - see user_is_unrestricted) is normalized to ``None``
|
||||||
permission filter has no superuser short-circuit of its own. ``user=None``
|
before calling, since the backend's permission filter has no superuser
|
||||||
means the document is unowned, so results are limited to unowned documents
|
short-circuit of its own. Results are re-checked with
|
||||||
rather than the whole library. Results are re-checked with
|
|
||||||
permitted_document_ids() since Tantivy's indexed permission fields lag the
|
permitted_document_ids() since Tantivy's indexed permission fields lag the
|
||||||
DB via async reindexing and judge a version by its own owner.
|
DB via async reindexing and judge a version by its own owner.
|
||||||
"""
|
"""
|
||||||
from documents.search import get_backend
|
from documents.search import get_backend
|
||||||
|
|
||||||
unrestricted = user_is_active_superuser(user)
|
unrestricted = user_is_unrestricted(user)
|
||||||
search_user = None if unrestricted else user
|
search_user = None if unrestricted else user
|
||||||
backend = get_backend()
|
backend = get_backend()
|
||||||
similar_ids = backend.more_like_this_ids(
|
similar_ids = backend.more_like_this_ids(
|
||||||
@@ -188,16 +187,13 @@ def get_taxonomy_context(
|
|||||||
candidates/context rather than propagating the exception - neither a
|
candidates/context rather than propagating the exception - neither a
|
||||||
vector-store outage nor a search-index issue should block classification,
|
vector-store outage nor a search-index issue should block classification,
|
||||||
only its context-assisted enrichment.
|
only its context-assisted enrichment.
|
||||||
|
|
||||||
``user=None`` means "acting for an unowned document" (workflows act as the
|
|
||||||
document owner), NOT "no restriction": only unowned documents and taxonomy
|
|
||||||
are considered, so another user's private documents never reach the prompt.
|
|
||||||
"""
|
"""
|
||||||
ai_config = AIConfig()
|
ai_config = AIConfig()
|
||||||
try:
|
try:
|
||||||
if ai_config.llm_embedding_backend:
|
if ai_config.llm_embedding_backend:
|
||||||
# None means "no restriction" to retrieve_similar_nodes. An active
|
# None means "no restriction" to retrieve_similar_nodes. An
|
||||||
# superuser can see every document, so skip
|
# unrestricted user (no user at all, or an active superuser -- see
|
||||||
|
# user_is_unrestricted) can see every document, so skip
|
||||||
# materializing every visible pk into a Python list and passing it
|
# materializing every visible pk into a Python list and passing it
|
||||||
# through as an IN filter: for a large library that is a wasted
|
# through as an IN filter: for a large library that is a wasted
|
||||||
# quadratic scan in the vector store at best, and past ~32,763
|
# quadratic scan in the vector store at best, and past ~32,763
|
||||||
@@ -208,7 +204,7 @@ def get_taxonomy_context(
|
|||||||
# which documents are considered -- only how we get there.
|
# which documents are considered -- only how we get there.
|
||||||
visible_document_ids = (
|
visible_document_ids = (
|
||||||
None
|
None
|
||||||
if user_is_active_superuser(user)
|
if user_is_unrestricted(user)
|
||||||
else list(permitted_document_ids(user))
|
else list(permitted_document_ids(user))
|
||||||
)
|
)
|
||||||
nodes = retrieve_similar_nodes(
|
nodes = retrieve_similar_nodes(
|
||||||
@@ -230,14 +226,8 @@ def get_taxonomy_context(
|
|||||||
|
|
||||||
# similar_documents is already ordered by descending weight; don't lose it.
|
# similar_documents is already ordered by descending weight; don't lose it.
|
||||||
similar_document_ids = [s["document_id"] for s in similar_documents]
|
similar_document_ids = [s["document_id"] for s in similar_documents]
|
||||||
similar_queryset = Document.objects.all()
|
|
||||||
if not user_is_active_superuser(user):
|
|
||||||
# Already scoped by retrieval but re-checked here before being used in the prompt
|
|
||||||
similar_queryset = similar_queryset.filter(
|
|
||||||
id__in=permitted_document_ids(user),
|
|
||||||
)
|
|
||||||
similar_documents_by_id = annotate_effective_content(
|
similar_documents_by_id = annotate_effective_content(
|
||||||
similar_queryset,
|
Document.objects.all(),
|
||||||
).in_bulk(similar_document_ids)
|
).in_bulk(similar_document_ids)
|
||||||
similar_docs = [
|
similar_docs = [
|
||||||
similar_documents_by_id[document_id]
|
similar_documents_by_id[document_id]
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from documents.models import DocumentType
|
|||||||
from documents.models import StoragePath
|
from documents.models import StoragePath
|
||||||
from documents.models import Tag
|
from documents.models import Tag
|
||||||
from documents.permissions import permitted_object_ids
|
from documents.permissions import permitted_object_ids
|
||||||
from documents.permissions import restrict_queryset_to_owner_visible
|
from documents.permissions import restrict_queryset_to_visible
|
||||||
|
|
||||||
MATCH_THRESHOLD = 0.8
|
MATCH_THRESHOLD = 0.8
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ def _resolve_visible_ids(
|
|||||||
"""
|
"""
|
||||||
if not ids:
|
if not ids:
|
||||||
return []
|
return []
|
||||||
queryset = restrict_queryset_to_owner_visible(
|
queryset = restrict_queryset_to_visible(
|
||||||
model.objects.filter(pk__in=ids),
|
model.objects.filter(pk__in=ids),
|
||||||
user,
|
user,
|
||||||
perm,
|
perm,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from documents.models import Document
|
|||||||
from documents.models import DocumentType
|
from documents.models import DocumentType
|
||||||
from documents.models import StoragePath
|
from documents.models import StoragePath
|
||||||
from documents.models import Tag
|
from documents.models import Tag
|
||||||
from documents.permissions import restrict_queryset_to_owner_visible
|
from documents.permissions import restrict_queryset_to_visible
|
||||||
from paperless_ai.prompts.context import TaxonomyBlockPromptContext
|
from paperless_ai.prompts.context import TaxonomyBlockPromptContext
|
||||||
from paperless_ai.prompts.render import render_prompt
|
from paperless_ai.prompts.render import render_prompt
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ def _visible_ranked_candidates(
|
|||||||
"""
|
"""
|
||||||
if not weighted_ids:
|
if not weighted_ids:
|
||||||
return []
|
return []
|
||||||
visible_queryset = restrict_queryset_to_owner_visible(
|
visible_queryset = restrict_queryset_to_visible(
|
||||||
model.objects.filter(pk__in=weighted_ids),
|
model.objects.filter(pk__in=weighted_ids),
|
||||||
user,
|
user,
|
||||||
perm,
|
perm,
|
||||||
|
|||||||
@@ -613,83 +613,32 @@ class TestGetTaxonomyContextVisibility:
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@override_settings(LLM_EMBEDDING_BACKEND="huggingface")
|
@override_settings(LLM_EMBEDDING_BACKEND="huggingface")
|
||||||
def test_restricts_to_unowned_documents_when_no_user(
|
def test_skips_permission_lookup_when_no_user(
|
||||||
self,
|
self,
|
||||||
mocker: pytest_mock.MockerFixture,
|
mocker: pytest_mock.MockerFixture,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
GIVEN:
|
GIVEN:
|
||||||
- No user is supplied (a workflow acting for an unowned document)
|
- No user is supplied
|
||||||
- Another user's private document
|
|
||||||
WHEN:
|
WHEN:
|
||||||
- get_taxonomy_context() is called
|
- get_taxonomy_context() is called
|
||||||
THEN:
|
THEN:
|
||||||
- Only unowned documents are passed to retrieve_similar_nodes(),
|
- Permission lookup is skipped and no document_ids restriction is
|
||||||
never the whole library
|
passed to retrieve_similar_nodes()
|
||||||
"""
|
"""
|
||||||
other_owner = UserFactory.create()
|
document = DocumentFactory.create(content="Some content")
|
||||||
document = DocumentFactory.create(content="Some content", owner=None)
|
|
||||||
unowned = DocumentFactory.create(content="Public", owner=None)
|
|
||||||
private = DocumentFactory.create(content="Private", owner=other_owner)
|
|
||||||
mock_retrieve = mocker.patch(
|
mock_retrieve = mocker.patch(
|
||||||
"paperless_ai.ai_classifier.retrieve_similar_nodes",
|
"paperless_ai.ai_classifier.retrieve_similar_nodes",
|
||||||
return_value=[],
|
return_value=[],
|
||||||
)
|
)
|
||||||
|
mock_permitted = mocker.patch(
|
||||||
|
"paperless_ai.ai_classifier.permitted_document_ids",
|
||||||
|
)
|
||||||
|
|
||||||
get_taxonomy_context(document, None)
|
get_taxonomy_context(document, None)
|
||||||
|
|
||||||
visible = mock_retrieve.call_args.kwargs["document_ids"]
|
mock_permitted.assert_not_called()
|
||||||
assert visible is not None
|
assert mock_retrieve.call_args.kwargs["document_ids"] is None
|
||||||
assert document.pk in visible
|
|
||||||
assert unowned.pk in visible
|
|
||||||
assert private.pk not in visible
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
|
||||||
@override_settings(LLM_EMBEDDING_BACKEND="huggingface")
|
|
||||||
def test_private_document_content_never_reaches_context_when_no_user(
|
|
||||||
self,
|
|
||||||
mocker: pytest_mock.MockerFixture,
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- No user is supplied (a workflow acting for an unowned document)
|
|
||||||
- Retrieval returns another user's private document anyway (e.g.
|
|
||||||
a stale vector store)
|
|
||||||
WHEN:
|
|
||||||
- get_taxonomy_context() is called
|
|
||||||
THEN:
|
|
||||||
- The private document's title and content are not in the RAG
|
|
||||||
context, while an unowned neighbour's are
|
|
||||||
"""
|
|
||||||
other_owner = UserFactory.create()
|
|
||||||
document = DocumentFactory.create(content="Some content", owner=None)
|
|
||||||
unowned = DocumentFactory.create(
|
|
||||||
title="Public neighbour",
|
|
||||||
content="public text",
|
|
||||||
owner=None,
|
|
||||||
)
|
|
||||||
private = DocumentFactory.create(
|
|
||||||
title="Secret neighbour",
|
|
||||||
content="secret text",
|
|
||||||
owner=other_owner,
|
|
||||||
)
|
|
||||||
mocker.patch(
|
|
||||||
"paperless_ai.ai_classifier.retrieve_similar_nodes",
|
|
||||||
return_value=[],
|
|
||||||
)
|
|
||||||
mocker.patch(
|
|
||||||
"paperless_ai.ai_classifier._node_document_weights",
|
|
||||||
return_value=[
|
|
||||||
SimilarDocument(document_id=private.pk, weight=0.9),
|
|
||||||
SimilarDocument(document_id=unowned.pk, weight=0.5),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
_candidates, context = get_taxonomy_context(document, None)
|
|
||||||
|
|
||||||
assert "Public neighbour" in context
|
|
||||||
assert "Secret neighbour" not in context
|
|
||||||
assert "secret text" not in context
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@override_settings(LLM_EMBEDDING_BACKEND="huggingface")
|
@override_settings(LLM_EMBEDDING_BACKEND="huggingface")
|
||||||
@@ -719,9 +668,7 @@ class TestGetTaxonomyContextVisibility:
|
|||||||
|
|
||||||
get_taxonomy_context(document, user)
|
get_taxonomy_context(document, user)
|
||||||
|
|
||||||
# Once for retrieval, once to re-check the documents whose text goes
|
mock_permitted.assert_called_once_with(user)
|
||||||
# into the prompt
|
|
||||||
assert {c.args for c in mock_permitted.call_args_list} == {(user,)}
|
|
||||||
assert mock_retrieve.call_args.kwargs["document_ids"] == [1, 2, 3]
|
assert mock_retrieve.call_args.kwargs["document_ids"] == [1, 2, 3]
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@@ -930,34 +877,6 @@ class TestFulltextSimilarDocuments:
|
|||||||
|
|
||||||
assert [s["document_id"] for s in result] == [other.pk]
|
assert [s["document_id"] for s in result] == [other.pk]
|
||||||
|
|
||||||
def test_no_user_only_returns_unowned_documents(
|
|
||||||
self,
|
|
||||||
fulltext_backend: TantivyBackend,
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- An unowned source document, an unowned similar document and a
|
|
||||||
similar document privately owned by another user
|
|
||||||
WHEN:
|
|
||||||
- _fulltext_similar_documents() is called with no user (a workflow
|
|
||||||
acting for an unowned document)
|
|
||||||
THEN:
|
|
||||||
- Only the unowned similar document is returned
|
|
||||||
"""
|
|
||||||
other_owner = UserFactory.create()
|
|
||||||
source = DocumentFactory.create(content="shared content phrase", owner=None)
|
|
||||||
unowned = DocumentFactory.create(content="shared content phrase", owner=None)
|
|
||||||
private = DocumentFactory.create(
|
|
||||||
content="shared content phrase",
|
|
||||||
owner=other_owner,
|
|
||||||
)
|
|
||||||
for doc in (source, unowned, private):
|
|
||||||
fulltext_backend.add_or_update(doc)
|
|
||||||
|
|
||||||
result = _fulltext_similar_documents(source, user=None, top_k=5)
|
|
||||||
|
|
||||||
assert [s["document_id"] for s in result] == [unowned.pk]
|
|
||||||
|
|
||||||
def test_excludes_stale_permitted_document_for_regular_user(
|
def test_excludes_stale_permitted_document_for_regular_user(
|
||||||
self,
|
self,
|
||||||
fulltext_backend: TantivyBackend,
|
fulltext_backend: TantivyBackend,
|
||||||
|
|||||||
@@ -154,19 +154,27 @@ class TestResolveTagIds:
|
|||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
assert resolve_tag_ids([], user) == []
|
assert resolve_tag_ids([], user) == []
|
||||||
|
|
||||||
def test_user_none_only_resolves_unowned_tags(self) -> None:
|
def test_user_none_means_unrestricted_not_owner_isnull(
|
||||||
"""GIVEN a tag owned by another user, an unowned tag and user=None
|
self,
|
||||||
(a workflow acting for an unowned document)
|
mocker: pytest_mock.MockerFixture,
|
||||||
WHEN resolving both tags' ids
|
) -> None:
|
||||||
THEN only the unowned tag is returned - user=None must not expose
|
"""GIVEN a tag owned by another user and user=None
|
||||||
another user's private taxonomy.
|
WHEN resolving the tag's id
|
||||||
|
THEN the tag is returned unfiltered and permitted_object_ids is never
|
||||||
|
called - user=None means "no restriction", not the narrower
|
||||||
|
"only unowned rows" meaning permitted_object_ids(None, ...) has.
|
||||||
|
Same convention as build_taxonomy_candidates's own call site.
|
||||||
"""
|
"""
|
||||||
owned = TagFactory.create(name="Owned", owner=UserFactory.create())
|
tag = TagFactory.create(name="Owned")
|
||||||
unowned = TagFactory.create(name="Unowned", owner=None)
|
owner = UserFactory.create()
|
||||||
|
tag.owner = owner
|
||||||
|
tag.save()
|
||||||
|
spy = mocker.patch("documents.permissions.permitted_object_ids")
|
||||||
|
|
||||||
result = resolve_tag_ids([owned.pk, unowned.pk], None)
|
result = resolve_tag_ids([tag.pk], None)
|
||||||
|
|
||||||
assert result == [unowned]
|
assert result == [tag]
|
||||||
|
spy.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
|
|||||||
@@ -271,27 +271,39 @@ class TestBuildTaxonomyCandidates:
|
|||||||
|
|
||||||
assert result["tags"] == []
|
assert result["tags"] == []
|
||||||
|
|
||||||
def test_user_none_only_includes_unowned_taxonomy(self) -> None:
|
def test_user_none_means_unrestricted_not_owner_isnull(
|
||||||
|
self,
|
||||||
|
mocker: pytest_mock.MockerFixture,
|
||||||
|
) -> None:
|
||||||
"""
|
"""
|
||||||
GIVEN:
|
GIVEN:
|
||||||
- A similar document with a tag owned by another user and an
|
- An owned tag (owner is not None)
|
||||||
unowned tag
|
- user=None (system/superuser/no-auth classification)
|
||||||
- user=None (a workflow acting for an unowned document)
|
|
||||||
WHEN:
|
WHEN:
|
||||||
- build_taxonomy_candidates() is called
|
- build_taxonomy_candidates() is called
|
||||||
THEN:
|
THEN:
|
||||||
- Only the unowned tag is a candidate - user=None must not expose
|
- The tag is included (no permission filtering occurs)
|
||||||
another user's private taxonomy
|
- permitted_object_ids() is never called
|
||||||
"""
|
"""
|
||||||
owned = TagFactory.create(name="Owned", owner=UserFactory.create())
|
# user=None means "no restriction" throughout ai_classifier.py (the
|
||||||
unowned = TagFactory.create(name="Unowned", owner=None)
|
# same superuser/no-user fast path get_taxonomy_context uses).
|
||||||
|
# permitted_object_ids(None, ...) itself means something
|
||||||
|
# different ("only unowned rows") - it must not be called at all
|
||||||
|
# when user is None, or an owned tag like this one would be wrongly
|
||||||
|
# dropped for every unauthenticated/system-triggered classification.
|
||||||
|
tag = TagFactory.create(name="Owned")
|
||||||
|
owner = UserFactory.create()
|
||||||
|
tag.owner = owner
|
||||||
|
tag.save()
|
||||||
document = DocumentFactory.create()
|
document = DocumentFactory.create()
|
||||||
document.tags.add(owned, unowned)
|
document.tags.add(tag)
|
||||||
similar_documents = [make_similar(document.pk, 0.5)]
|
similar_documents = [make_similar(document.pk, 0.5)]
|
||||||
|
spy = mocker.patch("documents.permissions.permitted_object_ids")
|
||||||
|
|
||||||
result = build_taxonomy_candidates(similar_documents, user=None)
|
result = build_taxonomy_candidates(similar_documents, user=None)
|
||||||
|
|
||||||
assert [c["name"] for c in result["tags"]] == ["Unowned"]
|
assert result["tags"][0]["name"] == "Owned"
|
||||||
|
spy.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
class TestFormatTaxonomyForPrompt:
|
class TestFormatTaxonomyForPrompt:
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ from django.utils.translation import gettext as _
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import PermissionDenied
|
from rest_framework.exceptions import PermissionDenied
|
||||||
|
|
||||||
from documents.permissions import get_objects_for_user_owner_aware
|
|
||||||
from documents.permissions import has_perms_owner_aware
|
from documents.permissions import has_perms_owner_aware
|
||||||
|
from documents.permissions import restrict_queryset_to_visible
|
||||||
from documents.serialisers import CorrespondentField
|
from documents.serialisers import CorrespondentField
|
||||||
from documents.serialisers import DocumentTypeField
|
from documents.serialisers import DocumentTypeField
|
||||||
from documents.serialisers import OwnedObjectSerializer
|
from documents.serialisers import OwnedObjectSerializer
|
||||||
@@ -68,10 +68,10 @@ class AccountField(serializers.PrimaryKeyRelatedField[MailAccount]):
|
|||||||
if user is None:
|
if user is None:
|
||||||
return MailAccount.objects.none()
|
return MailAccount.objects.none()
|
||||||
|
|
||||||
return get_objects_for_user_owner_aware(
|
return restrict_queryset_to_visible(
|
||||||
|
MailAccount.objects.all(),
|
||||||
user,
|
user,
|
||||||
"change_mailaccount",
|
"change_mailaccount",
|
||||||
MailAccount,
|
|
||||||
).order_by("-id")
|
).order_by("-id")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1272,11 +1272,11 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "filelock"
|
name = "filelock"
|
||||||
version = "4.0.12"
|
version = "3.32.6"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/53/e4/34efcb869715cf299e47d1ac7b2624d2bcb6f2d3dffc2f0abe8417f65ab2/filelock-4.0.12.tar.gz", hash = "sha256:cf42711a7ac791818b299fab0332a088c65aeeefa36290de98db92c434303b0c", size = 253880, upload-time = "2026-10-05T13:17:43.677Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/38/46/126b1831dca12060d4a8296bf9c4fe5c93c4f22197fa239cb0cc82042bba/filelock-3.32.6.tar.gz", hash = "sha256:a3f55a18af3652a94d8f47d6055df434f254ca1d02ef2524850c6d249ca2512c", size = 225172, upload-time = "2026-09-08T22:57:11.528Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/da/a1/b047e1c486a2c66283633b7dbb73872ca16ca1ce6a426f70d4d037fc8e1c/filelock-4.0.12-py3-none-any.whl", hash = "sha256:5f17ee83ecee8a6f3e389c75822fb70a1c2f0506b99438a6dffa1d56793588c8", size = 111732, upload-time = "2026-10-05T13:17:42.361Z" },
|
{ url = "https://files.pythonhosted.org/packages/cc/06/4f138f618dbea66803291274f228f01daf29f306fe8b96bc30dab765df75/filelock-3.32.6-py3-none-any.whl", hash = "sha256:3f16ecd0117feae0dfc147e8c62eb5daeccd8bd800378c3ddf416de9b4feb6b1", size = 100189, upload-time = "2026-09-08T22:57:10.182Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3184,7 +3184,7 @@ requires-dist = [
|
|||||||
{ name = "drf-spectacular", specifier = "~=0.30" },
|
{ name = "drf-spectacular", specifier = "~=0.30" },
|
||||||
{ name = "drf-spectacular-sidecar", specifier = ">=2026.7.1,<2026.10" },
|
{ name = "drf-spectacular-sidecar", specifier = ">=2026.7.1,<2026.10" },
|
||||||
{ name = "drf-writable-nested", specifier = "~=0.7.1" },
|
{ name = "drf-writable-nested", specifier = "~=0.7.1" },
|
||||||
{ name = "filelock", specifier = ">=3.32,<4.1" },
|
{ name = "filelock", specifier = "~=3.32.0" },
|
||||||
{ name = "flower", specifier = ">=2.0.1,<2.3" },
|
{ name = "flower", specifier = ">=2.0.1,<2.3" },
|
||||||
{ name = "gotenberg-client", extras = ["httpx"], specifier = "~=1.0" },
|
{ name = "gotenberg-client", extras = ["httpx"], specifier = "~=1.0" },
|
||||||
{ name = "granian", extras = ["uvloop"], marker = "extra == 'webserver'", specifier = ">=2.7,<2.9" },
|
{ name = "granian", extras = ["uvloop"], marker = "extra == 'webserver'", specifier = ">=2.7,<2.9" },
|
||||||
|
|||||||
Reference in new issue
Block a user