Added translations for info provider settings fields

This commit is contained in:
Jan Böhmer 2024-05-10 00:55:14 +02:00
parent 08ae313dfe
commit 4876068cce
10 changed files with 1706 additions and 1514 deletions

49
composer.lock generated
View file

@ -1966,23 +1966,26 @@
}, },
{ {
"name": "doctrine/sql-formatter", "name": "doctrine/sql-formatter",
"version": "1.2.0", "version": "1.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/sql-formatter.git", "url": "https://github.com/doctrine/sql-formatter.git",
"reference": "a321d114e0a18e6497f8a2cd6f890e000cc17ecc" "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/a321d114e0a18e6497f8a2cd6f890e000cc17ecc", "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d1ac84aef745c69ea034929eb6d65a6908b675cc",
"reference": "a321d114e0a18e6497f8a2cd6f890e000cc17ecc", "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1 || ^8.0" "php": "^8.1"
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.4" "doctrine/coding-standard": "^12",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^10.5",
"vimeo/psalm": "^5.24"
}, },
"bin": [ "bin": [
"bin/sql-formatter" "bin/sql-formatter"
@ -2012,9 +2015,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/doctrine/sql-formatter/issues", "issues": "https://github.com/doctrine/sql-formatter/issues",
"source": "https://github.com/doctrine/sql-formatter/tree/1.2.0" "source": "https://github.com/doctrine/sql-formatter/tree/1.4.0"
}, },
"time": "2023-08-16T21:49:04+00:00" "time": "2024-05-08T08:12:09+00:00"
}, },
{ {
"name": "dompdf/dompdf", "name": "dompdf/dompdf",
@ -3333,12 +3336,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/jbtronics/settings-bundle.git", "url": "https://github.com/jbtronics/settings-bundle.git",
"reference": "9ebc8947246dfc21e9955bd449786919181d7f5c" "reference": "61263e08065e2610efde78a28508fa978036d695"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/9ebc8947246dfc21e9955bd449786919181d7f5c", "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/61263e08065e2610efde78a28508fa978036d695",
"reference": "9ebc8947246dfc21e9955bd449786919181d7f5c", "reference": "61263e08065e2610efde78a28508fa978036d695",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3411,7 +3414,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2024-05-06T21:20:57+00:00" "time": "2024-05-09T22:12:07+00:00"
}, },
{ {
"name": "jfcherng/php-color-output", "name": "jfcherng/php-color-output",
@ -5173,16 +5176,16 @@
}, },
{ {
"name": "paragonie/constant_time_encoding", "name": "paragonie/constant_time_encoding",
"version": "v2.6.3", "version": "v2.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git", "url": "https://github.com/paragonie/constant_time_encoding.git",
"reference": "58c3f47f650c94ec05a151692652a868995d2938" "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
"reference": "58c3f47f650c94ec05a151692652a868995d2938", "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5236,7 +5239,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues", "issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding" "source": "https://github.com/paragonie/constant_time_encoding"
}, },
"time": "2022-06-14T06:56:20+00:00" "time": "2024-05-08T12:18:48+00:00"
}, },
{ {
"name": "paragonie/random_compat", "name": "paragonie/random_compat",
@ -16696,12 +16699,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git", "url": "https://github.com/Roave/SecurityAdvisories.git",
"reference": "386924e51b2e98d13dcc88bb530807046edbda90" "reference": "99ba3993d1441627081b78b6a844776fc9ef264f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/386924e51b2e98d13dcc88bb530807046edbda90", "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/99ba3993d1441627081b78b6a844776fc9ef264f",
"reference": "386924e51b2e98d13dcc88bb530807046edbda90", "reference": "99ba3993d1441627081b78b6a844776fc9ef264f",
"shasum": "" "shasum": ""
}, },
"conflict": { "conflict": {
@ -16983,7 +16986,7 @@
"kelvinmo/simplexrd": "<3.1.1", "kelvinmo/simplexrd": "<3.1.1",
"kevinpapst/kimai2": "<1.16.7", "kevinpapst/kimai2": "<1.16.7",
"khodakhah/nodcms": "<=3", "khodakhah/nodcms": "<=3",
"kimai/kimai": "<2.13", "kimai/kimai": "<2.16",
"kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4",
"klaviyo/magento2-extension": ">=1,<3", "klaviyo/magento2-extension": ">=1,<3",
"knplabs/knp-snappy": "<=1.4.2", "knplabs/knp-snappy": "<=1.4.2",
@ -17148,7 +17151,7 @@
"pimcore/demo": "<10.3", "pimcore/demo": "<10.3",
"pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/ecommerce-framework-bundle": "<1.0.10",
"pimcore/perspective-editor": "<1.5.1", "pimcore/perspective-editor": "<1.5.1",
"pimcore/pimcore": "<11.2.3", "pimcore/pimcore": "<11.1.6.5-dev|>=11.2,<11.2.3",
"pixelfed/pixelfed": "<0.11.11", "pixelfed/pixelfed": "<0.11.11",
"plotly/plotly.js": "<2.25.2", "plotly/plotly.js": "<2.25.2",
"pocketmine/bedrock-protocol": "<8.0.2", "pocketmine/bedrock-protocol": "<8.0.2",
@ -17480,7 +17483,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-05-06T15:04:21+00:00" "time": "2024-05-08T14:04:15+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",

View file

@ -26,15 +26,16 @@ namespace App\Settings\InfoProviderSystem;
use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\Settings;
use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsParameter;
use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Jbtronics\SettingsBundle\Settings\SettingsTrait;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings] #[Settings(label: new TM("settings.ips.element14"))]
class Element14Settings class Element14Settings
{ {
use SettingsTrait; use SettingsTrait;
#[SettingsParameter(envVar: "PROVIDER_ELEMENT14_KEY")] #[SettingsParameter(label: new TM("settings.ips.element14.apiKey"), description: new TM("settings.ips.element14.apiKey.help"), formOptions: ["help_html" => true], envVar: "PROVIDER_ELEMENT14_KEY")]
public ?string $apiKey = null; public ?string $apiKey = null;
#[SettingsParameter(envVar: "PROVIDER_ELEMENT14_STORE_ID")] #[SettingsParameter(label: new TM("settings.ips.element14.storeId"), description: new TM("settings.ips.element14.storeId.help"), formOptions: ["help_html" => true], envVar: "PROVIDER_ELEMENT14_STORE_ID")]
public string $storeId = "de.farnell.com"; public string $storeId = "de.farnell.com";
} }

View file

@ -32,9 +32,6 @@ class InfoProviderSettings
{ {
use SettingsTrait; use SettingsTrait;
#[EmbeddedSettings]
public ?LCSCSettings $lcsc = null;
#[EmbeddedSettings] #[EmbeddedSettings]
public ?MouserSettings $mouser = null; public ?MouserSettings $mouser = null;
@ -43,4 +40,7 @@ class InfoProviderSettings
#[EmbeddedSettings] #[EmbeddedSettings]
public ?Element14Settings $element14 = null; public ?Element14Settings $element14 = null;
#[EmbeddedSettings]
public ?LCSCSettings $lcsc = null;
} }

View file

@ -28,16 +28,17 @@ use Jbtronics\SettingsBundle\Settings\SettingsParameter;
use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Jbtronics\SettingsBundle\Settings\SettingsTrait;
use Symfony\Component\Form\Extension\Core\Type\CurrencyType; use Symfony\Component\Form\Extension\Core\Type\CurrencyType;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings] #[Settings(label: new TM("settings.ips.lcsc"), description: new TM("settings.ips.lcsc.help"))]
class LCSCSettings class LCSCSettings
{ {
use SettingsTrait; use SettingsTrait;
#[SettingsParameter(label: "Enable LCSC provider", envVar: "bool:PROVIDER_LCSC_ENABLED")] #[SettingsParameter(label: new TM("settings.ips.lcsc.enabled"), envVar: "bool:PROVIDER_LCSC_ENABLED")]
public bool $enabled = false; public bool $enabled = false;
#[SettingsParameter(label: "LCSC Currency", description: "The currency to retrieve prices from LCSC", formType: CurrencyType::class, envVar: "string:PROVIDER_LCSC_CURRENCY")] #[SettingsParameter(label: new TM("settings.ips.lcsc.currency"), formType: CurrencyType::class, envVar: "string:PROVIDER_LCSC_CURRENCY")]
#[Assert\Currency()] #[Assert\Currency()]
public string $currency = 'EUR'; public string $currency = 'EUR';
} }

