Merge branch 'maintenance-mode-fix' into api-docs

This commit is contained in:
Oliver Walters 2024-02-13 19:10:50 +11:00
commit fa5f04bfda
72 changed files with 25267 additions and 24550 deletions

View File

@ -30,6 +30,7 @@ jobs:
server: ${{ steps.filter.outputs.server }}
migrations: ${{ steps.filter.outputs.migrations }}
frontend: ${{ steps.filter.outputs.frontend }}
api: ${{ steps.filter.outputs.api }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1
@ -44,6 +45,8 @@ jobs:
migrations:
- '**/migrations/**'
- '.github/workflows**'
api:
- 'InvenTree/InvenTree/api_version.py'
frontend:
- 'src/frontend/**'
@ -126,6 +129,8 @@ jobs:
INVENTREE_PYTHON_TEST_SERVER: http://localhost:12345
INVENTREE_PYTHON_TEST_USERNAME: testuser
INVENTREE_PYTHON_TEST_PASSWORD: testpassword
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1
@ -136,8 +141,64 @@ jobs:
dev-install: true
update: true
- name: Export API Documentation
run: invoke schema --ignore-warnings
- name: Upload schema
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # pin@v3.1.3
with:
name: schema.yml
path: InvenTree/schema.yml
- name: Download public schema
if: needs.paths-filter.outputs.api == 'false'
run: |
invoke schema --ignore-warnings
pip install requests >/dev/null 2>&1
version="$(python3 ci/version_check.py only_version 2>&1)"
echo "Version: $version"
url="https://raw.githubusercontent.com/inventree/schema/main/export/${version}/api.yaml"
echo "URL: $url"
curl -s -o api.yaml $url
echo "Downloaded api.yaml"
- name: Check for differences in schemas
if: needs.paths-filter.outputs.api == 'false'
run: |
diff --color -u InvenTree/schema.yml api.yaml
diff -u InvenTree/schema.yml api.yaml && echo "no difference in API schema " || echo "differences in API schema" && exit 2
- name: Check schema - including warnings
run: invoke schema
continue-on-error: true
- name: Extract version for publishing
id: version
if: github.ref == 'refs/heads/master' && needs.paths-filter.outputs.api == 'true'
run: |
pip install requests >/dev/null 2>&1
version="$(python3 ci/version_check.py only_version 2>&1)"
echo "Version: $version"
echo "version=$version" >> "$GITHUB_OUTPUT"
schema-push:
name: Push new schema
runs-on: ubuntu-20.04
needs: [paths-filter, schema]
if: needs.schema.result == 'success' && github.ref == 'refs/heads/master' && needs.paths-filter.outputs.api == 'true'
env:
version: ${{ needs.schema.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
repository: inventree/schema
token: ${{ secrets.SCHEMA_PAT }}
- name: Download schema artifact
uses: actions/download-artifact@v3
with:
name: schema.yml
- name: Move schema to correct location
run: |
echo "Version: $version"
mkdir export/${version}
mv schema.yml export/${version}/api.yaml
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "Update API schema for ${version}"
python:
name: Tests - inventree-python

View File

@ -1,11 +1,14 @@
"""InvenTree API version information."""
# InvenTree API version
INVENTREE_API_VERSION = 166
INVENTREE_API_VERSION = 167
"""Increment this API version number whenever there is a significant change to the API that any clients need to know about."""
INVENTREE_API_TEXT = """
v167 -> 2024-02-07: https://github.com/inventree/InvenTree/pull/6440
- Fixes for OpenAPI schema generation
v166 -> 2024-02-04 : https://github.com/inventree/InvenTree/pull/6400
- Adds package_name to plugin API
- Adds mechanism for uninstalling plugins via the API

View File

@ -1,5 +1,6 @@
"""Custom backend implementations."""
import datetime
import logging
import time
@ -8,7 +9,6 @@ from django.db.utils import IntegrityError, OperationalError, ProgrammingError
from maintenance_mode.backends import AbstractStateBackend
import common.models
import InvenTree.ready
logger = logging.getLogger('inventree')
@ -16,8 +16,7 @@ logger = logging.getLogger('inventree')
class InvenTreeMaintenanceModeBackend(AbstractStateBackend):
"""Custom backend for managing state of maintenance mode.
Stores the current state of the maintenance mode in the database,
using an InvenTreeSetting object.
Stores a timestamp in the database to determine when maintenance mode will elapse.
"""
SETTING_KEY = '_MAINTENANCE_MODE'
@ -30,26 +29,45 @@ class InvenTreeMaintenanceModeBackend(AbstractStateBackend):
"""
try:
setting = common.models.InvenTreeSetting.objects.get(key=self.SETTING_KEY)
value = InvenTree.helpers.str2bool(setting.value)
value = str(setting.value).strip()
except common.models.InvenTreeSetting.DoesNotExist:
# Database is accessible, but setting is not available - assume False
value = False
return False
except (IntegrityError, OperationalError, ProgrammingError):
# Database is inaccessible - assume we are not in maintenance mode
logger.warning('Failed to read maintenance mode state - assuming True')
value = True
logger.debug('Failed to read maintenance mode state - assuming True')
return True
logger.debug('Maintenance mode state: %s', value)
# Extract timestamp from string
try:
# If the timestamp is in the past, we are now *out* of maintenance mode
timestamp = datetime.datetime.fromisoformat(value)
return timestamp > datetime.datetime.now()
except ValueError:
# If the value is not a valid timestamp, assume maintenance mode is not active
return False
return value
def set_value(self, value: bool, retries: int = 5, minutes: int = 5):
"""Set the state of the maintenance mode.
def set_value(self, value: bool, retries: int = 5):
"""Set the state of the maintenance mode."""
Instead of simply writing "true" or "false" to the setting,
we write a timestamp to the setting, which is used to determine
when maintenance mode will elapse.
This ensures that we will always *exit* maintenance mode after a certain time period.
"""
logger.debug('Setting maintenance mode state: %s', value)
if value:
# Save as isoformat
timestamp = datetime.datetime.now() + datetime.timedelta(minutes=minutes)
timestamp = timestamp.isoformat()
else:
# Blank timestamp means maintenance mode is not active
timestamp = ''
while retries > 0:
try:
common.models.InvenTreeSetting.set_setting(self.SETTING_KEY, value)
common.models.InvenTreeSetting.set_setting(self.SETTING_KEY, timestamp)
# Read the value back to confirm
if self.get_value() == value:

View File

@ -19,6 +19,7 @@ import pint.errors
from djmoney.contrib.exchange.exceptions import MissingRate
from djmoney.contrib.exchange.models import Rate, convert_money
from djmoney.money import Money
from maintenance_mode.core import get_maintenance_mode, set_maintenance_mode
from sesame.utils import get_user
import InvenTree.conversion
@ -1264,3 +1265,55 @@ class MagicLoginTest(InvenTreeTestCase):
self.assertEqual(resp.url, '/api/auth/login-redirect/')
# And we should be logged in again
self.assertEqual(resp.wsgi_request.user, self.user)
class MaintenanceModeTest(InvenTreeTestCase):
"""Unit tests for maintenance mode."""
def test_basic(self):
"""Test basic maintenance mode operation."""
for value in [False, True, False]:
set_maintenance_mode(value)
self.assertEqual(get_maintenance_mode(), value)
# API request is blocked in maintenance mode
set_maintenance_mode(True)
response = self.client.get('/api/')
self.assertEqual(response.status_code, 503)
set_maintenance_mode(False)
response = self.client.get('/api/')
self.assertEqual(response.status_code, 200)
def test_timestamp(self):
"""Test that the timestamp value is interpreted correctly."""
KEY = '_MAINTENANCE_MODE'
# Deleting the setting means maintenance mode is off
InvenTreeSetting.objects.filter(key=KEY).delete()
self.assertFalse(get_maintenance_mode())
def set_timestamp(value):
InvenTreeSetting.set_setting(KEY, value, None)
# Test blank value
set_timestamp('')
self.assertFalse(get_maintenance_mode())
# Test timestamp in the past
ts = datetime.now() - timedelta(minutes=10)
set_timestamp(ts.isoformat())
self.assertFalse(get_maintenance_mode())
# Test timestamp in the future
ts = datetime.now() + timedelta(minutes=10)
set_timestamp(ts.isoformat())
self.assertTrue(get_maintenance_mode())
# Set to false, check for empty string
set_maintenance_mode(False)
self.assertFalse(get_maintenance_mode())
self.assertEqual(InvenTreeSetting.get_setting(KEY, None), '')

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -224,9 +224,9 @@ class SupplierBarcodeMixin(BarcodeMixin):
return None
if supplier_pk := self.get_setting('SUPPLIER_ID'):
if supplier := Company.objects.get(pk=supplier_pk):
return supplier
else:
try:
return Company.objects.get(pk=supplier_pk)
except Company.DoesNotExist:
logger.error(
'No company with pk %d (set "SUPPLIER_ID" setting to a valid value)',
supplier_pk,

View File

@ -2,6 +2,7 @@
import json as json_pkg
import logging
from collections.abc import Iterable
import requests
@ -107,7 +108,9 @@ class APICallMixin:
"""Returns an encoded path for the provided dict."""
groups = []
for key, val in arguments.items():
groups.append(f'{key}={",".join([str(a) for a in val])}')
if isinstance(val, Iterable) and not isinstance(val, str):
val = ','.join([str(a) for a in val])
groups.append(f'{key}={val}')
return f'?{"&".join(groups)}'
def api_call(

View File

@ -263,14 +263,17 @@ class APICallMixinTest(BaseMixinDefinition, TestCase):
"""Test that building up args work."""
# api_build_url_args
# 1 arg
result = self.mixin.api_build_url_args({'a': 'b'})
self.assertEqual(result, '?a=b')
result = self.mixin.api_build_url_args({'a': 'abc123'})
self.assertEqual(result, '?a=abc123')
# non string arg
result = self.mixin.api_build_url_args({'a': 1})
self.assertEqual(result, '?a=1')
# more args
result = self.mixin.api_build_url_args({'a': 'b', 'c': 'd'})
self.assertEqual(result, '?a=b&c=d')
result = self.mixin.api_build_url_args({'a': 'b', 'c': 42})
self.assertEqual(result, '?a=b&c=42')
# list args
result = self.mixin.api_build_url_args({'a': 'b', 'c': ['d', 'e', 'f']})
self.assertEqual(result, '?a=b&c=d,e,f')
result = self.mixin.api_build_url_args({'a': 'b', 'c': ['d', 'efgh', 1337]})
self.assertEqual(result, '?a=b&c=d,efgh,1337')
def test_api_call(self):
"""Test that api calls work."""

View File

@ -337,6 +337,8 @@ class PluginsRegistry:
collect,
)
_maintenance_mode = get_maintenance_mode()
with maintenance_mode_on():
if collect:
logger.info('Collecting plugins')
@ -347,6 +349,10 @@ class PluginsRegistry:
self.plugins_loaded = True
self._load_plugins(full_reload=full_reload)
# Check if we wish to exit maintenance mode
if not _maintenance_mode:
set_maintenance_mode(False)
self.update_plugin_hash()
self.loading_lock.release()

View File

@ -7,8 +7,13 @@
{% block content %}
<h3>{% trans "Sign Up" %}</h3>
<p>{% blocktrans with provider_name=account.get_provider.name site_name=site.name %}You are about to use your {{provider_name}} account to login to
{{site_name}}.<br>As a final step, please complete the following form:{% endblocktrans %}</p>
<p>
{% blocktrans with provider_name=account.get_provider.name site_name=site.name %}
You are about to use your {{provider_name}} account to login to {{site_name}}.
{% endblocktrans %}
<br>
{% trans "As a final step, please complete the following form" %}:
</p>
<form class="signup" id="signup_form" method="post" action="{% url 'socialaccount_signup' %}">
{% csrf_token %}

View File

@ -90,6 +90,13 @@ def check_version_number(version_string, allow_duplicate=False):
if __name__ == '__main__':
if 'only_version' in sys.argv:
here = Path(__file__).parent.absolute()
version_file = here.joinpath('..', 'InvenTree', 'InvenTree', 'api_version.py')
text = version_file.read_text()
results = re.findall(r"""INVENTREE_API_VERSION = (.*)""", text)
print(results[0])
exit(0)
# GITHUB_REF_TYPE may be either 'branch' or 'tag'
GITHUB_REF_TYPE = os.environ['GITHUB_REF_TYPE']

View File

@ -68,7 +68,7 @@ a parameter shall be transferred . The result will look like that:
First we need to write the plugin code, similar as in the example above.
```python
from django.conf.urls import url
from django.urls import re_path
from django.http import HttpResponse
from order.views import PurchaseOrderDetail
@ -99,7 +99,7 @@ class MouserCartPanel(PanelMixin, InvenTreePlugin, UrlsMixin):
def setup_urls(self):
return [
url(r'transfercart/(?P<pk>\d+)/', self.TransferCart, name='get-cart')
re_path(r'transfercart/(?P<pk>\d+)/', self.TransferCart, name='get-cart')
]
#----------------------------------------------------------------------------
@ -294,14 +294,14 @@ does the rest of the work.
The python code in the plugin also needs minor changes:
```python
from django.conf.urls import url
from django.urls import re_path
import json
...
def setup_urls(self):
return [
url(r'example(?:\.(?P<format>json))?$', self.do_something, name='transfer'),
re_path(r'example(?:\.(?P<format>json))?$', self.do_something, name='transfer'),
]
# Define the function that will be called.

View File

@ -14,7 +14,7 @@ class MyUrlsPlugin(UrlsMixin, InvenTreePlugin):
NAME = "UrlsMixin"
URLS = [
url(r'increase/(?P<location>\d+)/(?P<pk>\d+)/', self.view_increase, name='increase-level'),
re_path(r'increase/(?P<location>\d+)/(?P<pk>\d+)/', self.view_increase, name='increase-level'),
]
```

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: bg\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Bulgarian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: cs\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: da\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: de\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: el\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -5,16 +5,16 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: es_MX\n"
"Language: es\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Spanish, Mexico\n"
"Language-Team: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: inventree\n"
"X-Crowdin-Project-ID: 452300\n"
"X-Crowdin-Language: es-MX\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /[inventree.InvenTree] l10/src/frontend/src/locales/en/messages.po\n"
"X-Crowdin-File-ID: 205\n"
@ -68,11 +68,11 @@ msgstr ""
#: src/components/forms/AuthenticationForm.tsx:50
msgid "Login successful"
msgstr "Inicio de sesión exitoso"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:51
msgid "Welcome back!"
msgstr "¡Bienvenido de vuelta!"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:53
#~ msgid "Login successfull"
@ -80,7 +80,7 @@ msgstr "¡Bienvenido de vuelta!"
#: src/components/forms/AuthenticationForm.tsx:58
msgid "Login failed"
msgstr "Error al iniciar sesión"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:59
#: src/components/forms/AuthenticationForm.tsx:79
@ -97,16 +97,16 @@ msgstr ""
#: src/components/forms/AuthenticationForm.tsx:70
#: src/functions/auth.tsx:103
msgid "Mail delivery successful"
msgstr "Envío de correo exitoso"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:71
msgid "Check your inbox for the login link. If you have an account, you will receive a login link. Check in spam too."
msgstr "Revisa tu bandeja de entrada para el enlace de inicio de sesión. Si tienes una cuenta, recibirás un enlace de inicio de sesión. Revisa también el correo no deseado."
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:78
#: src/components/forms/AuthenticationForm.tsx:215
msgid "Input error"
msgstr "Error de entrada"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:98
msgid "Or continue with other methods"
@ -115,7 +115,7 @@ msgstr ""
#: src/components/forms/AuthenticationForm.tsx:109
#: src/components/forms/AuthenticationForm.tsx:233
msgid "Username"
msgstr "Nombre de usuario"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:110
#: src/components/forms/AuthenticationForm.tsx:234
@ -126,17 +126,17 @@ msgstr ""
#: src/components/forms/AuthenticationForm.tsx:246
#: src/pages/Auth/Set-Password.tsx:106
msgid "Password"
msgstr "Contraseña"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:116
#: src/components/forms/AuthenticationForm.tsx:247
msgid "Your password"
msgstr "Tu contraseña"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:128
#: src/pages/Auth/Reset.tsx:26
msgid "Reset password"
msgstr "Restablecer contraseña"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:131
#~ msgid "Log in"
@ -151,17 +151,17 @@ msgstr "Restablecer contraseña"
#: src/pages/Auth/Reset.tsx:31
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:49
msgid "Email"
msgstr "Correo electrónico"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:138
#: src/pages/Auth/Reset.tsx:32
#: src/pages/Auth/Set-Password.tsx:107
msgid "We will send you a link to login - if you are registered"
msgstr "Te enviaremos un enlace para iniciar sesión - si estás registrado"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:154
msgid "Send me an email"
msgstr "Envíame un correo electrónico"
msgstr ""
#: src/components/forms/AuthenticationForm.tsx:156
msgid "Use username and password"
@ -225,11 +225,11 @@ msgstr ""
#: src/tables/settings/GroupTable.tsx:103
#: src/tables/settings/PendingTasksTable.tsx:26
msgid "Name"
msgstr "Nombre"
msgstr ""
#: src/components/forms/HostOptionsForm.tsx:74
msgid "No one here..."
msgstr "Nadie aquí..."
msgstr ""
#: src/components/forms/HostOptionsForm.tsx:85
msgid "Add Host"
@ -238,11 +238,11 @@ msgstr ""
#: src/components/forms/HostOptionsForm.tsx:89
#: src/components/widgets/MarkdownEditor.tsx:73
msgid "Save"
msgstr "Guardar"
msgstr ""
#: src/components/forms/InstanceOptions.tsx:43
msgid "Select destination instance"
msgstr "Seleccionar instancia de destino"
msgstr ""
#: src/components/forms/InstanceOptions.tsx:71
msgid "Edit possible host options"
@ -250,15 +250,15 @@ msgstr ""
#: src/components/forms/InstanceOptions.tsx:98
msgid "Version: {0}"
msgstr "Versión: {0}"
msgstr ""
#: src/components/forms/InstanceOptions.tsx:100
msgid "API:{0}"
msgstr "API:{0}"
msgstr ""
#: src/components/forms/InstanceOptions.tsx:102
msgid "Name: {0}"
msgstr "Nombre: {0}"
msgstr ""
#: src/components/forms/InstanceOptions.tsx:104
msgid "State: <0>worker</0> ({0}), <1>plugins</1>{1}"
@ -944,7 +944,7 @@ msgstr ""
#: src/pages/part/PartDetail.tsx:547
#: src/pages/purchasing/PurchasingIndex.tsx:20
msgid "Purchase Orders"
msgstr "Órdenes de compra"
msgstr ""
#: src/components/render/ModelType.tsx:112
msgid "Purchase Order Line"
@ -985,7 +985,7 @@ msgstr ""
#: src/pages/company/CompanyDetail.tsx:122
#: src/pages/sales/SalesIndex.tsx:27
msgid "Return Orders"
msgstr "Ordenes de devolución"
msgstr ""
#: src/components/render/ModelType.tsx:140
#: src/tables/company/AddressTable.tsx:47
@ -1801,7 +1801,7 @@ msgstr ""
#: src/defaults/links.tsx:11
msgid "Website"
msgstr "Sitio web"
msgstr ""
#: src/defaults/links.tsx:16
msgid "GitHub"
@ -2203,7 +2203,7 @@ msgstr ""
#: src/pages/Auth/Login.tsx:75
msgid "Welcome, log in below"
msgstr "Bienvenido, inicia sesión a continuación"
msgstr ""
#: src/pages/Auth/Login.tsx:77
msgid "Register below"
@ -2579,7 +2579,7 @@ msgstr ""
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:144
msgid "Primary"
msgstr "Primario"
msgstr ""
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:149
msgid "Verified"
@ -2757,17 +2757,17 @@ msgstr ""
#: src/pages/Index/Settings/SystemSettings.tsx:66
msgid "Login"
msgstr "Ingresar"
msgstr ""
#: src/pages/Index/Settings/SystemSettings.tsx:88
msgid "Barcodes"
msgstr "Códigos de barras"
msgstr ""
#: src/pages/Index/Settings/SystemSettings.tsx:107
#: src/pages/company/SupplierPartDetail.tsx:55
#: src/pages/part/PartDetail.tsx:516
msgid "Pricing"
msgstr "Precios"
msgstr ""
#: src/pages/Index/Settings/SystemSettings.tsx:118
#~ msgid "Physical Units"
@ -2775,16 +2775,16 @@ msgstr "Precios"
#: src/pages/Index/Settings/SystemSettings.tsx:136
msgid "Exchange Rates"
msgstr "Tasas de cambio"
msgstr ""
#: src/pages/Index/Settings/SystemSettings.tsx:144
msgid "Labels"
msgstr "Etiquetas"
msgstr ""
#: src/pages/Index/Settings/SystemSettings.tsx:150
#: src/pages/Index/Settings/UserSettings.tsx:99
msgid "Reporting"
msgstr "Informes"
msgstr ""
#: src/pages/Index/Settings/SystemSettings.tsx:224
#: src/pages/part/PartDetail.tsx:565
@ -2797,23 +2797,23 @@ msgstr ""
#: src/pages/part/PartDetail.tsx:502
#: src/pages/sales/SalesOrderDetail.tsx:62
msgid "Build Orders"
msgstr "Ordenes de Producción"
msgstr ""
#: src/pages/Index/Settings/SystemSettings.tsx:286
msgid "Switch to User Setting"
msgstr "Cambiar a Configuración de Usuario"
msgstr ""
#: src/pages/Index/Settings/UserSettings.tsx:29
msgid "Account"
msgstr "Cuenta"
msgstr ""
#: src/pages/Index/Settings/UserSettings.tsx:35
msgid "Security"
msgstr "Seguridad"
msgstr ""
#: src/pages/Index/Settings/UserSettings.tsx:46
msgid "Display Options"
msgstr "Opciones de visualización"
msgstr ""
#: src/pages/Index/Settings/UserSettings.tsx:115
msgid "Account Settings"
@ -2833,7 +2833,7 @@ msgstr ""
#: src/pages/NotFound.tsx:17
msgid "Not Found"
msgstr "No encontrado"
msgstr ""
#: src/pages/NotFound.tsx:20
msgid "Sorry, this page is not known or was moved."
@ -2940,7 +2940,7 @@ msgstr ""
#: src/pages/build/BuildDetail.tsx:222
msgid "Report"
msgstr "Informe"
msgstr ""
#: src/pages/build/BuildDetail.tsx:223
msgid "Print build report"
@ -2972,7 +2972,7 @@ msgstr ""
#: src/pages/part/PartDetail.tsx:449
#: src/pages/stock/StockDetail.tsx:70
msgid "Details"
msgstr "Detalles"
msgstr ""
#: src/pages/company/CompanyDetail.tsx:81
msgid "Manufactured Parts"
@ -3017,13 +3017,13 @@ msgstr ""
#: src/pages/part/CategoryDetail.tsx:71
#: src/pages/part/PartDetail.tsx:464
msgid "Parameters"
msgstr "Parámetros"
msgstr ""
#: src/pages/company/ManufacturerPartDetail.tsx:54
#: src/pages/part/PartDetail.tsx:534
#: src/pages/purchasing/PurchasingIndex.tsx:26
msgid "Suppliers"
msgstr "Proveedores"
msgstr ""
#: src/pages/company/ManufacturerPartDetail.tsx:98
msgid "ManufacturerPart"
@ -3033,7 +3033,7 @@ msgstr ""
#: src/pages/company/SupplierPartDetail.tsx:68
#: src/tables/purchasing/PurchaseOrderTable.tsx:73
msgid "Supplier"
msgstr "Proveedor"
msgstr ""
#: src/pages/company/SupplierPartDetail.tsx:40
#: src/pages/purchasing/PurchaseOrderDetail.tsx:66
@ -3064,7 +3064,7 @@ msgstr ""
#: src/pages/part/PartDetail.tsx:145
#: src/tables/stock/StockItemTable.tsx:264
msgid "In Stock"
msgstr "En Stock"
msgstr ""
#: src/pages/part/PartDetail.tsx:155
msgid "Minimum Stock"
@ -3287,31 +3287,31 @@ msgstr ""
#: src/pages/stock/StockDetail.tsx:174
msgid "Count stock"
msgstr "Contar stock"
msgstr ""
#: src/pages/stock/StockDetail.tsx:178
msgid "Add"
msgstr "Agregar"
msgstr ""
#: src/pages/stock/StockDetail.tsx:179
msgid "Add stock"
msgstr "Agregar stock"
msgstr ""
#: src/pages/stock/StockDetail.tsx:184
msgid "Remove stock"
msgstr "Remover stock"
msgstr ""
#: src/pages/stock/StockDetail.tsx:188
msgid "Transfer"
msgstr "Transferir"
msgstr ""
#: src/pages/stock/StockDetail.tsx:189
msgid "Transfer stock"
msgstr "Transferir stock"
msgstr ""
#: src/pages/stock/StockDetail.tsx:201
msgid "Duplicate stock item"
msgstr "Duplicar artículo de stock"
msgstr ""
#: src/pages/stock/StockDetail.tsx:205
#~ msgid "Edit stock item"
@ -3662,7 +3662,7 @@ msgstr ""
#: src/tables/plugin/PluginListTable.tsx:627
#: src/tables/stock/StockItemTable.tsx:228
msgid "Active"
msgstr "Activo"
msgstr ""
#: src/tables/bom/UsedInTable.tsx:67
msgid "Show active assemblies"
@ -3672,11 +3672,11 @@ msgstr ""
#: src/tables/part/PartTable.tsx:194
#: src/tables/part/PartVariantTable.tsx:30
msgid "Trackable"
msgstr "Rastreable"
msgstr ""
#: src/tables/bom/UsedInTable.tsx:72
msgid "Show trackable assemblies"
msgstr "Mostrar ensamblajes rastreables"
msgstr ""
#: src/tables/build/BuildLineTable.tsx:34
msgid "Show allocated lines"
@ -3732,14 +3732,14 @@ msgstr ""
#: src/tables/build/BuildOrderTable.tsx:103
msgid "Show active orders"
msgstr "Mostrar órdenes activas"
msgstr ""
#: src/tables/build/BuildOrderTable.tsx:107
#: src/tables/purchasing/PurchaseOrderTable.tsx:56
#: src/tables/sales/ReturnOrderTable.tsx:46
#: src/tables/sales/SalesOrderTable.tsx:53
msgid "Filter by order status"
msgstr "Filtrar por estado de la orden"
msgstr ""
#: src/tables/build/BuildOrderTable.tsx:113
msgid "Show overdue status"
@ -3753,23 +3753,23 @@ msgstr ""
#: src/tables/company/AddressTable.tsx:121
#: src/tables/company/AddressTable.tsx:185
msgid "Add Address"
msgstr "Añadir Dirección"
msgstr ""
#: src/tables/company/AddressTable.tsx:126
msgid "Address created"
msgstr "Dirección creada"
msgstr ""
#: src/tables/company/AddressTable.tsx:135
msgid "Edit Address"
msgstr "Editar Dirección"
msgstr ""
#: src/tables/company/AddressTable.tsx:143
msgid "Delete Address"
msgstr "Eliminar Dirección"
msgstr ""
#: src/tables/company/AddressTable.tsx:145
msgid "Are you sure you want to delete this address?"
msgstr "¿Estás seguro de que deseas eliminar esta dirección?"
msgstr ""
#: src/tables/company/CompanyTable.tsx:62
msgid "New Company"
@ -3781,7 +3781,7 @@ msgstr ""
#: src/tables/company/ContactTable.tsx:73
msgid "Edit Contact"
msgstr "Editar contacto"
msgstr ""
#: src/tables/company/ContactTable.tsx:80
msgid "Add Contact"
@ -3789,23 +3789,23 @@ msgstr ""
#: src/tables/company/ContactTable.tsx:91
msgid "Delete Contact"
msgstr "Eliminar contacto"
msgstr ""
#: src/tables/company/ContactTable.tsx:131
msgid "Add contact"
msgstr "Agregar contacto"
msgstr ""
#: src/tables/general/AttachmentTable.tsx:157
msgid "File uploaded"
msgstr "Archivo subido"
msgstr ""
#: src/tables/general/AttachmentTable.tsx:158
msgid "File {0} uploaded successfully"
msgstr "Archivo {0} se subió correctamente"
msgstr ""
#: src/tables/general/AttachmentTable.tsx:169
msgid "Upload Error"
msgstr "Error al subir"
msgstr ""
#: src/tables/general/AttachmentTable.tsx:170
msgid "File could not be uploaded"
@ -3931,7 +3931,7 @@ msgstr ""
#: src/tables/part/PartTable.tsx:80
msgid "Minimum stock"
msgstr "Stock mínimo"
msgstr ""
#: src/tables/part/PartTable.tsx:89
msgid "On Order"
@ -4403,11 +4403,11 @@ msgstr ""
#: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:245
msgid "Add line item"
msgstr "Añadir Artículo de Línea"
msgstr ""
#: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:251
msgid "Receive items"
msgstr "Recibir artículos"
msgstr ""
#: src/tables/purchasing/PurchaseOrderTable.tsx:55
#: src/tables/sales/ReturnOrderTable.tsx:45
@ -4427,7 +4427,7 @@ msgstr ""
#: src/tables/purchasing/SupplierPartTable.tsx:114
msgid "Base units"
msgstr "Unidades base"
msgstr ""
#: src/tables/purchasing/SupplierPartTable.tsx:140
msgid "Updated"
@ -4480,11 +4480,11 @@ msgstr ""
#: src/tables/settings/CurrencyTable.tsx:28
msgid "Rate"
msgstr "Tarifa"
msgstr ""
#: src/tables/settings/CurrencyTable.tsx:40
msgid "Exchange rates updated"
msgstr "Tipos de cambio actualizados"
msgstr ""
#: src/tables/settings/CurrencyTable.tsx:46
msgid "Exchange rate update error"
@ -4576,7 +4576,7 @@ msgstr ""
#: src/tables/settings/GroupTable.tsx:126
msgid "Delete group"
msgstr "Eliminar grupo"
msgstr ""
#: src/tables/settings/GroupTable.tsx:127
msgid "Group deleted"
@ -4589,11 +4589,11 @@ msgstr ""
#: src/tables/settings/GroupTable.tsx:134
#: src/tables/settings/GroupTable.tsx:146
msgid "Add group"
msgstr "Agregar grupo"
msgstr ""
#: src/tables/settings/GroupTable.tsx:158
msgid "Edit group"
msgstr "Editar grupo"
msgstr ""
#: src/tables/settings/PendingTasksTable.tsx:30
msgid "Created"
@ -4617,7 +4617,7 @@ msgstr ""
#: src/tables/settings/ProjectCodeTable.tsx:94
msgid "Add project code"
msgstr "Agregar código de proyecto"
msgstr ""
#: src/tables/settings/ScheduledTasksTable.tsx:25
msgid "Last Run"
@ -4686,11 +4686,11 @@ msgstr ""
#: src/tables/settings/UserTable.tsx:222
msgid "Added user"
msgstr "Usuario agregado"
msgstr ""
#: src/tables/settings/UserTable.tsx:239
msgid "Edit user"
msgstr "Editar usuario"
msgstr ""
#: src/tables/stock/StockItemTable.tsx:59
msgid "This stock item is in production"
@ -4779,7 +4779,7 @@ msgstr ""
#: src/tables/stock/StockItemTable.tsx:269
msgid "In Production"
msgstr "En producción"
msgstr ""
#: src/tables/stock/StockItemTable.tsx:270
msgid "Show items which are in production"
@ -4876,5 +4876,5 @@ msgstr ""
#: src/views/MobileAppView.tsx:23
msgid "Read the docs"
msgstr "Leer la documentación"
msgstr ""

View File

@ -4877,4 +4877,3 @@ msgstr ""
#: src/views/MobileAppView.tsx:23
msgid "Read the docs"
msgstr ""

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: fi\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Finnish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: fr\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-09 13:35\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
@ -110,7 +110,7 @@ msgstr "Erreur d'entrée"
#: src/components/forms/AuthenticationForm.tsx:98
msgid "Or continue with other methods"
msgstr ""
msgstr "Ou continuer avec d'autres méthodes"
#: src/components/forms/AuthenticationForm.tsx:109
#: src/components/forms/AuthenticationForm.tsx:233
@ -202,7 +202,7 @@ msgstr "S'enregistrer"
#: src/components/forms/AuthenticationForm.tsx:271
msgid "Or use SSO"
msgstr ""
msgstr "Ou utiliser SSO"
#: src/components/forms/AuthenticationForm.tsx:302
msgid "Don't have an account?"
@ -295,18 +295,18 @@ msgstr "Aucun résultat trouvé"
#: src/components/images/DetailsImage.tsx:61
msgid "Remove Image"
msgstr ""
msgstr "Supprimer l'image"
#: src/components/images/DetailsImage.tsx:64
msgid "Remove the associated image from this item?"
msgstr ""
msgstr "Supprimer l'image associée de cet élément ?"
#: src/components/images/DetailsImage.tsx:67
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:192
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:299
#: src/pages/stock/StockDetail.tsx:183
msgid "Remove"
msgstr ""
msgstr "Supprimer"
#: src/components/images/DetailsImage.tsx:67
#: src/contexts/ThemeContext.tsx:64
@ -320,35 +320,35 @@ msgstr "Annuler"
#: src/components/images/DetailsImage.tsx:95
msgid "Drag and drop to upload"
msgstr ""
msgstr "Glisser et déposer pour télécharger"
#: src/components/images/DetailsImage.tsx:98
msgid "Click to select file(s)"
msgstr ""
msgstr "Cliquer pour sélectionner le(s) fichier(s)"
#: src/components/images/DetailsImage.tsx:220
msgid "Clear"
msgstr ""
msgstr "Effacer"
#: src/components/images/DetailsImage.tsx:252
msgid "Select image"
msgstr ""
msgstr "Sélectionner une image"
#: src/components/images/DetailsImage.tsx:263
msgid "Select from existing images"
msgstr ""
msgstr "Sélectionner parmi les images existantes"
#: src/components/images/DetailsImage.tsx:273
msgid "Upload new image"
msgstr ""
msgstr "Téléverser une nouvelle image"
#: src/components/images/DetailsImage.tsx:279
msgid "Upload Image"
msgstr ""
msgstr "Charger une image"
#: src/components/images/DetailsImage.tsx:292
msgid "Delete image"
msgstr ""
msgstr "Supprimer l'image"
#: src/components/images/Thumbnail.tsx:14
#: src/components/images/Thumbnail.tsx:51
@ -489,7 +489,7 @@ msgstr "Version d'InvenTree"
#: src/components/modals/AboutInvenTreeModal.tsx:131
msgid "Commit Hash"
msgstr ""
msgstr "Hash du commit"
#: src/components/modals/AboutInvenTreeModal.tsx:136
msgid "Commit Date"
@ -675,11 +675,11 @@ msgstr "Configuration mail non effectuée"
#: src/tables/plugin/PluginListTable.tsx:185
#: src/tables/plugin/PluginListTable.tsx:310
msgid "Version"
msgstr ""
msgstr "Version"
#: src/components/modals/ServerInfoModal.tsx:127
msgid "Server Version"
msgstr ""
msgstr "Version du serveur"
#: src/components/nav/MainMenu.tsx:39
#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:26
@ -700,13 +700,13 @@ msgstr "Paramètres du compte"
#: src/defaults/menuItems.tsx:58
#: src/pages/Index/Settings/SystemSettings.tsx:283
msgid "System Settings"
msgstr ""
msgstr "Les paramètres du système"
#: src/components/nav/MainMenu.tsx:60
#: src/defaults/menuItems.tsx:63
#: src/pages/Index/Settings/AdminCenter/Index.tsx:128
msgid "Admin Center"
msgstr ""
msgstr "Centre Admin"
#: src/components/nav/MainMenu.tsx:68
#~ msgid "Current language {locale}"
@ -735,7 +735,7 @@ msgstr "Commencez"
#: src/components/nav/NavHoverMenu.tsx:96
msgid "Overview over high-level objects, functions and possible usecases."
msgstr ""
msgstr "Aperçu des objets de haut niveau, des fonctions et des cas d'usages."
#: src/components/nav/NavigationDrawer.tsx:59
msgid "Navigation"
@ -769,18 +769,18 @@ msgstr "Notifications"
#: src/components/nav/NotificationDrawer.tsx:87
msgid "You have no unread notifications."
msgstr ""
msgstr "Vous n'avez pas de notifications non lues."
#: src/components/nav/NotificationDrawer.tsx:102
#: src/components/nav/NotificationDrawer.tsx:108
#: src/tables/notifications/NotificationsTable.tsx:34
msgid "Notification"
msgstr ""
msgstr "Notification"
#: src/components/nav/NotificationDrawer.tsx:131
#: src/pages/Notifications.tsx:36
msgid "Mark as read"
msgstr ""
msgstr "Marqué comme lu"
#: src/components/nav/PartCategoryTree.tsx:80
#: src/components/render/ModelType.tsx:53
@ -829,14 +829,14 @@ msgstr "Emplacements de stock"
#: src/components/render/Instance.tsx:135
msgid "Unknown model: {model}"
msgstr ""
msgstr "Modèle inconnu : {model}"
#: src/components/render/ModelType.tsx:21
#: src/pages/part/PartDetail.tsx:703
#: src/tables/part/RelatedPartTable.tsx:45
#: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:59
msgid "Part"
msgstr ""
msgstr "Pièce"
#: src/components/render/ModelType.tsx:22
#: src/defaults/links.tsx:28
@ -850,17 +850,17 @@ msgstr "Composants"
#: src/components/render/ModelType.tsx:29
msgid "Part Parameter Template"
msgstr ""
msgstr "Modèle de paramètre de pièce"
#: src/components/render/ModelType.tsx:30
msgid "Part Parameter Templates"
msgstr ""
msgstr "Modèles de paramètres de pièce"
#: src/components/render/ModelType.tsx:36
#: src/pages/company/SupplierPartDetail.tsx:78
#: src/tables/purchasing/SupplierPartTable.tsx:66
msgid "Supplier Part"
msgstr ""
msgstr "Pièce fournisseur"
#: src/components/render/ModelType.tsx:37
msgid "Supplier Parts"
@ -868,7 +868,7 @@ msgstr "Pièces du fournisseur"
#: src/components/render/ModelType.tsx:44
msgid "Manufacturer Part"
msgstr ""
msgstr "Pièces du fabricant"
#: src/components/render/ModelType.tsx:45
msgid "Manufacturer Parts"
@ -877,12 +877,12 @@ msgstr "Pièces du fabricant"
#: src/components/render/ModelType.tsx:52
#: src/pages/part/CategoryDetail.tsx:101
msgid "Part Category"
msgstr ""
msgstr "Catégorie de composant"
#: src/components/render/ModelType.tsx:60
#: src/pages/stock/StockDetail.tsx:225
msgid "Stock Item"
msgstr ""
msgstr "Article en stock"
#: src/components/render/ModelType.tsx:61
#: src/pages/company/CompanyDetail.tsx:106
@ -893,30 +893,30 @@ msgstr "Articles en stock"
#: src/components/render/ModelType.tsx:68
msgid "Stock Location"
msgstr ""
msgstr "Emplacement du stock"
#: src/components/render/ModelType.tsx:76
msgid "Stock History"
msgstr ""
msgstr "Historique du stock"
#: src/components/render/ModelType.tsx:77
msgid "Stock Histories"
msgstr ""
msgstr "Historique du stock"
#: src/components/render/ModelType.tsx:81
#: src/defaults/links.tsx:30
#: src/defaults/menuItems.tsx:43
msgid "Build"
msgstr ""
msgstr "Construction"
#: src/components/render/ModelType.tsx:82
msgid "Builds"
msgstr ""
msgstr "Construction"
#: src/components/render/ModelType.tsx:89
#: src/pages/company/CompanyDetail.tsx:212
msgid "Company"
msgstr ""
msgstr "Société"
#: src/components/render/ModelType.tsx:90
msgid "Companies"
@ -925,17 +925,17 @@ msgstr "Sociétés"
#: src/components/render/ModelType.tsx:97
#: src/tables/TableHoverCard.tsx:58
msgid "Project Code"
msgstr ""
msgstr "Code du projet"
#: src/components/render/ModelType.tsx:98
#: src/pages/Index/Settings/AdminCenter/Index.tsx:71
msgid "Project Codes"
msgstr ""
msgstr "Codes du projet"
#: src/components/render/ModelType.tsx:104
#: src/pages/purchasing/PurchaseOrderDetail.tsx:131
msgid "Purchase Order"
msgstr ""
msgstr "Commande dachat"
#: src/components/render/ModelType.tsx:105
#: src/pages/Index/Settings/SystemSettings.tsx:235
@ -948,16 +948,16 @@ msgstr "Ordres d'achat"
#: src/components/render/ModelType.tsx:112
msgid "Purchase Order Line"
msgstr ""
msgstr "Ligne de commande d'achat"
#: src/components/render/ModelType.tsx:113
msgid "Purchase Order Lines"
msgstr ""
msgstr "Lignes de commande d'achat"
#: src/components/render/ModelType.tsx:117
#: src/pages/sales/SalesOrderDetail.tsx:102
msgid "Sales Order"
msgstr ""
msgstr "Ventes"
#: src/components/render/ModelType.tsx:118
#: src/pages/Index/Settings/SystemSettings.tsx:249
@ -969,16 +969,16 @@ msgstr "Ordres de vente"
#: src/components/render/ModelType.tsx:125
msgid "Sales Order Shipment"
msgstr ""
msgstr "Expédition de la commande"
#: src/components/render/ModelType.tsx:126
msgid "Sales Order Shipments"
msgstr ""
msgstr "Expéditions de la commande"
#: src/components/render/ModelType.tsx:132
#: src/pages/sales/ReturnOrderDetail.tsx:68
msgid "Return Order"
msgstr ""
msgstr "Retour de commande"
#: src/components/render/ModelType.tsx:133
#: src/pages/Index/Settings/SystemSettings.tsx:263
@ -990,25 +990,25 @@ msgstr "Retours"
#: src/components/render/ModelType.tsx:140
#: src/tables/company/AddressTable.tsx:47
msgid "Address"
msgstr ""
msgstr "Adresse"
#: src/components/render/ModelType.tsx:141
#: src/pages/company/CompanyDetail.tsx:148
msgid "Addresses"
msgstr ""
msgstr "Adresses"
#: src/components/render/ModelType.tsx:147
msgid "Contact"
msgstr ""
msgstr "Contact"
#: src/components/render/ModelType.tsx:148
#: src/pages/company/CompanyDetail.tsx:142
msgid "Contacts"
msgstr ""
msgstr "Contacts"
#: src/components/render/ModelType.tsx:154
msgid "Owner"
msgstr ""
msgstr "Propriétaire"
#: src/components/render/ModelType.tsx:155
msgid "Owners"
@ -1708,56 +1708,56 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:45
msgid "Turkish"
msgstr ""
msgstr "Turc"
#: src/contexts/LanguageContext.tsx:46
msgid "Vietnamese"
msgstr ""
msgstr "Vietnamien"
#: src/contexts/LanguageContext.tsx:47
msgid "Chinese (Simplified)"
msgstr ""
msgstr "Chinois (Simplifié)"
#: src/contexts/LanguageContext.tsx:48
msgid "Chinese (Traditional)"
msgstr ""
msgstr "Chinois (Traditionnel)"
#: src/defaults/dashboardItems.tsx:15
msgid "Subscribed Parts"
msgstr ""
msgstr "Pièces suivies"
#: src/defaults/dashboardItems.tsx:22
msgid "Subscribed Categories"
msgstr ""
msgstr "Catégories suivies"
#: src/defaults/dashboardItems.tsx:29
msgid "Latest Parts"
msgstr ""
msgstr "Dernières pièces"
#: src/defaults/dashboardItems.tsx:36
msgid "BOM Waiting Validation"
msgstr ""
msgstr "BOM en attente de validation"
#: src/defaults/dashboardItems.tsx:43
msgid "Recently Updated"
msgstr ""
msgstr "Mis à jour récemment"
#: src/defaults/dashboardItems.tsx:50
#: src/tables/part/PartTable.tsx:218
msgid "Low Stock"
msgstr ""
msgstr "Stock faible"
#: src/defaults/dashboardItems.tsx:57
msgid "Depleted Stock"
msgstr ""
msgstr "Stock épuisé"
#: src/defaults/dashboardItems.tsx:64
msgid "Required for Build Orders"
msgstr ""
msgstr "Requis pour les commandes de construction"
#: src/defaults/dashboardItems.tsx:71
msgid "Expired Stock"
msgstr ""
msgstr "Stock expiré"
#: src/defaults/dashboardItems.tsx:78
msgid "Stale Stock"
@ -1765,11 +1765,11 @@ msgstr ""
#: src/defaults/dashboardItems.tsx:85
msgid "Build Orders In Progress"
msgstr ""
msgstr "Ordre de construction en cours"
#: src/defaults/dashboardItems.tsx:92
msgid "Overdue Build Orders"
msgstr ""
msgstr "Ordres de construction en retard"
#: src/defaults/dashboardItems.tsx:99
msgid "Outstanding Purchase Orders"
@ -1777,7 +1777,7 @@ msgstr ""
#: src/defaults/dashboardItems.tsx:106
msgid "Overdue Purchase Orders"
msgstr ""
msgstr "Commandes d'achat en retard"
#: src/defaults/dashboardItems.tsx:113
msgid "Outstanding Sales Orders"
@ -1785,11 +1785,11 @@ msgstr ""
#: src/defaults/dashboardItems.tsx:120
msgid "Overdue Sales Orders"
msgstr ""
msgstr "Vente en retard"
#: src/defaults/dashboardItems.tsx:127
msgid "Current News"
msgstr ""
msgstr "Actualités en cours"
#: src/defaults/defaultHostList.tsx:8
#~ msgid "InvenTree Demo"
@ -1805,7 +1805,7 @@ msgstr "Site web"
#: src/defaults/links.tsx:16
msgid "GitHub"
msgstr ""
msgstr "GitHub"
#: src/defaults/links.tsx:21
msgid "Demo"
@ -1814,14 +1814,14 @@ msgstr "Démo"
#: src/defaults/links.tsx:26
#: src/defaults/menuItems.tsx:9
msgid "Home"
msgstr ""
msgstr "Page daccueil"
#: src/defaults/links.tsx:27
#: src/defaults/menuItems.tsx:28
#: src/pages/Index/Dashboard.tsx:19
#: src/pages/Index/Settings/UserSettings.tsx:41
msgid "Dashboard"
msgstr ""
msgstr "Tableau de bord"
#: src/defaults/links.tsx:31
#: src/defaults/menuItems.tsx:48
@ -1832,7 +1832,7 @@ msgstr ""
#: src/pages/purchasing/PurchaseOrderDetail.tsx:134
#: src/pages/purchasing/PurchasingIndex.tsx:52
msgid "Purchasing"
msgstr ""
msgstr "Achat en cours"
#: src/defaults/links.tsx:32
#: src/defaults/menuItems.tsx:53
@ -1841,13 +1841,13 @@ msgstr ""
#: src/pages/sales/SalesIndex.tsx:45
#: src/pages/sales/SalesOrderDetail.tsx:105
msgid "Sales"
msgstr ""
msgstr "Ventes"
#: src/defaults/links.tsx:35
#: src/defaults/menuItems.tsx:71
#: src/pages/Index/Playground.tsx:192
msgid "Playground"
msgstr ""
msgstr "Le terrain de jeux"
#: src/defaults/links.tsx:49
msgid "Getting Started"
@ -1888,7 +1888,7 @@ msgstr "Foire aux questions"
#: src/defaults/links.tsx:79
#: src/defaults/links.tsx:104
msgid "System Information"
msgstr ""
msgstr "Informations système"
#: src/defaults/links.tsx:83
#~ msgid "InvenTree"
@ -1897,11 +1897,11 @@ msgstr ""
#: src/defaults/links.tsx:92
#: src/defaults/links.tsx:110
msgid "About InvenTree"
msgstr ""
msgstr "À propos d'InvenTree"
#: src/defaults/links.tsx:105
msgid "About this Inventree instance"
msgstr ""
msgstr "À propos de cette instance Inventree"
#: src/defaults/links.tsx:111
msgid "About the InvenTree org"
@ -1913,7 +1913,7 @@ msgstr "Licences"
#: src/defaults/links.tsx:117
msgid "Licenses for packages used by InvenTree"
msgstr ""
msgstr "Licences pour les paquets utilisés par InvenTree"
#: src/defaults/menuItems.tsx:7
#~ msgid "Open sourcea"
@ -1941,7 +1941,7 @@ msgstr ""
#: src/defaults/menuItems.tsx:17
msgid "User attributes and design settings."
msgstr ""
msgstr "Attributs utilisateur et paramètres de conception."
#: src/defaults/menuItems.tsx:21
#~ msgid "Free for everyone"
@ -1993,47 +1993,47 @@ msgstr ""
#: src/forms/AttachmentForms.tsx:57
msgid "Add File"
msgstr ""
msgstr "Ajouter un fichier"
#: src/forms/AttachmentForms.tsx:57
msgid "Add Link"
msgstr ""
msgstr "Ajouter un lien"
#: src/forms/AttachmentForms.tsx:58
msgid "File added"
msgstr ""
msgstr "Fichier ajouté"
#: src/forms/AttachmentForms.tsx:58
msgid "Link added"
msgstr ""
msgstr "Lien ajouté"
#: src/forms/AttachmentForms.tsx:99
msgid "Edit File"
msgstr ""
msgstr "Éditer le fichier"
#: src/forms/AttachmentForms.tsx:99
msgid "Edit Link"
msgstr ""
msgstr "Modifier le lien"
#: src/forms/AttachmentForms.tsx:100
msgid "File updated"
msgstr ""
msgstr "Fichier mis à jour"
#: src/forms/AttachmentForms.tsx:100
msgid "Link updated"
msgstr ""
msgstr "Lien mis à jour"
#: src/forms/AttachmentForms.tsx:124
msgid "Delete Attachment"
msgstr ""
msgstr "Supprimer la pièce jointe"
#: src/forms/AttachmentForms.tsx:125
msgid "Attachment deleted"
msgstr ""
msgstr "Pièce jointe supprimée"
#: src/forms/AttachmentForms.tsx:128
msgid "Are you sure you want to delete this attachment?"
msgstr ""
msgstr "Êtes-vous sûr de vouloir supprimer cette pièce jointe ?"
#: src/forms/CompanyForms.tsx:150
#~ msgid "Company updated"
@ -2041,7 +2041,7 @@ msgstr ""
#: src/forms/PartForms.tsx:105
msgid "Parent part category"
msgstr ""
msgstr "Catégorie de pièce parente"
#: src/forms/PartForms.tsx:106
#~ msgid "Create Part"
@ -2057,23 +2057,23 @@ msgstr ""
#: src/forms/StockForms.tsx:44
msgid "Add given quantity as packs instead of individual items"
msgstr ""
msgstr "Ajouter une quantité en paquet au lieu de pièces individuelles"
#: src/forms/StockForms.tsx:55
msgid "Enter initial quantity for this stock item"
msgstr ""
msgstr "Entrez la quantité initiale pour cet article en stock"
#: src/forms/StockForms.tsx:60
msgid "Serial Numbers"
msgstr ""
msgstr "Numéros de Série"
#: src/forms/StockForms.tsx:61
msgid "Enter serial numbers for new stock (or leave blank)"
msgstr ""
msgstr "Entrez les numéros de série pour le nouveau stock (ou laisser vide)"
#: src/forms/StockForms.tsx:110
msgid "Add Stock Item"
msgstr ""
msgstr "Ajouter un article en stock"
#: src/forms/StockForms.tsx:110
#~ msgid "Create Stock Item"
@ -2494,47 +2494,47 @@ msgstr ""
#: src/pages/Index/Scan.tsx:430
msgid "No history"
msgstr ""
msgstr "Aucun historique"
#: src/pages/Index/Scan.tsx:449
msgid "Item"
msgstr ""
msgstr "Élément"
#: src/pages/Index/Scan.tsx:452
msgid "Type"
msgstr ""
msgstr "Type"
#: src/pages/Index/Scan.tsx:455
msgid "Source"
msgstr ""
msgstr "Source"
#: src/pages/Index/Scan.tsx:458
msgid "Scanned at"
msgstr ""
msgstr "Scanné le"
#: src/pages/Index/Scan.tsx:510
msgid "Enter item serial or data"
msgstr ""
msgstr "Entrez le numéro de série ou les données de l'élément"
#: src/pages/Index/Scan.tsx:522
msgid "Add dummy item"
msgstr ""
msgstr "Ajouter un élément factice"
#: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:32
msgid "Account Details"
msgstr ""
msgstr "Détails du compte"
#: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:41
msgid "First name"
msgstr ""
msgstr "Prénom"
#: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:46
msgid "Last name"
msgstr ""
msgstr "Nom de famille"
#: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:58
msgid "First name:"
msgstr ""
msgstr "Prénom:"
#: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:58
#~ msgid "First name: {0}"
@ -2546,11 +2546,11 @@ msgstr ""
#: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:62
msgid "Last name:"
msgstr ""
msgstr "Nom de famille:"
#: src/pages/Index/Settings/AccountSettings/DisplaySettingsPanel.tsx:39
msgid "Use pseudo language"
msgstr ""
msgstr "Utiliser une pseudo langue"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:53
msgid "Single Sign On Accounts"
@ -2559,7 +2559,7 @@ msgstr ""
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:78
msgid "Not enabled"
msgstr ""
msgstr "Non activé"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:63
msgid "Single Sign On is not enabled for this server"
@ -2567,67 +2567,67 @@ msgstr ""
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:67
msgid "Multifactor"
msgstr ""
msgstr "Multifacteur"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:81
msgid "Multifactor authentication is not configured for your account"
msgstr ""
msgstr "L'authentification multifacteurs n'est pas configurée pour votre compte"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:132
msgid "The following email addresses are associated with your account:"
msgstr ""
msgstr "Les adresses de messagerie suivantes sont associées à votre compte :"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:144
msgid "Primary"
msgstr ""
msgstr "Principale"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:149
msgid "Verified"
msgstr ""
msgstr "Vérifiée"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:153
msgid "Unverified"
msgstr ""
msgstr "Non vérifiée"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:166
msgid "Add Email Address"
msgstr ""
msgstr "Ajouter une adresse email"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:169
msgid "E-Mail"
msgstr ""
msgstr "E-mail"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:170
msgid "E-Mail address"
msgstr ""
msgstr "Adresse e-mail"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:182
msgid "Make Primary"
msgstr ""
msgstr "Rendre Principale"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:187
msgid "Re-send Verification"
msgstr ""
msgstr "Renvoyer le message de vérification"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:198
msgid "Add Email"
msgstr ""
msgstr "Ajouter le-mail"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:263
msgid "Provider has not been configured"
msgstr ""
msgstr "Le fournisseur n'a pas été configuré"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:273
msgid "Not configured"
msgstr ""
msgstr "Non configuré"
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:276
msgid "There are no social network accounts connected to this account."
msgstr ""
msgstr "Aucun compte de réseau social n'est connecté à ce compte."
#: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:286
msgid "You can sign in to your account using any of the following third party accounts"
msgstr ""
msgstr "Vous pouvez vous connecter à votre compte, utilisez lun des comptes tiers suivants"
#: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:68
msgid "bars"
@ -2643,7 +2643,7 @@ msgstr "points"
#: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:81
msgid "Theme"
msgstr ""
msgstr "Thème"
#: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:87
msgid "Primary color"
@ -2659,11 +2659,11 @@ msgstr "Couleur noire"
#: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:116
msgid "Border Radius"
msgstr ""
msgstr "Rayon de bordure"
#: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:132
msgid "Loader"
msgstr ""
msgstr "Chargeur"
#: src/pages/Index/Settings/AdminCenter.tsx:30
#~ msgid "User Management"
@ -2675,40 +2675,40 @@ msgstr ""
#: src/pages/Index/Settings/AdminCenter/Index.tsx:59
msgid "Background Tasks"
msgstr ""
msgstr "Tâches en arrière plan"
#: src/pages/Index/Settings/AdminCenter/Index.tsx:65
msgid "Error Reports"
msgstr ""
msgstr "Rapports d'erreur"
#: src/pages/Index/Settings/AdminCenter/Index.tsx:83
msgid "Custom Units"
msgstr ""
msgstr "Unités personnalisées"
#: src/pages/Index/Settings/AdminCenter/Index.tsx:89
msgid "Part Parameters"
msgstr ""
msgstr "Paramètres de la pièce"
#: src/pages/Index/Settings/AdminCenter/Index.tsx:105
msgid "Quick Actions"
msgstr ""
msgstr "Actions rapides"
#: src/pages/Index/Settings/AdminCenter/Index.tsx:110
msgid "Add a new user"
msgstr ""
msgstr "Ajouter un utilisateur"
#: src/pages/Index/Settings/AdminCenter/Index.tsx:129
msgid "Advanced Options"
msgstr ""
msgstr "Options avancées"
#: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:28
#: src/tables/settings/UserTable.tsx:103
msgid "Info"
msgstr ""
msgstr "Info"
#: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:32
msgid "External plugins are not enabled for this InvenTree installation."
msgstr ""
msgstr "Les extensions tierces ne sont pas activées pour cette installation d'InvenTree."
#: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:33
#~ msgid "Plugin Error Stack"
@ -2724,28 +2724,28 @@ msgstr ""
#: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:50
msgid "Plugin Errors"
msgstr ""
msgstr "Erreurs du plugin"
#: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:59
msgid "Plugin Settings"
msgstr ""
msgstr "Paramètres du plug-in"
#: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:25
msgid "Pending Tasks"
msgstr ""
msgstr "Tâches en attente"
#: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:33
msgid "Scheduled Tasks"
msgstr ""
msgstr "Tâches planifiées"
#: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:41
msgid "Failed Tasks"
msgstr ""
msgstr "Tâches en échec"
#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:18
#: src/tables/settings/UserTable.tsx:121
msgid "Groups"
msgstr ""
msgstr "Groupes"
#: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:30
msgid "Select settings relevant for user lifecycle. More available in"
@ -3068,7 +3068,7 @@ msgstr ""
#: src/pages/part/PartDetail.tsx:155
msgid "Minimum Stock"
msgstr ""
msgstr "Stock Minimum"
#: src/pages/part/PartDetail.tsx:165
#: src/tables/bom/BomTable.tsx:180
@ -3078,11 +3078,11 @@ msgstr "Sur commande"
#: src/pages/part/PartDetail.tsx:181
msgid "Allocated to Build Orders"
msgstr ""
msgstr "Alloué à l'ordre de construction"
#: src/pages/part/PartDetail.tsx:196
msgid "Allocated to Sales Orders"
msgstr ""
msgstr "Alloué aux ordres de ventes"
#: src/pages/part/PartDetail.tsx:207
#: src/tables/bom/BomTable.tsx:204
@ -3098,7 +3098,7 @@ msgstr "Construire"
#: src/pages/part/PartDetail.tsx:228
#: src/tables/notifications/NotificationsTable.tsx:29
msgid "Category"
msgstr ""
msgstr "Catégorie"
#: src/pages/part/PartDetail.tsx:239
msgid "IPN"
@ -3106,17 +3106,17 @@ msgstr ""
#: src/pages/part/PartDetail.tsx:250
msgid "Revision"
msgstr ""
msgstr "Révision"
#: src/pages/part/PartDetail.tsx:261
#: src/tables/purchasing/ManufacturerPartParameterTable.tsx:39
msgid "Units"
msgstr ""
msgstr "Unités"
#: src/pages/part/PartDetail.tsx:271
#: src/tables/settings/PendingTasksTable.tsx:40
msgid "Keywords"
msgstr ""
msgstr "Mots-clés"
#: src/pages/part/PartDetail.tsx:281
msgid "Creation Date"
@ -3142,19 +3142,19 @@ msgstr "Échelle des prix"
#: src/pages/part/PartDetail.tsx:332
msgid "Last Stocktake"
msgstr ""
msgstr "Dernier inventaire"
#: src/pages/part/PartDetail.tsx:393
msgid "Default Location"
msgstr ""
msgstr "Emplacement par défaut"
#: src/pages/part/PartDetail.tsx:404
msgid "Default Supplier"
msgstr ""
msgstr "Fournisseur par Défaut"
#: src/pages/part/PartDetail.tsx:415
msgid "Link"
msgstr ""
msgstr "Lien"
#: src/pages/part/PartDetail.tsx:427
msgid "Responsible"
@ -3162,12 +3162,12 @@ msgstr "Responsable"
#: src/pages/part/PartDetail.tsx:482
msgid "Variants"
msgstr ""
msgstr "Variants"
#: src/pages/part/PartDetail.tsx:489
#: src/pages/stock/StockDetail.tsx:82
msgid "Allocations"
msgstr ""
msgstr "Allocations"
#: src/pages/part/PartDetail.tsx:495
msgid "Bill of Materials"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: he\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Hebrew\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"

View File

@ -4877,4 +4877,3 @@ msgstr ""
#: src/views/MobileAppView.tsx:23
msgid "Read the docs"
msgstr ""

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: hu\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: it\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: ja\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Plural-Forms: nplurals=1; plural=0;\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: ko\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:22\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Korean\n"
"Plural-Forms: nplurals=1; plural=0;\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: nl\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: no\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: pl\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: pt\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Portuguese\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: ru\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: sk\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Slovak\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: sl\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Slovenian\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"

View File

@ -4877,4 +4877,3 @@ msgstr ""
#: src/views/MobileAppView.tsx:23
msgid "Read the docs"
msgstr ""

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: sv\n"
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-07 12:23\n"
"PO-Revision-Date: 2024-02-10 14:55\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -202,7 +202,7 @@ msgstr ""
#: src/components/forms/AuthenticationForm.tsx:271
msgid "Or use SSO"
msgstr ""
msgstr "Eller använd SSO"
#: src/components/forms/AuthenticationForm.tsx:302
msgid "Don't have an account?"
@ -250,7 +250,7 @@ msgstr "Redigera möjliga värdalternativ"
#: src/components/forms/InstanceOptions.tsx:98
msgid "Version: {0}"
msgstr "Version {0}"
msgstr "Version: {0}"
#: src/components/forms/InstanceOptions.tsx:100
msgid "API:{0}"
@ -1600,7 +1600,7 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:18
msgid "Bulgarian"
msgstr ""
msgstr "Bulgariska"
#: src/contexts/LanguageContext.tsx:19
msgid "Czech"
@ -1608,23 +1608,23 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:20
msgid "Danish"
msgstr ""
msgstr "Danska"
#: src/contexts/LanguageContext.tsx:21
msgid "German"
msgstr ""
msgstr "Tyska"
#: src/contexts/LanguageContext.tsx:22
msgid "Greek"
msgstr ""
msgstr "Grekiska"
#: src/contexts/LanguageContext.tsx:23
msgid "English"
msgstr ""
msgstr "Engelska"
#: src/contexts/LanguageContext.tsx:24
msgid "Spanish"
msgstr ""
msgstr "Spanska"
#: src/contexts/LanguageContext.tsx:25
msgid "Spanish (Mexican)"
@ -1636,11 +1636,11 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:27
msgid "Finnish"
msgstr ""
msgstr "Finska"
#: src/contexts/LanguageContext.tsx:28
msgid "French"
msgstr ""
msgstr "Franska"
#: src/contexts/LanguageContext.tsx:29
msgid "Hebrew"
@ -1648,19 +1648,19 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:30
msgid "Hindi"
msgstr ""
msgstr "Hindi"
#: src/contexts/LanguageContext.tsx:31
msgid "Hungarian"
msgstr ""
msgstr "Ungerska"
#: src/contexts/LanguageContext.tsx:32
msgid "Italian"
msgstr ""
msgstr "Italienska"
#: src/contexts/LanguageContext.tsx:33
msgid "Japanese"
msgstr ""
msgstr "Japanska"
#: src/contexts/LanguageContext.tsx:34
msgid "Korean"
@ -1672,11 +1672,11 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:36
msgid "Norwegian"
msgstr ""
msgstr "Norska"
#: src/contexts/LanguageContext.tsx:37
msgid "Polish"
msgstr ""
msgstr "Polska"
#: src/contexts/LanguageContext.tsx:38
msgid "Portuguese"
@ -1688,11 +1688,11 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:40
msgid "Russian"
msgstr ""
msgstr "Ryska"
#: src/contexts/LanguageContext.tsx:41
msgid "Slovak"
msgstr ""
msgstr "Slovakiska"
#: src/contexts/LanguageContext.tsx:42
msgid "Slovenian"
@ -1700,7 +1700,7 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:43
msgid "Swedish"
msgstr ""
msgstr "Svenska"
#: src/contexts/LanguageContext.tsx:44
msgid "Thai"
@ -1708,7 +1708,7 @@ msgstr ""
#: src/contexts/LanguageContext.tsx:45
msgid "Turkish"
msgstr ""
msgstr "Turkiska"
#: src/contexts/LanguageContext.tsx:46
msgid "Vietnamese"
@ -3463,7 +3463,7 @@ msgstr "Lägg till filter"
#: src/tables/FilterSelectDrawer.tsx:228
msgid "Clear Filters"
msgstr ""
msgstr "Rensa filter"
#: src/tables/InvenTreeTable.tsx:88
#: src/tables/InvenTreeTable.tsx:352
@ -4049,7 +4049,7 @@ msgstr ""
#: src/tables/part/PartThumbTable.tsx:202
msgid "Search..."
msgstr ""
msgstr "Sök..."
#: src/tables/part/PartVariantTable.tsx:16
msgid "Show active variants"

View File

@ -4877,4 +4877,3 @@ msgstr ""
#: src/views/MobileAppView.tsx:23
msgid "Read the docs"
msgstr ""

View File

@ -4877,4 +4877,3 @@ msgstr ""
#: src/views/MobileAppView.tsx:23
msgid "Read the docs"
msgstr "Belgeleri okuyun"

View File

@ -4877,4 +4877,3 @@ msgstr "Giao diện nền tảng được tối ưu cho máy tính bảng và m
#: src/views/MobileAppView.tsx:23
msgid "Read the docs"
msgstr "Đọc tài liệu"

File diff suppressed because it is too large Load Diff