diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ebb9d4a4fc..046826c928 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,6 +8,14 @@ No pushing to master! New featues must be submitted in a separate branch (one br Any required migration files **must** be included in the commit, or the pull-request will be rejected. If you change the underlying database schema, make sure you run `make migrate` and commit the migration files before submitting the PR. +## Update Translation Files + +Any PRs which update translatable strings (i.e. text strings that will appear in the web-front UI) must also update the translation (locale) files to include hooks for the translated strings. + +*This does not mean that all translations must be provided, but that the translation files must include locations for the translated strings to be written.* + +To perform this step, simply run `make_translate` from the top level directory before submitting the PR. + ## Testing Any new code should be covered by unit tests - a submitted PR may not be accepted if the code coverage is decreased. diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index c37dd0f0ae..de659e0f1f 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-26 00:37+0000\n" +"POT-Creation-Date: 2019-09-27 00:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -149,7 +149,7 @@ msgstr "" msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/views.py:289 stock/views.py:831 +#: build/views.py:289 stock/views.py:834 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "" @@ -222,7 +222,7 @@ msgstr "" msgid "Company" msgstr "" -#: order/models.py:156 order/models.py:201 part/views.py:1030 +#: order/models.py:156 order/models.py:201 part/views.py:1032 #: stock/models.py:437 msgid "Quantity must be greater than zero" msgstr "" @@ -345,32 +345,188 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/views.py:194 +#: part/templates/part/category.html:13 part/templates/part/category.html:69 +msgid "Part Categories" +msgstr "" + +#: part/templates/part/category.html:14 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:34 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:37 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:41 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:46 part/templates/part/detail.html:63 +msgid "Default Location" +msgstr "" + +#: part/templates/part/category.html:52 part/templates/part/detail.html:43 +msgid "Keywords" +msgstr "" + +#: part/templates/part/category.html:57 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:61 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:66 part/templates/part/detail.html:8 +msgid "Part Details" +msgstr "" + +#: part/templates/part/category.html:73 +msgid "Parts" +msgstr "" + +#: part/templates/part/detail.html:16 +msgid "Part name" +msgstr "" + +#: part/templates/part/detail.html:21 +msgid "IPN" +msgstr "" + +#: part/templates/part/detail.html:27 +msgid "Revision" +msgstr "" + +#: part/templates/part/detail.html:32 +msgid "Description" +msgstr "" + +#: part/templates/part/detail.html:37 +msgid "Variant Of" +msgstr "" + +#: part/templates/part/detail.html:49 +msgid "URL" +msgstr "" + +#: part/templates/part/detail.html:54 +msgid "Category" +msgstr "" + +#: part/templates/part/detail.html:69 +msgid "Default Supplier" +msgstr "" + +#: part/templates/part/detail.html:76 +msgid "Units" +msgstr "" + +#: part/templates/part/detail.html:81 +msgid "Minimum Stock" +msgstr "" + +#: part/templates/part/detail.html:90 +msgid "Virtual" +msgstr "" + +#: part/templates/part/detail.html:93 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:95 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:99 +msgid "Assembly" +msgstr "" + +#: part/templates/part/detail.html:102 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:104 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:108 +msgid "Component" +msgstr "" + +#: part/templates/part/detail.html:111 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:113 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:117 +msgid "Trackable" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:122 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:126 +msgid "Purchaseable" +msgstr "" + +#: part/templates/part/detail.html:129 part/templates/part/detail.html:131 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:136 +msgid "Sellable" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:141 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:151 +msgid "Notes" +msgstr "" + +#: part/views.py:196 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:771 +#: part/views.py:773 msgid "No BOM file provided" msgstr "" -#: part/views.py:1032 +#: part/views.py:1034 msgid "Enter a valid quantity" msgstr "" -#: part/views.py:1056 part/views.py:1059 +#: part/views.py:1058 part/views.py:1061 msgid "Select valid part" msgstr "" -#: part/views.py:1065 +#: part/views.py:1067 msgid "Duplicate part selected" msgstr "" -#: part/views.py:1093 +#: part/views.py:1095 msgid "Select a part" msgstr "" -#: part/views.py:1097 +#: part/views.py:1099 msgid "Specify quantity" msgstr "" @@ -459,51 +615,80 @@ msgstr "" msgid "Serialized {n} items" msgstr "" -#: stock/views.py:396 +#: stock/templates/stock/location.html:37 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:40 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:44 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:48 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:52 +#: stock/templates/stock/location.html:64 +msgid "Stock Items" +msgstr "" + +#: stock/templates/stock/location.html:57 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:60 +msgid "Stock Locations" +msgstr "" + +#: stock/views.py:399 msgid "Must enter integer value" msgstr "" -#: stock/views.py:401 +#: stock/views.py:404 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:408 +#: stock/views.py:411 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:416 +#: stock/views.py:419 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:484 +#: stock/views.py:487 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:499 +#: stock/views.py:502 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:512 +#: stock/views.py:515 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:540 +#: stock/views.py:543 msgid "No items were moved" msgstr "" -#: stock/views.py:543 +#: stock/views.py:546 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:810 +#: stock/views.py:813 msgid "Invalid part selection" msgstr "" -#: stock/views.py:872 +#: stock/views.py:875 msgid "Created new stock item" msgstr "" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index c37dd0f0ae..de659e0f1f 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-26 00:37+0000\n" +"POT-Creation-Date: 2019-09-27 00:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -149,7 +149,7 @@ msgstr "" msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/views.py:289 stock/views.py:831 +#: build/views.py:289 stock/views.py:834 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "" @@ -222,7 +222,7 @@ msgstr "" msgid "Company" msgstr "" -#: order/models.py:156 order/models.py:201 part/views.py:1030 +#: order/models.py:156 order/models.py:201 part/views.py:1032 #: stock/models.py:437 msgid "Quantity must be greater than zero" msgstr "" @@ -345,32 +345,188 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/views.py:194 +#: part/templates/part/category.html:13 part/templates/part/category.html:69 +msgid "Part Categories" +msgstr "" + +#: part/templates/part/category.html:14 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:34 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:37 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:41 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:46 part/templates/part/detail.html:63 +msgid "Default Location" +msgstr "" + +#: part/templates/part/category.html:52 part/templates/part/detail.html:43 +msgid "Keywords" +msgstr "" + +#: part/templates/part/category.html:57 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:61 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:66 part/templates/part/detail.html:8 +msgid "Part Details" +msgstr "" + +#: part/templates/part/category.html:73 +msgid "Parts" +msgstr "" + +#: part/templates/part/detail.html:16 +msgid "Part name" +msgstr "" + +#: part/templates/part/detail.html:21 +msgid "IPN" +msgstr "" + +#: part/templates/part/detail.html:27 +msgid "Revision" +msgstr "" + +#: part/templates/part/detail.html:32 +msgid "Description" +msgstr "" + +#: part/templates/part/detail.html:37 +msgid "Variant Of" +msgstr "" + +#: part/templates/part/detail.html:49 +msgid "URL" +msgstr "" + +#: part/templates/part/detail.html:54 +msgid "Category" +msgstr "" + +#: part/templates/part/detail.html:69 +msgid "Default Supplier" +msgstr "" + +#: part/templates/part/detail.html:76 +msgid "Units" +msgstr "" + +#: part/templates/part/detail.html:81 +msgid "Minimum Stock" +msgstr "" + +#: part/templates/part/detail.html:90 +msgid "Virtual" +msgstr "" + +#: part/templates/part/detail.html:93 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:95 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:99 +msgid "Assembly" +msgstr "" + +#: part/templates/part/detail.html:102 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:104 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:108 +msgid "Component" +msgstr "" + +#: part/templates/part/detail.html:111 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:113 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:117 +msgid "Trackable" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:122 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:126 +msgid "Purchaseable" +msgstr "" + +#: part/templates/part/detail.html:129 part/templates/part/detail.html:131 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:136 +msgid "Sellable" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:141 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:151 +msgid "Notes" +msgstr "" + +#: part/views.py:196 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:771 +#: part/views.py:773 msgid "No BOM file provided" msgstr "" -#: part/views.py:1032 +#: part/views.py:1034 msgid "Enter a valid quantity" msgstr "" -#: part/views.py:1056 part/views.py:1059 +#: part/views.py:1058 part/views.py:1061 msgid "Select valid part" msgstr "" -#: part/views.py:1065 +#: part/views.py:1067 msgid "Duplicate part selected" msgstr "" -#: part/views.py:1093 +#: part/views.py:1095 msgid "Select a part" msgstr "" -#: part/views.py:1097 +#: part/views.py:1099 msgid "Specify quantity" msgstr "" @@ -459,51 +615,80 @@ msgstr "" msgid "Serialized {n} items" msgstr "" -#: stock/views.py:396 +#: stock/templates/stock/location.html:37 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:40 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:44 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:48 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:52 +#: stock/templates/stock/location.html:64 +msgid "Stock Items" +msgstr "" + +#: stock/templates/stock/location.html:57 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:60 +msgid "Stock Locations" +msgstr "" + +#: stock/views.py:399 msgid "Must enter integer value" msgstr "" -#: stock/views.py:401 +#: stock/views.py:404 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:408 +#: stock/views.py:411 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:416 +#: stock/views.py:419 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:484 +#: stock/views.py:487 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:499 +#: stock/views.py:502 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:512 +#: stock/views.py:515 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:540 +#: stock/views.py:543 msgid "No items were moved" msgstr "" -#: stock/views.py:543 +#: stock/views.py:546 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:810 +#: stock/views.py:813 msgid "Invalid part selection" msgstr "" -#: stock/views.py:872 +#: stock/views.py:875 msgid "Created new stock item" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index c37dd0f0ae..de659e0f1f 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-26 00:37+0000\n" +"POT-Creation-Date: 2019-09-27 00:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -149,7 +149,7 @@ msgstr "" msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/views.py:289 stock/views.py:831 +#: build/views.py:289 stock/views.py:834 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "" @@ -222,7 +222,7 @@ msgstr "" msgid "Company" msgstr "" -#: order/models.py:156 order/models.py:201 part/views.py:1030 +#: order/models.py:156 order/models.py:201 part/views.py:1032 #: stock/models.py:437 msgid "Quantity must be greater than zero" msgstr "" @@ -345,32 +345,188 @@ msgstr "" msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/views.py:194 +#: part/templates/part/category.html:13 part/templates/part/category.html:69 +msgid "Part Categories" +msgstr "" + +#: part/templates/part/category.html:14 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:34 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:37 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:41 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:46 part/templates/part/detail.html:63 +msgid "Default Location" +msgstr "" + +#: part/templates/part/category.html:52 part/templates/part/detail.html:43 +msgid "Keywords" +msgstr "" + +#: part/templates/part/category.html:57 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:61 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:66 part/templates/part/detail.html:8 +msgid "Part Details" +msgstr "" + +#: part/templates/part/category.html:73 +msgid "Parts" +msgstr "" + +#: part/templates/part/detail.html:16 +msgid "Part name" +msgstr "" + +#: part/templates/part/detail.html:21 +msgid "IPN" +msgstr "" + +#: part/templates/part/detail.html:27 +msgid "Revision" +msgstr "" + +#: part/templates/part/detail.html:32 +msgid "Description" +msgstr "" + +#: part/templates/part/detail.html:37 +msgid "Variant Of" +msgstr "" + +#: part/templates/part/detail.html:49 +msgid "URL" +msgstr "" + +#: part/templates/part/detail.html:54 +msgid "Category" +msgstr "" + +#: part/templates/part/detail.html:69 +msgid "Default Supplier" +msgstr "" + +#: part/templates/part/detail.html:76 +msgid "Units" +msgstr "" + +#: part/templates/part/detail.html:81 +msgid "Minimum Stock" +msgstr "" + +#: part/templates/part/detail.html:90 +msgid "Virtual" +msgstr "" + +#: part/templates/part/detail.html:93 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:95 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:99 +msgid "Assembly" +msgstr "" + +#: part/templates/part/detail.html:102 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:104 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:108 +msgid "Component" +msgstr "" + +#: part/templates/part/detail.html:111 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:113 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:117 +msgid "Trackable" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:122 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:126 +msgid "Purchaseable" +msgstr "" + +#: part/templates/part/detail.html:129 part/templates/part/detail.html:131 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:136 +msgid "Sellable" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:141 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:151 +msgid "Notes" +msgstr "" + +#: part/views.py:196 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:771 +#: part/views.py:773 msgid "No BOM file provided" msgstr "" -#: part/views.py:1032 +#: part/views.py:1034 msgid "Enter a valid quantity" msgstr "" -#: part/views.py:1056 part/views.py:1059 +#: part/views.py:1058 part/views.py:1061 msgid "Select valid part" msgstr "" -#: part/views.py:1065 +#: part/views.py:1067 msgid "Duplicate part selected" msgstr "" -#: part/views.py:1093 +#: part/views.py:1095 msgid "Select a part" msgstr "" -#: part/views.py:1097 +#: part/views.py:1099 msgid "Specify quantity" msgstr "" @@ -459,51 +615,80 @@ msgstr "" msgid "Serialized {n} items" msgstr "" -#: stock/views.py:396 +#: stock/templates/stock/location.html:37 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:40 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:44 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:48 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:52 +#: stock/templates/stock/location.html:64 +msgid "Stock Items" +msgstr "" + +#: stock/templates/stock/location.html:57 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:60 +msgid "Stock Locations" +msgstr "" + +#: stock/views.py:399 msgid "Must enter integer value" msgstr "" -#: stock/views.py:401 +#: stock/views.py:404 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:408 +#: stock/views.py:411 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:416 +#: stock/views.py:419 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:484 +#: stock/views.py:487 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:499 +#: stock/views.py:502 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:512 +#: stock/views.py:515 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:540 +#: stock/views.py:543 msgid "No items were moved" msgstr "" -#: stock/views.py:543 +#: stock/views.py:546 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:810 +#: stock/views.py:813 msgid "Invalid part selection" msgstr "" -#: stock/views.py:872 +#: stock/views.py:875 msgid "Created new stock item" msgstr "" diff --git a/InvenTree/part/templates/part/category.html b/InvenTree/part/templates/part/category.html index f6c49b2094..90c0503783 100644 --- a/InvenTree/part/templates/part/category.html +++ b/InvenTree/part/templates/part/category.html @@ -1,5 +1,6 @@ {% extends "part/part_app_base.html" %} {% load static %} +{% load i18n %} {% block content %} @@ -9,8 +10,8 @@

{{ category.name }}

{{ category.description }}

{% else %} -

Part Categories

-

All parts

+

{% trans "Part Categories" %}

+

{% trans "All parts" %}

{% endif %}

@@ -30,37 +31,49 @@
{% if category %} -

Category Details

+

{% trans "Category Details" %}

- + - + {% if category.default_location %} - + {% endif %} {% if category.default_keywords %} - + {% endif %} - + - +
Category Path{% trans "Category Path" %} {{ category.pathstring }}
Category Description{% trans "Category Description" %} {{ category.description }}
Default Location{% trans "Default Location" %} {{ category.default_location.pathstring }}
Keywords{% trans "Keywords" %} {{ category.default_keywords }}
Subcategories{% trans "Subcategories" %} {{ category.children.count }}
Parts (Including subcategories){% trans "Parts (Including subcategories)" %} {{ category.partcount }}
+ {% else %} +

{% trans "Part Details" %}

+ + + + + + + + + +
{% trans "Part Categories" %}{{ category_count }}
{% trans "Parts" %}{{ part_count }}
{% endif %}
diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index d8bb40d792..47c530fb84 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -1,10 +1,11 @@ {% extends "part/part_base.html" %} {% load static %} +{% load i18n %} {% block details %} {% include 'part/tabs.html' with tab='detail' %} -

Part Details

+

{% trans "Part Details" %}


@@ -12,45 +13,45 @@
- + {% if part.IPN %} - + {% endif %} {% if part.revision %} - + {% endif %} - + {% if part.variant_of %} - + {% endif %} {% if part.keywords %} - + {% endif %} {% if part.URL %} - + {% endif %} - + {% if part.default_location %} - + {% endif %} {% if part.default_supplier %} - + {% endif %} - + {% if part.minimum_stock > 0 %} - + {% endif %} @@ -86,58 +87,58 @@
Part name{% trans "Part name" %} {{ part.name }}
IPN{% trans "IPN" %} {{ part.IPN }}
Revision{% trans "Revision" %} {{ part.revision }}
Description{% trans "Description" %} {{ part.description }}
Variant Of{% trans "Variant Of" %} {{ part.variant_of.full_name }}
Keywords{% trans "Keywords" %} {{ part.keywords }}
URL{% trans "URL" %} {{ part.URL }}
Category{% trans "Category" %} {% if part.category %} {{ part.category.pathstring }} @@ -59,25 +60,25 @@
Default Location{% trans "Default Location" %} {{ part.default_location.pathstring }}
Default Supplier{% trans "Default Supplier" %} {{ part.default_supplier.supplier.name }} | {{ part.default_supplier.SKU }}
Units{% trans "Units" %} {{ part.units }}
Minimum Stock{% trans "Minimum Stock" %} {{ part.minimum_stock }}
- + {% if part.virtual %} - + {% else %} - + {% endif %} - + {% if part.assembly %} - + {% else %} - + {% endif %} - + {% if part.component %} - + {% else %} - + {% endif %} - + {% if part.trackable %} - + {% else %} - + {% endif %} - + {% if part.purchaseable %} - + {% else %} - + {% endif %} {% if 0 %} - + {% if part.salable %} - + {% else %} - + {% endif %} {% endif %} @@ -147,7 +148,7 @@ {% if part.notes %}
-
Notes
+
{% trans "Notes" %}
{{ part.notes }}
{% endif %} diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index a736b9275e..6d4eb5203b 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -56,6 +56,8 @@ class PartIndex(ListView): children = PartCategory.objects.filter(parent=None) context['children'] = children + context['category_count'] = PartCategory.objects.count() + context['part_count'] = Part.objects.count() return context diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index 45743bbd5d..baa7511726 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -1,5 +1,6 @@ {% extends "stock/stock_app_base.html" %} {% load static %} +{% load i18n %} {% block content %}
@@ -33,25 +34,37 @@
{% if location %} -

Location Details

+

{% trans "Location Details" %}

Virtual{% trans "Virtual" %} {% include "slide.html" with state=part.virtual field='virtual' %}Part is virtual (not a physical part){% trans "Part is virtual (not a physical part)" %}Part is not a virtual part{% trans "Part is not a virtual part" %}
Assembly{% trans "Assembly" %} {% include "slide.html" with state=part.assembly field='assembly' %}Part can be assembled from other parts{% trans "Part can be assembled from other parts" %}Part cannot be assembled from other parts{% trans "Part cannot be assembled from other parts" %}
Component{% trans "Component" %} {% include "slide.html" with state=part.component field='component' %}Part can be used in assemblies{% trans "Part can be used in assemblies" %}Part cannot be used in assemblies{% trans "Part cannot be used in assemblies" %}
Trackable{% trans "Trackable" %} {% include "slide.html" with state=part.trackable field='trackable' %}Part stock is tracked by serial number{% trans "Part stock is tracked by serial number" %}Part stock is not tracked by serial number{% trans "Part stock is not tracked by serial number" %}
Purchaseable{% trans "Purchaseable" %} {% include "slide.html" with state=part.purchaseable field='purchaseable' %}Part can be purchased from external suppliers{% trans "Part can be purchased from external suppliers" %}Part can be purchased from external suppliers{% trans "Part can be purchased from external suppliers" %}
Sellable{% trans "Sellable" %} {% include "slide.html" with state=part.salable field='salable' %}Part can be sold to customers{% trans "Part can be sold to customers" %}Part cannot be sold to customers{% trans "Part cannot be sold to customers" %}
- + - + - + - +
Location Path{% trans "Location Path" %} {{ location.pathstring }}
Location Description{% trans "Location Description" %} {{ location.description }}
Sublocations{% trans "Sublocations" %} {{ location.children.count }}
Stock Items{% trans "Stock Items" %} {{ location.item_count }}
+ {% else %} +

{% trans "Stock Details" %}

+ + + + + + + + + +
{% trans "Stock Locations" %}{{ loc_count }}
{% trans "Stock Items" %}{{ stock_count }}
{% endif %}
diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index d8833d59d0..f7bbe9ad21 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -53,6 +53,9 @@ class StockIndex(ListView): context['locations'] = locations context['items'] = StockItem.objects.all() + context['loc_count'] = StockLocation.objects.count() + context['stock_count'] = StockItem.objects.count() + return context diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index 51f396df8b..94fb3bc44b 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -113,14 +113,8 @@ $(document).ready(function () { {% block js_ready %} {% endblock %} - /* Run document-ready scripts. - * Ref: static/script/inventree/inventree.js - */ inventreeDocReady(); - /* Display any cached alert messages - * Ref: static/script/inventree/notification.js - */ showCachedAlerts(); }); diff --git a/ci/check_locale_files.py b/ci/check_locale_files.py index b15aa80765..9995ceaec5 100644 --- a/ci/check_locale_files.py +++ b/ci/check_locale_files.py @@ -18,7 +18,7 @@ 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: + if 'modified:' in line and '/locale/' in line and 'django.po' in line: locales.append(line) if len(locales) > 0: diff --git a/docs/translate.rst b/docs/translate.rst index 3c2ad0d5f4..ba62dc6780 100644 --- a/docs/translate.rst +++ b/docs/translate.rst @@ -11,6 +11,6 @@ InvenTree supports multi-language translation using the `Django Translation Fram 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 set the default language, change the `language` 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.