Cleanup-Logik für Baugruppen und BOM-Einträge im Statistik-Bereich überarbeiten bzw. erweitern

This commit is contained in:
Marcel Diegelmann 2026-02-13 16:34:43 +01:00
parent d67e93064c
commit b08df9b812
35 changed files with 864 additions and 233 deletions

View file

@ -227,7 +227,7 @@ export default class extends Controller {
}, },
templates: { templates: {
header({ html }) { header({ html }) {
return html`<span class="aa-SourceHeaderTitle">${trans(STATISTICS_ASSEMBLIES)}</span> return html`<span class="aa-SourceHeaderTitle">${trans("assembly.labelp")}</span>
<div class="aa-SourceHeaderLine" />`; <div class="aa-SourceHeaderLine" />`;
}, },
item({ item, components, html }) { item({ item, components, html }) {
@ -273,7 +273,7 @@ export default class extends Controller {
}, },
templates: { templates: {
header({ html }) { header({ html }) {
return html`<span class="aa-SourceHeaderTitle">${trans(STATISTICS_PROJECTS)}</span> return html`<span class="aa-SourceHeaderTitle">${trans("project.labelp")}</span>
<div class="aa-SourceHeaderLine" />`; <div class="aa-SourceHeaderLine" />`;
}, },
item({ item, components, html }) { item({ item, components, html }) {

View file

@ -2,44 +2,154 @@ import { Controller } from '@hotwired/stimulus';
export default class extends Controller { export default class extends Controller {
static values = { static values = {
url: String, cleanupBomUrl: String,
confirmMsg: String, cleanupPreviewUrl: String
successMsg: String,
errorMsg: String
} }
static targets = ["count"] static targets = ["bomCount", "previewCount", "bomButton", "previewButton"]
async cleanup(event) { async cleanup(event) {
event.preventDefault(); if (event) {
event.preventDefault();
if (!confirm(this.confirmMsgValue)) { event.stopImmediatePropagation();
return;
} }
const button = event ? event.currentTarget : null;
if (button) button.disabled = true;
try { try {
const response = await fetch(this.urlValue, { const data = await this.fetchWithErrorHandling(this.cleanupBomUrlValue, { method: 'POST' });
method: 'POST',
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
});
if (response.ok) { if (data.success) {
const data = await response.json(); this.showSuccessMessage(data.message);
alert(this.successMsgValue.replace('%count%', data.count)); if (this.hasBomCountTarget) {
// Update the count displayed in the UI this.bomCountTarget.textContent = data.new_count;
if (this.hasCountTarget) { }
this.countTarget.innerText = '0'; if (data.new_count === 0 && this.hasBomButtonTarget) {
this.bomButtonTarget.remove();
} }
// Reload page to reflect changes if needed, or just let the user see 0
window.location.reload();
} else { } else {
alert(this.errorMsgValue); this.showErrorMessage(data.message || 'BOM cleanup failed');
} }
} catch (error) { } catch (error) {
console.error('Cleanup failed:', error); this.showErrorMessage(error.message || 'An unexpected error occurred during BOM cleanup');
alert(this.errorMsgValue); } finally {
if (button) button.disabled = false;
} }
} }
async cleanupPreview(event) {
if (event) {
event.preventDefault();
event.stopImmediatePropagation();
}
const button = event ? event.currentTarget : null;
if (button) button.disabled = true;
try {
const data = await this.fetchWithErrorHandling(this.cleanupPreviewUrlValue, { method: 'POST' });
if (data.success) {
this.showSuccessMessage(data.message);
if (this.hasPreviewCountTarget) {
this.previewCountTarget.textContent = data.new_count;
}
if (data.new_count === 0 && this.hasPreviewButtonTarget) {
this.previewButtonTarget.remove();
}
} else {
this.showErrorMessage(data.message || 'Preview cleanup failed');
}
} catch (error) {
this.showErrorMessage(error.message || 'An unexpected error occurred during Preview cleanup');
} finally {
if (button) button.disabled = false;
}
}
getHeaders() {
return {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'application/json',
}
}
async fetchWithErrorHandling(url, options = {}, timeout = 30000) {
const controller = new AbortController()
const timeoutId = setTimeout(() => controller.abort(), timeout)
try {
const response = await fetch(url, {
...options,
headers: { ...this.getHeaders(), ...options.headers },
signal: controller.signal
})
clearTimeout(timeoutId)
if (!response.ok) {
const errorText = await response.text()
let errorMessage = `Server error (${response.status})`;
try {
const errorJson = JSON.parse(errorText);
if (errorJson && errorJson.message) {
errorMessage = errorJson.message;
}
} catch (e) {
// Not a JSON response, use status text
errorMessage = `${errorMessage}: ${errorText}`;
}
throw new Error(errorMessage)
}
return await response.json()
} catch (error) {
clearTimeout(timeoutId)
if (error.name === 'AbortError') {
throw new Error('Request timed out. Please try again.')
} else if (error.message.includes('Failed to fetch')) {
throw new Error('Network error. Please check your connection and try again.')
} else {
throw error
}
}
}
showSuccessMessage(message) {
this.showToast('success', message)
}
showErrorMessage(message) {
this.showToast('error', message)
}
showToast(type, message) {
// Create a simple alert that doesn't disrupt layout
const alertId = 'alert-' + Date.now();
const iconClass = type === 'success' ? 'fa-check-circle' : 'fa-exclamation-triangle';
const alertClass = type === 'success' ? 'alert-success' : 'alert-danger';
const alertHTML = `
<div class="alert ${alertClass} alert-dismissible fade show position-fixed"
style="top: 20px; right: 20px; z-index: 9999; max-width: 400px;"
id="${alertId}" role="alert">
<i class="fas ${iconClass} me-2"></i>
${message}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
`;
// Add alert to body
document.body.insertAdjacentHTML('beforeend', alertHTML);
// Auto-remove after 5 seconds if not closed manually
setTimeout(() => {
const elementToRemove = document.getElementById(alertId);
if (elementToRemove) {
elementToRemove.remove();
}
}, 5000);
}
} }

View file

@ -43,11 +43,13 @@ namespace App\Controller;
use App\Services\Tools\StatisticsHelper; use App\Services\Tools\StatisticsHelper;
use App\Entity\AssemblySystem\AssemblyBOMEntry; use App\Entity\AssemblySystem\AssemblyBOMEntry;
use App\Entity\AssemblySystem\Assembly;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
class StatisticsController extends AbstractController class StatisticsController extends AbstractController
{ {
@ -62,31 +64,95 @@ class StatisticsController extends AbstractController
} }
#[Route(path: '/statistics/cleanup-assembly-bom-entries', name: 'statistics_cleanup_assembly_bom_entries', methods: ['POST'])] #[Route(path: '/statistics/cleanup-assembly-bom-entries', name: 'statistics_cleanup_assembly_bom_entries', methods: ['POST'])]
public function cleanupAssemblyBOMEntries(EntityManagerInterface $em): JsonResponse public function cleanupAssemblyBOMEntries(
{ EntityManagerInterface $em,
StatisticsHelper $helper,
TranslatorInterface $translator
): JsonResponse {
$this->denyAccessUnlessGranted('@tools.statistics'); $this->denyAccessUnlessGranted('@tools.statistics');
$qb = $em->createQueryBuilder(); try {
$qb->select('be', 'IDENTITY(be.part) AS part_id') // We fetch the IDs of the entries that have a non-existent part.
->from(AssemblyBOMEntry::class, 'be') // We use a raw SQL approach or a more robust DQL to avoid proxy initialization issues.
->leftJoin('be.part', 'p') $qb = $em->createQueryBuilder();
->where('be.part IS NOT NULL') $qb->select('be.id', 'IDENTITY(be.part) AS part_id')
->andWhere('p.id IS NULL'); ->from(AssemblyBOMEntry::class, 'be')
->leftJoin('be.part', 'p')
->where('be.part IS NOT NULL')
->andWhere('p.id IS NULL');
$results = $qb->getQuery()->getResult(); $results = $qb->getQuery()->getResult();
$count = count($results); $count = count($results);
foreach ($results as $result) { foreach ($results as $result) {
/** @var AssemblyBOMEntry $entry */ $entryId = $result['id'];
$entry = $result[0]; $partId = $result['part_id'] ?? 'unknown';
$part_id = $result['part_id'] ?? 'unknown';
$entry->setPart(null); $entry = $em->find(AssemblyBOMEntry::class, $entryId);
$entry->setName(sprintf('part-id=%s not found', $part_id)); if ($entry instanceof AssemblyBOMEntry) {
$entry->setPart(null);
$entry->setName(sprintf('part-id=%s not found', $partId));
}
}
$em->flush();
return new JsonResponse([
'success' => true,
'count' => $count,
'message' => $translator->trans('statistics.cleanup_assembly_bom_entries.success', [
'%count%' => $count,
]),
'new_count' => $helper->getInvalidPartBOMEntriesCount(),
]);
} catch (\Exception $e) {
return new JsonResponse([
'success' => false,
'message' => $translator->trans('statistics.cleanup_assembly_bom_entries.error') . ' ' . $e->getMessage(),
], Response::HTTP_INTERNAL_SERVER_ERROR);
} }
}
$em->flush(); #[Route(path: '/statistics/cleanup-assembly-preview-attachments', name: 'statistics_cleanup_assembly_preview_attachments', methods: ['POST'])]
public function cleanupAssemblyPreviewAttachments(
EntityManagerInterface $em,
StatisticsHelper $helper,
TranslatorInterface $translator
): JsonResponse {
$this->denyAccessUnlessGranted('@tools.statistics');
return new JsonResponse(['success' => true, 'count' => $count]); try {
$qb = $em->createQueryBuilder();
$qb->select('a')
->from(Assembly::class, 'a')
->leftJoin('a.master_picture_attachment', 'm')
->where('a.master_picture_attachment IS NOT NULL')
->andWhere('m.id IS NULL');
$assemblies = $qb->getQuery()->getResult();
$count = count($assemblies);
foreach ($assemblies as $assembly) {
if ($assembly instanceof Assembly) {
$assembly->setMasterPictureAttachment(null);
}
}
$em->flush();
return new JsonResponse([
'success' => true,
'count' => $count,
'message' => $translator->trans('statistics.cleanup_assembly_preview_attachments.success', [
'%count%' => $count,
]),
'new_count' => $helper->getInvalidAssemblyPreviewAttachmentsCount(),
]);
} catch (\Exception $e) {
return new JsonResponse([
'success' => false,
'message' => $translator->trans('statistics.cleanup_assembly_preview_attachments.error') . ' ' . $e->getMessage(),
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
} }
} }

View file

@ -33,7 +33,6 @@ use Symfony\Component\Serializer\Attribute\Context;
* @extends Attachment<Assembly> * @extends Attachment<Assembly>
*/ */
#[UniqueEntity(['name', 'attachment_type', 'element'])] #[UniqueEntity(['name', 'attachment_type', 'element'])]
#[UniqueEntity(['name', 'attachment_type', 'element'])]
#[ORM\Entity] #[ORM\Entity]
class AssemblyAttachment extends Attachment class AssemblyAttachment extends Attachment
{ {

View file

@ -190,4 +190,19 @@ class StatisticsHelper
return (int) $qb->getQuery()->getSingleScalarResult(); return (int) $qb->getQuery()->getSingleScalarResult();
} }
/**
* Returns the number of assemblies that have a master_picture_attachment that does not exist anymore.
*/
public function getInvalidAssemblyPreviewAttachmentsCount(): int
{
$qb = $this->em->createQueryBuilder();
$qb->select('COUNT(a.id)')
->from(Assembly::class, 'a')
->leftJoin('a.master_picture_attachment', 'at')
->where('a.master_picture_attachment IS NOT NULL')
->andWhere('at.id IS NULL');
return (int) $qb->getQuery()->getSingleScalarResult();
}
} }

View file

@ -64,10 +64,8 @@
<div class="tab-pane fade" id="assemblies" role="tabpanel" aria-labelledby="assemblies-tab" <div class="tab-pane fade" id="assemblies" role="tabpanel" aria-labelledby="assemblies-tab"
{{ stimulus_controller('pages/statistics_assembly', { {{ stimulus_controller('pages/statistics_assembly', {
url: path('statistics_cleanup_assembly_bom_entries'), cleanupBomUrl: path('statistics_cleanup_assembly_bom_entries'),
confirmMsg: 'statistics.cleanup_assembly_bom_entries.confirm'|trans, cleanupPreviewUrl: path('statistics_cleanup_assembly_preview_attachments')
successMsg: 'statistics.cleanup_assembly_bom_entries.success'|trans,
errorMsg: 'statistics.cleanup_assembly_bom_entries.error'|trans
}) }} }) }}
> >
<table class="table table-striped table-hover"> <table class="table table-striped table-hover">
@ -85,14 +83,25 @@
<tr> <tr>
<td>{% trans %}statistics.invalid_part_bom_entries_count{% endtrans %}</td> <td>{% trans %}statistics.invalid_part_bom_entries_count{% endtrans %}</td>
<td> <td>
<span {{ stimulus_target('pages/statistics_assembly', 'count') }}>{{ helper.invalidPartBOMEntriesCount }}</span> <span {{ stimulus_target('pages/statistics_assembly', 'bomCount') }}>{{ helper.invalidPartBOMEntriesCount }}</span>
{% if helper.invalidPartBOMEntriesCount > 0 %} {% if helper.invalidPartBOMEntriesCount > 0 %}
<button class="btn btn-sm btn-outline-danger ms-2" {{ stimulus_action('pages/statistics_assembly', 'cleanup') }}> <button type="button" class="btn btn-sm btn-outline-danger ms-2" {{ stimulus_action('pages/statistics_assembly', 'cleanup', 'click') }} {{ stimulus_target('pages/statistics_assembly', 'bomButton') }}>
<i class="fas fa-magic"></i> {% trans %}statistics.cleanup_assembly_bom_entries.button{% endtrans %} <i class="fas fa-magic"></i> {% trans %}statistics.cleanup_assembly_bom_entries.button{% endtrans %}
</button> </button>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
<tr>
<td>{% trans %}statistics.invalid_assembly_preview_attachments_count{% endtrans %}</td>
<td>
<span {{ stimulus_target('pages/statistics_assembly', 'previewCount') }}>{{ helper.invalidAssemblyPreviewAttachmentsCount }}</span>
{% if helper.invalidAssemblyPreviewAttachmentsCount > 0 %}
<button type="button" class="btn btn-sm btn-outline-danger ms-2" {{ stimulus_action('pages/statistics_assembly', 'cleanupPreview', 'click') }} {{ stimulus_target('pages/statistics_assembly', 'previewButton') }}>
<i class="fas fa-magic"></i> {% trans %}statistics.cleanup_assembly_preview_attachments.button{% endtrans %}
</button>
{% endif %}
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>

View file

@ -49,6 +49,18 @@
<target>Velmi silné</target> <target>Velmi silné</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Sestavy</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Projekty</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>Meget stærk</target> <target>Meget stærk</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Samlinger</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Projekter</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>Sehr stark</target> <target>Sehr stark</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Baugruppen</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Projekte</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -2,10 +2,22 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="el"> <xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="el">
<file id="frontend.el"> <file id="frontend.el">
<unit id="lQ8QeGr" name="search.placeholder"> <unit id="lQ8QeGr" name="search.placeholder">
<segment state="translated"> <segment state="translated">
<source>search.placeholder</source> <source>search.placeholder</source>
<target>Αναζήτηση</target> <target>Αναζήτηση</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Συναρμολογήσεις</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Έργα</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -49,6 +49,18 @@
<target>Very strong</target> <target>Very strong</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Assemblies</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Projects</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>Muy fuerte</target> <target>Muy fuerte</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Ensamblajes</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Proyectos</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>Très fort</target> <target>Très fort</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Assemblages</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Projets</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>Nagyon erős</target> <target>Nagyon erős</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Összeállítások</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Projektek</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>Molto forte</target> <target>Molto forte</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Assemblaggi</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Progetti</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -2,22 +2,34 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="ja"> <xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="ja">
<file id="frontend.ja"> <file id="frontend.ja">
<unit id="lQ8QeGr" name="search.placeholder"> <unit id="lQ8QeGr" name="search.placeholder">
<segment state="translated"> <segment state="translated">
<source>search.placeholder</source> <source>search.placeholder</source>
<target>検索</target> <target>検索</target>
</segment> </segment>
</unit> </unit>
<unit id="R4hoCqe" name="part.labelp"> <unit id="R4hoCqe" name="part.labelp">
<segment> <segment>
<source>part.labelp</source> <source>part.labelp</source>
<target>部品</target> <target>部品</target>
</segment> </segment>
</unit> </unit>
<unit id="N66qZeD" name="search.submit"> <unit id="N66qZeD" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>
<target>検索</target> <target>検索</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>アセンブリ一覧</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>プロジェクト</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -2,10 +2,22 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="nl"> <xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="nl">
<file id="frontend.nl"> <file id="frontend.nl">
<unit id="lQ8QeGr" name="search.placeholder"> <unit id="lQ8QeGr" name="search.placeholder">
<segment state="translated"> <segment state="translated">
<source>search.placeholder</source> <source>search.placeholder</source>
<target>Zoeken</target> <target>Zoeken</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Assemblages</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Projecten</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -49,6 +49,18 @@
<target>Bardzo mocne</target> <target>Bardzo mocne</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Zespoły</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Projekty</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>Очень сильный</target> <target>Очень сильный</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Сборки</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Проекты</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>Дуже надійний</target> <target>Дуже надійний</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>Збірки</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>Проєкти</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -49,6 +49,18 @@
<target>非常强</target> <target>非常强</target>
</segment> </segment>
</unit> </unit>
<unit id="TvHlYfl" name="assembly.labelp">
<segment state="translated">
<source>assembly.labelp</source>
<target>装配列表</target>
</segment>
</unit>
<unit id="UXyo9ZT" name="project.labelp">
<segment state="translated">
<source>project.labelp</source>
<target>项目</target>
</segment>
</unit>
<unit id="U5IhkwB" name="search.submit"> <unit id="U5IhkwB" name="search.submit">
<segment state="translated"> <segment state="translated">
<source>search.submit</source> <source>search.submit</source>

View file

@ -1845,25 +1845,19 @@ Související prvky budou přesunuty nahoru.</target>
<target>Projekty</target> <target>Projekty</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Při čištění došlo k chybě.</target> <target>Při čištění došlo k chybě.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% položek bylo úspěšně vyčištěno.</target> <target>%count% položek bylo úspěšně vyčištěno.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Chcete vyčistit všechny neplatné položky kusovníku? Odkaz na díl bude odstraněn a název nastaven na "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Vyčistit</target> <target>Vyčistit</target>
@ -12320,14 +12314,38 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz
<target>Uživatelé</target> <target>Uživatelé</target>
</segment> </segment>
</unit> </unit>
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu"> <unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
<notes> <notes>
<note priority="1">Do not remove! Used for datatables rendering.</note> <note priority="1">Do not remove! Used for datatables rendering.</note>
</notes> </notes>
<segment state="translated"> <segment state="translated">
<source>datatable.datatable.lengthMenu</source> <source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit> </unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -1803,25 +1803,19 @@ Underelementer vil blive flyttet opad.</target>
<target>Projekter</target> <target>Projekter</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Der opstod en fejl under oprydningen.</target> <target>Der opstod en fejl under oprydningen.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% poster blev ryddet op.</target> <target>%count% poster blev ryddet op.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Vil du rydde op i alle ugyldige stykliste-poster? Forbindelsen til delen vil blive slettet, og navnet sat til "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Ryd op</target> <target>Ryd op</target>
@ -13748,5 +13742,29 @@ Buerklin API-godkendelsesserver: 10 anmodninger/minut pr. IP-adresse</target>
<target>Opdatér til</target> <target>Opdatér til</target>
</segment> </segment>
</unit> </unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -1826,25 +1826,19 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
<target>Ungültige Stücklisteneinträge (Teil nicht gefunden)</target> <target>Ungültige Stücklisteneinträge (Teil nicht gefunden)</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Bereinigen</target> <target>Bereinigen</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Möchten Sie alle ungültigen Stücklisteneinträge bereinigen? Die Verknüpfung zum Teil wird gelöscht und der Name auf "part-id=id not found" gesetzt.</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% Einträge wurden erfolgreich bereinigt.</target> <target>%count% Einträge wurden erfolgreich bereinigt.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Bei der Bereinigung ist ein Fehler aufgetreten.</target> <target>Bei der Bereinigung ist ein Fehler aufgetreten.</target>
@ -13121,7 +13115,7 @@ Bitte beachten Sie, dass dieses System derzeit experimentell ist und die hier de
<segment state="translated"> <segment state="translated">
<source>settings.ips.buerklin.help</source> <source>settings.ips.buerklin.help</source>
<target>Buerklin-API-Zugriffsbeschränkungen: 100 Requests/Minute pro IP-Adresse <target>Buerklin-API-Zugriffsbeschränkungen: 100 Requests/Minute pro IP-Adresse
Buerklin-API-Authentication-Server: Buerklin-API-Authentication-Server:
10 Requests/Minute pro IP-Adresse</target> 10 Requests/Minute pro IP-Adresse</target>
</segment> </segment>
</unit> </unit>
@ -13887,5 +13881,29 @@ Buerklin-API-Authentication-Server:
<target>Letzte Inventur</target> <target>Letzte Inventur</target>
</segment> </segment>
</unit> </unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Ungültige Baugruppen-Vorschaubilder (Anhang nicht gefunden)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Bereinigen</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% Einträge wurden erfolgreich bereinigt.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>Bei der Bereinigung ist ein Fehler aufgetreten.</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -1883,25 +1883,19 @@
<target>Έργα</target> <target>Έργα</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Παρουσιάστηκε σφάλμα κατά την εκκαθάριση.</target> <target>Παρουσιάστηκε σφάλμα κατά την εκκαθάριση.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% εγγραφές εκκαθαρίστηκαν με επιτυχία.</target> <target>%count% εγγραφές εκκαθαρίστηκαν με επιτυχία.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Θέλετε να εκκαθαρίσετε όλες τις μη έγκυρες εγγραφές BOM; Ο σύνδεσμος προς το εξάρτημα θα διαγραφεί και το όνομα θα οριστεί σε "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Εκκαθάριση</target> <target>Εκκαθάριση</target>
@ -1925,5 +1919,29 @@
<target>Αριθμός [[Assembly]]</target> <target>Αριθμός [[Assembly]]</target>
</segment> </segment>
</unit> </unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -1827,25 +1827,19 @@ Sub elements will be moved upwards.</target>
<target>Invalid BOM entries (part not found)</target> <target>Invalid BOM entries (part not found)</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Cleanup</target> <target>Cleanup</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Do you want to cleanup all invalid BOM entries? The link to the part will be removed and the name set to "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% entries were successfully cleaned up.</target> <target>%count% entries were successfully cleaned up.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>An error occurred during cleanup.</target> <target>An error occurred during cleanup.</target>
@ -13781,6 +13775,30 @@ Buerklin-API Authentication server:
<target>Update to</target> <target>Update to</target>
</segment> </segment>
</unit> </unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit>
<unit id="XPhnMxn" name="part.gtin"> <unit id="XPhnMxn" name="part.gtin">
<segment state="translated"> <segment state="translated">
<source>part.gtin</source> <source>part.gtin</source>

View file

@ -1845,25 +1845,19 @@ Subelementos serán desplazados hacia arriba.</target>
<target>Proyectos</target> <target>Proyectos</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Ocurrió un error durante la limpieza.</target> <target>Ocurrió un error durante la limpieza.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% entradas se limpiaron con éxito.</target> <target>%count% entradas se limpiaron con éxito.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>¿Desea limpiar todas las entradas de lista de materiales no válidas? El enlace a la pieza se eliminará y el nombre se establecerá en "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Limpiar</target> <target>Limpiar</target>
@ -11098,5 +11092,29 @@ Por favor ten en cuenta que no puedes personificar a un usuario deshabilitado. S
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit> </unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -1828,25 +1828,19 @@ Show/Hide sidebar</target>
<target>Projets</target> <target>Projets</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Une erreur est survenue lors du nettoyage.</target> <target>Une erreur est survenue lors du nettoyage.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% entrées ont été nettoyées avec succès.</target> <target>%count% entrées ont été nettoyées avec succès.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Voulez-vous nettoyer toutes les entrées de nomenclature non valides ? Le lien vers la pièce sera supprimé et le nom sera défini sur "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Nettoyer</target> <target>Nettoyer</target>
@ -7554,7 +7548,31 @@ exemple de ville</target>
<segment state="translated"> <segment state="translated">
<source>datatable.datatable.lengthMenu</source> <source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit> </unit>
</file> </file>
</xliff> </xliff>

View file

@ -1756,25 +1756,19 @@
<target>Projektek</target> <target>Projektek</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Hiba történt a tisztítás során.</target> <target>Hiba történt a tisztítás során.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% tétel sikeresen törölve.</target> <target>%count% tétel sikeresen törölve.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Szeretné törölni az összes érvénytelen darabjegyzék tételt? Az alkatrészre mutató hivatkozás törlődik, a név pedig "part-id=id not found" lesz.</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Tisztítás</target> <target>Tisztítás</target>
@ -11525,7 +11519,31 @@
<segment state="translated"> <segment state="translated">
<source>datatable.datatable.lengthMenu</source> <source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit> </unit>
</file> </file>
</xliff> </xliff>

View file

@ -1845,25 +1845,19 @@ I sub elementi saranno spostati verso l'alto.</target>
<target>Progetti</target> <target>Progetti</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Si è verificato un errore durante la pulizia.</target> <target>Si è verificato un errore durante la pulizia.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% voci sono state pulite con successo.</target> <target>%count% voci sono state pulite con successo.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Vuoi pulire tutte le voci della distinta base non valide? Il collegamento alla parte verrà rimosso e il nome impostato su "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Pulisci</target> <target>Pulisci</target>
@ -11098,7 +11092,31 @@ Notare che non è possibile impersonare un utente disattivato. Quando si prova a
<segment state="translated"> <segment state="translated">
<source>datatable.datatable.lengthMenu</source> <source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit> </unit>
</file> </file>
</xliff> </xliff>

View file

@ -1828,25 +1828,19 @@
<target>プロジェクト</target> <target>プロジェクト</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>クリーンアップ中にエラーが発生しました。</target> <target>クリーンアップ中にエラーが発生しました。</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% 個のエントリが正常にクリーンアップされました。</target> <target>%count% 個のエントリが正常にクリーンアップされました。</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>すべての無効な部品表エントリをクリーンアップしますか?部品へのリンクは削除され、名前は "part-id=id not found" に設定されます。</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>クリーンアップ</target> <target>クリーンアップ</target>
@ -7273,7 +7267,31 @@ Exampletown</target>
<segment state="translated"> <segment state="translated">
<source>datatable.datatable.lengthMenu</source> <source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit> </unit>
</file> </file>
</xliff> </xliff>

View file

@ -1560,25 +1560,19 @@
<target>Projecten</target> <target>Projecten</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Er is een fout opgetreden tijdens het opschonen.</target> <target>Er is een fout opgetreden tijdens het opschonen.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% regels zijn succesvol opgeschoond.</target> <target>%count% regels zijn succesvol opgeschoond.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Wilt u alle ongeldige stuklijstregels opschonen? De koppeling naar het onderdeel wordt verwijderd en de naam wordt ingesteld op "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Opschonen</target> <target>Opschonen</target>
@ -1602,5 +1596,29 @@
<target>Aantal [[Assembly]]</target> <target>Aantal [[Assembly]]</target>
</segment> </segment>
</unit> </unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>

View file

@ -1842,25 +1842,19 @@ Po usunięciu pod elementy zostaną przeniesione na górę.</target>
<target>Projekty</target> <target>Projekty</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Wystąpił błąd podczas czyszczenia.</target> <target>Wystąpił błąd podczas czyszczenia.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>Pomyślnie wyczyszczono %count% wpisów.</target> <target>Pomyślnie wyczyszczono %count% wpisów.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Czy chcesz wyczyścić wszystkie nieprawidłowe wpisy w zestawieniu? Link do części zostanie usunięty, a nazwa ustawiona na "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Wyczyść</target> <target>Wyczyść</target>
@ -10943,7 +10937,31 @@ Należy pamiętać, że nie możesz udawać nieaktywnych użytkowników. Jeśli
<segment state="translated"> <segment state="translated">
<source>datatable.datatable.lengthMenu</source> <source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit> </unit>
</file> </file>
</xliff> </xliff>

View file

@ -1846,25 +1846,19 @@
<target>Проекты</target> <target>Проекты</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>Произошла ошибка при очистке.</target> <target>Произошла ошибка при очистке.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>%count% записей успешно очищено.</target> <target>%count% записей успешно очищено.</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>Вы хотите очистить все неверные записи в спецификации? Ссылка на деталь будет удалена, а имя установлено в "part-id=id not found".</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>Очистить</target> <target>Очистить</target>
@ -11043,7 +11037,31 @@
<segment state="translated"> <segment state="translated">
<source>datatable.datatable.lengthMenu</source> <source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit> </unit>
</file> </file>
</xliff> </xliff>

View file

@ -1845,25 +1845,19 @@
<target>项目</target> <target>项目</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error"> <unit id="b5v8K2n" name="statistics.cleanup_assembly_bom_entries.error">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.error</source> <source>statistics.cleanup_assembly_bom_entries.error</source>
<target>清理过程中发生错误。</target> <target>清理过程中发生错误。</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success"> <unit id="m3n7X9q" name="statistics.cleanup_assembly_bom_entries.success">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.success</source> <source>statistics.cleanup_assembly_bom_entries.success</source>
<target>成功清理了 %count% 条条目。</target> <target>成功清理了 %count% 条条目。</target>
</segment> </segment>
</unit> </unit>
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm"> <unit id="kL9p4j2" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
<target>您想清理所有无效的物料清单条目吗?部件链接将被删除,名称将设置为 "part-id=id not found"。</target>
</segment>
</unit>
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
<segment state="translated"> <segment state="translated">
<source>statistics.cleanup_assembly_bom_entries.button</source> <source>statistics.cleanup_assembly_bom_entries.button</source>
<target>清理</target> <target>清理</target>
@ -10928,7 +10922,31 @@ Element 3</target>
<segment state="translated"> <segment state="translated">
<source>datatable.datatable.lengthMenu</source> <source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target> <target>_MENU_</target>
</segment> </segment>
</unit>
<unit id="v8r7X2a" name="statistics.invalid_assembly_preview_attachments_count">
<segment state="translated">
<source>statistics.invalid_assembly_preview_attachments_count</source>
<target>Invalid assembly preview attachments (attachment not found)</target>
</segment>
</unit>
<unit id="kL9p4j1" name="statistics.cleanup_assembly_preview_attachments.button">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.button</source>
<target>Cleanup</target>
</segment>
</unit>
<unit id="m3n7X9p" name="statistics.cleanup_assembly_preview_attachments.success">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.success</source>
<target>%count% entries were successfully cleaned up.</target>
</segment>
</unit>
<unit id="b5v8K2m" name="statistics.cleanup_assembly_preview_attachments.error">
<segment state="translated">
<source>statistics.cleanup_assembly_preview_attachments.error</source>
<target>An error occurred during cleanup.</target>
</segment>
</unit> </unit>
</file> </file>
</xliff> </xliff>