mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-02-21 17:22:28 +01:00
Compare commits
3 Commits
copilot/fi
...
copilot/ad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1894d611fb | ||
|
|
0433651f6a | ||
|
|
01c368c42c |
@@ -26,28 +26,6 @@ if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then
|
||||
composer install --prefer-dist --no-progress --no-interaction
|
||||
fi
|
||||
|
||||
# Install additional composer packages if COMPOSER_EXTRA_PACKAGES is set
|
||||
if [ -n "$COMPOSER_EXTRA_PACKAGES" ]; then
|
||||
echo "Installing additional composer packages: $COMPOSER_EXTRA_PACKAGES"
|
||||
# Note: COMPOSER_EXTRA_PACKAGES is intentionally not quoted to allow word splitting
|
||||
# This enables passing multiple package names separated by spaces
|
||||
# shellcheck disable=SC2086
|
||||
composer require $COMPOSER_EXTRA_PACKAGES --no-install --no-interaction --no-progress
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Running composer install to install packages without dev dependencies..."
|
||||
composer install --no-dev --no-interaction --no-progress --optimize-autoloader
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Successfully installed additional composer packages"
|
||||
else
|
||||
echo "Failed to install composer dependencies"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Failed to add additional composer packages to composer.json"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if grep -q ^DATABASE_URL= .env; then
|
||||
echo "Waiting for database to be ready..."
|
||||
ATTEMPTS_LEFT_TO_REACH_DATABASE=60
|
||||
|
||||
@@ -39,28 +39,6 @@ if [ -d /var/www/html/var/db ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Install additional composer packages if COMPOSER_EXTRA_PACKAGES is set
|
||||
if [ -n "$COMPOSER_EXTRA_PACKAGES" ]; then
|
||||
echo "Installing additional composer packages: $COMPOSER_EXTRA_PACKAGES"
|
||||
# Note: COMPOSER_EXTRA_PACKAGES is intentionally not quoted to allow word splitting
|
||||
# This enables passing multiple package names separated by spaces
|
||||
# shellcheck disable=SC2086
|
||||
sudo -E -u www-data composer require $COMPOSER_EXTRA_PACKAGES --no-install --no-interaction --no-progress
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Running composer install to install packages without dev dependencies..."
|
||||
sudo -E -u www-data composer install --no-dev --no-interaction --no-progress --optimize-autoloader
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Successfully installed additional composer packages"
|
||||
else
|
||||
echo "Failed to install composer dependencies"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Failed to add additional composer packages to composer.json"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Start PHP-FPM (the PHP_VERSION is replaced by the configured version in the Dockerfile)
|
||||
php-fpmPHP_VERSION -F &
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ If you want to start translation for a new language that does not have an entry
|
||||
Part-DB uses translation keys (e.g. part.info.title) that are sorted by their usage, so you will most likely have to lookup, how the key
|
||||
was translated in other languages (this is possible via the "Other languages" dropdown in the translation editor).
|
||||
|
||||
For detailed information about the translation system, including how to use type synonyms and placeholders, see the [Translation System Documentation](docs/development/translation.md).
|
||||
|
||||
## Project structure
|
||||
Part-DB uses Symfony's recommended [project structure](https://symfony.com/doc/current/best_practices.html).
|
||||
Interesting folders are:
|
||||
|
||||
612
composer.lock
generated
612
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -474,7 +474,7 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
|
||||
* max_host_connections?: int, // The maximum number of connections to a single host.
|
||||
* default_options?: array{
|
||||
* headers?: array<string, mixed>,
|
||||
* vars?: array<string, mixed>,
|
||||
* vars?: list<mixed>,
|
||||
* max_redirects?: int, // The maximum number of redirects to follow.
|
||||
* http_version?: scalar|null, // The default HTTP version, typically 1.1 or 2.0, leave to null for the best version.
|
||||
* resolve?: array<string, scalar|null>,
|
||||
@@ -497,7 +497,7 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
|
||||
* md5?: mixed,
|
||||
* },
|
||||
* crypto_method?: scalar|null, // The minimum version of TLS to accept; must be one of STREAM_CRYPTO_METHOD_TLSv*_CLIENT constants.
|
||||
* extra?: array<string, mixed>,
|
||||
* extra?: list<mixed>,
|
||||
* rate_limiter?: scalar|null, // Rate limiter name to use for throttling requests. // Default: null
|
||||
* caching?: bool|array{ // Caching configuration.
|
||||
* enabled?: bool, // Default: false
|
||||
@@ -550,7 +550,7 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
|
||||
* md5?: mixed,
|
||||
* },
|
||||
* crypto_method?: scalar|null, // The minimum version of TLS to accept; must be one of STREAM_CRYPTO_METHOD_TLSv*_CLIENT constants.
|
||||
* extra?: array<string, mixed>,
|
||||
* extra?: list<mixed>,
|
||||
* rate_limiter?: scalar|null, // Rate limiter name to use for throttling requests. // Default: null
|
||||
* caching?: bool|array{ // Caching configuration.
|
||||
* enabled?: bool, // Default: false
|
||||
@@ -1677,12 +1677,6 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
|
||||
* post_processors?: array<string, array<string, mixed>>,
|
||||
* },
|
||||
* }
|
||||
* @psalm-type DamaDoctrineTestConfig = array{
|
||||
* enable_static_connection?: mixed, // Default: true
|
||||
* enable_static_meta_data_cache?: bool, // Default: true
|
||||
* enable_static_query_cache?: bool, // Default: true
|
||||
* connection_keys?: list<mixed>,
|
||||
* }
|
||||
* @psalm-type TwigExtraConfig = array{
|
||||
* cache?: bool|array{
|
||||
* enabled?: bool, // Default: false
|
||||
@@ -2250,9 +2244,9 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
|
||||
* destinationStrictlyMatches?: bool,
|
||||
* allowRepeatAttributeName?: bool,
|
||||
* rejectUnsolicitedResponsesWithInResponseTo?: bool,
|
||||
* signatureAlgorithm?: "http://www.w3.org/2000/09/xmldsig#rsa-sha1"|"http://www.w3.org/2000/09/xmldsig#dsa-sha1"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha512",
|
||||
* digestAlgorithm?: "http://www.w3.org/2000/09/xmldsig#sha1"|"http://www.w3.org/2001/04/xmlenc#sha256"|"http://www.w3.org/2001/04/xmldsig-more#sha384"|"http://www.w3.org/2001/04/xmlenc#sha512",
|
||||
* encryption_algorithm?: "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"|"http://www.w3.org/2001/04/xmlenc#aes128-cbc"|"http://www.w3.org/2001/04/xmlenc#aes192-cbc"|"http://www.w3.org/2001/04/xmlenc#aes256-cbc"|"http://www.w3.org/2009/xmlenc11#aes128-gcm"|"http://www.w3.org/2009/xmlenc11#aes192-gcm"|"http://www.w3.org/2009/xmlenc11#aes256-gcm",
|
||||
* signatureAlgorithm?: "http:\/\/www.w3.org\/2000\/09\/xmldsig#rsa-sha1"|"http:\/\/www.w3.org\/2000\/09\/xmldsig#dsa-sha1"|"http:\/\/www.w3.org\/2001\/04\/xmldsig-more#rsa-sha256"|"http:\/\/www.w3.org\/2001\/04\/xmldsig-more#rsa-sha384"|"http:\/\/www.w3.org\/2001\/04\/xmldsig-more#rsa-sha512",
|
||||
* digestAlgorithm?: "http:\/\/www.w3.org\/2000\/09\/xmldsig#sha1"|"http:\/\/www.w3.org\/2001\/04\/xmlenc#sha256"|"http:\/\/www.w3.org\/2001\/04\/xmldsig-more#sha384"|"http:\/\/www.w3.org\/2001\/04\/xmlenc#sha512",
|
||||
* encryption_algorithm?: "http:\/\/www.w3.org\/2001\/04\/xmlenc#tripledes-cbc"|"http:\/\/www.w3.org\/2001\/04\/xmlenc#aes128-cbc"|"http:\/\/www.w3.org\/2001\/04\/xmlenc#aes192-cbc"|"http:\/\/www.w3.org\/2001\/04\/xmlenc#aes256-cbc"|"http:\/\/www.w3.org\/2009\/xmlenc11#aes128-gcm"|"http:\/\/www.w3.org\/2009\/xmlenc11#aes192-gcm"|"http:\/\/www.w3.org\/2009\/xmlenc11#aes256-gcm",
|
||||
* lowercaseUrlencoding?: bool,
|
||||
* },
|
||||
* contactPerson?: array{
|
||||
@@ -2640,6 +2634,12 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
|
||||
* ...<mixed>
|
||||
* },
|
||||
* }
|
||||
* @psalm-type DamaDoctrineTestConfig = array{
|
||||
* enable_static_connection?: mixed, // Default: true
|
||||
* enable_static_meta_data_cache?: bool, // Default: true
|
||||
* enable_static_query_cache?: bool, // Default: true
|
||||
* connection_keys?: list<mixed>,
|
||||
* }
|
||||
* @psalm-type ConfigType = array{
|
||||
* imports?: ImportsConfig,
|
||||
* parameters?: ParametersConfig,
|
||||
|
||||
@@ -33,8 +33,8 @@ services:
|
||||
App\:
|
||||
resource: '../src/'
|
||||
exclude:
|
||||
- '../src/Entity/'
|
||||
- '../src/Helpers/'
|
||||
- '../src/DataFixtures/'
|
||||
- '../src/Doctrine/Purger/'
|
||||
|
||||
# controllers are imported separately to make sure services can be injected
|
||||
# as action arguments even if you don't extend any base controller class
|
||||
@@ -274,12 +274,21 @@ services:
|
||||
tags:
|
||||
- { name: monolog.processor }
|
||||
|
||||
App\Doctrine\Purger\ResetAutoIncrementPurgerFactory:
|
||||
tags:
|
||||
- { name: 'doctrine.fixtures.purger_factory', alias: 'reset_autoincrement_purger' }
|
||||
|
||||
when@test: &test
|
||||
services:
|
||||
|
||||
App\DataFixtures\:
|
||||
resource: '../src/DataFixtures/'
|
||||
autoconfigure: true
|
||||
autowire: true
|
||||
|
||||
App\Doctrine\Purger\:
|
||||
resource: '../src/Doctrine/Purger/'
|
||||
|
||||
App\Doctrine\Purger\ResetAutoIncrementPurgerFactory:
|
||||
tags:
|
||||
- { name: 'doctrine.fixtures.purger_factory', alias: 'reset_autoincrement_purger' }
|
||||
|
||||
# Decorate the doctrine fixtures load command to use our custom purger by default
|
||||
doctrine.fixtures_load_command.custom:
|
||||
decorates: doctrine.fixtures_load_command
|
||||
@@ -288,3 +297,6 @@ when@test: &test
|
||||
- '@doctrine.fixtures.loader'
|
||||
- '@doctrine'
|
||||
- { default: '@App\Doctrine\Purger\DoNotUsePurgerFactory' }
|
||||
|
||||
when@dev:
|
||||
*test
|
||||
|
||||
24
docs/development/index.md
Normal file
24
docs/development/index.md
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Development
|
||||
layout: default
|
||||
nav_order: 10
|
||||
has_children: true
|
||||
---
|
||||
|
||||
# Development Documentation
|
||||
|
||||
This section contains documentation for contributors and developers working on Part-DB.
|
||||
|
||||
## Contents
|
||||
|
||||
- [Translation System](translation.md) - Learn how translations and synonyms work in Part-DB
|
||||
|
||||
## Getting Started
|
||||
|
||||
For general contributing guidelines, see the [CONTRIBUTING.md](../../CONTRIBUTING.md) file in the root of the repository.
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- [GitHub Repository](https://github.com/Part-DB/Part-DB-server)
|
||||
- [Issue Tracker](https://github.com/Part-DB/Part-DB-server/issues)
|
||||
- [Crowdin Translation Platform](https://part-db.crowdin.com/part-db)
|
||||
158
docs/development/translation.md
Normal file
158
docs/development/translation.md
Normal file
@@ -0,0 +1,158 @@
|
||||
---
|
||||
title: Translation System
|
||||
layout: default
|
||||
parent: Development
|
||||
nav_order: 1
|
||||
---
|
||||
|
||||
# Translation System for Contributors
|
||||
|
||||
This document explains how Part-DB's translation system works and how contributors can effectively use it.
|
||||
|
||||
## Overview
|
||||
|
||||
Part-DB uses Symfony's translation system with XLIFF format files. Translations are managed through [Crowdin](https://part-db.crowdin.com/part-db), but understanding the system's features is important for contributors working on code or translations.
|
||||
|
||||
## Basic Translation Approach
|
||||
|
||||
Part-DB uses translation keys rather than translating English strings directly. For example:
|
||||
|
||||
- Translation key: `part.info.title`
|
||||
- English: "Part Information"
|
||||
- German: "Bauteil-Informationen"
|
||||
|
||||
This approach has several advantages:
|
||||
- Keys remain stable even if the English text changes
|
||||
- The same key can have different translations in different contexts
|
||||
- Keys are organized hierarchically by feature/context
|
||||
|
||||
### Using Translations in Code
|
||||
|
||||
In Twig (short syntax):
|
||||
```twig
|
||||
{{ 'part.info.title'|trans }}
|
||||
```
|
||||
|
||||
In Twig (block syntax for longer text):
|
||||
```twig
|
||||
{% trans %}part.info.title{% endtrans %}
|
||||
```
|
||||
|
||||
In PHP:
|
||||
```php
|
||||
$translator->trans('part.info.title')
|
||||
```
|
||||
|
||||
## Type Synonyms and Placeholders
|
||||
|
||||
Part-DB includes a powerful synonym system that allows customizing the names of entity types (like "Category", "Part", "Manufacturer") throughout the interface. This is particularly useful for organizations that prefer different terminology.
|
||||
|
||||
### How Synonyms Work
|
||||
|
||||
Administrators can define custom names for entity types in the settings (Settings → Synonyms). These custom names are then automatically substituted throughout the application using translation placeholders.
|
||||
|
||||
### Placeholder Syntax
|
||||
|
||||
The synonym system uses special placeholders in translation strings that get replaced with the appropriate entity type name:
|
||||
|
||||
| Placeholder | Meaning | Example Output (Default) | Example Output (with synonym) |
|
||||
|------------|---------|-------------------------|------------------------------|
|
||||
| `[Type]` | Singular, capitalized | "Category" | "Product Group" |
|
||||
| `[[Type]]` | Plural, capitalized | "Categories" | "Product Groups" |
|
||||
| `[type]` | Singular, lowercase | "category" | "product group" |
|
||||
| `[[type]]` | Plural, lowercase | "categories" | "product groups" |
|
||||
|
||||
Where `Type` is the element type name (e.g., `category`, `part`, `manufacturer`, etc.).
|
||||
|
||||
**Note for inflected languages**: In languages like German where words are inflected (e.g., case declensions), synonyms should be defined in the nominative case (the standard/dictionary form). The placeholders will be substituted as-is, so translations need to be written to work with the nominative form.
|
||||
|
||||
### Available Element Types
|
||||
|
||||
The following element types support synonyms:
|
||||
|
||||
- `category` - Part categories
|
||||
- `part` - Electronic parts/components
|
||||
- `manufacturer` - Component manufacturers
|
||||
- `supplier` - Component suppliers
|
||||
- `storage_location` - Physical storage locations (also called `storelocation`)
|
||||
- `footprint` - PCB footprints
|
||||
- `attachment_type` - File attachment types
|
||||
- `measurement_unit` - Units of measurement
|
||||
- `currency` - Currencies
|
||||
- `project` - Projects
|
||||
- And many others (see `ElementTypes` enum in code)
|
||||
|
||||
### Examples
|
||||
|
||||
**Example 1**: `"Click here to create a new [Category]"`
|
||||
- Default: "Click here to create a new Category"
|
||||
- With synonym (Category → "Product Type"): "Click here to create a new Product Type"
|
||||
|
||||
**Example 2**: `"You have 5 [[part]] in 3 [[category]]"`
|
||||
- Default: "You have 5 parts in 3 categories"
|
||||
- With synonyms (Part → "Component", Category → "Group"): "You have 5 components in 3 groups"
|
||||
|
||||
### Technical Implementation
|
||||
|
||||
The synonym system is implemented through several components:
|
||||
|
||||
1. **SynonymSettings** (`src/Settings/SynonymSettings.php`): Stores user-defined synonyms
|
||||
2. **ElementTypeNameGenerator** (`src/Services/ElementTypeNameGenerator.php`): Generates localized labels
|
||||
3. **RegisterSynonymsAsTranslationParametersListener** (`src/EventListener/RegisterSynonymsAsTranslationParametersListener.php`): Registers placeholders globally
|
||||
|
||||
The system automatically:
|
||||
- Generates placeholders for all element types at application startup
|
||||
- Handles capitalization properly for different languages
|
||||
- Falls back to default translations if no synonym is defined
|
||||
- Caches placeholder values for performance
|
||||
|
||||
### Guidelines for Using Synonyms
|
||||
|
||||
When writing translation strings:
|
||||
- Use placeholders for entity types (✅ `"Delete this [category]?"` ❌ `"Delete this category?"`)
|
||||
- Match case to context: capitalized (`[Type]`, `[[Type]]`) at sentence start, lowercase (`[type]`, `[[type]]`) mid-sentence
|
||||
- Use singular for single items, plural for multiple items
|
||||
- Only use for actual entity type names, not for actions or feature names
|
||||
|
||||
## Translation Parameters
|
||||
|
||||
In addition to synonym placeholders, Part-DB uses standard Symfony translation parameters for dynamic values:
|
||||
|
||||
```
|
||||
"You have %count% parts selected"
|
||||
```
|
||||
|
||||
Parameters are passed when calling the translation:
|
||||
```php
|
||||
$translator->trans('parts.selected', ['%count%' => 5])
|
||||
```
|
||||
|
||||
Important: Parameters use `%paramName%` syntax, while synonym placeholders use `[Type]` or `[[Type]]` syntax.
|
||||
|
||||
## Translation Files
|
||||
|
||||
Translation files are located in the `translations/` directory and use XLIFF format:
|
||||
|
||||
- `messages.en.xlf` - English translations
|
||||
- `messages.de.xlf` - German translations
|
||||
- `messages.{locale}.xlf` - Other languages
|
||||
|
||||
The XLIFF format includes:
|
||||
- Source key (translation key)
|
||||
- Target (translated text)
|
||||
- Notes (file locations where the key is used)
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use translation keys, not hardcoded text**: Always use translation keys for any user-facing text
|
||||
2. **Organize keys hierarchically**: Use dots to namespace keys (e.g., `part.info.title`)
|
||||
3. **Use synonym placeholders for entity types**: This gives administrators flexibility
|
||||
4. **Test with different synonym configurations**: Ensure your text works with custom names
|
||||
5. **Be consistent**: Follow existing patterns for similar functionality
|
||||
6. **Check other languages**: Look at how similar keys are translated in other languages (via Crowdin's "Other languages" dropdown)
|
||||
|
||||
## Resources
|
||||
|
||||
- [Crowdin Part-DB Project](https://part-db.crowdin.com/part-db)
|
||||
- [Symfony Translation Documentation](https://symfony.com/doc/current/translation.html)
|
||||
- [Contributing Guide](../../CONTRIBUTING.md)
|
||||
@@ -15,75 +15,13 @@ To make emails work you have to properly configure a mail provider in Part-DB.
|
||||
## Configuration
|
||||
|
||||
Part-DB uses [Symfony Mailer](https://symfony.com/doc/current/mailer.html) to send emails, which supports multiple
|
||||
mail providers (like Mailgun, SendGrid, or Brevo). If you want to use one of these providers, check the Symfony
|
||||
automatic mail providers (like MailChimp or SendGrid). If you want to use one of these providers, check the Symfony
|
||||
Mailer documentation for more information.
|
||||
|
||||
We will only cover the configuration of an SMTP provider here, which is sufficient for most use-cases.
|
||||
You will need an email account, which you can use to send emails from via password-based SMTP authentication, this account
|
||||
should be dedicated to Part-DB.
|
||||
|
||||
### Using specialized mail providers (Mailgun, SendGrid, etc.)
|
||||
|
||||
If you want to use a specialized mail provider like Mailgun, SendGrid, Brevo (formerly Sendinblue), Amazon SES, or
|
||||
Postmark instead of SMTP, you need to install the corresponding Symfony mailer package first.
|
||||
|
||||
#### Docker installation
|
||||
|
||||
If you are using Part-DB in Docker, you can install additional mailer packages by setting the `COMPOSER_EXTRA_PACKAGES`
|
||||
environment variable in your `docker-compose.yaml`:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- COMPOSER_EXTRA_PACKAGES=symfony/mailgun-mailer
|
||||
- MAILER_DSN=mailgun+api://API_KEY:DOMAIN@default
|
||||
- EMAIL_SENDER_EMAIL=noreply@yourdomain.com
|
||||
- EMAIL_SENDER_NAME=Part-DB
|
||||
- ALLOW_EMAIL_PW_RESET=1
|
||||
```
|
||||
|
||||
You can install multiple packages by separating them with spaces:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- COMPOSER_EXTRA_PACKAGES=symfony/mailgun-mailer symfony/sendgrid-mailer
|
||||
```
|
||||
|
||||
The packages will be installed automatically when the container starts.
|
||||
|
||||
Common mailer packages:
|
||||
- `symfony/mailgun-mailer` - For [Mailgun](https://www.mailgun.com/)
|
||||
- `symfony/sendgrid-mailer` - For [SendGrid](https://sendgrid.com/)
|
||||
- `symfony/brevo-mailer` - For [Brevo](https://www.brevo.com/) (formerly Sendinblue)
|
||||
- `symfony/amazon-mailer` - For [Amazon SES](https://aws.amazon.com/ses/)
|
||||
- `symfony/postmark-mailer` - For [Postmark](https://postmarkapp.com/)
|
||||
|
||||
#### Direct installation (non-Docker)
|
||||
|
||||
If you have installed Part-DB directly on your server (not in Docker), you need to manually install the required
|
||||
mailer package using composer.
|
||||
|
||||
Navigate to your Part-DB installation directory and run:
|
||||
|
||||
```bash
|
||||
# Install the package as the web server user
|
||||
sudo -u www-data composer require symfony/mailgun-mailer
|
||||
|
||||
# Clear the cache
|
||||
sudo -u www-data php bin/console cache:clear
|
||||
```
|
||||
|
||||
Replace `symfony/mailgun-mailer` with the package you need. You can install multiple packages at once:
|
||||
|
||||
```bash
|
||||
sudo -u www-data composer require symfony/mailgun-mailer symfony/sendgrid-mailer
|
||||
```
|
||||
|
||||
After installing the package, configure the `MAILER_DSN` in your `.env.local` file according to the provider's
|
||||
documentation (see [Symfony Mailer documentation](https://symfony.com/doc/current/mailer.html) for DSN format for
|
||||
each provider).
|
||||
|
||||
## SMTP Configuration
|
||||
|
||||
To configure the SMTP provider, you have to set the following environment variables:
|
||||
|
||||
`MAILER_DSN`: You have to provide the SMTP server address and the credentials for the email account here. The format is
|
||||
|
||||
@@ -80,11 +80,7 @@ services:
|
||||
#- BANNER=This is a test banner<br>with a line break
|
||||
|
||||
# If you use a reverse proxy in front of Part-DB, you must configure the trusted proxies IP addresses here (see reverse proxy documentation for more information):
|
||||
# - TRUSTED_PROXIES=127.0.0.0/8,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
|
||||
|
||||
# If you need to install additional composer packages (e.g., for specific mailer transports), you can specify them here:
|
||||
# The packages will be installed automatically when the container starts
|
||||
# - COMPOSER_EXTRA_PACKAGES=symfony/mailgun-mailer symfony/sendgrid-mailer
|
||||
# - TRUSTED_PROXIES=127.0.0.0/8,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
|
||||
```
|
||||
|
||||
4. Customize the settings by changing the environment variables (or adding new ones). See [Configuration]({% link
|
||||
@@ -153,9 +149,6 @@ services:
|
||||
# Override value if you want to show a given text on homepage.
|
||||
# When this is commented out the webUI can be used to configure the banner
|
||||
#- BANNER=This is a test banner<br>with a line break
|
||||
|
||||
# If you need to install additional composer packages (e.g., for specific mailer transports), you can specify them here:
|
||||
# - COMPOSER_EXTRA_PACKAGES=symfony/mailgun-mailer symfony/sendgrid-mailer
|
||||
|
||||
database:
|
||||
container_name: partdb_database
|
||||
@@ -176,38 +169,6 @@ services:
|
||||
|
||||
```
|
||||
|
||||
### Installing additional composer packages
|
||||
|
||||
If you need to use specific mailer transports or other functionality that requires additional composer packages, you can
|
||||
install them automatically at container startup using the `COMPOSER_EXTRA_PACKAGES` environment variable.
|
||||
|
||||
For example, if you want to use Mailgun as your email provider, you need to install the `symfony/mailgun-mailer` package.
|
||||
Add the following to your docker-compose.yaml environment section:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- COMPOSER_EXTRA_PACKAGES=symfony/mailgun-mailer
|
||||
- MAILER_DSN=mailgun+api://API_KEY:DOMAIN@default
|
||||
```
|
||||
|
||||
You can specify multiple packages by separating them with spaces:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- COMPOSER_EXTRA_PACKAGES=symfony/mailgun-mailer symfony/sendgrid-mailer
|
||||
```
|
||||
|
||||
{: .info }
|
||||
> The packages will be installed when the container starts. This may increase the container startup time on the first run.
|
||||
> The installed packages will persist in the container until it is recreated.
|
||||
|
||||
Common mailer packages you might need:
|
||||
- `symfony/mailgun-mailer` - For Mailgun email service
|
||||
- `symfony/sendgrid-mailer` - For SendGrid email service
|
||||
- `symfony/brevo-mailer` - For Brevo (formerly Sendinblue) email service
|
||||
- `symfony/amazon-mailer` - For Amazon SES email service
|
||||
- `symfony/postmark-mailer` - For Postmark email service
|
||||
|
||||
### Update Part-DB
|
||||
|
||||
You can update Part-DB by pulling the latest image and restarting the container.
|
||||
|
||||
@@ -50,21 +50,6 @@ docker-compose logs -f
|
||||
|
||||
Please include the error logs in your issue on GitHub, if you open an issue.
|
||||
|
||||
## KiCad Integration Issues
|
||||
|
||||
### "API responded with error code: 0: Unknown"
|
||||
|
||||
If you get this error when trying to connect KiCad to Part-DB, it is most likely caused by KiCad not trusting your SSL/TLS certificate.
|
||||
|
||||
**Cause:** KiCad does not trust self-signed SSL/TLS certificates.
|
||||
|
||||
**Solutions:**
|
||||
- Use HTTP instead of HTTPS for the `root_url` in your KiCad library configuration (only recommended for local networks)
|
||||
- Use a certificate from a trusted Certificate Authority (CA) like [Let's Encrypt](https://letsencrypt.org/)
|
||||
- Add your self-signed certificate to the system's trusted certificate store on the computer running KiCad (the exact steps depend on your operating system)
|
||||
|
||||
For more information about KiCad integration, see the [EDA / KiCad integration](../usage/eda_integration.md) documentation.
|
||||
|
||||
## Report Issue
|
||||
|
||||
If an error occurs, or you found a bug, please [open an issue on GitHub](https://github.com/Part-DB/Part-DB-server).
|
||||
|
||||
@@ -22,16 +22,6 @@ This also allows to configure available and usable parts and their properties in
|
||||
Part-DB should be accessible from the PCs with KiCad. The URL should be stable (so no dynamically changing IP).
|
||||
You require a user account in Part-DB, which has permission to access the Part-DB API and create API tokens. Every user can have their own account, or you set up a shared read-only account.
|
||||
|
||||
{: .warning }
|
||||
> **HTTPS with Self-Signed Certificates**
|
||||
>
|
||||
> KiCad does not trust self-signed SSL/TLS certificates. If your Part-DB instance uses HTTPS with a self-signed certificate, KiCad will fail to connect and show an error like: `API responded with error code: 0: Unknown`.
|
||||
>
|
||||
> To resolve this issue, you have the following options:
|
||||
> - Use HTTP instead of HTTPS for the `root_url` (only recommended for local networks)
|
||||
> - Use a certificate from a trusted Certificate Authority (CA) like [Let's Encrypt](https://letsencrypt.org/)
|
||||
> - Add your self-signed certificate to the system's trusted certificate store on the computer running KiCad (the exact steps depend on your operating system)
|
||||
|
||||
To connect KiCad with Part-DB do the following steps:
|
||||
|
||||
1. Create an API token on the user settings page for the KiCad application and copy/save it when it is shown. Currently, KiCad can only read the Part-DB database, so a token with a read-only scope is enough.
|
||||
|
||||
@@ -50,9 +50,9 @@ readonly class RegisterSynonymsAsTranslationParametersListener
|
||||
$this->translator = $translator;
|
||||
}
|
||||
|
||||
public function getSynonymPlaceholders(string $locale): array
|
||||
public function getSynonymPlaceholders(): array
|
||||
{
|
||||
return $this->cache->get('partdb_synonym_placeholders' . '_' . $locale, function (ItemInterface $item) use ($locale) {
|
||||
return $this->cache->get('partdb_synonym_placeholders', function (ItemInterface $item) {
|
||||
$item->tag('synonyms');
|
||||
|
||||
|
||||
@@ -62,12 +62,12 @@ readonly class RegisterSynonymsAsTranslationParametersListener
|
||||
foreach (ElementTypes::cases() as $elementType) {
|
||||
//Versions with capitalized first letter
|
||||
$capitalized = ucfirst($elementType->value); //We have only ASCII element type values, so this is sufficient
|
||||
$placeholders['[' . $capitalized . ']'] = $this->typeNameGenerator->typeLabel($elementType, $locale);
|
||||
$placeholders['[[' . $capitalized . ']]'] = $this->typeNameGenerator->typeLabelPlural($elementType, $locale);
|
||||
$placeholders['[' . $capitalized . ']'] = $this->typeNameGenerator->typeLabel($elementType);
|
||||
$placeholders['[[' . $capitalized . ']]'] = $this->typeNameGenerator->typeLabelPlural($elementType);
|
||||
|
||||
//And we have lowercase versions for both
|
||||
$placeholders['[' . $elementType->value . ']'] = mb_strtolower($this->typeNameGenerator->typeLabel($elementType, $locale));
|
||||
$placeholders['[[' . $elementType->value . ']]'] = mb_strtolower($this->typeNameGenerator->typeLabelPlural($elementType, $locale));
|
||||
$placeholders['[' . $elementType->value . ']'] = mb_strtolower($this->typeNameGenerator->typeLabel($elementType));
|
||||
$placeholders['[[' . $elementType->value . ']]'] = mb_strtolower($this->typeNameGenerator->typeLabelPlural($elementType));
|
||||
}
|
||||
|
||||
return $placeholders;
|
||||
@@ -82,7 +82,7 @@ readonly class RegisterSynonymsAsTranslationParametersListener
|
||||
}
|
||||
|
||||
//Register all placeholders for synonyms
|
||||
$placeholders = $this->getSynonymPlaceholders($event->getRequest()->getLocale());
|
||||
$placeholders = $this->getSynonymPlaceholders();
|
||||
foreach ($placeholders as $key => $value) {
|
||||
$this->translator->addGlobalParameter($key, $value);
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class RegisterSynonymsAsTranslationParametersTest extends KernelTestCase
|
||||
|
||||
public function testGetSynonymPlaceholders(): void
|
||||
{
|
||||
$placeholders = $this->listener->getSynonymPlaceholders('en');
|
||||
$placeholders = $this->listener->getSynonymPlaceholders();
|
||||
|
||||
$this->assertIsArray($placeholders);
|
||||
// Curly braces for lowercase versions
|
||||
|
||||
@@ -13495,14 +13495,5 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz
|
||||
<target>Uživatelé</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -12164,14 +12164,5 @@ Bemærk venligst, at du ikke kan kopiere fra deaktiveret bruger. Hvis du prøver
|
||||
<target>Brugere</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -19,7 +19,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>attachment_type.edit</source>
|
||||
<target>Bearbeite [Attachment_type]</target>
|
||||
<target>Bearbeite Dateityp</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="wyou6GD" name="attachment_type.new">
|
||||
@@ -29,7 +29,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>attachment_type.new</source>
|
||||
<target>Neuer [Attachment_type]</target>
|
||||
<target>Neuer Dateityp</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="JHaxw0a" name="category.labelp">
|
||||
@@ -84,7 +84,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.edit</source>
|
||||
<target>Bearbeite [Category]</target>
|
||||
<target>Bearbeite Kategorie</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="6.rAXsX" name="category.new">
|
||||
@@ -94,7 +94,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.new</source>
|
||||
<target>Neue [Category]</target>
|
||||
<target>Neue Kategorie</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="z1GMBc_" name="currency.caption">
|
||||
@@ -134,7 +134,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>currency.edit</source>
|
||||
<target>Bearbeite [Currency]</target>
|
||||
<target>Bearbeite Währung</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aTtTsUc" name="currency.new">
|
||||
@@ -144,7 +144,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>currency.new</source>
|
||||
<target>Neue [Currency]</target>
|
||||
<target>Neue Währung</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="pe43jlV" name="project.edit">
|
||||
@@ -154,7 +154,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>project.edit</source>
|
||||
<target>Bearbeite [Project]</target>
|
||||
<target>Bearbeite Projekt</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sYgrSg9" name="project.new">
|
||||
@@ -164,7 +164,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>project.new</source>
|
||||
<target>Neues [Project]</target>
|
||||
<target>Neues Projekt</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
@@ -394,7 +394,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>footprint.edit</source>
|
||||
<target>Bearbeite [Footprint]</target>
|
||||
<target>Bearbeite Footprint</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9RgpRoK" name="footprint.new">
|
||||
@@ -404,7 +404,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>footprint.new</source>
|
||||
<target>Neuer [Footprint]</target>
|
||||
<target>Neuer Footprint</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="tvm4F9e" name="group.edit.caption">
|
||||
@@ -436,7 +436,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>group.edit</source>
|
||||
<target>Bearbeite [Group]</target>
|
||||
<target>Bearbeite Gruppe</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_RN3Wph" name="group.new">
|
||||
@@ -446,7 +446,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>group.new</source>
|
||||
<target>Neue [Group]</target>
|
||||
<target>Neue Gruppe</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="jXqdnm_" name="label_profile.caption">
|
||||
@@ -483,7 +483,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>label_profile.edit</source>
|
||||
<target>Bearbeite [Label_profile]</target>
|
||||
<target>Bearbeite Labelprofil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="WkNFJjx" name="label_profile.new">
|
||||
@@ -493,7 +493,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>label_profile.new</source>
|
||||
<target>Neues [Label_profile]</target>
|
||||
<target>Neues Labelprofil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="r3pQ31P" name="manufacturer.caption">
|
||||
@@ -514,7 +514,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>manufacturer.edit</source>
|
||||
<target>Bearbeite [Manufacturer]</target>
|
||||
<target>Bearbeite Hersteller</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dRX_cvD" name="manufacturer.new">
|
||||
@@ -524,7 +524,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>manufacturer.new</source>
|
||||
<target>Neuer [Manufacturer]</target>
|
||||
<target>Neuer Hersteller</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3ra2AyY" name="measurement_unit.caption">
|
||||
@@ -565,7 +565,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.edit</source>
|
||||
<target>Bearbeite [Storage_location]</target>
|
||||
<target>Bearbeite Lagerort</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="am0iTCO" name="storelocation.new">
|
||||
@@ -575,7 +575,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.new</source>
|
||||
<target>Neuer [Storage_location]</target>
|
||||
<target>Neuer Lagerort</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ozZU_B5" name="supplier.edit">
|
||||
@@ -585,7 +585,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>supplier.edit</source>
|
||||
<target>Bearbeite [Supplier]</target>
|
||||
<target>Bearbeite Lieferant</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="b8jlkMd" name="supplier.new">
|
||||
@@ -595,7 +595,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>supplier.new</source>
|
||||
<target>Neuer [Supplier]</target>
|
||||
<target>Neuer Lieferant</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="vX.dhjK" name="user.edit.caption">
|
||||
@@ -737,7 +737,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>user.edit</source>
|
||||
<target>Bearbeite [User]</target>
|
||||
<target>Bearbeite Benutzer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="esEoaa_" name="user.new">
|
||||
@@ -747,7 +747,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>user.new</source>
|
||||
<target>Neuer [User]</target>
|
||||
<target>Neuer Benutzer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="KqHffuc" name="attachment.delete">
|
||||
@@ -1781,7 +1781,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.edit.title</source>
|
||||
<target>Bearbeite [Part] %name%</target>
|
||||
<target>Bearbeite Bauteil %name%</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="yFxHuAp" name="part.edit.card_title">
|
||||
@@ -1942,7 +1942,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.new.card_title</source>
|
||||
<target>Neues [Part] erstellen</target>
|
||||
<target>Neues Bauteil erstellen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5TCcXwk" name="part_lot.delete">
|
||||
@@ -3124,7 +3124,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_parts_count</source>
|
||||
<target>Anzahl verschiedener [[Part]]</target>
|
||||
<target>Anzahl verschiedener Bauteile</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sIGqnJ0" name="statistics.parts_instock_sum">
|
||||
@@ -3135,7 +3135,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.parts_instock_sum</source>
|
||||
<target>Summe aller vorhandenen Bestände an [[Part]]</target>
|
||||
<target>Summe aller vorhanden Bauteilebestände</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="uHmvfnI" name="statistics.parts_with_price">
|
||||
@@ -3146,7 +3146,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.parts_with_price</source>
|
||||
<target>[[Part]] mit Preisinformationen</target>
|
||||
<target>Bauteile mit Preisinformationen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="7x89_xL" name="statistics.categories_count">
|
||||
@@ -3157,7 +3157,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.categories_count</source>
|
||||
<target>Anzahl [[Category]]</target>
|
||||
<target>Anzahl Kategorien</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="s0nLRjN" name="statistics.footprints_count">
|
||||
@@ -3168,7 +3168,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.footprints_count</source>
|
||||
<target>Anzahl [[Footprint]]</target>
|
||||
<target>Anzahl Footprints</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="f0gHZzl" name="statistics.manufacturers_count">
|
||||
@@ -3179,7 +3179,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.manufacturers_count</source>
|
||||
<target>Anzahl [[Manufacturer]]</target>
|
||||
<target>Anzahl Hersteller</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_4rvCd3" name="statistics.storelocations_count">
|
||||
@@ -3190,7 +3190,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.storelocations_count</source>
|
||||
<target>Anzahl [[Storage_location]]</target>
|
||||
<target>Anzahl Lagerorte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="tzzUvrm" name="statistics.suppliers_count">
|
||||
@@ -3201,7 +3201,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.suppliers_count</source>
|
||||
<target>Anzahl [[Supplier]]</target>
|
||||
<target>Anzahl Lieferanten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="QEk.sHE" name="statistics.currencies_count">
|
||||
@@ -3212,7 +3212,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.currencies_count</source>
|
||||
<target>Anzahl [[Currency]]</target>
|
||||
<target>Anzahl Währungen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MTCnGlN" name="statistics.measurement_units_count">
|
||||
@@ -3223,7 +3223,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.measurement_units_count</source>
|
||||
<target>Anzahl [[Measurement_unit]]</target>
|
||||
<target>Anzahl Maßeinheiten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="7sRXll2" name="statistics.devices_count">
|
||||
@@ -3234,7 +3234,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.devices_count</source>
|
||||
<target>Anzahl [[Project]]</target>
|
||||
<target>Anzahl Baugruppen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2u7zTMF" name="statistics.attachment_types_count">
|
||||
@@ -3245,7 +3245,7 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.attachment_types_count</source>
|
||||
<target>Anzahl [[Attachment_type]]</target>
|
||||
<target>Anzahl Anhangstypen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="C0XsLQc" name="statistics.all_attachments_count">
|
||||
@@ -6138,7 +6138,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.attachment_types</source>
|
||||
<target>[[Attachment_type]]</target>
|
||||
<target>Dateitypen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="u8jQbAc" name="tree.tools.edit.categories">
|
||||
@@ -6149,7 +6149,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.categories</source>
|
||||
<target>[[Category]]</target>
|
||||
<target>Kategorien</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3n2K_az" name="tree.tools.edit.projects">
|
||||
@@ -6160,7 +6160,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.projects</source>
|
||||
<target>[[Project]]</target>
|
||||
<target>Projekte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="raK7qaK" name="tree.tools.edit.suppliers">
|
||||
@@ -6171,7 +6171,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.suppliers</source>
|
||||
<target>[[Supplier]]</target>
|
||||
<target>Lieferanten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="1IJ48Y0" name="tree.tools.edit.manufacturer">
|
||||
@@ -6182,7 +6182,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.manufacturer</source>
|
||||
<target>[[Manufacturer]]</target>
|
||||
<target>Hersteller</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="GNbWH_O" name="tree.tools.edit.storelocation">
|
||||
@@ -6192,7 +6192,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.storelocation</source>
|
||||
<target>[[Storage_location]]</target>
|
||||
<target>Lagerorte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="7ZOhkd." name="tree.tools.edit.footprint">
|
||||
@@ -6202,7 +6202,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.footprint</source>
|
||||
<target>[[Footprint]]</target>
|
||||
<target>Footprints</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U1zYjzD" name="tree.tools.edit.currency">
|
||||
@@ -6212,7 +6212,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.currency</source>
|
||||
<target>[[Currency]]</target>
|
||||
<target>Währungen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NnzEujm" name="tree.tools.edit.measurement_unit">
|
||||
@@ -6222,13 +6222,13 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.measurement_unit</source>
|
||||
<target>[[Measurement_unit]]</target>
|
||||
<target>Maßeinheiten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5adacKb" name="tree.tools.edit.part_custom_state">
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.part_custom_state</source>
|
||||
<target>[[Part_custom_state]]</target>
|
||||
<target>Benutzerdefinierter Bauteilstatus</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".Ux4R3T" name="tree.tools.edit.label_profile">
|
||||
@@ -6237,7 +6237,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.label_profile</source>
|
||||
<target>[[Label_profile]]</target>
|
||||
<target>Labelprofil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="eyvi0Zt" name="tree.tools.edit.part">
|
||||
@@ -6247,7 +6247,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.part</source>
|
||||
<target>Neues [Part]</target>
|
||||
<target>Neues Bauteil</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nIHj_yk" name="tree.tools.show.all_parts">
|
||||
@@ -6289,7 +6289,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.system.users</source>
|
||||
<target>[[User]]</target>
|
||||
<target>Benutzer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dTEQQ3T" name="tree.tools.system.groups">
|
||||
@@ -6299,7 +6299,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.system.groups</source>
|
||||
<target>[[Group]]</target>
|
||||
<target>Gruppen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NWWki1R" name="tree.tools.system.event_log">
|
||||
@@ -11013,25 +11013,25 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="r5F3f_G" name="measurement_unit.new">
|
||||
<segment state="translated">
|
||||
<source>measurement_unit.new</source>
|
||||
<target>Neue [Measurement_unit]</target>
|
||||
<target>Neue Maßeinheit</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="W.vDRLw" name="measurement_unit.edit">
|
||||
<segment state="translated">
|
||||
<source>measurement_unit.edit</source>
|
||||
<target>Bearbeite [Measurement_unit]</target>
|
||||
<target>Bearbeite Maßeinheit</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ba52d.g" name="part_custom_state.new">
|
||||
<segment state="translated">
|
||||
<source>part_custom_state.new</source>
|
||||
<target>Neuer [Part_custom_state]</target>
|
||||
<target>Neuer benutzerdefinierter Bauteilstatus</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c1.gb2d" name="part_custom_state.edit">
|
||||
<segment state="translated">
|
||||
<source>part_custom_state.edit</source>
|
||||
<target>Bearbeite [Part_custom_state]</target>
|
||||
<target>Bearbeite benutzerdefinierten Bauteilstatus</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="uW2WHHC" name="user.aboutMe.label">
|
||||
@@ -14429,14 +14429,5 @@ Bitte beachten Sie, dass dieses System derzeit experimentell ist und die hier de
|
||||
<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>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -1638,14 +1638,5 @@
|
||||
<target>Κατασκευαστές</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -19,7 +19,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>attachment_type.edit</source>
|
||||
<target>Edit [attachment_type]</target>
|
||||
<target>Edit file type</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="wyou6GD" name="attachment_type.new">
|
||||
@@ -29,7 +29,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>attachment_type.new</source>
|
||||
<target>New [attachment_type]</target>
|
||||
<target>New file type</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="JHaxw0a" name="category.labelp">
|
||||
@@ -84,7 +84,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.edit</source>
|
||||
<target>Edit [category]</target>
|
||||
<target>Edit category</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="6.rAXsX" name="category.new">
|
||||
@@ -94,7 +94,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.new</source>
|
||||
<target>New [category]</target>
|
||||
<target>New category</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="KSFhj_3" name="currency.iso_code.caption">
|
||||
@@ -124,7 +124,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>currency.edit</source>
|
||||
<target>Edit [currency]</target>
|
||||
<target>Edit currency</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aTtTsUc" name="currency.new">
|
||||
@@ -134,7 +134,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>currency.new</source>
|
||||
<target>New [currency]</target>
|
||||
<target>New currency</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="pe43jlV" name="project.edit">
|
||||
@@ -144,7 +144,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>project.edit</source>
|
||||
<target>Edit [project]</target>
|
||||
<target>Edit project</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sYgrSg9" name="project.new">
|
||||
@@ -154,7 +154,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>project.new</source>
|
||||
<target>New [project]</target>
|
||||
<target>New project</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="eLrezdb" name="search.placeholder">
|
||||
@@ -384,7 +384,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>footprint.edit</source>
|
||||
<target>Edit [footprint]</target>
|
||||
<target>Edit footprint</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9RgpRoK" name="footprint.new">
|
||||
@@ -394,7 +394,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>footprint.new</source>
|
||||
<target>New [footprint]</target>
|
||||
<target>New footprint</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="m27aWeR" name="user.edit.permissions">
|
||||
@@ -416,7 +416,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>group.edit</source>
|
||||
<target>Edit [group]</target>
|
||||
<target>Edit group</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_RN3Wph" name="group.new">
|
||||
@@ -426,7 +426,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>group.new</source>
|
||||
<target>New [group]</target>
|
||||
<target>New group</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="GgwITAf" name="label_profile.advanced">
|
||||
@@ -454,7 +454,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>label_profile.edit</source>
|
||||
<target>Edit [label_profile]</target>
|
||||
<target>Edit label profile</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="WkNFJjx" name="label_profile.new">
|
||||
@@ -464,7 +464,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>label_profile.new</source>
|
||||
<target>New [label_profile]</target>
|
||||
<target>New label profile</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="AVQBOWW" name="manufacturer.edit">
|
||||
@@ -474,7 +474,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>manufacturer.edit</source>
|
||||
<target>Edit [manufacturer]</target>
|
||||
<target>Edit manufacturer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dRX_cvD" name="manufacturer.new">
|
||||
@@ -484,7 +484,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>manufacturer.new</source>
|
||||
<target>New [manufacturer]</target>
|
||||
<target>New manufacturer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="crdkzlg" name="storelocation.labelp">
|
||||
@@ -509,7 +509,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.edit</source>
|
||||
<target>Edit [storage_location]</target>
|
||||
<target>Edit storage location</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="am0iTCO" name="storelocation.new">
|
||||
@@ -519,7 +519,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.new</source>
|
||||
<target>New [storage_location]</target>
|
||||
<target>New storage location</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ozZU_B5" name="supplier.edit">
|
||||
@@ -529,7 +529,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>supplier.edit</source>
|
||||
<target>Edit [supplier]</target>
|
||||
<target>Edit supplier</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="b8jlkMd" name="supplier.new">
|
||||
@@ -539,7 +539,7 @@
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>supplier.new</source>
|
||||
<target>New [supplier]</target>
|
||||
<target>New supplier</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Ux8wVuF" name="user.edit.configuration">
|
||||
@@ -672,7 +672,7 @@ The user will have to set up all two-factor authentication methods again and pri
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>user.edit</source>
|
||||
<target>Edit [user]</target>
|
||||
<target>Edit user</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="esEoaa_" name="user.new">
|
||||
@@ -682,7 +682,7 @@ The user will have to set up all two-factor authentication methods again and pri
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>user.new</source>
|
||||
<target>New [user]</target>
|
||||
<target>New user</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="KqHffuc" name="attachment.delete">
|
||||
@@ -1002,7 +1002,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>entity.info.parts_count</source>
|
||||
<target>Number of [[part]] with this element</target>
|
||||
<target>Number of parts with this element</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="o0XIi58" name="specifications.property">
|
||||
@@ -1716,7 +1716,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.edit.title</source>
|
||||
<target>Edit [part]</target>
|
||||
<target>Edit part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="yFxHuAp" name="part.edit.card_title">
|
||||
@@ -1727,7 +1727,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.edit.card_title</source>
|
||||
<target>Edit [part]</target>
|
||||
<target>Edit part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="EwY218_" name="part.edit.tab.common">
|
||||
@@ -1877,7 +1877,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.new.card_title</source>
|
||||
<target>Create new [part]</target>
|
||||
<target>Create new part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5TCcXwk" name="part_lot.delete">
|
||||
@@ -1941,7 +1941,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.info.title</source>
|
||||
<target>Detail info for [part]</target>
|
||||
<target>Detail info for part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="c9.fQPj" name="part.part_lots.label">
|
||||
@@ -2107,7 +2107,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="final">
|
||||
<source>user.creating_user</source>
|
||||
<target>User who created this [part]</target>
|
||||
<target>User who created this part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="KEhkI6s" name="Unknown">
|
||||
@@ -2145,7 +2145,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="final">
|
||||
<source>user.last_editing_user</source>
|
||||
<target>User who edited this [part] last</target>
|
||||
<target>User who edited this part last</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="R8D9PGv" name="part.isFavorite">
|
||||
@@ -2509,7 +2509,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.edit.btn</source>
|
||||
<target>Edit [part]</target>
|
||||
<target>Edit part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="TNzs45Y" name="part.clone.btn">
|
||||
@@ -2520,7 +2520,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.clone.btn</source>
|
||||
<target>Clone [part]</target>
|
||||
<target>Clone part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="RG1RD20" name="part.create.btn">
|
||||
@@ -2531,7 +2531,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.create.btn</source>
|
||||
<target>Create new [part]</target>
|
||||
<target>Create new part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="kxAbZAe" name="part.delete.confirm_title">
|
||||
@@ -2541,7 +2541,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.delete.confirm_title</source>
|
||||
<target>Do you really want to delete this [part]?</target>
|
||||
<target>Do you really want to delete this part?</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="owQRbkU" name="part.delete.message">
|
||||
@@ -2551,7 +2551,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.delete.message</source>
|
||||
<target>This [part] and any associated information (like attachments, price information, etc.) will be deleted. This can not be undone!</target>
|
||||
<target>This part and any associated information (like attachments, price information, etc.) will be deleted. This can not be undone!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="oH8.Zx6" name="part.delete">
|
||||
@@ -2561,7 +2561,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>part.delete</source>
|
||||
<target>Delete [part]</target>
|
||||
<target>Delete part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="P7nc8TK" name="parts_list.all.title">
|
||||
@@ -2571,7 +2571,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>parts_list.all.title</source>
|
||||
<target>All [[part]]</target>
|
||||
<target>All parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aSDZrnb" name="parts_list.category.title">
|
||||
@@ -2581,7 +2581,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>parts_list.category.title</source>
|
||||
<target>[[Part]] with [category]</target>
|
||||
<target>Parts with category</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="qZfLMs5" name="parts_list.footprint.title">
|
||||
@@ -2591,7 +2591,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>parts_list.footprint.title</source>
|
||||
<target>[[Part]] with [footprint]</target>
|
||||
<target>Parts with footprint</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="wzH1LnU" name="parts_list.manufacturer.title">
|
||||
@@ -2601,7 +2601,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>parts_list.manufacturer.title</source>
|
||||
<target>[[Part]] with [manufacturer]</target>
|
||||
<target>Parts with manufacturer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="z0tqm9_" name="parts_list.search.title">
|
||||
@@ -2611,7 +2611,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>parts_list.search.title</source>
|
||||
<target>Search [[part]]</target>
|
||||
<target>Search Parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".nsfK4V" name="parts_list.storelocation.title">
|
||||
@@ -2621,7 +2621,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>parts_list.storelocation.title</source>
|
||||
<target>[[Part]] with [[storage_location]]</target>
|
||||
<target>Parts with storage locations</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dqIl9gT" name="parts_list.supplier.title">
|
||||
@@ -2631,7 +2631,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>parts_list.supplier.title</source>
|
||||
<target>[[Part]] with [supplier]</target>
|
||||
<target>Parts with supplier</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="BJygaSh" name="parts_list.tags.title">
|
||||
@@ -3059,7 +3059,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_parts_count</source>
|
||||
<target>Number of distinct [[part]]</target>
|
||||
<target>Number of distinct parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sIGqnJ0" name="statistics.parts_instock_sum">
|
||||
@@ -3070,7 +3070,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.parts_instock_sum</source>
|
||||
<target>Sum of all [[part]] stocks</target>
|
||||
<target>Sum of all parts stocks</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="uHmvfnI" name="statistics.parts_with_price">
|
||||
@@ -3081,7 +3081,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.parts_with_price</source>
|
||||
<target>Number of [[part]] with price information</target>
|
||||
<target>Number of parts with price information</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="7x89_xL" name="statistics.categories_count">
|
||||
@@ -3092,7 +3092,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.categories_count</source>
|
||||
<target>Number of [[category]]</target>
|
||||
<target>Number of categories</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="s0nLRjN" name="statistics.footprints_count">
|
||||
@@ -3103,7 +3103,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.footprints_count</source>
|
||||
<target>Number of [[footprint]]</target>
|
||||
<target>Number of footprints</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="f0gHZzl" name="statistics.manufacturers_count">
|
||||
@@ -3114,7 +3114,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.manufacturers_count</source>
|
||||
<target>Number of [[manufacturer]]</target>
|
||||
<target>Number of manufacturers</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="_4rvCd3" name="statistics.storelocations_count">
|
||||
@@ -3125,7 +3125,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.storelocations_count</source>
|
||||
<target>Number of [[storage_location]]</target>
|
||||
<target>Number of storage locations</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="tzzUvrm" name="statistics.suppliers_count">
|
||||
@@ -3136,7 +3136,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.suppliers_count</source>
|
||||
<target>Number of [[supplier]]</target>
|
||||
<target>Number of suppliers</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="QEk.sHE" name="statistics.currencies_count">
|
||||
@@ -3147,7 +3147,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.currencies_count</source>
|
||||
<target>Number of [[currency]]</target>
|
||||
<target>Number of currencies</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MTCnGlN" name="statistics.measurement_units_count">
|
||||
@@ -3158,7 +3158,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.measurement_units_count</source>
|
||||
<target>Number of [[measurement_unit]]</target>
|
||||
<target>Number of measurement units</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="7sRXll2" name="statistics.devices_count">
|
||||
@@ -3169,7 +3169,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.devices_count</source>
|
||||
<target>Number of [[project]]</target>
|
||||
<target>Number of projects</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2u7zTMF" name="statistics.attachment_types_count">
|
||||
@@ -3180,7 +3180,7 @@ Sub elements will be moved upwards.</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>statistics.attachment_types_count</source>
|
||||
<target>Number of [[attachment_type]]</target>
|
||||
<target>Number of attachment types</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="C0XsLQc" name="statistics.all_attachments_count">
|
||||
@@ -6073,7 +6073,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.attachment_types</source>
|
||||
<target>[[Attachment_type]]</target>
|
||||
<target>Attachment types</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="u8jQbAc" name="tree.tools.edit.categories">
|
||||
@@ -6084,7 +6084,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.categories</source>
|
||||
<target>[[Category]]</target>
|
||||
<target>Categories</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="3n2K_az" name="tree.tools.edit.projects">
|
||||
@@ -6095,7 +6095,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.projects</source>
|
||||
<target>[[Project]]</target>
|
||||
<target>Projects</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="raK7qaK" name="tree.tools.edit.suppliers">
|
||||
@@ -6106,7 +6106,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.suppliers</source>
|
||||
<target>[[Supplier]]</target>
|
||||
<target>Suppliers</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="1IJ48Y0" name="tree.tools.edit.manufacturer">
|
||||
@@ -6117,7 +6117,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.manufacturer</source>
|
||||
<target>[[Manufacturer]]</target>
|
||||
<target>Manufacturers</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="GNbWH_O" name="tree.tools.edit.storelocation">
|
||||
@@ -6127,7 +6127,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.storelocation</source>
|
||||
<target>[[Storage_location]]</target>
|
||||
<target>Storage locations</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="7ZOhkd." name="tree.tools.edit.footprint">
|
||||
@@ -6137,7 +6137,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.footprint</source>
|
||||
<target>[[Footprint]]</target>
|
||||
<target>Footprints</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="U1zYjzD" name="tree.tools.edit.currency">
|
||||
@@ -6147,7 +6147,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.currency</source>
|
||||
<target>[[Currency]]</target>
|
||||
<target>Currencies</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NnzEujm" name="tree.tools.edit.measurement_unit">
|
||||
@@ -6157,13 +6157,13 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.measurement_unit</source>
|
||||
<target>[[Measurement_unit]]</target>
|
||||
<target>Measurement Unit</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="oYLWbbv" name="tree.tools.edit.part_custom_state">
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.part_custom_state</source>
|
||||
<target>[[Part_custom_state]]</target>
|
||||
<target>Custom part states</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".Ux4R3T" name="tree.tools.edit.label_profile">
|
||||
@@ -6172,7 +6172,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.label_profile</source>
|
||||
<target>[[Label_profile]]</target>
|
||||
<target>Label profiles</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="eyvi0Zt" name="tree.tools.edit.part">
|
||||
@@ -6182,7 +6182,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.edit.part</source>
|
||||
<target>New [part]</target>
|
||||
<target>New part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nIHj_yk" name="tree.tools.show.all_parts">
|
||||
@@ -6193,7 +6193,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.show.all_parts</source>
|
||||
<target>Show all [[part]]</target>
|
||||
<target>Show all parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="JxVmFbM" name="tree.tools.show.all_attachments">
|
||||
@@ -6224,7 +6224,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.system.users</source>
|
||||
<target>[[User]]</target>
|
||||
<target>Users</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dTEQQ3T" name="tree.tools.system.groups">
|
||||
@@ -6234,7 +6234,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>tree.tools.system.groups</source>
|
||||
<target>[[Group]]</target>
|
||||
<target>Groups</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="NWWki1R" name="tree.tools.system.event_log">
|
||||
@@ -6536,7 +6536,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>validator.part_lot.location_full</source>
|
||||
<target>The [storage_location] was marked as full, so you can not add a new [part] to it.</target>
|
||||
<target>The storage location was marked as full, so you can not add a new part to it.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="h6qELde" name="validator.part_lot.only_existing">
|
||||
@@ -6546,7 +6546,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>validator.part_lot.only_existing</source>
|
||||
<target>The [storage_location] was marked as "only existing", so you can not add new [part] to it.</target>
|
||||
<target>The storage location was marked as "only existing", so you can not add new part to it.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="2yWi8eP" name="validator.part_lot.single_part">
|
||||
@@ -6556,7 +6556,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>validator.part_lot.single_part</source>
|
||||
<target>The [storage_location] was marked as "single [part]", so you can not add a new [part] to it.</target>
|
||||
<target>The storage location was marked as "single part", so you can not add a new part to it.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="aBSsuxp" name="m_status.active.help">
|
||||
@@ -6737,7 +6737,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>entity.edit.not_selectable.help</source>
|
||||
<target>If this option is activated, this element can not be assigned to a [part] property. Useful if this element is just used for grouping.</target>
|
||||
<target>If this option is activated, this element can not be assigned to a part property. Useful if this element is just used for grouping.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="poCwov." name="bbcode.hint">
|
||||
@@ -6777,7 +6777,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.edit.disable_footprints</source>
|
||||
<target>Disable [[footprint]]</target>
|
||||
<target>Disable footprints</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MLbac5k" name="category.edit.disable_footprints.help">
|
||||
@@ -6787,7 +6787,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.edit.disable_footprints.help</source>
|
||||
<target>If this option is activated, the [footprint] property is disabled for all [[part]] with this [category].</target>
|
||||
<target>If this option is activated, the footprint property is disabled for all parts with this category.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="JWHe4Hi" name="category.edit.disable_manufacturers">
|
||||
@@ -6797,7 +6797,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.edit.disable_manufacturers</source>
|
||||
<target>Disable [[manufacturer]]</target>
|
||||
<target>Disable manufacturers</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id=".ItLezq" name="category.edit.disable_manufacturers.help">
|
||||
@@ -6807,7 +6807,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.edit.disable_manufacturers.help</source>
|
||||
<target>If this option is activated, the [manufacturer] property is disabled for all [[part]] with this [category].</target>
|
||||
<target>If this option is activated, the manufacturer property is disabled for all parts with this category.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="g_gRbhu" name="category.edit.disable_autodatasheets">
|
||||
@@ -6827,7 +6827,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.edit.disable_autodatasheets.help</source>
|
||||
<target>If this option is activated, no automatic links to datasheets are created for [[part]] with this [category].</target>
|
||||
<target>If this option is activated, no automatic links to datasheets are created for parts with this category.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="QzSkLse" name="category.edit.disable_properties">
|
||||
@@ -6847,7 +6847,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>category.edit.disable_properties.help</source>
|
||||
<target>If this option is activated, the [part] properties are disabled for [[part]] with this [category].</target>
|
||||
<target>If this option is activated, the part properties are disabled for parts with this category.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ILoRXgM" name="category.edit.partname_hint">
|
||||
@@ -7182,7 +7182,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.edit.is_full.help</source>
|
||||
<target>If this option is selected, it is neither possible to add new [[part]] to this storelocation or to increase the amount of existing [[part]].</target>
|
||||
<target>If this option is selected, it is neither possible to add new parts to this storelocation or to increase the amount of existing parts.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="V1su4ac" name="storelocation.limit_to_existing.label">
|
||||
@@ -7192,7 +7192,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.limit_to_existing.label</source>
|
||||
<target>Limit to existing [[part]]</target>
|
||||
<target>Limit to existing parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="6D.6huj" name="storelocation.limit_to_existing.help">
|
||||
@@ -7202,7 +7202,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.limit_to_existing.help</source>
|
||||
<target>If this option is activated, it is not possible to add new [[part]] to this storelocation, but the amount of existing [[part]] can be increased.</target>
|
||||
<target>If this option is activated, it is not possible to add new parts to this storelocation, but the amount of existing parts can be increased.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="tGVVeof" name="storelocation.only_single_part.label">
|
||||
@@ -7212,7 +7212,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.only_single_part.label</source>
|
||||
<target>Only single [part]</target>
|
||||
<target>Only single part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Hyh5pvY" name="storelocation.only_single_part.help">
|
||||
@@ -7222,7 +7222,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.only_single_part.help</source>
|
||||
<target>If this option is activated, only a single [part] (with every amount) can be assigned to this [storage_location]. Useful for small SMD boxes or feeders.</target>
|
||||
<target>If this option is activated, only a single part (with every amount) can be assigned to this storage location. Useful for small SMD boxes or feeders.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sty2ele" name="storelocation.storage_type.label">
|
||||
@@ -7242,7 +7242,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>storelocation.storage_type.help</source>
|
||||
<target>You can select a [measurement_unit] here, which a [part] must have to be able to be assigned to this [storage_location]</target>
|
||||
<target>You can select a measurement unit here, which a part must have to be able to be assigned to this storage location</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ilC3c6u" name="supplier.edit.default_currency">
|
||||
@@ -7504,7 +7504,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.part.all_parts</source>
|
||||
<target>List all [[part]]</target>
|
||||
<target>List all parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="xGpxdp3" name="perm.part.no_price_parts">
|
||||
@@ -7514,7 +7514,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.part.no_price_parts</source>
|
||||
<target>List [[part]] without price info</target>
|
||||
<target>List parts without price info</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="gVBtadZ" name="perm.part.obsolete_parts">
|
||||
@@ -7524,7 +7524,7 @@ Element 1 -> Element 1.2</target>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>perm.part.obsolete_parts</source>
|
||||
<target>List obsolete [[part]]</target>
|
||||
<target>List obsolete parts</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="rh5syrd" name="perm.part.unknown_instock_parts">
|
||||
@@ -8636,7 +8636,7 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="DachcxN" name="part.table.edit.title">
|
||||
<segment state="translated">
|
||||
<source>part.table.edit.title</source>
|
||||
<target>Edit [part]</target>
|
||||
<target>Edit part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="keLmdcq" name="part_list.action.scrollable_hint">
|
||||
@@ -9362,7 +9362,7 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="e97FPsh" name="entity.info.parts_count_recursive">
|
||||
<segment state="translated">
|
||||
<source>entity.info.parts_count_recursive</source>
|
||||
<target>Number of [[part]] with this element or its sub elements</target>
|
||||
<target>Number of parts with this element or its sub elements</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="st92iWF" name="tools.server_infos.title">
|
||||
@@ -9596,13 +9596,13 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="hpPkHYF" name="project.add_parts_to_project">
|
||||
<segment state="translated">
|
||||
<source>project.add_parts_to_project</source>
|
||||
<target>Add [[part]] to [project] BOM</target>
|
||||
<target>Add parts to project BOM</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="mauieYX" name="part.info.add_part_to_project">
|
||||
<segment state="translated">
|
||||
<source>part.info.add_part_to_project</source>
|
||||
<target>Add this [part] to a [project]</target>
|
||||
<target>Add this part to a project</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5r.n1zf" name="project_bom_entry.label">
|
||||
@@ -9650,43 +9650,43 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="9GtmqC1" name="part.new_build_part.error.build_part_already_exists">
|
||||
<segment state="translated">
|
||||
<source>part.new_build_part.error.build_part_already_exists</source>
|
||||
<target>The [project] already has a build [part]!</target>
|
||||
<target>The project already has a build part!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9soO_kf" name="project.edit.associated_build_part">
|
||||
<segment state="translated">
|
||||
<source>project.edit.associated_build_part</source>
|
||||
<target>Associated builds [part]</target>
|
||||
<target>Associated builds part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="8Mu.T78" name="project.edit.associated_build_part.add">
|
||||
<segment state="translated">
|
||||
<source>project.edit.associated_build_part.add</source>
|
||||
<target>Add builds [part]</target>
|
||||
<target>Add builds part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sPdCBUl" name="project.edit.associated_build.hint">
|
||||
<segment state="translated">
|
||||
<source>project.edit.associated_build.hint</source>
|
||||
<target>This [part] represents the builds of this [project], which are stored somewhere.</target>
|
||||
<target>This part represents the builds of this project, which are stored somewhere.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Cke2p4U" name="part.info.projectBuildPart.hint">
|
||||
<segment state="translated">
|
||||
<source>part.info.projectBuildPart.hint</source>
|
||||
<target>This [part] represents the builds of the following [project] and is associated with it</target>
|
||||
<target>This part represents the builds of the following project and is associated with it</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="yCR6rBb" name="part.is_build_part">
|
||||
<segment state="translated">
|
||||
<source>part.is_build_part</source>
|
||||
<target>Is [project] builds [part]</target>
|
||||
<target>Is project builds part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="dV.E0zI" name="project.info.title">
|
||||
<segment state="translated">
|
||||
<source>project.info.title</source>
|
||||
<target>[Project] info</target>
|
||||
<target>Project info</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="LYURecm" name="project.info.bom_entries_count">
|
||||
@@ -9884,13 +9884,13 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="TRh.K81" name="part_list.action.projects.generate_label">
|
||||
<segment state="translated">
|
||||
<source>part_list.action.projects.generate_label</source>
|
||||
<target>Generate labels (for [[part]])</target>
|
||||
<target>Generate labels (for parts)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="CEr_90G" name="part_list.action.projects.generate_label_lot">
|
||||
<segment state="translated">
|
||||
<source>part_list.action.projects.generate_label_lot</source>
|
||||
<target>Generate labels (for [[part_lot]])</target>
|
||||
<target>Generate labels (for part lots)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="QjZuQlv" name="part_list.action.generate_label.empty">
|
||||
@@ -9914,7 +9914,7 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id=".I7zcoK" name="project.builds.following_bom_entries_miss_instock">
|
||||
<segment state="translated">
|
||||
<source>project.builds.following_bom_entries_miss_instock</source>
|
||||
<target>The following [[part]] have not enough stock to build this [project] at least once:</target>
|
||||
<target>The following parts have not enough stock to build this project at least once:</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="fGT0qfb" name="project.builds.stocked">
|
||||
@@ -9938,19 +9938,19 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="NdZ1t7a" name="project.builds.number_of_builds_possible">
|
||||
<segment state="translated">
|
||||
<source>project.builds.number_of_builds_possible</source>
|
||||
<target><![CDATA[You have enough stocked to build <b>%max_builds%</b> builds of this [project].]]></target>
|
||||
<target>You have enough stocked to build <b>%max_builds%</b> builds of this project.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="iuSpPbg" name="project.builds.check_project_status">
|
||||
<segment state="translated">
|
||||
<source>project.builds.check_project_status</source>
|
||||
<target><![CDATA[The current [project] status is <b>"%project_status%"</b>. You should check if you really want to build the [project] with this status!]]></target>
|
||||
<target>The current project status is <b>"%project_status%"</b>. You should check if you really want to build the project with this status!</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Y7vSSxi" name="project.builds.following_bom_entries_miss_instock_n">
|
||||
<segment state="translated">
|
||||
<source>project.builds.following_bom_entries_miss_instock_n</source>
|
||||
<target>You do not have enough [[part]] stocked to build this [project] %number_of_builds% times. The following [[part]] have missing instock:</target>
|
||||
<target>You do not have enough parts stocked to build this project %number_of_builds% times. The following parts have missing instock:</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="1BGl3Dv" name="project.build.flash.invalid_input">
|
||||
@@ -9974,7 +9974,7 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="zgLSR.X" name="project.build.help">
|
||||
<segment state="translated">
|
||||
<source>project.build.help</source>
|
||||
<target>Choose from which [[part_lot]] the stock to build this [project] should be taken (and in which amount). Check the checkbox for each BOM Entry, when you are finished withdrawing the [[part]], or use the top checkbox to check all boxes at once.</target>
|
||||
<target>Choose from which part lots the stock to build this project should be taken (and in which amount). Check the checkbox for each BOM Entry, when you are finished withdrawing the parts, or use the top checkbox to check all boxes at once.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="srYaI3Z" name="project.build.buildsPartLot.new_lot">
|
||||
@@ -10244,13 +10244,13 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="1swuUz4" name="log.element_edited.changed_fields.disable_footprints">
|
||||
<segment state="translated">
|
||||
<source>log.element_edited.changed_fields.disable_footprints</source>
|
||||
<target>Disable [[footprint]]</target>
|
||||
<target>Disable footprints</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sZ3vQaH" name="log.element_edited.changed_fields.disable_manufacturers">
|
||||
<segment state="translated">
|
||||
<source>log.element_edited.changed_fields.disable_manufacturers</source>
|
||||
<target>Disable [[manufacturer]]</target>
|
||||
<target>Disable manufacturers</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="lLXp.Sn" name="log.element_edited.changed_fields.disable_autodatasheets">
|
||||
@@ -10862,25 +10862,25 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="r5F3f_G" name="measurement_unit.new">
|
||||
<segment state="translated">
|
||||
<source>measurement_unit.new</source>
|
||||
<target>New [measurement_unit]</target>
|
||||
<target>New Measurement Unit</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="W.vDRLw" name="measurement_unit.edit">
|
||||
<segment state="translated">
|
||||
<source>measurement_unit.edit</source>
|
||||
<target>Edit [measurement_unit]</target>
|
||||
<target>Edit Measurement Unit</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="Ae0GMtY" name="part_custom_state.new">
|
||||
<segment state="translated">
|
||||
<source>part_custom_state.new</source>
|
||||
<target>New [part_custom_state]</target>
|
||||
<target>New custom part state</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="5uZ23wR" name="part_custom_state.edit">
|
||||
<segment state="translated">
|
||||
<source>part_custom_state.edit</source>
|
||||
<target>Edit [part_custom_state]</target>
|
||||
<target>Edit custom part state</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="uW2WHHC" name="user.aboutMe.label">
|
||||
@@ -10898,7 +10898,7 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="lYlHhtl" name="storelocation.part_owner_must_match.label">
|
||||
<segment state="translated">
|
||||
<source>storelocation.part_owner_must_match.label</source>
|
||||
<target>[Part_lot] owner must match [storage_location] owner</target>
|
||||
<target>Part Lot owner must match storage location owner</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="eMHXpbV" name="part_lot.owner">
|
||||
@@ -10934,7 +10934,7 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="9zWwSvC" name="part.withdraw.access_denied">
|
||||
<segment state="translated">
|
||||
<source>part.withdraw.access_denied</source>
|
||||
<target>Not allowed to do the desired action. Please check your permissions and the owner of the [[part_lot]].</target>
|
||||
<target>Not allowed to do the desired action. Please check your permissions and the owner of the part lots.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="4ynARET" name="part.info.amount.less_than_desired">
|
||||
@@ -10952,7 +10952,7 @@ Element 1 -> Element 1.2</target>
|
||||
<unit id="krpFlYH" name="log.element_edited.changed_fields.part_owner_must_match">
|
||||
<segment state="translated">
|
||||
<source>log.element_edited.changed_fields.part_owner_must_match</source>
|
||||
<target>[Part] owner must match [storage_location] owner</target>
|
||||
<target>Part owner must match storage location owner</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="o5u.Nnz" name="part.filter.lessThanDesired">
|
||||
@@ -11524,7 +11524,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
||||
<unit id="bkPXoxM" name="project.build.dont_check_quantity.help">
|
||||
<segment state="translated">
|
||||
<source>project.build.dont_check_quantity.help</source>
|
||||
<target>If this option is selected, the given withdraw quantities are used as given, no matter if more or less [[part]] are actually required to build this [project].</target>
|
||||
<target>If this option is selected, the given withdraw quantities are used as given, no matter if more or less parts are actually required to build this project.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="XsE9cmC" name="part_list.action.invert_selection">
|
||||
@@ -14278,14 +14278,5 @@ Please note that this system is currently experimental, and the synonyms defined
|
||||
<target>If enabled, an option for to generate IPN with this global prefix, shared across parts in all categories.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -12336,14 +12336,5 @@ Por favor ten en cuenta que no puedes personificar a un usuario deshabilitado. S
|
||||
<target>Usuarios</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -9076,14 +9076,5 @@ exemple de ville</target>
|
||||
<target>Utilisateurs</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -14049,14 +14049,5 @@
|
||||
<target>Tömeges importálási feladat alkatrészek</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -12338,14 +12338,5 @@ Notare che non è possibile impersonare un utente disattivato. Quando si prova a
|
||||
<target>Utenti</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -8813,14 +8813,5 @@ Exampletown</target>
|
||||
<target>ユーザー</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -840,14 +840,5 @@
|
||||
<target>Aangepaste staten van onderdelen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -12191,14 +12191,5 @@ Należy pamiętać, że nie możesz udawać nieaktywnych użytkowników. Jeśli
|
||||
<target>Użytkownicy</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -12291,14 +12291,5 @@
|
||||
<target>Пользователи</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
@@ -12176,14 +12176,5 @@ Element 3</target>
|
||||
<target>用户</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="MxKRRx_" name="datatable.datatable.lengthMenu">
|
||||
<notes>
|
||||
<note priority="1">Do not remove! Used for datatables rendering.</note>
|
||||
</notes>
|
||||
<segment state="translated">
|
||||
<source>datatable.datatable.lengthMenu</source>
|
||||
<target>_MENU_</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
||||
Reference in New Issue
Block a user