mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-03-04 14:29:35 +00:00
Compare commits
No commits in common. "03f7ad66d2ce62572df24d8c55e42696b856b691" and "c7ec8adc31934c0d5eef7efc0e75dabb02164612" have entirely different histories.
03f7ad66d2
...
c7ec8adc31
17 changed files with 157 additions and 363 deletions
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
|||
2.1.0
|
||||
2.0.2
|
||||
|
|
|
|||
|
|
@ -45,10 +45,8 @@ export default class extends DatatablesController {
|
|||
//Hide/Unhide panel with the selection tools
|
||||
if (count > 0) {
|
||||
selectPanel.classList.remove('d-none');
|
||||
selectPanel.classList.add('sticky-select-bar');
|
||||
} else {
|
||||
selectPanel.classList.add('d-none');
|
||||
selectPanel.classList.remove('sticky-select-bar');
|
||||
}
|
||||
|
||||
//Update selection count text
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
*/
|
||||
|
||||
.hoverpic {
|
||||
min-width: var(--table-image-preview-min-size, 20px);
|
||||
max-width: var(--table-image-preview-max-size, 35px);
|
||||
min-width: 10px;
|
||||
max-width: 30px;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
|
@ -49,7 +49,7 @@
|
|||
}
|
||||
|
||||
.part-table-image {
|
||||
max-height: calc(1.2*var(--table-image-preview-max-size, 35px)); /** Aspect ratio of maximum 1.2 */
|
||||
max-height: 40px;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,16 +17,6 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/****************************************
|
||||
* Action bar
|
||||
****************************************/
|
||||
|
||||
.sticky-select-bar {
|
||||
position: sticky;
|
||||
top: 120px;
|
||||
z-index: 1000; /* Ensure the bar is above other content */
|
||||
}
|
||||
|
||||
/****************************************
|
||||
* Tables
|
||||
****************************************/
|
||||
|
|
@ -119,4 +109,4 @@ Classes for Datatables export
|
|||
#export-messageTop,
|
||||
.export-helper{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
|
@ -24,7 +24,6 @@ namespace App\Controller;
|
|||
|
||||
use App\DataTables\AttachmentDataTable;
|
||||
use App\DataTables\Filters\AttachmentFilter;
|
||||
use App\DataTables\PartsDataTable;
|
||||
use App\Entity\Attachments\Attachment;
|
||||
use App\Form\Filters\AttachmentFilterType;
|
||||
use App\Services\Attachments\AttachmentManager;
|
||||
|
|
@ -113,7 +112,7 @@ class AttachmentFileController extends AbstractController
|
|||
|
||||
$filterForm->handleRequest($formRequest);
|
||||
|
||||
$table = $dataTableFactory->createFromType(AttachmentDataTable::class, ['filter' => $filter], ['pageLength' => $tableSettings->fullDefaultPageSize, 'lengthMenu' => PartsDataTable::LENGTH_MENU])
|
||||
$table = $dataTableFactory->createFromType(AttachmentDataTable::class, ['filter' => $filter], ['pageLength' => $tableSettings->fullDefaultPageSize])
|
||||
->handleRequest($request);
|
||||
|
||||
if ($table->isCallback()) {
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ use App\Services\InfoProviderSystem\ExistingPartFinder;
|
|||
use App\Services\InfoProviderSystem\PartInfoRetriever;
|
||||
use App\Services\InfoProviderSystem\ProviderRegistry;
|
||||
use App\Settings\AppSettings;
|
||||
use App\Settings\InfoProviderSystem\InfoProviderGeneralSettings;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Jbtronics\SettingsBundle\Form\SettingsFormFactoryInterface;
|
||||
use Jbtronics\SettingsBundle\Manager\SettingsManagerInterface;
|
||||
|
|
@ -114,7 +113,7 @@ class InfoProviderController extends AbstractController
|
|||
|
||||
#[Route('/search', name: 'info_providers_search')]
|
||||
#[Route('/update/{target}', name: 'info_providers_update_part_search')]
|
||||
public function search(Request $request, #[MapEntity(id: 'target')] ?Part $update_target, LoggerInterface $exceptionLogger, InfoProviderGeneralSettings $infoProviderSettings): Response
|
||||
public function search(Request $request, #[MapEntity(id: 'target')] ?Part $update_target, LoggerInterface $exceptionLogger): Response
|
||||
{
|
||||
$this->denyAccessUnlessGranted('@info_providers.create_parts');
|
||||
|
||||
|
|
@ -145,23 +144,6 @@ class InfoProviderController extends AbstractController
|
|||
}
|
||||
}
|
||||
|
||||
//If the providers form is still empty, use our default value from the settings
|
||||
if (count($form->get('providers')->getData() ?? []) === 0) {
|
||||
$default_providers = $infoProviderSettings->defaultSearchProviders;
|
||||
$provider_objects = [];
|
||||
foreach ($default_providers as $provider_key) {
|
||||
try {
|
||||
$tmp = $this->providerRegistry->getProviderByKey($provider_key);
|
||||
if ($tmp->isActive()) {
|
||||
$provider_objects[] = $tmp;
|
||||
}
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
//If the provider is not found, just ignore it
|
||||
}
|
||||
}
|
||||
$form->get('providers')->setData($provider_objects);
|
||||
}
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$keyword = $form->get('keyword')->getData();
|
||||
$providers = $form->get('providers')->getData();
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ use App\Services\Parameters\ParameterExtractor;
|
|||
use App\Services\Parts\PartLotWithdrawAddHelper;
|
||||
use App\Services\Parts\PricedetailHelper;
|
||||
use App\Services\ProjectSystem\ProjectBuildPartHelper;
|
||||
use App\Settings\BehaviorSettings\PartInfoSettings;
|
||||
use DateTime;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Exception;
|
||||
|
|
@ -70,7 +69,7 @@ class PartController extends AbstractController
|
|||
protected PartPreviewGenerator $partPreviewGenerator,
|
||||
private readonly TranslatorInterface $translator,
|
||||
private readonly AttachmentSubmitHandler $attachmentSubmitHandler, private readonly EntityManagerInterface $em,
|
||||
protected EventCommentHelper $commentHelper, private readonly PartInfoSettings $partInfoSettings)
|
||||
protected EventCommentHelper $commentHelper)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -120,8 +119,8 @@ class PartController extends AbstractController
|
|||
'pricedetail_helper' => $this->pricedetailHelper,
|
||||
'pictures' => $this->partPreviewGenerator->getPreviewAttachments($part),
|
||||
'timeTravel' => $timeTravel_timestamp,
|
||||
'description_params' => $this->partInfoSettings->extractParamsFromDescription ? $parameterExtractor->extractParameters($part->getDescription()) : [],
|
||||
'comment_params' => $this->partInfoSettings->extractParamsFromNotes ? $parameterExtractor->extractParameters($part->getComment()) : [],
|
||||
'description_params' => $parameterExtractor->extractParameters($part->getDescription()),
|
||||
'comment_params' => $parameterExtractor->extractParameters($part->getComment()),
|
||||
'withdraw_add_helper' => $withdrawAddHelper,
|
||||
]
|
||||
);
|
||||
|
|
|
|||
|
|
@ -161,9 +161,7 @@ class PartListsController extends AbstractController
|
|||
|
||||
$filterForm->handleRequest($formRequest);
|
||||
|
||||
$table = $this->dataTableFactory->createFromType(PartsDataTable::class, array_merge(
|
||||
['filter' => $filter], $additional_table_vars),
|
||||
['pageLength' => $this->tableSettings->fullDefaultPageSize, 'lengthMenu' => PartsDataTable::LENGTH_MENU])
|
||||
$table = $this->dataTableFactory->createFromType(PartsDataTable::class, array_merge(['filter' => $filter], $additional_table_vars), ['pageLength' => $this->tableSettings->fullDefaultPageSize])
|
||||
->handleRequest($request);
|
||||
|
||||
if ($table->isCallback()) {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ use App\Services\InfoProviderSystem\Providers\InfoProviderInterface;
|
|||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\ChoiceList\ChoiceList;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\OptionsResolver\Options;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class ProviderSelectType extends AbstractType
|
||||
|
|
@ -45,43 +44,13 @@ class ProviderSelectType extends AbstractType
|
|||
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$providers = $this->providerRegistry->getActiveProviders();
|
||||
$resolver->setDefaults([
|
||||
'choices' => $this->providerRegistry->getActiveProviders(),
|
||||
'choice_label' => ChoiceList::label($this, static fn (?InfoProviderInterface $choice) => $choice?->getProviderInfo()['name']),
|
||||
'choice_value' => ChoiceList::value($this, static fn(?InfoProviderInterface $choice) => $choice?->getProviderKey()),
|
||||
|
||||
$resolver->setDefault('input', 'object');
|
||||
$resolver->setAllowedTypes('input', 'string');
|
||||
//Either the form returns the provider objects or their keys
|
||||
$resolver->setAllowedValues('input', ['object', 'string']);
|
||||
$resolver->setDefault('multiple', true);
|
||||
|
||||
$resolver->setDefault('choices', function (Options $options) use ($providers) {
|
||||
if ('object' === $options['input']) {
|
||||
return $this->providerRegistry->getActiveProviders();
|
||||
}
|
||||
|
||||
$tmp = [];
|
||||
foreach ($providers as $provider) {
|
||||
$name = $provider->getProviderInfo()['name'];
|
||||
$tmp[$name] = $provider->getProviderKey();
|
||||
}
|
||||
|
||||
return $tmp;
|
||||
});
|
||||
|
||||
//The choice_label and choice_value only needs to be set if we want the objects
|
||||
$resolver->setDefault('choice_label', function (Options $options){
|
||||
if ('object' === $options['input']) {
|
||||
return ChoiceList::label($this, static fn (?InfoProviderInterface $choice) => $choice?->getProviderInfo()['name']);
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
$resolver->setDefault('choice_value', function (Options $options) {
|
||||
if ('object' === $options['input']) {
|
||||
return ChoiceList::value($this, static fn(?InfoProviderInterface $choice) => $choice?->getProviderKey());
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
'multiple' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -40,10 +40,4 @@ class PartInfoSettings
|
|||
#[SettingsParameter(label: new TM("settings.behavior.part_info.show_part_image_overlay"), description: new TM("settings.behavior.part_info.show_part_image_overlay.help"),
|
||||
envVar: "bool:SHOW_PART_IMAGE_OVERLAY", envVarMode: EnvVarMode::OVERWRITE)]
|
||||
public bool $showPartImageOverlay = true;
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.behavior.part_info.extract_params_from_description"))]
|
||||
public bool $extractParamsFromDescription = true;
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.behavior.part_info.extract_params_from_notes"))]
|
||||
public bool $extractParamsFromNotes = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -70,20 +70,6 @@ class TableSettings
|
|||
PartTableColumns::CATEGORY, PartTableColumns::FOOTPRINT, PartTableColumns::MANUFACTURER,
|
||||
PartTableColumns::LOCATION, PartTableColumns::AMOUNT];
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.behavior.table.preview_image_min_width"),
|
||||
formOptions: ['attr' => ['min' => 1, 'max' => 100]],
|
||||
envVar: "int:TABLE_IMAGE_PREVIEW_MIN_SIZE", envVarMode: EnvVarMode::OVERWRITE
|
||||
)]
|
||||
#[Assert\Range(min: 1, max: 100)]
|
||||
public int $previewImageMinWidth = 20;
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.behavior.table.preview_image_max_width"),
|
||||
formOptions: ['attr' => ['min' => 1, 'max' => 100]],
|
||||
envVar: "int:TABLE_IMAGE_PREVIEW_MAX_SIZE", envVarMode: EnvVarMode::OVERWRITE
|
||||
)]
|
||||
#[Assert\Range(min: 1, max: 100)]
|
||||
#[Assert\GreaterThanOrEqual(propertyPath: 'previewImageMinWidth')]
|
||||
public int $previewImageMaxWidth = 35;
|
||||
|
||||
public static function mapPartsDefaultColumnsEnv(string $columns): array
|
||||
{
|
||||
|
|
@ -101,4 +87,4 @@ class TableSettings
|
|||
return $ret;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2025 Jan Böhmer (https://github.com/jbtronics)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace App\Settings\InfoProviderSystem;
|
||||
|
||||
use App\Form\InfoProviderSystem\ProviderSelectType;
|
||||
use App\Settings\SettingsIcon;
|
||||
use Jbtronics\SettingsBundle\ParameterTypes\ArrayType;
|
||||
use Jbtronics\SettingsBundle\ParameterTypes\StringType;
|
||||
use Jbtronics\SettingsBundle\Settings\Settings;
|
||||
use Jbtronics\SettingsBundle\Settings\SettingsParameter;
|
||||
use Symfony\Component\Translation\TranslatableMessage as TM;
|
||||
|
||||
#[Settings(label: new TM("settings.ips.general"))]
|
||||
#[SettingsIcon("fa-magnifying-glass")]
|
||||
class InfoProviderGeneralSettings
|
||||
{
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
#[SettingsParameter(type: ArrayType::class, label: new TM("settings.ips.default_providers"),
|
||||
description: new TM("settings.ips.default_providers.help"), options: ['type' => StringType::class],
|
||||
formType: ProviderSelectType::class, formOptions: ['input' => 'string'])]
|
||||
public array $defaultSearchProviders = [];
|
||||
}
|
||||
|
|
@ -25,7 +25,6 @@ namespace App\Settings\InfoProviderSystem;
|
|||
|
||||
use Jbtronics\SettingsBundle\Settings\EmbeddedSettings;
|
||||
use Jbtronics\SettingsBundle\Settings\Settings;
|
||||
use Jbtronics\SettingsBundle\Settings\SettingsParameter;
|
||||
use Jbtronics\SettingsBundle\Settings\SettingsTrait;
|
||||
|
||||
#[Settings()]
|
||||
|
|
@ -33,9 +32,6 @@ class InfoProviderSettings
|
|||
{
|
||||
use SettingsTrait;
|
||||
|
||||
#[EmbeddedSettings]
|
||||
public ?InfoProviderGeneralSettings $general = null;
|
||||
|
||||
#[EmbeddedSettings]
|
||||
public ?DigikeySettings $digikey = null;
|
||||
|
||||
|
|
@ -62,4 +58,4 @@ class InfoProviderSettings
|
|||
|
||||
#[EmbeddedSettings]
|
||||
public ?PollinSettings $pollin = null;
|
||||
}
|
||||
}
|
||||
|
|
@ -53,14 +53,6 @@
|
|||
{% endif %}
|
||||
|
||||
{{ encore_entry_link_tags('app') }}
|
||||
|
||||
{% set table_settings = settings_instance('table') %}
|
||||
<style nonce="{{ csp_nonce('style') }}">
|
||||
:root {
|
||||
--table-image-preview-min-size: {{ table_settings.previewImageMinWidth }}px;
|
||||
--table-image-preview-max-size: {{ table_settings.previewImageMaxWidth }}px;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<input type="hidden" name="ids" {{ stimulus_target('elements/datatables/parts', 'selectIDs') }} value="">
|
||||
|
||||
<div class="d-none mb-2 bg-body-tertiary shadow-sm border border-secondary rounded mx-2 p-2" {{ stimulus_target('elements/datatables/parts', 'selectPanel') }}>
|
||||
<div class="d-none mb-2" {{ stimulus_target('elements/datatables/parts', 'selectPanel') }}>
|
||||
{# <span id="select_count"></span> #}
|
||||
|
||||
<div class="input-group">
|
||||
|
|
@ -95,4 +95,4 @@
|
|||
</div>
|
||||
</form>
|
||||
|
||||
{% endmacro %}
|
||||
{% endmacro %}
|
||||
|
|
@ -8553,6 +8553,16 @@ Element 1 -> Element 1.2</target>
|
|||
<target>Authenticator App</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="fGkpjYW" name="Login successful">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>Login successful</source>
|
||||
<target>Login erfolgreich.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="KSHVrbr" name="log.type.exception">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
|
|
@ -8678,6 +8688,15 @@ Element 1 -> Element 1.2</target>
|
|||
<target>Sicherheitsschlüssel erfolgreich hinzugefügt.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="VhxhtYo" name="Username">
|
||||
<notes>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>Username</source>
|
||||
<target>Benutzername</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gDVCAxj" name="log.type.security.google_disabled">
|
||||
<notes>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
|
|
@ -13421,65 +13440,5 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön
|
|||
<target>Labelprofil aktualisiert</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="7lgFa7I" name="settings.behavior.hompepage.items">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.hompepage.items</source>
|
||||
<target>Startseiten-Elemente</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="FsrRdkp" name="settings.behavior.homepage.items.help">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.homepage.items.help</source>
|
||||
<target>Die Elemente, die auf der Startseite angezeigt werden sollen. Die Reihenfolge kann per Drag & Drop geändert werden.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="CYw3_pS" name="settings.system.customization.showVersionOnHomepage">
|
||||
<segment state="translated">
|
||||
<source>settings.system.customization.showVersionOnHomepage</source>
|
||||
<target>Part-DB-Version auf der Startseite anzeigen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="GLYhV9m" name="settings.behavior.part_info.extract_params_from_description">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.part_info.extract_params_from_description</source>
|
||||
<target>Parameter aus der Bauteilebeschreibung extrahieren</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aYOedkN" name="settings.behavior.part_info.extract_params_from_notes">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.part_info.extract_params_from_notes</source>
|
||||
<target>Parameter aus der Bauteilenotiz extrahieren</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nCH2MW6" name="settings.ips.default_providers">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.default_providers</source>
|
||||
<target>Standard-Suchquellen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="TLNoCLT" name="settings.ips.general">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.general</source>
|
||||
<target>Allgemeine Einstellungen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="IDs2sXK" name="settings.ips.default_providers.help">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.default_providers.help</source>
|
||||
<target>Diese Anbieter werden für die Suche in Informationsquellen vorausgewählt.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dv6eslZ" name="settings.behavior.table.preview_image_max_width">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.table.preview_image_max_width</source>
|
||||
<target>Max. Vorschaubilde-Breite (px)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5bOoqEL" name="settings.behavior.table.preview_image_min_width">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.table.preview_image_min_width</source>
|
||||
<target>Min. Vorschaubilde-Breite (px)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
|
|
|||
|
|
@ -242,7 +242,7 @@
|
|||
</notes>
|
||||
<segment state="final">
|
||||
<source>part.info.timetravel_hint</source>
|
||||
<target>This is how the part appeared before %timestamp%. <i>Please note that this feature is experimental, so the info may not be correct.</i></target>
|
||||
<target><![CDATA[This is how the part appeared before %timestamp%. <i>Please note that this feature is experimental, so the info may not be correct.</i>]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3exvSpl" name="standard.label">
|
||||
|
|
@ -731,10 +731,10 @@
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>user.edit.tfa.disable_tfa_message</source>
|
||||
<target>This will disable <b>all active two-factor authentication methods of the user</b> and delete the <b>backup codes</b>!
|
||||
<br>
|
||||
The user will have to set up all two-factor authentication methods again and print new backup codes! <br><br>
|
||||
<b>Only do this if you are absolutely sure about the identity of the user (seeking help), otherwise the account could be compromised by an attacker!</b></target>
|
||||
<target><![CDATA[This will disable <b>all active two-factor authentication methods of the user</b> and delete the <b>backup codes</b>!
|
||||
<br>
|
||||
The user will have to set up all two-factor authentication methods again and print new backup codes! <br><br>
|
||||
<b>Only do this if you are absolutely sure about the identity of the user (seeking help), otherwise the account could be compromised by an attacker!</b>]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="APsHYu0" name="user.edit.tfa.disable_tfa.btn">
|
||||
|
|
@ -885,9 +885,9 @@ The user will have to set up all two-factor authentication methods again and pri
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>entity.delete.message</source>
|
||||
<target>This can not be undone!
|
||||
<br>
|
||||
Sub elements will be moved upwards.</target>
|
||||
<target><![CDATA[This can not be undone!
|
||||
<br>
|
||||
Sub elements will be moved upwards.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2tKAqHw" name="entity.delete">
|
||||
|
|
@ -1441,7 +1441,7 @@ Sub elements will be moved upwards.</target>
|
|||
</notes>
|
||||
<segment state="final">
|
||||
<source>homepage.github.text</source>
|
||||
<target>Source, downloads, bug reports, to-do-list etc. can be found on <a href="%href%" class="link-external" target="_blank">GitHub project page</a></target>
|
||||
<target><![CDATA[Source, downloads, bug reports, to-do-list etc. can be found on <a href="%href%" class="link-external" target="_blank">GitHub project page</a>]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="D5OKsgU" name="homepage.help.caption">
|
||||
|
|
@ -1463,7 +1463,7 @@ Sub elements will be moved upwards.</target>
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>homepage.help.text</source>
|
||||
<target>Help and tips can be found in Wiki the <a href="%href%" class="link-external" target="_blank">GitHub page</a></target>
|
||||
<target><![CDATA[Help and tips can be found in Wiki the <a href="%href%" class="link-external" target="_blank">GitHub page</a>]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dnirx4v" name="homepage.forum.caption">
|
||||
|
|
@ -1705,7 +1705,7 @@ Sub elements will be moved upwards.</target>
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>email.pw_reset.fallback</source>
|
||||
<target>If this does not work for you, go to <a href="%url%">%url%</a> and enter the following info</target>
|
||||
<target><![CDATA[If this does not work for you, go to <a href="%url%">%url%</a> and enter the following info]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="DduL9Hu" name="email.pw_reset.username">
|
||||
|
|
@ -1735,7 +1735,7 @@ Sub elements will be moved upwards.</target>
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>email.pw_reset.valid_unit %date%</source>
|
||||
<target>The reset token will be valid until <i>%date%</i>.</target>
|
||||
<target><![CDATA[The reset token will be valid until <i>%date%</i>.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="8sBnjRy" name="orderdetail.delete">
|
||||
|
|
@ -3578,8 +3578,8 @@ Sub elements will be moved upwards.</target>
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tfa_google.disable.confirm_message</source>
|
||||
<target>If you disable the Authenticator App, all backup codes will be deleted, so you may need to reprint them.<br>
|
||||
Also note that without two-factor authentication, your account is no longer as well protected against attackers!</target>
|
||||
<target><![CDATA[If you disable the Authenticator App, all backup codes will be deleted, so you may need to reprint them.<br>
|
||||
Also note that without two-factor authentication, your account is no longer as well protected against attackers!]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="yu9MSt5" name="tfa_google.disabled_message">
|
||||
|
|
@ -3599,7 +3599,7 @@ Also note that without two-factor authentication, your account is no longer as w
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tfa_google.step.download</source>
|
||||
<target>Download an authenticator app (e.g. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>)</target>
|
||||
<target><![CDATA[Download an authenticator app (e.g. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>)]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="eriwJoR" name="tfa_google.step.scan">
|
||||
|
|
@ -3841,8 +3841,8 @@ Also note that without two-factor authentication, your account is no longer as w
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tfa_trustedDevices.explanation</source>
|
||||
<target>When checking the second factor, the current computer can be marked as trustworthy, so no more two-factor checks on this computer are needed.
|
||||
If you have done this incorrectly or if a computer is no longer trusted, you can reset the status of <i>all </i>computers here.</target>
|
||||
<target><![CDATA[When checking the second factor, the current computer can be marked as trustworthy, so no more two-factor checks on this computer are needed.
|
||||
If you have done this incorrectly or if a computer is no longer trusted, you can reset the status of <i>all </i>computers here.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="FZINq8z" name="tfa_trustedDevices.invalidate.confirm_title">
|
||||
|
|
@ -5313,7 +5313,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>label_options.lines_mode.help</source>
|
||||
<target>If you select Twig here, the content field is interpreted as Twig template. See <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig documentation</a> and <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a> for more information.</target>
|
||||
<target><![CDATA[If you select Twig here, the content field is interpreted as Twig template. See <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig documentation</a> and <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a> for more information.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="isvxbiX" name="label_options.page_size.label">
|
||||
|
|
@ -7157,15 +7157,15 @@ Exampletown</target>
|
|||
</notes>
|
||||
<segment state="translated">
|
||||
<source>mass_creation.lines.placeholder</source>
|
||||
<target>Element 1
|
||||
<target><![CDATA[Element 1
|
||||
Element 1.1
|
||||
Element 1.1.1
|
||||
Element 1.2
|
||||
Element 2
|
||||
Element 3
|
||||
|
||||
Element 1 -> Element 1.1
|
||||
Element 1 -> Element 1.2</target>
|
||||
Element 1 -> Element 1.1
|
||||
Element 1 -> Element 1.2]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="TWSqPFi" name="entity.mass_creation.btn">
|
||||
|
|
@ -8554,6 +8554,16 @@ Element 1 -> Element 1.2</target>
|
|||
<target>Authenticator app</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="fGkpjYW" name="Login successful">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>Login successful</source>
|
||||
<target>Login successful</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="KSHVrbr" name="log.type.exception">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
|
|
@ -8679,6 +8689,15 @@ Element 1 -> Element 1.2</target>
|
|||
<target>Security key added successfully.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="VhxhtYo" name="Username">
|
||||
<notes>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>Username</source>
|
||||
<target>Username</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gDVCAxj" name="log.type.security.google_disabled">
|
||||
<notes>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
|
|
@ -9372,25 +9391,25 @@ Element 1 -> Element 1.2</target>
|
|||
<unit id="r4vDLAt" name="filter.parameter_value_constraint.operator.<">
|
||||
<segment state="translated">
|
||||
<source>filter.parameter_value_constraint.operator.<</source>
|
||||
<target>Typ. Value <</target>
|
||||
<target><![CDATA[Typ. Value <]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="X9SA3UP" name="filter.parameter_value_constraint.operator.>">
|
||||
<segment state="translated">
|
||||
<source>filter.parameter_value_constraint.operator.></source>
|
||||
<target>Typ. Value ></target>
|
||||
<target><![CDATA[Typ. Value >]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="BQGaoQS" name="filter.parameter_value_constraint.operator.<=">
|
||||
<segment state="translated">
|
||||
<source>filter.parameter_value_constraint.operator.<=</source>
|
||||
<target>Typ. Value <=</target>
|
||||
<target><![CDATA[Typ. Value <=]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2ha3P6g" name="filter.parameter_value_constraint.operator.>=">
|
||||
<segment state="translated">
|
||||
<source>filter.parameter_value_constraint.operator.>=</source>
|
||||
<target>Typ. Value >=</target>
|
||||
<target><![CDATA[Typ. Value >=]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="4DaBace" name="filter.parameter_value_constraint.operator.BETWEEN">
|
||||
|
|
@ -9498,7 +9517,7 @@ Element 1 -> Element 1.2</target>
|
|||
<unit id="4tHhDtU" name="parts_list.search.searching_for">
|
||||
<segment state="translated">
|
||||
<source>parts_list.search.searching_for</source>
|
||||
<target>Searching parts with keyword <b>%keyword%</b></target>
|
||||
<target><![CDATA[Searching parts with keyword <b>%keyword%</b>]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="4vomKLa" name="parts_list.search_options.caption">
|
||||
|
|
@ -10158,13 +10177,13 @@ Element 1 -> Element 1.2</target>
|
|||
<unit id="NdZ1t7a" name="project.builds.number_of_builds_possible">
|
||||
<segment state="translated">
|
||||
<source>project.builds.number_of_builds_possible</source>
|
||||
<target>You have enough stocked to build <b>%max_builds%</b> builds of this project.</target>
|
||||
<target><![CDATA[You have enough stocked to build <b>%max_builds%</b> builds of this project.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="iuSpPbg" name="project.builds.check_project_status">
|
||||
<segment state="translated">
|
||||
<source>project.builds.check_project_status</source>
|
||||
<target>The current project status is <b>"%project_status%"</b>. You should check if you really want to build the project with this status!</target>
|
||||
<target><![CDATA[The current project status is <b>"%project_status%"</b>. You should check if you really want to build the project with this status!]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Y7vSSxi" name="project.builds.following_bom_entries_miss_instock_n">
|
||||
|
|
@ -10266,7 +10285,7 @@ Element 1 -> Element 1.2</target>
|
|||
<unit id="GzqIwHH" name="entity.select.add_hint">
|
||||
<segment state="translated">
|
||||
<source>entity.select.add_hint</source>
|
||||
<target>Use -> to create nested structures, e.g. "Node 1->Node 1.1"</target>
|
||||
<target><![CDATA[Use -> to create nested structures, e.g. "Node 1->Node 1.1"]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
|
|
@ -10290,13 +10309,13 @@ Element 1 -> Element 1.2</target>
|
|||
<unit id="XLnXtsR" name="homepage.first_steps.introduction">
|
||||
<segment state="translated">
|
||||
<source>homepage.first_steps.introduction</source>
|
||||
<target>Your database is still empty. You might want to read the <a href="%url%">documentation</a> or start to creating the following data structures:</target>
|
||||
<target><![CDATA[Your database is still empty. You might want to read the <a href="%url%">documentation</a> or start to creating the following data structures:]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Q79MOIk" name="homepage.first_steps.create_part">
|
||||
<segment state="translated">
|
||||
<source>homepage.first_steps.create_part</source>
|
||||
<target>Or you can directly <a href="%url%">create a new part</a>.</target>
|
||||
<target><![CDATA[Or you can directly <a href="%url%">create a new part</a>.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="vplYq4f" name="homepage.first_steps.hide_hint">
|
||||
|
|
@ -10308,7 +10327,7 @@ Element 1 -> Element 1.2</target>
|
|||
<unit id="MJoZl4f" name="homepage.forum.text">
|
||||
<segment state="translated">
|
||||
<source>homepage.forum.text</source>
|
||||
<target>For questions about Part-DB use the <a href="%href%" class="link-external" target="_blank">discussion forum</a></target>
|
||||
<target><![CDATA[For questions about Part-DB use the <a href="%href%" class="link-external" target="_blank">discussion forum</a>]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="YsukbnK" name="log.element_edited.changed_fields.category">
|
||||
|
|
@ -10962,7 +10981,7 @@ Element 1 -> Element 1.2</target>
|
|||
<unit id="p_IxB9K" name="parts.import.help_documentation">
|
||||
<segment state="translated">
|
||||
<source>parts.import.help_documentation</source>
|
||||
<target>See the <a href="%link%">documentation</a> for more information on the file format.</target>
|
||||
<target><![CDATA[See the <a href="%link%">documentation</a> for more information on the file format.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="awbvhVq" name="parts.import.help">
|
||||
|
|
@ -11142,7 +11161,7 @@ Element 1 -> Element 1.2</target>
|
|||
<unit id="o5u.Nnz" name="part.filter.lessThanDesired">
|
||||
<segment state="translated">
|
||||
<source>part.filter.lessThanDesired</source>
|
||||
<target>In stock less than desired (total amount < min. amount)</target>
|
||||
<target><![CDATA[In stock less than desired (total amount < min. amount)]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="YN9eLcZ" name="part.filter.lotOwner">
|
||||
|
|
@ -11954,13 +11973,13 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="i68lU5x" name="part.merge.confirm.title">
|
||||
<segment state="translated">
|
||||
<source>part.merge.confirm.title</source>
|
||||
<target>Do you really want to merge <b>%other%</b> into <b>%target%</b>?</target>
|
||||
<target><![CDATA[Do you really want to merge <b>%other%</b> into <b>%target%</b>?]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="k0anzYV" name="part.merge.confirm.message">
|
||||
<segment state="translated">
|
||||
<source>part.merge.confirm.message</source>
|
||||
<target><b>%other%</b> will be deleted, and the part will be saved with the shown information.</target>
|
||||
<target><![CDATA[<b>%other%</b> will be deleted, and the part will be saved with the shown information.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="mmW5Yl1" name="part.info.merge_modal.title">
|
||||
|
|
@ -12314,7 +12333,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="p7LGAIX" name="settings.ips.element14.apiKey.help">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.element14.apiKey.help</source>
|
||||
<target>You can register for an API key on <a href="https://partner.element14.com/">https://partner.element14.com/</a>.</target>
|
||||
<target><![CDATA[You can register for an API key on <a href="https://partner.element14.com/">https://partner.element14.com/</a>.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ZdUHpZc" name="settings.ips.element14.storeId">
|
||||
|
|
@ -12326,7 +12345,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="XXGUxF6" name="settings.ips.element14.storeId.help">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.element14.storeId.help</source>
|
||||
<target>The store domain to retrieve the data from. This decides the language and currency of results. See <a href="https://partner.element14.com/docs/Product_Search_API_REST__Description">here</a> for a list of valid domains.</target>
|
||||
<target><![CDATA[The store domain to retrieve the data from. This decides the language and currency of results. See <a href="https://partner.element14.com/docs/Product_Search_API_REST__Description">here</a> for a list of valid domains.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="WKWZIm2" name="settings.ips.tme">
|
||||
|
|
@ -12344,7 +12363,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="_pYLrPT" name="settings.ips.tme.token.help">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.tme.token.help</source>
|
||||
<target>You can get an API token and secret on <a href="https://developers.tme.eu/en/">https://developers.tme.eu/en/</a>.</target>
|
||||
<target><![CDATA[You can get an API token and secret on <a href="https://developers.tme.eu/en/">https://developers.tme.eu/en/</a>.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="yswx4bq" name="settings.ips.tme.secret">
|
||||
|
|
@ -12392,7 +12411,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="gu.JlpT" name="settings.ips.mouser.apiKey.help">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.mouser.apiKey.help</source>
|
||||
<target>You can register for an API key on <a href="https://eu.mouser.com/api-hub/">https://eu.mouser.com/api-hub/</a>.</target>
|
||||
<target><![CDATA[You can register for an API key on <a href="https://eu.mouser.com/api-hub/">https://eu.mouser.com/api-hub/</a>.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Q66CNjw" name="settings.ips.mouser.searchLimit">
|
||||
|
|
@ -12470,7 +12489,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="kKv0J3." name="settings.system.attachments">
|
||||
<segment state="translated">
|
||||
<source>settings.system.attachments</source>
|
||||
<target>Attachments & Files</target>
|
||||
<target><![CDATA[Attachments & Files]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dsRff8T" name="settings.system.attachments.maxFileSize">
|
||||
|
|
@ -12494,7 +12513,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="T.PBu5P" name="settings.system.attachments.allowDownloads.help">
|
||||
<segment state="translated">
|
||||
<source>settings.system.attachments.allowDownloads.help</source>
|
||||
<target>With this option users can download external files into Part-DB by providing an URL. <b>Attention: This can be a security issue, as it might allow users to access intranet ressources via Part-DB!</b></target>
|
||||
<target><![CDATA[With this option users can download external files into Part-DB by providing an URL. <b>Attention: This can be a security issue, as it might allow users to access intranet ressources via Part-DB!</b>]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".OyihML" name="settings.system.attachments.downloadByDefault">
|
||||
|
|
@ -12668,8 +12687,8 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="0GRlEe5" name="settings.system.localization.base_currency_description">
|
||||
<segment state="translated">
|
||||
<source>settings.system.localization.base_currency_description</source>
|
||||
<target>The currency that is used to store price information and exchange rates in. This currency is assumed, when no currency is set for a price information.
|
||||
<b>Please note that the currencies are not converted, when changing this value. So changing the default currency after you already added price information, will result in wrong prices!</b></target>
|
||||
<target><![CDATA[The currency that is used to store price information and exchange rates in. This currency is assumed, when no currency is set for a price information.
|
||||
<b>Please note that the currencies are not converted, when changing this value. So changing the default currency after you already added price information, will result in wrong prices!</b>]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="cvpTUeY" name="settings.system.privacy">
|
||||
|
|
@ -12699,7 +12718,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="w07P3Dt" name="settings.misc.kicad_eda.category_depth.help">
|
||||
<segment state="translated">
|
||||
<source>settings.misc.kicad_eda.category_depth.help</source>
|
||||
<target>This value determines the depth of the category tree, that is visible inside KiCad. 0 means that only the top level categories are visible. Set to a value > 0 to show more levels. Set to -1, to show all parts of Part-DB inside a sigle cnategory in KiCad.</target>
|
||||
<target><![CDATA[This value determines the depth of the category tree, that is visible inside KiCad. 0 means that only the top level categories are visible. Set to a value > 0 to show more levels. Set to -1, to show all parts of Part-DB inside a sigle cnategory in KiCad.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="VwvmcWE" name="settings.behavior.sidebar">
|
||||
|
|
@ -12717,7 +12736,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="jc0JTvL" name="settings.behavior.sidebar.items.help">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.sidebar.items.help</source>
|
||||
<target>The menus which appear at the sidebar by default. Order of items can be changed via drag & drop.</target>
|
||||
<target><![CDATA[The menus which appear at the sidebar by default. Order of items can be changed via drag & drop.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gVSWDkE" name="settings.behavior.sidebar.rootNodeEnabled">
|
||||
|
|
@ -12765,7 +12784,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="SUD8H3b" name="settings.behavior.table.parts_default_columns.help">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.table.parts_default_columns.help</source>
|
||||
<target>The columns to show by default in part tables. Order of items can be changed via drag & drop.</target>
|
||||
<target><![CDATA[The columns to show by default in part tables. Order of items can be changed via drag & drop.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="hazr_g5" name="settings.ips.oemsecrets">
|
||||
|
|
@ -12819,7 +12838,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<unit id="KLJYfJ0" name="settings.ips.oemsecrets.sortMode.M">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.oemsecrets.sortMode.M</source>
|
||||
<target>Completeness & Manufacturer name</target>
|
||||
<target><![CDATA[Completeness & Manufacturer name]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="8C9ijHM" name="entity.export.flash.error.no_entities">
|
||||
|
|
@ -13159,328 +13178,286 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
</segment>
|
||||
</unit>
|
||||
<unit id="yiIB3yV" name="project.bom_import.type.kicad_schematic">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.type.kicad_schematic</source>
|
||||
<target>KiCAD Schematic BOM (CSV file)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ltE6xPP" name="common.back">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>common.back</source>
|
||||
<target>Back</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="HCTqjZO" name="project.bom_import.validation.errors.required_field_missing">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.required_field_missing</source>
|
||||
<target>Line %line%: Required field "%field%" is missing or empty. Please ensure this field is mapped and contains data.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_ua5YM7" name="project.bom_import.validation.errors.no_valid_designators">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.no_valid_designators</source>
|
||||
<target>Line %line%: Designator field contains no valid component references. Expected format: "R1,C2,U3" or "R1, C2, U3".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="xpkq3rW" name="project.bom_import.validation.warnings.unusual_designator_format">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.unusual_designator_format</source>
|
||||
<target>Line %line%: Some component references may have unusual format: %designators%. Expected format: "R1", "C2", "U3", etc.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="M54Ud5d" name="project.bom_import.validation.errors.duplicate_designators">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.duplicate_designators</source>
|
||||
<target>Line %line%: Duplicate component references found: %designators%. Each component should be referenced only once per line.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ZULFZh2" name="project.bom_import.validation.errors.invalid_quantity">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.invalid_quantity</source>
|
||||
<target>Line %line%: Quantity "%quantity%" is not a valid number. Please enter a numeric value (e.g., 1, 2.5, 10).</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3WbRgsl" name="project.bom_import.validation.errors.quantity_zero_or_negative">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.quantity_zero_or_negative</source>
|
||||
<target>Line %line%: Quantity must be greater than 0, got %quantity%.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_nWGsSU" name="project.bom_import.validation.warnings.quantity_unusually_high">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.quantity_unusually_high</source>
|
||||
<target>Line %line%: Quantity %quantity% seems unusually high. Please verify this is correct.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="iJWw39f" name="project.bom_import.validation.warnings.quantity_not_whole_number">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.quantity_not_whole_number</source>
|
||||
<target>Line %line%: Quantity %quantity% is not a whole number, but you have %count% component references. This may indicate a mismatch.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Zffmgvv" name="project.bom_import.validation.errors.quantity_designator_mismatch">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.quantity_designator_mismatch</source>
|
||||
<target>Line %line%: Mismatch between quantity and component references. Quantity: %quantity%, References: %count% (%designators%). These should match. Either adjust the quantity or check your component references.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="JqHpDIo" name="project.bom_import.validation.errors.invalid_partdb_id">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.invalid_partdb_id</source>
|
||||
<target>Line %line%: Part-DB ID "%id%" is not a valid number. Please enter a numeric ID.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Mr7W6r0" name="project.bom_import.validation.errors.partdb_id_zero_or_negative">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.partdb_id_zero_or_negative</source>
|
||||
<target>Line %line%: Part-DB ID must be greater than 0, got %id%.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gRH6IeR" name="project.bom_import.validation.warnings.partdb_id_not_found">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.partdb_id_not_found</source>
|
||||
<target>Line %line%: Part-DB ID %id% not found in database. The component will be imported without linking to an existing part.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="eMfaBYo" name="project.bom_import.validation.info.partdb_link_success">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.info.partdb_link_success</source>
|
||||
<target>Line %line%: Successfully linked to Part-DB part "%name%" (ID: %id%).</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="b_m9p.f" name="project.bom_import.validation.warnings.no_component_name">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.no_component_name</source>
|
||||
<target>Line %line%: No component name/designation provided (MPN, Designation, or Value). Component will be named "Unknown Component".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".LAGdMe" name="project.bom_import.validation.warnings.package_name_too_long">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.package_name_too_long</source>
|
||||
<target>Line %line%: Package name "%package%" is unusually long. Please verify this is correct.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="wFF49kl" name="project.bom_import.validation.info.library_prefix_detected">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.info.library_prefix_detected</source>
|
||||
<target>Line %line%: Package "%package%" contains library prefix. This will be automatically removed during import.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="hEO2sxC" name="project.bom_import.validation.errors.non_numeric_field">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.non_numeric_field</source>
|
||||
<target>Line %line%: Field "%field%" contains non-numeric value "%value%". Please enter a valid number.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Ear_sUX" name="project.bom_import.validation.info.import_summary">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.info.import_summary</source>
|
||||
<target>Import summary: %total% total entries, %valid% valid, %invalid% with issues.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="SqJZ97A" name="project.bom_import.validation.errors.summary">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.summary</source>
|
||||
<target>Found %count% validation error(s) that must be fixed before import can proceed.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="s7dzFnp" name="project.bom_import.validation.warnings.summary">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.summary</source>
|
||||
<target>Found %count% warning(s). Please review these issues before proceeding.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2KaAHmS" name="project.bom_import.validation.info.all_valid">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.info.all_valid</source>
|
||||
<target>All entries passed validation successfully!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Lyb3BjK" name="project.bom_import.validation.summary">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.summary</source>
|
||||
<target>Validation Summary</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="DUM8GoE" name="project.bom_import.validation.total_entries">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.total_entries</source>
|
||||
<target>Total Entries</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="AtLGGU2" name="project.bom_import.validation.valid_entries">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.valid_entries</source>
|
||||
<target>Valid Entries</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="mgdn5v3" name="project.bom_import.validation.invalid_entries">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.invalid_entries</source>
|
||||
<target>Invalid Entries</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="qmJ5BfF" name="project.bom_import.validation.success_rate">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.success_rate</source>
|
||||
<target>Success Rate</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="QyDsrFV" name="project.bom_import.validation.errors.title">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.title</source>
|
||||
<target>Validation Errors</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="d.Mvu0a" name="project.bom_import.validation.errors.description">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.errors.description</source>
|
||||
<target>The following errors must be fixed before the import can proceed:</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MGFfKr." name="project.bom_import.validation.warnings.title">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.title</source>
|
||||
<target>Validation Warnings</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="tt4VxY6" name="project.bom_import.validation.warnings.description">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.warnings.description</source>
|
||||
<target>The following warnings should be reviewed before proceeding:</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="YuAdYeh" name="project.bom_import.validation.info.title">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.info.title</source>
|
||||
<target>Information</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="1pUfi7Q" name="project.bom_import.validation.details.title">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.details.title</source>
|
||||
<target>Detailed Validation Results</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="4Vv0Xns" name="project.bom_import.validation.details.line">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.details.line</source>
|
||||
<target>Line</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="RbvD2zF" name="project.bom_import.validation.details.status">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.details.status</source>
|
||||
<target>Status</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="iGtKkH_" name="project.bom_import.validation.details.messages">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.details.messages</source>
|
||||
<target>Messages</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="IgdgZd8" name="project.bom_import.validation.details.valid">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.details.valid</source>
|
||||
<target>Valid</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="lWQEtkq" name="project.bom_import.validation.details.invalid">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.details.invalid</source>
|
||||
<target>Invalid</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="tPn6Ind" name="project.bom_import.validation.all_valid">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.all_valid</source>
|
||||
<target>All entries are valid and ready for import!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="fzoGCaf" name="project.bom_import.validation.fix_errors">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.validation.fix_errors</source>
|
||||
<target>Please fix the validation errors before proceeding with the import.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nc9MqUc" name="project.bom_import.type.generic_csv">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>project.bom_import.type.generic_csv</source>
|
||||
<target>Generic CSV</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".N35Pvs" name="label_generator.update_profile">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>label_generator.update_profile</source>
|
||||
<target>Update profile with current settings</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ulTo6Aa" name="label_generator.profile_updated">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>label_generator.profile_updated</source>
|
||||
<target>Label profile updated successfully.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="7lgFa7I" name="settings.behavior.hompepage.items">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>settings.behavior.hompepage.items</source>
|
||||
<target>Homepage items</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="FsrRdkp" name="settings.behavior.homepage.items.help">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>settings.behavior.homepage.items.help</source>
|
||||
<target>The items to show at the homepage. Order can be changed via drag & drop.</target>
|
||||
<target><![CDATA[The items to show at the homepage. Order can be changed via drag & drop.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="CYw3_pS" name="settings.system.customization.showVersionOnHomepage">
|
||||
<segment state="translated">
|
||||
<segment>
|
||||
<source>settings.system.customization.showVersionOnHomepage</source>
|
||||
<target>Show Part-DB version on homepage</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="GLYhV9m" name="settings.behavior.part_info.extract_params_from_description">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.part_info.extract_params_from_description</source>
|
||||
<target>Extract parameters from part description</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aYOedkN" name="settings.behavior.part_info.extract_params_from_notes">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.part_info.extract_params_from_notes</source>
|
||||
<target>Extract parameters from part notes</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nCH2MW6" name="settings.ips.default_providers">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.default_providers</source>
|
||||
<target>Default search providers</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="TLNoCLT" name="settings.ips.general">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.general</source>
|
||||
<target>General settings</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="IDs2sXK" name="settings.ips.default_providers.help">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.default_providers.help</source>
|
||||
<target>These providers will be preselected for searches in part providers.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dv6eslZ" name="settings.behavior.table.preview_image_max_width">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.table.preview_image_max_width</source>
|
||||
<target>Preview image max width (px)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5bOoqEL" name="settings.behavior.table.preview_image_min_width">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.table.preview_image_min_width</source>
|
||||
<target>Preview image min width (px)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue