Compare commits

...

15 commits

Author SHA1 Message Date
Jan Böhmer
5e5df7e1fe New translations messages.en.xlf (English) 2025-10-18 00:44:05 +02:00
Jan Böhmer
028c64f6ec Merge remote-tracking branch 'origin/l10n_master' 2025-10-18 00:42:50 +02:00
Jan Böhmer
4088b141a6 New translations validators.en.xlf (Hungarian) 2025-10-17 22:49:41 +02:00
Jan Böhmer
445881bae9 New translations security.en.xlf (Hungarian) 2025-10-17 22:40:52 +02:00
Jan Böhmer
b3f7e445fe New translations messages.en.xlf (English) 2025-10-17 22:40:50 +02:00
Jan Böhmer
1f2a7b86e5 Fixed warning on PHP8.5 2025-10-17 22:39:58 +02:00
Jan Böhmer
ae787530ff Added an settings option to control what languages to show in the dropdown menu 2025-10-17 22:34:27 +02:00
Jan Böhmer
6e4ae15438 Do not remove associated Project BOM entries if part is deleted
Instead the part name is put into the name field. This fixes issue #1068
2025-10-17 21:30:40 +02:00
Jan Böhmer
e06d9da186 Load translations for CKEDITOR if language is not english
Some checks are pending
Build assets artifact / Build assets artifact (push) Waiting to run
Docker Image Build / docker (push) Waiting to run
Docker Image Build (FrankenPHP) / docker (push) Waiting to run
Static analysis / Static analysis (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, sqlite) (push) Waiting to run
2025-10-17 18:15:04 +02:00
Jan Böhmer
b035014867 Fixed english translation for placeholder plugin and use more modern translation system 2025-10-17 17:57:34 +02:00
Jan Böhmer
746aa53bc3 Fixed dropdown button visibility for ckeditor label placeholder plugin
This fixes issue #1056
2025-10-17 17:41:30 +02:00
Jan Böhmer
7b61a00f21 Updated ckeditor 2025-10-17 17:28:11 +02:00
Jan Böhmer
c735bfdb1d Made the titles of the settings categories translatable
Some checks are pending
Build assets artifact / Build assets artifact (push) Waiting to run
Docker Image Build / docker (push) Waiting to run
Docker Image Build (FrankenPHP) / docker (push) Waiting to run
Static analysis / Static analysis (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, sqlite) (push) Waiting to run
This fixes issue #1037
2025-10-17 00:35:01 +02:00
Jan Böhmer
41dbc27e27 Updated dependencies 2025-10-17 00:22:06 +02:00
Jan Böhmer
4d98605e93 Fixed problem of missing page breaks when generating multiple labels
This was caused by some behavior change introduced in dompdf 3.1.1
This fixes issue #1070
2025-10-17 00:21:26 +02:00
25 changed files with 1997 additions and 1302 deletions

View file

