mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 20:16:44 +00:00
commit
b876d31d09
@ -10,6 +10,8 @@ addons:
|
|||||||
-sqlite3
|
-sqlite3
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
|
- sudo apt-get update
|
||||||
|
- sudo apt-get install gettext
|
||||||
- make install
|
- make install
|
||||||
- make migrate
|
- make migrate
|
||||||
- cd InvenTree && python3 manage.py createsuperuser --username InvenTreeAdmin --email admin@inventree.com --noinput && cd ..
|
- cd InvenTree && python3 manage.py createsuperuser --username InvenTreeAdmin --email admin@inventree.com --noinput && cd ..
|
||||||
@ -18,6 +20,7 @@ script:
|
|||||||
- cd InvenTree && python3 manage.py makemigrations && cd ..
|
- cd InvenTree && python3 manage.py makemigrations && cd ..
|
||||||
- python3 ci/check_migration_files.py
|
- python3 ci/check_migration_files.py
|
||||||
- make coverage
|
- make coverage
|
||||||
|
- make translate
|
||||||
- make style
|
- make style
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
|
@ -17,6 +17,8 @@ import logging
|
|||||||
import tempfile
|
import tempfile
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
def eprint(*args, **kwargs):
|
def eprint(*args, **kwargs):
|
||||||
""" Print a warning message to stderr """
|
""" Print a warning message to stderr """
|
||||||
@ -115,6 +117,7 @@ LOGGING = {
|
|||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
'django.middleware.security.SecurityMiddleware',
|
'django.middleware.security.SecurityMiddleware',
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.middleware.locale.LocaleMiddleware',
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
'corsheaders.middleware.CorsMiddleware',
|
'corsheaders.middleware.CorsMiddleware',
|
||||||
@ -225,7 +228,20 @@ if not type(EXTRA_URL_SCHEMES) in [list]:
|
|||||||
# Internationalization
|
# Internationalization
|
||||||
# https://docs.djangoproject.com/en/1.10/topics/i18n/
|
# https://docs.djangoproject.com/en/1.10/topics/i18n/
|
||||||
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
LANGUAGE_CODE = CONFIG.get('language', 'en-us')
|
||||||
|
|
||||||
|
# If a new language translation is supported, it must be added here
|
||||||
|
LANGUAGES = [
|
||||||
|
('en', _('English')),
|
||||||
|
('de', _('German')),
|
||||||
|
('fr', _('French')),
|
||||||
|
('pk', _('Polish')),
|
||||||
|
]
|
||||||
|
|
||||||
|
LOCALE_PATHS = (
|
||||||
|
os.path.join(BASE_DIR, 'locale/'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
TIME_ZONE = 'UTC'
|
TIME_ZONE = 'UTC'
|
||||||
|
|
||||||
|
@ -18,6 +18,9 @@ database:
|
|||||||
#HOST: ''
|
#HOST: ''
|
||||||
#PORT: ''
|
#PORT: ''
|
||||||
|
|
||||||
|
# Select default system language (default is 'en-us')
|
||||||
|
language: en-us
|
||||||
|
|
||||||
# Set debug to False to run in production mode
|
# Set debug to False to run in production mode
|
||||||
debug: True
|
debug: True
|
||||||
|
|
||||||
|
BIN
InvenTree/locale/de/LC_MESSAGES/django.mo
Normal file
BIN
InvenTree/locale/de/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
509
InvenTree/locale/de/LC_MESSAGES/django.po
Normal file
509
InvenTree/locale/de/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,509 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2019-09-26 00:37+0000\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:157 order/models.py:158 order/models.py:203
|
||||||
|
msgid "Invalid quantity provided"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:160
|
||||||
|
msgid "Empty serial number string"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:181 InvenTree/helpers.py:198
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duplicate serial: {n}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:185 InvenTree/helpers.py:188 InvenTree/helpers.py:191
|
||||||
|
#: InvenTree/helpers.py:202
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid group: {g}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:208
|
||||||
|
msgid "No serial numbers found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:212
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Number of unique serial number ({s}) must match quantity ({q})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:235
|
||||||
|
msgid "English"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:236
|
||||||
|
msgid "German"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:237
|
||||||
|
msgid "French"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:238
|
||||||
|
msgid "Polish"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:27 InvenTree/status_codes.py:82
|
||||||
|
msgid "Pending"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:28
|
||||||
|
msgid "Placed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:29 InvenTree/status_codes.py:85
|
||||||
|
msgid "Complete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:30 InvenTree/status_codes.py:84
|
||||||
|
msgid "Cancelled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:31 InvenTree/status_codes.py:62
|
||||||
|
msgid "Lost"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:32
|
||||||
|
msgid "Returned"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:58
|
||||||
|
msgid "OK"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:59
|
||||||
|
msgid "Attention needed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:60
|
||||||
|
msgid "Damaged"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:61
|
||||||
|
msgid "Destroyed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:83
|
||||||
|
msgid "Allocated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:35
|
||||||
|
msgid "Invalid character in part name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:44
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Illegal character in name ({x})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:63 InvenTree/validators.py:79
|
||||||
|
msgid "Overage value must not be negative"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:81
|
||||||
|
msgid "Overage must not exceed 100%"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:88
|
||||||
|
msgid "Overage must be an integer value or a percentage"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:36
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:53 stock/forms.py:34
|
||||||
|
msgid "Enter unique serial numbers (or leave blank)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:55
|
||||||
|
msgid "Confirm build completion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/models.py:381
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Selected stock item not found in BOM for part '{p}'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/models.py:384
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:289 stock/views.py:831
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "The following serial numbers already exist: ({sn})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:65
|
||||||
|
msgid "Settings key (must be unique - case insensitive"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:67
|
||||||
|
msgid "Settings value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:69
|
||||||
|
msgid "Settings description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:82
|
||||||
|
msgid "Key string must be unique"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:103
|
||||||
|
msgid "Currency Symbol e.g. $"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:105
|
||||||
|
msgid "Currency Suffix e.g. AUD"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:107
|
||||||
|
msgid "Currency Description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:109
|
||||||
|
msgid "Currency Value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:111
|
||||||
|
msgid "Use this currency as the base currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:21
|
||||||
|
msgid "Place order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:32
|
||||||
|
msgid "Cancel order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:43
|
||||||
|
msgid "Receive parts to this location"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:62
|
||||||
|
msgid "Order reference"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:64
|
||||||
|
msgid "Order description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:66
|
||||||
|
msgid "Link to external page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:83
|
||||||
|
msgid "Order notes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:125
|
||||||
|
msgid "Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:156 order/models.py:201 part/views.py:1030
|
||||||
|
#: stock/models.py:437
|
||||||
|
msgid "Quantity must be greater than zero"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:161
|
||||||
|
msgid "Part supplier must match PO supplier"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:196
|
||||||
|
msgid "Lines can only be received against an order marked as 'Placed'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:245
|
||||||
|
msgid "Item quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:247
|
||||||
|
msgid "Line item reference"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:249
|
||||||
|
msgid "Line item notes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:275
|
||||||
|
msgid "Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:284
|
||||||
|
msgid "Supplier part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:287
|
||||||
|
msgid "Number of items received"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:140
|
||||||
|
msgid "Confirm order cancellation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:173
|
||||||
|
msgid "Confirm order placement"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:695
|
||||||
|
msgid "Invalid Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:703
|
||||||
|
msgid "Supplier must match for Part and Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:708
|
||||||
|
msgid "Invalid SupplierPart selection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:107
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unsupported file format: {f}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:112
|
||||||
|
msgid "Error reading BOM file (invalid data)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:114
|
||||||
|
msgid "Error reading BOM file (incorrect row size)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:37
|
||||||
|
msgid "Confirm that the BOM is correct"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:49
|
||||||
|
msgid "Select BOM file to upload"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:73
|
||||||
|
msgid "Select part category"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:81
|
||||||
|
msgid "Perform 'deep copy' which will duplicate all BOM data for this part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:86
|
||||||
|
msgid "Confirm part creation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:173
|
||||||
|
msgid "Input quantity for price calculation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:176
|
||||||
|
msgid "Select currency for price calculation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:308
|
||||||
|
msgid "Part must be unique for name, IPN and revision"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:322
|
||||||
|
msgid "Part cannot be a template part if it is a variant of another part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:323
|
||||||
|
msgid "Part cannot be a variant of another part if it is already a template"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:992
|
||||||
|
msgid "Parameter template name must be unique"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:1141
|
||||||
|
msgid "Part cannot be added to its own Bill of Materials"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:1148
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:194
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Set category for {n} parts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:771
|
||||||
|
msgid "No BOM file provided"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1032
|
||||||
|
msgid "Enter a valid quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1056 part/views.py:1059
|
||||||
|
msgid "Select valid part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1065
|
||||||
|
msgid "Duplicate part selected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1093
|
||||||
|
msgid "Select a part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1097
|
||||||
|
msgid "Specify quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:92
|
||||||
|
msgid "File Format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:92
|
||||||
|
msgid "Select output file format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:94
|
||||||
|
msgid "Include stock items in sub locations"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:127
|
||||||
|
msgid "Destination stock location"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:133
|
||||||
|
msgid "Confirm movement of stock items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:135
|
||||||
|
msgid "Set the destination as the default location for selected parts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:201
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"A stock item with this serial number already exists for template part {part}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:206
|
||||||
|
msgid "A stock item with this serial number already exists"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:225
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Part type ('{pf}') must be {pe}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:235 stock/models.py:244
|
||||||
|
msgid "Quantity must be 1 for item with a serial number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:236
|
||||||
|
msgid "Serial number cannot be set if quantity greater than 1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:252
|
||||||
|
msgid "Stock item cannot be created for a template Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:261
|
||||||
|
msgid "Item cannot belong to itself"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:434
|
||||||
|
msgid "Quantity must be integer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:440
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Quantity must not exceed available stock quantity ({n})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:443 stock/models.py:446
|
||||||
|
msgid "Serial numbers must be a list of integers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:449
|
||||||
|
msgid "Quantity does not match serial numbers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:459
|
||||||
|
msgid "Serial numbers already exist: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:480
|
||||||
|
msgid "Add serial number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:483
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Serialized {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:396
|
||||||
|
msgid "Must enter integer value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:401
|
||||||
|
msgid "Quantity must be positive"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:408
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Quantity must not exceed {x}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:416
|
||||||
|
msgid "Confirm stock adjustment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:484
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Added stock to {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:499
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Removed stock from {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:512
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Counted stock for {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:540
|
||||||
|
msgid "No items were moved"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:543
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Moved {n} items to {dest}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:810
|
||||||
|
msgid "Invalid part selection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:872
|
||||||
|
msgid "Created new stock item"
|
||||||
|
msgstr ""
|
BIN
InvenTree/locale/en/LC_MESSAGES/django.mo
Normal file
BIN
InvenTree/locale/en/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
509
InvenTree/locale/en/LC_MESSAGES/django.po
Normal file
509
InvenTree/locale/en/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,509 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2019-09-26 00:37+0000\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:157 order/models.py:158 order/models.py:203
|
||||||
|
msgid "Invalid quantity provided"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:160
|
||||||
|
msgid "Empty serial number string"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:181 InvenTree/helpers.py:198
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duplicate serial: {n}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:185 InvenTree/helpers.py:188 InvenTree/helpers.py:191
|
||||||
|
#: InvenTree/helpers.py:202
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid group: {g}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:208
|
||||||
|
msgid "No serial numbers found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:212
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Number of unique serial number ({s}) must match quantity ({q})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:235
|
||||||
|
msgid "English"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:236
|
||||||
|
msgid "German"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:237
|
||||||
|
msgid "French"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:238
|
||||||
|
msgid "Polish"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:27 InvenTree/status_codes.py:82
|
||||||
|
msgid "Pending"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:28
|
||||||
|
msgid "Placed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:29 InvenTree/status_codes.py:85
|
||||||
|
msgid "Complete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:30 InvenTree/status_codes.py:84
|
||||||
|
msgid "Cancelled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:31 InvenTree/status_codes.py:62
|
||||||
|
msgid "Lost"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:32
|
||||||
|
msgid "Returned"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:58
|
||||||
|
msgid "OK"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:59
|
||||||
|
msgid "Attention needed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:60
|
||||||
|
msgid "Damaged"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:61
|
||||||
|
msgid "Destroyed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:83
|
||||||
|
msgid "Allocated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:35
|
||||||
|
msgid "Invalid character in part name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:44
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Illegal character in name ({x})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:63 InvenTree/validators.py:79
|
||||||
|
msgid "Overage value must not be negative"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:81
|
||||||
|
msgid "Overage must not exceed 100%"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:88
|
||||||
|
msgid "Overage must be an integer value or a percentage"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:36
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:53 stock/forms.py:34
|
||||||
|
msgid "Enter unique serial numbers (or leave blank)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:55
|
||||||
|
msgid "Confirm build completion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/models.py:381
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Selected stock item not found in BOM for part '{p}'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/models.py:384
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:289 stock/views.py:831
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "The following serial numbers already exist: ({sn})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:65
|
||||||
|
msgid "Settings key (must be unique - case insensitive"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:67
|
||||||
|
msgid "Settings value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:69
|
||||||
|
msgid "Settings description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:82
|
||||||
|
msgid "Key string must be unique"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:103
|
||||||
|
msgid "Currency Symbol e.g. $"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:105
|
||||||
|
msgid "Currency Suffix e.g. AUD"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:107
|
||||||
|
msgid "Currency Description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:109
|
||||||
|
msgid "Currency Value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:111
|
||||||
|
msgid "Use this currency as the base currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:21
|
||||||
|
msgid "Place order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:32
|
||||||
|
msgid "Cancel order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:43
|
||||||
|
msgid "Receive parts to this location"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:62
|
||||||
|
msgid "Order reference"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:64
|
||||||
|
msgid "Order description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:66
|
||||||
|
msgid "Link to external page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:83
|
||||||
|
msgid "Order notes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:125
|
||||||
|
msgid "Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:156 order/models.py:201 part/views.py:1030
|
||||||
|
#: stock/models.py:437
|
||||||
|
msgid "Quantity must be greater than zero"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:161
|
||||||
|
msgid "Part supplier must match PO supplier"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:196
|
||||||
|
msgid "Lines can only be received against an order marked as 'Placed'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:245
|
||||||
|
msgid "Item quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:247
|
||||||
|
msgid "Line item reference"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:249
|
||||||
|
msgid "Line item notes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:275
|
||||||
|
msgid "Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:284
|
||||||
|
msgid "Supplier part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:287
|
||||||
|
msgid "Number of items received"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:140
|
||||||
|
msgid "Confirm order cancellation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:173
|
||||||
|
msgid "Confirm order placement"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:695
|
||||||
|
msgid "Invalid Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:703
|
||||||
|
msgid "Supplier must match for Part and Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:708
|
||||||
|
msgid "Invalid SupplierPart selection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:107
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unsupported file format: {f}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:112
|
||||||
|
msgid "Error reading BOM file (invalid data)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:114
|
||||||
|
msgid "Error reading BOM file (incorrect row size)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:37
|
||||||
|
msgid "Confirm that the BOM is correct"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:49
|
||||||
|
msgid "Select BOM file to upload"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:73
|
||||||
|
msgid "Select part category"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:81
|
||||||
|
msgid "Perform 'deep copy' which will duplicate all BOM data for this part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:86
|
||||||
|
msgid "Confirm part creation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:173
|
||||||
|
msgid "Input quantity for price calculation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:176
|
||||||
|
msgid "Select currency for price calculation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:308
|
||||||
|
msgid "Part must be unique for name, IPN and revision"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:322
|
||||||
|
msgid "Part cannot be a template part if it is a variant of another part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:323
|
||||||
|
msgid "Part cannot be a variant of another part if it is already a template"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:992
|
||||||
|
msgid "Parameter template name must be unique"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:1141
|
||||||
|
msgid "Part cannot be added to its own Bill of Materials"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:1148
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:194
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Set category for {n} parts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:771
|
||||||
|
msgid "No BOM file provided"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1032
|
||||||
|
msgid "Enter a valid quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1056 part/views.py:1059
|
||||||
|
msgid "Select valid part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1065
|
||||||
|
msgid "Duplicate part selected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1093
|
||||||
|
msgid "Select a part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1097
|
||||||
|
msgid "Specify quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:92
|
||||||
|
msgid "File Format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:92
|
||||||
|
msgid "Select output file format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:94
|
||||||
|
msgid "Include stock items in sub locations"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:127
|
||||||
|
msgid "Destination stock location"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:133
|
||||||
|
msgid "Confirm movement of stock items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:135
|
||||||
|
msgid "Set the destination as the default location for selected parts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:201
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"A stock item with this serial number already exists for template part {part}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:206
|
||||||
|
msgid "A stock item with this serial number already exists"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:225
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Part type ('{pf}') must be {pe}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:235 stock/models.py:244
|
||||||
|
msgid "Quantity must be 1 for item with a serial number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:236
|
||||||
|
msgid "Serial number cannot be set if quantity greater than 1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:252
|
||||||
|
msgid "Stock item cannot be created for a template Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:261
|
||||||
|
msgid "Item cannot belong to itself"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:434
|
||||||
|
msgid "Quantity must be integer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:440
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Quantity must not exceed available stock quantity ({n})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:443 stock/models.py:446
|
||||||
|
msgid "Serial numbers must be a list of integers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:449
|
||||||
|
msgid "Quantity does not match serial numbers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:459
|
||||||
|
msgid "Serial numbers already exist: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:480
|
||||||
|
msgid "Add serial number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:483
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Serialized {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:396
|
||||||
|
msgid "Must enter integer value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:401
|
||||||
|
msgid "Quantity must be positive"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:408
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Quantity must not exceed {x}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:416
|
||||||
|
msgid "Confirm stock adjustment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:484
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Added stock to {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:499
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Removed stock from {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:512
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Counted stock for {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:540
|
||||||
|
msgid "No items were moved"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:543
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Moved {n} items to {dest}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:810
|
||||||
|
msgid "Invalid part selection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:872
|
||||||
|
msgid "Created new stock item"
|
||||||
|
msgstr ""
|
BIN
InvenTree/locale/es/LC_MESSAGES/django.mo
Normal file
BIN
InvenTree/locale/es/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
509
InvenTree/locale/es/LC_MESSAGES/django.po
Normal file
509
InvenTree/locale/es/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,509 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2019-09-26 00:37+0000\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:157 order/models.py:158 order/models.py:203
|
||||||
|
msgid "Invalid quantity provided"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:160
|
||||||
|
msgid "Empty serial number string"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:181 InvenTree/helpers.py:198
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duplicate serial: {n}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:185 InvenTree/helpers.py:188 InvenTree/helpers.py:191
|
||||||
|
#: InvenTree/helpers.py:202
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid group: {g}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:208
|
||||||
|
msgid "No serial numbers found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/helpers.py:212
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Number of unique serial number ({s}) must match quantity ({q})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:235
|
||||||
|
msgid "English"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:236
|
||||||
|
msgid "German"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:237
|
||||||
|
msgid "French"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/settings.py:238
|
||||||
|
msgid "Polish"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:27 InvenTree/status_codes.py:82
|
||||||
|
msgid "Pending"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:28
|
||||||
|
msgid "Placed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:29 InvenTree/status_codes.py:85
|
||||||
|
msgid "Complete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:30 InvenTree/status_codes.py:84
|
||||||
|
msgid "Cancelled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:31 InvenTree/status_codes.py:62
|
||||||
|
msgid "Lost"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:32
|
||||||
|
msgid "Returned"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:58
|
||||||
|
msgid "OK"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:59
|
||||||
|
msgid "Attention needed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:60
|
||||||
|
msgid "Damaged"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:61
|
||||||
|
msgid "Destroyed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/status_codes.py:83
|
||||||
|
msgid "Allocated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:35
|
||||||
|
msgid "Invalid character in part name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:44
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Illegal character in name ({x})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:63 InvenTree/validators.py:79
|
||||||
|
msgid "Overage value must not be negative"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:81
|
||||||
|
msgid "Overage must not exceed 100%"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: InvenTree/validators.py:88
|
||||||
|
msgid "Overage must be an integer value or a percentage"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:36
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:53 stock/forms.py:34
|
||||||
|
msgid "Enter unique serial numbers (or leave blank)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/forms.py:55
|
||||||
|
msgid "Confirm build completion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/models.py:381
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Selected stock item not found in BOM for part '{p}'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/models.py:384
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:289 stock/views.py:831
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "The following serial numbers already exist: ({sn})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:65
|
||||||
|
msgid "Settings key (must be unique - case insensitive"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:67
|
||||||
|
msgid "Settings value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:69
|
||||||
|
msgid "Settings description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:82
|
||||||
|
msgid "Key string must be unique"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:103
|
||||||
|
msgid "Currency Symbol e.g. $"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:105
|
||||||
|
msgid "Currency Suffix e.g. AUD"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:107
|
||||||
|
msgid "Currency Description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:109
|
||||||
|
msgid "Currency Value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/models.py:111
|
||||||
|
msgid "Use this currency as the base currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:21
|
||||||
|
msgid "Place order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:32
|
||||||
|
msgid "Cancel order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/forms.py:43
|
||||||
|
msgid "Receive parts to this location"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:62
|
||||||
|
msgid "Order reference"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:64
|
||||||
|
msgid "Order description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:66
|
||||||
|
msgid "Link to external page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:83
|
||||||
|
msgid "Order notes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:125
|
||||||
|
msgid "Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:156 order/models.py:201 part/views.py:1030
|
||||||
|
#: stock/models.py:437
|
||||||
|
msgid "Quantity must be greater than zero"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:161
|
||||||
|
msgid "Part supplier must match PO supplier"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:196
|
||||||
|
msgid "Lines can only be received against an order marked as 'Placed'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:245
|
||||||
|
msgid "Item quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:247
|
||||||
|
msgid "Line item reference"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:249
|
||||||
|
msgid "Line item notes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:275
|
||||||
|
msgid "Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:284
|
||||||
|
msgid "Supplier part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/models.py:287
|
||||||
|
msgid "Number of items received"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:140
|
||||||
|
msgid "Confirm order cancellation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:173
|
||||||
|
msgid "Confirm order placement"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:695
|
||||||
|
msgid "Invalid Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:703
|
||||||
|
msgid "Supplier must match for Part and Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:708
|
||||||
|
msgid "Invalid SupplierPart selection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:107
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unsupported file format: {f}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:112
|
||||||
|
msgid "Error reading BOM file (invalid data)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:114
|
||||||
|
msgid "Error reading BOM file (incorrect row size)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:37
|
||||||
|
msgid "Confirm that the BOM is correct"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:49
|
||||||
|
msgid "Select BOM file to upload"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:73
|
||||||
|
msgid "Select part category"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:81
|
||||||
|
msgid "Perform 'deep copy' which will duplicate all BOM data for this part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:86
|
||||||
|
msgid "Confirm part creation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:173
|
||||||
|
msgid "Input quantity for price calculation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:176
|
||||||
|
msgid "Select currency for price calculation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:308
|
||||||
|
msgid "Part must be unique for name, IPN and revision"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:322
|
||||||
|
msgid "Part cannot be a template part if it is a variant of another part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:323
|
||||||
|
msgid "Part cannot be a variant of another part if it is already a template"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:992
|
||||||
|
msgid "Parameter template name must be unique"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:1141
|
||||||
|
msgid "Part cannot be added to its own Bill of Materials"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/models.py:1148
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:194
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Set category for {n} parts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:771
|
||||||
|
msgid "No BOM file provided"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1032
|
||||||
|
msgid "Enter a valid quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1056 part/views.py:1059
|
||||||
|
msgid "Select valid part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1065
|
||||||
|
msgid "Duplicate part selected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1093
|
||||||
|
msgid "Select a part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1097
|
||||||
|
msgid "Specify quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:92
|
||||||
|
msgid "File Format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:92
|
||||||
|
msgid "Select output file format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:94
|
||||||
|
msgid "Include stock items in sub locations"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:127
|
||||||
|
msgid "Destination stock location"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:133
|
||||||
|
msgid "Confirm movement of stock items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/forms.py:135
|
||||||
|
msgid "Set the destination as the default location for selected parts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:201
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"A stock item with this serial number already exists for template part {part}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:206
|
||||||
|
msgid "A stock item with this serial number already exists"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:225
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Part type ('{pf}') must be {pe}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:235 stock/models.py:244
|
||||||
|
msgid "Quantity must be 1 for item with a serial number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:236
|
||||||
|
msgid "Serial number cannot be set if quantity greater than 1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:252
|
||||||
|
msgid "Stock item cannot be created for a template Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:261
|
||||||
|
msgid "Item cannot belong to itself"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:434
|
||||||
|
msgid "Quantity must be integer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:440
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Quantity must not exceed available stock quantity ({n})"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:443 stock/models.py:446
|
||||||
|
msgid "Serial numbers must be a list of integers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:449
|
||||||
|
msgid "Quantity does not match serial numbers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:459
|
||||||
|
msgid "Serial numbers already exist: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:480
|
||||||
|
msgid "Add serial number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/models.py:483
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Serialized {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:396
|
||||||
|
msgid "Must enter integer value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:401
|
||||||
|
msgid "Quantity must be positive"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:408
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Quantity must not exceed {x}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:416
|
||||||
|
msgid "Confirm stock adjustment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:484
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Added stock to {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:499
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Removed stock from {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:512
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Counted stock for {n} items"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:540
|
||||||
|
msgid "No items were moved"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:543
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Moved {n} items to {dest}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:810
|
||||||
|
msgid "Invalid part selection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: stock/views.py:872
|
||||||
|
msgid "Created new stock item"
|
||||||
|
msgstr ""
|
7
Makefile
7
Makefile
@ -39,6 +39,11 @@ postgresql:
|
|||||||
apt-get install postgresql postgresql-contrib libpq-dev
|
apt-get install postgresql postgresql-contrib libpq-dev
|
||||||
pip3 install psycopg2
|
pip3 install psycopg2
|
||||||
|
|
||||||
|
# Update translation files
|
||||||
|
translate:
|
||||||
|
cd InvenTree && python3 manage.py makemessages
|
||||||
|
cd InvenTree && python3 manage.py compilemessages
|
||||||
|
|
||||||
# Run PEP style checks against source code
|
# Run PEP style checks against source code
|
||||||
style:
|
style:
|
||||||
flake8 InvenTree
|
flake8 InvenTree
|
||||||
@ -67,4 +72,4 @@ backup:
|
|||||||
cd InvenTree && python3 manage.py dbbackup
|
cd InvenTree && python3 manage.py dbbackup
|
||||||
cd InvenTree && python3 manage.py mediabackup
|
cd InvenTree && python3 manage.py mediabackup
|
||||||
|
|
||||||
.PHONY: clean migrate superuser install mysql postgresql static style test coverage docreqs docs backup update
|
.PHONY: clean migrate superuser install mysql postgresql translate static style test coverage docreqs docs backup update
|
@ -13,9 +13,9 @@ However, powerful business logic works in the background to ensure that stock tr
|
|||||||
|
|
||||||
For InvenTree documentation, refer to the [user documentation](https://inventree.github.io).
|
For InvenTree documentation, refer to the [user documentation](https://inventree.github.io).
|
||||||
|
|
||||||
## Code Documentation
|
## Developer Documentation
|
||||||
|
|
||||||
For project code documentation, refer to the [developer documentation](http://inventree.readthedocs.io/en/latest/) (auto-generated)
|
For site administrator and project code documentation, refer to the [developer documentation](http://inventree.readthedocs.io/en/latest/). This includes auto-generated documentation of the InvenTree python codebase.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
|
30
ci/check_locale_files.py
Normal file
30
ci/check_locale_files.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
""" Check that there are no database migration files which have not been committed. """
|
||||||
|
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
print("Checking for uncommitted locale files...")
|
||||||
|
|
||||||
|
cmd = ['git', 'status']
|
||||||
|
|
||||||
|
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
|
||||||
|
out, err = proc.communicate()
|
||||||
|
|
||||||
|
locales = []
|
||||||
|
|
||||||
|
for line in str(out.decode()).split('\n'):
|
||||||
|
# Check for any compiled translation files that have not been committed
|
||||||
|
if 'modified:' in line and '/locale/' in line and 'django.mo' in line:
|
||||||
|
locales.append(line)
|
||||||
|
|
||||||
|
if len(locales) > 0:
|
||||||
|
print("There are {n} unstaged locale files:".format(n=len(locales)))
|
||||||
|
|
||||||
|
for l in locales:
|
||||||
|
print(" - {l}".format(l=l))
|
||||||
|
|
||||||
|
sys.exit(len(locales))
|
@ -6,6 +6,8 @@ from __future__ import unicode_literals
|
|||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
print("Checking for unstaged migration files...")
|
||||||
|
|
||||||
cmd = ['git', 'ls-files', '--exclude-standard', '--others']
|
cmd = ['git', 'ls-files', '--exclude-standard', '--others']
|
||||||
|
|
||||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
@ -12,6 +12,7 @@ InvenTree Source Documentation
|
|||||||
Deployment<deploy>
|
Deployment<deploy>
|
||||||
Migrate Data<migrate>
|
Migrate Data<migrate>
|
||||||
Update InvenTree<update>
|
Update InvenTree<update>
|
||||||
|
Translations<translate>
|
||||||
Backup and Restore<backup>
|
Backup and Restore<backup>
|
||||||
Modal Forms<forms>
|
Modal Forms<forms>
|
||||||
Tables<tables>
|
Tables<tables>
|
||||||
|
@ -17,9 +17,11 @@ Requirements
|
|||||||
To install InvenTree you will need the following system components installed:
|
To install InvenTree you will need the following system components installed:
|
||||||
|
|
||||||
* python3
|
* python3
|
||||||
* python3-pip
|
* python3-pip (pip3)
|
||||||
* make
|
* make
|
||||||
|
|
||||||
|
Each of these programs need to be installed (e.g. using apt or similar) before running the ``make install`` script.
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@ -88,6 +90,7 @@ Other shorthand functions are provided for the development and testing process:
|
|||||||
* ``make migrate`` - Perform database migrations
|
* ``make migrate`` - Perform database migrations
|
||||||
* ``make mysql`` - Install packages required for MySQL database backend
|
* ``make mysql`` - Install packages required for MySQL database backend
|
||||||
* ``make postgresql`` - Install packages required for PostgreSQL database backend
|
* ``make postgresql`` - Install packages required for PostgreSQL database backend
|
||||||
|
* ``make translate`` - Compile language translation files (requires gettext system package)
|
||||||
* ``make backup`` - Backup database tables and media files
|
* ``make backup`` - Backup database tables and media files
|
||||||
* ``make test`` - Run all unit tests
|
* ``make test`` - Run all unit tests
|
||||||
* ``make coverage`` - Run all unit tests and generate code coverage report
|
* ``make coverage`` - Run all unit tests and generate code coverage report
|
||||||
|
16
docs/translate.rst
Normal file
16
docs/translate.rst
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Translations
|
||||||
|
============
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:titlesonly:
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Language Translation
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
InvenTree supports multi-language translation using the `Django Translation Framework <https://docs.djangoproject.com/en/2.2/topics/i18n/translation/>`_
|
||||||
|
|
||||||
|
Translation strings are located in the `InvenTree/locales/` directory, and translation files can be easily added here.
|
||||||
|
|
||||||
|
To set the default language, change the `langauge` setting in the `config.yaml` settings file.
|
||||||
|
|
||||||
|
To recompile the translation files (after adding new translation strings), run the command ``make translate`` from the root directory.
|
Loading…
x
Reference in New Issue
Block a user