View file

@ -23,10 +23,25 @@ declare(strict_types=1);
namespace App\Settings\InfoProviderSystem; namespace App\Settings\InfoProviderSystem;
enum MouserSearchOptions: string use Symfony\Contracts\Translation\TranslatableInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
enum MouserSearchOptions: string implements TranslatableInterface
{ {
case NONE = "None"; case NONE = "None";
case ROHS = "Rohs"; case ROHS = "Rohs";
case IN_STOCK = "InStock"; case IN_STOCK = "InStock";
case ROHS_AND_INSTOCK = "RohsAndInStock"; case ROHS_AND_INSTOCK = "RohsAndInStock";
public function trans(TranslatorInterface $translator, ?string $locale = null): string
{
$key = match($this) {
self::NONE => "settings.ips.mouser.searchOptions.none",
self::ROHS => "settings.ips.mouser.searchOptions.rohs",
self::IN_STOCK => "settings.ips.mouser.searchOptions.inStock",
self::ROHS_AND_INSTOCK => "settings.ips.mouser.searchOptions.rohsAndInStock",
};
return $translator->trans($key, locale: $locale);
}
} }

View file

@ -26,24 +26,26 @@ namespace App\Settings\InfoProviderSystem;
use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\Settings;
use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsParameter;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings] #[Settings(label: new TM("settings.ips.mouser"))]
class MouserSettings class MouserSettings
{ {
#[SettingsParameter(envVar: "PROVIDER_MOUSER_KEY")] #[SettingsParameter(label: new TM("settings.ips.mouser.apiKey"), description: new TM("settings.ips.mouser.apiKey.help"), formOptions: ["help_html" => true], envVar: "PROVIDER_MOUSER_KEY")]
public ?string $apiKey = null; public ?string $apiKey = null;
/** @var int The number of results to get from Mouser while searching (please note that this value is max 50) */ /** @var int The number of results to get from Mouser while searching (please note that this value is max 50) */
#[SettingsParameter(envVar: "int:PROVIDER_MOUSER_SEARCH_LIMIT")] #[SettingsParameter(label: new TM("settings.ips.mouser.searchLimit"), description: new TM("settings.ips.mouser.searchLimit.help"), envVar: "int:PROVIDER_MOUSER_SEARCH_LIMIT")]
#[Assert\Range(min: 1, max: 50)] #[Assert\Range(min: 1, max: 50)]
public int $searchLimit = 50; public int $searchLimit = 50;
/** @var MouserSearchOptions Filter search results by RoHS compliance and stock availability */ /** @var MouserSearchOptions Filter search results by RoHS compliance and stock availability */
#[SettingsParameter(envVar: "PROVIDER_MOUSER_SEARCH_OPTION", envVarMapper: [self::class, "mapSearchOptionEnvVar"])] #[SettingsParameter(label: new TM("settings.ips.mouser.searchOptions"), description: new TM("settings.ips.mouser.searchOptions.help"), envVar: "PROVIDER_MOUSER_SEARCH_OPTION", envVarMapper: [self::class, "mapSearchOptionEnvVar"])]
public MouserSearchOptions $searchOption = MouserSearchOptions::NONE; public MouserSearchOptions $searchOption = MouserSearchOptions::NONE;
/** @var bool It is recommended to leave this set to 'true'. The option is not really documented by Mouser: /** @var bool It is recommended to leave this set to 'true'. The option is not really documented by Mouser:
* Used when searching for keywords in the language specified when you signed up for Search API. */ * Used when searching for keywords in the language specified when you signed up for Search API. */
//TODO: Put this into some expert mode only
#[SettingsParameter(envVar: "bool:PROVIDER_MOUSER_SEARCH_WITH_SIGNUP_LANGUAGE")] #[SettingsParameter(envVar: "bool:PROVIDER_MOUSER_SEARCH_WITH_SIGNUP_LANGUAGE")]
public bool $searchWithSignUpLanguage = true; public bool $searchWithSignUpLanguage = true;

View file

@ -30,32 +30,34 @@ use Symfony\Component\Form\Extension\Core\Type\CountryType;
use Symfony\Component\Form\Extension\Core\Type\CurrencyType; use Symfony\Component\Form\Extension\Core\Type\CurrencyType;
use Symfony\Component\Form\Extension\Core\Type\LanguageType; use Symfony\Component\Form\Extension\Core\Type\LanguageType;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings(label: "TME settings", description: "Settings for the TME API")] #[Settings(label: new TM("settings.ips.tme"))]
class TMESettings class TMESettings
{ {
use SettingsTrait; use SettingsTrait;
private const SUPPORTED_CURRENCIES = ["EUR", "USD", "PLN", "GBP"]; private const SUPPORTED_CURRENCIES = ["EUR", "USD", "PLN", "GBP"];
#[SettingsParameter(envVar: "PROVIDER_TME_KEY")] #[SettingsParameter(label: new TM("settings.ips.tme.token"),
description: new TM("settings.ips.tme.token.help"), formOptions: ["help_html" => true], envVar: "PROVIDER_TME_KEY")]
public ?string $apiToken = null; public ?string $apiToken = null;
#[SettingsParameter(envVar: "PROVIDER_TME_SECRET")] #[SettingsParameter(label: new TM("settings.ips.tme.secret"), envVar: "PROVIDER_TME_SECRET")]
public ?string $apiSecret = null; public ?string $apiSecret = null;
#[SettingsParameter(formType: CurrencyType::class, formOptions: ["preferred_choices" => self::SUPPORTED_CURRENCIES], envVar: "PROVIDER_TME_CURRENCY")] #[SettingsParameter(label: new TM("settings.ips.tme.currency"), formType: CurrencyType::class, formOptions: ["preferred_choices" => self::SUPPORTED_CURRENCIES], envVar: "PROVIDER_TME_CURRENCY")]
#[Assert\Choice(choices: self::SUPPORTED_CURRENCIES)] #[Assert\Choice(choices: self::SUPPORTED_CURRENCIES)]
public string $currency = "EUR"; public string $currency = "EUR";
#[SettingsParameter(formType: LanguageType::class, formOptions: ["preferred_choices" => ["en", "de", "fr", "pl"]], envVar: "PROVIDER_TME_LANGUAGE")] #[SettingsParameter(label: new TM("settings.ips.tme.language"), formType: LanguageType::class, formOptions: ["preferred_choices" => ["en", "de", "fr", "pl"]], envVar: "PROVIDER_TME_LANGUAGE")]
#[Assert\Language] #[Assert\Language]
public string $language = "en"; public string $language = "en";
#[SettingsParameter(envVar: "PROVIDER_TME_COUNTRY", formType: CountryType::class, formOptions: ["preferred_choices" => ["DE", "PL", "GB", "FR"]])] #[SettingsParameter(label: new TM("settings.ips.tme.country"), envVar: "PROVIDER_TME_COUNTRY", formType: CountryType::class, formOptions: ["preferred_choices" => ["DE", "PL", "GB", "FR"]])]
#[Assert\Country] #[Assert\Country]
public string $country = "DE"; public string $country = "DE";
#[SettingsParameter(envVar: "bool:PROVIDER_TME_GET_GROSS_PRICES")] #[SettingsParameter(label: new TM("settings.ips.tme.grossPrices"), envVar: "bool:PROVIDER_TME_GET_GROSS_PRICES")]
public bool $grossPrices = true; public bool $grossPrices = true;
} }