@ -20,11 +20,12 @@
import {Plugin} from 'ckeditor5';
require('./lang/de.js');
require('./lang/en.js');
import { addListToDropdown, createDropdown } from 'ckeditor5';
import {Collection} from 'ckeditor5';
import {Model} from 'ckeditor5';
import {UIModel} from 'ckeditor5';
export default class PartDBLabelUI extends Plugin {
init() {
@ -151,18 +152,28 @@ const PLACEHOLDERS = [
function getDropdownItemsDefinitions(t) {
const itemDefinitions = new Collection();
let first = true;
for ( const group of PLACEHOLDERS) {
//Add group header
itemDefinitions.add({
'type': 'separator',
model: new Model( {
withText: true,
})
});
//Skip separator for first group
if (!first) {
itemDefinitions.add({
'type': 'separator',
model: new UIModel( {
withText: true,
})
});
} else {
first = false;
}
itemDefinitions.add({
type: 'button',
model: new Model( {
model: new UIModel( {
label: t(group.label),
withText: true,
isEnabled: false,
@ -173,7 +184,7 @@ function getDropdownItemsDefinitions(t) {
for ( const entry of group.entries) {
const definition = {
type: 'button',
model: new Model( {
model: new UIModel( {
commandParam: entry[0],
label: t(entry[1]),
tooltip: entry[0],

View file

@ -17,15 +17,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// Make sure that the global object is defined. If not, define it.
window.CKEDITOR_TRANSLATIONS = window.CKEDITOR_TRANSLATIONS || {};
import {add} from "ckeditor5";
// Make sure that the dictionary for Polish translations exist.
window.CKEDITOR_TRANSLATIONS[ 'de' ] = window.CKEDITOR_TRANSLATIONS[ 'de' ] || {};
window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary = window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary || {};
// Extend the dictionary for Polish translations with your translations:
Object.assign( window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary, {
add( "de", {
'Label Placeholder': 'Label Platzhalter',
'Part': 'Bauteil',
@ -88,5 +82,4 @@ Object.assign( window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary, {
'Instance name': 'Instanzname',
'Target type': 'Zieltyp',
'URL of this Part-DB instance': 'URL dieser Part-DB Instanz',
} );
});

View file

@ -0,0 +1,84 @@
/*
* 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/>.
*/
import {add} from "ckeditor5";
add( "en", {
'Label Placeholder': 'Label placeholder',
'Part': 'Part',
'Database ID': 'Database ID',
'Part name': 'Part name',
'Category': 'Category',
'Category (Full path)': 'Category (full path)',
'Manufacturer': 'Manufacturer',
'Manufacturer (Full path)': 'Manufacturer (full path)',
'Footprint': 'Footprint',
'Footprint (Full path)': 'Footprint (full path)',
'Mass': 'Mass',
'Manufacturer Product Number (MPN)': 'Manufacturer Product Number (MPN)',
'Internal Part Number (IPN)': 'Internal Part Number (IPN)',
'Tags': 'Tags',
'Manufacturing status': 'Manufacturing status',
'Description': 'Description',
'Description (plain text)': 'Description (plain text)',
'Comment': 'Comment',
'Comment (plain text)': 'Comment (plain text)',
'Last modified datetime': 'Last modified datetime',
'Creation datetime': 'Creation datetime',
'IPN as QR code': 'IPN as QR code',
'IPN as Code 128 barcode': 'IPN as Code 128 barcode',
'IPN as Code 39 barcode': 'IPN as Code 39 barcode',
'Lot ID': 'Lot ID',
'Lot name': 'Lot name',
'Lot comment': 'Lot comment',
'Lot expiration date': 'Lot expiration date',
'Lot amount': 'Lot amount',
'Storage location': 'Storage location',
'Storage location (Full path)': 'Storage location (full path)',
'Full name of the lot owner': 'Full name of the lot owner',
'Username of the lot owner': 'Username of the lot owner',
'Barcodes': 'Barcodes',
'Content of the 1D barcodes (like Code 39)': 'Content of the 1D barcodes (like Code 39)',
'Content of the 2D barcodes (QR codes)': 'Content of the 2D barcodes (QR codes)',
'QR code linking to this element': 'QR code linking to this element',
'Code 128 barcode linking to this element': 'Code 128 barcode linking to this element',
'Code 39 barcode linking to this element': 'Code 39 barcode linking to this element',
'Code 93 barcode linking to this element': 'Code 93 barcode linking to this element',
'Datamatrix code linking to this element': 'Datamatrix code linking to this element',
'Location ID': 'Location ID',
'Name': 'Name',
'Full path': 'Full path',
'Parent name': 'Parent name',
'Parent full path': 'Parent full path',
'Full name of the location owner': 'Full name of the location owner',
'Username of the location owner': 'Username of the location owner',
'Username': 'Username',
'Username (including name)': 'Username (including name)',
'Current datetime': 'Current datetime',
'Current date': 'Current date',
'Current time': 'Current time',
'Instance name': 'Instance name',
'Target type': 'Target type',
'URL of this Part-DB instance': 'URL of this Part-DB instance',
} );

View file

@ -28,6 +28,26 @@ import {EditorWatchdog} from 'ckeditor5';
import "ckeditor5/ckeditor5.css";;
import "../../css/components/ckeditor.css";
const translationContext = require.context(
'ckeditor5/translations',
false,
/\.js$/
);
function loadTranslation(language) {
if (!language || language === 'en') {
return null;
}
const lang = language.slice(0, 2);
const path = `./${lang}.js`;
if (translationContext.keys().includes(path)) {
const module = translationContext(path);
return module.default;
} else {
return null;
}
}
/* stimulusFetch: 'lazy' */
export default class extends Controller {
connect() {
@ -63,6 +83,12 @@ export default class extends Controller {
}
}
//Load translations if not english
let translations = loadTranslation(language);
if (translations) {
config.translations = [translations];
}
const watchdog = new EditorWatchdog();
watchdog.setCreator((elementOrData, editorConfig) => {
return EDITOR_TYPE.create(elementOrData, editorConfig)

View file

@ -24,7 +24,7 @@
"doctrine/doctrine-bundle": "^2.0",
"doctrine/doctrine-migrations-bundle": "^3.0",
"doctrine/orm": "^3.2.0",
"dompdf/dompdf": "^v3.0.0",
"dompdf/dompdf": "^3.1.2",
"gregwar/captcha-bundle": "^2.1.0",
"hshn/base64-encoded-file": "^5.0",
"jbtronics/2fa-webauthn": "^3.0.0",

879
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -50,7 +50,7 @@
"bootbox": "^6.0.0",
"bootswatch": "^5.1.3",
"bs-custom-file-input": "^1.3.4",
"ckeditor5": "^46.0.0",
"ckeditor5": "^47.0.0",
"clipboard": "^2.0.4",
"compression-webpack-plugin": "^11.1.0",
"datatables.net": "^2.0.0",

View file

@ -15,7 +15,7 @@ trait ProjectTrait
/**
* @var Collection<ProjectBOMEntry> $project_bom_entries
*/
#[ORM\OneToMany(mappedBy: 'part', targetEntity: ProjectBOMEntry::class, cascade: ['remove'], orphanRemoval: true)]
#[ORM\OneToMany(targetEntity: ProjectBOMEntry::class, mappedBy: 'part')]
protected Collection $project_bom_entries;
/**

View file

@ -0,0 +1,59 @@
<?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\EntityListeners;
use App\Entity\Parts\Part;
use Doctrine\Bundle\DoctrineBundle\Attribute\AsEntityListener;
use Doctrine\ORM\Event\PreRemoveEventArgs;
/**
* If an part is deleted, this listener makes sure that all ProjectBOMEntries that reference this part, are updated
* to not reference the part anymore, but instead store the part name in the name field.
*/
#[AsEntityListener(event: "preRemove", entity: Part::class)]
class PartProjectBOMEntryUnlinkListener
{
public function preRemove(Part $part, PreRemoveEventArgs $event): void
{
// Iterate over all ProjectBOMEntries that use this part and put the part name into the name field
foreach ($part->getProjectBomEntries() as $bom_entry) {
$old_name = $bom_entry->getName();
if ($old_name === null || trim($old_name) === '') {
$bom_entry->setName($part->getName());
} else {
$bom_entry->setName($old_name . ' (' . $part->getName() . ')');
}
$old_comment = $bom_entry->getComment();
if ($old_comment === null || trim($old_comment) === '') {
$bom_entry->setComment('Part was deleted: ' . $part->getName());
} else {
$bom_entry->setComment($old_comment . "\n\n Part was deleted: " . $part->getName());
}
//Remove the part reference
$bom_entry->setPart(null);
}
}
}

View file

@ -0,0 +1,57 @@
<?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\Form\Type;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\LanguageType;
use Symfony\Component\Form\Extension\Core\Type\LocaleType;
use Symfony\Component\Intl\Languages;
use Symfony\Component\OptionsResolver\OptionsResolver;
class LanguageMenuEntriesType extends AbstractType
{
public function __construct(#[Autowire(param: 'partdb.locale_menu')] private readonly array $preferred_languages)
{
}
public function getParent(): string
{
return LanguageType::class;
}
public function configureOptions(OptionsResolver $resolver): void
{
$choices = [];
foreach ($this->preferred_languages as $lang_code) {
$choices[Languages::getName($lang_code)] = $lang_code;
}
$resolver->setDefaults([
'choice_loader' => null,
'choices' => $choices,
]);
}
}

View file

@ -38,6 +38,11 @@ class SIFormatter
*/
public function getMagnitude(float $value): int
{
//Check for zero, as log10(0) is undefined/gives -infinity, which leads to casting issues in PHP8.5+
if (0.0 === $value) {
return 0;
}
return (int) floor(log10(abs($value)));
}

View file

@ -26,7 +26,7 @@ namespace App\Settings;
use App\Settings\BehaviorSettings\BehaviorSettings;
use App\Settings\InfoProviderSystem\InfoProviderSettings;
use App\Settings\MiscSettings\MiscSettings;
use App\Settings\SystemSettings\AttachmentsSettings;
use App\Settings\SystemSettings\SystemSettings;
use Jbtronics\SettingsBundle\Settings\EmbeddedSettings;
use Jbtronics\SettingsBundle\Settings\Settings;
use Jbtronics\SettingsBundle\Settings\SettingsTrait;
@ -49,4 +49,4 @@ class AppSettings
#[EmbeddedSettings()]
public ?MiscSettings $miscSettings = null;
}
}

View file

@ -26,8 +26,9 @@ namespace App\Settings\BehaviorSettings;
use Jbtronics\SettingsBundle\Settings\EmbeddedSettings;
use Jbtronics\SettingsBundle\Settings\Settings;
use Jbtronics\SettingsBundle\Settings\SettingsTrait;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings]
#[Settings(label: new TM("settings.behavior"))]
class BehaviorSettings
{
use SettingsTrait;
@ -40,4 +41,4 @@ class BehaviorSettings
#[EmbeddedSettings]
public ?PartInfoSettings $partInfo = null;
}
}

View file

@ -27,8 +27,9 @@ use Jbtronics\SettingsBundle\Settings\EmbeddedSettings;
use Jbtronics\SettingsBundle\Settings\Settings;
use Jbtronics\SettingsBundle\Settings\SettingsParameter;
use Jbtronics\SettingsBundle\Settings\SettingsTrait;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings()]
#[Settings(label: new TM("settings.ips"))]
class InfoProviderSettings
{
use SettingsTrait;

View file

@ -25,8 +25,9 @@ namespace App\Settings\MiscSettings;
use Jbtronics\SettingsBundle\Settings\EmbeddedSettings;
use Jbtronics\SettingsBundle\Settings\Settings;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings]
#[Settings(label: new TM("settings.misc"))]
class MiscSettings
{
#[EmbeddedSettings]
@ -34,4 +35,4 @@ class MiscSettings
#[EmbeddedSettings]
public ?ExchangeRateSettings $exchangeRate = null;
}
}

View file

@ -23,9 +23,12 @@ declare(strict_types=1);
namespace App\Settings\SystemSettings;
use App\Form\Type\LanguageMenuEntriesType;
use App\Form\Type\LocaleSelectType;
use App\Settings\SettingsIcon;
use Jbtronics\SettingsBundle\Metadata\EnvVarMode;
use Jbtronics\SettingsBundle\ParameterTypes\ArrayType;
use Jbtronics\SettingsBundle\ParameterTypes\StringType;
use Jbtronics\SettingsBundle\Settings\Settings;
use Jbtronics\SettingsBundle\Settings\SettingsParameter;
use Jbtronics\SettingsBundle\Settings\SettingsTrait;
@ -60,4 +63,14 @@ class LocalizationSettings
envVar: "string:BASE_CURRENCY", envVarMode: EnvVarMode::OVERWRITE
)]
public string $baseCurrency = 'EUR';
}
#[SettingsParameter(type: ArrayType::class,
label: new TM("settings.system.localization.language_menu_entries"),
description: new TM("settings.system.localization.language_menu_entries.description"),
options: ['type' => StringType::class],
formType: LanguageMenuEntriesType::class,
formOptions: ['multiple' => true, 'required' => false, 'ordered' => true],
)]
#[Assert\All([new Assert\Locale()])]
public array $languageMenuEntries = [];
}

View file

@ -21,17 +21,13 @@
declare(strict_types=1);
namespace App\Settings;
namespace App\Settings\SystemSettings;
use App\Settings\SystemSettings\AttachmentsSettings;
use App\Settings\SystemSettings\CustomizationSettings;
use App\Settings\SystemSettings\HistorySettings;
use App\Settings\SystemSettings\LocalizationSettings;
use App\Settings\SystemSettings\PrivacySettings;
use Jbtronics\SettingsBundle\Settings\EmbeddedSettings;
use Jbtronics\SettingsBundle\Settings\Settings;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings]
#[Settings(label: new TM("settings.system"))]
class SystemSettings
{
#[EmbeddedSettings()]
@ -48,4 +44,4 @@ class SystemSettings
#[EmbeddedSettings()]
public ?HistorySettings $history = null;
}
}

View file

@ -22,9 +22,14 @@
<div class="d-none" data-title="{{ current_page_title|trim|raw }}" {{ stimulus_controller('turbo/title') }}></div>
<div class="d-none" {{ stimulus_controller('turbo/locale_menu') }}>
{% for locale in locale_menu %}
{% set locales = settings_instance('localization').languageMenuEntries %}
{% if locales is empty %}
{% set locales = locale_menu %}
{% endif %}
{% for locale in locales %}
<a class="dropdown-item" data-turbo="false" data-turbo-frame="_top" href="{{ path(app.request.attributes.get('_route'),
app.request.query.all|merge(app.request.attributes.get('_route_params'))|merge({'_locale': locale})) }}">
{{ locale|language_name }} ({{ locale|upper }})</a>
{% endfor %}
</div>
</div>

View file

@ -66,12 +66,6 @@
{% block javascripts %}
{{ encore_entry_script_tags('app') }}
{{ encore_entry_script_tags('webauthn_tfa') }}
{# load translation files for ckeditor #}
{% set two_chars_locale = app.request.locale|default("en")|slice(0,2) %}
{% if two_chars_locale != "en" %}
<script src="{{ asset("build/ckeditor_translations/" ~ two_chars_locale ~ ".js") }}"></script>
{% endif %}
{% endblock %}
</head>
<body data-base-url="{{ path('homepage', {'_locale': app.request.locale}) }}" data-locale="{{ app.request.locale|default("en")|slice(0,2) }}">

View file

@ -16,15 +16,18 @@
</head>
<body>
{% for element in elements %}
{# The page div ensures the page breaks, while the page-inner elements restrict the content to the page size. Sine dompdf 3.1.1 we cannot apply the position: absolute; to the page element directly. #}
<div class="page">
{% if options.barcodeType.none %}
{% include "label_system/labels/label_page_none.html.twig" %}
{% elseif options.barcodeType.is2D() %}
{% include "label_system/labels/label_page_qr.html.twig" %}
{% elseif options.barcodeType.is1D() %}
{% include "label_system/labels/label_page_1d.html.twig" %}
{% endif %}
<div class="page-inner">
{% if options.barcodeType.none %}
{% include "label_system/labels/label_page_none.html.twig" %}
{% elseif options.barcodeType.is2D() %}
{% include "label_system/labels/label_page_qr.html.twig" %}
{% elseif options.barcodeType.is1D() %}
{% include "label_system/labels/label_page_1d.html.twig" %}
{% endif %}
</div>
</div>
{% endfor %}
</body>
</html>
</html>

View file

@ -3,17 +3,31 @@
}
.page {
/** We cannot apply the position: absolute trick here, because then dompdf will not respect the page break anymore **/
page-break-inside: avoid;
page-break-before: avoid;
page-break-after: always;
overflow: hidden;
width: 100%;
height: 100%;
}
.page-inner {
/* Absolute position prevents automatic page breaks */
/*position: absolute;*/
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
page-break-inside: avoid;
page-break-before: avoid;
page-break-after: avoid;
}
/* Last page should not break */

View file

@ -14214,5 +14214,17 @@ Please note, that you can not impersonate a disabled user. If you try you will g
<target>Misc</target>
</segment>
</unit>
<unit id="mNLyYXa" name="settings.system.localization.language_menu_entries">
<segment state="translated">
<source>settings.system.localization.language_menu_entries</source>
<target>Language menu entries</target>
</segment>
</unit>
<unit id="Ej2znKK" name="settings.system.localization.language_menu_entries.description">
<segment state="translated">
<source>settings.system.localization.language_menu_entries.description</source>
<target>The languages to show in the language drop-down menu. Order can be changed via drag &amp; drop. Leave empty to show all available languages.</target>
</segment>
</unit>
</file>
</xliff>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="hu">
<file id="security.en">
<unit id="GrLNa9P" name="user.login_error.user_disabled">
<segment state="translated">
<source>user.login_error.user_disabled</source>
<target>A fiókod le van tiltva! Lépj kapcsolatba egy adminisztrátorral, ha úgy gondolod, hogy ez hiba.</target>
</segment>
</unit>
<unit id="IFQ5XrG" name="saml.error.cannot_login_local_user_per_saml">
<segment state="translated">
<source>saml.error.cannot_login_local_user_per_saml</source>
<target>Nem tudsz helyi felhasználóként bejelentkezni SSO-n keresztül! Használd a helyi felhasználói jelszavad helyette.</target>
</segment>
</unit>
<unit id="wOYPZmb" name="saml.error.cannot_login_saml_user_locally">
<segment state="translated">
<source>saml.error.cannot_login_saml_user_locally</source>
<target>Nem tudsz helyi hitelesítéssel bejelentkezni SAML felhasználóként! Használd az SSO bejelentkezést helyette.</target>
</segment>
</unit>
</file>
</xliff>

View file

@ -0,0 +1,369 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="hu">
<file id="validators.en">
<unit id="cRbk.cm" name="part.master_attachment.must_be_picture">
<notes>
<note category="file-source" priority="1">Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Attachments\AttachmentType.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Base\AbstractCompany.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Devices\Device.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Category.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Footprint.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Manufacturer.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\MeasurementUnit.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Part.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Part.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Storelocation.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Supplier.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\PriceInformations\Currency.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\UserSystem\Group.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
<note priority="1">Part-DB1\src\Entity\Attachments\AttachmentType.php:0</note>
<note priority="1">Part-DB1\src\Entity\Base\AbstractCompany.php:0</note>
<note priority="1">Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0</note>
<note priority="1">Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0</note>
<note priority="1">Part-DB1\src\Entity\Devices\Device.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Category.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Footprint.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Manufacturer.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\MeasurementUnit.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Part.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Storelocation.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Supplier.php:0</note>
<note priority="1">Part-DB1\src\Entity\PriceInformations\Currency.php:0</note>
<note priority="1">Part-DB1\src\Entity\UserSystem\Group.php:0</note>
<note priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
</notes>
<segment state="translated">
<source>part.master_attachment.must_be_picture</source>
<target>Az előnézeti mellékletnek érvényes képnek kell lennie!</target>
</segment>
</unit>
<unit id="v8HkcJB" name="structural.entity.unique_name">
<notes>
<note category="file-source" priority="1">Part-DB1\src\Entity\Attachments\AttachmentType.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Base\AbstractCompany.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Devices\Device.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Category.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Footprint.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Manufacturer.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\MeasurementUnit.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Storelocation.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parts\Supplier.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\PriceInformations\Currency.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\UserSystem\Group.php:0</note>
<note priority="1">Part-DB1\src\Entity\Attachments\AttachmentType.php:0</note>
<note priority="1">Part-DB1\src\Entity\Base\AbstractCompany.php:0</note>
<note priority="1">Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0</note>
<note priority="1">Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0</note>
<note priority="1">Part-DB1\src\Entity\Devices\Device.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Category.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Footprint.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Manufacturer.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\MeasurementUnit.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Storelocation.php:0</note>
<note priority="1">Part-DB1\src\Entity\Parts\Supplier.php:0</note>
<note priority="1">Part-DB1\src\Entity\PriceInformations\Currency.php:0</note>
<note priority="1">Part-DB1\src\Entity\UserSystem\Group.php:0</note>
<note priority="1">src\Entity\AttachmentType.php:0</note>
<note priority="1">src\Entity\Category.php:0</note>
<note priority="1">src\Entity\Company.php:0</note>
<note priority="1">src\Entity\Device.php:0</note>
<note priority="1">src\Entity\Footprint.php:0</note>
<note priority="1">src\Entity\Group.php:0</note>
<note priority="1">src\Entity\Manufacturer.php:0</note>
<note priority="1">src\Entity\PartsContainingDBElement.php:0</note>
<note priority="1">src\Entity\Storelocation.php:0</note>
<note priority="1">src\Entity\StructuralDBElement.php:0</note>
<note priority="1">src\Entity\Supplier.php:0</note>
</notes>
<segment state="translated">
<source>structural.entity.unique_name</source>
<target>Egy elem ezzel a névvel már létezik ezen a szinten!</target>
</segment>
</unit>
<unit id="dW7b2B_" name="parameters.validator.min_lesser_typical">
<notes>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\AbstractParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\CategoryParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\DeviceParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\FootprintParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\GroupParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\PartParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note>
</notes>
<segment state="translated">
<source>parameters.validator.min_lesser_typical</source>
<target>Az értéknek kisebbnek vagy egyenlőnek kell lennie a tipikus értékkel ({{ compared_value }}).</target>
</segment>
</unit>
<unit id="Yfp2uC5" name="parameters.validator.min_lesser_max">
<notes>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\AbstractParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\CategoryParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\DeviceParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\FootprintParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\GroupParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\PartParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note>
</notes>
<segment state="translated">
<source>parameters.validator.min_lesser_max</source>
<target>Az értéknek kisebbnek kell lennie a maximális értéknél ({{ compared_value }}).</target>
</segment>
</unit>
<unit id="P6b.8Ou" name="parameters.validator.max_greater_typical">
<notes>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\AbstractParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\CategoryParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\DeviceParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\FootprintParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\GroupParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\PartParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note>
</notes>
<segment state="translated">
<source>parameters.validator.max_greater_typical</source>
<target>Az értéknek nagyobbnak vagy egyenlőnek kell lennie a tipikus értéknél ({{ compared_value }}).</target>
</segment>
</unit>
<unit id="P41193Y" name="validator.user.username_already_used">
<notes>
<note category="file-source" priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
<note priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
</notes>
<segment state="translated">
<source>validator.user.username_already_used</source>
<target>Egy felhasználó ezzel a névvel már létezik</target>
</segment>
</unit>
<unit id="EKPQiyf" name="user.invalid_username">
<notes>
<note category="file-source" priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
<note priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
</notes>
<segment state="translated">
<source>user.invalid_username</source>
<target>A felhasználónév csak betűket, számokat, aláhúzásokat, pontokat, pluszokat vagy mínuszokat tartalmazhat és nem kezdődhet @ jellel!</target>
</segment>
</unit>
<unit id="_v.DMg." name="validator.noneofitschild.self">
<notes>
<note category="state" priority="1">obsolete</note>
</notes>
<segment state="translated">
<source>validator.noneofitschild.self</source>
<target>Egy elem nem lehet a saját szülője!</target>
</segment>
</unit>
<unit id="W90LyFQ" name="validator.noneofitschild.children">
<notes>
<note category="state" priority="1">obsolete</note>
</notes>
<segment state="translated">
<source>validator.noneofitschild.children</source>
<target>Nem rendelhetsz gyerek elemet szülőnek (ez hurkokat okozna)!</target>
</segment>
</unit>
<unit id="GAUS.LK" name="validator.select_valid_category">
<segment state="translated">
<source>validator.select_valid_category</source>
<target>Kérjük válassz egy érvényes kategóriát!</target>
</segment>
</unit>
<unit id="h6qELde" name="validator.part_lot.only_existing">
<segment state="translated">
<source>validator.part_lot.only_existing</source>
<target>Nem lehet új alkatrészeket hozzáadni ehhez a helyhez, mivel "Csak Meglévő" jelölésű</target>
</segment>
</unit>
<unit id="Prriyy0" name="validator.part_lot.location_full.no_increase">
<segment state="translated">
<source>validator.part_lot.location_full.no_increase</source>
<target>A hely tele van. A mennyiség nem növelhető (az új értéknek kisebbnek kell lennie, mint {{ old_amount }}).</target>
</segment>
</unit>
<unit id="eeEjB4s" name="validator.part_lot.location_full">
<segment state="translated">
<source>validator.part_lot.location_full</source>
<target>A hely tele van. Nem lehet új alkatrészeket hozzáadni.</target>
</segment>
</unit>
<unit id="2yWi8eP" name="validator.part_lot.single_part">
<segment state="translated">
<source>validator.part_lot.single_part</source>
<target>Ez a hely csak egyetlen alkatrészt tartalmazhat és már tele van!</target>
</segment>
</unit>
<unit id="A.TFhbb" name="validator.attachment.must_not_be_null">
<segment state="translated">
<source>validator.attachment.must_not_be_null</source>
<target>Ki kell választanod egy melléklet típust!</target>
</segment>
</unit>
<unit id=".lqKoij" name="validator.orderdetail.supplier_must_not_be_null">
<segment state="translated">
<source>validator.orderdetail.supplier_must_not_be_null</source>
<target>Ki kell választanod egy beszállítót!</target>
</segment>
</unit>
<unit id="bcNZzK." name="validator.measurement_unit.use_si_prefix_needs_unit">
<segment state="translated">
<source>validator.measurement_unit.use_si_prefix_needs_unit</source>
<target>Az SI előtagok engedélyezéséhez be kell állítanod egy egység szimbólumot!</target>
</segment>
</unit>
<unit id="gZ5FFL1" name="part.ipn.must_be_unique">
<segment state="translated">
<source>part.ipn.must_be_unique</source>
<target>A belső alkatrész számnak egyedinek kell lennie. {{ value }} már használatban van!</target>
</segment>
</unit>
<unit id="P31Yg.d" name="validator.project.bom_entry.name_or_part_needed">
<segment state="translated">
<source>validator.project.bom_entry.name_or_part_needed</source>
<target>Ki kell választanod egy alkatrészt az alkatrész BOM bejegyzéshez vagy be kell állítanod egy nevet a nem-alkatrész BOM bejegyzéshez.</target>
</segment>
</unit>
<unit id="5CEup_N" name="project.bom_entry.name_already_in_bom">
<segment state="translated">
<source>project.bom_entry.name_already_in_bom</source>
<target>Már létezik egy BOM bejegyzés ezzel a névvel!</target>
</segment>
</unit>
<unit id="jB3B50E" name="project.bom_entry.part_already_in_bom">
<segment state="translated">
<source>project.bom_entry.part_already_in_bom</source>
<target>Ez az alkatrész már létezik a BOM-ban!</target>
</segment>
</unit>
<unit id="NdkzP1n" name="project.bom_entry.mountnames_quantity_mismatch">
<segment state="translated">
<source>project.bom_entry.mountnames_quantity_mismatch</source>
<target>A szerelési nevek számának meg kell egyeznie a BOM mennyiségével!</target>
</segment>
</unit>
<unit id="8teRCgR" name="project.bom_entry.can_not_add_own_builds_part">
<segment state="translated">
<source>project.bom_entry.can_not_add_own_builds_part</source>
<target>Nem adhatsz hozzá egy projekt saját építési alkatrészét a BOM-hoz.</target>
</segment>
</unit>
<unit id="asBxPxe" name="project.bom_has_to_include_all_subelement_parts">
<segment state="translated">
<source>project.bom_has_to_include_all_subelement_parts</source>
<target>A projekt BOM-nak tartalmaznia kell az összes alprojekt építési alkatrészét. A %part_name% alkatrész a %project_name% projektből hiányzik!</target>
</segment>
</unit>
<unit id="uxaE9Ct" name="project.bom_entry.price_not_allowed_on_parts">
<segment state="translated">
<source>project.bom_entry.price_not_allowed_on_parts</source>
<target>Az árak nem engedélyezettek a BOM bejegyzésekben, amelyek egy alkatrészhez kapcsolódnak. Határozd meg az árat az alkatrészen helyette.</target>
</segment>
</unit>
<unit id="xZ68Nzl" name="validator.project_build.lot_bigger_than_needed">
<segment state="translated">
<source>validator.project_build.lot_bigger_than_needed</source>
<target>Több mennyiséget választottál ki kivonásra, mint amennyire szükség van! Távolítsd el a szükségtelen mennyiséget.</target>
</segment>
</unit>
<unit id="68_.V_X" name="validator.project_build.lot_smaller_than_needed">
<segment state="translated">
<source>validator.project_build.lot_smaller_than_needed</source>
<target>Kevesebb mennyiséget választottál ki kivonásra, mint amennyire szükség van az építéshez! Adj hozzá további mennyiséget.</target>
</segment>
</unit>
<unit id="yZGS8uZ" name="part.name.must_match_category_regex">
<segment state="translated">
<source>part.name.must_match_category_regex</source>
<target>Az alkatrész név nem egyezik a kategória által megadott reguláris kifejezéssel: %regex%</target>
</segment>
</unit>
<unit id="Q8wP5Jd" name="validator.attachment.name_not_blank">
<segment state="translated">
<source>validator.attachment.name_not_blank</source>
<target>Állíts be egy értéket itt, vagy tölts fel egy fájlt, hogy automatikusan használja a fájlnevet a melléklet neveként.</target>
</segment>
</unit>
<unit id="DH0IkNR" name="validator.part_lot.owner_must_match_storage_location_owner">
<segment state="translated">
<source>validator.part_lot.owner_must_match_storage_location_owner</source>
<target>Ennek a tételnek a tulajdonosának meg kell egyeznie a kiválasztott tárolási hely tulajdonosával (%owner_name%)!</target>
</segment>
</unit>
<unit id="TzySicw" name="validator.part_lot.owner_must_not_be_anonymous">
<segment state="translated">
<source>validator.part_lot.owner_must_not_be_anonymous</source>
<target>A tétel tulajdonosa nem lehet az anonim felhasználó!</target>
</segment>
</unit>
<unit id="GthNWUb" name="validator.part_association.must_set_an_value_if_type_is_other">
<segment state="translated">
<source>validator.part_association.must_set_an_value_if_type_is_other</source>
<target>Ha a típust "egyéb"-re állítod, akkor be kell állítanod egy leíró értéket hozzá!</target>
</segment>
</unit>
<unit id="Be4Im81" name="validator.part_association.part_cannot_be_associated_with_itself">
<segment state="translated">
<source>validator.part_association.part_cannot_be_associated_with_itself</source>
<target>Egy alkatrész nem társítható önmagával!</target>
</segment>
</unit>
<unit id="q5Ej6Xm" name="validator.part_association.already_exists">
<segment state="translated">
<source>validator.part_association.already_exists</source>
<target>A társítás ezzel az alkatrésszel már létezik!</target>
</segment>
</unit>
<unit id="HbI5bga" name="validator.part_lot.vendor_barcode_must_be_unique">
<segment state="translated">
<source>validator.part_lot.vendor_barcode_must_be_unique</source>
<target>Ez a beszállítói vonalkód érték már használatban volt egy másik tételben. A vonalkódnak egyedinek kell lennie!</target>
</segment>
</unit>
<unit id="ufQJh7E" name="validator.year_2038_bug_on_32bit">
<segment state="translated">
<source>validator.year_2038_bug_on_32bit</source>
<target>Technikai korlátok miatt nem lehet dátumokat kiválasztani 2038-01-19 után 32 bites rendszereken!</target>
</segment>
</unit>
<unit id="89nojXY" name="validator.fileSize.invalidFormat">
<segment state="translated">
<source>validator.fileSize.invalidFormat</source>
<target>Érvénytelen fájlméret formátum. Használj egész számot plusz K, M, G utótagot Kilo, Mega vagy Gigabyte-okhoz.</target>
</segment>
</unit>
<unit id="iXcU7ce" name="validator.invalid_range">
<segment state="translated">
<source>validator.invalid_range</source>
<target>A megadott tartomány nem érvényes!</target>
</segment>
</unit>
<unit id="m4gp2P_" name="validator.google_code.wrong_code">
<segment state="translated">
<source>validator.google_code.wrong_code</source>
<target>Érvénytelen kód. Ellenőrizd, hogy az autentikátor alkalmazásod megfelelően van beállítva és hogy mind a szerver, mind az autentikációs eszköz időzítése helyes.</target>
</segment>
</unit>
</file>
</xliff>

1645
yarn.lock

File diff suppressed because it is too large Load diff