mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-02-21 01:02:53 +01:00
Compare commits
60 Commits
db_convert
...
conrad_pro
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df3f069a76 | ||
|
|
c0babfa401 | ||
|
|
cd7cd6cdd3 | ||
|
|
6d224a4a9f | ||
|
|
fa04fface3 | ||
|
|
2f8553303d | ||
|
|
f168b2a83c | ||
|
|
98937974c9 | ||
|
|
6f4dad98d9 | ||
|
|
22cf04585b | ||
|
|
6628333675 | ||
|
|
3ed62f5cee | ||
|
|
7ab33c859b | ||
|
|
705e71f1eb | ||
|
|
ae4c0786b2 | ||
|
|
3aad70934b | ||
|
|
e15d12c0bf | ||
|
|
ff7fa67682 | ||
|
|
2b723e05ff | ||
|
|
a8d2204c7f | ||
|
|
29050178bd | ||
|
|
af61772c88 | ||
|
|
b91cd44926 | ||
|
|
c476c98d56 | ||
|
|
fe458b7ff1 | ||
|
|
7b8f3aaf62 | ||
|
|
d93dfd577e | ||
|
|
4095d0fd49 | ||
|
|
6d3197497e | ||
|
|
f438a8b4cd | ||
|
|
56fa2a9396 | ||
|
|
3975a3ba61 | ||
|
|
aa9aedc5fd | ||
|
|
766ba07105 | ||
|
|
d0b827c2c3 | ||
|
|
cd7dbd5f7b | ||
|
|
8efbca798a | ||
|
|
dd6c20780b | ||
|
|
af81e15ef2 | ||
|
|
09cc2ba8ff | ||
|
|
131023da67 | ||
|
|
4636aa4e0d | ||
|
|
006cfd7b5d | ||
|
|
86f53b2956 | ||
|
|
1923abecdf | ||
|
|
a3d992a016 | ||
|
|
6402cfe619 | ||
|
|
ea71fcd120 | ||
|
|
82e3e31277 | ||
|
|
0d4f935b43 | ||
|
|
0205dd523b | ||
|
|
0a8199d81f | ||
|
|
3f6a6cc767 | ||
|
|
33a3dc6203 | ||
|
|
1cd0b459be | ||
|
|
6828ce5803 | ||
|
|
644a44e8e9 | ||
|
|
64efca4786 | ||
|
|
3e071f2b74 | ||
|
|
89322d329c |
@@ -46,13 +46,11 @@ RUN apt-get update && apt-get -y install \
|
||||
&& rm -rvf /var/www/html/*
|
||||
|
||||
# Install node and yarn
|
||||
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
|
||||
curl -sL https://deb.nodesource.com/setup_22.x | bash - && \
|
||||
RUN curl -sL https://deb.nodesource.com/setup_22.x | bash - && \
|
||||
apt-get update && apt-get install -y \
|
||||
nodejs \
|
||||
yarn \
|
||||
&& apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/*
|
||||
&& apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/* && \
|
||||
npm install -g yarn
|
||||
|
||||
# Install composer
|
||||
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||
|
||||
@@ -14,31 +14,21 @@ RUN apt-get update && apt-get -y install \
|
||||
&& apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/*;
|
||||
|
||||
RUN set -eux; \
|
||||
# Prepare keyrings directory
|
||||
mkdir -p /etc/apt/keyrings; \
|
||||
\
|
||||
# Import Yarn GPG key
|
||||
curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg \
|
||||
| tee /etc/apt/keyrings/yarn.gpg >/dev/null; \
|
||||
chmod 644 /etc/apt/keyrings/yarn.gpg; \
|
||||
\
|
||||
# Add Yarn repo with signed-by
|
||||
echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian stable main" \
|
||||
| tee /etc/apt/sources.list.d/yarn.list; \
|
||||
\
|
||||
# Run NodeSource setup script (unchanged)
|
||||
# Run NodeSource setup script
|
||||
curl -sL https://deb.nodesource.com/setup_22.x | bash -; \
|
||||
\
|
||||
# Install Node.js + Yarn
|
||||
# Install Node.js
|
||||
apt-get update; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
nodejs \
|
||||
yarn; \
|
||||
nodejs; \
|
||||
\
|
||||
# Cleanup
|
||||
apt-get -y autoremove; \
|
||||
apt-get clean autoclean; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
rm -rf /var/lib/apt/lists/*; \
|
||||
\
|
||||
# Install Yarn via npm
|
||||
npm install -g yarn
|
||||
|
||||
|
||||
# Install PHP
|
||||
|
||||
@@ -21,6 +21,7 @@ import {Controller} from "@hotwired/stimulus";
|
||||
|
||||
import * as bootbox from "bootbox";
|
||||
import "../../css/components/bootbox_extensions.css";
|
||||
import accept from "attr-accept";
|
||||
|
||||
export default class extends Controller {
|
||||
static values = {
|
||||
@@ -112,6 +113,33 @@ export default class extends Controller {
|
||||
dataTransfer.items.add(file);
|
||||
|
||||
rowInput.files = dataTransfer.files;
|
||||
|
||||
//Check the file extension and find the corresponding attachment type based on the data-filetype_filter attribute
|
||||
const attachmentTypeSelect = newElement.querySelector("select");
|
||||
if (attachmentTypeSelect) {
|
||||
let foundMatch = false;
|
||||
for (let j = 0; j < attachmentTypeSelect.options.length; j++) {
|
||||
const option = attachmentTypeSelect.options[j];
|
||||
//skip disabled options
|
||||
if (option.disabled) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const filter = option.getAttribute('data-filetype_filter');
|
||||
if (filter) {
|
||||
if (accept({name: file.name, type: file.type}, filter)) {
|
||||
attachmentTypeSelect.value = option.value;
|
||||
foundMatch = true;
|
||||
break;
|
||||
}
|
||||
} else { //If no filter is set, chose this option until we find a better match
|
||||
if (!foundMatch) {
|
||||
attachmentTypeSelect.value = option.value;
|
||||
foundMatch = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
@@ -189,4 +217,4 @@ export default class extends Controller {
|
||||
del();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,6 @@ import {marked} from "marked";
|
||||
|
||||
import {
|
||||
trans,
|
||||
SEARCH_PLACEHOLDER,
|
||||
SEARCH_SUBMIT,
|
||||
STATISTICS_PARTS
|
||||
} from '../../translator';
|
||||
|
||||
|
||||
@@ -82,9 +79,9 @@ export default class extends Controller {
|
||||
panelPlacement: this.element.dataset.panelPlacement,
|
||||
plugins: [recentSearchesPlugin],
|
||||
openOnFocus: true,
|
||||
placeholder: trans(SEARCH_PLACEHOLDER),
|
||||
placeholder: trans("search.placeholder"),
|
||||
translations: {
|
||||
submitButtonTitle: trans(SEARCH_SUBMIT)
|
||||
submitButtonTitle: trans("search.submit")
|
||||
},
|
||||
|
||||
// Use a navigator compatible with turbo:
|
||||
@@ -153,7 +150,7 @@ export default class extends Controller {
|
||||
},
|
||||
templates: {
|
||||
header({ html }) {
|
||||
return html`<span class="aa-SourceHeaderTitle">${trans(STATISTICS_PARTS)}</span>
|
||||
return html`<span class="aa-SourceHeaderTitle">${trans("part.labelp")}</span>
|
||||
<div class="aa-SourceHeaderLine" />`;
|
||||
},
|
||||
item({item, components, html}) {
|
||||
@@ -197,4 +194,4 @@ export default class extends Controller {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ export default class extends Controller {
|
||||
|
||||
let settings = {
|
||||
allowEmptyOption: true,
|
||||
plugins: ['dropdown_input'],
|
||||
plugins: ['dropdown_input', this.element.required ? null : 'clear_button'],
|
||||
searchField: ["name", "description", "category", "footprint"],
|
||||
valueField: "id",
|
||||
labelField: "name",
|
||||
|
||||
@@ -25,8 +25,7 @@ import * as zxcvbnEnPackage from '@zxcvbn-ts/language-en';
|
||||
import * as zxcvbnDePackage from '@zxcvbn-ts/language-de';
|
||||
import * as zxcvbnFrPackage from '@zxcvbn-ts/language-fr';
|
||||
import * as zxcvbnJaPackage from '@zxcvbn-ts/language-ja';
|
||||
import {trans, USER_PASSWORD_STRENGTH_VERY_WEAK, USER_PASSWORD_STRENGTH_WEAK, USER_PASSWORD_STRENGTH_MEDIUM,
|
||||
USER_PASSWORD_STRENGTH_STRONG, USER_PASSWORD_STRENGTH_VERY_STRONG} from '../../translator.js';
|
||||
import {trans} from '../../translator.js';
|
||||
|
||||
/* stimulusFetch: 'lazy' */
|
||||
export default class extends Controller {
|
||||
@@ -89,23 +88,23 @@ export default class extends Controller {
|
||||
|
||||
switch (level) {
|
||||
case 0:
|
||||
text = trans(USER_PASSWORD_STRENGTH_VERY_WEAK);
|
||||
text = trans("user.password_strength.very_weak");
|
||||
classes = "bg-danger badge-danger";
|
||||
break;
|
||||
case 1:
|
||||
text = trans(USER_PASSWORD_STRENGTH_WEAK);
|
||||
text = trans("user.password_strength.weak");
|
||||
classes = "bg-warning badge-warning";
|
||||
break;
|
||||
case 2:
|
||||
text = trans(USER_PASSWORD_STRENGTH_MEDIUM)
|
||||
text = trans("user.password_strength.medium");
|
||||
classes = "bg-info badge-info";
|
||||
break;
|
||||
case 3:
|
||||
text = trans(USER_PASSWORD_STRENGTH_STRONG);
|
||||
text = trans("user.password_strength.strong");
|
||||
classes = "bg-primary badge-primary";
|
||||
break;
|
||||
case 4:
|
||||
text = trans(USER_PASSWORD_STRENGTH_VERY_STRONG);
|
||||
text = trans("user.password_strength.very_strong");
|
||||
classes = "bg-success badge-success";
|
||||
break;
|
||||
default:
|
||||
@@ -120,4 +119,4 @@ export default class extends Controller {
|
||||
this.badgeTarget.classList.add("badge");
|
||||
this.badgeTarget.classList.add(...classes.split(" "));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ import '../../css/components/tom-select_extensions.css';
|
||||
import TomSelect from "tom-select";
|
||||
import {Controller} from "@hotwired/stimulus";
|
||||
|
||||
import {trans, ENTITY_SELECT_GROUP_NEW_NOT_ADDED_TO_DB} from '../../translator.js'
|
||||
import {trans} from '../../translator.js'
|
||||
|
||||
import TomSelect_autoselect_typed from '../../tomselect/autoselect_typed/autoselect_typed'
|
||||
TomSelect.define('autoselect_typed', TomSelect_autoselect_typed)
|
||||
@@ -204,7 +204,7 @@ export default class extends Controller {
|
||||
|
||||
if (data.not_in_db_yet) {
|
||||
//Not yet added items are shown italic and with a badge
|
||||
name += "<i><b>" + escape(data.text) + "</b></i>" + "<span class='ms-3 badge bg-info badge-info'>" + trans(ENTITY_SELECT_GROUP_NEW_NOT_ADDED_TO_DB) + "</span>";
|
||||
name += "<i><b>" + escape(data.text) + "</b></i>" + "<span class='ms-3 badge bg-info badge-info'>" + trans("entity.select.group.new_not_added_to_DB") + "</span>";
|
||||
} else {
|
||||
name += "<b>" + escape(data.text) + "</b>";
|
||||
}
|
||||
|
||||
@@ -62,6 +62,6 @@ export default class extends Controller {
|
||||
element.disabled = true;
|
||||
}
|
||||
|
||||
form.submit();
|
||||
form.requestSubmit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,6 +70,6 @@ export default class extends Controller {
|
||||
//Put our decoded Text into the input box
|
||||
document.getElementById('scan_dialog_input').value = decodedText;
|
||||
//Submit form
|
||||
document.getElementById('scan_dialog_form').submit();
|
||||
document.getElementById('scan_dialog_form').requestSubmit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ import "./register_events";
|
||||
import "./tristate_checkboxes";
|
||||
|
||||
//Define jquery globally
|
||||
window.$ = window.jQuery = require("jquery");
|
||||
global.$ = global.jQuery = require("jquery");
|
||||
|
||||
//Use the local WASM file for the ZXing library
|
||||
import {
|
||||
|
||||
@@ -198,6 +198,7 @@ class WebauthnTFA {
|
||||
{
|
||||
const resultField = document.getElementById('_auth_code');
|
||||
resultField.value = JSON.stringify(data)
|
||||
//requestSubmit() do not work here, probably because the submit is considered invalid. But as we do not use CSFR tokens, it should be fine.
|
||||
form.submit();
|
||||
}
|
||||
|
||||
@@ -232,4 +233,4 @@ class WebauthnTFA {
|
||||
}
|
||||
}
|
||||
|
||||
window.webauthnTFA = new WebauthnTFA();
|
||||
window.webauthnTFA = new WebauthnTFA();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { localeFallbacks } from '../var/translations/configuration';
|
||||
import { trans, getLocale, setLocale, setLocaleFallbacks } from '@symfony/ux-translator';
|
||||
import { createTranslator } from '@symfony/ux-translator';
|
||||
import { messages, localeFallbacks } from '../var/translations/index.js';
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony UX Translator package.
|
||||
*
|
||||
@@ -9,8 +10,12 @@ import { trans, getLocale, setLocale, setLocaleFallbacks } from '@symfony/ux-tra
|
||||
* If you use TypeScript, you can rename this file to "translator.ts" to take advantage of types checking.
|
||||
*/
|
||||
|
||||
setLocaleFallbacks(localeFallbacks);
|
||||
const translator = createTranslator({
|
||||
messages,
|
||||
localeFallbacks,
|
||||
});
|
||||
|
||||
export { trans };
|
||||
|
||||
export * from '../var/translations';
|
||||
// Wrapper function with default domain set to 'frontend'
|
||||
export const trans = (id, parameters = {}, domain = 'frontend', locale = null) => {
|
||||
return translator.trans(id, parameters, domain, locale);
|
||||
};
|
||||
|
||||
@@ -79,8 +79,8 @@
|
||||
"symfony/string": "7.4.*",
|
||||
"symfony/translation": "7.4.*",
|
||||
"symfony/twig-bundle": "7.4.*",
|
||||
"symfony/type-info": "7.4.0",
|
||||
"symfony/ux-translator": "^2.10",
|
||||
"symfony/type-info": "7.4.*",
|
||||
"symfony/ux-translator": "^2.32.0",
|
||||
"symfony/ux-turbo": "^2.0",
|
||||
"symfony/validator": "7.4.*",
|
||||
"symfony/web-link": "7.4.*",
|
||||
|
||||
1359
composer.lock
generated
1359
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,12 @@
|
||||
ux_translator:
|
||||
# The directory where the JavaScript translations are dumped
|
||||
dump_directory: '%kernel.project_dir%/var/translations'
|
||||
# Only include the frontend translation domain in the JavaScript bundle
|
||||
domains:
|
||||
- 'frontend'
|
||||
|
||||
when@prod:
|
||||
ux_translator:
|
||||
# Control whether TypeScript types are dumped alongside translations.
|
||||
# Disable this if you do not use TypeScript (e.g. in production when using AssetMapper), to speed up cache warmup.
|
||||
# dump_typescript: false
|
||||
|
||||
2234
config/reference.php
2234
config/reference.php
File diff suppressed because it is too large
Load Diff
@@ -5,3 +5,5 @@ files:
|
||||
translation: /translations/validators.%two_letters_code%.xlf
|
||||
- source: /translations/security.en.xlf
|
||||
translation: /translations/security.%two_letters_code%.xlf
|
||||
- source: /translations/frontend.en.xlf
|
||||
translation: /translations/frontend.%two_letters_code%.xlf
|
||||
|
||||
@@ -278,6 +278,16 @@ The following env configuration options are available:
|
||||
* `PROVIDER_BUERKLIN_CURRENCY`: The currency you want to get prices in if available (optional, 3 letter ISO-code, default: `EUR`).
|
||||
* `PROVIDER_BUERKLIN_LANGUAGE`: The language you want to get the descriptions in. Possible values: `de` = German, `en` = English. (optional, default: `en`)
|
||||
|
||||
### Conrad
|
||||
|
||||
The conrad provider the [Conrad API](https://developer.conrad.com/) to search for parts and retried their information.
|
||||
To use it you have to request access to the API, however it seems currently your mail address needs to be allowlisted before you can register for an account.
|
||||
The conrad webpages uses the API key in the requests, so you might be able to extract a working API key by listening to browser requests.
|
||||
That method is not officially supported nor encouraged by Part-DB, and might break at any moment.
|
||||
|
||||
The following env configuration options are available:
|
||||
* `PROVIDER_CONRAD_API_KEY`: The API key you got from Conrad (mandatory)
|
||||
|
||||
### Custom provider
|
||||
|
||||
To create a custom provider, you have to create a new class implementing the `InfoProviderInterface` interface. As long
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"popper.js": "^1.14.7",
|
||||
"regenerator-runtime": "^0.13.9",
|
||||
"webpack": "^5.74.0",
|
||||
"webpack-bundle-analyzer": "^4.3.0",
|
||||
"webpack-bundle-analyzer": "^5.1.1",
|
||||
"webpack-cli": "^5.1.0",
|
||||
"webpack-notifier": "^1.15.0"
|
||||
},
|
||||
@@ -46,6 +46,7 @@
|
||||
"@zxcvbn-ts/language-en": "^3.0.1",
|
||||
"@zxcvbn-ts/language-fr": "^3.0.1",
|
||||
"@zxcvbn-ts/language-ja": "^3.0.1",
|
||||
"attr-accept": "^2.2.5",
|
||||
"barcode-detector": "^3.0.5",
|
||||
"bootbox": "^6.0.0",
|
||||
"bootswatch": "^5.1.3",
|
||||
@@ -65,7 +66,7 @@
|
||||
"json-formatter-js": "^2.3.4",
|
||||
"jszip": "^3.2.0",
|
||||
"katex": "^0.16.0",
|
||||
"marked": "^16.1.1",
|
||||
"marked": "^17.0.1",
|
||||
"marked-gfm-heading-id": "^4.1.1",
|
||||
"marked-mangle": "^1.0.1",
|
||||
"pdfmake": "^0.2.2",
|
||||
@@ -73,5 +74,8 @@
|
||||
"tom-select": "^2.1.0",
|
||||
"ts-loader": "^9.2.6",
|
||||
"typescript": "^5.7.2"
|
||||
},
|
||||
"resolutions": {
|
||||
"jquery": "^3.5.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,10 +40,13 @@ use Symfony\Bridge\Doctrine\Attribute\MapEntity;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||
use Symfony\Component\HttpClient\Exception\ClientException;
|
||||
use Symfony\Component\HttpClient\Exception\TransportException;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
use Symfony\Contracts\HttpClient\Exception\ExceptionInterface;
|
||||
|
||||
use function Symfony\Component\Translation\t;
|
||||
|
||||
#[Route('/tools/info_providers')]
|
||||
@@ -178,6 +181,13 @@ class InfoProviderController extends AbstractController
|
||||
$exceptionLogger->error('Error during info provider search: ' . $e->getMessage(), ['exception' => $e]);
|
||||
} catch (OAuthReconnectRequiredException $e) {
|
||||
$this->addFlash('error', t('info_providers.search.error.oauth_reconnect', ['%provider%' => $e->getProviderName()]));
|
||||
} catch (TransportException $e) {
|
||||
$this->addFlash('error', t('info_providers.search.error.transport_exception'));
|
||||
$exceptionLogger->error('Transport error during info provider search: ' . $e->getMessage(), ['exception' => $e]);
|
||||
} catch (\RuntimeException $e) {
|
||||
$this->addFlash('error', t('info_providers.search.error.general_exception', ['%type%' => (new \ReflectionClass($e))->getShortName()]));
|
||||
//Log the exception
|
||||
$exceptionLogger->error('Error during info provider search: ' . $e->getMessage(), ['exception' => $e]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -319,6 +319,7 @@ class PartListsController extends AbstractController
|
||||
|
||||
//As an unchecked checkbox is not set in the query, the default value for all bools have to be false (which is the default argument value)!
|
||||
$filter->setName($request->query->getBoolean('name'));
|
||||
$filter->setDbId($request->query->getBoolean('dbid'));
|
||||
$filter->setCategory($request->query->getBoolean('category'));
|
||||
$filter->setDescription($request->query->getBoolean('description'));
|
||||
$filter->setMpn($request->query->getBoolean('mpn'));
|
||||
|
||||
@@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||
namespace App\DataTables\Filters;
|
||||
use App\DataTables\Filters\Constraints\AbstractConstraint;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use Doctrine\DBAL\ParameterType;
|
||||
|
||||
class PartSearchFilter implements FilterInterface
|
||||
{
|
||||
@@ -33,6 +34,9 @@ class PartSearchFilter implements FilterInterface
|
||||
/** @var bool Use name field for searching */
|
||||
protected bool $name = true;
|
||||
|
||||
/** @var bool Use id field for searching */
|
||||
protected bool $dbId = false;
|
||||
|
||||
/** @var bool Use category name for searching */
|
||||
protected bool $category = true;
|
||||
|
||||
@@ -120,33 +124,51 @@ class PartSearchFilter implements FilterInterface
|
||||
public function apply(QueryBuilder $queryBuilder): void
|
||||
{
|
||||
$fields_to_search = $this->getFieldsToSearch();
|
||||
$is_numeric = preg_match('/^\d+$/', $this->keyword) === 1;
|
||||
|
||||
// Add exact ID match only when the keyword is numeric
|
||||
$search_dbId = $is_numeric && (bool)$this->dbId;
|
||||
|
||||
//If we have nothing to search for, do nothing
|
||||
if ($fields_to_search === [] || $this->keyword === '') {
|
||||
if (($fields_to_search === [] && !$search_dbId) || $this->keyword === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
//Convert the fields to search to a list of expressions
|
||||
$expressions = array_map(function (string $field): string {
|
||||
$expressions = [];
|
||||
|
||||
if($fields_to_search !== []) {
|
||||
//Convert the fields to search to a list of expressions
|
||||
$expressions = array_map(function (string $field): string {
|
||||
if ($this->regex) {
|
||||
return sprintf("REGEXP(%s, :search_query) = TRUE", $field);
|
||||
}
|
||||
|
||||
return sprintf("ILIKE(%s, :search_query) = TRUE", $field);
|
||||
}, $fields_to_search);
|
||||
|
||||
//For regex, we pass the query as is, for like we add % to the start and end as wildcards
|
||||
if ($this->regex) {
|
||||
return sprintf("REGEXP(%s, :search_query) = TRUE", $field);
|
||||
$queryBuilder->setParameter('search_query', $this->keyword);
|
||||
} else {
|
||||
//Escape % and _ characters in the keyword
|
||||
$this->keyword = str_replace(['%', '_'], ['\%', '\_'], $this->keyword);
|
||||
$queryBuilder->setParameter('search_query', '%' . $this->keyword . '%');
|
||||
}
|
||||
}
|
||||
|
||||
return sprintf("ILIKE(%s, :search_query) = TRUE", $field);
|
||||
}, $fields_to_search);
|
||||
//Use equal expression to just search for exact numeric matches
|
||||
if ($search_dbId) {
|
||||
$expressions[] = $queryBuilder->expr()->eq('part.id', ':id_exact');
|
||||
$queryBuilder->setParameter('id_exact', (int) $this->keyword,
|
||||
\Doctrine\DBAL\ParameterType::INTEGER);
|
||||
}
|
||||
|
||||
//Add Or concatenation of the expressions to our query
|
||||
$queryBuilder->andWhere(
|
||||
$queryBuilder->expr()->orX(...$expressions)
|
||||
);
|
||||
|
||||
//For regex, we pass the query as is, for like we add % to the start and end as wildcards
|
||||
if ($this->regex) {
|
||||
$queryBuilder->setParameter('search_query', $this->keyword);
|
||||
} else {
|
||||
//Escape % and _ characters in the keyword
|
||||
$this->keyword = str_replace(['%', '_'], ['\%', '\_'], $this->keyword);
|
||||
$queryBuilder->setParameter('search_query', '%' . $this->keyword . '%');
|
||||
//Guard condition
|
||||
if (!empty($expressions)) {
|
||||
//Add Or concatenation of the expressions to our query
|
||||
$queryBuilder->andWhere(
|
||||
$queryBuilder->expr()->orX(...$expressions)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,6 +205,17 @@ class PartSearchFilter implements FilterInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function isDbId(): bool
|
||||
{
|
||||
return $this->dbId;
|
||||
}
|
||||
|
||||
public function setDbId(bool $dbId): PartSearchFilter
|
||||
{
|
||||
$this->dbId = $dbId;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function isCategory(): bool
|
||||
{
|
||||
return $this->category;
|
||||
|
||||
@@ -208,6 +208,7 @@ class LogDataTable implements DataTableTypeInterface
|
||||
|
||||
$dataTable->add('extra', LogEntryExtraColumn::class, [
|
||||
'label' => 'log.extra',
|
||||
'orderable' => false, //Sorting the JSON column makes no sense: MySQL/Sqlite does it via the string representation, PostgreSQL errors out
|
||||
]);
|
||||
|
||||
$dataTable->add('timeTravel', IconLinkColumn::class, [
|
||||
|
||||
@@ -58,7 +58,7 @@ class EDACategoryInfo
|
||||
/** @var bool|null If this is set to true, then this part will be excluded in the simulation */
|
||||
#[Column(type: Types::BOOLEAN, nullable: true)]
|
||||
#[Groups(['full', 'category:read', 'category:write', 'import'])]
|
||||
private ?bool $exclude_from_sim = true;
|
||||
private ?bool $exclude_from_sim = null;
|
||||
|
||||
/** @var string|null The KiCAD schematic symbol, which should be used (the path to the library) */
|
||||
#[Column(type: Types::STRING, nullable: true)]
|
||||
|
||||
@@ -109,6 +109,13 @@ class DBElementRepository extends EntityRepository
|
||||
return [];
|
||||
}
|
||||
|
||||
//Ensure that all IDs are integers and none is null
|
||||
foreach ($ids as $id) {
|
||||
if (!is_int($id)) {
|
||||
throw new \InvalidArgumentException('Non-integer ID given to findByIDInMatchingOrder: ' . var_export($id, true));
|
||||
}
|
||||
}
|
||||
|
||||
$cache_key = implode(',', $ids);
|
||||
|
||||
//Check if the result is already cached
|
||||
|
||||
@@ -57,7 +57,7 @@ class UserCacheKeyGenerator
|
||||
//If the user is null, then treat it as anonymous user.
|
||||
//When the anonymous user is passed as user then use this path too.
|
||||
if (!($user instanceof User) || User::ID_ANONYMOUS === $user->getID()) {
|
||||
return 'user$_'.User::ID_ANONYMOUS;
|
||||
return 'user$_'.User::ID_ANONYMOUS . '_'.$locale;
|
||||
}
|
||||
|
||||
//Use the unique user id and the locale to generate the key
|
||||
|
||||
@@ -189,7 +189,7 @@ class KiCadHelper
|
||||
"symbolIdStr" => $part->getEdaInfo()->getKicadSymbol() ?? $part->getCategory()?->getEdaInfo()->getKicadSymbol() ?? "",
|
||||
"exclude_from_bom" => $this->boolToKicadBool($part->getEdaInfo()->getExcludeFromBom() ?? $part->getCategory()?->getEdaInfo()->getExcludeFromBom() ?? false),
|
||||
"exclude_from_board" => $this->boolToKicadBool($part->getEdaInfo()->getExcludeFromBoard() ?? $part->getCategory()?->getEdaInfo()->getExcludeFromBoard() ?? false),
|
||||
"exclude_from_sim" => $this->boolToKicadBool($part->getEdaInfo()->getExcludeFromSim() ?? $part->getCategory()?->getEdaInfo()->getExcludeFromSim() ?? true),
|
||||
"exclude_from_sim" => $this->boolToKicadBool($part->getEdaInfo()->getExcludeFromSim() ?? $part->getCategory()?->getEdaInfo()->getExcludeFromSim() ?? false),
|
||||
"fields" => []
|
||||
];
|
||||
|
||||
|
||||
@@ -274,6 +274,13 @@ class BOMImporter
|
||||
$entries_by_key = []; // Track entries by name+part combination
|
||||
$mapped_entries = []; // Collect all mapped entries for validation
|
||||
|
||||
// Fetch suppliers once for efficiency
|
||||
$suppliers = $this->entityManager->getRepository(\App\Entity\Parts\Supplier::class)->findAll();
|
||||
$supplierSPNKeys = [];
|
||||
foreach ($suppliers as $supplier) {
|
||||
$supplierSPNKeys[] = $supplier->getName() . ' SPN';
|
||||
}
|
||||
|
||||
foreach ($csv->getRecords() as $offset => $entry) {
|
||||
// Apply field mapping to translate column names
|
||||
$mapped_entry = $this->applyFieldMapping($entry, $field_mapping, $field_priorities);
|
||||
@@ -400,9 +407,14 @@ class BOMImporter
|
||||
if (isset($mapped_entry['Manufacturer'])) {
|
||||
$comment_parts[] = 'Manf: ' . $mapped_entry['Manufacturer'];
|
||||
}
|
||||
if (isset($mapped_entry['LCSC'])) {
|
||||
$comment_parts[] = 'LCSC: ' . $mapped_entry['LCSC'];
|
||||
|
||||
// Add supplier part numbers dynamically
|
||||
foreach ($supplierSPNKeys as $spnKey) {
|
||||
if (isset($mapped_entry[$spnKey]) && !empty($mapped_entry[$spnKey])) {
|
||||
$comment_parts[] = $spnKey . ': ' . $mapped_entry[$spnKey];
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($mapped_entry['Supplier and ref'])) {
|
||||
$comment_parts[] = $mapped_entry['Supplier and ref'];
|
||||
}
|
||||
|
||||
320
src/Services/InfoProviderSystem/Providers/ConradProvider.php
Normal file
320
src/Services/InfoProviderSystem/Providers/ConradProvider.php
Normal file
@@ -0,0 +1,320 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2026 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\Services\InfoProviderSystem\Providers;
|
||||
|
||||
use App\Services\InfoProviderSystem\DTOs\FileDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\ParameterDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\PriceDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\SearchResultDTO;
|
||||
use App\Settings\InfoProviderSystem\ConradSettings;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
|
||||
readonly class ConradProvider implements InfoProviderInterface
|
||||
{
|
||||
|
||||
private const SEARCH_ENDPOINT = '/search/1/v3/facetSearch';
|
||||
public const DISTRIBUTOR_NAME = 'Conrad';
|
||||
|
||||
private HttpClientInterface $httpClient;
|
||||
|
||||
public function __construct( HttpClientInterface $httpClient, private ConradSettings $settings)
|
||||
{
|
||||
//We want everything in JSON
|
||||
$this->httpClient = $httpClient->withOptions([
|
||||
'headers' => [
|
||||
'Accept' => 'application/json',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public function getProviderInfo(): array
|
||||
{
|
||||
return [
|
||||
'name' => 'Conrad',
|
||||
'description' => 'Retrieves part information from conrad.de',
|
||||
'url' => 'https://www.conrad.de/',
|
||||
'disabled_help' => 'Set API key in settings',
|
||||
'settings_class' => ConradSettings::class,
|
||||
];
|
||||
}
|
||||
|
||||
public function getProviderKey(): string
|
||||
{
|
||||
return 'conrad';
|
||||
}
|
||||
|
||||
public function isActive(): bool
|
||||
{
|
||||
return !empty($this->settings->apiKey);
|
||||
}
|
||||
|
||||
private function getProductUrl(string $productId): string
|
||||
{
|
||||
return 'https://' . $this->settings->shopID->getDomain() . '/' . $this->settings->shopID->getLanguage() . '/p/' . $productId;
|
||||
}
|
||||
|
||||
private function getFootprintFromTechnicalDetails(array $technicalDetails): ?string
|
||||
{
|
||||
foreach ($technicalDetails as $detail) {
|
||||
if ($detail['name'] === 'ATT_LOV_HOUSING_SEMICONDUCTORS') {
|
||||
return $detail['values'][0] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function searchByKeyword(string $keyword): array
|
||||
{
|
||||
$url = $this->settings->shopID->getAPIRoot() . self::SEARCH_ENDPOINT . '/'
|
||||
. $this->settings->shopID->getDomainEnd() . '/' . $this->settings->shopID->getLanguage()
|
||||
. '/' . $this->settings->shopID->getCustomerType();
|
||||
|
||||
$response = $this->httpClient->request('POST', $url, [
|
||||
'query' => [
|
||||
'apikey' => $this->settings->apiKey,
|
||||
],
|
||||
'json' => [
|
||||
'query' => $keyword,
|
||||
'size' => 50,
|
||||
'sort' => [["field"=>"_score","order"=>"desc"]],
|
||||
],
|
||||
]);
|
||||
|
||||
$out = [];
|
||||
$results = $response->toArray();
|
||||
|
||||
foreach($results['hits'] as $result) {
|
||||
|
||||
$out[] = new SearchResultDTO(
|
||||
provider_key: $this->getProviderKey(),
|
||||
provider_id: $result['productId'],
|
||||
name: $result['manufacturerId'] ?? $result['productId'],
|
||||
description: $result['title'] ?? '',
|
||||
manufacturer: $result['brand']['name'] ?? null,
|
||||
mpn: $result['manufacturerId'] ?? null,
|
||||
preview_image_url: $result['image'] ?? null,
|
||||
provider_url: $this->getProductUrl($result['productId']),
|
||||
footprint: $this->getFootprintFromTechnicalDetails($result['technicalDetails'] ?? []),
|
||||
);
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
private function getFootprintFromTechnicalAttributes(array $technicalDetails): ?string
|
||||
{
|
||||
foreach ($technicalDetails as $detail) {
|
||||
if ($detail['attributeID'] === 'ATT.LOV.HOUSING_SEMICONDUCTORS') {
|
||||
return $detail['values'][0]['value'] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $technicalAttributes
|
||||
* @return array<ParameterDTO>
|
||||
*/
|
||||
private function technicalAttributesToParameters(array $technicalAttributes): array
|
||||
{
|
||||
return array_map(static function (array $p) {
|
||||
if (count($p['values']) === 1) { //Single value attribute
|
||||
if (array_key_exists('unit', $p['values'][0])) {
|
||||
return ParameterDTO::parseValueField( //With unit
|
||||
name: $p['attributeName'],
|
||||
value: $p['values'][0]['value'],
|
||||
unit: $p['values'][0]['unit']['name'],
|
||||
);
|
||||
}
|
||||
|
||||
return ParameterDTO::parseValueIncludingUnit(
|
||||
name: $p['attributeName'],
|
||||
value: $p['values'][0]['value'],
|
||||
);
|
||||
}
|
||||
|
||||
if (count($p['values']) === 2) { //Multi value attribute (e.g. min/max)
|
||||
$value = $p['values'][0]['value'] ?? null;
|
||||
$value2 = $p['values'][1]['value'] ?? null;
|
||||
$unit = $p['values'][0]['unit']['name'] ?? '';
|
||||
$unit2 = $p['values'][1]['unit']['name'] ?? '';
|
||||
if ($unit === $unit2 && is_numeric($value) && is_numeric($value2)) {
|
||||
if (array_key_exists('unit', $p['values'][0])) { //With unit
|
||||
return new ParameterDTO(
|
||||
name: $p['attributeName'],
|
||||
value_min: (float)$value,
|
||||
value_max: (float)$value2,
|
||||
unit: $unit,
|
||||
);
|
||||
}
|
||||
|
||||
return new ParameterDTO(
|
||||
name: $p['attributeName'],
|
||||
value_min: (float)$value,
|
||||
value_max: (float)$value2,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// fallback implementation
|
||||
$values = implode(", ", array_map(fn($q) =>
|
||||
array_key_exists('unit', $q) ? $q['value']." ". ($q['unit']['name'] ?? $q['unit']) : $q['value']
|
||||
, $p['values']));
|
||||
return ParameterDTO::parseValueIncludingUnit(
|
||||
name: $p['attributeName'],
|
||||
value: $values,
|
||||
);
|
||||
}, $technicalAttributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $productMedia
|
||||
* @return array<FileDTO>
|
||||
*/
|
||||
public function productMediaToDatasheets(array $productMedia): array
|
||||
{
|
||||
$files = [];
|
||||
foreach ($productMedia['manuals'] as $manual) {
|
||||
//Filter out unwanted languages
|
||||
if (!empty($this->settings->attachmentLanguageFilter) && !in_array($manual['language'], $this->settings->attachmentLanguageFilter, true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$files[] = new FileDTO($manual['fullUrl'], $manual['title'] . ' (' . $manual['language'] . ')');
|
||||
}
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Queries prices for a given product ID. It makes a POST request to the Conrad API
|
||||
* @param string $productId
|
||||
* @return PurchaseInfoDTO
|
||||
*/
|
||||
private function queryPrices(string $productId): PurchaseInfoDTO
|
||||
{
|
||||
$priceQueryURL = $this->settings->shopID->getAPIRoot() . '/price-availability/4/'
|
||||
. $this->settings->shopID->getShopID() . '/facade';
|
||||
|
||||
$response = $this->httpClient->request('POST', $priceQueryURL, [
|
||||
'query' => [
|
||||
'apikey' => $this->settings->apiKey,
|
||||
'overrideCalculationSchema' => $this->settings->includeVAT ? 'GROSS' : 'NET'
|
||||
],
|
||||
'json' => [
|
||||
'ns:inputArticleItemList' => [
|
||||
"#namespaces" => [
|
||||
"ns" => "http://www.conrad.de/ccp/basit/service/article/priceandavailabilityservice/api"
|
||||
],
|
||||
'articles' => [
|
||||
[
|
||||
"articleID" => $productId,
|
||||
"calculatePrice" => true,
|
||||
"checkAvailability" => true,
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
]);
|
||||
|
||||
$result = $response->toArray();
|
||||
|
||||
$priceInfo = $result['priceAndAvailabilityFacadeResponse']['priceAndAvailability']['price'] ?? [];
|
||||
$price = $priceInfo['price'] ?? "0.0";
|
||||
$currency = $priceInfo['currency'] ?? "EUR";
|
||||
$includesVat = $priceInfo['isGrossAmount'] === "true" ?? true;
|
||||
$minOrderAmount = $result['priceAndAvailabilityFacadeResponse']['priceAndAvailability']['availabilityStatus']['minimumOrderQuantity'] ?? 1;
|
||||
|
||||
$prices = [];
|
||||
foreach ($priceInfo['priceScale'] ?? [] as $priceScale) {
|
||||
$prices[] = new PriceDTO(
|
||||
minimum_discount_amount: max($priceScale['scaleFrom'], $minOrderAmount),
|
||||
price: (string)$priceScale['pricePerUnit'],
|
||||
currency_iso_code: $currency,
|
||||
includes_tax: $includesVat
|
||||
);
|
||||
}
|
||||
if (empty($prices)) { //Fallback if no price scales are defined
|
||||
$prices[] = new PriceDTO(
|
||||
minimum_discount_amount: $minOrderAmount,
|
||||
price: (string)$price,
|
||||
currency_iso_code: $currency,
|
||||
includes_tax: $includesVat
|
||||
);
|
||||
}
|
||||
|
||||
return new PurchaseInfoDTO(
|
||||
distributor_name: self::DISTRIBUTOR_NAME,
|
||||
order_number: $productId,
|
||||
prices: $prices,
|
||||
product_url: $this->getProductUrl($productId)
|
||||
);
|
||||
}
|
||||
|
||||
public function getDetails(string $id): PartDetailDTO
|
||||
{
|
||||
$productInfoURL = $this->settings->shopID->getAPIRoot() . '/product/1/service/' . $this->settings->shopID->getShopID()
|
||||
. '/product/' . $id;
|
||||
|
||||
$response = $this->httpClient->request('GET', $productInfoURL, [
|
||||
'query' => [
|
||||
'apikey' => $this->settings->apiKey,
|
||||
]
|
||||
]);
|
||||
|
||||
$data = $response->toArray();
|
||||
|
||||
return new PartDetailDTO(
|
||||
provider_key: $this->getProviderKey(),
|
||||
provider_id: $data['shortProductNumber'],
|
||||
name: $data['productFullInformation']['manufacturer']['name'] ?? $data['productFullInformation']['manufacturer']['id'] ?? $data['shortProductNumber'],
|
||||
description: $data['productShortInformation']['title'] ?? '',
|
||||
category: $data['productShortInformation']['articleGroupName'] ?? null,
|
||||
manufacturer: $data['brand']['displayName'] !== null ? preg_replace("/[\u{2122}\u{00ae}]/", "", $data['brand']['displayName']) : null, //Replace ™ and ® symbols
|
||||
mpn: $data['productFullInformation']['manufacturer']['id'] ?? null,
|
||||
preview_image_url: $data['productShortInformation']['mainImage']['imageUrl'] ?? null,
|
||||
provider_url: $this->getProductUrl($data['shortProductNumber']),
|
||||
footprint: $this->getFootprintFromTechnicalAttributes($data['productFullInformation']['technicalAttributes'] ?? []),
|
||||
notes: $data['productFullInformation']['description'] ?? null,
|
||||
datasheets: $this->productMediaToDatasheets($data['productMedia'] ?? []),
|
||||
parameters: $this->technicalAttributesToParameters($data['productFullInformation']['technicalAttributes'] ?? []),
|
||||
vendor_infos: [$this->queryPrices($data['shortProductNumber'])]
|
||||
);
|
||||
}
|
||||
|
||||
public function getCapabilities(): array
|
||||
{
|
||||
return [
|
||||
ProviderCapabilities::BASIC,
|
||||
ProviderCapabilities::PICTURE,
|
||||
ProviderCapabilities::DATASHEET,
|
||||
ProviderCapabilities::PRICE,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -680,7 +680,7 @@ class OEMSecretsProvider implements InfoProviderInterface
|
||||
if (is_array($prices)) {
|
||||
// Step 1: Check if prices exist in the preferred currency
|
||||
if (isset($prices[$this->settings->currency]) && is_array($prices[$this->settings->currency])) {
|
||||
$priceDetails = $prices[$this->$this->settings->currency];
|
||||
$priceDetails = $prices[$this->settings->currency];
|
||||
foreach ($priceDetails as $priceDetail) {
|
||||
if (
|
||||
is_array($priceDetail) &&
|
||||
|
||||
77
src/Settings/InfoProviderSystem/ConradSettings.php
Normal file
77
src/Settings/InfoProviderSystem/ConradSettings.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2026 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\Type\APIKeyType;
|
||||
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;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\EnumType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\LanguageType;
|
||||
use Symfony\Component\Translation\TranslatableMessage as TM;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
#[Settings(label: new TM("settings.ips.conrad"))]
|
||||
#[SettingsIcon("fa-plug")]
|
||||
class ConradSettings
|
||||
{
|
||||
use SettingsTrait;
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.ips.element14.apiKey"),
|
||||
formType: APIKeyType::class,
|
||||
formOptions: ["help_html" => true], envVar: "PROVIDER_CONRAD_API_KEY", envVarMode: EnvVarMode::OVERWRITE)]
|
||||
public ?string $apiKey = null;
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.ips.conrad.shopID"),
|
||||
description: new TM("settings.ips.conrad.shopID.description"),
|
||||
formType: EnumType::class,
|
||||
formOptions: ['class' => ConradShopIDs::class],
|
||||
)]
|
||||
public ConradShopIDs $shopID = ConradShopIDs::COM_B2B;
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.ips.reichelt.include_vat"))]
|
||||
public bool $includeVAT = true;
|
||||
|
||||
/**
|
||||
* @var array|string[] Only attachments in these languages will be downloaded (ISO 639-1 codes)
|
||||
*/
|
||||
#[Assert\Unique()]
|
||||
#[Assert\All([new Assert\Language()])]
|
||||
#[SettingsParameter(type: ArrayType::class,
|
||||
label: new TM("settings.ips.conrad.attachment_language_filter"), description: new TM("settings.ips.conrad.attachment_language_filter.description"),
|
||||
options: ['type' => StringType::class],
|
||||
formType: LanguageType::class,
|
||||
formOptions: [
|
||||
'multiple' => true,
|
||||
'preferred_choices' => ['en', 'de', 'fr', 'it', 'cs', 'da', 'nl', 'hu', 'hr', 'sk', 'pl']
|
||||
],
|
||||
)]
|
||||
public array $attachmentLanguageFilter = ['en'];
|
||||
}
|
||||
167
src/Settings/InfoProviderSystem/ConradShopIDs.php
Normal file
167
src/Settings/InfoProviderSystem/ConradShopIDs.php
Normal file
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2026 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 Symfony\Contracts\Translation\TranslatableInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
enum ConradShopIDs: string implements TranslatableInterface
|
||||
{
|
||||
case COM_B2B = 'HP_COM_B2B';
|
||||
case DE_B2B = 'CQ_DE_B2B';
|
||||
case DE_B2C = 'CQ_DE_B2C';
|
||||
case AT_B2C = 'CQ_AT_B2C';
|
||||
case CH_B2C_DE = 'CQ_CH_B2C_DE';
|
||||
case CH_B2C_FR = 'CQ_CH_B2C_FR';
|
||||
case SE_B2B = 'HP_SE_B2B';
|
||||
case HU_B2C = 'CQ_HU_B2C';
|
||||
case CZ_B2B = 'HP_CZ_B2B';
|
||||
case SI_B2B = 'HP_SI_B2B';
|
||||
case SK_B2B = 'HP_SK_B2B';
|
||||
case BE_B2B = 'HP_BE_B2B';
|
||||
case PL_B2B = 'HP_PL_B2B';
|
||||
case NL_B2B = 'CQ_NL_B2B';
|
||||
case NL_B2C = 'CQ_NL_B2C';
|
||||
case DK_B2B = 'HP_DK_B2B';
|
||||
case IT_B2B = 'HP_IT_B2B';
|
||||
|
||||
case FR_B2B = 'HP_FR_B2B';
|
||||
case AT_B2B = 'CQ_AT_B2B';
|
||||
case HR_B2B = 'HP_HR_B2B';
|
||||
|
||||
|
||||
public function trans(TranslatorInterface $translator, ?string $locale = null): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::DE_B2B => "conrad.de (B2B)",
|
||||
self::AT_B2C => "conrad.at (B2C)",
|
||||
self::CH_B2C_DE => "conrad.ch DE (B2C)",
|
||||
self::CH_B2C_FR => "conrad.ch FR (B2C)",
|
||||
self::SE_B2B => "conrad.se (B2B)",
|
||||
self::HU_B2C => "conrad.hu (B2C)",
|
||||
self::CZ_B2B => "conrad.cz (B2B)",
|
||||
self::SI_B2B => "conrad.si (B2B)",
|
||||
self::SK_B2B => "conrad.sk (B2B)",
|
||||
self::BE_B2B => "conrad.be (B2B)",
|
||||
self::DE_B2C => "conrad.de (B2C)",
|
||||
self::PL_B2B => "conrad.pl (B2B)",
|
||||
self::NL_B2B => "conrad.nl (B2B)",
|
||||
self::DK_B2B => "conradelektronik.dk (B2B)",
|
||||
self::IT_B2B => "conrad.it (B2B)",
|
||||
self::NL_B2C => "conrad.nl (B2C)",
|
||||
self::FR_B2B => "conrad.fr (B2B)",
|
||||
self::COM_B2B => "conrad.com (B2B)",
|
||||
self::AT_B2B => "conrad.at (B2B)",
|
||||
self::HR_B2B => "conrad.hr (B2B)",
|
||||
};
|
||||
}
|
||||
|
||||
public function getDomain(): string
|
||||
{
|
||||
if ($this === self::DK_B2B) {
|
||||
return 'conradelektronik.dk';
|
||||
}
|
||||
|
||||
return 'conrad.' . $this->getDomainEnd();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the API root URL for this shop ID. e.g. https://api.conrad.de
|
||||
* @return string
|
||||
*/
|
||||
public function getAPIRoot(): string
|
||||
{
|
||||
return 'https://api.' . $this->getDomain();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the shop ID value used in the API requests. e.g. 'CQ_DE_B2B'
|
||||
* @return string
|
||||
*/
|
||||
public function getShopID(): string
|
||||
{
|
||||
if ($this === self::CH_B2C_FR || $this === self::CH_B2C_DE) {
|
||||
return 'CQ_CH_B2C';
|
||||
}
|
||||
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
public function getDomainEnd(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::DE_B2B, self::DE_B2C => 'de',
|
||||
self::AT_B2B, self::AT_B2C => 'at',
|
||||
self::CH_B2C_DE => 'ch', self::CH_B2C_FR => 'ch',
|
||||
self::SE_B2B => 'se',
|
||||
self::HU_B2C => 'hu',
|
||||
self::CZ_B2B => 'cz',
|
||||
self::SI_B2B => 'si',
|
||||
self::SK_B2B => 'sk',
|
||||
self::BE_B2B => 'be',
|
||||
self::PL_B2B => 'pl',
|
||||
self::NL_B2B, self::NL_B2C => 'nl',
|
||||
self::DK_B2B => 'dk',
|
||||
self::IT_B2B => 'it',
|
||||
self::FR_B2B => 'fr',
|
||||
self::COM_B2B => 'com',
|
||||
self::HR_B2B => 'hr',
|
||||
};
|
||||
}
|
||||
|
||||
public function getLanguage(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::DE_B2B, self::DE_B2C, self::AT_B2B, self::AT_B2C => 'de',
|
||||
self::CH_B2C_DE => 'de', self::CH_B2C_FR => 'fr',
|
||||
self::SE_B2B => 'sv',
|
||||
self::HU_B2C => 'hu',
|
||||
self::CZ_B2B => 'cs',
|
||||
self::SI_B2B => 'sl',
|
||||
self::SK_B2B => 'sk',
|
||||
self::BE_B2B => 'nl',
|
||||
self::PL_B2B => 'pl',
|
||||
self::NL_B2B, self::NL_B2C => 'nl',
|
||||
self::DK_B2B => 'da',
|
||||
self::IT_B2B => 'it',
|
||||
self::FR_B2B => 'fr',
|
||||
self::COM_B2B => 'en',
|
||||
self::HR_B2B => 'hr',
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the customer type for this shop ID. e.g. 'b2b' or 'b2c'
|
||||
* @return string 'b2b' or 'b2c'
|
||||
*/
|
||||
public function getCustomerType(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::DE_B2B, self::AT_B2B, self::SE_B2B, self::CZ_B2B, self::SI_B2B,
|
||||
self::SK_B2B, self::BE_B2B, self::PL_B2B, self::NL_B2B, self::DK_B2B,
|
||||
self::IT_B2B, self::FR_B2B, self::COM_B2B, self::HR_B2B => 'b2b',
|
||||
self::DE_B2C, self::AT_B2C, self::CH_B2C_DE, self::CH_B2C_FR, self::HU_B2C, self::NL_B2C => 'b2c',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -63,7 +63,10 @@ class InfoProviderSettings
|
||||
|
||||
#[EmbeddedSettings]
|
||||
public ?PollinSettings $pollin = null;
|
||||
|
||||
|
||||
#[EmbeddedSettings]
|
||||
public ?BuerklinSettings $buerklin = null;
|
||||
|
||||
#[EmbeddedSettings]
|
||||
public ?ConradSettings $conrad = null;
|
||||
}
|
||||
|
||||
13
symfony.lock
13
symfony.lock
@@ -718,18 +718,17 @@
|
||||
"files": []
|
||||
},
|
||||
"symfony/ux-translator": {
|
||||
"version": "2.9",
|
||||
"version": "2.32",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "2.9",
|
||||
"ref": "bc396565cc4cab95692dd6df810553dc22e352e1"
|
||||
"version": "2.32",
|
||||
"ref": "20e2abac415da4c3a9a6bafa059a6419beb74593"
|
||||
},
|
||||
"files": [
|
||||
"./assets/translator.js",
|
||||
"./config/packages/ux_translator.yaml",
|
||||
"./var/translations/configuration.js",
|
||||
"./var/translations/index.js"
|
||||
"assets/translator.js",
|
||||
"config/packages/ux_translator.yaml",
|
||||
"var/translations/index.js"
|
||||
]
|
||||
},
|
||||
"symfony/ux-turbo": {
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
<input type="checkbox" class="form-check-input" id="search_name" name="name" value="1" checked {{ stimulus_controller('elements/localStorage_checkbox') }}>
|
||||
<label for="search_name" class="form-check-label justify-content-start">{% trans %}name.label{% endtrans %}</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="search_dbid" name="dbid" value="1" {{ stimulus_controller('elements/localStorage_checkbox') }}>
|
||||
<label for="search_dbid" class="form-check-label justify-content-start">{% trans %}id.label{% endtrans %}</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="search_category" name="category" value="1" checked {{ stimulus_controller('elements/localStorage_checkbox') }}>
|
||||
<label for="search_category" class="form-check-label justify-content-start">{% trans %}category.label{% endtrans %}</label>
|
||||
@@ -102,4 +106,4 @@
|
||||
{{ _self.settings_drodown(is_navbar) }}
|
||||
{% endif %}
|
||||
</form>
|
||||
{% endmacro %}
|
||||
{% endmacro %}
|
||||
|
||||
@@ -353,6 +353,16 @@ class BOMImporterTest extends WebTestCase
|
||||
|
||||
public function testStringToBOMEntriesKiCADSchematic(): void
|
||||
{
|
||||
// Create test suppliers for this test
|
||||
$lcscSupplier = new Supplier();
|
||||
$lcscSupplier->setName('LCSC');
|
||||
$mouserSupplier = new Supplier();
|
||||
$mouserSupplier->setName('Mouser');
|
||||
|
||||
$this->entityManager->persist($lcscSupplier);
|
||||
$this->entityManager->persist($mouserSupplier);
|
||||
$this->entityManager->flush();
|
||||
|
||||
$input = <<<CSV
|
||||
"Reference","Value","Footprint","Quantity","MPN","Manufacturer","LCSC SPN","Mouser SPN"
|
||||
"R1,R2","10k","R_0805_2012Metric",2,"CRCW080510K0FKEA","Vishay","C123456","123-M10K"
|
||||
@@ -386,10 +396,20 @@ class BOMImporterTest extends WebTestCase
|
||||
$this->assertStringContainsString('Value: 10k', $bom_entries[0]->getComment());
|
||||
$this->assertStringContainsString('MPN: CRCW080510K0FKEA', $bom_entries[0]->getComment());
|
||||
$this->assertStringContainsString('Manf: Vishay', $bom_entries[0]->getComment());
|
||||
$this->assertStringContainsString('LCSC SPN: C123456', $bom_entries[0]->getComment());
|
||||
$this->assertStringContainsString('Mouser SPN: 123-M10K', $bom_entries[0]->getComment());
|
||||
|
||||
|
||||
// Check second entry
|
||||
$this->assertEquals('C1', $bom_entries[1]->getMountnames());
|
||||
$this->assertEquals(1.0, $bom_entries[1]->getQuantity());
|
||||
$this->assertStringContainsString('LCSC SPN: C789012', $bom_entries[1]->getComment());
|
||||
$this->assertStringContainsString('Mouser SPN: 80-CL21A104KOCLRNC', $bom_entries[1]->getComment());
|
||||
|
||||
// Clean up
|
||||
$this->entityManager->remove($lcscSupplier);
|
||||
$this->entityManager->remove($mouserSupplier);
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
|
||||
public function testStringToBOMEntriesKiCADSchematicWithPriority(): void
|
||||
|
||||
80
translations/frontend.cs.xlf
Normal file
80
translations/frontend.cs.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="cs">
|
||||
<file id="frontend.cs">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Hledat</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<source>part.labelp</source>
|
||||
<target>Díly</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>Nový (zatím nebyl přidán do DB)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Velmi slabé</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Slabé</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Střední</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Silné</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Velmi silné</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Jdi!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.da.xlf
Normal file
80
translations/frontend.da.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="da">
|
||||
<file id="frontend.en">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Søg</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment state="translated">
|
||||
<source>part.labelp</source>
|
||||
<target>Dele/parter</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>Ny (endnu ikke tilføjet til databasen)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Meget svag</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Svag</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Middel</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Stærk</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Meget stærk</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Kom nu!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.de.xlf
Normal file
80
translations/frontend.de.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="de">
|
||||
<file id="frontend.en">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Suche</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment state="translated">
|
||||
<source>part.labelp</source>
|
||||
<target>Bauteile</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>Neu (noch nicht zur DB hinzugefügt)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Sehr schwach</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Schwach</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Mittel</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Stark</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Sehr stark</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Los!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
28
translations/frontend.el.xlf
Normal file
28
translations/frontend.el.xlf
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="el">
|
||||
<file id="frontend.el">
|
||||
<unit id="lQ8QeGr" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Αναζήτηση</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.en.xlf
Normal file
80
translations/frontend.en.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="en">
|
||||
<file id="frontend.en">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Search</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment state="translated">
|
||||
<source>part.labelp</source>
|
||||
<target>Parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>New (not added to DB yet)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Very weak</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Weak</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Medium</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Strong</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Very strong</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Go!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.es.xlf
Normal file
80
translations/frontend.es.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="es">
|
||||
<file id="frontend.es">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Buscar</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<source>part.labelp</source>
|
||||
<target>Componentes</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>Nuevo (no añadido a la base de datos)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Muy débil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Débil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Medio</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Fuerte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Muy fuerte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>¡Vamos!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
44
translations/frontend.fr.xlf
Normal file
44
translations/frontend.fr.xlf
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="fr">
|
||||
<file id="frontend.fr">
|
||||
<unit id="lQ8QeGr" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Recherche</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<source>part.labelp</source>
|
||||
<target>Composants</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="N66qZeD" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Rechercher!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.hu.xlf
Normal file
80
translations/frontend.hu.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?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="frontend.en">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Keresés</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment state="translated">
|
||||
<source>part.labelp</source>
|
||||
<target>Alkatrészek</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>Új (még nem hozzáadva az adatbázishoz)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Nagyon gyenge</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Gyenge</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Közepes</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Erős</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Nagyon erős</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Indítás!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.it.xlf
Normal file
80
translations/frontend.it.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="it">
|
||||
<file id="frontend.it">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Ricerca</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<source>part.labelp</source>
|
||||
<target>Componenti</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>Nuovo (non ancora aggiunto al DB)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Molto debole</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Debole</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Media</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Forte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Molto forte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Cerca!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
44
translations/frontend.ja.xlf
Normal file
44
translations/frontend.ja.xlf
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="ja">
|
||||
<file id="frontend.ja">
|
||||
<unit id="lQ8QeGr" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>検索</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<source>part.labelp</source>
|
||||
<target>部品</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="N66qZeD" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>検索</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
28
translations/frontend.nl.xlf
Normal file
28
translations/frontend.nl.xlf
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="nl">
|
||||
<file id="frontend.nl">
|
||||
<unit id="lQ8QeGr" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Zoeken</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.pl.xlf
Normal file
80
translations/frontend.pl.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="pl">
|
||||
<file id="frontend.pl">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Szukaj</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<source>part.labelp</source>
|
||||
<target>Komponenty</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>Nowość (jeszcze niedodana do DB)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Bardzo słabe</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Słabe</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Średnie</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Mocne</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Bardzo mocne</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Idź!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.ru.xlf
Normal file
80
translations/frontend.ru.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="ru">
|
||||
<file id="frontend.ru">
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>Поиск</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<source>part.labelp</source>
|
||||
<target>Компоненты</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="S4CxO.T" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>Новый (еще не добавленный в БД)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Очень слабый</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Слабый</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Средний</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Сильный</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Очень сильный</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Поехали!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
80
translations/frontend.zh.xlf
Normal file
80
translations/frontend.zh.xlf
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="zh">
|
||||
<file id="frontend.zh">
|
||||
<unit id="lQ8QeGr" name="search.placeholder">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:67</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:61</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:27</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:43</note>
|
||||
<note priority="1">Part-DB1\templates\_sidebar.html.twig:63</note>
|
||||
<note priority="1">templates\AdminPages\EntityAdminBase.html.twig:9</note>
|
||||
<note priority="1">templates\base.html.twig:80</note>
|
||||
<note priority="1">templates\base.html.twig:179</note>
|
||||
<note priority="1">templates\base.html.twig:206</note>
|
||||
<note priority="1">templates\base.html.twig:237</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.placeholder</source>
|
||||
<target>搜索</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<source>part.labelp</source>
|
||||
<target>部件</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_cXCaLo" name="entity.select.group.new_not_added_to_DB">
|
||||
<segment state="translated">
|
||||
<source>entity.select.group.new_not_added_to_DB</source>
|
||||
<target>新建(尚未添加到数据库)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="RdFvZsb" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>非常弱</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="IBjmblZ" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>弱</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="qSm_ID0" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>中</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aWAaADS" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>强</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Wa9CStW" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>非常强</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="N66qZeD" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>GO!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -4025,16 +4025,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn
|
||||
<target>Reg.Ex. shoda</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Jdi!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UXyo9ZT" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11224,36 +11214,6 @@ Element 3</target>
|
||||
<target>Není uveden žádný textový obsah! Popisky zůstanou prázdné.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Velmi slabé</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Slabé</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Střední</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Silné</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Velmi silné</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m.RBg6w" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
|
||||
@@ -4032,16 +4032,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt
|
||||
<target>Reg. Ex. matching</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="N66qZeD" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Kom nu!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="w0jVACo" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11256,36 +11246,6 @@ Oversættelsen
|
||||
<target>Intet tekstindhold angivet! De oprettede etiketter vil være tomme.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="RdFvZsb" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Meget svag</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="IBjmblZ" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Svag</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="qSm_ID0" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Middel</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aWAaADS" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Stærk</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Wa9CStW" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Meget stærk</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="6OHd5fv" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="de">
|
||||
<file id="messages.de">
|
||||
<file id="messages.en">
|
||||
<unit id="x_wTSQS" name="attachment_type.caption">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4</note>
|
||||
@@ -97,16 +97,6 @@
|
||||
<target>Neue [Category]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="z1GMBc_" name="currency.caption">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>currency.caption</source>
|
||||
<target>Währung</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="KSFhj_3" name="currency.iso_code.caption">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12</note>
|
||||
@@ -407,16 +397,6 @@
|
||||
<target>Neuer [Footprint]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="tvm4F9e" name="group.edit.caption">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>group.edit.caption</source>
|
||||
<target>Gruppen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m27aWeR" name="user.edit.permissions">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9</note>
|
||||
@@ -449,15 +429,6 @@
|
||||
<target>Neue [Group]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="jXqdnm_" name="label_profile.caption">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>label_profile.caption</source>
|
||||
<target>Labelprofile</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="GgwITAf" name="label_profile.advanced">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8</note>
|
||||
@@ -496,17 +467,6 @@
|
||||
<target>Neues [Label_profile]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="r3pQ31P" name="manufacturer.caption">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4</note>
|
||||
<note priority="1">templates\AdminPages\ManufacturerAdmin.html.twig:4</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>manufacturer.caption</source>
|
||||
<target>Hersteller</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="AVQBOWW" name="manufacturer.edit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8</note>
|
||||
@@ -527,22 +487,6 @@
|
||||
<target>Neuer [Manufacturer]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3ra2AyY" name="measurement_unit.caption">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>measurement_unit.caption</source>
|
||||
<target>Maßeinheit</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="IqR.a4n" name="part_custom_state.caption">
|
||||
<segment state="translated">
|
||||
<source>part_custom_state.caption</source>
|
||||
<target>Benutzerdefinierter Bauteilstatus</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="crdkzlg" name="storelocation.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5</note>
|
||||
@@ -598,16 +542,6 @@
|
||||
<target>Neuer [Supplier]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="vX.dhjK" name="user.edit.caption">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\UserAdmin.html.twig:8</note>
|
||||
<note priority="1">Part-DB1\templates\AdminPages\UserAdmin.html.twig:8</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>user.edit.caption</source>
|
||||
<target>Benutzer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Ux8wVuF" name="user.edit.configuration">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\AdminPages\UserAdmin.html.twig:14</note>
|
||||
@@ -4024,16 +3958,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
<target>Reg.Ex. Matching</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Los!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UXyo9ZT" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -7502,16 +7426,6 @@ Element 1 -> Element 1.2]]></target>
|
||||
<target>System</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="QpKjLiE" name="perm.parts">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.parts</source>
|
||||
<target>Allgemein</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="lkP7BGp" name="perm.read">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
@@ -7772,16 +7686,6 @@ Element 1 -> Element 1.2]]></target>
|
||||
<target>Bestellungen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9e70TDD" name="perm.storelocations">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.storelocations</source>
|
||||
<target>Lagerorte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="iKqTace" name="perm.move">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
@@ -7802,66 +7706,6 @@ Element 1 -> Element 1.2]]></target>
|
||||
<target>Teile auflisten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="qp4Nw88" name="perm.part.footprints">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.part.footprints</source>
|
||||
<target>Footprints</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ochCbWd" name="perm.part.categories">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.part.categories</source>
|
||||
<target>Kategorien</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gJeta6V" name="perm.part.supplier">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.part.supplier</source>
|
||||
<target>Lieferanten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="AAW9ULn" name="perm.part.manufacturers">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.part.manufacturers</source>
|
||||
<target>Hersteller</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="xIsPPzY" name="perm.projects">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.projects</source>
|
||||
<target>Projekte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Fa9cXuf" name="perm.part.attachment_types">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
<note category="state" priority="1">obsolete</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.part.attachment_types</source>
|
||||
<target>Dateitypen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="lIHo4Hd" name="perm.tools.import">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
@@ -8372,12 +8216,6 @@ Element 1 -> Element 1.2]]></target>
|
||||
<target>Maßeinheiten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="zckNn8G" name="perm.part_custom_states">
|
||||
<segment state="translated">
|
||||
<source>perm.part_custom_states</source>
|
||||
<target>Benutzerdefinierter Bauteilstatus</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="coNue69" name="user.settings.pw_old.label">
|
||||
<notes>
|
||||
<note priority="1">obsolete</note>
|
||||
@@ -11304,36 +11142,6 @@ Element 1 -> Element 1.2]]></target>
|
||||
<target>Kein Textinhalt angegeben! Die erzeugten Label werden leer sein.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Sehr schwach</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Schwach</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Mittel</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Stark</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Sehr stark</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m.RBg6w" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
@@ -12918,7 +12726,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön
|
||||
<unit id="ECQkeJy" name="settings.ips.octopart.onlyAuthorizedSellers.help">
|
||||
<segment state="translated">
|
||||
<source>settings.ips.octopart.onlyAuthorizedSellers.help</source>
|
||||
<target>Anwählen, um nicht-autorisierte Angebote in den Ergebnissen anzuzeigen</target>
|
||||
<target>Abwählen, um nicht-autorisierte Angebote in den Ergebnissen anzuzeigen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="iRDDtdU" name="settings.misc.exchange_rate">
|
||||
@@ -14183,248 +13991,248 @@ Dies ist auf der Informationsquellen Übersichtsseite möglich.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="L4nq52R" name="settings.misc.ipn_suggest.useDuplicateDescription.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.useDuplicateDescription.help</source>
|
||||
<target>Wenn aktiviert, wird die Bauteil-Beschreibung verwendet, um vorhandene Teile mit derselben Beschreibung zu finden und die nächste verfügbare IPN für die Vorschlagsliste zu ermitteln, indem der numerische Suffix entsprechend erhöht wird.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NIw6dtz" name="settings.misc.ipn_suggest.regex.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.regex.help</source>
|
||||
<target>Ein PCRE-kompatibler regulärer Ausdruck, den jede IPN erfüllen muss. Leer lassen, um alles als IPN zu erlauben.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MoHHSNT" name="user.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>user.labelp</source>
|
||||
<target>Benutzer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5.oI1XD" name="currency.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>currency.labelp</source>
|
||||
<target>Währungen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="8F2EwVK" name="measurement_unit.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>measurement_unit.labelp</source>
|
||||
<target>Maßeinheiten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="hYrcka2" name="attachment_type.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>attachment_type.labelp</source>
|
||||
<target>Dateitypen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="p.Sjja3" name="label_profile.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>label_profile.labelp</source>
|
||||
<target>Labelprofile</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Y_ISV0y" name="part_custom_state.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>part_custom_state.labelp</source>
|
||||
<target>Benutzerdefinierte Bauteilstatus</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aXr7mN." name="group.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>group.labelp</source>
|
||||
<target>Gruppen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="O10voez" name="settings.synonyms.type_synonym.type">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonym.type</source>
|
||||
<target>Typ</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="1BDQVEp" name="settings.synonyms.type_synonym.language">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonym.language</source>
|
||||
<target>Sprache</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2.g2ewQ" name="settings.synonyms.type_synonym.translation_singular">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonym.translation_singular</source>
|
||||
<target>Übersetzung Singular</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Up9ZhvR" name="settings.synonyms.type_synonym.translation_plural">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonym.translation_plural</source>
|
||||
<target>Übersetzung Plural</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="BHoS230" name="settings.synonyms.type_synonym.add_entry">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonym.add_entry</source>
|
||||
<target>Eintrag hinzufügen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="wvtOEBn" name="settings.synonyms.type_synonym.remove_entry">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonym.remove_entry</source>
|
||||
<target>Eintrag entfernen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="mLu.2F2" name="settings.synonyms">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms</source>
|
||||
<target>Synonyme</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="SHgc9i." name="settings.synonyms.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.help</source>
|
||||
<target>Das Synonymsystem ermöglicht es, zu überschreiben, wie Part-DB bestimmte Dinge benennt. Dies kann nützlich sein, insbesondere wenn Part-DB in einem anderen Kontext als Elektronik verwendet wird.
|
||||
Bitte beachten Sie, dass dieses System derzeit experimentell ist und die hier definierten Synonyme möglicherweise nicht an allen Stellen angezeigt werden.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="piB78W5" name="settings.synonyms.type_synonyms">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonyms</source>
|
||||
<target>Typsynonyme</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="J8T2HuD" name="settings.synonyms.type_synonyms.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonyms.help</source>
|
||||
<target>Mit Typsynonymen können Sie die Bezeichnungen von integrierten Datentypen ersetzen. Zum Beispiel können Sie „Footprint" in etwas anderes umbenennen.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="wjcsjzT" name="log.element_edited.changed_fields.part_ipn_prefix">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>log.element_edited.changed_fields.part_ipn_prefix</source>
|
||||
<target>IPN-Präfix</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R4hoCqe" name="part.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>part.labelp</source>
|
||||
<target>Bauteile</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".tjK0ju" name="project_bom_entry.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>project_bom_entry.labelp</source>
|
||||
<target>BOM-Einträge</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ftBf11d" name="part_lot.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>part_lot.labelp</source>
|
||||
<target>Bauteilbestände</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UVDJmYp" name="orderdetail.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>orderdetail.labelp</source>
|
||||
<target>Bestellinformationen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="83AQqv." name="pricedetail.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>pricedetail.labelp</source>
|
||||
<target>Preisinformationen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="4KRV2mB" name="parameter.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>parameter.labelp</source>
|
||||
<target>Parameter</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="AAYYeiw" name="part_association.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>part_association.labelp</source>
|
||||
<target>Bauteilzuordnungen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2_3Lz7i" name="bulk_info_provider_import_job.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>bulk_info_provider_import_job.labelp</source>
|
||||
<target>Massenimporte von Informationsquellen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="BXTqi16" name="bulk_info_provider_import_job_part.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>bulk_info_provider_import_job_part.labelp</source>
|
||||
<target>Massenimportauftrag Bauteil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="91Wvg.F" name="password_toggle.hide">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>password_toggle.hide</source>
|
||||
<target>Ausblenden</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2vciZN7" name="password_toggle.show">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>password_toggle.show</source>
|
||||
<target>Anzeigen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="PVw6Lx4" name="settings.misc.ipn_suggest.regex.help.placeholder">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.regex.help.placeholder</source>
|
||||
<target>z.B. Format: 3–4 alphanumerische Segmente getrennt durch „-", gefolgt von „-" und 4 Ziffern, z.B. PCOM-RES-0001</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="M5Q_eZW" name="part.edit.tab.advanced.ipn.prefix.global_prefix">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>part.edit.tab.advanced.ipn.prefix.global_prefix</source>
|
||||
<target>Das globale IPN-Präfix, das für alle Bauteile gilt</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="WlKvQeB" name="settings.misc.ipn_suggest.fallbackPrefix">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.fallbackPrefix</source>
|
||||
<target>Fallback-Präfix</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Fr8hXdE" name="settings.misc.ipn_suggest.fallbackPrefix.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.fallbackPrefix.help</source>
|
||||
<target>Das IPN-Präfix, das verwendet werden soll, wenn eine Kategorie kein Präfix definiert hat.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_p9cMpI" name="settings.misc.ipn_suggest.numberSeparator">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.numberSeparator</source>
|
||||
<target>Nummerntrennzeichen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="CqfzuM6" name="settings.misc.ipn_suggest.numberSeparator.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.numberSeparator.help</source>
|
||||
<target>Das Trennzeichen, das verwendet wird, um die IPN-Nummer vom Präfix zu trennen.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="PisGfwB" name="settings.misc.ipn_suggest.categorySeparator">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.categorySeparator</source>
|
||||
<target>Kategorietrennzeichen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="jlNd0CI" name="settings.misc.ipn_suggest.categorySeparator.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.categorySeparator.help</source>
|
||||
<target>Das Trennzeichen, das verwendet wird, um verschiedene Ebenen von Kategoriepräfixen zu trennen.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MkiJuRK" name="settings.misc.ipn_suggest.globalPrefix">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.globalPrefix</source>
|
||||
<target>Globales Präfix</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Akh9iFg" name="settings.misc.ipn_suggest.globalPrefix.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.globalPrefix.help</source>
|
||||
<target>Wenn aktiviert, wird eine Option zur Generierung einer IPN mit diesem globalen Präfix angeboten, das für Bauteile in allen Kategorien gilt.</target>
|
||||
</segment>
|
||||
@@ -14439,24 +14247,42 @@ Bitte beachten Sie, dass dieses System derzeit experimentell ist und die hier de
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Ae8pGfM" name="settings.ips.buerklin">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.ips.buerklin</source>
|
||||
<target>Buerklin</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nlVH1Nb" name="settings.ips.buerklin.username">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.ips.buerklin.username</source>
|
||||
<target>Benutzername</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="BlR_EQc" name="settings.ips.buerklin.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.ips.buerklin.help</source>
|
||||
<target>Buerklin-API-Zugriffsbeschränkungen: 100 Requests/Minute pro IP-Adresse
|
||||
Buerklin-API-Authentication-Server:
|
||||
10 Requests/Minute pro IP-Adresse</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="8BkjGyq" name="project.bom.part_id">
|
||||
<segment state="translated">
|
||||
<source>project.bom.part_id</source>
|
||||
<target>[Part] ID</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="WdszgJG" name="info_providers.search.error.general_exception">
|
||||
<segment state="translated">
|
||||
<source>info_providers.search.error.general_exception</source>
|
||||
<target>Unbekannter Fehler beim Abrufen von Bauteilen vom Info-Anbieter: %type%. Überprüfen Sie, ob Ihre Anbieter richtig konfiguriert sind und die Zugriffsschlüssel stimmen. Weitere Infos findest du in den Serverprotokollen.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="RFhwYWd" name="info_providers.search.error.transport_exception">
|
||||
<segment state="translated">
|
||||
<source>info_providers.search.error.transport_exception</source>
|
||||
<target>Transportfehler beim Abrufen von Informationen von den Anbietern. Überprüfen Sie, ob Ihr Server über einen Internetzugang verfügt. Weitere Informationen finden Sie in den Serverprotokollen. Transportfehler beim Abrufen von Informationen von den Anbietern. Überprüfen Sie, ob Ihr Server über einen Internetzugang verfügt. Weitere Informationen finden Sie in den Serverprotokollen.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3959,16 +3959,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
<target>Reg.Ex. Matching</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Go!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UXyo9ZT" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11153,36 +11143,6 @@ Element 1 -> Element 1.2]]></target>
|
||||
<target>No text content given! The labels will remain empty.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Very weak</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Weak</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Medium</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Strong</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Very strong</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m.RBg6w" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
@@ -14159,121 +14119,121 @@ Please note that this system is currently experimental, and the synonyms defined
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".tjK0ju" name="project_bom_entry.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>project_bom_entry.labelp</source>
|
||||
<target>BOM entries</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ftBf11d" name="part_lot.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>part_lot.labelp</source>
|
||||
<target>Part lots</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UVDJmYp" name="orderdetail.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>orderdetail.labelp</source>
|
||||
<target>Order details</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="83AQqv." name="pricedetail.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>pricedetail.labelp</source>
|
||||
<target>Price details</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="4KRV2mB" name="parameter.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>parameter.labelp</source>
|
||||
<target>Parameters</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="AAYYeiw" name="part_association.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>part_association.labelp</source>
|
||||
<target>Part associations</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2_3Lz7i" name="bulk_info_provider_import_job.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>bulk_info_provider_import_job.labelp</source>
|
||||
<target>Bulk info provider imports</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="BXTqi16" name="bulk_info_provider_import_job_part.labelp">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>bulk_info_provider_import_job_part.labelp</source>
|
||||
<target>Bulk import job part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="91Wvg.F" name="password_toggle.hide">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>password_toggle.hide</source>
|
||||
<target>Hide</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2vciZN7" name="password_toggle.show">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>password_toggle.show</source>
|
||||
<target>Show</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="PVw6Lx4" name="settings.misc.ipn_suggest.regex.help.placeholder">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.regex.help.placeholder</source>
|
||||
<target>e.g. Format: 3–4 alphanumeric segments (any number) separated by "-", followed by "-" and 4 digits, e.g., PCOM-RES-0001</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="M5Q_eZW" name="part.edit.tab.advanced.ipn.prefix.global_prefix">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>part.edit.tab.advanced.ipn.prefix.global_prefix</source>
|
||||
<target>The global IPN prefix, common across all parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="WlKvQeB" name="settings.misc.ipn_suggest.fallbackPrefix">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.fallbackPrefix</source>
|
||||
<target>Fallback prefix</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Fr8hXdE" name="settings.misc.ipn_suggest.fallbackPrefix.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.fallbackPrefix.help</source>
|
||||
<target>The IPN prefix that should be used, if a category has no prefix defined.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_p9cMpI" name="settings.misc.ipn_suggest.numberSeparator">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.numberSeparator</source>
|
||||
<target>Number separator</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="CqfzuM6" name="settings.misc.ipn_suggest.numberSeparator.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.numberSeparator.help</source>
|
||||
<target>The separator character used to separate the IPN number from the prefix.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="PisGfwB" name="settings.misc.ipn_suggest.categorySeparator">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.categorySeparator</source>
|
||||
<target>Category separator</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="jlNd0CI" name="settings.misc.ipn_suggest.categorySeparator.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.categorySeparator.help</source>
|
||||
<target>The separator character used to separate different levels of category prefixes.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MkiJuRK" name="settings.misc.ipn_suggest.globalPrefix">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.globalPrefix</source>
|
||||
<target>Global prefix</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Akh9iFg" name="settings.misc.ipn_suggest.globalPrefix.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.misc.ipn_suggest.globalPrefix.help</source>
|
||||
<target>If enabled, an option for to generate IPN with this global prefix, shared across parts in all categories.</target>
|
||||
</segment>
|
||||
@@ -14288,19 +14248,19 @@ Please note that this system is currently experimental, and the synonyms defined
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Ae8pGfM" name="settings.ips.buerklin">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.ips.buerklin</source>
|
||||
<target>Buerklin</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nlVH1Nb" name="settings.ips.buerklin.username">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.ips.buerklin.username</source>
|
||||
<target>User name</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="BlR_EQc" name="settings.ips.buerklin.help">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>settings.ips.buerklin.help</source>
|
||||
<target>Buerklin-API access limits:
|
||||
100 requests/minute per IP address
|
||||
@@ -14309,10 +14269,52 @@ Buerklin-API Authentication server:
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="8BkjGyq" name="project.bom.part_id">
|
||||
<segment>
|
||||
<segment state="translated">
|
||||
<source>project.bom.part_id</source>
|
||||
<target>[Part] ID</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="WdszgJG" name="info_providers.search.error.general_exception">
|
||||
<segment state="translated">
|
||||
<source>info_providers.search.error.general_exception</source>
|
||||
<target>Unknown error while trying to retrieve parts from info provider: %type%. Check that your providers are configured correctly and access keys are correct. See server logs for more information.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="RFhwYWd" name="info_providers.search.error.transport_exception">
|
||||
<segment state="translated">
|
||||
<source>info_providers.search.error.transport_exception</source>
|
||||
<target>Transport error while retrieving information from the providers. Check that your server has internet accesss. See server logs for more info.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="kHKChQB" name="settings.ips.conrad">
|
||||
<segment>
|
||||
<source>settings.ips.conrad</source>
|
||||
<target>Conrad</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gwZXJ0F" name="settings.ips.conrad.shopID">
|
||||
<segment>
|
||||
<source>settings.ips.conrad.shopID</source>
|
||||
<target>Shop ID</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="honqnBf" name="settings.ips.conrad.shopID.description">
|
||||
<segment>
|
||||
<source>settings.ips.conrad.shopID.description</source>
|
||||
<target>The version of the conrad store you wanna get results from. This determines language, prices and currency of the results. If both a B2B and a B2C version if available, you should choose the B2C version if you want prices including VAT. </target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="EVcQbEK" name="settings.ips.conrad.attachment_language_filter">
|
||||
<segment>
|
||||
<source>settings.ips.conrad.attachment_language_filter</source>
|
||||
<target>Language filter for attachments</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MWPmQf2" name="settings.ips.conrad.attachment_language_filter.description">
|
||||
<segment>
|
||||
<source>settings.ips.conrad.attachment_language_filter.description</source>
|
||||
<target>Only includes attachments in the selected languages in the results.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -4024,16 +4024,6 @@ Subelementos serán desplazados hacia arriba.</target>
|
||||
<target>Reg.Ex. Matching</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>¡Vamos!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UXyo9ZT" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11242,36 +11232,6 @@ Elemento 3</target>
|
||||
<target>¡No se ha dado contenido de texto! Las etiquetas permanecerán vacías.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Muy débil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Débil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Medio</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Fuerte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Muy fuerte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m.RBg6w" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
|
||||
@@ -4014,16 +4014,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia
|
||||
<target>Reg.Ex. Correspondance</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="N66qZeD" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Rechercher!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Kw3N1AA" name="actions">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:2</note>
|
||||
|
||||
@@ -3952,16 +3952,6 @@
|
||||
<target>Reguláris kifejezés egyezés</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Indítás!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UXyo9ZT" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11157,36 +11147,6 @@
|
||||
<target>Nincs szöveges tartalom megadva! A címkék üresek maradnak.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Nagyon gyenge</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Gyenge</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Közepes</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Erős</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Nagyon erős</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m.RBg6w" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
|
||||
@@ -4026,16 +4026,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi
|
||||
<target>Corrispondenza Reg.Ex.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Cerca!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UXyo9ZT" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11244,36 +11234,6 @@ Element 3</target>
|
||||
<target>Nessun contenuto di testo specificato! Le etichette generate saranno vuote.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Molto debole</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Debole</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Media</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Forte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Molto forte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m.RBg6w" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
|
||||
@@ -4014,16 +4014,6 @@
|
||||
<target>正規表現で検索</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="N66qZeD" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>検索</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Kw3N1AA" name="actions">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:2</note>
|
||||
|
||||
@@ -4029,16 +4029,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo
|
||||
<target>Dopasowywanie Reg.Ex.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Idź!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UXyo9ZT" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11247,36 +11237,6 @@ Element 3</target>
|
||||
<target>Nie podano zawartości tekstowej! Etykiety pozostaną puste.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Bardzo słabe</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Słabe</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Średnie</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Mocne</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Bardzo mocne</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m.RBg6w" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
|
||||
@@ -4035,16 +4035,6 @@
|
||||
<target>Соответствие рег.выраж.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U5IhkwB" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>Поехали!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UXyo9ZT" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11251,36 +11241,6 @@
|
||||
<target>Текстовое содержание не указано! Созданные ярлыки будут пустыми.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9rnHbSK" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>Очень слабый</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gKHmHwM" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>Слабый</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c44gN8b" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>Средний</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NwiBLHc" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>Сильный</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Bw.iCUm" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>Очень сильный</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m.RBg6w" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
|
||||
@@ -4033,16 +4033,6 @@
|
||||
<target>正则匹配</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="N66qZeD" name="search.submit">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_navbar_search.html.twig:68</note>
|
||||
<note priority="1">Part-DB1\templates\_navbar_search.html.twig:62</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>search.submit</source>
|
||||
<target>GO!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="w0jVACo" name="project.labelp">
|
||||
<notes>
|
||||
<note category="file-source" priority="1">Part-DB1\templates\_sidebar.html.twig:37</note>
|
||||
@@ -11250,36 +11240,6 @@ Element 3</target>
|
||||
<target>没有文字内容。标签将保持为空</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="RdFvZsb" name="user.password_strength.very_weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_weak</source>
|
||||
<target>非常弱</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="IBjmblZ" name="user.password_strength.weak">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.weak</source>
|
||||
<target>弱</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="qSm_ID0" name="user.password_strength.medium">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.medium</source>
|
||||
<target>中</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aWAaADS" name="user.password_strength.strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.strong</source>
|
||||
<target>强</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Wa9CStW" name="user.password_strength.very_strong">
|
||||
<segment state="translated">
|
||||
<source>user.password_strength.very_strong</source>
|
||||
<target>非常强</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="6OHd5fv" name="perm.users.impersonate">
|
||||
<segment state="translated">
|
||||
<source>perm.users.impersonate</source>
|
||||
|
||||
@@ -1,17 +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="da">
|
||||
<file id="security.en">
|
||||
<unit id="aazoCks" name="user.login_error.user_disabled">
|
||||
<unit id="GrLNa9P" name="user.login_error.user_disabled">
|
||||
<segment state="translated">
|
||||
<source>user.login_error.user_disabled</source>
|
||||
<target>Din konto er deaktiveret! Kontakt en administrator, hvis du mener, at dette er en fejl.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Dpb9AmY" name="saml.error.cannot_login_local_user_per_saml">
|
||||
<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>Du kan ikke logge ind som lokal bruger via SSO! Brug dit lokale password i stedet.</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>Du kan ikke logge ind som SAML-bruger ved hjælp af lokal godkendelse! Brug SSO-login i stedet.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="da">
|
||||
<file id="validators.en">
|
||||
<unit id="xevSdCK" name="part.master_attachment.must_be_picture">
|
||||
<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>
|
||||
@@ -42,7 +42,7 @@
|
||||
<target>Forhåndsvisnings-bilaget skal være et rigtigt billede!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="VJHTkxx" name="structural.entity.unique_name">
|
||||
<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>
|
||||
@@ -87,7 +87,7 @@
|
||||
<target>Der eksisterer allerede et element med dette navn på dette niveau!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3ODUtpU" name="parameters.validator.min_lesser_typical">
|
||||
<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>
|
||||
@@ -107,7 +107,7 @@
|
||||
<target>Værdi skal være mindre end eller lig med den typiske værdi ({{ compared_value }}).</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="jDBA_WW" name="parameters.validator.min_lesser_max">
|
||||
<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>
|
||||
@@ -127,7 +127,7 @@
|
||||
<target>Værdi skal være mindre end maksumumværdien ({{ compared_value }}).</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ygK_e_X" name="parameters.validator.max_greater_typical">
|
||||
<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>
|
||||
@@ -147,7 +147,7 @@
|
||||
<target>Værdi skal være større eller lig med den typiske værdi ({{ compared_value }}).</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="isXL.ie" name="validator.user.username_already_used">
|
||||
<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>
|
||||
@@ -157,7 +157,7 @@
|
||||
<target>Der eksisterer allerede en bruger med dette navn</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NcM463r" name="user.invalid_username">
|
||||
<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>
|
||||
@@ -167,179 +167,209 @@
|
||||
<target>Brugernavn skal må kun indeholde bogstager, tal, understregningstegn, punktummer, plusser og minusser!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="lZvhKYu" name="validator.noneofitschild.self">
|
||||
<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>Et element kan ikke være dets eget overordnede element!</target>
|
||||
<target>Et element kan ikke være overordnet for sig selv!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="pr07aV4" name="validator.noneofitschild.children">
|
||||
<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>Et underelement kan ikke være dets overordnede element (Dette ville resultere i løkker)!</target>
|
||||
<target>Et underordnet element kan ikke være det overordnede element!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ayNr6QK" name="validator.select_valid_category">
|
||||
<unit id="GAUS.LK" name="validator.select_valid_category">
|
||||
<segment state="translated">
|
||||
<source>validator.select_valid_category</source>
|
||||
<target>Vælg venligst en gyldig kategori!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="6vIlN5q" name="validator.part_lot.only_existing">
|
||||
<unit id="h6qELde" name="validator.part_lot.only_existing">
|
||||
<segment state="translated">
|
||||
<source>validator.part_lot.only_existing</source>
|
||||
<target>Lagerlokationen er markeret som "Kun eksisterende dele", så derfor kan nye dele ikke tilføjes.</target>
|
||||
<target>Opbevaringsstedet er markeret som "kun eksisterende dele", så nye dele kan ikke tilføjes.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3xoKOIS" name="validator.part_lot.location_full.no_increase">
|
||||
<unit id="Prriyy0" name="validator.part_lot.location_full.no_increase">
|
||||
<segment state="translated">
|
||||
<source>validator.part_lot.location_full.no_increase</source>
|
||||
<target>Lokationen er fuld. Antal kan ikke forøges (Ny værdi skal være mindre end {{ old_amount }}).</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R6Ov4Yt" name="validator.part_lot.location_full">
|
||||
<unit id="eeEjB4s" name="validator.part_lot.location_full">
|
||||
<segment state="translated">
|
||||
<source>validator.part_lot.location_full</source>
|
||||
<target>Lokation er fuld. Kan ikke tilføje nye dele til denne.</target>
|
||||
<target>Lagerpladsen er fuld, så nye dele kan ikke tilføjes.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="BNQk2e7" name="validator.part_lot.single_part">
|
||||
<unit id="2yWi8eP" name="validator.part_lot.single_part">
|
||||
<segment state="translated">
|
||||
<source>validator.part_lot.single_part</source>
|
||||
<target>Lagerlokationen er markeret som "Kun én komponent", så der kan ikke tilføjes yderligere.</target>
|
||||
<target>Lagerlokationen er markeret som "Kun én komponent", så en ny komponent kan ikke tilføjes.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="4gPskOG" name="validator.attachment.must_not_be_null">
|
||||
<unit id="A.TFhbb" name="validator.attachment.must_not_be_null">
|
||||
<segment state="translated">
|
||||
<source>validator.attachment.must_not_be_null</source>
|
||||
<target>Du skal vælge en bilagstype!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="cDDVrWT" name="validator.orderdetail.supplier_must_not_be_null">
|
||||
<unit id=".lqKoij" name="validator.orderdetail.supplier_must_not_be_null">
|
||||
<segment state="translated">
|
||||
<source>validator.orderdetail.supplier_must_not_be_null</source>
|
||||
<target>Du skal vælge en leverandør!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="k5DDdB4" name="validator.measurement_unit.use_si_prefix_needs_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>For at kunne aktivere SI-prefixes, så skal du have indtastet et enhedsymbol!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="DuzIOCr" name="part.ipn.must_be_unique">
|
||||
<unit id="gZ5FFL1" name="part.ipn.must_be_unique">
|
||||
<segment state="translated">
|
||||
<source>part.ipn.must_be_unique</source>
|
||||
<target>Det interne partnummer skal være unikt. {{ value }} værdien er allerede i brug!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Z4Kuuo2" name="validator.project.bom_entry.name_or_part_needed">
|
||||
<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>Du skal vælge en komponent eller angive et navn til en ikke-komponent styklistepost!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="WF_v4ih" name="project.bom_entry.name_already_in_bom">
|
||||
<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>Der findes allerede en BOM linie med dette navn!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5v4p85H" name="project.bom_entry.part_already_in_bom">
|
||||
<unit id="jB3B50E" name="project.bom_entry.part_already_in_bom">
|
||||
<segment state="translated">
|
||||
<source>project.bom_entry.part_already_in_bom</source>
|
||||
<target>Delen eksisterer allerede i denne BOM!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3lM32Tw" name="project.bom_entry.mountnames_quantity_mismatch">
|
||||
<unit id="NdkzP1n" name="project.bom_entry.mountnames_quantity_mismatch">
|
||||
<segment state="translated">
|
||||
<source>project.bom_entry.mountnames_quantity_mismatch</source>
|
||||
<target>Antallet af bestykningsnavne skal svare til BOM antallet af komponenter!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="x47D5WT" name="project.bom_entry.can_not_add_own_builds_part">
|
||||
<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>En projekt BOM-liste kan ikke tilføjet til en BOM.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2x2XDI_" name="project.bom_has_to_include_all_subelement_parts">
|
||||
<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>Projekt BOM skal indeholde alle underprojekters styklister. Komponent %part_name% fra projekt %project_name% mangler!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U9b1EzD" name="project.bom_entry.price_not_allowed_on_parts">
|
||||
<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>Du kan ikke sætte pris for komponent-BOM indtastninger. Indtast prisen på selve komponenten selv.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ID056SR" name="validator.project_build.lot_bigger_than_needed">
|
||||
<unit id="xZ68Nzl" name="validator.project_build.lot_bigger_than_needed">
|
||||
<segment state="translated">
|
||||
<source>validator.project_build.lot_bigger_than_needed</source>
|
||||
<target>Du har valgt en større mængde til plukning end nødvendigt. Fjern det overskydende antal</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="6hV5UqD" name="validator.project_build.lot_smaller_than_needed">
|
||||
<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>Du har valgt et for lille antal til plukning end der er nødvendigt for dette byg. Tilføj yderligere mængde.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="G9ZKt.4" name="part.name.must_match_category_regex">
|
||||
<unit id="yZGS8uZ" name="part.name.must_match_category_regex">
|
||||
<segment state="translated">
|
||||
<source>part.name.must_match_category_regex</source>
|
||||
<target>Komponentnavnet matcher ikke med det regulære udtryk (regular expression) som der er specificeret for kategorien: %regex%</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m8kMFhf" name="validator.attachment.name_not_blank">
|
||||
<unit id="Q8wP5Jd" name="validator.attachment.name_not_blank">
|
||||
<segment state="translated">
|
||||
<source>validator.attachment.name_not_blank</source>
|
||||
<target>Vælg en værdi, eller upload en fil for automatisk at bruge dens filnavn som navn for denne vedhæftede fil.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nwGaNBW" name="validator.part_lot.owner_must_match_storage_location_owner">
|
||||
<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>Ejeren af denne komponentbeholdning og den valgte lagerplacering skal matche (%owner_name%)!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="HXSz3nQ" name="validator.part_lot.owner_must_not_be_anonymous">
|
||||
<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>Ejeren kan ikke være den anonyme bruger!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="N8aA0Uh" name="validator.part_association.must_set_an_value_if_type_is_other">
|
||||
<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>Hvis linktypen er sat til "Andet", skal du angive en beskrivende værdi!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9VYNZ4v" name="validator.part_association.part_cannot_be_associated_with_itself">
|
||||
<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>En komponent kan ikke knyttes til sig selv!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="csc1PNn" name="validator.part_association.already_exists">
|
||||
<unit id="q5Ej6Xm" name="validator.part_association.already_exists">
|
||||
<segment state="translated">
|
||||
<source>validator.part_association.already_exists</source>
|
||||
<target>Et link til denne komponent findes allerede!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sfW4NYE" name="validator.part_lot.vendor_barcode_must_be_unique">
|
||||
<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>Denne leverandørstregkodeværdi er allerede brugt til en anden beholdning. Stregkoden skal være unik!</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>På grund af tekniske begrænsninger er det ikke muligt at vælge en dato efter 19. januar 2038 på 32-bit systemer!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="iM9yb_p" name="validator.fileSize.invalidFormat">
|
||||
<segment state="translated">
|
||||
<source>validator.fileSize.invalidFormat</source>
|
||||
<target>Ugyldig filstørrelse. Brug et heltal med K, M eller G som suffiks for kilo, mega eller gigabyte.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ZFxQ0BZ" name="validator.invalid_range">
|
||||
<segment state="translated">
|
||||
<source>validator.invalid_range</source>
|
||||
<target>Det angivne interval er ikke gyldigt!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m4gp2P_" name="validator.google_code.wrong_code">
|
||||
<segment state="translated">
|
||||
<source>validator.google_code.wrong_code</source>
|
||||
<target>Ugyldig kode. Kontroller, at godkendelsesappen er konfigureret korrekt, og at både serveren og enheden har indstillet det korrekte klokkeslæt.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="I330cr5" name="settings.synonyms.type_synonyms.collection_type.duplicate">
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonyms.collection_type.duplicate</source>
|
||||
<target>Der er allerede defineret en oversættelse for denne type og sprog!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -347,13 +347,13 @@
|
||||
<target>Aufgrund technischer Beschränkungen ist es nicht möglich, ein Datum nach dem 19.01.2038 auf 32-Bit Systemen auszuwählen!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="89nojXY" name="validator.fileSize.invalidFormat">
|
||||
<unit id="iM9yb_p" name="validator.fileSize.invalidFormat">
|
||||
<segment state="translated">
|
||||
<source>validator.fileSize.invalidFormat</source>
|
||||
<target>Ungültige Angabe für die Dateigröße. Verwenden Sie eine ganze Zahl mit K, M, G als Suffix für Kilo, Mega oder Gigabytes.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="iXcU7ce" name="validator.invalid_range">
|
||||
<unit id="ZFxQ0BZ" name="validator.invalid_range">
|
||||
<segment state="translated">
|
||||
<source>validator.invalid_range</source>
|
||||
<target>Der gegebene Bereich ist nicht gültig!</target>
|
||||
@@ -365,5 +365,11 @@
|
||||
<target>Ungültiger Code. Überprüfen Sie, ob die Authenticator App korrekt eingerichtet ist und ob der Server und das Gerät beide die korrekte Uhrzeit eingestellt haben.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="I330cr5" name="settings.synonyms.type_synonyms.collection_type.duplicate">
|
||||
<segment state="translated">
|
||||
<source>settings.synonyms.type_synonyms.collection_type.duplicate</source>
|
||||
<target>Es existiert bereits eine Übersetzung für diesen Typ und Sprache!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -169,22 +169,25 @@ for (const theme of AVAILABLE_THEMES) {
|
||||
|
||||
|
||||
if (Encore.isProduction()) {
|
||||
Encore.addPlugin(new CompressionPlugin({
|
||||
filename: '[path][base].br',
|
||||
algorithm: 'brotliCompress',
|
||||
test: /\.(js|css|html|svg)$/,
|
||||
compressionOptions: {
|
||||
// zlib’s `level` option matches Brotli’s `BROTLI_PARAM_QUALITY` option.
|
||||
level: 11,
|
||||
},
|
||||
//threshold: 10240,
|
||||
minRatio: 0.8,
|
||||
deleteOriginalAssets: false,
|
||||
}))
|
||||
Encore
|
||||
.addPlugin(new CompressionPlugin({
|
||||
filename: '[path][base].br',
|
||||
algorithm: 'brotliCompress',
|
||||
test: /\.(js|css|html|svg)$/,
|
||||
compressionOptions: {
|
||||
// zlib’s `level` option matches Brotli’s `BROTLI_PARAM_QUALITY` option.
|
||||
level: 11,
|
||||
},
|
||||
threshold: 10240,
|
||||
minRatio: 0.8,
|
||||
deleteOriginalAssets: false,
|
||||
}))
|
||||
|
||||
.addPlugin(new CompressionPlugin({
|
||||
filename: '[path][base].gz',
|
||||
algorithm: 'gzip',
|
||||
threshold: 10240,
|
||||
minRatio: 0.8,
|
||||
test: /\.(js|css|html|svg)$/,
|
||||
deleteOriginalAssets: false,
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user