File diff suppressed because it is too large Load diff

View file

@ -2,13 +2,13 @@
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="en"> <xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="en">
<file id="security.en"> <file id="security.en">
<unit id="aazoCks" name="user.login_error.user_disabled"> <unit id="aazoCks" name="user.login_error.user_disabled">
<segment state="translated"> <segment>
<source>user.login_error.user_disabled</source> <source>user.login_error.user_disabled</source>
<target>Your account is disabled! Contact an administrator if you think this is wrong.</target> <target>Your account is disabled! Contact an administrator if you think this is wrong.</target>
</segment> </segment>
</unit> </unit>
<unit id="Dpb9AmY" name="saml.error.cannot_login_local_user_per_saml"> <unit id="Dpb9AmY" name="saml.error.cannot_login_local_user_per_saml">
<segment state="translated"> <segment>
<source>saml.error.cannot_login_local_user_per_saml</source> <source>saml.error.cannot_login_local_user_per_saml</source>
<target>You cannot login as local user via SSO! Use your local user password instead.</target> <target>You cannot login as local user via SSO! Use your local user password instead.</target>
</segment> </segment>

View file

@ -37,7 +37,7 @@
<note priority="1">Part-DB1\src\Entity\UserSystem\Group.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> <note priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>part.master_attachment.must_be_picture</source> <source>part.master_attachment.must_be_picture</source>
<target>The preview attachment must be a valid picture!</target> <target>The preview attachment must be a valid picture!</target>
</segment> </segment>
@ -82,7 +82,7 @@
<note priority="1">src\Entity\StructuralDBElement.php:0</note> <note priority="1">src\Entity\StructuralDBElement.php:0</note>
<note priority="1">src\Entity\Supplier.php:0</note> <note priority="1">src\Entity\Supplier.php:0</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>structural.entity.unique_name</source> <source>structural.entity.unique_name</source>
<target>An element with this name already exists on this level!</target> <target>An element with this name already exists on this level!</target>
</segment> </segment>
@ -102,7 +102,7 @@
<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\StorelocationParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note> <note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>parameters.validator.min_lesser_typical</source> <source>parameters.validator.min_lesser_typical</source>
<target>Value must be lesser or equal the the typical value ({{ compared_value }}).</target> <target>Value must be lesser or equal the the typical value ({{ compared_value }}).</target>
</segment> </segment>
@ -122,7 +122,7 @@
<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\StorelocationParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note> <note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>parameters.validator.min_lesser_max</source> <source>parameters.validator.min_lesser_max</source>
<target>Value must be lesser than the maximum value ({{ compared_value }}).</target> <target>Value must be lesser than the maximum value ({{ compared_value }}).</target>
</segment> </segment>
@ -142,7 +142,7 @@
<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\StorelocationParameter.php:0</note>
<note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note> <note category="file-source" priority="1">Part-DB1\src\Entity\Parameters\SupplierParameter.php:0</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>parameters.validator.max_greater_typical</source> <source>parameters.validator.max_greater_typical</source>
<target>Value must be greater or equal than the typical value ({{ compared_value }}).</target> <target>Value must be greater or equal than the typical value ({{ compared_value }}).</target>
</segment> </segment>
@ -152,7 +152,7 @@
<note category="file-source" priority="1">Part-DB1\src\Entity\UserSystem\User.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\UserSystem\User.php:0</note> <note priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>validator.user.username_already_used</source> <source>validator.user.username_already_used</source>
<target>A user with this name is already exisiting</target> <target>A user with this name is already exisiting</target>
</segment> </segment>
@ -162,7 +162,7 @@
<note category="file-source" priority="1">Part-DB1\src\Entity\UserSystem\User.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\UserSystem\User.php:0</note> <note priority="1">Part-DB1\src\Entity\UserSystem\User.php:0</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>user.invalid_username</source> <source>user.invalid_username</source>
<target>The username must contain only letters, numbers, underscores, dots, pluses or minuses!</target> <target>The username must contain only letters, numbers, underscores, dots, pluses or minuses!</target>
</segment> </segment>
@ -171,7 +171,7 @@
<notes> <notes>
<note category="state" priority="1">obsolete</note> <note category="state" priority="1">obsolete</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>validator.noneofitschild.self</source> <source>validator.noneofitschild.self</source>
<target>An element can not be its own parent!</target> <target>An element can not be its own parent!</target>
</segment> </segment>
@ -180,169 +180,169 @@
<notes> <notes>
<note category="state" priority="1">obsolete</note> <note category="state" priority="1">obsolete</note>
</notes> </notes>
<segment state="translated"> <segment>
<source>validator.noneofitschild.children</source> <source>validator.noneofitschild.children</source>
<target>You can not assign children element as parent (This would cause loops)!</target> <target>You can not assign children element as parent (This would cause loops)!</target>
</segment> </segment>
</unit> </unit>
<unit id="ayNr6QK" name="validator.select_valid_category"> <unit id="ayNr6QK" name="validator.select_valid_category">
<segment state="translated"> <segment>
<source>validator.select_valid_category</source> <source>validator.select_valid_category</source>
<target>Please select a valid category!</target> <target>Please select a valid category!</target>
</segment> </segment>
</unit> </unit>
<unit id="6vIlN5q" name="validator.part_lot.only_existing"> <unit id="6vIlN5q" name="validator.part_lot.only_existing">
<segment state="translated"> <segment>
<source>validator.part_lot.only_existing</source> <source>validator.part_lot.only_existing</source>
<target>Can not add new parts to this location as it is marked as "Only Existing"</target> <target>Can not add new parts to this location as it is marked as "Only Existing"</target>
</segment> </segment>
</unit> </unit>
<unit id="3xoKOIS" name="validator.part_lot.location_full.no_increase"> <unit id="3xoKOIS" name="validator.part_lot.location_full.no_increase">
<segment state="translated"> <segment>
<source>validator.part_lot.location_full.no_increase</source> <source>validator.part_lot.location_full.no_increase</source>
<target>Location is full. Amount can not be increased (new value must be smaller than {{ old_amount }}).</target> <target>Location is full. Amount can not be increased (new value must be smaller than {{ old_amount }}).</target>
</segment> </segment>
</unit> </unit>
<unit id="R6Ov4Yt" name="validator.part_lot.location_full"> <unit id="R6Ov4Yt" name="validator.part_lot.location_full">
<segment state="translated"> <segment>
<source>validator.part_lot.location_full</source> <source>validator.part_lot.location_full</source>
<target>Location is full. Can not add new parts to it.</target> <target>Location is full. Can not add new parts to it.</target>
</segment> </segment>
</unit> </unit>
<unit id="BNQk2e7" name="validator.part_lot.single_part"> <unit id="BNQk2e7" name="validator.part_lot.single_part">
<segment state="translated"> <segment>
<source>validator.part_lot.single_part</source> <source>validator.part_lot.single_part</source>
<target>This location can only contain a single part and it is already full!</target> <target>This location can only contain a single part and it is already full!</target>
</segment> </segment>
</unit> </unit>
<unit id="4gPskOG" name="validator.attachment.must_not_be_null"> <unit id="4gPskOG" name="validator.attachment.must_not_be_null">
<segment state="translated"> <segment>
<source>validator.attachment.must_not_be_null</source> <source>validator.attachment.must_not_be_null</source>
<target>You must select an attachment type!</target> <target>You must select an attachment type!</target>
</segment> </segment>
</unit> </unit>
<unit id="cDDVrWT" name="validator.orderdetail.supplier_must_not_be_null"> <unit id="cDDVrWT" name="validator.orderdetail.supplier_must_not_be_null">
<segment state="translated"> <segment>
<source>validator.orderdetail.supplier_must_not_be_null</source> <source>validator.orderdetail.supplier_must_not_be_null</source>
<target>You must select an supplier!</target> <target>You must select an supplier!</target>
</segment> </segment>
</unit> </unit>
<unit id="k5DDdB4" name="validator.measurement_unit.use_si_prefix_needs_unit"> <unit id="k5DDdB4" name="validator.measurement_unit.use_si_prefix_needs_unit">
<segment state="translated"> <segment>
<source>validator.measurement_unit.use_si_prefix_needs_unit</source> <source>validator.measurement_unit.use_si_prefix_needs_unit</source>
<target>To enable SI prefixes, you have to set a unit symbol!</target> <target>To enable SI prefixes, you have to set a unit symbol!</target>
</segment> </segment>
</unit> </unit>
<unit id="DuzIOCr" name="part.ipn.must_be_unique"> <unit id="DuzIOCr" name="part.ipn.must_be_unique">
<segment state="translated"> <segment>
<source>part.ipn.must_be_unique</source> <source>part.ipn.must_be_unique</source>
<target>The internal part number must be unique. {{ value }} is already in use!</target> <target>The internal part number must be unique. {{ value }} is already in use!</target>
</segment> </segment>
</unit> </unit>
<unit id="Z4Kuuo2" name="validator.project.bom_entry.name_or_part_needed"> <unit id="Z4Kuuo2" name="validator.project.bom_entry.name_or_part_needed">
<segment state="translated"> <segment>
<source>validator.project.bom_entry.name_or_part_needed</source> <source>validator.project.bom_entry.name_or_part_needed</source>
<target>You have to choose a part for a part BOM entry or set a name for a non-part BOM entry.</target> <target>You have to choose a part for a part BOM entry or set a name for a non-part BOM entry.</target>
</segment> </segment>
</unit> </unit>
<unit id="WF_v4ih" name="project.bom_entry.name_already_in_bom"> <unit id="WF_v4ih" name="project.bom_entry.name_already_in_bom">
<segment state="translated"> <segment>
<source>project.bom_entry.name_already_in_bom</source> <source>project.bom_entry.name_already_in_bom</source>
<target>There is already an BOM entry with this name!</target> <target>There is already an BOM entry with this name!</target>
</segment> </segment>
</unit> </unit>
<unit id="5v4p85H" name="project.bom_entry.part_already_in_bom"> <unit id="5v4p85H" name="project.bom_entry.part_already_in_bom">
<segment state="translated"> <segment>
<source>project.bom_entry.part_already_in_bom</source> <source>project.bom_entry.part_already_in_bom</source>
<target>This part already exists in the BOM!</target> <target>This part already exists in the BOM!</target>
</segment> </segment>
</unit> </unit>
<unit id="3lM32Tw" name="project.bom_entry.mountnames_quantity_mismatch"> <unit id="3lM32Tw" name="project.bom_entry.mountnames_quantity_mismatch">
<segment state="translated"> <segment>
<source>project.bom_entry.mountnames_quantity_mismatch</source> <source>project.bom_entry.mountnames_quantity_mismatch</source>
<target>The number of mountnames has to match the BOMs quantity!</target> <target>The number of mountnames has to match the BOMs quantity!</target>
</segment> </segment>
</unit> </unit>
<unit id="x47D5WT" name="project.bom_entry.can_not_add_own_builds_part"> <unit id="x47D5WT" name="project.bom_entry.can_not_add_own_builds_part">
<segment state="translated"> <segment>
<source>project.bom_entry.can_not_add_own_builds_part</source> <source>project.bom_entry.can_not_add_own_builds_part</source>
<target>You can not add a project's own builds part to the BOM.</target> <target>You can not add a project's own builds part to the BOM.</target>
</segment> </segment>
</unit> </unit>
<unit id="2x2XDI_" name="project.bom_has_to_include_all_subelement_parts"> <unit id="2x2XDI_" name="project.bom_has_to_include_all_subelement_parts">
<segment state="translated"> <segment>
<source>project.bom_has_to_include_all_subelement_parts</source> <source>project.bom_has_to_include_all_subelement_parts</source>
<target>The project BOM has to include all subprojects builds parts. Part %part_name% of project %project_name% missing!</target> <target>The project BOM has to include all subprojects builds parts. Part %part_name% of project %project_name% missing!</target>
</segment> </segment>
</unit> </unit>
<unit id="U9b1EzD" name="project.bom_entry.price_not_allowed_on_parts"> <unit id="U9b1EzD" name="project.bom_entry.price_not_allowed_on_parts">
<segment state="translated"> <segment>
<source>project.bom_entry.price_not_allowed_on_parts</source> <source>project.bom_entry.price_not_allowed_on_parts</source>
<target>Prices are not allowed on BOM entries associated with a part. Define the price on the part instead.</target> <target>Prices are not allowed on BOM entries associated with a part. Define the price on the part instead.</target>
</segment> </segment>
</unit> </unit>
<unit id="ID056SR" name="validator.project_build.lot_bigger_than_needed"> <unit id="ID056SR" name="validator.project_build.lot_bigger_than_needed">
<segment state="translated"> <segment>
<source>validator.project_build.lot_bigger_than_needed</source> <source>validator.project_build.lot_bigger_than_needed</source>
<target>You have selected more quantity to withdraw than needed! Remove unnecessary quantity.</target> <target>You have selected more quantity to withdraw than needed! Remove unnecessary quantity.</target>
</segment> </segment>
</unit> </unit>
<unit id="6hV5UqD" name="validator.project_build.lot_smaller_than_needed"> <unit id="6hV5UqD" name="validator.project_build.lot_smaller_than_needed">
<segment state="translated"> <segment>
<source>validator.project_build.lot_smaller_than_needed</source> <source>validator.project_build.lot_smaller_than_needed</source>
<target>You have selected less quantity to withdraw than needed for the build! Add additional quantity.</target> <target>You have selected less quantity to withdraw than needed for the build! Add additional quantity.</target>
</segment> </segment>
</unit> </unit>
<unit id="G9ZKt.4" name="part.name.must_match_category_regex"> <unit id="G9ZKt.4" name="part.name.must_match_category_regex">
<segment state="translated"> <segment>
<source>part.name.must_match_category_regex</source> <source>part.name.must_match_category_regex</source>
<target>The part name does not match the regular expression stated by the category: %regex%</target> <target>The part name does not match the regular expression stated by the category: %regex%</target>
</segment> </segment>
</unit> </unit>
<unit id="m8kMFhf" name="validator.attachment.name_not_blank"> <unit id="m8kMFhf" name="validator.attachment.name_not_blank">
<segment state="translated"> <segment>
<source>validator.attachment.name_not_blank</source> <source>validator.attachment.name_not_blank</source>
<target>Set a value here, or upload a file to automatically use its filename as name for the attachment.</target> <target>Set a value here, or upload a file to automatically use its filename as name for the attachment.</target>
</segment> </segment>
</unit> </unit>
<unit id="nwGaNBW" name="validator.part_lot.owner_must_match_storage_location_owner"> <unit id="nwGaNBW" name="validator.part_lot.owner_must_match_storage_location_owner">
<segment state="translated"> <segment>
<source>validator.part_lot.owner_must_match_storage_location_owner</source> <source>validator.part_lot.owner_must_match_storage_location_owner</source>
<target>The owner of this lot must match the owner of the selected storage location (%owner_name%)!</target> <target>The owner of this lot must match the owner of the selected storage location (%owner_name%)!</target>
</segment> </segment>
</unit> </unit>
<unit id="HXSz3nQ" name="validator.part_lot.owner_must_not_be_anonymous"> <unit id="HXSz3nQ" name="validator.part_lot.owner_must_not_be_anonymous">
<segment state="translated"> <segment>
<source>validator.part_lot.owner_must_not_be_anonymous</source> <source>validator.part_lot.owner_must_not_be_anonymous</source>
<target>A lot owner must not be the anonymous user!</target> <target>A lot owner must not be the anonymous user!</target>
</segment> </segment>
</unit> </unit>
<unit id="N8aA0Uh" name="validator.part_association.must_set_an_value_if_type_is_other"> <unit id="N8aA0Uh" name="validator.part_association.must_set_an_value_if_type_is_other">
<segment state="translated"> <segment>
<source>validator.part_association.must_set_an_value_if_type_is_other</source> <source>validator.part_association.must_set_an_value_if_type_is_other</source>
<target>If you set the type to "other", then you have to set a descriptive value for it!</target> <target>If you set the type to "other", then you have to set a descriptive value for it!</target>
</segment> </segment>
</unit> </unit>
<unit id="9VYNZ4v" name="validator.part_association.part_cannot_be_associated_with_itself"> <unit id="9VYNZ4v" name="validator.part_association.part_cannot_be_associated_with_itself">
<segment state="translated"> <segment>
<source>validator.part_association.part_cannot_be_associated_with_itself</source> <source>validator.part_association.part_cannot_be_associated_with_itself</source>
<target>A part can not be associated with itself!</target> <target>A part can not be associated with itself!</target>
</segment> </segment>
</unit> </unit>
<unit id="csc1PNn" name="validator.part_association.already_exists"> <unit id="csc1PNn" name="validator.part_association.already_exists">
<segment state="translated"> <segment>
<source>validator.part_association.already_exists</source> <source>validator.part_association.already_exists</source>
<target>The association with this part already exists!</target> <target>The association with this part already exists!</target>
</segment> </segment>
</unit> </unit>
<unit id="sfW4NYE" name="validator.part_lot.vendor_barcode_must_be_unique"> <unit id="sfW4NYE" name="validator.part_lot.vendor_barcode_must_be_unique">
<segment state="translated"> <segment>
<source>validator.part_lot.vendor_barcode_must_be_unique</source> <source>validator.part_lot.vendor_barcode_must_be_unique</source>
<target>This vendor barcode value was already used in another lot. The barcode must be unique!</target> <target>This vendor barcode value was already used in another lot. The barcode must be unique!</target>
</segment> </segment>
</unit> </unit>
<unit id="o1qmPUm" name="validator.year_2038_bug_on_32bit"> <unit id="o1qmPUm" name="validator.year_2038_bug_on_32bit">
<segment state="translated"> <segment>
<source>validator.year_2038_bug_on_32bit</source> <source>validator.year_2038_bug_on_32bit</source>
<target>Due to technical limitations, it is not possible to select dates after the 2038-01-19 on 32-bit systems!</target> <target>Due to technical limitations, it is not possible to select dates after the 2038-01-19 on 32-bit systems!</target>
</segment> </segment>